/* =========================================================================
   TOKENS — 7 temas (RGB sem unidade, tokens --snx-*)

   Tema controla SOMENTE cor (paleta). Tipografia (UI + mono) e escolhida
   separadamente pelo usuario via PreferenciasUsuarioService — aplicada via
   `<html style="--snx-font-ui: ...; --snx-font-mono: ...;">` no shell.
   ========================================================================= */
:root{
  /* emerald (default) — espelho do bloco [data-theme="emerald"] refinado */
  --snx-app: 243 248 246;
  --snx-surface: 255 255 255;
  --snx-surface-muted: 248 251 249;
  --snx-surface-soft: 237 246 241;
  --snx-surface-sunk: 228 240 233;
  --snx-strong: 15 42 32;
  --snx-muted: 82 106 96;
  --snx-subtle: 132 158 148;
  --snx-border-default: 210 226 218;
  --snx-border-strong: 184 207 195;
  --snx-primary: 13 120 78;
  --snx-primary-hover: 10 96 61;
  --snx-primary-soft: 216 238 225;
  --snx-on-primary: 255 255 255;
  --snx-success: 22 130 78;
  --snx-warning: 184 117 22;
  --snx-danger: 180 40 48;
  --snx-info: 36 112 155;
  --snx-success-soft: 214 237 222;
  --snx-warning-soft: 245 231 204;
  --snx-danger-soft: 245 216 218;
  --snx-info-soft: 214 231 241;
  --snx-chrome-bg: 13 76 58;
  --snx-chrome-bg-soft: 18 94 72;
  --snx-chrome-text: 236 245 241;
  --snx-chrome-muted: 157 192 176;
  --snx-chrome-border: 32 96 74;
  --snx-chrome-active: 255 255 255;
  --snx-shadow: 15 42 32;

  /* dimensões */
  --snx-row: 32px;
  --snx-row-sm: 28px;
  --snx-row-lg: 36px;
  --snx-radius-sm: 4px;
  --snx-radius: 3px;
  --snx-radius-2: 6px;
  --snx-radius-lg: 10px;
  --snx-shadow-sm: 0 1px 0 rgb(var(--snx-shadow) / .04);
  --snx-shadow-lg: 0 6px 24px rgb(var(--snx-shadow) / .06), 0 2px 6px rgb(var(--snx-shadow) / .04);
  --snx-sidebar-width: 15.5rem;
  --snx-mural-sidebar: 280px;
  --snx-fixed-actions-height: 56px;

  /* paleta de avatar (mural §17.12) — selecionada por hash determinístico do canalId/userId */
  --snx-avatar-1: 42 111 79;
  --snx-avatar-2: 122 92 46;
  --snx-avatar-3: 61 90 130;
  --snx-avatar-4: 94 58 130;
  --snx-avatar-5: 122 61 61;
  --snx-avatar-6: 160 80 48;
  --snx-avatar-7: 47 116 130;
  --snx-avatar-8: 130 76 110;

  /* Tipografia — defaults (Geist + JetBrains Mono). Temas controlam SO COR; o
     usuario escolhe as fontes em /app/configuracoes/aparencia, e o ControllerAdvice
     aplica via `<html style="--snx-font-ui: ...; --snx-font-mono: ...">`, que
     sobrescreve estes defaults para a sessao do usuario. */
  --snx-font-ui: "Geist", "Inter Tight", system-ui, -apple-system, "Segoe UI", sans-serif;
  --snx-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

[data-theme="emerald"]{
  /* EMERALD — refinamento premium do tema institucional default.
     Redeclaracao explicita necessaria para que `<div data-theme="emerald">`
     aninhado dentro de `<html data-theme="X">` consiga "voltar" ao default
     (preview da galeria em /app/configuracoes/aparencia).
     Calibrado para contraste AAA no texto principal (#0f2a20 sobre #f3f8f6 ~13:1),
     hierarquia tonal clara em 5 niveis de superficie, borders firmes para
     legibilidade de listas/tabelas. */

  /* Superficies: 5 niveis tonais bem separados */
  --snx-app: 243 248 246;          /* fundo da página — sage cream */
  --snx-surface: 255 255 255;      /* cards/painéis — true white pop */
  --snx-surface-muted: 248 251 249; /* distinta de app (era idêntica) */
  --snx-surface-soft: 237 246 241;  /* hover de itens */
  --snx-surface-sunk: 228 240 233;  /* recessos profundos */

  /* Texto: hierarquia AAA no principal */
  --snx-strong: 15 42 32;           /* 13:1 vs app — AAA */
  --snx-muted: 82 106 96;           /* 5.7:1 vs app — AA */
  --snx-subtle: 132 158 148;        /* labels/dicas */

  /* Borders: firmes para tables/listas */
  --snx-border-default: 210 226 218; /* firmeza visível */
  --snx-border-strong: 184 207 195;  /* contorno de elementos focados */

  /* Primary verde institucional */
  --snx-primary: 13 120 78;          /* sindicato green */
  --snx-primary-hover: 10 96 61;     /* darken para hover/pressed */
  --snx-primary-soft: 216 238 225;   /* pastel verde para bg selecionado */
  --snx-on-primary: 255 255 255;

  /* Status: paleta saturada para alta legibilidade */
  --snx-success: 22 130 78;
  --snx-warning: 184 117 22;
  --snx-danger: 180 40 48;
  --snx-info: 36 112 155;
  --snx-success-soft: 214 237 222;
  --snx-warning-soft: 245 231 204;
  --snx-danger-soft: 245 216 218;
  --snx-info-soft: 214 231 241;

  /* Chrome (sidebar/footer): deep emerald */
  --snx-chrome-bg: 13 76 58;
  --snx-chrome-bg-soft: 18 94 72;   /* lift para hover */
  --snx-chrome-text: 236 245 241;
  --snx-chrome-muted: 157 192 176;
  --snx-chrome-border: 32 96 74;
  --snx-chrome-active: 255 255 255; /* brilho do item ativo */

  --snx-shadow: 15 42 32;
}

/* =========================================================================
   OCEAN — refinamento premium da paleta turquesa marítima.
   Calibrado para contraste AAA no texto (#0e2830 sobre #eef7f9 ~13:1).
   Status definidos explicitamente (não mais herdados de :root emerald),
   superfícies em 5 níveis ordenados, borders firmes.
   ========================================================================= */
[data-theme="ocean"]{
  /* Superfícies: 5 níveis com transições suaves de tom teal-cream */
  --snx-app: 238 247 249;          /* fundo — cream marítimo */
  --snx-surface: 252 254 254;      /* cards — near white */
  --snx-surface-muted: 246 251 252; /* meio-termo (era idêntica a app) */
  --snx-surface-soft: 226 240 244;  /* hover */
  --snx-surface-sunk: 210 230 236;  /* sunk profundo */

  /* Texto: contraste AAA */
  --snx-strong: 14 40 48;           /* 13:1 vs app — AAA */
  --snx-muted: 70 110 122;          /* 5.5:1 — AA */
  --snx-subtle: 122 158 170;

  /* Borders firmes */
  --snx-border-default: 195 218 224;
  --snx-border-strong: 170 200 210;

  /* Primary teal marítimo */
  --snx-primary: 22 116 134;
  --snx-primary-hover: 14 92 108;
  --snx-primary-soft: 210 232 238;
  --snx-on-primary: 252 254 254;

  /* Status: paleta saturada coerente com tons frios do Ocean */
  --snx-success: 17 130 96;         /* teal-green */
  --snx-warning: 200 130 30;        /* amber */
  --snx-danger: 180 50 60;          /* coral red */
  --snx-info: 22 116 134;           /* mesmo do primary (Ocean é teal-themed) */
  --snx-success-soft: 215 238 230;
  --snx-warning-soft: 248 230 200;
  --snx-danger-soft: 248 218 222;
  --snx-info-soft: 210 232 238;

  /* Chrome (sidebar/footer): deep ocean teal */
  --snx-chrome-bg: 14 70 84;
  --snx-chrome-bg-soft: 22 88 104;  /* lift para hover */
  --snx-chrome-text: 224 240 246;
  --snx-chrome-muted: 144 178 192;
  --snx-chrome-border: 28 96 114;
  --snx-chrome-active: 255 255 255;

  --snx-shadow: 14 40 48;
}

/* =========================================================================
   WIN10 — Flat moderno (categoria ESTILO). Azul institucional #0078D7,
   cantos quase retos (2px), sombras sutis. Sem gradientes.
   ========================================================================= */
[data-theme="win10"]{
  --snx-app: 243 243 243;
  --snx-surface: 255 255 255;
  --snx-surface-muted: 248 248 248;
  --snx-surface-soft: 240 240 240;
  --snx-surface-sunk: 230 230 230;
  --snx-strong: 32 32 32;
  --snx-muted: 96 96 96;
  --snx-subtle: 138 138 138;
  --snx-border-default: 217 217 217;
  --snx-border-strong: 173 173 173;
  --snx-primary: 0 120 215;
  --snx-primary-hover: 0 99 177;
  --snx-primary-soft: 207 232 249;
  --snx-on-primary: 255 255 255;
  --snx-success: 16 124 16;
  --snx-warning: 202 122 0;
  --snx-danger: 196 43 28;
  --snx-info: 0 120 215;
  --snx-success-soft: 220 240 220;
  --snx-warning-soft: 252 232 196;
  --snx-danger-soft: 252 220 216;
  --snx-info-soft: 207 232 249;
  /* taskbar Win10 default = preto translucido — chrome bem escuro */
  --snx-chrome-bg: 32 32 32;
  --snx-chrome-bg-soft: 44 44 44;
  --snx-chrome-text: 255 255 255;
  --snx-chrome-muted: 168 168 168;
  --snx-chrome-border: 16 16 16;
  --snx-chrome-active: 0 120 215;
  --snx-shadow: 0 0 0;

  --snx-radius-sm: 0;
  --snx-radius: 2px;
  --snx-radius-2: 2px;
  --snx-radius-lg: 4px;
  --snx-shadow-lg: 0 2px 8px rgb(0 0 0 / .12), 0 1px 2px rgb(0 0 0 / .08);
}

/* Win10 e flat — overrides minimos. Botoes com border 1px, hover muda fundo
   (sem gradient). Foco com outline azul solido (focus ring Win10). */
[data-theme="win10"] .btn{
  border: 1px solid rgb(var(--snx-border-strong));
  box-shadow: none;
  font-weight: 500;
}
[data-theme="win10"] .btn:hover{
  background: rgb(var(--snx-surface-soft));
}
[data-theme="win10"] .btn--primary{
  background: rgb(var(--snx-primary));
  color: rgb(255 255 255);
  border: 1px solid rgb(var(--snx-primary));
}
[data-theme="win10"] .btn--primary:hover{
  background: rgb(var(--snx-primary-hover));
  border-color: rgb(var(--snx-primary-hover));
}
[data-theme="win10"] .f__input:focus,
[data-theme="win10"] .btn:focus-visible{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 1px;
  box-shadow: none;
}
[data-theme="win10"] .panel,
[data-theme="win10"] .kpi{
  box-shadow: 0 1px 3px rgb(0 0 0 / .08);
}
[data-theme="win10"] .sb,
[data-theme="win10"] .tb{
  box-shadow: none;
  border-color: rgb(var(--snx-chrome-border));
}

/* =========================================================================
   HIGH_CONTRAST — acessibilidade WCAG AAA (categoria ESTILO). Preto puro
   sobre branco puro + amarelo de seguranca. Bordas grossas, fonte 1.15x,
   peso 600+ em tudo, foco com outline 4px amarelo.
   ========================================================================= */
[data-theme="high_contrast"]{
  --snx-app: 255 255 255;
  --snx-surface: 255 255 255;
  --snx-surface-muted: 248 248 248;
  --snx-surface-soft: 240 240 240;
  --snx-surface-sunk: 230 230 230;
  --snx-strong: 0 0 0;
  --snx-muted: 32 32 32;
  --snx-subtle: 80 80 80;
  --snx-border-default: 0 0 0;
  --snx-border-strong: 0 0 0;
  --snx-primary: 0 0 0;
  --snx-primary-hover: 32 32 32;
  --snx-primary-soft: 255 215 0;
  --snx-on-primary: 255 215 0;
  --snx-success: 0 96 0;
  --snx-warning: 168 96 0;
  --snx-danger: 168 0 0;
  --snx-info: 0 64 168;
  --snx-success-soft: 220 240 220;
  --snx-warning-soft: 252 232 196;
  --snx-danger-soft: 252 220 220;
  --snx-info-soft: 220 232 252;
  --snx-chrome-bg: 0 0 0;
  --snx-chrome-bg-soft: 16 16 16;
  --snx-chrome-text: 255 255 255;
  --snx-chrome-muted: 220 220 220;
  --snx-chrome-border: 0 0 0;
  --snx-chrome-active: 255 215 0;
  --snx-shadow: 0 0 0;

  --snx-radius-sm: 0;
  --snx-radius: 2px;
  --snx-radius-2: 2px;
  --snx-radius-lg: 4px;
  --snx-shadow-sm: none;
  --snx-shadow-lg: none;
}
[data-theme="high_contrast"] body{
  font-size: 15px;
  font-weight: 500;
}
[data-theme="high_contrast"] .btn,
[data-theme="high_contrast"] .panel,
[data-theme="high_contrast"] .kpi,
[data-theme="high_contrast"] .f__input,
[data-theme="high_contrast"] .tbl,
[data-theme="high_contrast"] .alert{
  border: 2px solid rgb(0 0 0);
  box-shadow: none;
  font-weight: 600;
}
[data-theme="high_contrast"] .btn--primary{
  background: rgb(0 0 0);
  color: rgb(255 215 0);
  border: 2px solid rgb(0 0 0);
  font-weight: 700;
}
[data-theme="high_contrast"] .btn--primary:hover{
  background: rgb(255 215 0);
  color: rgb(0 0 0);
}
[data-theme="high_contrast"] .btn:focus-visible,
[data-theme="high_contrast"] .f__input:focus{
  outline: 4px solid rgb(255 215 0);
  outline-offset: 2px;
  box-shadow: none;
}
[data-theme="high_contrast"] h1,
[data-theme="high_contrast"] h2,
[data-theme="high_contrast"] .ph__title{
  font-weight: 800;
}

/* =========================================================================
   SOLARIZED LIGHT — paleta classica de IDE (categoria ESTILO). Bege quente
   #FDF6E3 + tons calibrados para legibilidade longa (Ethan Schoonover, MIT).
   Source Code Pro mono via Google Fonts. Vibe: IDE de programador veterano.
   ========================================================================= */
[data-theme="solarized"]{
  /* SOLARIZED LIGHT — refinamento premium da paleta clássica de Ethan Schoonover.
     Inversão corrigida: surface agora é mais claro que app (cards "pop"
     sobre a página bege quente). Surface-muted distinto (era duplicado),
     status colors mantidos com paleta oficial Solarized. Chrome em base02
     deep teal, active item em base3 cream brilhante. */

  /* Superfícies: 5 níveis (base2 page < base3 surface — convenção padrão).
     A versão anterior tinha surface DARKER que app, contra-intuitivo. */
  --snx-app: 238 232 213;          /* base2 #EEE8D5 — page bg */
  --snx-surface: 253 246 227;      /* base3 #FDF6E3 — cards pop */
  --snx-surface-muted: 245 239 220; /* meio-termo (era = surface) */
  --snx-surface-soft: 230 224 204;  /* hover */
  --snx-surface-sunk: 220 214 192;  /* sunk profundo */

  /* Texto: paleta base Solarized */
  --snx-strong: 88 110 117;         /* base01 #586E75 — 6.5:1 vs app — AA */
  --snx-muted: 101 123 131;         /* base00 #657B83 — 5.2:1 — AA */
  --snx-subtle: 147 161 161;        /* base1 #93A1A1 */

  /* Borders firmes para visual "IDE" */
  --snx-border-default: 215 209 187;
  --snx-border-strong: 147 161 161; /* base1 — contornos fortes */

  /* Primary blue Solarized */
  --snx-primary: 38 139 210;        /* #268BD2 */
  --snx-primary-hover: 22 116 184;
  --snx-primary-soft: 215 230 240;
  --snx-on-primary: 253 246 227;    /* base3 cream sobre azul */

  /* Status: paleta oficial Solarized accent */
  --snx-success: 133 153 0;         /* green #859900 */
  --snx-warning: 181 137 0;         /* yellow #B58900 */
  --snx-danger: 220 50 47;          /* red #DC322F */
  --snx-info: 42 161 152;           /* cyan #2AA198 */
  --snx-success-soft: 226 232 200;
  --snx-warning-soft: 244 232 200;
  --snx-danger-soft: 246 216 215;
  --snx-info-soft: 214 232 230;

  /* Chrome (sidebar/footer): base02 deep teal — vibe IDE */
  --snx-chrome-bg: 7 54 66;         /* base02 #073642 */
  --snx-chrome-bg-soft: 20 70 84;   /* lift para hover */
  --snx-chrome-text: 253 246 227;   /* base3 cream brilhante */
  --snx-chrome-muted: 147 161 161;  /* base1 — non-active nav */
  --snx-chrome-border: 0 43 54;     /* base03 #002B36 */
  --snx-chrome-active: 253 246 227; /* base3 cream — destaque ativo (era base blue) */

  --snx-shadow: 7 54 66;

  /* Cantos retos sutis, sombra discreta — visual de painel de IDE */
  --snx-radius-sm: 2px;
  --snx-radius: 3px;
  --snx-radius-2: 4px;
  --snx-radius-lg: 6px;
  --snx-shadow-lg: 0 1px 2px rgb(7 54 66 / .12);
}
/* bordas finas + sombra discreta — visual de painel de IDE */
[data-theme="solarized"] .btn,
[data-theme="solarized"] .panel,
[data-theme="solarized"] .kpi,
[data-theme="solarized"] .f__input,
[data-theme="solarized"] .tbl,
[data-theme="solarized"] .alert{
  border: 1px solid rgb(var(--snx-border-strong));
  box-shadow: none;
}
[data-theme="solarized"] .btn--primary{
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
  border-color: rgb(var(--snx-primary));
  font-weight: 500;
}
[data-theme="solarized"] .btn--primary:hover{
  background: rgb(var(--snx-primary-hover));
  border-color: rgb(var(--snx-primary-hover));
}
[data-theme="solarized"] .btn:focus-visible,
[data-theme="solarized"] .f__input:focus{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 1px;
  box-shadow: none;
}
/* mono em headings tambem (coerencia com IDE) */
[data-theme="solarized"] h1,
[data-theme="solarized"] h2,
[data-theme="solarized"] .ph__title{
  font-weight: 600;
  letter-spacing: -.01em;
}

/* =========================================================================
   NORD — paleta artica (Arctic, north-bluish) escura. Acento ciano frio
   (#88c0d0). Modo escuro sereno para uso prolongado.
   ========================================================================= */
[data-theme="nord"]{
  --snx-app: 46 52 64;
  --snx-surface: 59 66 82;
  --snx-surface-muted: 67 76 94;
  --snx-surface-soft: 76 86 106;
  --snx-surface-sunk: 36 42 54;
  --snx-strong: 236 239 244;
  --snx-muted: 216 222 233;
  --snx-subtle: 180 195 215;
  --snx-border-default: 67 76 94;
  --snx-border-strong: 76 86 106;
  --snx-primary: 136 192 208;
  --snx-primary-hover: 129 161 193;
  --snx-primary-soft: 67 76 94;
  --snx-on-primary: 46 52 64;
  --snx-success: 163 190 140;
  --snx-warning: 235 203 139;
  --snx-danger: 191 97 106;
  --snx-info: 136 192 208;
  --snx-success-soft: 56 76 56;
  --snx-warning-soft: 80 70 36;
  --snx-danger-soft: 76 36 38;
  --snx-info-soft: 28 56 64;
  --snx-chrome-bg: 36 42 54;
  --snx-chrome-bg-soft: 46 52 64;
  --snx-chrome-text: 236 239 244;
  --snx-chrome-muted: 180 195 215;
  --snx-chrome-border: 28 32 42;
  --snx-chrome-active: 136 192 208;
  --snx-shadow: 0 0 0;
}

/* =========================================================================
   DRACULA — paleta classica (draculatheme.com) escura com acento lilas
   (#bd93f9). Contrastes saturados, identidade vibrante.
   ========================================================================= */
[data-theme="dracula"]{
  --snx-app: 40 42 54;
  --snx-surface: 33 34 44;
  --snx-surface-muted: 50 52 65;
  --snx-surface-soft: 68 71 90;
  --snx-surface-sunk: 24 25 33;
  --snx-strong: 248 248 242;
  --snx-muted: 205 206 209;
  --snx-subtle: 98 114 164;
  --snx-border-default: 68 71 90;
  --snx-border-strong: 98 114 164;
  --snx-primary: 189 147 249;
  --snx-primary-hover: 167 122 234;
  --snx-primary-soft: 68 71 90;
  --snx-on-primary: 40 42 54;
  --snx-success: 80 250 123;
  --snx-warning: 255 184 108;
  --snx-danger: 255 85 85;
  --snx-info: 139 233 253;
  --snx-success-soft: 26 64 36;
  --snx-warning-soft: 76 50 30;
  --snx-danger-soft: 76 36 36;
  --snx-info-soft: 28 56 64;
  --snx-chrome-bg: 33 34 44;
  --snx-chrome-bg-soft: 50 52 65;
  --snx-chrome-text: 248 248 242;
  --snx-chrome-muted: 145 156 185;
  --snx-chrome-border: 24 25 33;
  --snx-chrome-active: 189 147 249;
  --snx-shadow: 0 0 0;
}

/* =========================================================================
   GRUVBOX — paleta retro warm (github.com/morhetz/gruvbox). Variante dark
   medium: fundo marrom escuro #282828, acento amarelo mostarda #d79921.
   Tons terra confortaveis, baixa fadiga ocular.
   ========================================================================= */
[data-theme="gruvbox"]{
  --snx-app: 40 40 40;
  --snx-surface: 50 48 47;
  --snx-surface-muted: 60 56 54;
  --snx-surface-soft: 80 73 69;
  --snx-surface-sunk: 29 32 33;
  --snx-strong: 235 219 178;
  --snx-muted: 189 174 147;
  --snx-subtle: 146 131 116;
  --snx-border-default: 60 56 54;
  --snx-border-strong: 80 73 69;
  --snx-primary: 215 153 33;
  --snx-primary-hover: 250 189 47;
  --snx-primary-soft: 60 56 54;
  --snx-on-primary: 40 40 40;
  --snx-success: 152 151 26;
  --snx-warning: 215 153 33;
  --snx-danger: 204 36 29;
  --snx-info: 69 133 136;
  --snx-success-soft: 50 60 24;
  --snx-warning-soft: 76 56 18;
  --snx-danger-soft: 76 24 22;
  --snx-info-soft: 28 56 58;
  --snx-chrome-bg: 29 32 33;
  --snx-chrome-bg-soft: 40 40 40;
  --snx-chrome-text: 235 219 178;
  --snx-chrome-muted: 146 131 116;
  --snx-chrome-border: 20 22 22;
  --snx-chrome-active: 215 153 33;
  --snx-shadow: 0 0 0;
}

/* =========================================================================
   GRUVBOX LIGHT — variante clara do Gruvbox (light medium). Fundo papel
   envelhecido #fbf1c7, acento mostarda #b57614. Mesma identidade warm em
   modo claro, baixa fadiga ocular.
   ========================================================================= */
[data-theme="gruvbox_light"]{
  --snx-app: 251 241 199;
  --snx-surface: 253 247 218;
  --snx-surface-muted: 235 219 178;
  --snx-surface-soft: 213 196 161;
  --snx-surface-sunk: 240 224 184;
  --snx-strong: 60 56 54;
  --snx-muted: 80 73 69;
  --snx-subtle: 124 111 100;
  --snx-border-default: 213 196 161;
  --snx-border-strong: 189 174 147;
  --snx-primary: 181 118 20;
  --snx-primary-hover: 152 96 16;
  --snx-primary-soft: 235 219 178;
  --snx-on-primary: 251 241 199;
  --snx-success: 121 116 14;
  --snx-warning: 181 118 20;
  --snx-danger: 157 0 6;
  --snx-info: 7 102 120;
  --snx-success-soft: 232 232 188;
  --snx-warning-soft: 244 224 165;
  --snx-danger-soft: 245 210 210;
  --snx-info-soft: 210 232 238;
  --snx-chrome-bg: 60 56 54;
  --snx-chrome-bg-soft: 80 73 69;
  --snx-chrome-text: 251 241 199;
  --snx-chrome-muted: 213 196 161;
  --snx-chrome-border: 40 40 40;
  --snx-chrome-active: 181 118 20;
  --snx-shadow: 60 56 54;
}

/* =========================================================================
   ROSÉ PINE DAWN — refinamento premium da paleta oficial (rosepinetheme.com).
   Light com base #faf4ed e acento Iris #907aa9. Calibrado para contraste AA+
   no texto principal (#4b4669 sobre #faf4ed = ~7.5:1), chrome em Text deep
   purple #575279, hierarquia tonal clara entre surface/muted/soft/sunk.
   Borders mais firmes para legibilidade de listas e tabelas.
   ========================================================================= */
[data-theme="rose_pine_dawn"]{
  /* Superfícies: 4 níveis tonais bem separados para layering em painéis/cards */
  --snx-app: 250 244 237;          /* Base #faf4ed — fundo da página */
  --snx-surface: 255 250 243;      /* Surface #fffaf3 — cards e painéis */
  --snx-surface-muted: 244 235 226; /* meio-termo entre Base e Overlay */
  --snx-surface-soft: 238 228 218;  /* Overlay refinado — hover de itens */
  --snx-surface-sunk: 228 215 203;  /* sunk profundo — recessos visíveis */

  /* Texto: hierarquia com contraste AA+ no principal e muted */
  --snx-strong: 75 70 105;          /* darken de Text #575279 → #4b4669, 7.5:1 vs Base */
  --snx-muted: 121 117 147;         /* Subtle #797593 — 5.5:1 (AA pass) */
  --snx-subtle: 152 147 165;        /* Muted #9893a5 — labels e dicas */

  /* Borders: firmes para separar elementos em listas e tabelas */
  --snx-border-default: 226 215 202; /* visível mas suave */
  --snx-border-strong: 198 184 169; /* claro contorno de elementos focados */

  /* Primary Iris: tom oficial + hover mais saturado */
  --snx-primary: 144 122 169;       /* Iris #907aa9 */
  --snx-primary-hover: 117 96 145;  /* Iris escurecido para hover/pressed */
  --snx-primary-soft: 232 222 240;  /* light Iris pastel para selecionado bg */
  --snx-on-primary: 255 250 243;    /* Base cream — texto sobre Iris (legível) */

  /* Status: Pine para success, Gold warning, Love danger, Foam info */
  --snx-success: 40 105 131;        /* Pine #286983 — deep teal "go" */
  --snx-warning: 234 157 52;        /* Gold #ea9d34 */
  --snx-danger: 180 99 122;         /* Love #b4637a */
  --snx-info: 86 148 159;           /* Foam #56949f */
  --snx-success-soft: 218 232 238;  /* light Pine — bg de pills de sucesso */
  --snx-warning-soft: 252 232 200;  /* light Gold */
  --snx-danger-soft: 245 220 224;   /* light Love */
  --snx-info-soft: 226 238 240;     /* light Foam */

  /* Chrome (sidebar/footer): Text deep purple para identidade premium */
  --snx-chrome-bg: 87 82 121;       /* Text #575279 — chrome principal */
  --snx-chrome-bg-soft: 110 105 145; /* lift sutil para hover nos itens nav */
  --snx-chrome-text: 250 244 237;   /* Base cream sobre chrome — 7.5:1 */
  --snx-chrome-muted: 188 184 215;  /* Iris washed para itens não-ativos */
  --snx-chrome-border: 65 60 95;    /* darken de chrome-bg para separadores */
  --snx-chrome-active: 255 250 243; /* Base cream — brilho de item ativo */

  /* Shadow tint: deep purple sutil para depth premium em painéis flutuantes */
  --snx-shadow: 87 82 121;
}

/* =========================================================================
   BASE
   ========================================================================= */
*{ box-sizing:border-box }
html,body{ margin:0; padding:0 }
body{
  font-family: var(--snx-font-ui);
  font-size: 13px;
  line-height: 1.4;
  color: rgb(var(--snx-strong));
  background: rgb(var(--snx-app));
  -webkit-font-smoothing: antialiased;
  font-feature-settings: "ss01","cv11","tnum";
}
button{ font:inherit; color:inherit; background:none; border:0; padding:0; cursor:pointer }
input,select,textarea{ font:inherit; color:inherit }
a{ color:inherit; text-decoration:none }

.mono{ font-family: var(--snx-font-mono); font-variant-numeric: tabular-nums }

/* =========================================================================
   SHELL
   ========================================================================= */
.app{
  display: grid;
  grid-template-columns: var(--snx-sidebar-width) 1fr;
  min-height: 100vh;
}

/* =========================================================================
   SIDEBAR (fiel ao fragment antigo: abas radio + details)
   ========================================================================= */
.sb{
  background: rgb(var(--snx-chrome-bg));
  color: rgb(var(--snx-chrome-text));
  border-right: 1px solid rgb(var(--snx-chrome-border));
  display:flex; flex-direction:column;
  position:sticky; top:0; height:100vh;
  overflow:hidden;
}
.sb__brand{
  height: 52px; display:flex; align-items:center; gap:10px;
  padding: 0 14px;
  border-bottom: 1px solid rgb(var(--snx-chrome-border));
}
.sb__mark{
  width:26px; height:26px; border-radius:6px;
  background: rgb(var(--snx-chrome-bg-soft));
  color: rgb(var(--snx-chrome-active));
  display:grid; place-items:center;
  font-weight:700; font-size:11px; letter-spacing:.03em;
  border:1px solid rgb(var(--snx-chrome-border));
  overflow:hidden;
}
.sb__mark img{
  /* favicon.svg vem em preto (com swap automatico para branco em dark mode do navegador,
     irrelevante aqui pois sempre renderizamos sobre chrome escuro do tema). brightness(0)+
     invert(1) forca branco solido em qualquer tema do Sindnex. */
  width: 18px; height: 18px;
  filter: brightness(0) invert(1);
}
.sb__brand-name{ font-weight:600; font-size:13.5px; letter-spacing:-.01em; line-height:1 }
.sb__brand-sub{ font-size:10.5px; color:rgb(var(--snx-chrome-muted)); margin-top:2px; line-height:1 }

/* tabs via radio */
.sb__tabs{ display:flex; flex-direction:column; flex:1; min-height:0 }
.sb__radio{ display:none }

.sb__tabbar{
  display:grid; grid-template-columns: 1fr 1fr 1fr;
  gap: 4px;
  padding: 10px 10px 6px;
}
.sb__tab{
  height: 26px; border-radius:4px;
  display:flex; align-items:center; justify-content:center; gap:6px;
  font-size:10px; font-weight:500; letter-spacing:.04em; text-transform:uppercase;
  color: rgb(var(--snx-chrome-muted));
  border:1px solid transparent;
  cursor:pointer;
}
.sb__tab:hover{ color: rgb(var(--snx-chrome-active)) }
#sb-tab-filiacao:checked ~ .sb__tabbar label[for="sb-tab-filiacao"],
#sb-tab-operacao:checked ~ .sb__tabbar label[for="sb-tab-operacao"],
#sb-tab-estrategia:checked ~ .sb__tabbar label[for="sb-tab-estrategia"]{
  color: rgb(var(--snx-chrome-active));
  background: rgb(var(--snx-chrome-bg-soft));
  border-color: rgb(var(--snx-chrome-border));
}

/* panel (scrolls) */
.sb__panel{
  display:none;
  flex:1; min-height:0; overflow-y:auto;
  padding: 2px 8px 10px;
  scrollbar-width: thin;
}
#sb-tab-filiacao:checked ~ .sb__panel--filiacao{ display:block }
#sb-tab-operacao:checked ~ .sb__panel--operacao{ display:block }
#sb-tab-estrategia:checked ~ .sb__panel--estrategia{ display:block }

.sb__panel::-webkit-scrollbar{ width:6px }
.sb__panel::-webkit-scrollbar-thumb{ background: rgb(var(--snx-chrome-bg-soft)); border-radius:3px }

/* group (details/summary) */
.sb__group{
  margin: 2px 0;
  border-radius: 4px;
}
.sb__group > summary{
  list-style:none; cursor:pointer;
  height: 30px; padding: 0 8px;
  display:flex; align-items:center; gap:10px;
  color: rgb(var(--snx-chrome-muted));
  font-size:12px; font-weight:500;
  border-radius:4px;
}
.sb__group > summary::-webkit-details-marker{ display:none }
.sb__group > summary::after{
  content:""; width:6px; height:6px; margin-left:auto;
  border-right:1.5px solid rgb(var(--snx-chrome-muted));
  border-bottom:1.5px solid rgb(var(--snx-chrome-muted));
  transform: rotate(-45deg); transition: transform .15s;
}
.sb__group[open] > summary::after{ transform: rotate(45deg) translate(-1px,-1px) }
.sb__group > summary:hover{ color: rgb(var(--snx-chrome-active)); background: rgb(var(--snx-chrome-bg-soft)) }

.sb__ico{
  width:20px; height:20px; flex-shrink:0;
  background: rgb(var(--snx-chrome-bg-soft));
  color: rgb(var(--snx-chrome-active));
  border-radius:4px;
  display:grid; place-items:center;
  font-size:9.5px; font-weight:700; letter-spacing:.04em;
  border:1px solid rgb(var(--snx-chrome-border));
}

.sb__body{ padding: 2px 0 6px 8px }

.sb__item{
  display:flex; align-items:center; gap:10px;
  height: 26px; padding: 0 8px;
  font-size:12px;
  color: rgb(var(--snx-chrome-muted));
  border-radius:4px;
  position:relative;
  cursor:pointer;
}
.sb__item:hover{ color: rgb(var(--snx-chrome-active)); background: rgb(var(--snx-chrome-bg-soft)) }
.sb__item.is-active{
  color: rgb(var(--snx-chrome-active));
  background: rgb(var(--snx-chrome-bg-soft));
}
.sb__item.is-active::before{
  content:""; position:absolute; left:-8px; top:5px; bottom:5px;
  width:2px; border-radius:2px; background: rgb(var(--snx-primary));
}
.sb__item .sb__count{
  margin-left:auto;
  font-family: var(--snx-font-mono); font-size:10.5px;
  color: rgb(var(--snx-chrome-muted));
}
.sb__item .sb__pill{
  margin-left:auto;
  font-size:9.5px; letter-spacing:.04em; text-transform:uppercase;
  padding: 2px 5px; border-radius:3px;
  background: rgb(var(--snx-chrome-bg-soft));
  color: rgb(var(--snx-chrome-active));
  border:1px solid rgb(var(--snx-chrome-border));
}

/* solo item (no group) */
.sb__solo{
  display:flex; align-items:center; gap:10px;
  height: 30px; padding: 0 8px;
  margin: 2px 0;
  color: rgb(var(--snx-chrome-text));
  font-size: 12.5px; font-weight:500;
  border-radius: 4px;
  position:relative;
  cursor:pointer;
}
.sb__solo:hover{ background: rgb(var(--snx-chrome-bg-soft)) }
.sb__solo.is-active{ background: rgb(var(--snx-chrome-bg-soft)) }
.sb__solo.is-active::before{
  content:""; position:absolute; left:-8px; top:6px; bottom:6px;
  width:2px; border-radius:2px; background: rgb(var(--snx-primary));
}

/* footer */
.sb__foot{
  margin-top:auto;
  border-top: 1px solid rgb(var(--snx-chrome-border));
  padding: 8px 10px;
  display:flex; flex-direction:column; gap:4px;
}
.sb__action{
  display:flex; align-items:center; gap:10px;
  height: 30px; padding: 0 8px;
  border-radius:4px;
  color: rgb(var(--snx-chrome-text));
  font-size: 12.5px;
  cursor:pointer;
  position:relative;
}
.sb__action:hover{ background: rgb(var(--snx-chrome-bg-soft)) }
.sb__action .sb__badge{
  margin-left:auto;
  background: rgb(var(--snx-danger));
  color: rgb(var(--snx-on-primary));
  font-family: var(--snx-font-mono); font-size:10px; font-weight:600;
  padding: 1px 6px; border-radius: 10px;
  min-width:18px; text-align:center;
}
.sb__profile{
  display:flex; align-items:center; gap:10px;
  padding: 8px; margin-top: 6px;
  border-top: 1px solid rgb(var(--snx-chrome-border));
}
.sb__avatar{
  width:28px; height:28px; border-radius:50%;
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
  display:grid; place-items:center;
  font-size:11px; font-weight:600;
  flex-shrink:0;
}
.sb__me{ min-width:0; display:flex; flex-direction:column; line-height:1.15 }
.sb__me b{ font-size:12px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.sb__me span{ font-size:10.5px; color: rgb(var(--snx-chrome-muted)); overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.sb__profile form{
  /* `display: contents` torna o form transparente ao layout flex do .sb__profile —
     sem isso o botao fica empacotado dentro do form (que e o flex item real)
     e nao consegue se posicionar contra a borda do sidebar. */
  display: contents;
}
.sb__logout{
  /* Centro alinhado com o centro do badge de notificacoes do mural. Lados-direitos
     estariam coincidentes em 18px da borda, mas como o botao (28px) e mais largo que
     o badge (~22px), compenso 3px com margin negativa para os centros baterem. */
  margin-left: auto; margin-right: -3px;
  width: 28px; height: 28px; border-radius: 4px;
  display: grid; place-items: center;
  color: rgb(var(--snx-chrome-muted));
  background: transparent; border: none; cursor: pointer;
}
.sb__logout svg{ width: 16px; height: 16px; }
.sb__logout:hover{ background: rgb(var(--snx-chrome-bg-soft)); color: rgb(var(--snx-danger)); }

/* estado vazio dentro do painel de uma aba da sidebar */
.sb__empty {
  margin: 8px 10px 4px;
  padding: 10px 12px;
  background: rgb(var(--snx-chrome-bg-soft));
  border: 1px dashed rgb(var(--snx-chrome-border));
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-chrome-muted));
  font-size: 11.5px;
  line-height: 1.45;
}

/* =========================================================================
   MAIN
   ========================================================================= */
.main{ display:flex; flex-direction:column; min-width:0 }

/* topbar */
.tb{
  height: 48px;
  display:flex; align-items:center; gap:16px;
  padding: 0 20px;
  background: rgb(var(--snx-surface));
  border-bottom: 1px solid rgb(var(--snx-border-default));
  position: sticky; top:0; z-index: 30;
}
.crumb{ display:flex; align-items:center; gap:6px; font-size:12px; color:rgb(var(--snx-muted)) }
.crumb a{ color:inherit }
.crumb .sep{ color: rgb(var(--snx-subtle)) }
.crumb .cur{ color: rgb(var(--snx-strong)); font-weight:500 }

.tb__id{
  margin-left: 4px;
  font-family: var(--snx-font-mono); font-size:11px;
  color: rgb(var(--snx-muted));
  border:1px solid rgb(var(--snx-border-default));
  border-radius: 3px;
  padding: 2px 6px;
  background: rgb(var(--snx-surface-muted));
}

.tb__right{ margin-left:auto; display:flex; align-items:center; gap:12px }

.tb__status{
  display:flex; align-items:center; gap:8px;
  font-size: 12px; color: rgb(var(--snx-muted));
}
.tb__dot{
  width:7px; height:7px; border-radius:50%;
  background: rgb(var(--snx-success));
  box-shadow: 0 0 0 3px rgb(var(--snx-success) / .2);
}
.tb__dot.is-saving{
  background: rgb(var(--snx-warning));
  box-shadow: 0 0 0 3px rgb(var(--snx-warning) / .2);
  animation: pulse 1s ease-in-out infinite;
}
@keyframes pulse{ 50%{ transform: scale(.8) } }

.tb__divider{ width:1px; height:20px; background: rgb(var(--snx-border-default)) }

/* =========================================================================
   PAGE HEADER
   ========================================================================= */
.ph{
  padding: 18px 24px 0;
  display:flex; align-items:flex-start; gap: 20px;
}
.ph__ava{
  width: 52px; height: 52px; border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
  display:grid; place-items:center;
  font-size: 17px; font-weight:600;
  border:1px solid rgb(var(--snx-border-default));
  flex-shrink:0;
}
.ph__body{ flex:1; min-width:0 }
.ph__title{
  margin:0; font-size:18px; font-weight:600; letter-spacing:-.01em;
  display:flex; align-items:center; gap:10px;
}
.pill{
  font-size:10px; font-weight:500; letter-spacing:.06em; text-transform:uppercase;
  padding: 2px 7px; border-radius: 3px;
  border: 1px solid rgb(var(--snx-border-default));
  color: rgb(var(--snx-muted));
  background: rgb(var(--snx-surface-muted));
  display:inline-flex; align-items:center; gap:4px;
}
.pill--draft{
  color: rgb(var(--snx-warning));
  background: rgb(var(--snx-warning-soft));
  border-color: rgb(var(--snx-warning) / .35);
}
.pill--ok{
  color: rgb(var(--snx-success));
  background: rgb(var(--snx-success-soft));
  border-color: rgb(var(--snx-success) / .35);
}
.pill--err{
  color: rgb(var(--snx-danger));
  background: rgb(var(--snx-danger-soft));
  border-color: rgb(var(--snx-danger) / .35);
}

/*
 * §14 — Badge
 *
 * Marca de classificacao/atributo (eixo: confidencial, novo, beta, oficial), distinto
 * da .pill que representa eixo de status. Use .badge para marcas estaveis (sempre
 * presente) e .pill para estado mutavel. Anatomia identica a .pill mas com letterspacing
 * mais largo para enfatizar leitura horizontal.
 */
.badge{
  font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
  padding: 2px 7px; border-radius: 3px;
  border: 1px solid rgb(var(--snx-border-default));
  color: rgb(var(--snx-muted));
  background: rgb(var(--snx-surface-muted));
  display:inline-flex; align-items:center; gap:4px;
}
.badge--ok{
  color: rgb(var(--snx-success));
  background: rgb(var(--snx-success-soft));
  border-color: rgb(var(--snx-success) / .35);
}
.badge--warn{
  color: rgb(var(--snx-warning));
  background: rgb(var(--snx-warning-soft));
  border-color: rgb(var(--snx-warning) / .35);
}
.badge--err{
  color: rgb(var(--snx-danger));
  background: rgb(var(--snx-danger-soft));
  border-color: rgb(var(--snx-danger) / .35);
}
.badge--info{
  color: rgb(var(--snx-info));
  background: rgb(var(--snx-info-soft));
  border-color: rgb(var(--snx-info) / .35);
}
.badge--muted{
  color: rgb(var(--snx-muted));
  background: rgb(var(--snx-surface-muted));
  border-color: rgb(var(--snx-border-default));
}
.ph__meta{
  display:flex; gap: 18px; margin-top: 6px;
  font-family: var(--snx-font-mono); font-size: 11.5px;
  color: rgb(var(--snx-muted));
}
.ph__meta b{ color: rgb(var(--snx-strong)); font-weight:500 }

.ph__prog{ width: 220px; flex-shrink:0 }
.ph__prog-lbl{
  display:flex; justify-content:space-between;
  font-size: 11px; color: rgb(var(--snx-muted));
  margin-bottom: 6px;
}
.ph__prog-lbl b{
  color: rgb(var(--snx-strong)); font-weight:600;
  font-family: var(--snx-font-mono);
}
.ph__prog-bar{
  height: 4px; border-radius: 2px;
  background: rgb(var(--snx-surface-sunk));
  overflow:hidden; position:relative;
  border: 1px solid rgb(var(--snx-border-default));
}
.ph__prog-bar i{
  display:block; height: 100%; width: 0;
  background: rgb(var(--snx-primary));
  border-radius: 2px;
  transition: width .2s ease;
}
.ph__prog-steps{
  display:grid; grid-template-columns: repeat(5, 1fr);
  gap: 3px; margin-top: 6px;
  font-size: 10px; color: rgb(var(--snx-subtle));
}
.ph__prog-steps span,
.ph__prog-steps a{
  text-align:center; font-family: var(--snx-font-mono);
  color: rgb(var(--snx-subtle));
  text-decoration: none;
  padding: 2px 0;
  border-radius: 2px;
  transition: color .15s, background .15s;
}
.ph__prog-steps a:hover{ color: rgb(var(--snx-strong)); background: rgb(var(--snx-surface-muted)); }
.ph__prog-steps a:focus-visible{ outline: none; box-shadow: 0 0 0 2px var(--snx-focus-ring); }
.ph__prog-steps .done{ color: rgb(var(--snx-muted)); }
.ph__prog-steps .cur{ color: rgb(var(--snx-primary)); font-weight:600; }

/* =========================================================================
   TABS
   ========================================================================= */
.tabs{
  padding: 16px 24px 0;
  display:flex; align-items:flex-end; gap:0;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  position: sticky; top: 48px;
  background: rgb(var(--snx-surface));
  z-index: 20;
  margin-top: 14px;
}
.tab{
  display:inline-flex; align-items:center; gap:8px;
  height: 34px; padding: 0 14px;
  font-size: 12.5px; color: rgb(var(--snx-muted));
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  white-space:nowrap; cursor:pointer;
}
.tab:hover{ color: rgb(var(--snx-strong)) }
.tab.is-active{
  color: rgb(var(--snx-strong));
  border-color: rgb(var(--snx-primary));
  font-weight: 500;
}
.tab .idx{
  font-family: var(--snx-font-mono); font-size: 10.5px;
  color: rgb(var(--snx-subtle));
}
.tab.is-active .idx{ color: rgb(var(--snx-primary)) }
.tab .badge{
  font-size: 10px; font-family: var(--snx-font-mono);
  background: rgb(var(--snx-surface-sunk));
  color: rgb(var(--snx-muted));
  border: 1px solid rgb(var(--snx-border-default));
  padding: 1px 5px; border-radius: 3px;
}
.tab .dot{
  width: 6px; height: 6px; border-radius: 50%;
  background: rgb(var(--snx-danger));
}

/* =========================================================================
   CONTENT + SECTIONS
   ========================================================================= */
.content{
  padding: 20px 24px calc(var(--snx-fixed-actions-height) + 24px);
  width: 100%;
  max-width: none;
}
.section{ margin-bottom: 24px }
.section__hd{
  display:flex; align-items:baseline; gap: 12px;
  margin-bottom: 10px;
  padding-bottom: 6px;
  border-bottom: 1px dashed rgb(var(--snx-border-default));
}
.section__hd h2{
  margin:0; font-size: 11.5px; font-weight:600;
  letter-spacing: .06em; text-transform: uppercase;
  color: rgb(var(--snx-strong));
}
.section__hd p{ margin:0; font-size: 12px; color: rgb(var(--snx-muted)) }
.section__hd .num{
  font-family: var(--snx-font-mono); font-size: 11px;
  color: rgb(var(--snx-subtle));
}

/* grid 12 */
.grid{
  display:grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: 14px;
  row-gap: 12px;
}
.col-2{ grid-column: span 2 }
.col-3{ grid-column: span 3 }
.col-4{ grid-column: span 4 }
.col-5{ grid-column: span 5 }
.col-6{ grid-column: span 6 }
.col-7{ grid-column: span 7 }
.col-8{ grid-column: span 8 }
.col-9{ grid-column: span 9 }
.col-12{ grid-column: span 12 }

/* =========================================================================
   FIELD
   ========================================================================= */
.f{ display:flex; flex-direction:column; gap:4px; min-width:0; position:relative }
fieldset.f{ border:0; padding:0; margin:0 }
fieldset.f > legend{ padding:0 }
.f__lbl{
  display:flex; align-items:center; justify-content:space-between;
  font-size: 10.5px; letter-spacing: .05em; text-transform: uppercase;
  color: rgb(var(--snx-muted)); font-weight: 500;
}
.f__lbl .opt{
  color: rgb(var(--snx-subtle));
  text-transform:none; letter-spacing:0; font-weight:400;
}
.f__lbl .req{ color: rgb(var(--snx-danger)); margin-left: 2px }
.f__lbl .help{
  width: 13px; height: 13px; border-radius: 50%;
  border: 1px solid rgb(var(--snx-border-strong));
  color: rgb(var(--snx-subtle));
  font-size: 9px;
  display: inline-grid; place-items: center; cursor: help;
}

.f__input, .f__select{
  height: var(--snx-row);
  border: 1px solid rgb(var(--snx-border-strong));
  background: rgb(var(--snx-surface));
  border-radius: var(--snx-radius);
  padding: 0 10px;
  font-size: 13px;
  color: rgb(var(--snx-strong));
  outline: 0;
  width: 100%;
  transition: border-color .12s, box-shadow .12s, background .12s;
}
.f__input::placeholder{ color: rgb(var(--snx-subtle)) }
.f__input:hover, .f__select:hover{ border-color: rgb(var(--snx-muted) / .5) }
.f__input:focus, .f__select:focus{
  border-color: rgb(var(--snx-primary));
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .2);
}
.f__input[readonly]{
  background: rgb(var(--snx-surface-sunk));
  color: rgb(var(--snx-muted));
}
.f__input.is-mono{
  font-family: var(--snx-font-mono);
  font-size: 12.5px;
}
.f__input.is-ok{
  border-color: rgb(var(--snx-success) / .55);
}
.f__input.is-err{
  border-color: rgb(var(--snx-danger) / .65);
  background: rgb(var(--snx-danger-soft) / .35);
}

/* wrap with prefix/suffix */
.f__wrap{ position:relative }
.f__wrap.has-pfx .f__input{ padding-left: 28px }
.f__pfx{
  position:absolute; left:8px; top:0; height: var(--snx-row);
  display:grid; place-items:center;
  color: rgb(var(--snx-subtle)); font-size:12px;
  font-family: var(--snx-font-mono);
}
.f__wrap.has-sfx .f__input{ padding-right: 72px }
.f__sfx{
  position:absolute; right:0; top:0; height: var(--snx-row);
  padding: 0 10px;
  display:flex; align-items:center; gap: 4px;
  color: rgb(var(--snx-muted)); font-size: 11px;
  border-left: 1px solid rgb(var(--snx-border-default));
  font-family: var(--snx-font-mono);
}
.f__wrap.has-tick .f__input{ padding-right: 28px }
.f__tick{
  position:absolute; right: 8px; top: 0; height: var(--snx-row);
  display:grid; place-items:center;
  color: rgb(var(--snx-success));
}
.f__wrap.has-btn .f__input{ padding-right: 92px }
.f__inline-btn{
  position:absolute; right: 2px; top: 2px;
  height: calc(var(--snx-row) - 4px);
  padding: 0 10px;
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  border-left: 1px solid rgb(var(--snx-border-default));
  border-radius: 2px;
}
.f__inline-btn:hover{ color: rgb(var(--snx-strong)); background: rgb(var(--snx-surface-muted)) }

/* select caret */
.f__select{
  appearance: none;
  background-image:
    linear-gradient(45deg, transparent 50%, rgb(var(--snx-muted)) 50%),
    linear-gradient(135deg, rgb(var(--snx-muted)) 50%, transparent 50%);
  background-position: calc(100% - 14px) 13px, calc(100% - 9px) 13px;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  padding-right: 28px;
}

/* textarea */
.f__ta{
  min-height: 86px; height: auto;
  padding: 8px 10px; line-height: 1.5; resize: vertical;
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  font-size: 13px; color: rgb(var(--snx-strong));
  outline: 0; width: 100%; font-family: inherit;
  transition: border-color .12s, box-shadow .12s;
}
.f__ta:focus{
  border-color: rgb(var(--snx-primary));
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .2);
}
.f__count{
  position:absolute; right: 8px; bottom: 6px;
  font-family: var(--snx-font-mono); font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  background: rgb(var(--snx-surface));
  padding: 1px 4px;
}

/* messages */
.f__msg{
  min-height: 0; font-size: 11px;
  color: rgb(var(--snx-muted));
  display:flex; align-items:center; gap:6px;
  font-family: var(--snx-font-mono);
}
.f__msg.is-ok{ color: rgb(var(--snx-success)) }
.f__msg.is-err{ color: rgb(var(--snx-danger)) }
.f__msg.is-warn{ color: rgb(var(--snx-warning)) }

/* =========================================================================
   SEGMENTED
   ========================================================================= */
.seg{
  display:inline-flex;
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  height: var(--snx-row);
  padding: 2px; gap: 2px;
  width: 100%;
}
.seg__btn{
  flex: 1;
  padding: 0 10px; border-radius: 2px;
  font-size: 12.5px;
  color: rgb(var(--snx-muted));
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
}
.seg__btn:hover{ color: rgb(var(--snx-strong)) }
.seg__btn.is-on{
  background: rgb(var(--snx-strong));
  color: rgb(var(--snx-surface));
  font-weight: 500;
}

/* =========================================================================
   SWITCH
   ========================================================================= */
.sw{
  display:inline-flex; align-items:center; gap:10px;
  height: var(--snx-row);
}
.sw input{ display:none }
.sw__track{
  position:relative;
  width: 32px; height: 18px;
  border-radius: 10px;
  background: rgb(var(--snx-surface-sunk));
  border: 1px solid rgb(var(--snx-border-strong));
  transition: background .15s;
}
.sw__track::after{
  content:""; position:absolute; top: 1px; left: 1px;
  width: 14px; height: 14px; border-radius: 50%;
  background: rgb(var(--snx-surface));
  box-shadow: 0 1px 2px rgb(var(--snx-shadow) / .15);
  transition: left .15s;
}
.sw input:checked + .sw__track{
  background: rgb(var(--snx-primary));
  border-color: rgb(var(--snx-primary));
}
.sw input:checked + .sw__track::after{ left: 15px }
.sw__lbl{ font-size: 12.5px; color: rgb(var(--snx-strong)) }
.sw__lbl small{ display:block; font-size: 11px; color: rgb(var(--snx-muted)); font-weight: 400 }

/* =========================================================================
   CHIPS
   ========================================================================= */
.chips{
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  padding: 3px;
  display:flex; flex-wrap:wrap; gap: 3px;
  min-height: var(--snx-row);
  align-items: center;
}
.chips:focus-within{
  border-color: rgb(var(--snx-primary));
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .2);
}
/* Variante somente-leitura (detalhe/relatorio): sem borda externa, mais ar entre chips. */
.chips--read{
  border: 0;
  background: transparent;
  padding: 0;
  gap: 6px;
  min-height: 0;
}
.chip{
  display:inline-flex; align-items:center; gap:6px;
  height: 22px; padding: 0 4px 0 8px;
  border-radius: 2px;
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
  font-size: 11.5px; font-weight: 500;
  border: 1px solid rgb(var(--snx-primary) / .25);
}
.chip__x{
  width: 14px; height: 14px; border-radius: 2px;
  display:grid; place-items:center;
  color: rgb(var(--snx-primary));
  font-size: 12px; line-height: 1;
  opacity: .7;
}
.chip__x:hover{ opacity: 1; background: rgb(var(--snx-primary) / .15) }
.chips__input{
  flex: 1; min-width: 120px;
  border: 0; outline: 0; background: transparent;
  font-size: 12.5px; padding: 0 6px;
  color: rgb(var(--snx-strong));
}

/* =========================================================================
   FORM DIVIDER (separador "ou" entre campos mutuamente exclusivos)
   ========================================================================= */
.form-divider{
  display: flex; align-items: center; gap: 12px;
  text-transform: uppercase;
  font-size: 11px; font-weight: 600;
  color: rgb(var(--snx-muted));
  letter-spacing: 0.08em;
  margin: 4px 0;
}
.form-divider::before,
.form-divider::after{
  content: ""; flex: 1;
  border-top: 1px solid rgb(var(--snx-line));
}

/* =========================================================================
   TYPEAHEAD (busca + dropdown de resultados HTMX)
   ========================================================================= */
.typeahead{ position: relative; }
.typeahead__panel{
  position: relative;
  min-height: 0;
}
.typeahead__panel:empty{ display: none; }
.typeahead__results{
  margin-top: 6px;
  border: 1px solid rgb(var(--snx-line));
  border-radius: 4px;
  background: rgb(var(--snx-bg));
  box-shadow: var(--snx-shadow-1);
  max-height: 280px;
  overflow-y: auto;
}
.typeahead__list{
  list-style: none; margin: 0; padding: 0;
}
.typeahead__item{
  display: flex; flex-direction: column; gap: 2px;
  width: 100%; text-align: left;
  padding: 8px 12px;
  background: transparent; border: 0;
  cursor: pointer;
  border-bottom: 1px solid rgb(var(--snx-line) / .5);
  color: rgb(var(--snx-strong));
}
.typeahead__list li:last-child .typeahead__item{ border-bottom: 0; }
.typeahead__item:hover,
.typeahead__item:focus{
  background: rgb(var(--snx-primary-soft));
  outline: 0;
}
.typeahead__empty{
  margin-top: 6px;
  padding: 10px 12px;
  border: 1px dashed rgb(var(--snx-line));
  border-radius: 4px;
  font-size: 12.5px;
}

/* =========================================================================
   BUTTONS
   ========================================================================= */
.btn{
  height: 30px; padding: 0 12px;
  display:inline-flex; align-items:center; gap:6px;
  border-radius: var(--snx-radius);
  font-size: 12.5px; font-weight: 500;
  border: 1px solid transparent;
  color: rgb(var(--snx-muted));
  white-space: nowrap;
}
.btn:hover{ color: rgb(var(--snx-strong)); background: rgb(var(--snx-surface-muted)) }
.btn--outline{
  border-color: rgb(var(--snx-border-strong));
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
}
.btn--outline:hover{ background: rgb(var(--snx-surface-muted)) }
.btn--primary{
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
  border-color: rgb(var(--snx-primary));
}
.btn--primary:hover{
  background: rgb(var(--snx-primary-hover));
  border-color: rgb(var(--snx-primary-hover));
  color: rgb(var(--snx-on-primary));
}
.btn--danger{
  color: rgb(var(--snx-danger));
  border-color: rgb(var(--snx-border-strong));
  background: rgb(var(--snx-surface));
}
.btn--danger:hover{ background: rgb(var(--snx-danger-soft)); border-color: rgb(var(--snx-danger) / .45) }
.btn--icon{
  width: 28px; height: 28px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent;
  border: 1px solid transparent;
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-muted));
  cursor: pointer;
  flex-shrink: 0;
}
.btn--icon:hover{
  background: rgb(var(--snx-surface-muted));
  border-color: rgb(var(--snx-border-default));
  color: rgb(var(--snx-strong));
}
.btn--icon.is-active{
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
}
.btn--icon[disabled], .btn--icon[aria-disabled="true"]{
  color: rgb(var(--snx-subtle));
  cursor: not-allowed;
}
.btn__kbd{
  font-family: var(--snx-font-mono); font-size: 10.5px;
  padding: 0 4px; margin-left: 2px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: 2px;
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-muted));
}
.btn--primary .btn__kbd{
  background: rgb(var(--snx-primary-hover));
  border-color: rgb(var(--snx-on-primary) / .25);
  color: rgb(var(--snx-on-primary) / .75);
}

/* icon (inline svg) */
.ico{
  width: 14px; height: 14px; flex-shrink: 0;
  stroke: currentColor; fill: none; stroke-width: 1.6;
  stroke-linecap: round; stroke-linejoin: round;
}
.ico--sm{ width: 12px; height: 12px }

/* =========================================================================
   STICKY ACTIONS
   ========================================================================= */
.actions{
  position:fixed; bottom: 0; left: var(--snx-sidebar-width); right: 0;
  height: var(--snx-fixed-actions-height);
  background: rgb(var(--snx-surface));
  border-top: 1px solid rgb(var(--snx-border-default));
  padding: 0 24px;
  display:flex; align-items:center; gap: 12px;
  z-index: 25;
  box-shadow: 0 -2px 12px rgb(var(--snx-shadow) / .04);
}
.actions__hint{
  display:flex; align-items:center; gap: 8px;
  font-size: 12px; color: rgb(var(--snx-muted));
}
.actions__hint .dot{
  width: 7px; height: 7px; border-radius: 50%;
  background: rgb(var(--snx-warning));
  box-shadow: 0 0 0 3px rgb(var(--snx-warning) / .2);
}
.actions__spacer{ flex: 1 }

/* =========================================================================
   DASHBOARD
   ========================================================================= */
.dash-period{
  display:inline-flex; align-items:center; gap: 2px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  padding: 2px; background: rgb(var(--snx-surface));
}
.dash-period button{
  appearance:none; border:0; background:transparent; font: inherit; font-size:12px;
  padding: 4px 10px; border-radius: 2px; color: rgb(var(--snx-muted)); cursor:pointer;
}
.dash-period button.is-active{ background: rgb(var(--snx-primary-soft)); color: rgb(var(--snx-primary)); font-weight:600 }

.kpis{
  display:grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 14px;
}
.kpi{
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  padding: 12px 14px;
  display:flex; flex-direction:column; gap: 4px;
  position: relative;
  min-height: 108px;
}
.kpi__lbl{
  font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em;
  color: rgb(var(--snx-subtle)); font-weight: 600;
  display:flex; align-items:center; gap: 6px;
}
.kpi__ico{
  width: 20px; height: 20px; border-radius: 3px;
  background: rgb(var(--snx-primary-soft)); color: rgb(var(--snx-primary));
  display:inline-flex; align-items:center; justify-content:center;
  font-size: 10px; font-weight: 700; font-family: var(--snx-font-mono);
}
.kpi__val{
  font-size: 24px; font-weight: 700; letter-spacing: -.01em;
  color: rgb(var(--snx-strong)); font-family: var(--snx-font-mono);
  display:flex; align-items:baseline; gap: 4px;
}
.kpi__val small{ font-size: 13px; font-weight: 500; color: rgb(var(--snx-muted)) }
.kpi__delta{
  display:inline-flex; align-items:center; gap: 4px; font-size: 11.5px; font-weight: 600;
}
.kpi__delta.up{ color: rgb(var(--snx-success)) }
.kpi__delta.down{ color: rgb(var(--snx-danger)) }
.kpi__delta .ico{ width:10px; height:10px }
.kpi__sub{ font-size: 11.5px; color: rgb(var(--snx-muted)); margin-top: auto }
.kpi__spark{
  position: absolute; right: 10px; top: 10px; width: 68px; height: 26px;
  opacity: .9;
}

.dash-grid{
  display:grid; grid-template-columns: 2fr 1fr; gap: 12px; margin-top: 14px;
}
.panel{
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  overflow: hidden;
}
.panel__hd{
  padding: 10px 14px; height: 40px;
  display:flex; align-items:center; gap: 10px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface-muted));
}
.panel__hd h3{ margin:0; font-size: 12.5px; font-weight: 600; letter-spacing: .01em }
.panel__hd .sub{ color: rgb(var(--snx-muted)); font-size: 11.5px; font-family: var(--snx-font-mono) }
.panel__hd .seg{ margin-left:auto }
.panel__bd{ padding: 14px }
.panel__bd.nopad{ padding: 0 }

.chart{
  width: 100%; height: 240px;
}
.chart-legend{
  display:flex; gap: 14px; margin-top: 10px; font-size: 11.5px; color: rgb(var(--snx-muted));
  padding: 0 14px 12px;
}
.chart-legend .sw{
  display:inline-flex; align-items:center; gap: 6px;
}
.chart-legend .sw i{ width: 10px; height: 10px; border-radius: 2px; display:inline-block }

.tl{ display:flex; flex-direction:column }
.tl__item{
  display:grid; grid-template-columns: 14px 1fr; gap: 10px;
  padding: 10px 14px; border-top: 1px solid rgb(var(--snx-border-default));
  position: relative;
}
.tl__item:first-child{ border-top: 0 }
.tl__item .pin{
  width: 8px; height: 8px; border-radius: 50%;
  background: rgb(var(--snx-primary)); margin-top: 5px;
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .12);
  justify-self: center;
}
.tl__item .pin.is-warn{ background: rgb(var(--snx-warning)); box-shadow: 0 0 0 3px rgb(var(--snx-warning) / .14) }
.tl__item .pin.is-err{ background: rgb(var(--snx-danger)); box-shadow: 0 0 0 3px rgb(var(--snx-danger) / .14) }
.tl__item .pin.is-ok{ background: rgb(var(--snx-success)); box-shadow: 0 0 0 3px rgb(var(--snx-success) / .14) }
.tl__item .pin.is-info{ background: rgb(var(--snx-info)); box-shadow: 0 0 0 3px rgb(var(--snx-info) / .14) }
.tl__item h4{ margin:0 0 2px; font-size: 12.5px; font-weight: 600 }
.tl__item p{ margin:0; color: rgb(var(--snx-muted)); font-size: 11.5px }
.tl__item time{ color: rgb(var(--snx-subtle)); font-size: 11px; font-family: var(--snx-font-mono); margin-left: 8px }
.tl__item .ator{ color: rgb(var(--snx-strong)); font-weight: 500 }

/* =========================================================================
   LIST / TABLE
   ========================================================================= */
.fb{
  display:flex; align-items:center; gap: 8px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  padding: 8px; margin-top: 14px;
  min-width: 0;
  overflow: hidden;
  width: 100%;
}
.fb__search{
  flex: 1 1 360px; max-width: 520px;
  min-width: 0;
  display:flex; align-items:center; gap: 8px;
  height: var(--snx-row);
  padding: 0 10px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
}
.fb__search:focus-within{
  border-color: rgb(var(--snx-primary) / .45);
  box-shadow: 0 0 0 2px rgb(var(--snx-primary) / .12);
}
.fb__search input{
  flex:1; border:0; background: transparent; outline: none;
  font: inherit; font-size: 13px; color: rgb(var(--snx-strong));
}
.fb__search input::placeholder{ color: rgb(var(--snx-subtle)) }
.fb__search .ico{ color: rgb(var(--snx-subtle)) }
.fb__search .kbd{
  font-family: var(--snx-font-mono); font-size: 10.5px;
  padding: 1px 5px; background: rgb(var(--snx-surface)); border:1px solid rgb(var(--snx-border-default)); border-radius:2px;
  color: rgb(var(--snx-muted));
}
.seg{
  display:inline-flex; align-items:center;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  overflow: hidden;
  height: var(--snx-row);
  flex-shrink: 0;
  margin-left: auto;
  width: auto;
}
.seg button,
.seg a{
  appearance:none; border: 0; background: rgb(var(--snx-surface)); font: inherit; font-size: 12px;
  padding: 0 10px; color: rgb(var(--snx-muted)); cursor: pointer;
  border-left: 1px solid rgb(var(--snx-border-default));
  height: 100%;
  display: inline-flex; align-items: center;
  text-decoration: none;
}
.seg button:first-child,
.seg a:first-child{ border-left: 0 }
.seg button.is-active,
.seg a.is-active{ background: rgb(var(--snx-primary-soft)); color: rgb(var(--snx-primary)); font-weight: 600 }
.sel{
  height: var(--snx-row);
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  padding: 0 28px 0 10px;
  font: inherit; font-size: 13px; color: rgb(var(--snx-strong));
  appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 8px center; background-size: 14px;
  max-width: 170px;
  flex-shrink: 0;
}
.fb__spacer{ flex: 1 }
.fb__more{
  margin-left: auto;
  height: var(--snx-row); padding: 0 10px;
  background: rgb(var(--snx-surface));
  border: 1px dashed rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  font: inherit; font-size: 12px; color: rgb(var(--snx-muted));
  display:inline-flex; align-items:center; gap: 6px; cursor:pointer;
}

.tbl-wrap{
  margin-top: 12px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  overflow: hidden;
  width: 100%;
}
.tbl-bulk{
  display:flex; align-items:center; gap: 14px;
  padding: 8px 14px;
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
  font-size: 12px; font-weight: 500;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.tbl-bulk .spacer{ flex: 1 }
.tbl-bulk button{
  appearance:none; border:1px solid rgb(var(--snx-primary) / .3); background: rgb(var(--snx-surface)); color: rgb(var(--snx-primary));
  padding: 4px 10px; font: inherit; font-size: 11.5px; border-radius: var(--snx-radius); cursor: pointer;
}
.tbl-bulk button:disabled{
  opacity: .45;
  cursor: not-allowed;
  color: rgb(var(--snx-muted));
  border-color: rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface-muted));
}
.tbl-bulk__feedback{
  color: rgb(var(--snx-muted));
  font-weight: 400;
}
.tbl{
  width: 100%; border-collapse: collapse; font-size: 12.5px;
}
.tbl thead th{
  text-align: left; font-weight: 600; font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
  color: rgb(var(--snx-subtle));
  padding: 8px 12px; background: rgb(var(--snx-surface-muted));
  border-bottom: 1px solid rgb(var(--snx-border-default));
  white-space: nowrap;
}
.tbl thead th .sort{ display:inline-flex; align-items:center; gap: 2px; color: inherit }
.tbl thead th .sort.is-on{ color: rgb(var(--snx-primary)) }
.tbl thead th .sort .ico{ width:10px; height:10px }
.tbl tbody td{
  padding: 0 12px; height: var(--snx-row);
  border-bottom: 1px solid rgb(var(--snx-border-default));
  color: rgb(var(--snx-strong));
  white-space: nowrap;
  vertical-align: middle;
}
.tbl tbody tr.is-hidden{ display: none }
.tbl tbody tr:hover td{ background: rgb(var(--snx-surface-muted)) }
.tbl tbody tr.is-selected td{ background: rgb(var(--snx-primary-soft) / .5) }
.tbl td.num, .tbl td.mono{ font-family: var(--snx-font-mono); font-variant-numeric: tabular-nums }
.tbl td.num{ text-align: right }
.tbl td.right{ text-align: right }
.tbl td .avatar{
  width: 22px; height: 22px; border-radius: 50%;
  background: rgb(var(--snx-primary-soft)); color: rgb(var(--snx-primary));
  display:inline-flex; align-items:center; justify-content:center;
  font-size: 10px; font-weight: 600;
  margin-right: 8px; vertical-align: middle;
}
.tbl td .sub{ color: rgb(var(--snx-subtle)); font-size: 11px }
.tbl .chk{
  width: 14px; height: 14px; border: 1px solid rgb(var(--snx-border-strong));
  border-radius: 2px; background: rgb(var(--snx-surface));
  display:inline-block; vertical-align: middle;
  position: relative;
}
.tbl-check-control{
  display: inline-grid;
  place-items: center;
  width: 18px;
  height: 18px;
  position: relative;
  cursor: pointer;
  vertical-align: middle;
}
.tbl-check-control input{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: inherit;
}
.tbl-check-control input:focus-visible + .chk{
  outline: 2px solid rgb(var(--snx-primary) / .35);
  outline-offset: 2px;
}
.tbl-check-control input:checked + .chk,
.tbl-check-control input:indeterminate + .chk{
  background: rgb(var(--snx-primary));
  border-color: rgb(var(--snx-primary));
}
.tbl-check-control input:checked + .chk::after{
  content:""; position:absolute; left:3px; top:0px; width:5px; height:9px;
  border-right: 2px solid rgb(var(--snx-on-primary));
  border-bottom: 2px solid rgb(var(--snx-on-primary));
  transform: rotate(45deg);
}
.tbl-check-control input:indeterminate + .chk::after{
  content:""; position:absolute; left:3px; right:3px; top:6px; height:2px;
  background: rgb(var(--snx-on-primary));
}
.tbl-check-control input:disabled + .chk{ opacity: .45 }
.tbl .chk.is-on{ background: rgb(var(--snx-primary)); border-color: rgb(var(--snx-primary)) }
.tbl .chk.is-on::after{
  content:""; position:absolute; left:3px; top:0px; width:5px; height:9px;
  border-right: 2px solid rgb(var(--snx-on-primary)); border-bottom: 2px solid rgb(var(--snx-on-primary));
  transform: rotate(45deg);
}
.tbl .row-menu{
  appearance:none; background: transparent; border:0; padding: 4px; border-radius: 2px; cursor:pointer;
  color: rgb(var(--snx-subtle));
}
.tbl .row-menu:hover{ background: rgb(var(--snx-surface-sunk)); color: rgb(var(--snx-strong)) }
.tbl .row-menu .ico{ width:14px; height:14px }

.pager{
  display:flex; align-items:center; gap: 8px;
  padding: 10px 14px;
  border-top: 1px solid rgb(var(--snx-border-default));
  font-size: 12px; color: rgb(var(--snx-muted));
  background: rgb(var(--snx-surface-muted));
}
.pager .spacer{ flex: 1 }
.pager button{
  appearance:none; background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  padding: 4px 8px; border-radius: var(--snx-radius);
  font: inherit; font-size: 12px; color: rgb(var(--snx-strong));
  min-width: 28px; cursor: pointer;
}
.pager button.is-active{ background: rgb(var(--snx-primary)); color: rgb(var(--snx-on-primary)); border-color: rgb(var(--snx-primary)); font-weight: 600 }
.pager button:disabled{ opacity: .4; cursor: not-allowed }
.pager select.sel{ height: 26px; padding: 0 22px 0 8px; font-size: 12px }

/* =========================================================================
   STATUS PILLS — genéricas
   ========================================================================= */
.st{
  display:inline-flex; align-items:center; gap: 5px;
  padding: 2px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 500; line-height: 1.3;
  border: 1px solid transparent;
}
.st .dot{ width:6px; height:6px; border-radius:50% }
.st--ok{ color: rgb(var(--snx-success)); background: rgb(var(--snx-success-soft)) }
.st--ok .dot{ background: rgb(var(--snx-success)) }
.st--warn{ color: rgb(var(--snx-warning)); background: rgb(var(--snx-warning-soft)) }
.st--warn .dot{ background: rgb(var(--snx-warning)) }
.st--err{ color: rgb(var(--snx-danger)); background: rgb(var(--snx-danger-soft)) }
.st--err .dot{ background: rgb(var(--snx-danger)) }
.st--info{ color: rgb(var(--snx-info)); background: rgb(var(--snx-info-soft)) }
.st--info .dot{ background: rgb(var(--snx-info)) }
.st--muted{ color: rgb(var(--snx-muted)); background: rgb(var(--snx-surface-sunk)) }
.st--muted .dot{ background: rgb(var(--snx-subtle)) }

/* =========================================================================
   DETAIL VIEW
   ========================================================================= */
.ph__actions{ display:flex; align-items:center; gap: 8px }

.d-meta{
  display:flex; flex-wrap:wrap; gap: 0;
  margin-top: 14px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  overflow: hidden;
}
.d-meta__cell{
  padding: 10px 14px;
  border-right: 1px solid rgb(var(--snx-border-default));
  min-width: 140px; flex: 1 1 140px;
}
.d-meta__cell:last-child{ border-right: 0 }
.d-meta__lbl{
  font-size: 10px; text-transform: uppercase; letter-spacing: .06em;
  color: rgb(var(--snx-subtle)); font-weight: 600;
}
.d-meta__val{
  font-size: 13px; color: rgb(var(--snx-strong)); margin-top: 3px; font-weight: 500;
}
.d-meta__val.mono{ font-family: var(--snx-font-mono) }

.d-grid{
  display:grid; grid-template-columns: 2fr 1fr; gap: 12px;
  margin-top: 12px;
  align-items: start;
}
.d-grid-l, .d-grid-r{ display:flex; flex-direction:column; gap: 12px }

.d-card{
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  overflow: hidden;
}
.d-card__hd{
  display:flex; align-items:center; gap: 8px;
  padding: 10px 14px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface-muted));
  height: 40px;
}
.d-card__hd h3{ margin:0; font-size: 12.5px; font-weight: 600; letter-spacing: .01em }
.d-card__hd .edit{
  margin-left:auto; appearance:none; background: transparent; border:0; padding:2px 6px;
  color: rgb(var(--snx-primary)); font: inherit; font-size: 11.5px; font-weight: 500; cursor:pointer;
  display:inline-flex; align-items:center; gap: 4px; border-radius: 2px;
}
.d-card__hd .edit:hover{ background: rgb(var(--snx-primary-soft)) }
.d-card__bd{ padding: 0 }

.d-row{
  display:grid; grid-template-columns: 150px 1fr;
  padding: 8px 14px;
  border-top: 1px solid rgb(var(--snx-border-default));
  font-size: 12.5px;
  min-height: 32px;
  align-items: center;
}
.d-row:first-child{ border-top: 0 }
.d-key{ color: rgb(var(--snx-subtle)); font-weight: 500; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em }
.d-val{ color: rgb(var(--snx-strong)) }
.d-val.mono{ font-family: var(--snx-font-mono) }
.d-val small{ color: rgb(var(--snx-muted)); margin-left: 6px; font-size: 11px }

.d-summary{ padding: 14px }
.d-summary .total{
  font-size: 24px; font-weight: 700; letter-spacing: -.01em;
  font-family: var(--snx-font-mono); color: rgb(var(--snx-strong));
}
.d-summary .total small{ font-size: 13px; color: rgb(var(--snx-muted)); font-weight: 500 }
.d-summary .row{ display:flex; justify-content:space-between; font-size: 12px; color: rgb(var(--snx-muted)); padding: 3px 0 }
.d-summary .row b{ color: rgb(var(--snx-strong)); font-family: var(--snx-font-mono); font-weight: 500 }
.d-summary hr{ border:0; border-top: 1px dashed rgb(var(--snx-border-default)); margin: 10px 0 }

.d-mini-list{ padding: 0 }
.d-mini-list .it{
  display:grid; grid-template-columns: 1fr auto;
  padding: 8px 14px; gap: 10px;
  border-top: 1px solid rgb(var(--snx-border-default));
  font-size: 12.5px;
  align-items: center;
}
.d-mini-list .it:first-child{ border-top: 0 }
.d-mini-list .it h4{ margin:0; font-size: 12.5px; font-weight: 500 }
.d-mini-list .it p{ margin: 1px 0 0; color: rgb(var(--snx-muted)); font-size: 11.5px }
.d-mini-list .it .amt{ font-family: var(--snx-font-mono); font-weight: 500; font-size: 12.5px }
/* =========================================================================
   APP EXTENSIONS - telas reais fora do preview canonico
   ========================================================================= */
html { min-width: 0; }
body { min-width: 1024px; }
.ph__actions { display: flex; align-items: center; gap: 8px; align-self: center; }
.ph__period {
  display: flex;
  align-items: center;
  gap: 10px;
  align-self: center;
  margin-left: auto;
}
.ph__meta span { white-space: nowrap; }
.ph__prog-bar--done i { width: 100%; }
.ph__prog-steps {
  grid-template-columns: none;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
}
.u-mt-14 { margin-top: 14px; }
.u-mb-14 { margin-bottom: 14px; }
.u-pad-14 { padding: 14px; }
.u-ml-auto { margin-left: auto; }
.u-ml-6 { margin-left: 6px; }
.u-inline { display: inline; }
.u-inline-block { display: inline-block; }
.u-block { display: block; }
.u-pre-wrap { white-space: pre-wrap; word-break: break-word; }
.is-hidden { display: none !important; }
.link-primary { color: rgb(var(--snx-primary)); font-weight: 500; }
.perm-group-title {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: rgb(var(--snx-muted));
  margin: 12px 0 6px;
}

.alert { padding: 10px 12px; border-radius: var(--snx-radius); font-size: 12px; }
.alert--err { color: rgb(var(--snx-danger)); background: rgb(var(--snx-danger-soft)); border: 1px solid rgb(var(--snx-danger) / .2); }
.alert--ok { color: rgb(var(--snx-success)); background: rgb(var(--snx-success-soft)); border: 1px solid rgb(var(--snx-success) / .2); }
.alert--info { color: rgb(var(--snx-info)); background: rgb(var(--snx-info-soft)); border: 1px solid rgb(var(--snx-info) / .2); }
.empty-state { margin: 0; color: rgb(var(--snx-muted)); font-size: 12.5px; padding: 20px; }
.tbl tbody tr { height: var(--snx-row); }
.tbl tbody td { line-height: 1.3; }
.tbl .tbl__check { width: 32px; text-align: center; }
.tbl-bulk--summary { background: rgb(var(--snx-primary-soft) / .55); }
.tbl td.actions-cell { text-align: right; }
.tbl td.actions-cell .btn { height: 26px; padding: 0 8px; font-size: 11.5px; }
.tbl td.actions-cell form { display: inline-flex; margin: 0 0 0 6px; }
.pill--muted { color: rgb(var(--snx-muted)); background: rgb(var(--snx-surface-muted)); }
.pill--warn { color: rgb(var(--snx-warning)); background: rgb(var(--snx-warning-soft)); border-color: rgb(var(--snx-warning) / .35); }
.btn--danger { color: rgb(var(--snx-danger)); border-color: rgb(var(--snx-border-strong)); background: rgb(var(--snx-surface)); }
.btn--danger:hover { background: rgb(var(--snx-danger-soft)); border-color: rgb(var(--snx-danger) / .45); }
.btn--ghost { color: rgb(var(--snx-muted)); border-color: rgb(var(--snx-border-default)); background: transparent; }
.btn--ghost:hover { color: rgb(var(--snx-strong)); background: rgb(var(--snx-surface-muted)); }
.btn--block { width: 100%; justify-content: center; }

/* ── Uploader (drop-zone clicavel) ──────────────────────────────────────────
 * Variante visual de input file dentro de forms (§17.3/§17.4). Esconde o
 * <input type="file"> nativo via .uploader__input.is-hidden e usa <label>
 * estilizada como drop-zone tokenizada. Auto-submit via onchange no input.
 * Token-only: zero hex/rgb literal.
 */
.uploader { display: block; }
.uploader__input.is-hidden {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.uploader__label {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 16px;
  border: 1.5px dashed rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface-muted));
  color: rgb(var(--snx-strong));
  cursor: pointer;
  transition: border-color .15s, background .15s, color .15s;
}
.uploader__label:hover {
  border-color: rgb(var(--snx-primary));
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
}
.uploader__input:focus-visible + .uploader__label {
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 2px;
}
.uploader__ico {
  flex-shrink: 0; width: 22px; height: 22px;
  color: rgb(var(--snx-primary));
}
.uploader__txt { display: flex; flex-direction: column; gap: 2px; line-height: 1.3; }
.uploader__title { font-weight: 500; font-size: 13.5px; }
.uploader__hint { font-size: 12px; color: rgb(var(--snx-muted)); }

/* Preview de arquivos selecionados em uploaders multiplos antes do submit.
   Popula via JS (input[data-preview-target] -> <ul id="..."> adjacente). */
.upload-preview {
  list-style: none;
  margin: 8px 0 0;
  padding: 8px 12px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.upload-preview__item {
  display: flex;
  align-items: baseline;
  gap: 4px;
  font-size: 12.5px;
}

.kpis--trio { grid-template-columns: repeat(3, 1fr); margin-top: 12px; }
.kpi__ico--success { background: rgb(var(--snx-success-soft)); color: rgb(var(--snx-success)); }
.kpi__ico--warn { background: rgb(var(--snx-warning-soft)); color: rgb(var(--snx-warning)); }
.kpi__ico--danger { background: rgb(var(--snx-danger-soft)); color: rgb(var(--snx-danger)); }
.kpi__ico--info { background: rgb(var(--snx-info-soft)); color: rgb(var(--snx-info)); }
.kpi__delta--warn { color: rgb(var(--snx-warning)); }
.st--compact { padding: 1px 6px; font-size: 10.5px; }
.dash-grid--deep { grid-template-columns: 2fr 1fr; }
.dash-grid--shallow { grid-template-columns: 1.45fr 1fr; margin-top: 12px; }
/* Layout livre 12-cols honrando Dashboard.layoutJson (posicaoLinha/posicaoColuna/larguraColunas/alturaLinhas). */
.dash-grid--free { grid-template-columns: repeat(12, 1fr); grid-auto-rows: minmax(120px, auto); }
.dash-grid--free > .panel,
.dash-grid--free > .kpi { min-width: 0; }
.seg--compact { margin-left: auto; }
.panel__link {
  margin-left: auto;
  font-size: 11.5px;
  color: rgb(var(--snx-primary));
  font-weight: 500;
}
.tl--checks { border-top: 1px solid rgb(var(--snx-border-default)); }
.chart-legend .sw.mono {
  margin-left: auto;
  font-family: var(--snx-font-mono);
}
.swatch-primary { background: rgb(var(--snx-primary)); }
.swatch-primary-soft { background: rgb(var(--snx-primary) / .2); }
.bar-list { display: flex; flex-direction: column; gap: 10px; }
.bar-row div { display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 4px; }
.bar-row span { color: rgb(var(--snx-muted)); }
.bar-row b { color: rgb(var(--snx-strong)); font-family: var(--snx-font-mono); font-weight: 600; }
.bar-row__fill {
  display: block;
  height: 7px;
  border-radius: 3px;
  background: linear-gradient(90deg, rgb(var(--snx-primary)) var(--w), rgb(var(--snx-surface-sunk)) var(--w));
}
.bar-row__fill--78 { --w: 78%; }
.bar-row__fill--64 { --w: 64%; }
.bar-row__fill--54 { --w: 54%; }

.chk-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 6px;
}
.chk-grid label {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 8px 10px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  font-size: 12.5px; color: rgb(var(--snx-strong));
  cursor: pointer;
  background: rgb(var(--snx-surface));
}
.chk-grid label:hover { border-color: rgb(var(--snx-border-strong)); background: rgb(var(--snx-surface-muted)); }
.chk-grid input[type="checkbox"],
.chk-grid input[type="radio"] { margin-top: 2px; }
.chk-grid small { display: block; color: rgb(var(--snx-muted)); font-size: 11px; margin-top: 2px; }

.auth-shell {
  min-height: 100vh;
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
  background: rgb(var(--snx-app));
}
.auth-shell__brand {
  background: rgb(var(--snx-chrome-bg));
  color: rgb(var(--snx-chrome-text));
  padding: 48px 40px;
  display: flex; align-items: center; justify-content: center;
}
.auth-shell__content { display: grid; place-items: center; padding: 48px 24px; }
.auth-card {
  width: 100%; max-width: 420px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  padding: 32px;
  box-shadow: 0 4px 10px -2px rgb(var(--snx-shadow) / .08);
}
.auth-card__hd { margin-bottom: 24px; }
.auth-card__hd h2 { margin: 0 0 4px; font: 600 18px var(--snx-font-ui); color: rgb(var(--snx-strong)); }
.auth-card__hd p { margin: 0; font-size: 12.5px; color: rgb(var(--snx-muted)); }
.auth-card__body { display: flex; flex-direction: column; gap: 16px; }
.auth-card__footer {
  margin-top: 24px; padding-top: 16px;
  border-top: 1px solid rgb(var(--snx-border-default));
  display: flex; justify-content: space-between;
  font-size: 11.5px; color: rgb(var(--snx-muted));
}
.auth-card__footer a { font-weight: 500; color: rgb(var(--snx-primary)); }
.auth-brand-logo {
  /* logo.svg vem em preto puro; brightness(0)+invert(1) garante branco solido em qualquer
     tema (chrome-bg pode ser escuro ou colorido). max-width limita em telas grandes. */
  display: block;
  width: 100%; max-width: 320px; height: auto;
  filter: brightness(0) invert(1);
}
@media (max-width: 900px) {
  body { min-width: 0; }
  .auth-shell { grid-template-columns: 1fr; }
  .auth-shell__brand { display: none; }
}

/* =========================================================================
   §17.10 Composer de colecao - HTMX, persistencia imediata sobre aggregate-raiz.
   Tokens-only; zero hex; sem framework JS alem do HTMX carregado no shell.
   ========================================================================= */
.composer {
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  padding: 16px;
}
.composer__hd { display: flex; align-items: baseline; gap: 12px; margin-bottom: 12px; }
.composer__hd h3 { margin: 0; font: 600 13px var(--snx-font-ui); color: rgb(var(--snx-strong)); }
.composer__hd .sub { font-size: 11.5px; color: rgb(var(--snx-muted)); }
/* sub-titulo opcional ao lado do h3 dentro do header de d-card — mesma tipografia das outras superficies de header (.panel__hd .sub, .composer__hd .sub). */
.d-card__hd .sub { font-size: 11.5px; color: rgb(var(--snx-muted)); font-family: var(--snx-font-mono); }
.composer__bd { display: flex; flex-direction: column; gap: 12px; }
.composer__tabs {
  display: inline-flex; gap: 0; border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius); overflow: hidden; align-self: flex-start;
}
.composer__tabs button {
  padding: 6px 12px; border: 0; background: rgb(var(--snx-surface));
  font: 500 11.5px var(--snx-font-ui); color: rgb(var(--snx-muted));
  border-right: 1px solid rgb(var(--snx-border-default)); cursor: pointer;
}
.composer__tabs button:last-child { border-right: 0; }
.composer__tabs button:hover { background: rgb(var(--snx-surface-muted)); color: rgb(var(--snx-strong)); }
.composer__tabs button.is-active {
  background: rgb(var(--snx-primary-soft)); color: rgb(var(--snx-primary)); font-weight: 600;
}
.composer__lookup { position: relative; }
.composer__results {
  position: absolute; top: calc(100% + 2px); left: 0; right: 0;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  box-shadow: 0 4px 10px -2px rgb(var(--snx-shadow) / .12);
  z-index: 4; max-height: 280px; overflow-y: auto;
}
.composer__results:empty { display: none; }
.composer__result {
  display: flex; flex-direction: column; gap: 2px;
  padding: 8px 10px;
  font-size: 12.5px; color: rgb(var(--snx-strong));
  cursor: pointer;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.composer__result:last-child { border-bottom: 0; }
.composer__result:hover { background: rgb(var(--snx-surface-muted)); }
.composer__result small { color: rgb(var(--snx-muted)); font-size: 11px; }
.composer__result.is-disabled { opacity: .55; cursor: not-allowed; pointer-events: none; }
.composer__external { display: none; }
.composer__external.is-visible { display: block; }
.composer__hint {
  padding: 8px 10px; font-size: 11.5px;
  color: rgb(var(--snx-warning));
  background: rgb(var(--snx-warning-soft));
  border: 1px solid rgb(var(--snx-warning) / .25);
  border-radius: var(--snx-radius);
}
.composer__hint--info { color: rgb(var(--snx-info)); background: rgb(var(--snx-info-soft)); border-color: rgb(var(--snx-info) / .25); }
.composer__hint--err { color: rgb(var(--snx-danger)); background: rgb(var(--snx-danger-soft)); border-color: rgb(var(--snx-danger) / .25); }
.composer__empty {
  padding: 16px; text-align: center;
  color: rgb(var(--snx-muted)); font-size: 12px;
  background: rgb(var(--snx-surface-sunk));
  border: 1px dashed rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
}
.composer__row {
  display: flex; gap: 8px; align-items: center;
}
.composer__obrigatorio {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; color: rgb(var(--snx-muted));
}
.composer__hidden { display: none; }
.u-muted { color: rgb(var(--snx-muted)); }

/* ============================================================================
   §17.11 — Calendario grid mensal (Sessao E `agenda`)
   Inspirado no mock canonico em `docs/calendario.html`. Tokens 100% via
   `var(--snx-*)` — zero hex/rgb literal. Variantes `.cal--semana` ficam como
   debito [polimento] (template nao implementado em Onda 1).
   ============================================================================ */

.cal {
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  box-shadow: 0 1px 2px rgb(var(--snx-shadow) / .04);
  overflow: hidden;
  font-family: var(--snx-font-ui);
  color: rgb(var(--snx-strong));
}

.cal__toolbar {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px;
  background: rgb(var(--snx-surface-sunk));
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.cal__toolbar-left { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.cal__toolbar-right { display: flex; align-items: center; gap: 6px; }
.cal__legend { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.cal__legend-item {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; color: rgb(var(--snx-muted));
}
.cal__legend-item .dot { flex: 0 0 auto; }
.cal__count {
  font-family: var(--snx-font-mono);
  font-size: 12px;
  color: rgb(var(--snx-muted));
  padding-left: 12px;
  border-left: 1px solid rgb(var(--snx-border-default));
}
.cal__count b { color: rgb(var(--snx-strong)); font-weight: 600; }

.cal__weekhead {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  position: sticky; top: 0; z-index: 3;
  background: rgb(var(--snx-surface-sunk));
  border-bottom: 1px solid rgb(var(--snx-border-strong));
}
.cal__weekhead-cell {
  padding: 9px 10px;
  font: 500 11px/1 var(--snx-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgb(var(--snx-muted));
  border-right: 1px solid rgb(var(--snx-border-default));
}
.cal__weekhead-cell:last-child { border-right: 0; }
.cal__weekhead-cell--weekend { color: rgb(var(--snx-subtle)); }

.cal__layer { position: relative; }
.cal__grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  grid-auto-rows: minmax(118px, 1fr);
  background: rgb(var(--snx-border-default));
  gap: 1px;
}

.cal-cell {
  background: rgb(var(--snx-surface));
  padding: 6px 8px 8px;
  position: relative;
  min-width: 0;
  display: flex; flex-direction: column;
  cursor: default;
  transition: background 120ms ease;
}
.cal-cell:focus-visible {
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: -2px;
  z-index: 2;
}
.cal-cell:hover { background: rgb(var(--snx-surface-soft)); }
.cal-cell--out {
  background: rgb(var(--snx-surface-soft));
  opacity: 0.55;
}
.cal-cell--weekend { background: rgb(var(--snx-surface-muted)); }
.cal-cell--out.cal-cell--weekend { background: rgb(var(--snx-surface-muted)); opacity: 0.5; }
.cal-cell--today { background: rgb(var(--snx-primary-soft)); }
.cal-cell--today:hover { background: rgb(var(--snx-primary-soft)); }
/* Garante que `today` ganha de `weekend` independente da ordem das classes no DOM. */
.cal-cell--today.cal-cell--weekend { background: rgb(var(--snx-primary-soft)); }

.cal-cell__head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 5px;
  min-height: 18px;
}
.cal-day-num {
  font: 500 12px/1 var(--snx-font-mono);
  color: rgb(var(--snx-muted));
  padding: 2px 4px;
  border-radius: var(--snx-radius);
  letter-spacing: 0.02em;
}
.cal-cell--today .cal-day-num {
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
  font-weight: 600;
}
.cal-cell--out .cal-day-num { color: rgb(var(--snx-subtle)); }

.cal-day-marker {
  font: 500 10px/1 var(--snx-font-mono);
  color: rgb(var(--snx-subtle));
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.cal-events {
  display: flex; flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.cal-event {
  display: flex; align-items: center; gap: 6px;
  padding: 3px 6px 3px 5px;
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-sunk));
  border: 1px solid transparent;
  font-size: 12px;
  line-height: 1.3;
  color: rgb(var(--snx-strong));
  cursor: pointer;
  text-decoration: none;
  min-width: 0;
  transition: background 100ms ease, border-color 100ms ease;
}
.cal-event:hover {
  background: rgb(var(--snx-surface));
  border-color: rgb(var(--snx-border-strong));
}
.cal-event:focus-visible {
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 1px;
}
.cal-event__time {
  flex: 0 0 auto;
  font: 500 11px/1 var(--snx-font-mono);
  color: rgb(var(--snx-muted));
  letter-spacing: 0.01em;
}
.cal-event__title {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.cal-overflow {
  align-self: flex-start;
  margin-top: 2px;
  font: 500 11px/1 var(--snx-font-ui);
  color: rgb(var(--snx-muted));
  background: transparent;
  border: 0;
  padding: 3px 4px;
  cursor: pointer;
  border-radius: var(--snx-radius);
  text-decoration: none;
}
.cal-overflow:hover { background: rgb(var(--snx-surface-muted)); color: rgb(var(--snx-strong)); }
.cal-overflow:focus-visible { outline: 2px solid rgb(var(--snx-primary)); outline-offset: 1px; }

.cal-cell--banded { padding: 0; }
.cal-cell--banded .cal-cell__head { padding: 6px 8px 0; margin-bottom: 4px; }
.cal-banner {
  margin-top: auto;
  padding: 6px 8px;
  background: rgb(var(--snx-info-soft));
  border-top: 1px solid rgb(var(--snx-info) / 0.25);
  font-size: 12px;
  color: rgb(var(--snx-info));
  display: flex; align-items: center; gap: 6px;
  min-width: 0;
}
.cal-banner__title {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-weight: 500;
}

/* Layer absoluto sobre o grid para barras multi-dia. */
.cal-multi {
  position: absolute; inset: 0;
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  grid-auto-rows: minmax(118px, 1fr);
  gap: 1px;
  pointer-events: none;
  padding: 28px 6px 6px;
}
.cal-multi__bar {
  pointer-events: auto;
  align-self: start;
  margin-top: 0;
  height: 22px;
  display: flex; align-items: center; gap: 6px;
  padding: 0 8px;
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-strong));
  box-shadow: 0 1px 2px rgb(var(--snx-shadow) / .04);
  font-size: 11px; font-weight: 500;
  color: rgb(var(--snx-strong));
  overflow: hidden;
  cursor: pointer;
  text-decoration: none;
  min-width: 0;
}
.cal-multi__bar:hover { background: rgb(var(--snx-surface-muted)); }
.cal-multi__bar .cal-event__title {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cal-multi__bar.st--info  { background: rgb(var(--snx-info-soft));    border-color: rgb(var(--snx-info) / .35);    color: rgb(var(--snx-info)); }
.cal-multi__bar.st--warn  { background: rgb(var(--snx-warning-soft)); border-color: rgb(var(--snx-warning) / .35); color: rgb(var(--snx-warning)); }
.cal-multi__bar.st--err   { background: rgb(var(--snx-danger-soft));  border-color: rgb(var(--snx-danger) / .35);  color: rgb(var(--snx-danger)); }
.cal-multi__bar.st--ok    { background: rgb(var(--snx-success-soft)); border-color: rgb(var(--snx-success) / .35); color: rgb(var(--snx-success)); }

.cal__empty {
  padding: 80px 24px;
  text-align: center;
  color: rgb(var(--snx-muted));
  background:
    repeating-linear-gradient(
      45deg,
      rgb(var(--snx-surface)) 0 12px,
      rgb(var(--snx-surface-soft)) 12px 24px
    );
}
.cal__empty-icon {
  width: 48px; height: 48px;
  margin: 0 auto 16px;
  display: grid; place-items: center;
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  color: rgb(var(--snx-subtle));
}
.cal__empty-title {
  font-size: 15px; font-weight: 600;
  color: rgb(var(--snx-strong));
  margin: 0 0 4px;
}
.cal__empty-msg { font-size: 13px; max-width: 360px; margin: 0 auto; }
.cal__empty-actions { margin-top: 18px; display: flex; gap: 8px; justify-content: center; }

/* Header navigation usado na §17.11 (mes anterior/proximo + label). */
.month-nav { display: inline-flex; align-items: center; gap: 2px; }
.month-nav .month-label {
  min-width: 96px; text-align: center;
  font: 500 13px/1 var(--snx-font-mono);
  color: rgb(var(--snx-strong));
  padding: 0 8px;
}

/* =========================================================================
   §17.12 — Hub conversacional (mural)
   Shell 3-col + sidebar de canais + feed flat-list + composer + painel
   ========================================================================= */

/* shell raiz */
.mural{
  display: grid;
  grid-template-columns: var(--snx-mural-sidebar) 1fr var(--snx-mural-sidebar);
  height: calc(100vh - 56px);
  background: rgb(var(--snx-app));
  min-height: 0;
}
.mural--no-right{ grid-template-columns: var(--snx-mural-sidebar) 1fr; }
.mural--thread{ grid-template-columns: var(--snx-mural-sidebar) 1fr 480px; }

/* ----------- COLUNA 1: lista de canais ----------- */
.ch{
  background: rgb(var(--snx-surface));
  border-right: 1px solid rgb(var(--snx-border-default));
  display: flex; flex-direction: column;
  min-width: 0; min-height: 0;
}
.ch__head{
  padding: 12px 14px 10px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface));
  flex-shrink: 0;
}
.ch__title{
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 10px;
}
.ch__title h2{
  margin: 0;
  font-size: 13px; font-weight: 600;
  letter-spacing: 0.01em;
  color: rgb(var(--snx-strong));
}
.ch__title small{
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
}
.ch__search{ position: relative; }
.ch__search input{
  width: 100%;
  padding: 6px 10px 6px 30px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
  font: inherit; font-size: 12.5px;
  color: rgb(var(--snx-strong));
  outline: none;
}
.ch__search input:focus{
  border-color: rgb(var(--snx-primary));
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .15);
}
.ch__search svg{
  position: absolute; left: 9px; top: 50%;
  transform: translateY(-50%);
  color: rgb(var(--snx-subtle));
}
.ch__newbtn{
  margin-top: 8px; width: 100%;
  display: flex; align-items: center; justify-content: center; gap: 6px;
  padding: 6px 10px;
  border: 1px dashed rgb(var(--snx-border-strong));
  background: transparent;
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-muted));
  font: inherit; font-size: 12px;
  cursor: pointer;
}
.ch__newbtn:hover{
  color: rgb(var(--snx-primary));
  border-color: rgb(var(--snx-primary));
}

.ch__list{
  flex: 1; overflow-y: auto;
  padding: 6px 0 16px;
}
.ch__sec{ margin-top: 4px; }
/* seção colapsável via <details>/<summary> nativo (zero JS) */
.ch__sec-h{
  display: flex; align-items: center; gap: 6px;
  padding: 8px 14px 4px;
  font-size: 10.5px; font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: rgb(var(--snx-subtle));
  cursor: pointer;
  user-select: none;
  list-style: none; /* esconde marker default do <summary> */
}
.ch__sec-h::-webkit-details-marker{ display: none; }
.ch__sec-h .caret{
  transition: transform .15s;
  transform: rotate(-90deg); /* default = collapsed (sem [open]) */
  flex-shrink: 0;
}
.ch__sec[open] > .ch__sec-h .caret{ transform: rotate(0); }
.ch__sec-h.is-collapsed .caret{ transform: rotate(-90deg); }
.ch__sec-h .count{
  margin-left: auto;
  font-family: var(--snx-font-mono);
  font-size: 10px;
  color: rgb(var(--snx-subtle));
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
}

.ch__item{
  display: grid;
  grid-template-columns: 32px 1fr auto;
  grid-template-rows: auto auto;
  column-gap: 10px;
  align-items: center;
  padding: 8px 14px;
  cursor: pointer;
  border-left: 2px solid transparent;
  position: relative;
  text-decoration: none;
  color: inherit;
}
.ch__item:hover{ background: rgb(var(--snx-surface-muted)); }
.ch__item.is-active{
  background: rgb(var(--snx-primary-soft));
  border-left-color: rgb(var(--snx-primary));
}
.ch__item.is-pinned::after{
  content: "";
  position: absolute;
  right: 6px; top: 6px;
  width: 4px; height: 4px;
  background: rgb(var(--snx-subtle));
  border-radius: 50%;
}
.ch__ava{
  grid-row: 1 / 3;
  width: 32px; height: 32px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-size: 11.5px; font-weight: 600;
  color: rgb(var(--snx-on-primary));
  letter-spacing: 0.02em;
  flex-shrink: 0;
}
.ch__ava--sys{
  background: rgb(var(--snx-surface-sunk));
  color: rgb(var(--snx-warning));
  border: 1px solid rgb(var(--snx-border-default));
}
.ch__ava--mural{
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
  border: 1px solid rgb(var(--snx-primary));
}
.ch__row1{
  display: flex; align-items: center; gap: 6px;
  min-width: 0;
  grid-column: 2; grid-row: 1;
}
.ch__name{
  font-size: 13px; font-weight: 600;
  color: rgb(var(--snx-strong));
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ch__chip-owner{
  font-size: 9.5px;
  font-family: var(--snx-font-mono);
  padding: 1px 5px;
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-sunk));
  color: rgb(var(--snx-muted));
  border: 1px solid rgb(var(--snx-border-default));
  letter-spacing: 0.04em;
  flex-shrink: 0;
}
.ch__time{
  grid-column: 3; grid-row: 1;
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
  align-self: start;
  padding-top: 2px;
}
.ch__preview{
  grid-column: 2; grid-row: 2;
  font-size: 12px;
  color: rgb(var(--snx-muted));
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ch__preview b{ color: rgb(var(--snx-strong)); font-weight: 600; }
.ch__badge{
  grid-column: 3; grid-row: 2;
  background: rgb(var(--snx-danger));
  color: rgb(var(--snx-on-primary));
  font-size: 10px; font-weight: 600;
  padding: 1px 6px;
  border-radius: 10px;
  min-width: 18px;
  text-align: center;
  line-height: 1.4;
  align-self: end;
  margin-bottom: 1px;
}
/* Mention badge — usa cor primary para coerencia com `.msg__mention` (chip)
   no feed. Distingue do `.ch__badge` padrao (danger) e mantem semantica
   "atrai atencao" sem alarmar (convencao Slack/Telegram). Sessao E §17.12. */
.ch__badge--mention{
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
}

/* ----------- COLUNA 2: feed ----------- */
.mural-feed{
  background: rgb(var(--snx-surface));
  display: flex; flex-direction: column;
  min-width: 0; min-height: 0;
}
.mural-feed__head{
  display: flex; align-items: center; gap: 10px;
  padding: 10px 18px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface));
  flex-shrink: 0;
}
.mural-feed__head .ch__ava{
  width: 30px; height: 30px;
  font-size: 11px;
}
.mural-feed__head-text{ flex: 1; min-width: 0; }
.mural-feed__head-name{
  font-size: 14px; font-weight: 600;
  color: rgb(var(--snx-strong));
  display: flex; align-items: center; gap: 8px;
}
.mural-feed__head-desc{
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.mural-feed__head-actions{ display: flex; gap: 4px; }
.mural-feed__scroll{
  flex: 1; overflow-y: auto;
  padding: 14px 4px 14px 0;
  background: rgb(var(--snx-surface));
}

/* day separator */
.day-sep{
  display: flex; align-items: center; gap: 12px;
  padding: 10px 18px;
  color: rgb(var(--snx-subtle));
  font-size: 10.5px;
  font-family: var(--snx-font-mono);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.day-sep::before, .day-sep::after{
  content: "";
  flex: 1; height: 1px;
  background: rgb(var(--snx-border-default));
}

/* mensagem humana — Telegram/WhatsApp-style com bubble */
.msg{
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 4px 18px;
  position: relative;
}
.msg--mine{
  flex-direction: row-reverse;
}
.msg:hover .msg__menu{ opacity: 1; }
.msg__ava-col{
  display: flex; justify-content: center;
  padding-top: 2px;
  flex-shrink: 0;
}
.msg__ava{
  width: 34px; height: 34px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 600;
  color: rgb(var(--snx-on-primary));
  flex-shrink: 0;
}
.msg__body{
  min-width: 0;
  max-width: 75%;
  display: flex;
  flex-direction: column;
  /* Sessao E++ refinamento: largura segue o conteudo (bubble ou thread-toggle,
     o que for maior). align-items garante que o bubble nao estique para a
     largura total do body quando o thread-toggle for mais largo. */
  align-items: flex-start;
}
.msg--mine .msg__body{ align-items: flex-end; }
.msg__bubble{
  position: relative;
  background: rgb(var(--snx-surface-muted));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: 14px;
  padding: 8px 12px 8px;
  /* Sessao E++ refinamento: largura minima evita balao colado quando o conteudo
     e muito curto (ex.: "ok"). Tambem afeta os baloes da thread no Frame 5. */
  min-width: 140px;
  max-width: 100%;
}
.msg--mine .msg__bubble{
  background: rgb(var(--snx-primary-soft));
  border-color: rgb(var(--snx-primary) / .18);
}
.msg--removed .msg__bubble{
  background: rgb(var(--snx-surface-sunk));
  border-color: rgb(var(--snx-border-default));
}
/* Sessao E++ (2026-04-26): pontinha (tail) na parte superior do balao
   apontando para o avatar — efeito de balao de fala. Triangulos via
   bordas transparentes; cor da pontinha casa com o fundo de cada variante.
   Para .msg normal (avatar a esquerda) -> tail aponta para esquerda;
   para .msg--mine (avatar a direita) -> tail aponta para direita. */
.msg__bubble::before{
  content: "";
  position: absolute;
  top: 10px;
  left: -6px;
  width: 0; height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-right: 6px solid rgb(var(--snx-surface-muted));
}
.msg--mine .msg__bubble::before{
  left: auto;
  right: -6px;
  border-right: 0;
  border-left: 6px solid rgb(var(--snx-primary-soft));
}
.msg--removed .msg__bubble::before{
  border-right-color: rgb(var(--snx-surface-sunk));
}
.msg--mine.msg--removed .msg__bubble::before{
  border-left-color: rgb(var(--snx-surface-sunk));
}
.msg--removed .msg__text{
  color: rgb(var(--snx-subtle));
  font-style: italic;
}
/* Sessao E+: destaque visual da raiz quando o painel Frame 5 esta aberto
   nessa thread. Borda lateral primary; nao altera fundo do bubble. */
.msg--thread-active{
  position: relative;
}
.msg--thread-active::before{
  content: "";
  position: absolute;
  left: -8px; top: 0; bottom: 0;
  width: 3px;
  background: rgb(var(--snx-primary));
  border-radius: 2px;
}
/* Espelha a borda para o lado direito quando a mensagem propria esta em
   reverse (M1 da revisao UI E+ — Telegram-style alinha .msg--mine a direita). */
.msg--mine.msg--thread-active::before{
  left: auto;
  right: -8px;
}
/* Sessao E+: flash de 2s quando o usuario chega via deep-link `#msg-X`
   (gateway de acao SISTEMA ou link de notificacao). JS remove a classe
   apos a animacao terminar. Respeita prefers-reduced-motion. */
@keyframes muralMsgHighlight {
  0%   { background: rgb(var(--snx-info-soft)); }
  100% { background: transparent; }
}
.msg--highlight .msg__bubble{
  animation: muralMsgHighlight 2s ease-out;
}
@media (prefers-reduced-motion: reduce){
  .msg--highlight .msg__bubble{ animation: none; outline: 2px solid rgb(var(--snx-info)); }
}
.msg__head{
  display: flex; align-items: baseline; gap: 8px;
  margin-bottom: 2px;
  flex-wrap: wrap;
}
.msg__author{
  font-size: 13px; font-weight: 600;
  color: rgb(var(--snx-strong));
}
.msg__time{
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
}
.msg__edited{
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  font-style: italic;
}
/* Sessao E++ (2026-04-26): menu de acoes posicionado AO LADO do bubble, no
   topo, no lado OPOSTO ao avatar — para que nao colida com o conteudo do
   bubble e fique visualmente "fora" da bolha de fala.
   - .msg normal (avatar a esquerda) -> menu a direita do bubble.
   - .msg--mine (avatar a direita)   -> menu a esquerda do bubble.
   Body usa `width: fit-content` para o menu absoluto ancorar adjacente. */
.msg__menu{
  position: absolute;
  top: 0;
  right: -8px;
  transform: translateX(100%);
  display: flex; gap: 2px;
  padding: 2px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  box-shadow: 0 1px 3px rgb(var(--snx-shadow) / .08);
  opacity: 0;
  transition: opacity .12s;
}
.msg--mine .msg__menu{
  right: auto;
  left: -8px;
  transform: translateX(-100%);
}
.msg__menu .btn--icon{ width: 24px; height: 24px; }
.msg__text{
  font-size: 13.5px;
  color: rgb(var(--snx-strong));
  line-height: 1.5;
  word-wrap: break-word;
  white-space: pre-wrap; /* preserva quebras de linha do textarea (RN — corpo livre, sem markdown) */
}
.msg__text a{
  color: rgb(var(--snx-info));
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}
.msg__mention{
  color: rgb(var(--snx-primary));
  background: rgb(var(--snx-primary-soft));
  padding: 0 3px;
  border-radius: var(--snx-radius);
  font-weight: 500;
}
/* (regra .msg--removed .msg__text consolidada na linha ~2361 — bloco principal do tombstone) */

/* anexos */
.msg__attach{
  margin-top: 6px;
  display: flex; flex-wrap: wrap; gap: 8px;
}
.att-img{
  /* Botao que envolve <img> — vira clicavel para o lightbox. */
  padding: 0;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-sunk));
  cursor: zoom-in;
  overflow: hidden;
  display: inline-block;
  max-width: 320px;
  max-height: 240px;
  line-height: 0; /* remove gap fantasma do <img> inline-block */
}
.att-img img{
  display: block;
  max-width: 320px;
  max-height: 240px;
  width: auto; height: auto;
  object-fit: cover;
}
.att-img:hover{ border-color: rgb(var(--snx-primary)); }
.att-doc{
  display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 12px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
  cursor: pointer;
  max-width: 320px;
  min-width: 0;
  text-decoration: none;
  color: inherit;
}
.att-doc:hover{ border-color: rgb(var(--snx-primary)); }
.att-doc__icon{
  width: 28px; height: 28px;
  border-radius: var(--snx-radius-sm);
  background: rgb(var(--snx-info-soft));
  color: rgb(var(--snx-info));
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.att-doc__meta{ min-width: 0; }
.att-doc__name{
  font-size: 12.5px; font-weight: 500;
  color: rgb(var(--snx-strong));
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  display: block;
}
.att-doc__size{
  font-size: 11px;
  color: rgb(var(--snx-muted));
  font-family: var(--snx-font-mono);
}

/* thread */
.msg__thread-toggle{
  margin-top: 6px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px;
  background: rgb(var(--snx-surface-muted));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: 12px;
  font-size: 11.5px;
  color: rgb(var(--snx-info));
  cursor: pointer;
}
.msg__thread-toggle:hover{ background: rgb(var(--snx-info-soft)); }
.msg__thread-toggle b{ font-weight: 600; }
.msg__thread-toggle .reactor-stack{ display: inline-flex; }
.msg__thread-toggle .reactor-stack span{
  width: 16px; height: 16px;
  border-radius: 50%;
  border: 1.5px solid rgb(var(--snx-surface));
  margin-left: -4px;
  font-size: 9px; font-weight: 600;
  color: rgb(var(--snx-on-primary));
  display: inline-flex; align-items: center; justify-content: center;
}
.msg__thread-toggle .reactor-stack span:first-child{ margin-left: 0; }

.thread{
  margin: 4px 0 6px 4px;
  padding: 6px 0 6px 12px;
  border-left: 2px solid rgb(var(--snx-border-default));
}
.thread .msg{
  padding: 4px 18px 4px 0;
  gap: 8px;
}
.thread .msg__ava{
  width: 26px; height: 26px;
  font-size: 10.5px;
}
.thread .msg__bubble{ padding: 6px 10px; border-radius: 12px; }
.thread .msg__text{ font-size: 13px; }

/* mensagem do SISTEMA */
.sysmsg{
  margin: 6px 18px 10px 18px;
  padding: 14px 16px;
  border: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface-muted));
  border-radius: var(--snx-radius);
  display: grid;
  grid-template-columns: 36px 1fr;
  column-gap: 14px;
  border-left-width: 3px;
}
.sysmsg--info{ border-left-color: rgb(var(--snx-info)); }
.sysmsg--warn{ border-left-color: rgb(var(--snx-warning)); }
.sysmsg--err { border-left-color: rgb(var(--snx-danger)); }
.sysmsg__icon{
  width: 32px; height: 32px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--snx-font-mono);
  font-size: 9px; font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.sysmsg--info .sysmsg__icon{ background: rgb(var(--snx-info-soft)); color: rgb(var(--snx-info)); }
.sysmsg--warn .sysmsg__icon{ background: rgb(var(--snx-warning-soft)); color: rgb(var(--snx-warning)); }
.sysmsg--err  .sysmsg__icon{ background: rgb(var(--snx-danger-soft));  color: rgb(var(--snx-danger)); }
.sysmsg__head{
  display: flex; align-items: center; gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 4px;
}
.sysmsg__pill{
  font-family: var(--snx-font-mono);
  font-size: 10px; font-weight: 600;
  padding: 2px 6px;
  border-radius: var(--snx-radius);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.sysmsg__module{
  font-family: var(--snx-font-mono);
  font-size: 11px;
  color: rgb(var(--snx-muted));
}
.sysmsg__time{
  margin-left: auto;
  font-family: var(--snx-font-mono);
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
}
.sysmsg__title{
  font-size: 14px; font-weight: 600;
  margin: 0 0 4px;
  color: rgb(var(--snx-strong));
  letter-spacing: -0.005em;
}
.sysmsg__body{
  font-size: 13px;
  color: rgb(var(--snx-muted));
  line-height: 1.5;
}
.sysmsg__body code{
  font-family: var(--snx-font-mono);
  font-size: 12px;
  background: rgb(var(--snx-surface-sunk));
  padding: 1px 4px;
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-strong));
}
.sysmsg__cta{
  margin-top: 10px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-strong));
  font-weight: 500;
  font-size: 12.5px;
  cursor: pointer;
  text-decoration: none;
}
.sysmsg__cta:hover{
  background: rgb(var(--snx-primary-soft));
  border-color: rgb(var(--snx-primary));
  color: rgb(var(--snx-primary-hover));
}

/* role-pill (PapelCanal — §13.5) */
.role-pill{
  font-family: var(--snx-font-mono);
  font-size: 9.5px; font-weight: 600;
  padding: 2px 5px;
  border-radius: var(--snx-radius);
  letter-spacing: 0.04em;
}
.role-pill--dono { background: rgb(var(--snx-warning-soft)); color: rgb(var(--snx-warning)); }
.role-pill--admin{ background: rgb(var(--snx-info-soft));    color: rgb(var(--snx-info)); }
.role-pill--memb { background: rgb(var(--snx-surface-sunk)); color: rgb(var(--snx-muted)); }

/* composer (msg-composer — distinto de §17.10 .composer) */
.msg-composer{
  border-top: 1px solid rgb(var(--snx-border-default));
  padding: 10px 18px 12px;
  background: rgb(var(--snx-surface));
  flex-shrink: 0;
}
.msg-composer__reply{
  display: flex; align-items: center; gap: 8px;
  padding: 6px 10px;
  background: rgb(var(--snx-primary-soft));
  border-left: 2px solid rgb(var(--snx-primary));
  border-radius: var(--snx-radius-sm);
  margin-bottom: 8px;
  font-size: 12px;
  color: rgb(var(--snx-muted));
}
.msg-composer__reply b{ color: rgb(var(--snx-primary-hover)); }
.msg-composer__reply .btn--icon{ margin-left: auto; width: 22px; height: 22px; }
/* Subcomponentes do chip de reply (Sessao E+ — preenchidos via JS). */
.msg-composer__reply-icon{ display: inline-flex; color: rgb(var(--snx-primary)); flex-shrink: 0; }
.msg-composer__reply-text{
  flex: 1; min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.msg-composer__reply-resumo{ color: rgb(var(--snx-subtle)); margin-left: 4px; }
/*
 * Container Telegram-style: pílula arredondada única, botões integrados visualmente
 * sem cards/segmentos separados. Botão de anexar à esquerda, textarea no meio
 * (auto-grow), botão enviar circular à direita.
 */
.msg-composer__box{
  display: flex;
  align-items: flex-end;
  gap: 4px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: 22px;
  padding: 4px 4px 4px 8px;
  background: rgb(var(--snx-surface-muted));
  transition: border-color .12s, box-shadow .12s, background .12s;
}
.msg-composer__box:focus-within,
.msg-composer__box.is-focused{
  border-color: rgb(var(--snx-primary));
  background: rgb(var(--snx-surface));
  box-shadow: 0 0 0 3px rgb(var(--snx-primary) / .15);
}
.msg-composer__box > .btn--icon{
  border-radius: 50%;
  width: 32px; height: 32px;
  border-color: transparent;
  flex-shrink: 0;
}
.msg-composer__box > .btn--icon:hover{
  background: rgb(var(--snx-primary-soft));
  color: rgb(var(--snx-primary));
  border-color: transparent;
}
.msg-composer__box textarea{
  flex: 1;
  border: none; outline: none;
  font: inherit; font-size: 13.5px;
  resize: none;
  background: transparent;
  color: rgb(var(--snx-strong));
  padding: 7px 6px;
  min-height: 22px; max-height: 120px;
  line-height: 1.45;
}
.msg-composer__box textarea::placeholder{ color: rgb(var(--snx-subtle)); }
.msg-composer__box textarea[disabled]{ cursor: not-allowed; }
/* Botão enviar — circular Telegram-style */
.msg-composer__send{
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px;
  padding: 0;
  background: rgb(var(--snx-primary));
  color: rgb(var(--snx-on-primary));
  border: 1px solid rgb(var(--snx-primary));
  border-radius: 50%;
  font: inherit;
  cursor: pointer;
  flex-shrink: 0;
  /* Esconde o label "Enviar"; SVG é o conteudo visivel — aria-label viria do botão. */
  font-size: 0;
  gap: 0;
}
.msg-composer__send svg{ font-size: 14px; }
.msg-composer__send:hover{
  background: rgb(var(--snx-primary-hover));
  border-color: rgb(var(--snx-primary-hover));
}
.msg-composer__send[disabled]{
  opacity: .45;
  cursor: not-allowed;
}
.msg-composer__meta{
  display: flex; justify-content: space-between;
  margin-top: 6px;
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
}
.msg-composer__meta .hint kbd{
  font-family: var(--snx-font-mono);
  font-size: 10px;
  padding: 1px 4px;
  border: 1px solid rgb(var(--snx-border-default));
  border-bottom-width: 2px;
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
  color: rgb(var(--snx-muted));
}

/* ----------- COLUNA 3: painel de detalhes do canal ----------- */
.mural-panel{
  background: rgb(var(--snx-surface-muted));
  border-left: 1px solid rgb(var(--snx-border-default));
  overflow-y: auto;
  display: flex; flex-direction: column;
  min-height: 0;
}
.mural-panel__head{
  padding: 12px 16px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  display: flex; align-items: center;
}
.mural-panel__head h3{
  margin: 0;
  font-size: 12px; font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgb(var(--snx-muted));
}
.mural-panel__head .btn--icon{ margin-left: auto; }

.mural-panel__hero{
  padding: 18px 16px 14px;
  text-align: center;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.mural-panel__hero .ch__ava{
  width: 64px; height: 64px;
  border-radius: var(--snx-radius-lg);
  font-size: 22px;
  margin: 0 auto 10px;
}
.mural-panel__hero h4{
  margin: 0 0 2px;
  font-size: 15px; font-weight: 600;
  color: rgb(var(--snx-strong));
}
.mural-panel__hero .meta{
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
}
.mural-panel__hero .status-line{
  margin-top: 4px;
  font-size: 11.5px;
  color: rgb(var(--snx-success));
  display: inline-flex; align-items: center; gap: 6px;
}
.mural-panel__hero .status-line .dot{
  width: 6px; height: 6px;
  border-radius: 50%;
  background: rgb(var(--snx-success));
  display: inline-block;
}
.mural-panel__sec{
  padding: 12px 16px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.mural-panel__sec h5{
  margin: 0 0 8px;
  font-size: 10.5px; font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgb(var(--snx-subtle));
  display: flex; align-items: center;
}
.mural-panel__sec h5 .count{
  margin-left: auto;
  font-family: var(--snx-font-mono);
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  letter-spacing: 0;
  text-transform: none;
  font-weight: 400;
}
.mural-panel__field{ margin-bottom: 8px; }
.mural-panel__field label{
  display: block;
  font-size: 11px;
  color: rgb(var(--snx-subtle));
  margin-bottom: 2px;
  font-family: var(--snx-font-mono);
  letter-spacing: 0.04em;
}
.mural-panel__field .value{
  font-size: 12.5px;
  color: rgb(var(--snx-strong));
  line-height: 1.45;
}
.mural-panel__btnrow{
  display: flex; flex-direction: column; gap: 6px;
  padding: 12px 16px;
}

/* member row (painel de grupo) */
.member{
  display: grid;
  grid-template-columns: 28px 1fr auto;
  column-gap: 10px;
  align-items: center;
  padding: 6px 0;
}
.member__ava{
  width: 28px; height: 28px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  color: rgb(var(--snx-on-primary));
  font-size: 10.5px; font-weight: 600;
}
.member__name{
  font-size: 12.5px; font-weight: 500;
  color: rgb(var(--snx-strong));
  line-height: 1.3;
}
.member__role{
  font-size: 10.5px;
  color: rgb(var(--snx-muted));
  font-family: var(--snx-font-mono);
}

/* ----------- THREADPANEL (Frame 5 — painel direito vira a thread) -----------
   Mesma cor de fundo do `.mural-panel` (--snx-surface-muted) para distinguir
   visualmente do feed (--snx-surface) e dar paridade com o painel de detalhes
   do canal (decisao UX 2026-04-26 / Sessao E++). */
.threadpanel{
  background: rgb(var(--snx-surface-muted));
  border-left: 1px solid rgb(var(--snx-border-default));
  display: flex; flex-direction: column;
  min-width: 0; min-height: 0;
}
.threadpanel__head{
  padding: 10px 16px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  background: rgb(var(--snx-surface-muted));
  flex-shrink: 0;
}
.threadpanel__head-row{ display: flex; align-items: center; gap: 8px; }
.threadpanel__head h3{
  margin: 0;
  font-size: 13px; font-weight: 600;
  color: rgb(var(--snx-strong));
}
.threadpanel__head-meta{
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  margin-top: 2px;
}
.threadpanel__head-meta a{
  color: rgb(var(--snx-info));
  text-decoration: none;
}
.threadpanel__scroll{
  flex: 1; overflow-y: auto;
  padding: 12px 0 8px;
}
.threadpanel__parent{
  padding-bottom: 10px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  margin-bottom: 4px;
}
.threadpanel__count{
  display: flex; align-items: center; gap: 12px;
  padding: 6px 18px 8px;
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
}
.threadpanel__count::after{
  content: "";
  flex: 1; height: 1px;
  background: rgb(var(--snx-border-default));
}
.threadpanel__count b{ color: rgb(var(--snx-strong)); font-weight: 600; }
.threadpanel .msg{
  grid-template-columns: 50px 1fr;
  padding: 6px 16px 6px 0;
}
.threadpanel .msg__ava{
  width: 30px; height: 30px;
  font-size: 11px;
}
.threadpanel .msg__text{ font-size: 13px; }

/* feed em modo thread — mensagem-pai destacada */
.msg.is-thread-source{
  background: rgb(var(--snx-info-soft));
  box-shadow: inset 3px 0 0 rgb(var(--snx-info));
}
.msg.is-thread-source:hover{ background: rgb(var(--snx-info-soft)); }

/* ----------- responsividade ----------- */
@media (max-width: 1023px){
  .mural{ grid-template-columns: 240px 1fr; }
  .mural .mural-panel,
  .mural .threadpanel{ display: none; }
}
@media (max-width: 767px){
  .mural{ grid-template-columns: 1fr; height: auto; }
  .mural .ch{ display: none; }
}

/* ----------- helpers de Sessao D (paga MED M2 da revisao C) ----------- */
.ch__sec-empty{
  padding: 4px 14px 8px;
  font-size: 11.5px;
  color: rgb(var(--snx-subtle));
}
.ch__newbtn-row{
  display: flex; flex-direction: column; gap: 4px;
}
.member__actions{
  display: inline-flex; align-items: center; gap: 4px;
}

/* ----------- Click no avatar/nome do autor → abre DM ----------- */
[data-dm-target]{
  cursor: pointer;
  transition: opacity .12s ease, text-decoration-color .12s ease;
}
[data-dm-target]:hover{ opacity: .82; }
.msg__author[data-dm-target]:hover{ text-decoration: underline; }
[data-dm-target]:focus-visible{
  outline: 2px solid rgb(var(--snx-primary) / .4);
  outline-offset: 2px;
  border-radius: var(--snx-radius-sm);
}

/* ----------- Anexos: preview-chips + lightbox ----------- */
.att-preview-row{
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 6px 12px 0;
}
.att-preview{
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 6px 4px 8px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface-muted));
  font-size: 11.5px;
  color: rgb(var(--snx-strong));
  max-width: 240px;
}
.att-preview--erro{
  border-color: rgb(var(--snx-danger));
  background: rgb(var(--snx-danger-soft));
  color: rgb(var(--snx-danger));
}
.att-preview__ico{
  display: inline-flex;
  color: rgb(var(--snx-muted));
  flex-shrink: 0;
}
.att-preview--erro .att-preview__ico{ color: rgb(var(--snx-danger)); }
.att-preview__nome{
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  max-width: 130px;
}
.att-preview__tam{
  font-size: 10.5px;
  color: rgb(var(--snx-subtle));
  flex-shrink: 0;
}
.att-preview__rm{
  background: transparent; border: none;
  width: 18px; height: 18px;
  border-radius: 50%;
  cursor: pointer;
  color: rgb(var(--snx-muted));
  font-size: 14px; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.att-preview__rm:hover{
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
}

.mural-lightbox{
  border: none;
  padding: 0;
  background: transparent;
  max-width: 95vw;
  max-height: 95vh;
}
.mural-lightbox::backdrop{ background: rgb(var(--snx-shadow) / .85); }
.mural-lightbox img{
  display: block;
  max-width: 95vw;
  max-height: 95vh;
  border-radius: var(--snx-radius-2);
  box-shadow: var(--snx-shadow-lg);
}
.mural-lightbox__close{
  position: fixed;
  top: 16px; right: 20px;
  width: 36px; height: 36px;
  border-radius: 50%;
  border: none;
  background: rgb(var(--snx-surface) / .9);
  color: rgb(var(--snx-strong));
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: var(--snx-shadow-lg);
}
.mural-lightbox__close:hover{ background: rgb(var(--snx-surface)); }

/* ----------- Telegram-like: scroll bottom-zero + scrollbar oculta ----------- */
.mural-feed__scroll{
  scrollbar-width: none;            /* Firefox */
  -ms-overflow-style: none;         /* IE/Edge legacy */
}
.mural-feed__scroll::-webkit-scrollbar{ display: none; } /* Chromium/Safari */

/* ----------- picker-admin (lista direta + filtro nos dialogs) ----------- */
.picker-admin{ display: flex; flex-direction: column; gap: 8px; }
.picker-admin__filter{
  width: 100%;
  padding: 8px 10px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface-muted));
  color: rgb(var(--snx-strong));
  font-family: var(--snx-font-ui);
  font-size: 13px;
}
.picker-admin__filter:focus{
  outline: 2px solid rgb(var(--snx-primary) / .4);
  outline-offset: 1px;
  background: rgb(var(--snx-surface));
}
.picker-admin__list{
  margin: 0; padding: 4px;
  list-style: none;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  max-height: 320px;
  min-height: 80px;
  overflow-y: auto;
  scrollbar-width: thin;
}
.picker-admin__list li{
  display: grid;
  grid-template-columns: 28px 1fr;
  column-gap: 10px;
  align-items: center;
  padding: 8px 10px;
  border-radius: var(--snx-radius-2);
  cursor: pointer;
  transition: background-color .12s ease;
}
.picker-admin__list li:hover,
.picker-admin__list li:focus-visible{
  background: rgb(var(--snx-primary-soft));
  outline: none;
}
.picker-admin__list .member__ava{
  width: 28px; height: 28px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  color: rgb(var(--snx-on-primary));
  font-size: 10.5px; font-weight: 600;
}
.picker-admin__meta{
  display: flex; flex-direction: column; min-width: 0;
}
.picker-admin__nome{
  font-size: 12.5px; font-weight: 500;
  color: rgb(var(--snx-strong));
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.picker-admin__email{
  font-size: 10.5px;
  color: rgb(var(--snx-muted));
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.picker-admin__empty,
.picker-admin__loading{
  padding: 10px;
  text-align: center;
  color: rgb(var(--snx-subtle));
  font-size: 12px;
  margin: 0;
}

/* ----------- picker-list (lista de resultados clicaveis para autocomplete HTMX) -----------
   Usado em atendimento/tickets/_picker-{filiado,empresa}.html — fragment "resultados" devolve
   <ul class="picker-list"> com <button.picker-list__item> por linha; clique troca via HTMX.
*/
.picker-list{
  margin: 0; padding: 4px;
  list-style: none;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  max-height: 320px;
  overflow-y: auto;
  scrollbar-width: thin;
}
.picker-list li{ padding: 0; margin: 0; }
.picker-list__item{
  display: flex; flex-direction: column; gap: 2px;
  width: 100%;
  padding: 8px 10px;
  border-radius: var(--snx-radius-2);
  border: 0;
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
  font-family: var(--snx-font-ui);
  transition: background-color .12s ease;
}
.picker-list__item:hover,
.picker-list__item:focus-visible{
  background: rgb(var(--snx-primary-soft));
  outline: none;
}
.picker-list__title{
  font-size: 13px; font-weight: 500;
  color: rgb(var(--snx-strong));
}
.picker-list__meta{
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  display: inline-flex; flex-wrap: wrap; gap: 4px; align-items: center;
}

/* ----------- <dialog> nativo (moderacao / arquivar / remover-membro) ----------- */
.mural-dialog{
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius-lg);
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
  padding: 0;
  max-width: 480px;
  width: calc(100vw - 32px);
  box-shadow: var(--snx-shadow-lg);
}
.mural-dialog::backdrop{ background: rgb(var(--snx-shadow) / .35); }
.mural-dialog__form{
  display: flex; flex-direction: column; gap: 10px;
  padding: 18px 20px 14px;
}
.mural-dialog__form h3{
  margin: 0;
  font-size: 15px; font-weight: 600;
  color: rgb(var(--snx-strong));
}
.mural-dialog__hint{
  margin: 0;
  font-size: 12.5px;
  color: rgb(var(--snx-muted));
  line-height: 1.45;
}
.mural-dialog__form label{
  font-size: 11.5px;
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
  letter-spacing: 0.04em;
  margin-bottom: -4px;
}
.mural-dialog__form input[type=text],
.mural-dialog__form textarea{
  width: 100%;
  padding: 8px 10px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface-muted));
  color: rgb(var(--snx-strong));
  font-family: var(--snx-font-ui);
  font-size: 13px;
  resize: vertical;
}
.mural-dialog__form input[type=text]:focus,
.mural-dialog__form textarea:focus{
  outline: 2px solid rgb(var(--snx-primary) / .4);
  outline-offset: 1px;
  background: rgb(var(--snx-surface));
}
.mural-dialog__menu{
  display: flex; gap: 8px; justify-content: flex-end;
  padding: 0; margin: 4px 0 0;
}
.mural-dialog__menu button[data-cancel]{
  background: transparent;
  border: 1px solid rgb(var(--snx-border-default));
  color: rgb(var(--snx-muted));
  padding: 6px 12px;
  border-radius: var(--snx-radius-2);
  font-size: 12.5px;
  cursor: pointer;
}
.mural-dialog__menu button[data-cancel]:hover{
  background: rgb(var(--snx-surface-muted));
}

/* redução de movimento */
@media (prefers-reduced-motion: reduce){
  .msg__menu{ transition: none; }
  .ch__sec-h .caret{ transition: none; }
  .msg-composer__box{ transition: none; }
}

/* =========================================================================
   §24 Tela de erro standalone (templates/error.html)
   PlatformErrorController + 4xx/5xx/404. Tom: documento de incidente.
   Variantes via [data-status-group="server" | "client" | "missing"] no
   <article>. Cores totalmente tokenizadas — respeita qualquer tema do user.
   ========================================================================= */

.err-shell{
  min-height:100vh;
  display:grid;
  place-items:start center;
  padding:56px 24px 80px;
  position:relative;
  overflow-x:hidden;
  background:
    radial-gradient(circle at 50% 0%,
      rgb(var(--snx-primary) / .04) 0%,
      transparent 55%),
    radial-gradient(circle at 1px 1px,
      rgb(var(--snx-muted) / .14) 1px,
      transparent 1.5px) 0 0 / 32px 32px,
    linear-gradient(180deg,
      rgb(var(--snx-app)) 0%,
      rgb(var(--snx-surface-soft)) 100%);
}
.err-shell::before{
  content:"";
  position:fixed;
  top:0; left:0;
  width:100%; height:3px;
  background: linear-gradient(
    90deg,
    rgb(var(--err-accent)) 0%,
    rgb(var(--err-accent) / .4) 50%,
    rgb(var(--err-accent) / 0) 100%);
  z-index:100;
}

/* Status accent token — rebinds per status group */
.err-shell, [data-status-group="server"]{ --err-accent: var(--snx-danger); --err-soft: var(--snx-danger-soft); }
[data-status-group="client"]{ --err-accent: var(--snx-warning); --err-soft: var(--snx-warning-soft); }
[data-status-group="missing"]{ --err-accent: var(--snx-info); --err-soft: var(--snx-info-soft); }

/* ---- Crumb ---------------------------------------------------------- */
.err-crumb{
  width:100%; max-width:880px;
  display:flex; align-items:center; justify-content:space-between;
  gap:16px; margin-bottom:16px;
  font-family: var(--snx-font-mono);
  font-size:11px; letter-spacing:.06em; text-transform:uppercase;
  color: rgb(var(--snx-muted));
  animation: errFadeDown 480ms cubic-bezier(.2,.8,.2,1) both 60ms;
}
.err-crumb__brand{ display:inline-flex; align-items:center; gap:8px; font-weight:500; }
.err-crumb__dot{
  width:6px; height:6px; border-radius:50%;
  background: rgb(var(--err-accent));
  box-shadow: 0 0 0 3px rgb(var(--err-accent) / .18);
  animation: errPulse 2.4s cubic-bezier(.65,0,.35,1) infinite;
}
.err-crumb__time{ color: rgb(var(--snx-muted) / .7); font-weight:400; }

/* ---- Card ----------------------------------------------------------- */
.err-card{
  width:100%; max-width:880px;
  background: rgb(var(--snx-surface));
  border:1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-lg);
  box-shadow:
    0 1px 0 rgb(var(--snx-border-default)),
    0 24px 48px -16px rgb(var(--snx-shadow) / .08),
    0 8px 16px -8px rgb(var(--snx-shadow) / .05);
  overflow:hidden;
  position:relative;
  animation: errCardIn 600ms cubic-bezier(.2,.8,.2,1) both 100ms;
}
.err-card::before{
  content:"";
  position:absolute; top:0; left:0; bottom:0;
  width:3px;
  background: linear-gradient(180deg,
    rgb(var(--err-accent)) 0%,
    rgb(var(--err-accent) / .4) 60%,
    rgb(var(--err-accent) / 0) 100%);
}

/* ---- Hero ----------------------------------------------------------- */
.err-hero{
  padding:40px 40px 32px;
  display:grid; grid-template-columns: 1fr auto;
  gap:24px; align-items:start;
  border-bottom:1px solid rgb(var(--snx-border-default) / .55);
  position:relative;
  background: radial-gradient(ellipse 60% 100% at 0% 0%,
    rgb(var(--err-accent) / .04) 0%,
    transparent 70%);
}
.err-hero__body{ animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 180ms; }
.err-hero__eyebrow{
  display:inline-flex; align-items:center; gap:10px;
  font-family: var(--snx-font-mono);
  font-size:11px; font-weight:500; letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted));
  margin-bottom:20px;
}
.err-hero__eyebrow b{
  color: rgb(var(--err-accent));
  font-weight:600; letter-spacing:.04em;
}
.err-hero__eyebrow .sep{
  width:4px; height:4px; border-radius:50%;
  background: rgb(var(--snx-muted) / .55);
}
.err-hero__title{
  display:flex; align-items:baseline; gap:16px;
  margin:0 0 12px;
}
.err-hero__code{
  font-family: var(--snx-font-ui);
  font-size:88px; line-height:.95; font-weight:600;
  letter-spacing:-.04em;
  color: rgb(var(--snx-strong));
  font-variant-numeric: tabular-nums;
}
.err-hero__reason{
  font-family: var(--snx-font-ui);
  font-size:22px; font-weight:400;
  color: rgb(var(--snx-muted));
  letter-spacing:-.01em;
}
.err-hero__lead{
  font-size:15px; line-height:1.6;
  color: rgb(var(--snx-strong));
  max-width:52ch; margin:4px 0 0;
}
.err-hero__lead em{
  font-style:normal; font-weight:500;
  color: rgb(var(--snx-strong));
}

/* Hexagonal alert badge */
.err-hero__badge{
  width:88px; height:88px;
  display:grid; place-items:center;
  position:relative;
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 240ms;
}
.err-hero__badge svg{ width:100%; height:100%; }
.err-hero__badge .hex-bg     { fill: rgb(var(--err-soft)); }
.err-hero__badge .hex-stroke { stroke: rgb(var(--err-accent)); stroke-width:1.5; fill:none; }
.err-hero__badge .hex-glyph  { stroke: rgb(var(--err-accent)); stroke-width:2; stroke-linecap:round; fill:none; }
.err-hero__badge .hex-dot    { fill: rgb(var(--err-accent)); }
.err-hero__badge::after{
  content:"";
  position:absolute; inset:-8px;
  border:1px dashed rgb(var(--err-accent) / .3);
  border-radius:18px;
  animation: errSpin 24s linear infinite;
}

/* ---- Correlation ID ------------------------------------------------- */
.err-corr{
  padding:28px 40px;
  display:grid; grid-template-columns: 1fr auto;
  gap:28px; align-items:center;
  background: linear-gradient(180deg,
    rgb(var(--snx-surface)) 0%,
    rgb(var(--snx-surface-muted)) 100%);
  border-bottom:1px solid rgb(var(--snx-border-default) / .55);
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 280ms;
}
.err-corr__head{ display:flex; flex-direction:column; gap:4px; margin-bottom:8px; }
.err-corr__label{
  font-family: var(--snx-font-mono);
  font-size:11px; letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted)); font-weight:500;
}
.err-corr__hint{ font-size:13px; color: rgb(var(--snx-muted)); }
.err-corr__id{
  display:inline-flex; align-items:center; gap:4px;
  font-family: var(--snx-font-mono);
  font-size:32px; font-weight:500;
  letter-spacing:.04em; line-height:1;
  color: rgb(var(--snx-strong));
  margin-top:4px; padding-bottom:6px;
  border-bottom:2px solid rgb(var(--snx-strong));
  align-self:start;
}
.err-corr__id .prefix{
  color: rgb(var(--snx-muted));
  font-weight:400; margin-right:4px;
}
.err-corr__id .seg{
  transition: background 200ms cubic-bezier(.2,.8,.2,1);
  padding:0 2px; border-radius:3px;
}
.err-corr__id:hover .seg{ background: rgb(var(--snx-primary) / .1); }

.err-corr__copy{
  display:inline-flex; align-items:center; gap:10px;
  padding:12px 18px;
  background: rgb(var(--snx-strong));
  color: rgb(var(--snx-surface));
  border:1px solid rgb(var(--snx-strong));
  border-radius: var(--snx-radius-2);
  font-size:13px; font-weight:500; letter-spacing:.01em;
  cursor:pointer; white-space:nowrap;
  transition: transform 120ms cubic-bezier(.2,.8,.2,1),
              box-shadow 200ms cubic-bezier(.2,.8,.2,1),
              background 200ms cubic-bezier(.2,.8,.2,1);
  box-shadow: 0 1px 0 rgb(var(--snx-shadow) / .04);
}
.err-corr__copy:hover{
  transform: translateY(-1px);
  box-shadow:
    0 6px 12px -4px rgb(var(--snx-shadow) / .18),
    0 2px 4px -2px rgb(var(--snx-shadow) / .08);
}
.err-corr__copy:active{ transform: translateY(0); }
.err-corr__copy:focus-visible{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 2px;
}
.err-corr__copy[data-state="copied"]{
  background: rgb(var(--snx-success));
  border-color: rgb(var(--snx-success));
}
.err-corr__copy svg{ width:16px; height:16px; flex:none; }
.err-corr__copy .icon-check{ display:none; }
.err-corr__copy[data-state="copied"] .icon-clip{ display:none; }
.err-corr__copy[data-state="copied"] .icon-check{ display:inline; }
.err-corr__ann{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip: rect(0,0,0,0); border:0;
}

/* ---- Details grid --------------------------------------------------- */
.err-details{
  padding:28px 40px 24px;
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 360ms;
}
.err-details__title{
  font-family: var(--snx-font-mono);
  font-size:11px; letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted)); font-weight:500;
  margin:0 0 18px;
  display:inline-flex; align-items:center; gap:8px;
}
.err-details__title::before{
  content:""; width:4px; height:4px; border-radius:50%;
  background: rgb(var(--snx-muted) / .55);
}
.err-kvs{
  display:grid; grid-template-columns: 1fr 1fr; gap:0;
  border:1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  overflow:hidden;
}
.err-kv{
  padding:14px 16px;
  display:flex; flex-direction:column; gap:2px;
  min-width:0;
  background: rgb(var(--snx-surface));
  border-right:1px solid rgb(var(--snx-border-default));
  border-bottom:1px solid rgb(var(--snx-border-default));
}
.err-kv:nth-child(2n){ border-right:none; }
.err-kv:nth-last-child(-n+2){ border-bottom:none; }
.err-kv:last-child:nth-child(odd){ grid-column:1 / -1; border-right:none; }
.err-kv__label{
  font-family: var(--snx-font-mono);
  font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted)); font-weight:500;
  margin:0;
}
.err-kv__value{
  font-family: var(--snx-font-mono);
  font-size:13px; line-height:1.5;
  color: rgb(var(--snx-strong));
  word-break: break-all;
  margin:0;
}
.err-kv__value--ui{
  font-family: var(--snx-font-ui);
  font-size:13.5px;
}

/* ---- Exception block (dev/test) ------------------------------------ */
.err-exc{
  margin: 0 40px 24px;
  padding: 18px 20px;
  border:1px solid rgb(var(--snx-warning) / .25);
  border-radius: var(--snx-radius-2);
  background: linear-gradient(180deg,
    rgb(var(--snx-warning-soft) / .4) 0%,
    rgb(var(--snx-warning-soft) / .15) 100%);
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 440ms;
}
.err-exc__head{ display:flex; align-items:center; gap:10px; margin-bottom:12px; }
.err-exc__pill{
  display:inline-flex; align-items:center; gap:6px;
  padding:3px 8px;
  background: rgb(var(--snx-warning) / .15);
  color: rgb(var(--snx-warning));
  font-family: var(--snx-font-mono);
  font-size:10px; font-weight:600;
  letter-spacing:.06em; text-transform:uppercase;
  border-radius: var(--snx-radius);
}
.err-exc__pill::before{
  content:""; width:5px; height:5px; border-radius:50%;
  background: rgb(var(--snx-warning));
}
.err-exc__hint{ font-size:11px; color: rgb(var(--snx-muted)); letter-spacing:.02em; }
.err-exc__type{
  font-family: var(--snx-font-mono);
  font-size:12px;
  color: rgb(var(--snx-muted));
  margin-bottom:4px;
  word-break: break-all;
}
.err-exc__msg{
  font-family: var(--snx-font-mono);
  font-size:13.5px;
  color: rgb(var(--snx-strong));
  font-weight:500; line-height:1.55;
}

/* ---- Stack trace --------------------------------------------------- */
.err-trace{
  margin: 0 40px 24px;
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 480ms;
}
.err-trace summary{
  display:inline-flex; align-items:center; gap:8px;
  cursor:pointer; user-select:none;
  font-family: var(--snx-font-mono);
  font-size:11px; letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted));
  padding:6px 10px 6px 8px;
  border:1px dashed rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  transition: all 200ms cubic-bezier(.2,.8,.2,1);
  list-style:none;
  width: max-content;
}
.err-trace summary::-webkit-details-marker{ display:none; }
.err-trace summary::before{
  content:""; width:0; height:0;
  border-left: 5px solid currentColor;
  border-top: 4px solid transparent;
  border-bottom: 4px solid transparent;
  transition: transform 240ms cubic-bezier(.2,.8,.2,1);
}
.err-trace[open] summary::before{ transform: rotate(90deg); }
.err-trace summary:hover{
  color: rgb(var(--snx-strong));
  border-color: rgb(var(--snx-strong));
  background: rgb(var(--snx-surface-muted));
}
.err-trace summary:focus-visible{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 2px;
}
.err-trace__pre{
  margin-top:12px;
  padding:16px 18px;
  background: rgb(var(--snx-surface-sunk));
  color: rgb(var(--snx-strong));
  border:1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  font-family: var(--snx-font-mono);
  font-size:11.5px; line-height:1.65;
  overflow:auto; max-height:280px;
  tab-size: 2;
}

/* ---- Action footer ------------------------------------------------- */
.err-actions{
  padding: 20px 40px 32px;
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  border-top:1px solid rgb(var(--snx-border-default) / .55);
  background: linear-gradient(180deg,
    rgb(var(--snx-surface)) 0%,
    rgb(var(--snx-surface-muted)) 100%);
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 540ms;
}
.err-actions__primary{ display:flex; gap:10px; flex:1; min-width:0; }
.err-actions__secondary{ display:flex; gap:10px; }

.err-btn{
  display:inline-flex; align-items:center; gap:8px;
  padding:10px 16px;
  border-radius: var(--snx-radius-2);
  font-family: var(--snx-font-ui);
  font-size:13px; font-weight:500; letter-spacing:.005em;
  cursor:pointer; line-height:1; white-space:nowrap;
  border:1px solid transparent;
  text-decoration:none;
  transition: all 160ms cubic-bezier(.2,.8,.2,1);
}
.err-btn:focus-visible{
  outline:2px solid rgb(var(--snx-primary));
  outline-offset:2px;
}
.err-btn--primary{
  background: rgb(var(--snx-strong));
  color: rgb(var(--snx-surface));
  border-color: rgb(var(--snx-strong));
}
.err-btn--primary:hover{
  background: rgb(var(--snx-strong) / .9);
  transform: translateY(-1px);
  box-shadow: 0 6px 12px -4px rgb(var(--snx-shadow) / .18);
}
.err-btn--outline{
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
  border-color: rgb(var(--snx-border-strong));
}
.err-btn--outline:hover{
  background: rgb(var(--snx-surface-muted));
  border-color: rgb(var(--snx-strong));
}
.err-btn--ghost{
  background: transparent;
  color: rgb(var(--snx-muted));
  border:1px dashed rgb(var(--snx-border-strong));
}
.err-btn[disabled],
.err-btn--ghost[disabled]{
  cursor: not-allowed;
  opacity: .85;
  pointer-events: none;
}
.err-btn .err-badge-soon{
  display:inline-flex; align-items:center;
  padding:2px 6px; margin-left:4px;
  font-family: var(--snx-font-mono);
  font-size:9px; font-weight:600;
  letter-spacing:.08em; text-transform:uppercase;
  color: rgb(var(--snx-muted));
  background: rgb(var(--snx-surface-muted));
  border:1px solid rgb(var(--snx-border-default));
  border-radius:3px; line-height:1;
}
.err-btn svg{ width:15px; height:15px; }

/* ---- Toast --------------------------------------------------------- */
.err-toast{
  position:fixed; bottom:24px; left:50%;
  transform: translateX(-50%) translateY(20px);
  padding:12px 18px;
  background: rgb(var(--snx-strong));
  color: rgb(var(--snx-surface));
  border-radius: var(--snx-radius-2);
  font-size:13px; font-weight:500;
  box-shadow:
    0 12px 32px -8px rgb(var(--snx-shadow) / .32),
    0 4px 8px -2px rgb(var(--snx-shadow) / .16);
  opacity:0; pointer-events:none;
  transition: opacity 240ms cubic-bezier(.2,.8,.2,1),
              transform 280ms cubic-bezier(.2,.8,.2,1);
  display:inline-flex; align-items:center; gap:10px;
  z-index:200;
}
.err-toast[data-show]{
  opacity:1;
  transform: translateX(-50%) translateY(0);
  pointer-events:auto;
}
.err-toast__check{ width:16px; height:16px; color: rgb(var(--snx-success)); }

/* ---- Footnote ------------------------------------------------------ */
.err-foot{
  width:100%; max-width:880px;
  margin-top:16px;
  display:flex; align-items:center; justify-content:space-between;
  gap:16px; flex-wrap:wrap;
  font-family: var(--snx-font-mono);
  font-size:10.5px; letter-spacing:.04em;
  color: rgb(var(--snx-muted) / .8);
  animation: errFadeUp 540ms cubic-bezier(.2,.8,.2,1) both 640ms;
}
.err-foot__left,
.err-foot__right{ display:inline-flex; align-items:center; gap:12px; }
.err-foot__sep{
  width:4px; height:4px; border-radius:50%;
  background: rgb(var(--snx-muted) / .35);
}
.err-foot a{
  color:inherit;
  text-decoration: underline;
  text-decoration-color: rgb(var(--snx-muted) / .35);
  text-underline-offset: 3px;
}
.err-foot a:hover{
  color: rgb(var(--snx-strong));
  text-decoration-color: rgb(var(--snx-primary));
}

/* ---- Responsive ---------------------------------------------------- */
@media (max-width: 720px){
  .err-shell{ padding:32px 16px 56px; }
  .err-hero{ padding:28px 24px 24px; grid-template-columns: 1fr; }
  .err-hero__badge{ width:64px; height:64px; order:-1; }
  .err-hero__code{ font-size:64px; }
  .err-hero__reason{ font-size:18px; }
  .err-corr{ padding:24px; grid-template-columns: 1fr; }
  .err-corr__id{ font-size:24px; }
  .err-details, .err-actions{ padding-left:24px; padding-right:24px; }
  .err-exc, .err-trace{ margin-left:24px; margin-right:24px; }
  .err-kvs{ grid-template-columns: 1fr; }
  .err-kv{ border-right:none !important; }
  .err-kv:not(:last-child){ border-bottom:1px solid rgb(var(--snx-border-default)) !important; }
  .err-actions{ flex-direction: column; align-items: stretch; }
  .err-actions__primary, .err-actions__secondary{ flex-direction: column; }
  .err-btn{ width:100%; justify-content:center; }
}

/* ---- Animations ---------------------------------------------------- */
@keyframes errFadeUp   { from{ opacity:0; transform: translateY(8px);  } to{ opacity:1; transform: translateY(0); } }
@keyframes errFadeDown { from{ opacity:0; transform: translateY(-4px); } to{ opacity:1; transform: translateY(0); } }
@keyframes errCardIn   { from{ opacity:0; transform: translateY(12px); } to{ opacity:1; transform: translateY(0); } }
@keyframes errPulse    { 0%,100%{ box-shadow: 0 0 0 3px rgb(var(--err-accent) / .18); } 50%{ box-shadow: 0 0 0 6px rgb(var(--err-accent) / 0); } }
@keyframes errSpin     { to{ transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce){
  .err-shell *, .err-shell *::before, .err-shell *::after,
  .err-toast{ animation-duration: .01ms !important; transition-duration: .01ms !important; animation-iteration-count: 1 !important; }
}

@media print{
  .err-shell{ background: white; }
  .err-shell::before, .err-crumb__dot, .err-hero__badge::after{ display:none; }
  .err-card{ box-shadow:none; border:1px solid #000; }
  .err-btn, .err-actions, .err-toast{ display:none !important; }
}

/* =========================================================================
   PADRAO §17.13 — PAGINA DE TOPICO (estilo forum)
   Detalhe com thread vertical de mensagens + sidebar de metadados/acoes/trilha.
   Exemplar canonico: app/atendimento/tickets/detalhe.html.
   Componentes sao genericos — qualquer modulo que tenha "registro com conversa
   longa + estado por workflow" pode reusa-los (homologacao detalhe, denuncia,
   etc.). NAO confundir com §17.12 Hub conversacional (mural) — aqui nao ha
   SSE nem chat realtime; e detalhe administrativo com thread persistente.
   ========================================================================= */

/* breadcrumb leve acima do .ph (opcional ao padrao) */
.crumbs{
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  margin-bottom: 8px;
  display: flex;
  gap: 6px;
  align-items: center;
}
.crumbs a{ color: rgb(var(--snx-muted)); text-decoration: none; }
.crumbs a:hover{ color: rgb(var(--snx-strong)); text-decoration: underline; }
.crumbs span.sep{ color: rgb(var(--snx-subtle)); }

/* qualificador do autor em mensagem da thread (ex.: "Atendimento", "Portal") */
.msg__role{
  font-size: 11px;
  color: rgb(var(--snx-muted));
  font-weight: 400;
}

/* variante compacta de .d-row para sidebar (key 110px em vez de 150px) */
.d-row--side{
  grid-template-columns: 110px 1fr;
  padding: 6px 14px;
}

/* tamanho pequeno + chip-like p/ anexo (reaproveita .btn) */
.btn--sm{ padding: 3px 8px; font-size: 11.5px; height: auto; }
.btn--attach{ font-size: 11.5px; color: rgb(var(--snx-muted)); }
.btn--attach .meta{
  color: rgb(var(--snx-subtle));
  font-family: var(--snx-font-mono);
  font-size: 10.5px;
  margin-left: 4px;
}

/* divisor leve dentro de cards */
hr.divider{
  border: 0;
  border-top: 1px solid rgb(var(--snx-border-default));
  margin: 10px 0;
}

/* details.grp — accordion de grupo de acoes (sidebar) */
details.grp{ border-bottom: 1px solid rgb(var(--snx-border-default)); }
details.grp:last-child{ border-bottom: 0; }
details.grp > summary{
  list-style: none;
  cursor: pointer;
  padding: 9px 14px;
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: .04em;
  font-weight: 600;
  color: rgb(var(--snx-strong));
  display: flex;
  align-items: center;
  gap: 8px;
  background: rgb(var(--snx-surface-muted));
}
details.grp > summary::-webkit-details-marker{ display: none; }
details.grp > summary::before{
  content: "";
  width: 0; height: 0;
  border-left: 4px solid rgb(var(--snx-muted));
  border-top: 3px solid transparent;
  border-bottom: 3px solid transparent;
  transition: transform .12s;
  flex: 0 0 auto;
}
details.grp[open] > summary::before{ transform: rotate(90deg); }
details.grp > summary .sub{
  font-weight: 400;
  text-transform: none;
  letter-spacing: 0;
  color: rgb(var(--snx-muted));
  font-size: 11px;
  margin-left: auto;
}
details.grp > .grp__bd{
  padding: 10px 14px 12px;
  background: rgb(var(--snx-surface));
}

/* details.note-toggle — toggle inline (ex.: "Adicionar nota interna") */
details.note-toggle{
  margin-top: 10px;
  border-top: 1px dashed rgb(var(--snx-border-default));
  padding-top: 10px;
}
details.note-toggle > summary{
  list-style: none;
  cursor: pointer;
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
details.note-toggle > summary::-webkit-details-marker{ display: none; }
details.note-toggle > summary::before{
  content: "+";
  font-family: var(--snx-font-mono);
  color: rgb(var(--snx-subtle));
}
details.note-toggle[open] > summary::before{ content: "−"; }

/* trail — timeline compacta (data em duas linhas mono + descricao) */
.trail{ list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; }
.trail li{
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 8px;
  padding: 8px 14px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
  align-items: start;
  font-size: 11.5px;
}
.trail li:last-child{ border-bottom: 0; }
.trail__when{
  font-family: var(--snx-font-mono);
  font-size: 10.5px;
  color: rgb(var(--snx-muted));
  line-height: 1.5;
}
.trail__what{ display: flex; flex-direction: column; gap: 3px; }
.trail__what small{ font-size: 11px; color: rgb(var(--snx-muted)); }

/* person — avatar 24px + nome + documento (sidebar Pessoas) */
.person{
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
}
.person__ava{
  width: 24px; height: 24px;
  border-radius: 50%;
  background: rgb(var(--snx-surface-muted));
  border: 1px solid rgb(var(--snx-border-strong));
  display: flex; align-items: center; justify-content: center;
  font-size: 9.5px;
  font-weight: 600;
  color: rgb(var(--snx-muted));
  flex: 0 0 24px;
}
.person__name{ font-size: 12.5px; font-weight: 500; color: rgb(var(--snx-strong)); }
.person__doc{ font-size: 11px; color: rgb(var(--snx-muted)); font-family: var(--snx-font-mono); }

/* helpers de form (linha + ações + hint) — usados pelo padrao §17.13 e
   reaproveitaveis em forms tradicionais que nao usam o grid §17.4 */
.f__row{ margin-bottom: 10px; }
.f__row:last-child{ margin-bottom: 0; }
.f__hint{ font-size: 11px; color: rgb(var(--snx-muted)); margin-top: 4px; }
.f__actions{
  display: flex;
  gap: 6px;
  justify-content: flex-end;
  margin-top: 10px;
  flex-wrap: wrap;
}
.f__actions--start{ justify-content: flex-start; }

/* =========================================================================
   §17.4-pesquisa — Pesquisa de satisfacao publica (atendimento Fatia G)
   Reutiliza .auth-shell + .auth-card. Componentes scoped para o caso
   "form publico curto" — promover ao catalogo geral se segundo caso surgir.
   Tokens-only; zero hex; zero JS.
   ========================================================================= */

/* Brand panel — variante publica (sem auth, com texto institucional). */
.pp-brand{
  display: flex; flex-direction: column; align-items: flex-start;
  justify-content: space-between;
  gap: 32px;
  width: 100%;
  color: rgb(var(--snx-chrome-text));
}
.pp-brand__mark{
  display: flex; align-items: center; gap: 12px;
}
.pp-brand__mark-logo{
  width: 40px; height: 40px;
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-chrome-bg-soft));
  display: grid; place-items: center;
  flex-shrink: 0;
  color: rgb(var(--snx-chrome-text));
}
.pp-brand__mark-words{ display: flex; flex-direction: column; line-height: 1.2; }
.pp-brand__mark-words strong{ font: 600 16px var(--snx-font-ui); letter-spacing: 0.02em; }
.pp-brand__mark-words small{
  font-size: 11px;
  color: rgb(var(--snx-chrome-muted));
  text-transform: uppercase;
  letter-spacing: 0.1em;
}
.pp-brand__tenant{ max-width: 360px; }
.pp-brand__eyebrow{
  font: 500 11px var(--snx-font-ui);
  color: rgb(var(--snx-chrome-muted));
  text-transform: uppercase;
  letter-spacing: 0.12em;
  margin: 0 0 12px;
}
.pp-brand__title{
  margin: 0 0 16px;
  font: 600 24px/1.25 var(--snx-font-ui);
  color: rgb(var(--snx-chrome-text));
  letter-spacing: -0.01em;
}
.pp-brand__lede{
  margin: 0;
  font-size: 13px;
  color: rgb(var(--snx-chrome-muted));
  line-height: 1.55;
}
.pp-brand__foot{
  color: rgb(var(--snx-chrome-muted));
  font-size: 11px;
  line-height: 1.5;
}
.pp-brand__foot a{
  color: rgb(var(--snx-chrome-text));
  text-decoration: none;
  border-bottom: 1px solid rgb(var(--snx-chrome-muted) / .35);
}

/* Card publico maior que o login (520px vs 420px) — comporta a score-row. */
.auth-card--wide{ max-width: 520px; }

/* Contexto do ticket (cabeca do form) — surface-soft + meta com nome+data. */
.ticket-ctx{
  display: flex; flex-direction: column; gap: 10px;
  padding: 14px 16px;
  background: rgb(var(--snx-surface-soft));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
}
.ticket-ctx__top{
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  flex-wrap: wrap;
}
.ticket-ctx__num{
  font: 500 12px var(--snx-font-ui);
  color: rgb(var(--snx-muted));
  font-feature-settings: "tnum" 1;
}
.ticket-ctx__title{
  margin: 0;
  font: 500 13.5px var(--snx-font-ui);
  color: rgb(var(--snx-strong));
  line-height: 1.4;
}
.ticket-ctx__meta{
  display: flex; gap: 14px; flex-wrap: wrap;
  font-size: 11.5px;
  color: rgb(var(--snx-muted));
}
.ticket-ctx__meta span{ display: inline-flex; align-items: center; gap: 4px; }
.ticket-ctx__meta strong{ font-weight: 500; color: rgb(var(--snx-strong)); }

/* Score 1–5 — fieldset + 5 opts em grid. Selecionado vira primary-soft. */
.score-row{ border: 0; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.score-row__legend{
  padding: 0;
  font: 500 12px var(--snx-font-ui);
  color: rgb(var(--snx-strong));
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px;
}
.score-row__legend .req{ color: rgb(var(--snx-danger)); font-weight: 600; margin-left: 2px; }
.score-row__hint{ font: 400 11px var(--snx-font-ui); color: rgb(var(--snx-subtle)); }
.score-row__opts{
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 6px;
}
.score-opt{
  position: relative;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 14px 4px 10px;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface));
  cursor: pointer;
  transition: border-color .12s, background .12s;
  user-select: none;
}
.score-opt:hover{
  border-color: rgb(var(--snx-border-strong));
  background: rgb(var(--snx-surface-muted));
}
.score-opt input[type="radio"]{
  position: absolute; opacity: 0; pointer-events: none;
  width: 1px; height: 1px;
  clip: rect(0 0 0 0); clip-path: inset(50%);
}
.score-opt__num{
  font: 600 22px var(--snx-font-ui);
  color: rgb(var(--snx-strong));
  line-height: 1;
  font-feature-settings: "tnum" 1;
  margin-bottom: 6px;
}
.score-opt__lbl{
  font: 400 11px var(--snx-font-ui);
  color: rgb(var(--snx-muted));
  line-height: 1.2;
  text-align: center;
}
.score-opt:has(input[type="radio"]:checked){
  border-color: rgb(var(--snx-primary));
  background: rgb(var(--snx-primary-soft));
}
.score-opt:has(input[type="radio"]:checked) .score-opt__num{ color: rgb(var(--snx-primary)); }
.score-opt:has(input[type="radio"]:checked) .score-opt__lbl{ color: rgb(var(--snx-primary-hover)); }
.score-opt:has(input[type="radio"]:focus-visible){
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 2px;
}

/* Footer do form — privacy chip + acoes alinhadas a direita. */
.form-foot{ display: flex; flex-direction: column; gap: 12px; margin-top: 8px; }
.form-foot__actions{ display: flex; justify-content: flex-end; gap: 8px; }
.form-foot__privacy{
  display: flex; align-items: flex-start; gap: 8px;
  font-size: 11px;
  color: rgb(var(--snx-muted));
  line-height: 1.55;
  padding: 10px 12px;
  background: rgb(var(--snx-surface-sunk));
  border-radius: var(--snx-radius);
}
.form-foot__privacy svg{ flex-shrink: 0; margin-top: 1px; color: rgb(var(--snx-subtle)); }

/* Estados centralizados de confirmacao / erro / ja respondida. */
.confirm{ display: flex; flex-direction: column; align-items: center; text-align: center; gap: 16px; padding: 8px 0; }
.confirm__icon{ width: 56px; height: 56px; border-radius: 50%; display: grid; place-items: center; flex-shrink: 0; }
.confirm__icon--ok{ background: rgb(var(--snx-success-soft)); color: rgb(var(--snx-success)); }
.confirm__icon--err{ background: rgb(var(--snx-danger-soft)); color: rgb(var(--snx-danger)); }
.confirm__icon--info{ background: rgb(var(--snx-info-soft)); color: rgb(var(--snx-info)); }
.confirm h3{ margin: 0; font: 600 18px var(--snx-font-ui); color: rgb(var(--snx-strong)); }
.confirm p{ margin: 0; max-width: 380px; font-size: 13px; line-height: 1.55; color: rgb(var(--snx-muted)); }
.confirm__chip{
  display: inline-flex; align-items: baseline; gap: 6px;
  padding: 8px 14px;
  background: rgb(var(--snx-surface-sunk));
  border-radius: var(--snx-radius);
  font: 500 12px var(--snx-font-ui);
  color: rgb(var(--snx-muted));
}
.confirm__chip strong{ font: 600 16px var(--snx-font-ui); color: rgb(var(--snx-strong)); font-feature-settings: "tnum" 1; }
.confirm__back{ margin-top: 4px; font-size: 12px; color: rgb(var(--snx-primary)); text-decoration: none; }
.confirm__back:hover{ text-decoration: underline; }

/* Botao publico ligeiramente maior que o canonico (alvo touch). */
.btn--public{ height: 36px; padding: 0 18px; font-size: 13px; }

/* ----------- chk-cockpit (homologacao §17 — checklist master-detail) -----------
   Trilho navegavel a esquerda + painel focado a direita. Cada link de trilho
   recarrega `?focus={itemId}` (server-first, sem JS framework). Em viewport
   <880px colapsa para coluna unica (trilho rolavel acima do painel).
*/
.chk-cockpit__bar{
  position: relative;
  flex: 1 1 100%;
  height: 4px;
  margin-top: 8px;
  background: rgb(var(--snx-border-default));
  border-radius: 999px;
  overflow: hidden;
}
.chk-cockpit__bar-fill{
  display: block;
  height: 100%;
  background: rgb(var(--snx-success));
  transition: width .25s ease-out;
}
.chk-cockpit__grid{
  display: grid;
  grid-template-columns: minmax(260px, 320px) 1fr;
  gap: 16px;
  align-items: stretch;
  min-height: 520px;
}
@media (max-width: 880px){
  .chk-cockpit__grid{
    grid-template-columns: 1fr;
    min-height: 0;
  }
  .chk-rail{
    max-height: 240px;
    overflow-y: auto;
  }
}
.chk-rail{
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface-muted));
  padding: 6px;
  align-self: start;
}
.chk-rail__list{
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.chk-rail__item{ margin: 0; padding: 0; }
.chk-rail__link{
  display: flex;
  gap: 10px;
  align-items: flex-start;
  padding: 10px 12px;
  border-radius: var(--snx-radius-2);
  border-left: 3px solid transparent;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: background-color .12s, border-left-color .12s;
}
.chk-rail__link:hover{ background: rgb(var(--snx-surface-soft)); }
.chk-rail__link:focus-visible{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: 1px;
}
.chk-rail__item.is-active .chk-rail__link{
  background: rgb(var(--snx-surface-soft));
  border-left-color: rgb(var(--snx-primary));
}
.chk-rail__num{
  flex: 0 0 auto;
  width: 22px;
  text-align: right;
  color: rgb(var(--snx-subtle));
  font-size: 12px;
  padding-top: 1px;
}
.chk-rail__body{
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.chk-rail__title{
  font-weight: 600;
  font-size: 13px;
  line-height: 1.25;
  color: rgb(var(--snx-strong));
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
.chk-rail__meta{
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  font-size: 11px;
}
.chk-rail__count{ color: rgb(var(--snx-muted)); }

.chk-painel{
  display: flex;
  flex-direction: column;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  background: rgb(var(--snx-surface));
  min-height: 0;
}
.chk-painel__hd{
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  padding: 14px 18px;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.chk-painel__hd h4{
  margin: 0;
  font-size: 16px;
  font-weight: 600;
  color: rgb(var(--snx-strong));
}
.chk-painel__pills{
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.chk-painel__bd{
  flex: 1 1 auto;
  padding: 16px 18px;
  overflow-y: auto;
  min-height: 0;
}
.chk-painel__ft{
  position: sticky;
  bottom: 0;
  padding: 12px 18px;
  background: rgb(var(--snx-surface-muted));
  border-top: 1px solid rgb(var(--snx-border-default));
  border-bottom-left-radius: var(--snx-radius-2);
  border-bottom-right-radius: var(--snx-radius-2);
}
.chk-painel__row{
  display: flex;
  gap: 8px;
  align-items: stretch;
  flex-wrap: wrap;
  margin-top: 6px;
}
.chk-painel__obs{ flex: 1 1 280px; }
.chk-painel__acts{
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

/* ============================================================================
   §17.14 — Live Operations (governanca/assembleias/em-andamento.html)
   Tela operacional sincrona; KPI hero + barra de quorum + feed presencas via
   SSE. Tokens 100% rgb(var(--snx-*)); zero cor hardcoded.
   ============================================================================ */

/* --- pulse no .dot quando pill esta "ao vivo" --- */
.st--live .dot{ animation: snx-pulse-dot 1.6s ease-in-out infinite; }
@keyframes snx-pulse-dot{
  0%, 100% { box-shadow: 0 0 0 0 rgb(var(--snx-warning) / .55); }
  60%      { box-shadow: 0 0 0 6px rgb(var(--snx-warning) / 0); }
}

/* --- HERO: 3 colunas (KPI presentes / barra de quorum / duracao) --- */
.live-hero{
  display: grid;
  grid-template-columns: minmax(280px, .9fr) minmax(0, 1.4fr) minmax(220px, .7fr);
  gap: 1px;
  background: rgb(var(--snx-border-default));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-lg);
  overflow: hidden;
  box-shadow: var(--snx-shadow-lg);
  margin-bottom: 20px;
}
.live-hero__cell{
  background: rgb(var(--snx-surface));
  padding: 24px;
  display: flex; flex-direction: column; justify-content: space-between;
  min-height: 168px;
}
.live-hero__lbl{
  font-size: 11px; font-weight: 600;
  letter-spacing: .10em;
  color: rgb(var(--snx-subtle));
  text-transform: uppercase;
  margin-bottom: 12px;
  display: flex; align-items: center; gap: 8px;
}
.live-hero__lbl::before{
  content: ""; width: 16px; height: 1px;
  background: rgb(var(--snx-border-strong));
  display: inline-block;
}

/* KPI gigante presentes */
.live-kpi__num{
  font-family: var(--snx-font-mono);
  font-size: 72px;
  font-weight: 600;
  line-height: .95;
  letter-spacing: -.04em;
  font-feature-settings: "tnum", "zero";
  color: rgb(var(--snx-strong));
  margin: 0;
  display: flex; align-items: baseline; gap: 10px;
}
.live-kpi__num .delta{
  font-size: 14px; font-weight: 500;
  color: rgb(var(--snx-success));
  letter-spacing: 0;
  transition: opacity .8s ease;
}
.live-kpi__sub{
  margin-top: 12px;
  font-size: 13px;
  color: rgb(var(--snx-muted));
}
.live-kpi__sub b{ color: rgb(var(--snx-strong)); font-weight: 600; }

/* Barra de quorum */
.live-quorum{ display: flex; flex-direction: column; gap: 12px; }
.live-quorum__top{
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px;
}
.live-quorum__pct{
  font-size: 32px; font-weight: 600;
  letter-spacing: -.02em;
  font-feature-settings: "tnum";
  color: rgb(var(--snx-strong));
}
.live-quorum__bar{
  position: relative;
  height: 14px;
  background: rgb(var(--snx-surface-sunk));
  border-radius: 999px;
  border: 1px solid rgb(var(--snx-border-default));
}
.live-quorum__fill{
  position: absolute; top: 0; left: 0; bottom: 0;
  background: rgb(var(--snx-success));
  border-radius: 999px;
  transition: width .4s ease, background-color .2s ease;
}
.live-quorum__fill.is-warn{ background: rgb(var(--snx-warning)); }
.live-quorum__min{
  position: absolute; top: -4px; bottom: -4px;
  width: 2px;
  background: rgb(var(--snx-strong));
  border-radius: 1px;
}
.live-quorum__min::after{
  content: attr(data-label);
  position: absolute;
  top: calc(100% + 4px); left: 50%;
  transform: translateX(-50%);
  font-family: var(--snx-font-mono);
  font-size: 11px;
  color: rgb(var(--snx-muted));
  white-space: nowrap;
}
.live-quorum__legend{
  display: flex; gap: 20px;
  font-size: 12px;
  color: rgb(var(--snx-muted));
  margin-top: 16px;
}
.live-quorum__legend b{ color: rgb(var(--snx-strong)); font-weight: 600; }

/* Duracao + heartbeat */
.live-clock{
  font-size: 32px; font-weight: 600;
  letter-spacing: -.02em;
  font-feature-settings: "tnum", "zero";
  color: rgb(var(--snx-strong));
  margin: 0;
}
.live-feed{
  display: flex; align-items: center; gap: 6px;
  font-size: 12px;
  color: rgb(var(--snx-muted));
  margin-top: 8px;
}
.live-feed__dot{
  width: 8px; height: 8px; border-radius: 50%;
  background: rgb(var(--snx-success));
  animation: snx-heart 1.6s ease-in-out infinite;
}
@keyframes snx-heart{
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: .5; transform: scale(1.18); }
}

/* HERO empilha em telas estreitas */
@media (max-width: 960px){
  .live-hero{ grid-template-columns: 1fr; }
}

/* --- Sticky toolbar de acoes --- */
.live-actions{
  position: sticky; top: 0; z-index: 5;
  display: flex; align-items: center; gap: 12px;
  padding: 12px 16px;
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  box-shadow: var(--snx-shadow-sm);
  margin-bottom: 20px;
  flex-wrap: wrap;
}
.live-actions__counts{
  margin-left: auto;
  font-size: 12px;
  color: rgb(var(--snx-muted));
  display: flex; gap: 12px;
  flex-wrap: wrap;
}
.live-actions__counts b{ color: rgb(var(--snx-strong)); font-weight: 600; }
.live-actions__counts span + span::before{
  content: "·"; padding-right: 12px; color: rgb(var(--snx-subtle));
}

/* --- Drawer inline (presenca / nova deliberacao) --- */
.live-presenca-drawer{
  background: rgb(var(--snx-surface));
  border: 1px solid rgb(var(--snx-border-default));
  border-top: 2px solid rgb(var(--snx-primary));
  border-radius: var(--snx-radius-2);
  padding: 16px 20px;
  margin-bottom: 20px;
  display: none;
}
.live-presenca-drawer.is-open{
  display: block;
  animation: snx-fade-in .18s ease;
}
.live-presenca-drawer__hd{
  display: flex; align-items: center; gap: 12px;
  margin-bottom: 12px;
  flex-wrap: wrap;
}
.live-presenca-drawer__hd h3{
  margin: 0; font-size: 13px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .02em;
  color: rgb(var(--snx-strong));
}
.live-presenca-drawer__form{
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 12px;
}
.live-presenca-drawer__hint{
  font-size: 11px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase;
  color: rgb(var(--snx-muted));
  margin: 8px 0 4px 0;
  display: block;
}
.live-delib-form{
  display: flex; flex-direction: column; gap: 8px;
}

/* --- Layout principal: deliberacoes | feed presencas --- */
.live-main{
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 320px);
  gap: 20px;
  align-items: start;
}
@media (max-width: 960px){
  .live-main{ grid-template-columns: 1fr; }
}
.live-card-hd{ justify-content: space-between; }

/* --- Segmento (chips de aba) --- */
.live-seg{
  display: inline-flex;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface-muted));
  padding: 3px;
  gap: 2px;
}
.live-seg__btn{
  border: 0; background: transparent;
  height: 26px; padding: 0 12px;
  border-radius: 3px;
  font-size: 12px; font-weight: 500;
  color: rgb(var(--snx-muted));
  cursor: pointer;
}
.live-seg__btn .count{
  font-family: var(--snx-font-mono);
  color: rgb(var(--snx-subtle));
  margin-left: 6px;
  font-feature-settings: "tnum";
}
.live-seg__btn.is-active{
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
  box-shadow: var(--snx-shadow-sm);
}
.live-seg__btn.is-active .count{ color: rgb(var(--snx-strong)); }

/* --- Lista de deliberacoes --- */
.delibs{ list-style: none; margin: 0; padding: 0; }
.delib{
  display: grid;
  grid-template-columns: 56px minmax(0, 1fr) auto;
  gap: 16px;
  padding: 20px;
  border-top: 1px solid rgb(var(--snx-border-default));
}
.delibs > .delib:first-child{ border-top: 0; }
.delib__ord{
  font-size: 22px; font-weight: 600;
  color: rgb(var(--snx-subtle));
  letter-spacing: -.02em;
  font-feature-settings: "tnum";
  line-height: 1;
  padding-top: 2px;
}
.delib__title{
  margin: 0 0 8px 0;
  font-size: 15px; font-weight: 600;
  color: rgb(var(--snx-strong));
  letter-spacing: -.005em;
}
.delib__txt{
  margin: 0;
  color: rgb(var(--snx-muted));
  font-size: 13px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.delib__meta{
  margin-top: 12px;
  display: flex; gap: 12px;
  align-items: center;
  font-size: 12px;
  color: rgb(var(--snx-muted));
  flex-wrap: wrap;
}
.delib__votes{
  font-feature-settings: "tnum";
  letter-spacing: .02em;
}
.delib__votes b{ color: rgb(var(--snx-strong)); font-weight: 600; }
.delib__side{ display: flex; align-items: flex-start; gap: 12px; }

/* Modifier: borda esquerda colorida por resultado */
.delib.is-aprovada  { border-left: 3px solid rgb(var(--snx-success)); }
.delib.is-reprovada { border-left: 3px solid rgb(var(--snx-danger)); }
.delib.is-retirada  { border-left: 3px solid rgb(var(--snx-warning)); }
.delib.is-ndapreciada{ border-left: 3px solid rgb(var(--snx-subtle)); }

/* --- Form inline de resultado de deliberacao (dentro de <details>) --- */
.delib-form-wrap{ margin-top: 12px; }
.delib-form-wrap > summary{ list-style: none; cursor: pointer; }
.delib-form-wrap > summary::-webkit-details-marker{ display: none; }
.delib-form{
  margin-top: 12px;
  background: rgb(var(--snx-surface-muted));
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius-2);
  padding: 16px 20px;
}
.delib-form__radios{
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}
@media (max-width: 720px){
  .delib-form__radios{ grid-template-columns: repeat(2, 1fr); }
}
.radio-card{
  border: 1px solid rgb(var(--snx-border-strong));
  background: rgb(var(--snx-surface));
  border-radius: var(--snx-radius);
  padding: 10px 12px;
  font-size: 13px;
  font-weight: 500;
  color: rgb(var(--snx-strong));
  cursor: pointer;
  display: flex; align-items: center; gap: 8px;
  transition: border-color .12s ease, background .12s ease;
}
.radio-card input{
  appearance: none; -webkit-appearance: none;
  width: 14px; height: 14px;
  border: 1.5px solid rgb(var(--snx-border-strong));
  border-radius: 50%;
  margin: 0; flex: none;
  position: relative;
  background: rgb(var(--snx-surface));
}
.radio-card input:checked{ border-color: rgb(var(--snx-primary)); }
.radio-card input:checked::after{
  content: ""; position: absolute; inset: 2.5px;
  background: rgb(var(--snx-primary));
  border-radius: 50%;
}
.radio-card:has(input:checked){
  border-color: rgb(var(--snx-primary));
  background: rgb(var(--snx-primary-soft));
}
.delib-form__votes{
  margin-top: 14px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}
.delib-form__votes label{
  font-size: 11px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase;
  color: rgb(var(--snx-muted));
  display: block; margin-bottom: 4px;
}
.input--num{ width: 100%; text-align: right; font-feature-settings: "tnum"; }
.delib-form__ft{
  display: flex; justify-content: flex-end; gap: 12px;
  margin-top: 16px;
}

/* --- Feed lateral de check-ins --- */
.feed-list{ list-style: none; margin: 0; padding: 0; }
.feed-item{
  display: grid;
  grid-template-columns: 28px 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 12px 20px;
  border-top: 1px solid rgb(var(--snx-border-default));
}
.feed-list > .feed-item:first-child{ border-top: 0; }
.feed-item.is-new{ animation: snx-fade-in .35s ease; }
.feed-item__ava{
  width: 28px; height: 28px;
  border-radius: 50%;
  background: rgb(var(--snx-surface-muted));
  border: 1px solid rgb(var(--snx-border-default));
  display: grid; place-items: center;
  font-size: 11px; font-weight: 600;
  color: rgb(var(--snx-muted));
}
.feed-item__name{
  font-size: 13px; font-weight: 500;
  color: rgb(var(--snx-strong));
  line-height: 1.2;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.feed-item__meta{
  font-size: 11.5px;
  color: rgb(var(--snx-subtle));
}
.feed-item__time{
  font-size: 12px;
  color: rgb(var(--snx-muted));
  font-feature-settings: "tnum";
}

/* --- input/textarea reuso minimo no contexto live --- */
.live-presenca-drawer .input,
.live-delib-form .input,
.delib-form .input{
  height: 36px;
  padding: 0 12px;
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  color: rgb(var(--snx-strong));
  font: inherit;
  font-size: 13px;
}
.live-presenca-drawer .input:focus,
.live-delib-form .input:focus,
.delib-form .input:focus{
  outline: 2px solid rgb(var(--snx-primary));
  outline-offset: -1px;
  border-color: rgb(var(--snx-primary));
}
.live-delib-form .textarea,
.delib-form .textarea{
  width: 100%;
  border: 1px solid rgb(var(--snx-border-strong));
  border-radius: var(--snx-radius);
  background: rgb(var(--snx-surface));
  padding: 10px 12px;
  font: inherit;
  font-size: 13px;
  resize: vertical;
  min-height: 64px;
}

/* --- Botao .btn--lg (alto) — variante para acoes primarias da §17.14 --- */
.btn.btn--lg{ height: 40px; padding: 0 18px; font-size: 14px; font-weight: 600; }

/* --- Fade in (compartilhado) --- */
@keyframes snx-fade-in{
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* =========================================================================
   PORTAL SHELL (spec portal §5 — shell distinto do admin /app/_shell.html).
   Tela linear sem sidebar: topbar + content. Tokens compartilhados com o
   resto do sistema (nenhum hardcode). Usado pelos templates portal/me/*,
   portal/empresa/*, portal/preferencias/*, portal/contexto/*, portal/index.
   ========================================================================= */
.psh{
  display: flex; flex-direction: column;
  min-height: 100vh;
  background: rgb(var(--snx-surface-soft));
}
.psh__topbar{
  height: 56px;
  display: flex; align-items: center; gap: 16px;
  padding: 0 24px;
  background: rgb(var(--snx-surface));
  border-bottom: 1px solid rgb(var(--snx-border-default));
  position: sticky; top: 0; z-index: 30;
}
.psh__brand{
  display: flex; align-items: center; gap: 10px;
  font-weight: 600; font-size: 14px;
  color: rgb(var(--snx-strong));
  text-decoration: none;
}
.psh__brand-mark{
  width: 28px; height: 28px;
  display: grid; place-items: center;
  border-radius: 6px;
  background: rgb(var(--snx-primary) / .12);
  color: rgb(var(--snx-primary));
  border: 1px solid rgb(var(--snx-border-default));
  overflow: hidden;
}
.psh__brand-mark img{ width: 18px; height: 18px; }
.psh__brand-sub{
  font-size: 11px; font-weight: 500; color: rgb(var(--snx-muted));
  font-family: var(--snx-font-mono);
}
.psh__nav{
  display: flex; align-items: center; gap: 4px;
  margin-left: 12px;
}
.psh__nav a{
  display: inline-flex; align-items: center;
  height: 32px; padding: 0 12px;
  font-size: 13px; font-weight: 500;
  color: rgb(var(--snx-muted));
  text-decoration: none;
  border-radius: var(--snx-radius);
}
.psh__nav a:hover{ color: rgb(var(--snx-strong)); background: rgb(var(--snx-surface-muted)); }
.psh__nav a.is-active{ color: rgb(var(--snx-primary)); background: rgb(var(--snx-primary) / .08); }
.psh__nav a:focus-visible{ outline: none; box-shadow: 0 0 0 2px var(--snx-focus-ring); }
.psh__right{
  margin-left: auto;
  display: flex; align-items: center; gap: 12px;
}
.psh__ctx{
  display: flex; flex-direction: column;
  font-size: 11.5px; line-height: 1.3;
  color: rgb(var(--snx-muted));
  text-align: right;
}
.psh__ctx b{
  font-weight: 600; color: rgb(var(--snx-strong)); font-size: 13px;
}
.psh__ctx a{
  font-family: var(--snx-font-mono); font-size: 11px;
  color: rgb(var(--snx-primary)); text-decoration: none;
}
.psh__ctx a:hover{ text-decoration: underline; }
.psh-list{ list-style: none; padding: 0; margin: 0; }
.psh-list li{
  padding: 8px 0;
  border-bottom: 1px solid rgb(var(--snx-border-default));
}
.psh-list li:last-child{ border-bottom: none; }
.kpi--bare{ border: none; padding: 0; }
.psh__user{
  display: flex; align-items: center; gap: 10px;
  padding-left: 12px;
  border-left: 1px solid rgb(var(--snx-border-default));
}
.psh__avatar{
  width: 32px; height: 32px; border-radius: 50%;
  display: grid; place-items: center;
  background: rgb(var(--snx-primary) / .12);
  color: rgb(var(--snx-primary));
  font-weight: 600; font-size: 13px;
  border: 1px solid rgb(var(--snx-border-default));
}
.psh__logout{
  width: 32px; height: 32px;
  display: grid; place-items: center;
  background: transparent;
  border: 1px solid rgb(var(--snx-border-default));
  border-radius: var(--snx-radius);
  color: rgb(var(--snx-muted));
  cursor: pointer;
}
.psh__logout:hover{ color: rgb(var(--snx-danger)); border-color: rgb(var(--snx-danger) / .4); }
.psh__logout svg{ width: 16px; height: 16px; }
.psh__main{
  flex: 1; min-width: 0;
  padding: 24px;
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
  box-sizing: border-box;
}
.psh__title{
  font-size: 22px; font-weight: 600; line-height: 1.2;
  color: rgb(var(--snx-strong));
  margin: 0 0 4px;
}
.psh__subtitle{
  font-size: 13px; color: rgb(var(--snx-muted));
  margin: 0 0 20px;
}
.psh__grid{
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 16px;
}
.psh__col-6{ grid-column: span 6; }
.psh__col-12{ grid-column: span 12; }
@media (max-width: 900px){
  .psh__col-6{ grid-column: span 12; }
  .psh__main{ padding: 16px; }
  .psh__nav{ display: none; }
}
.psh-empty{
  padding: 24px;
  text-align: center;
  color: rgb(var(--snx-muted));
  font-size: 13px;
}
.psh-empty b{ color: rgb(var(--snx-strong)); }

