/* SFERA · design system — negatoscópio clínico
   Paleta obsidiana quente · âmbar de negatoscópio · mucosa vascular
   Tipografia: Fraunces (título) · IBM Plex Sans (UI) · IBM Plex Mono (dado) */

/* ============================================================================
   TOKENS · negatoscópio
   ----------------------------------------------------------------------------
   ESCURO É O PADRÃO, e a razão é clínica, não estética: o tablet fica dentro
   do quarto do paciente. Um app de fundo branco levantado ao lado de um leito
   às 3h da manhã é uma luminária apontada para quem está sedado.

   A metáfora de superfície é a caixa de luz do raio-X: o "filme" (--film) é
   onde o dado vive, retroiluminado sobre a bandeja escura (--tray/--obsidian).
   Cantos com "garra de clipe" (.mounted) marcam onde um dado está montado
   para leitura — o painel 3D do dente, o boletim, o resumo do turno.

   Regras que sustentam o sistema:
   · Componente NUNCA usa hex literal — só token. É isso que faz a troca de
     tema ser um atributo, e não uma segunda folha de estilo.
   · Cor é sinal, nunca decoração. Se está colorido, é acionável ou é risco.
   · Risco nunca depende só de cor: sempre cor + ícone + espessura + rótulo.
   ========================================================================== */

:root{
  color-scheme:dark;

  /* — superfícies: grafite QUENTE (modo noite da repaginada porcelana & ouro).
       Mais claro = mais elevado; a aurora champanhe entra no body, não aqui. — */
  --bg:#161512;
  --surface:#201F1B;
  --raised:#292722;

  /* — texto: marfim sobre grafite; os três níveis passam AA — */
  --txt-1:#F3EFE6;
  --txt-2:#B3AB99;
  --txt-3:#98917F;

  --line:rgba(243,239,230,.09);
  --line-strong:rgba(243,239,230,.18);

  /* — sinal (interação, marca) — ouro-champanhe — */
  --signal:#C9A96A;
  --signal-d:#B08D57;
  --on-signal:#221A0A;

  /* — RISCO CLÍNICO · sálvia → âmbar → garnet (calibrado para o escuro) — */
  --risk-0:#6FB08A;
  --risk-1:#D89A45;
  --risk-0-txt:#6FB08A; --risk-1-txt:#D89A45; --risk-2:#B84A3E; --risk-2-txt:#E08A7E;
  --on-risk-0:#0E1712;
  --on-risk-1:#1A1408;
  --on-risk-2:#FFFFFF;

  --ok:#6FB08A;
  --iso:#8D7AA6; --iso-txt:#A18EBA;

  /* — tipografia: 8 degraus, nada abaixo de 13px — */
  --t-mono-xs:13px;
  --t-sm:13px;
  --t-base:15px;
  --t-md:17px;
  --t-lg:21px;
  --t-xl:28px;
  --t-2xl:40px;
  --t-3xl:56px;

  --disp:'Bodoni Moda',Didot,ui-serif,Georgia,serif;
  --body:'Figtree',system-ui,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
  --num:'IBM Plex Mono',ui-monospace,monospace;      /* dado tabular segue mono */
  --num-disp:'Bodoni Moda',Didot,ui-serif,Georgia,serif; /* KPI-vitrine é serifa */

  /* — espaço, raio, profundidade — */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:24px; --s-6:32px; --s-7:48px;
  --r-sm:8px; --r-md:12px; --r-lg:18px; --r-full:999px;
  --r:var(--r-lg);
  --ease:cubic-bezier(.22,1,.36,1);

  /* — z-index: tooltip ACIMA de modal (antes ficava atrás) — */
  --z-sticky:10; --z-dropdown:20; --z-overlay:30; --z-modal:40; --z-toast:50; --z-tooltip:60;

  /* — alvo de toque mínimo com luva — */
  --toque:48px;

  --amber-t:rgba(201,169,106,.12);
  /* — assinatura da repaginada: aurora champanhe no topo do canvas e o
       filete de ouro que coroa cada cartão — */
  --aurora:rgba(201,169,106,.08);
  --filete:rgba(201,169,106,.55);
  /* Superfície REBAIXADA — a caixa que afunda no painel (cartão da ronda,
     célula da matriz, planta, campo de busca). Estava cravada em
     var(--baixo): no tema escuro escurece, no tema claro vira um cinza
     sujo por cima do branco. Era a origem do "fundo cinzento" — o mesmo preto
     translúcido servindo a dois fundos opostos. Agora é token e vira. */
  --baixo:rgba(0,0,0,.26);
  --baixo-2:rgba(0,0,0,.32);
  --hachura:rgba(0,0,0,.22);
  --sombra:rgba(0,0,0,.40);
  --sombra-fraca:rgba(0,0,0,.26);
}

/* ---- MODO CLARO ----------------------------------------------------------
   Para o posto de enfermagem, a coordenação em desktop e a impressão.
   A hierarquia de luminância se inverte, a ORDEM não: em claro a elevação
   vem do contraste com o fundo, então `raised` é mais escuro que o canvas. */
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]){
    color-scheme:light;
    --bg:#FAF8F3;
    --surface:#FFFFFF;
    --raised:#F4F0E6;
    --txt-1:#1C1B17;
    --txt-2:#5E594B;
    --txt-3:#6E6959;
    --line:rgba(28,27,23,.10);
    --line-strong:rgba(28,27,23,.20);
    --signal:#7A5C25;
    --signal-d:#65491C;
    --on-signal:#FFFFFF;
    --risk-0:#2F7A52;
    --risk-1:#8A5A06;
    --risk-0-txt:#2F7A52; --risk-1-txt:#8A5A06; --risk-2:#A03227; --risk-2-txt:#A03227;
    --on-risk-0:#FFFFFF;
    --on-risk-1:#FFFFFF;
    --on-risk-2:#FFFFFF;
    --ok:#2F7A52;
    --iso:#6B5490; --iso-txt:#6B5490;
    --amber-t:rgba(176,141,87,.12);
    --aurora:rgba(176,141,87,.12);
    --filete:rgba(176,141,87,.55);
    --baixo:rgba(28,27,23,.045);
    --baixo-2:rgba(28,27,23,.075);
    --hachura:rgba(28,27,23,.11);
    --sombra:rgba(28,27,23,.13);
    --sombra-fraca:rgba(28,27,23,.07);
  }
}
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#FAF8F3;
  --surface:#FFFFFF;
  --raised:#F4F0E6;
  --txt-1:#1C1B17;
  --txt-2:#5E594B;
  --txt-3:#6E6959;
  --line:rgba(28,27,23,.10);
  --line-strong:rgba(28,27,23,.20);
  --signal:#7A5C25;
  --signal-d:#65491C;
  --on-signal:#FFFFFF;
  --risk-0:#2F7A52;
  --risk-1:#8A5A06;
  --risk-0-txt:#2F7A52; --risk-1-txt:#8A5A06; --risk-2:#A03227; --risk-2-txt:#A03227;
  --on-risk-0:#FFFFFF;
  --on-risk-1:#FFFFFF;
  --on-risk-2:#FFFFFF;
  --ok:#2F7A52;
  --iso:#6B5490; --iso-txt:#6B5490;
  --amber-t:rgba(176,141,87,.12);
  --aurora:rgba(176,141,87,.12);
  --filete:rgba(176,141,87,.55);
  --baixo:rgba(28,27,23,.03);
  --baixo-2:rgba(28,27,23,.06);
  --hachura:rgba(28,27,23,.1);
  --sombra:rgba(28,27,23,.1);
  --sombra-fraca:rgba(28,27,23,.05);
}
:root[data-theme="dark"]{ color-scheme:dark; }

*{box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  min-height:100dvh;   /* dvh: 100vh inclui a barra de URL retrátil no iOS */
  color:var(--txt-1);
  font-family:var(--body);
  font-size:16px;
  line-height:1.55;
  letter-spacing:-.011em;
  font-feature-settings:"ss01" on, "kern" on;
  /* Aurora champanhe no topo — a assinatura da repaginada. O degradê é raso
     e para em 55% da altura justamente para não criar banding em tablet. */
  /* Sem background-attachment:fixed: fundo fixo obriga o compositor a
     repintar a página inteira a cada quadro — sob renderizador de software
     (CI, tablet fraco) isso saturava junto com o palco 3D e a captura de
     tela nunca recebia um quadro. A aurora fica no fluxo normal. */
  background:
    radial-gradient(120% 46% at 50% -6%, var(--aurora), transparent 60%),
    var(--bg);
}
::selection{background:rgba(201,169,106,.32);}
a{color:var(--signal);}
/* Foco visível nos DOIS modos: o anel antes sumia justamente sobre os botões
   primários, porque usava a mesma cor do preenchimento deles. */
:focus-visible{
  outline:2px solid var(--signal);
  outline-offset:2px;
  border-radius:var(--r-sm);
}
.btn-p:focus-visible, .btn.p:focus-visible, .toast:focus-visible{
  outline-color:var(--txt-1);
}
/* Dentro de contêiner rolável o anel externo é cortado — usa inset. */
.ct-row:focus-visible, .rail-item:focus-visible,
.fila-row:focus-visible{ outline-offset:-2px; }

.wrap{max-width:1120px; margin:0 auto; padding:18px;}
@media(max-width:700px){.wrap{padding:12px;}}

/* —— tipografia —— */
.eyebrow{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.22em;
  text-transform:uppercase; color:var(--signal);
  display:inline-flex; align-items:center; gap:10px;
}
.eyebrow::before{content:''; width:20px; height:1px; background:var(--signal); opacity:.7;}

h1.title, .title{
  font-family:var(--disp); font-weight:700; font-size:clamp(22px,3.2vw,30px);
  letter-spacing:-.02em; margin:0 0 4px; line-height:1.15;
}
.subtitle{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.18em;
  color:var(--signal); margin-bottom:18px; text-transform:uppercase;
}

/* —— superfícies —— */
.card, .surface{
  /* filete de ouro no topo (primeira camada) + superfície — a coroa de cada
     cartão da repaginada; backgroundColor continua opaco para os testes */
  background:
    linear-gradient(90deg, transparent, var(--filete), transparent) top center/56% 2px no-repeat,
    var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:18px;
  box-shadow:0 14px 40px var(--sombra-fraca);
  position:relative; overflow:hidden;
  transition:box-shadow .25s var(--ease), transform .25s var(--ease);
}
@media(hover:hover){
  .card:hover{ transform:translateY(-2px); box-shadow:0 22px 54px var(--sombra); }
}
.card-h{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em;
  color:var(--signal); margin-bottom:12px;
  display:flex; align-items:center; gap:7px; text-transform:uppercase;
}

/* —— botões —— */
/* `color` era var(--txt-1) sobre var(--signal-d): 2,25:1 — reprovado até em
   AA-large, no botão de "Salvar atendimento", "Registrar higiene" e "Entrar
   no plantão". Botão preenchido usa SEMPRE a cor de luminância oposta ao
   preenchimento, que é exatamente o que --on-signal significa. */
.btn-p, .btn.p{
  background:var(--signal); border:none; color:var(--on-signal);
  border-radius:var(--r-full); padding:var(--s-3) var(--s-5);
  min-height:var(--toque);
  font-size:var(--t-base); font-weight:700; letter-spacing:.02em;
  font-family:var(--body); cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; gap:var(--s-2);
  transition:transform .15s var(--ease), filter .15s, box-shadow .2s;
  box-shadow:0 10px 26px var(--sombra-fraca);
}
.btn-p:hover, .btn.p:hover{filter:brightness(1.1); transform:translateY(-1px);}
.btn-p:active, .btn.p:active{transform:scale(.985);}
.btn-g, .btn.g{
  background:var(--raised); border:1px solid var(--line-strong); color:var(--txt-1);
  border-radius:var(--r-full); padding:var(--s-3) var(--s-4); min-height:var(--toque);
  font-size:var(--t-base); font-weight:500;
  font-family:var(--body); cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  transition:background .15s;
}
.btn-g:hover, .btn.g:hover{background:rgba(196,184,163,.14);}

/* —— brand mark —— */
.brand{display:flex; align-items:center; gap:11px; text-decoration:none; color:var(--txt-1);}
.brand .ic{
  width:38px; height:38px; border-radius:11px;
  background:rgba(201,169,106,.12); border:.5px solid var(--line-strong);
  display:flex; align-items:center; justify-content:center;
  position:relative;
}
.brand .ic::after{
  content:''; position:absolute; inset:6px; border-radius:50%;
  border:1.5px solid var(--signal); opacity:.85;
  animation:breath 2.8s ease-in-out infinite;
}
.brand .ic i{font-size:18px; color:var(--signal); position:relative; z-index:1;}
.brand .n{font-family:var(--disp); font-weight:600; font-size:16px; letter-spacing:.14em;}
.brand .s{font-family:var(--mono); font-size:var(--t-sm); color:var(--signal); letter-spacing:.08em; margin-top:1px;}

@keyframes breath{
  0%,100%{transform:scale(1); opacity:.85;}
  50%{transform:scale(1.12); opacity:.35;}
}
@keyframes pulse{
  0%,100%{opacity:1;} 50%{opacity:.3;}
}
@keyframes sweep{
  from{transform:translateX(-100%);} to{transform:translateX(400%);}
}
@keyframes fadeUp{
  from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:none;}
}
@keyframes odtIn{
  from{opacity:0; transform:translateY(-8px) scale(0.96);}
  to{opacity:1; transform:none;}
}

/* —— assinatura · negatoscópio ——
   Um painel "montado" para leitura: filme retroiluminado + garra de clipe
   nos quatro cantos. Reservado para onde o dado é o protagonista da tela
   (visor 3D do dente, resumo do turno, boletim) — não em cartões utilitários,
   senão a assinatura vira papel de parede e perde o peso. */
.mounted{
  position:relative;
  background:
    radial-gradient(ellipse 120% 90% at 50% -10%, rgba(201,169,106,.09), transparent 60%),
    var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
}
.card.mounted{ overflow:visible; }
.mounted::before, .mounted::after,
.mounted .clip-tl, .mounted .clip-tr, .mounted .clip-bl, .mounted .clip-br{
  content:''; position:absolute; width:16px; height:16px; pointer-events:none;
  border:2px solid var(--signal); opacity:.55;
}
.mounted::before{ top:-1px; left:-1px; border-right:none; border-bottom:none; border-top-left-radius:3px; }
.mounted::after{ top:-1px; right:-1px; border-left:none; border-bottom:none; border-top-right-radius:3px; }
.mounted .clip-bl{ bottom:-1px; left:-1px; border-right:none; border-top:none; border-bottom-left-radius:3px; }
.mounted .clip-br{ bottom:-1px; right:-1px; border-left:none; border-top:none; border-bottom-right-radius:3px; }

@keyframes glowPulse{
  0%,100%{opacity:.55;} 50%{opacity:1;}
}
@keyframes riseIn{
  from{opacity:0; transform:translateY(14px);} to{opacity:1; transform:none;}
}
@keyframes countIn{
  from{opacity:0; transform:scale(.94);} to{opacity:1; transform:none;}
}

/* —— shell app —— */
.topbar{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  grid-template-areas:
    "left right"
    "nav nav";
  gap:16px;
  align-items:center;
  padding:12px 0 0;
  margin-bottom:20px;
  border-bottom:1px solid var(--line);
  position:relative;
}
.topbar-left{
  grid-area:left; display:flex; align-items:center; gap:10px; min-width:0; flex-wrap:wrap;
}
.topbar-right{
  grid-area:right; display:flex; align-items:center; gap:8px; justify-content:flex-end;
}
.mode-rail{
  display:flex; gap:3px; padding:4px;
  background:var(--raised);
  border:1px solid var(--line);
  border-radius:var(--r-full); margin-left:0;
  box-shadow:none;
}
.mode-rail button{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em; text-transform:uppercase;
  background:transparent; border:1px solid transparent; color:var(--txt-3);
  padding:7px 14px; border-radius:var(--r-full); cursor:pointer; transition:.15s var(--ease);
}
.mode-rail button:hover{color:var(--txt-1);}
.mode-rail button.on{
  /* pílula de tinta: aba ativa invertida, como na prancheta aprovada */
  background:var(--txt-1);
  color:var(--bg);
  border-color:transparent;
  box-shadow:0 2px 8px var(--sombra-fraca);
}
.mode-rail button[hidden]{display:none !important;}
.role-chip{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.12em; text-transform:uppercase;
  padding:6px 12px; border-radius:var(--r-full);
  border:1px solid var(--line); color:var(--signal-d);
  background:var(--amber-t);
}
.nav{
  grid-area:nav; display:flex; gap:8px; margin-left:0; width:100%;
  flex-wrap:nowrap; align-items:center; overflow-x:auto; padding-bottom:0;
  scrollbar-width:none;
}
.nav::-webkit-scrollbar { display:none; }
.nav button{
  background:transparent; border:none; color:var(--txt-2);
  border-radius:var(--r-full); padding:9px 16px; margin:4px 0 8px;
  font-size:14.5px; font-weight:600; letter-spacing:.02em;
  font-family:var(--body); cursor:pointer; white-space:nowrap; flex-shrink:0;
  display:flex; align-items:center; gap:6px; transition:.15s;
}
.nav button:hover{background:var(--amber-t); color:var(--txt-1);}
.nav button.active{
  /* pílula de tinta invertida — a aba ativa da repaginada */
  background:var(--txt-1); color:var(--bg);
  box-shadow:0 4px 14px var(--sombra-fraca);
}
.nav button[hidden]{display:none !important;}
.nav button i{font-size:14px;}

.live{
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);
  display:flex; align-items:center; gap:6px; padding:6px 12px;
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r-full);
}
.live .dot{
  width:7px; height:7px; border-radius:50%; background:var(--ok);
  box-shadow:0 0 9px var(--ok); animation:pulse 1.8s infinite;
}
.logout-btn{
  background:transparent; border:1px solid var(--line); color:var(--txt-2);
  border-radius:var(--r-full); padding:7px 12px; font-size:var(--t-sm); cursor:pointer;
  display:flex; align-items:center; gap:6px; transition:.18s; font-family:var(--body);
}
.logout-btn:hover{background:rgba(214,106,92,.12); border-color:rgba(214,106,92,.35); color:var(--risk-2-txt);}
.seal{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.08em; color:var(--txt-2);
  background:var(--surface); border:.5px solid var(--line); padding:5px 11px; border-radius:20px;
  display:inline-flex; align-items:center; gap:5px;
}

.screen{display:none; animation:fadeUp .35s var(--ease);}
.screen.show{display:block;}

/* —— patient bar / vitals —— */
.patient-bar{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin-bottom:14px;
  background:linear-gradient(115deg, rgba(201,169,106,.14), rgba(196,184,163,.03) 58%);
  border:.5px solid var(--line-strong); border-radius:var(--r-lg); padding:16px 20px;
  box-shadow:0 16px 44px var(--sombra-fraca), inset 0 1px 0 rgba(196,184,163,.1);
}
.avatar{width:52px; height:52px; border-radius:15px; display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.pdata{display:flex; gap:20px; flex-wrap:wrap; flex:1;}
.pdata .k{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.08em; color:var(--signal); text-transform:uppercase;}
.pdata .val{font-size:15px; font-weight:500; margin-top:1px;}

/* —— contexto institucional (linha, não card) —— */
.ctx-line{
  display:flex; align-items:center; flex-wrap:wrap; gap:6px 0;
  margin:0 0 12px; padding:10px 14px;
  border:1px solid var(--line); border-radius:12px;
  background:var(--surface);
  font-size:var(--t-sm); color:var(--txt-3);
}
.ctx-line-brand{color:var(--txt-3);}
.ctx-line-brand b{color:var(--txt-1); font-weight:600;}
.ctx-sep{
  width:1px; height:12px; margin:0 12px;
  background:var(--line-strong);
}
@media(max-width:700px){
  .ctx-sep{display:none;}
  .ctx-line{gap:6px 14px;}
}

/* alertas críticos */
.alert-strip{
  margin:0 0 12px; border-radius:10px;
  border:1px solid rgba(214,106,92,.28);
  background:rgba(214,106,92,.08);
}
.alert-strip[hidden]{display:none !important;}
.alert-strip-inner{
  display:flex; align-items:center; flex-wrap:wrap; gap:8px;
  padding:8px 12px; font-size:var(--t-sm); color:var(--txt-1);
}
.alert-strip-inner > i{color:var(--risk-2-txt); font-size:16px;}
.alert-strip-inner > b{color:var(--txt-1); margin-right:4px;}
.alert-chip, .alert-more{
  border:1px solid rgba(214,106,92,.28); background:var(--surface);
  color:var(--txt-1); border-radius:var(--r-full); padding:5px 12px; font-size:var(--t-sm); cursor:pointer; font-family:var(--body);
}
.alert-chip:hover, .alert-more:hover{background:rgba(214,106,92,.12);}
/* quem · onde · o quê — o chip fala gente, não código de leito */
.alert-chip{display:inline-flex; align-items:center; gap:8px; max-width:360px; padding:4px 12px 4px 5px;}
.alert-chip .ac-leito{
  font-family:var(--mono); font-size:var(--t-sm); font-weight:600; letter-spacing:.05em;
  padding:4px 10px; border-radius:var(--r-full); flex:none;
  background:rgba(214,106,92,.14); border:1px solid rgba(214,106,92,.35); color:var(--risk-2-txt);
}
.alert-chip .ac-quem{font-weight:600; white-space:nowrap; flex:none;}
.alert-chip .ac-acao{color:var(--txt-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0;}
.alert-chip .ac-acao::before{content:'— ';}
.alert-more{margin-left:auto; border-style:dashed;}

/* centro de comando */
.cc-head{
  display:flex; justify-content:space-between; align-items:flex-end; gap:16px; flex-wrap:wrap;
  margin-bottom:14px;
}
.cc-actions{display:flex; gap:8px; flex-wrap:wrap;}
.cc-actions .btn-g, .cc-actions .btn-p{flex:1 1 auto; min-width:140px;}
.stat-strip{
  display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:10px;
  margin-bottom:16px;
}
.stat-cell{
  background:var(--surface); padding:14px 14px; text-align:left;
  border:1px solid var(--line); border-radius:14px;
  animation:riseIn .5s var(--ease) both; transition:border-color .15s, transform .15s;
}
.stat-cell:nth-child(1){animation-delay:.02s;} .stat-cell:nth-child(2){animation-delay:.08s;}
.stat-cell:nth-child(3){animation-delay:.14s;} .stat-cell:nth-child(4){animation-delay:.2s;}
.stat-cell:hover{border-color:var(--line-strong); transform:translateY(-1px);}
.stat-cell b{
  display:block; font-family:var(--num-disp); font-size:clamp(22px,3vw,28px); font-weight:600;
  color:var(--txt-1); line-height:1.05; font-variant-numeric:tabular-nums;
}
.stat-cell span{font-size:var(--t-sm); color:var(--txt-3); margin-top:4px; display:block;}
.stat-cell.danger b{color:var(--risk-2-txt);}
.stat-cell.warn b{color:var(--risk-1);}
@media(prefers-reduced-motion:reduce){.stat-cell{animation:none;}}
@media(max-width:900px){.stat-strip{grid-template-columns:repeat(3,1fr);}}
@media(max-width:520px){.stat-strip{grid-template-columns:repeat(2,1fr);}}

/* ---- Plantão · um dono por informação -------------------------------------
   O censo é renderizado por dois componentes (a trilha lateral e o painel
   #iniCensoPanel) com a MESMA consulta e a MESMA ordenação. Eram desenhados
   como alternativas — a trilha em desktop/modo leito, o painel quando ela não
   cabe — mas nada escondia o painel, então os dois apareciam juntos e a mesma
   lista de pacientes ocupava duas colunas da tela.
   Regra: o painel só existe quando a trilha NÃO está visível.
   -------------------------------------------------------------------------- */
/* —— Perguntar ao plantão ——
   Deliberadamente NÃO parece um chat: não há bolhas, avatar nem "digitando".
   É um campo de consulta com resposta e fonte — a promessa é responder do
   registro, não conversar. */
.perg{
  background:var(--surface); border:1px solid var(--line); border-radius:14px;
  padding:12px 14px; margin-bottom:12px;
}
.assistente{box-shadow:0 8px 24px rgba(0,0,0,.08);}
.assistente-head{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px;}
.assistente-title{display:flex; align-items:center; gap:9px; min-width:0;}
.assistente-title>i{font-size:19px; color:var(--signal); flex-shrink:0;}
.assistente-title>div{display:flex; flex-direction:column; gap:2px; min-width:0;}
.assistente-title b{font-size:14px; letter-spacing:.02em; color:var(--txt-1);}
.assistente-title span{font-size:11px; color:var(--txt-3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.assistente-status{display:flex; align-items:center; gap:5px; border:1px solid var(--line); border-radius:999px; padding:5px 8px; color:var(--txt-3); font:500 10px/1 var(--mono); white-space:nowrap;}
.assistente-status.ativo{color:var(--signal); border-color:rgba(111,176,138,.45);}
.assistente-status i{font-size:13px;}
.perg-linha{display:flex; align-items:center; gap:8px;}
.perg-ic{color:var(--signal); font-size:18px; flex-shrink:0;}
.perg-linha input{
  flex:1; min-width:0; background:var(--raised); border:1px solid var(--line-strong);
  border-radius:10px; color:var(--txt-1); font-family:var(--body); font-size:var(--t-base);
  padding:11px 13px; min-height:var(--toque);
}
.perg-mic{
  width:44px; min-height:44px; flex-shrink:0; cursor:pointer;
  background:var(--raised); border:1px solid var(--line-strong); border-radius:10px;
  color:var(--txt-2); display:grid; place-items:center; font-size:18px;
  transition:color .15s, border-color .15s;
}
.perg-mic:hover{color:var(--signal); border-color:var(--signal);}
.perg-go{flex-shrink:0; padding:var(--s-3) var(--s-4);}
.perg-sugestoes{display:flex; gap:6px; flex-wrap:wrap; margin-top:9px;}
/* 44px é o piso de alvo de toque do app (luva, beira do leito) — não é
   arredondamento estético, é o que tests/verificar.mjs cobra. */
.perg-chip{
  background:transparent; border:1px dashed var(--line-strong); border-radius:999px;
  color:var(--txt-3); font-family:var(--body); font-size:var(--t-sm);
  padding:5px 14px; cursor:pointer; min-height:44px;
  display:inline-flex; align-items:center;
  transition:color .15s, border-color .15s;
}
.perg-chip:hover{color:var(--signal); border-color:var(--signal); border-style:solid;}
.perg-resp{
  margin-top:12px; padding:13px 15px; border-radius:12px;
  background:var(--raised); border:1px solid var(--line);
  border-left:3px solid var(--signal);
  animation:riseIn .3s var(--ease) both;
}
.perg-resp[hidden]{display:none;}
.perg-t{font-size:15px; font-weight:600; color:var(--txt-1); margin-bottom:8px;}
.perg-l{margin:0; padding-left:18px; color:var(--txt-2); font-size:14px; line-height:1.6;}
.perg-l li{margin-bottom:3px;}
/* A fonte do dado é parte da resposta: sem ela o texto vira opinião. */
.perg-foot{
  display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  margin-top:11px; padding-top:9px; border-top:1px solid var(--line);
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);
}
.perg-foot i{font-size:13px;}
.perg-ir{margin-left:auto; font-family:var(--body);}
.assistente-foot{display:flex; align-items:flex-start; gap:6px; margin-top:10px; padding-top:9px; border-top:1px solid var(--line); color:var(--txt-3); font-size:11px; line-height:1.45;}
.assistente-foot>i{color:var(--signal); font-size:14px; flex-shrink:0; margin-top:1px;}
.assistente-foot span{flex:1;}
.assistente-foot .linkish{font-size:11px; flex-shrink:0;}
.perg-ia{margin-top:10px; padding-top:10px; border-top:1px solid var(--line); display:flex; align-items:center; gap:7px; flex-wrap:wrap;}
.perg-ia small{color:var(--txt-3); flex:1 1 180px; line-height:1.4;}
.perg-ia button{font-family:var(--body);}
.perg-blocked{color:var(--txt-3); font-size:12px; line-height:1.5; margin-top:9px; padding:9px 10px; background:var(--raised); border-radius:8px;}
@media(max-width:620px){
  .assistente-head{align-items:flex-start; flex-direction:column;}
  .assistente-status{align-self:flex-start;}
  .assistente-foot{flex-wrap:wrap;}
  .assistente-foot .linkish{margin-left:20px;}
}
@media(max-width:620px){
  .perg-linha{flex-wrap:wrap;}
  .perg-linha input{flex:1 1 100%; order:-1;}
  .perg-go{flex:1;}
}
.assistente-dialog{width:min(620px,calc(100vw - 28px)); max-width:620px; border:1px solid var(--line-strong); border-radius:14px; padding:0; background:var(--surface); color:var(--txt-1); box-shadow:0 24px 80px rgba(0,0,0,.45);}
.assistente-dialog::backdrop{background:rgba(0,0,0,.58); backdrop-filter:blur(2px);}
.assistente-dialog form{padding:20px;}
.assistente-dialog p{font-size:var(--t-base); color:var(--txt-2); line-height:1.65; margin:0 0 13px;}
.assistente-dialog .btn-p{width:100%; margin-top:4px;}

/* volta do prontuário para a lista de pacientes (segundo nível → primeiro) */
.voltar-lista{
  display:inline-flex; align-items:center; gap:6px;
  background:none; border:none; cursor:pointer; font-family:var(--body);
  font-size:var(--t-sm); color:var(--txt-2); padding:6px 8px 6px 0;
  margin-bottom:8px; min-height:44px;
  transition:color .15s, transform .12s var(--ease);
}
.voltar-lista:hover{color:var(--signal); transform:translateX(-2px);}
.voltar-lista i{font-size:16px;}

.cc-grid{
  display:grid; grid-template-columns:1fr; gap:10px;
}
#iniCensoPanel{display:none;}
/* trilha ausente (modo unidade/CCIH): o censo volta para o painel, lado a lado */
body:not(.ws-rail-on) #iniCensoPanel{display:block;}
body:not(.ws-rail-on) .cc-grid{grid-template-columns:1.2fr 1fr;}
/* abaixo de 1100px a trilha some mesmo no modo leito (ver .ws-rail) */
@media(max-width:1100px){
  #iniCensoPanel{display:block;}
  .cc-grid{grid-template-columns:1.2fr 1fr;}
}
@media(max-width:960px){
  .cc-grid, body:not(.ws-rail-on) .cc-grid{grid-template-columns:1fr;}
}
.panel{
  background:var(--surface); border:1px solid var(--line); border-radius:16px;
  padding:16px 16px 14px; min-width:0;
  box-shadow:0 1px 0 rgba(255,255,255,.6) inset;
}
.panel-h{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  margin-bottom:12px; padding-bottom:10px; border-bottom:1px solid var(--line);
  font-size:13px; font-weight:600; color:var(--txt-1);
}
.panel-h i{color:var(--signal); margin-right:4px;}
.panel-meta{font-size:var(--t-sm); color:var(--txt-3); font-weight:500;}
.linkish{
  background:none; border:none; color:var(--signal); font-size:var(--t-sm); cursor:pointer; font-family:var(--body);
  display:inline-flex; align-items:center; gap:4px; padding:0;
}
.linkish:hover{color:var(--signal-d);}

.fila-dense{display:flex; flex-direction:column; gap:4px; max-height:340px; overflow:auto;}
/* Fila clínica em colunas: severidade | quem+leito | ação+motivo | seta.
   Larguras fixas nas duas primeiras colunas fazem nome, leito e ação caírem
   sempre na mesma posição horizontal — é isso que permite varrer a lista de
   cima a baixo em vez de ler cada linha inteira. */
.fila-row{
  display:grid;
  grid-template-columns:3px minmax(120px,190px) minmax(0,1fr) 16px;
  align-items:center; gap:12px; width:100%; text-align:left;
  background:var(--raised); border:1px solid transparent;
  border-radius:10px; padding:11px 12px 11px 0; cursor:pointer; color:inherit; font:inherit;
  overflow:hidden;
  transition:border-color .15s, transform .12s var(--ease);
}
.fila-row:hover{border-color:rgba(201,169,106,.34); transform:translateX(2px);}
.fila-sev{ align-self:stretch; border-radius:0 3px 3px 0; }
.fila-quem{display:flex; flex-direction:column; gap:2px; min-width:0;}
.fila-quem b{
  font-size:14px; font-weight:600; color:var(--txt-1); line-height:1.25;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.fila-leito{font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3); letter-spacing:.04em;}
.fila-oque{display:flex; flex-direction:column; gap:2px; min-width:0;}
.fila-acao{font-size:14px; font-weight:600; line-height:1.25;}
.fila-motivo{
  font-size:var(--t-sm); color:var(--txt-3); line-height:1.3;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.fila-row > i{color:var(--txt-3); flex-shrink:0;}
@media(max-width:620px){
  /* estreito demais para duas colunas: vira bloco, mantendo a ordem de leitura */
  .fila-row{grid-template-columns:3px minmax(0,1fr) 16px;}
  .fila-quem{flex-direction:row; align-items:baseline; gap:8px;}
}

.census-table{display:flex; flex-direction:column; gap:2px; max-height:420px; overflow:auto;}
.ct-head, .ct-row{
  display:grid;
  grid-template-columns:minmax(120px,1.6fr) 52px minmax(90px,1fr) 48px 56px;
  gap:10px; align-items:center;
  padding:9px 10px; font-size:var(--t-sm);
}
.ct-head{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.08em; text-transform:uppercase; color:var(--txt-3);
  padding-bottom:6px; position:sticky; top:0; background:var(--surface); z-index:1;
}
.ct-row{
  width:100%; text-align:left; border:1px solid transparent; border-radius:8px;
  background:transparent; color:inherit; font:inherit; cursor:pointer;
}
.ct-row:hover{background:var(--raised); border-color:rgba(201,169,106,.28);}
.ct-row .c-name{display:flex; flex-direction:column; gap:2px; min-width:0;}
.ct-row .c-name small{font-size:var(--t-sm); color:var(--txt-3); font-weight:400; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.ct-row .c-badges{display:flex; flex-wrap:wrap; gap:4px; min-width:0; overflow:hidden;}
/* IOT/AÉREO/ALERGIA somados passavam da coluna: sem min-width:0 no filho o
   grid não deixa o flex encolher, e a etiqueta vazava por cima da vizinha. */
.ct-row .c-badges .mini-b{min-width:0; overflow:hidden; text-overflow:ellipsis;}
.ct-row .c-ohat, .ct-row .c-risk{font-variant-numeric:tabular-nums; white-space:nowrap;}
@media(max-width:720px){
  .ct-head, .ct-row{grid-template-columns:minmax(0,1fr) 48px 48px 52px; }
  .ct-head span:nth-child(3), .ct-row .c-badges{display:none;}
}
@media(max-width:520px){
  .ct-head{display:none;}
  .ct-row{grid-template-columns:1fr 48px; gap:4px 8px;}
  .ct-row .c-badges, .ct-row .c-ohat, .ct-row .c-risk{grid-column:1;}
  .ct-row .c-badges{display:flex;}
}

/* prontuário / chart */
.chart-banner{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin-bottom:10px;
  background:var(--surface); border:1px solid var(--line); border-radius:14px; padding:14px 16px;
}
.chart-flags{display:flex; flex-wrap:wrap; gap:6px; flex:1; min-width:160px;}
.chart-risk{text-align:right; min-width:78px;}
.chart-risk .k{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.12em; color:var(--signal);}
.chart-risk #cockRisk{font-family:var(--num-disp); font-size:clamp(26px,4vw,34px); font-weight:600; line-height:1.05;}
.chart-risk .seal{margin-top:4px; display:inline-flex;}
.chart-tabs{
  display:flex; gap:4px; flex-wrap:wrap; margin-bottom:12px;
  padding:4px; background:var(--raised); border:1px solid var(--line); border-radius:12px;
}
.chart-tabs button{
  background:transparent; border:none; color:var(--txt-3); border-radius:8px;
  padding:8px 12px; font-size:var(--t-sm); cursor:pointer; font-family:var(--body);
  display:inline-flex; align-items:center; gap:5px;
}
.chart-tabs button:hover{color:var(--txt-1); background:rgba(201,169,106,.08);}
.chart-tabs button.on{background:var(--surface); color:var(--txt-1); border:1px solid var(--line); box-shadow:0 1px 2px rgba(20,40,60,.06);}

/* workstation: censo lateral + conteúdo —— */
.ws{
  display:grid;
  grid-template-columns:1fr;
  gap:16px; align-items:start;
}
body.ws-rail-on .ws{
  grid-template-columns:240px minmax(0,1fr);
}
.ws-main{min-width:0;}
.ws-rail{
  display:none;
  position:sticky; top:12px;
  max-height:calc(100vh - 24px);
  background:#1A1F24;
  border:1px solid rgba(196,184,163,.12);
  border-radius:16px;
  padding:12px 10px;
  overflow:hidden;
  flex-direction:column;
}
body.ws-rail-on .ws-rail{display:flex;}
.ws-rail-h{
  display:flex; align-items:flex-start; justify-content:space-between; gap:8px;
  padding:2px 6px 12px; border-bottom:1px solid rgba(196,184,163,.1); margin-bottom:10px;
}
.ws-rail-k{font-size:13px; font-weight:600; color:var(--txt-1);}
.ws-rail-sub{font-size:var(--t-sm); color:var(--txt-3); margin-top:2px;}
.ws-rail-add{
  width:32px; height:32px; border-radius:9px; border:1px solid rgba(196,184,163,.2);
  background:rgba(201,169,106,.12); color:var(--signal); cursor:pointer;
  display:flex; align-items:center; justify-content:center;
}
.ws-rail-add:hover{background:rgba(201,169,106,.22);}
.ws-rail-list{flex:1; overflow:auto; display:flex; flex-direction:column; gap:4px; padding-right:2px;}
.rail-item{
  position:relative; display:grid; grid-template-columns:4px 36px 1fr auto auto; gap:6px; align-items:center;
  width:100%; text-align:left; border:1px solid transparent; border-radius:10px;
  background:transparent; color:inherit; font:inherit; padding:8px 8px 8px 6px; cursor:pointer;
}
.rail-item:hover{background:rgba(196,184,163,.06);}
.rail-item.on{
  background:rgba(201,169,106,.12);
  border-color:rgba(201,169,106,.28);
}
.rail-accent{width:4px; height:28px; border-radius:4px;}
.rail-bed{font-family:var(--mono); font-size:var(--t-sm); font-weight:600; color:var(--signal);}
.rail-body{min-width:0; display:flex; flex-direction:column;}
.rail-body b{font-size:var(--t-sm); color:var(--txt-1); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.rail-body small{font-size:var(--t-sm); color:var(--txt-3);}
.rail-flags{display:flex; gap:3px; color:var(--txt-2); font-size:var(--t-sm);}
.rail-risk{font-size:var(--t-sm); font-weight:700; width:12px; text-align:center;}
.rail-empty{padding:16px 8px; font-size:var(--t-sm); color:var(--txt-3);}
.ws-rail-foot{
  display:flex; justify-content:space-between; gap:6px;
  margin-top:10px; padding-top:10px; border-top:1px solid rgba(196,184,163,.1);
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);
}
@media(max-width:1100px){
  body.ws-rail-on .ws{grid-template-columns:1fr;}
  /* no tablet/mobile o censo fica no Início — evita card lateral “preso” no topo */
  body.ws-rail-on .ws-rail{display:none !important;}
}

.flag{
  display:inline-flex; align-items:center; gap:5px;
  font-size:var(--t-sm); font-weight:600; padding:4px 9px; border-radius:999px;
  background:rgba(196,184,163,.1); color:var(--txt-2); border:1px solid rgba(196,184,163,.14);
}
.flag-iot{background:rgba(201,169,106,.14); color:var(--risk-1); border-color:rgba(201,169,106,.35);}
.flag-iso{background:color-mix(in srgb, var(--fc,var(--iso)) 16%, transparent); color:var(--fc,var(--iso)); border-color:color-mix(in srgb, var(--fc,var(--iso)) 40%, transparent);}
.flag-alg{background:rgba(214,106,92,.14); color:var(--risk-2-txt); border-color:rgba(214,106,92,.35);}

.ward-head{
  display:flex; justify-content:space-between; align-items:flex-end; gap:18px; flex-wrap:wrap;
  margin-bottom:16px;
}
.ward-lede{margin:8px 0 0; max-width:48ch; color:var(--txt-3); font-size:14px; line-height:1.45;}
.inicio-split{display:grid; grid-template-columns:1.15fr .85fr; gap:12px; margin-top:12px;}
@media(max-width:900px){.inicio-split{grid-template-columns:1fr;}}

.c-bed{font-family:var(--mono); font-size:var(--t-sm); font-weight:600; color:var(--signal-d);}
.c-name{font-size:13px; font-weight:600; color:var(--txt-1); white-space:normal; overflow:visible;}
.c-badges{display:flex; gap:4px; flex-wrap:wrap; min-width:0;}
.c-ohat{font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);}
.c-risk{font-size:var(--t-sm); font-weight:700;}
.mini-b{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.04em; font-weight:600;
  padding:2px 6px; border-radius:5px; border:1px solid transparent;
}
.mini-b.iot{background:rgba(201,169,106,.14); color:var(--risk-1); border-color:rgba(201,169,106,.32);}
.mini-b.iso{background:rgba(201,160,255,.14); color:var(--iso-txt); border-color:rgba(201,160,255,.32);}
.mini-b.alg{background:rgba(214,106,92,.14); color:var(--risk-2-txt); border-color:rgba(214,106,92,.32);}
@media(max-width:640px){
  .c-bed{grid-area:bed;} .c-name{grid-area:name;} .c-badges{grid-area:badges;} .c-ohat{grid-area:ohat;} .c-risk{grid-area:risk; text-align:right;}
}

.handoff-box{font-size:13px; color:var(--txt-1);}
.handoff-line{margin-bottom:12px; color:var(--txt-1);}
.handoff-grid{
  display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:12px;
}
.handoff-grid > div{
  background:var(--raised); border:1px solid var(--line); border-radius:10px; padding:10px 12px;
}
.handoff-grid .hk{display:block; font-size:var(--t-sm); color:var(--txt-3); margin-bottom:4px;}
.handoff-grid b{font-family:var(--num-disp); font-size:22px; font-weight:600; color:var(--txt-1);}
.handoff-list{margin:0; padding-left:18px; color:var(--txt-3); line-height:1.55;}
.handoff-list b{color:var(--txt-1);}

.audit-list{display:flex; flex-direction:column; gap:0;}
.audit-row{
  display:grid; grid-template-columns:72px 120px 1fr; gap:10px; align-items:baseline;
  padding:10px 8px; border-bottom:1px solid rgba(196,184,163,.08); font-size:var(--t-sm);
  border-radius:6px; transition:background .15s;
}
.audit-row:hover{background:var(--raised);}
.audit-row:last-child{border-bottom:none;}
.a-ts{font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);}
.a-by{color:var(--txt-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.a-act{color:var(--txt-1);}
.a-act b{color:var(--signal); font-weight:600; margin-right:4px;}
.audit-empty{padding:12px 0; color:var(--txt-3); font-size:13px;}
@media(max-width:700px){.audit-row{grid-template-columns:1fr; gap:2px;}}

.proto-panel{
  margin:14px 0; padding:16px 18px;
  border-radius:16px; border:1px solid rgba(201,169,106,.22);
  background:linear-gradient(165deg, rgba(201,169,106,.1), rgba(10,14,18,.4));
}
.proto-h{
  display:flex; align-items:center; gap:8px; margin-bottom:12px;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em; text-transform:uppercase; color:var(--signal);
}
.proto-grid{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px;}
.proto-item{
  background:var(--raised); border:1px solid var(--line); border-radius:12px; padding:12px;
}
.proto-item .pk{display:block; font-size:var(--t-sm); color:var(--txt-3); margin-bottom:6px;}
.proto-item b{display:block; font-size:14px; color:var(--txt-1); line-height:1.3; margin-bottom:4px;}
.proto-item small{display:block; font-size:var(--t-sm); color:var(--txt-2); line-height:1.4;}
@media(max-width:960px){.proto-grid{grid-template-columns:1fr 1fr;}}
@media(max-width:560px){.proto-grid{grid-template-columns:1fr;}}

.modal-wide{max-width:640px; width:min(640px,92vw);}
.modal-h{display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:16px;}
.modal-kicker{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.12em; text-transform:uppercase; color:var(--signal); margin-bottom:4px;}
.modal-title{font-size:18px; font-weight:600; color:var(--txt-1);}
.modal-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:14px;}
@media(max-width:560px){.modal-grid{grid-template-columns:1fr;}}
.modal-checks{display:flex; flex-direction:column; gap:10px; margin-bottom:16px;}
.modal-checks label{display:flex; align-items:center; gap:10px; font-size:13px; cursor:pointer; color:var(--txt-2);}
.chk{
  width:22px; height:22px; border-radius:6px; border:1px solid var(--line-strong);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
  background:transparent; color:var(--txt-1); font-size:var(--t-sm);
}
.chk.on{background:var(--signal-d); border-color:var(--signal);}
.modal-actions{display:flex; gap:9px; flex-wrap:wrap;}
.modal-actions .btn-p, .modal-actions .btn-g{flex:1;}
.bmf-cta{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:14px; padding:11px 12px; border:1px solid rgba(214,106,92,.32); border-left:3px solid var(--risk-2); border-radius:10px; background:rgba(214,106,92,.08);}
.bmf-cta>div{display:flex; flex-direction:column; gap:2px; min-width:0;}
.bmf-cta b{font-size:13px; color:var(--txt-1);}
.bmf-cta span{font-size:11px; color:var(--txt-2); line-height:1.4;}
.bmf-cta .btn-g{flex-shrink:0; min-height:44px;}
.bmf-patient{margin:-4px 0 15px; color:var(--txt-2); font-size:var(--t-sm); padding:9px 11px; border-radius:8px; background:var(--raised); border:1px solid var(--line);}
.bmf-check{display:flex; align-items:center; gap:9px; min-height:48px; color:var(--txt-2); font-size:var(--t-sm); cursor:pointer;}
.bmf-check input{width:22px; height:22px; accent-color:var(--risk-2);}
.bmf-modal textarea{width:100%; min-height:80px; resize:vertical; background:var(--raised); border:1px solid var(--line-strong); border-radius:9px; color:var(--txt-1); padding:10px 11px; font:var(--t-base)/1.5 var(--body);}
.bmf-warning{display:flex; gap:8px; align-items:flex-start; margin:14px 0; padding:10px 11px; border-radius:9px; background:rgba(201,169,106,.09); border:1px solid rgba(201,169,106,.3); color:var(--txt-2); font-size:12px; line-height:1.5;}
.bmf-warning i{color:var(--signal); font-size:16px; flex-shrink:0; margin-top:1px;}
@media(max-width:560px){
  .bmf-cta{align-items:flex-start; flex-direction:column;}
  .bmf-cta .btn-g{width:100%;}
}
.ep-head{font-size:var(--t-sm) !important; color:var(--txt-3) !important; letter-spacing:.5px; text-transform:uppercase; font-weight:500 !important;}

@media print{
  /* A raiz do erro de impressão: esconder o shell e clarear o card não
     bastava — TODO texto usa token, e os tokens seguiam escuros: ao imprimir
     com o tema noturno, saía marfim sobre papel branco (invisível). No
     papel, a paleta INTEIRA vira tinta clara — como tudo é token, uma
     redefinição conserta todas as telas de uma vez. */
  :root, :root[data-theme="dark"]{
    color-scheme:light;
    --bg:#FFFFFF;
    --surface:#FFFFFF;
    --raised:#F4F0E6;
    --txt-1:#1C1B17;
    --txt-2:#453F33;
    --txt-3:#5E594B;
    --line:rgba(28,27,23,.22);
    --line-strong:rgba(28,27,23,.38);
    --signal:#65491C;
    --signal-d:#65491C;
    --on-signal:#FFFFFF;
    --risk-0:#2F7A52;
    --risk-1:#8A5A06;
    --risk-0-txt:#25603F; --risk-1-txt:#7A4F05; --risk-2:#A03227; --risk-2-txt:#8E2B21;
    --on-risk-0:#FFFFFF; --on-risk-1:#FFFFFF; --on-risk-2:#FFFFFF;
    --ok:#25603F;
    --iso:#5B4779; --iso-txt:#5B4779;
    --amber-t:rgba(122,92,37,.1);
    --aurora:transparent;
    --filete:rgba(101,73,28,.5);
    --baixo:rgba(28,27,23,.04);
    --baixo-2:rgba(28,27,23,.07);
    --hachura:rgba(28,27,23,.12);
    --sombra:transparent;
    --sombra-fraca:transparent;
  }
  body{background:#fff !important; color:var(--txt-1) !important;}
  /* papel não tem cursor nem plantão ao vivo: fora o chrome e as ações */
  .topbar, .ctx-line, .ws-rail, .nav, .mode-rail, .login-bg, .toast, .tip,
  .logout-btn, .live, .subnav, .perg, .cc-actions, .actions, .voltar-lista,
  .od-plano, .chart-tabs, .demo-ribbon{display:none !important;}
  .ws{display:block !important;}
  .card, .brief, .patient-bar, .leito-card, .vidro, .painel{
    box-shadow:none !important; border-color:#bbb !important;
  }
  /* Selos com cor CRAVADA inline pelo JS (riskCol resolve o token escuro e
     congela no HTML) não obedecem à troca de tokens — no papel viram tinta
     pura; a semântica sobrevive pelo texto (OHAT/OK/falha), como manda a
     regra da casa. */
  .tl-tag, .tl-dot{background:#fff !important; color:#1C1B17 !important; border:.5px solid #999 !important;}
  .dg-c{background:#fff !important; color:#1C1B17 !important; border:.5px solid #999 !important;}
  .fila-acao{color:var(--txt-1) !important;}
  /* A regra geral que encerra a caçada: qualquer texto com cor CRAVADA
     inline pelo JS (riskCol e afins congelam o token escuro no HTML) vira
     tinta no papel. A semântica nunca depende só de cor — regra da casa —
     e o navegador não imprime fundos por padrão: tinta sobre branco, sempre. */
  [style*="color:"]{color:#1C1B17 !important;}

  /* — o papel não tem polegar nem cursor —
     A barra inferior é position:fixed: na impressão real ela CARIMBA todas as
     páginas por cima do conteúdo (flagrada atravessando o meio da matriz).
     Junto dela, tudo que é sobreposição ou ação some do papel. */
  .tab-bar, .modal-bg, dialog, .voz-bar, .dit-consent, .mais-bg,
  .mtoggle, .od-viewbar, .od-hud, .cock-od-cta, .od-selbar, .od-plano-feito,
  .perg-mic, .dit-btn, .ronda-add, .data-btns{display:none !important;}

  /* A arcada 3D é WebGL: no papel vira um bloco preto — o palco sai e ficam
     a legenda, os focos e o OHAT por domínio, que carregam a clínica. */
  .cock-3d, #cock3dWrap, #od3dWrap, .arcada-stage, .od-stage-clean{display:none !important;}

  /* Contêiner rolável amputa conteúdo no papel: o que rola na tela imprime
     inteiro. E cartão não quebra no meio da página. */
  .census-table, .fila-dense, .tl, .mtz-scroll, .dom-scroll{
    max-height:none !important; overflow:visible !important;
  }
  .card, .panel, .leito-card, .kpi, .vidro, .painel, .tl-item, .mtz tbody tr,
  .pav-cel, .turno .step, .proto-panel, .brief{break-inside:avoid;}

  @page{margin:14mm;}
}

.grid-cock{display:grid; grid-template-columns:1fr 1.15fr; gap:13px;}
.grid-2{display:grid; grid-template-columns:1.3fr 1fr; gap:14px;}
@media(max-width:820px){.grid-cock{grid-template-columns:1fr;}}
@media(max-width:760px){.grid-2{grid-template-columns:1fr;}}

.odonto-layout{
  display:grid; grid-template-columns:minmax(0,1.55fr) minmax(260px,1fr); gap:14px; align-items:start;
}
.odonto-stage-card{overflow:visible;}
.odonto-hero{min-height:380px;}
@media(max-width:900px){
  .odonto-layout{grid-template-columns:1fr;}
}

.od-palette{display:flex; gap:7px; flex-wrap:wrap; margin-bottom:6px;}
.od-hint{font-size:var(--t-sm); color:var(--txt-2); margin:2px 0 10px; line-height:1.4;}
.od-stage-clean::before{display:none;}
.od-stage-clean .scanline{display:none;}
.od-viewbar{
  position:absolute; top:10px; left:10px; right:10px; z-index:5;
  display:flex; gap:5px; flex-wrap:wrap; pointer-events:none;
}
.od-viewbar .od-view{pointer-events:auto;}
.od-view{
  background:rgba(10,14,18,.88); border:.5px solid var(--line-strong); color:var(--txt-2);
  border-radius:8px; padding:6px 10px; font-size:var(--t-sm); cursor:pointer;
  display:inline-flex; align-items:center; gap:5px; font-family:var(--body);
}
.od-view:hover{border-color:rgba(201,169,106,.35); color:var(--txt-1);}
.od-view.on{border-color:rgba(56,224,176,.55); color:var(--signal); background:rgba(56,224,176,.12);}
.od-view-reset{margin-left:auto; padding:6px 9px;}
.od-hud{
  position:absolute; left:10px; bottom:12px; z-index:4;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.08em; color:var(--txt-2);
  background:rgba(10,14,18,.88); border:.5px solid var(--line); border-radius:8px;
  padding:6px 10px; pointer-events:none; max-width:calc(100% - 20px);
}
.od-selbar{
  margin-top:10px;
  background:linear-gradient(120deg, rgba(56,224,176,.1), var(--raised));
  border:.5px solid rgba(56,224,176,.4); border-radius:13px; padding:11px 13px;
}
.od-ficha{
  margin-top:4px; padding:10px 8px 6px;
  background:linear-gradient(180deg, rgba(15,22,32,.9), rgba(10,14,18,.95));
  border:.5px solid var(--line-strong); border-radius:var(--r-lg);
}
.od-svg{width:100%; max-width:100%; height:auto; display:block; margin:0 auto;}
.od-legend{
  display:flex; gap:12px; margin-top:12px; font-size:var(--t-sm); color:var(--txt-2);
  flex-wrap:wrap; justify-content:flex-start;
}
.od-legend span{display:inline-flex; align-items:center; gap:5px;}
.od-legend .ldot{width:10px; height:10px; border-radius:3px; display:inline-block; box-sizing:border-box;}

.cock-arcada{display:flex; flex-direction:column; align-items:stretch; gap:10px;}
.cock-od-stage{
  width:100%; min-height:0; padding:6px 4px 2px; cursor:pointer;
}
.cock-od-svg{
  width:100%; height:auto; display:block; min-height:200px;
}
.cock-od-legend{
  justify-content:flex-start; gap:11px; margin-top:2px;
  font-size:var(--t-sm);
}
.cock-od-cta{
  align-self:stretch; justify-content:center; gap:7px;
  padding:9px 12px; font-size:var(--t-sm);
}

/* —— arcada stage (assinatura) —— */
.arcada-stage{
  position:relative; border-radius:var(--r-lg); overflow:hidden;
  background:
    radial-gradient(ellipse 70% 55% at 50% 40%, rgba(201,169,106,.12), transparent 70%),
    linear-gradient(180deg, #242119, #161512);
  border:.5px solid var(--line-strong);
  min-height:320px;
}
.arcada-stage::before{
  content:''; position:absolute; inset:0; pointer-events:none; z-index:2;
  background:repeating-linear-gradient(0deg, transparent 0 3px, rgba(0,0,0,.04) 3px 4px);
}
.arcada-stage .scanline{
  position:absolute; top:0; left:0; width:28%; height:100%; z-index:3; pointer-events:none;
  background:linear-gradient(90deg, transparent, rgba(201,169,106,.07), transparent);
  animation:sweep 4.5s linear infinite;
}

.mtoggle{display:flex; gap:6px; margin-bottom:12px;}
.mtoggle button{
  flex:1; background:var(--raised); border:.5px solid var(--line); color:var(--txt-2);
  border-radius:8px; padding:8px; font-size:var(--t-sm); cursor:pointer; font-family:var(--body);
}
.mtoggle button.on{background:var(--signal); color:var(--on-signal); border-color:transparent;}

.legend{display:flex; gap:13px; margin-top:11px; font-size:var(--t-sm); color:var(--txt-2); flex-wrap:wrap; justify-content:center;}
.legend span{display:flex; align-items:center; gap:5px;}
.ldot{width:10px; height:10px; border-radius:3px;}

.ohat-mini .row{display:flex; align-items:center; gap:8px; margin-bottom:6px; font-size:var(--t-sm);}
.ohat-mini .bar{flex:1; height:6px; border-radius:6px; background:var(--raised); overflow:hidden;}
.ohat-mini .fill{height:100%; border-radius:6px;}

.vital{display:flex; align-items:center; justify-content:space-between; padding:8px 0; border-bottom:.5px solid var(--line); font-size:var(--t-sm);}
.vital:last-child{border-bottom:none;}
.vital .lbl{color:var(--txt-2); display:flex; align-items:center; gap:8px;}

.tl{position:relative; padding-left:20px;}
.tl::before{content:''; position:absolute; left:5px; top:4px; bottom:4px; width:1.5px; background:rgba(196,184,163,.2);}
.tl-item{position:relative; margin-bottom:13px;}
.tl-item:last-child{margin-bottom:0;}
.tl-dot{position:absolute; left:-20px; top:2px; width:12px; height:12px; border-radius:50%; border:2px solid var(--bg);}
.tl-time{font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);}
.tl-txt{font-size:var(--t-sm); margin-top:1px;}
.tl-tag{font-size:var(--t-sm); padding:2px 8px; border-radius:12px; margin-left:6px;}

.impact{
  margin-top:13px;
  background:linear-gradient(100deg,rgba(201,169,106,.14), rgba(201,169,106,.02));
  border:.5px solid rgba(201,169,106,.3); border-radius:14px; padding:15px 18px;
  display:flex; align-items:center; gap:15px; flex-wrap:wrap;
}
.impact .ic{
  width:40px; height:40px; border-radius:12px; background:rgba(201,169,106,.18);
  display:flex; align-items:center; justify-content:center;
}
.impact .ic i{font-size:22px; color:var(--signal);}

.actions{display:flex; gap:10px; margin-top:13px; flex-wrap:wrap;}
/* Escopado em `.actions`. Estava solto como `.btn-p{flex:1; min-width:200px}` e
   valia para TODO botão primário do app — todo botão em contêiner flex crescia
   sozinho até ocupar o espaço livre. Era a origem da fila de regras que vinham
   depois só para desfazer isto (.cc-actions, .wiz-nav, .rev-nav, .modal-actions,
   .fotos-acts, .sintese-acts…), e do botão "Perguntar" nascer com a largura do
   campo de busca ao lado. */
.actions .btn-p{flex:1; min-width:200px;}

.ohat-row{
  display:flex; align-items:center; gap:var(--s-3); flex-wrap:wrap;
  background:var(--surface); border:1px solid var(--line);
  border-radius:var(--r-md); padding:var(--s-3) var(--s-4);
}
.ohat-row i.dom{font-size:20px; color:var(--signal); flex-shrink:0;}
/* Domínio ainda não pontuado nesta avaliação: trilho âmbar à esquerda.
   Antes a nota vinha pré-preenchida com a avaliação anterior e não havia
   como distinguir "avaliei e deu 1" de "nem olhei". */
.ohat-row.ohat-pend{ border-color:rgba(201,169,106,.42); box-shadow:inset 3px 0 0 var(--risk-1); }

/* Botões de escore OHAT — o gesto mais repetido do produto: 24 toques por
   paciente, com luva. Eram 32×32px; o mínimo com luva é 48px. */
.sbtn{
  min-width:var(--toque); min-height:56px; flex:1;
  border-radius:var(--r-md); font-family:var(--num);
  font-size:var(--t-md); font-weight:600; cursor:pointer;
  transition:transform .12s var(--ease), background .12s, border-color .12s;
}
.sbtn:active{ transform:scale(.97); }
/* Marca discreta de qual era a nota anterior — orienta sem responder. */
.sbtn-ant{ position:relative; }
.sbtn-ant::after{
  content:''; position:absolute; left:50%; bottom:6px; transform:translateX(-50%);
  width:16px; height:2px; border-radius:2px; background:var(--txt-3);
}
/* Os três botões ocupam uma linha própria e a largura toda: a descrição do
   domínio deixa de ser espremida em coluna estreita, e o alvo de toque cresce
   ainda mais — que é o ponto, já que este é o gesto mais repetido do plantão. */
.ohat-row > div:last-child{ display:flex; gap:var(--s-2); flex:1 1 100%; }
.ohat-row > div:nth-child(2){ flex:1 1 100%; min-width:0; }
.ohat-row > div:nth-child(2) > div:first-child{ font-weight:600; }

/* Botão desabilitado precisa PARECER desabilitado: sem isto o profissional
   toca em "Examinar a boca" e nada acontece, sem entender por quê. */
.btn-p[disabled], .btn-g[disabled], button[disabled]{
  opacity:.45; cursor:not-allowed; filter:grayscale(.4);
}
.btn-p[disabled]:active, button[disabled]:active{ transform:none; }

/* Escore parcial: enquanto houver domínio não avaliado o número é provisório
   e o risco não deve ser afirmado. */
.score-parcial{ opacity:.55; }
.score-parcial-aviso{
  font-family:var(--mono); font-size:var(--t-sm); color:var(--risk-1);
  letter-spacing:.06em; text-transform:uppercase;
}

/* Aviso de domínios pendentes antes de avançar. */
.ohat-faltam{
  display:flex; align-items:center; gap:var(--s-2);
  font-size:var(--t-sm); color:var(--risk-1);
  background:rgba(201,169,106,.10); border:1px solid rgba(201,169,106,.35);
  border-radius:var(--r-md); padding:var(--s-3) var(--s-4); margin-bottom:var(--s-3);
}
.pill{
  display:inline-flex; align-items:center; gap:7px; padding:8px 18px; border-radius:22px;
  font-family:var(--disp); font-size:16px; font-weight:700;
}
.modtag{
  display:inline-flex; align-items:center; min-height:44px;
  font-size:var(--t-sm); padding:var(--s-2) var(--s-4); border-radius:var(--r-full);
  border:1px solid var(--line-strong); color:var(--txt-2); background:var(--raised); cursor:pointer;
  transition:transform .12s var(--ease);
}
.modtag:active{transform:scale(.97);}
.modtag.on{background:rgba(214,106,92,.18); border-color:rgba(214,106,92,.5); color:var(--risk-2-txt);}

/* `color-scheme` sai daqui: fixá-lo como dark forçava os controles nativos
   (dropdown, date picker, autofill) a renderizar escuros dentro de formulários
   claros. Agora ele vem do :root e acompanha o tema. */
/* Antes esta lista era por tipo e esquecia number, search, tel, date… — o
   campo de casos de PAV nasceu com 24px de altura e sem estilo nenhum.
   Enumerar o que NÃO é campo de texto é mais seguro do que enumerar o que é. */
select, textarea,
input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]):not([type=color]):not([type=submit]):not([type=button]){
  background:var(--raised); border:1px solid var(--line-strong); color:var(--txt-1);
  border-radius:var(--r-md); padding:var(--s-3) var(--s-3);
  font-size:var(--t-base); font-family:inherit; width:100%;
  min-height:var(--toque);
  transition:border-color .15s, box-shadow .15s;
}
select:focus, input:focus, textarea:focus{outline:none; border-color:var(--signal); box-shadow:0 0 0 3px rgba(201,169,106,.20);}
select:hover, input:hover, textarea:hover{border-color:var(--line-strong);}
/* Select nativo sem `appearance:none` renderiza chrome do SO — a única peça
   de UI que quebrava o app custom por dentro. Seta desenhada com o token de
   sinal, então troca de tema/cor sem precisar mexer aqui de novo. */
select{
  appearance:none; -webkit-appearance:none;
  padding-right:calc(var(--s-3) + 22px); cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23C9A96A' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right var(--s-3) center;
}
select:disabled{opacity:.5; cursor:not-allowed;}

/* checkbox custom — o único que existia no app era chrome puro do SO */
input[type=checkbox]{
  appearance:none; -webkit-appearance:none; margin:0;
  width:20px; height:20px; min-width:20px; flex-shrink:0;
  border:1.5px solid var(--line-strong); border-radius:6px;
  background:var(--raised); cursor:pointer; position:relative;
  transition:background .15s, border-color .15s;
}
input[type=checkbox]:hover{border-color:var(--signal);}
input[type=checkbox]:checked{background:var(--signal); border-color:var(--signal);}
input[type=checkbox]:checked::after{
  content:''; position:absolute; left:6px; top:2px; width:5px; height:10px;
  border:solid var(--on-signal); border-width:0 2px 2px 0; transform:rotate(45deg);
}
input[type=checkbox]:focus-visible{outline:2px solid var(--signal); outline-offset:2px;}
/* Autofill seguia um azul-quase-preto fixo, deixando texto escuro sobre fundo
   escuro no tema claro. Segue o token. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--txt-1);
  -webkit-box-shadow:0 0 0 1000px var(--raised) inset;
  transition:background-color 9999s ease-in-out 0s;
}
.field .l{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.08em; color:var(--txt-2); margin-bottom:var(--s-1);}
.reg-row{
  display:flex; align-items:center; gap:10px;
  background:var(--raised); border:.5px solid rgba(196,184,163,.1);
  border-radius:8px; padding:8px 12px;
}

/* —— mural espacial (planta UTI) —— */
.ward-map{
  display:grid; grid-template-columns:repeat(4,1fr); gap:10px;
  /* espaço no topo para o rótulo da planta: ele é ::before absoluto e, com
     padding uniforme, o primeiro leito subia por cima dele. */
  padding:40px 16px 16px; border-radius:var(--r-lg);
  background:
    linear-gradient(90deg, var(--line) 1px, transparent 1px) 0 0 / 25% 100%,
    linear-gradient(var(--line) 1px, transparent 1px) 0 0 / 100% 40px,
    var(--baixo);
  border:.5px solid var(--line);
  position:relative;
}
.ward-map::before{
  content:'PLANTA · UTI ADULTO'; position:absolute; top:10px; left:16px;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.2em; color:var(--txt-3); z-index:2;
  pointer-events:none;
}
.ward-map .bed{
  background:var(--surface); border:.5px solid var(--line); border-radius:14px;
  padding:14px; position:relative; overflow:hidden; cursor:pointer; transition:.2s var(--ease);
  z-index:1;
}
.ward-map .bed:hover{transform:translateY(-3px); box-shadow:0 16px 36px var(--sombra); border-color:var(--line-strong);}
.ward-map .bed.breathe{animation:breath 2.4s ease-in-out infinite;}
.bed .accent{position:absolute; top:0; left:0; right:0; height:3px;}
.mini-bars{display:flex; gap:4px; align-items:flex-end; height:32px; margin-top:10px;}
.mini-bars .b{flex:1; border-radius:3px;}
.mural-grid{display:contents;}
@media(max-width:900px){.ward-map{grid-template-columns:repeat(2,1fr);}}
@media(max-width:520px){.ward-map{grid-template-columns:1fr;}}

/* A coluna de flags tinha 60px, mas a etiqueta "ALERGIA" sozinha mede ~72px:
   nenhuma quebra de linha resolve item mais largo que a coluna. Alargada, e
   as vizinhas cederam a diferença. */
.ep-row{
  display:grid; grid-template-columns:90px minmax(0,1fr) 96px 62px 76px 92px; gap:8px;
  align-items:center; padding:11px 13px; border-bottom:1px solid var(--line); font-size:13px;
  border-radius:8px; transition:background .15s;
}
.ep-row:not(.ep-head):hover{background:var(--raised);}
/* a linha é o botão de abrir o paciente */
.ep-row-abre{cursor:pointer;}
.ep-row-abre:hover{border-color:var(--line-strong);}
.ep-row-abre:focus-visible{outline:2px solid var(--signal); outline-offset:-2px;}
.ep-row-abre .badge[onclick]{cursor:pointer;}
.ep-row:last-child{border-bottom:none;}
.badge{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.05em; padding:3px 10px; border-radius:14px; font-weight:500;}

.kpi{
  background:linear-gradient(165deg, rgba(196,184,163,.05), rgba(196,184,163,.015));
  border:.5px solid var(--line); border-radius:15px; padding:13px 15px;
}
.kpi .l{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em; color:var(--signal);}
.kpi .v{font-family:var(--num-disp); font-size:30px; font-weight:600; line-height:1.2; font-variant-numeric:tabular-nums;}

/* —— boletim CCIH · master brief —— */
body.mode-ccih{
  background:
    radial-gradient(ellipse 900px 480px at 50% -8%, rgba(201,169,106,.14), transparent 55%),
    linear-gradient(180deg, #1F1D19 0%, #141311 100%);
}
body.mode-ccih .wrap{max-width:1180px;}
body.mode-ccih .topbar{margin-bottom:14px; padding-bottom:12px;}
body.mode-ccih .navgroup .navlbl{display:none;}

.brief{
  color:var(--txt-1);
  border-radius:24px;
  padding:clamp(20px,3vw,36px);
  background:var(--surface);
  border:1px solid var(--line);
  box-shadow:0 28px 80px var(--sombra);
}

.brief-head{
  display:flex; justify-content:space-between; align-items:flex-start; gap:24px;
  flex-wrap:wrap; margin-bottom:clamp(22px,3vw,32px);
  padding-bottom:clamp(18px,2.5vw,26px);
  border-bottom:1px solid rgba(196,184,163,.12);
}
.brief-kicker{
  margin:0 0 8px; font-family:var(--mono); font-size:var(--t-sm); font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--signal);
}
.brief-title{
  margin:0 0 10px; font-family:var(--disp); font-weight:600;
  font-size:clamp(24px,3.4vw,34px); letter-spacing:-.025em; line-height:1.18;
  color:var(--txt-1);
}
.brief-lede{
  margin:0; max-width:46ch; font-size:clamp(14px,1.6vw,16px);
  line-height:1.55; color:var(--txt-2);
}
.brief-actions{
  display:flex; flex-wrap:wrap; align-items:center; gap:10px;
}
.brief-date{
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-2); letter-spacing:.04em;
}
.brief-badge{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.06em;
  padding:7px 11px; border-radius:999px;
  color:var(--risk-1); background:rgba(201,169,106,.12);
  border:1px solid rgba(240,193,77,.35);
}
.brief-btn{
  display:inline-flex; align-items:center; gap:8px;
  font-family:var(--body); font-size:14px; font-weight:600;
  padding:12px 18px; border-radius:12px; border:none; cursor:pointer;
  color:var(--on-signal); background:var(--signal);
  box-shadow:0 8px 24px rgba(201,169,106,.28);
  transition:transform .15s ease, filter .15s;
}
.brief-btn:hover{filter:brightness(1.06); transform:translateY(-1px);}
.brief-btn:focus-visible{outline:2px solid var(--signal); outline-offset:2px;}

/* métricas — números sempre legíveis */
.metric-board{
  display:grid;
  grid-template-columns:repeat(4, minmax(0,1fr));
  gap:12px;
  margin-bottom:clamp(18px,2.5vw,26px);
}
.metric{
  display:flex; flex-direction:column; justify-content:flex-end;
  min-height:148px;
  padding:20px 18px 18px;
  border-radius:18px;
  background:var(--raised);
  border:1px solid rgba(196,184,163,.14);
}
.metric--alert{
  background:var(--raised); box-shadow:inset 3px 0 0 var(--risk-2);
  border-color:rgba(232,138,154,.45);
}
.metric--warn{
  background:var(--raised); box-shadow:inset 3px 0 0 var(--risk-1);
  border-color:rgba(232,168,56,.4);
}
.metric--ok{
  background:var(--raised); box-shadow:inset 3px 0 0 var(--risk-0);
  border-color:rgba(111,176,138,.35);
}
.metric-num{
  font-family:var(--num); font-weight:600;
  font-size:clamp(42px,6.5vw,58px);
  line-height:.95; letter-spacing:-.025em;
  color:var(--txt-1);
  font-variant-numeric:tabular-nums lining-nums;
  font-feature-settings:"tnum" on, "lnum" on;
}
.metric--alert .metric-num{color:var(--risk-2-txt);}
.metric--warn .metric-num{color:var(--risk-1);}
.metric--ok .metric-num{color:var(--ok);}
.metric-label{
  margin-top:12px;
  font-family:var(--body); font-size:15px; font-weight:600;
  color:var(--txt-1); line-height:1.25;
}
.metric-hint{
  margin-top:4px;
  font-size:13px; color:var(--txt-3); line-height:1.35;
}

.brief-block{margin-bottom:clamp(16px,2vw,22px);}
.brief-block-h{
  display:flex; align-items:center; gap:8px;
  margin-bottom:10px;
  font-family:var(--mono); font-size:var(--t-sm); font-weight:500;
  letter-spacing:.1em; text-transform:uppercase; color:var(--signal);
}

.ds-bars{
  display:flex; height:16px; border-radius:999px; overflow:hidden;
  background:var(--raised);
}
.ds-seg{height:100%; min-width:2px;}
.ds-seg.low{background:var(--risk-0);}
/* Hachura no segmento moderado: o boletim vai impresso à CCIH e em P&B os
   três segmentos viravam três cinzas indistinguíveis. */
.ds-seg.mid{
  background:var(--risk-1);
  background-image:repeating-linear-gradient(45deg,transparent 0 4px,var(--hachura) 4px 8px);
}
.ds-seg.high{background:var(--risk-2);}
.ds-legend{
  display:flex; flex-wrap:wrap; gap:14px 18px; margin-top:12px;
  font-size:13px; color:var(--txt-2);
}
.ds-legend i{
  display:inline-block; width:9px; height:9px; border-radius:50%;
  margin-right:7px; vertical-align:middle;
}

.brief-split{
  display:grid; grid-template-columns:1fr 1fr; gap:12px;
  margin-bottom:12px;
}
.brief-card{
  border-radius:18px; padding:20px 18px;
  background:var(--raised); border:1px solid var(--line);
}
.brief-card--priority{border-color:rgba(214,106,92,.28);}
.brief-card-h{
  margin:0 0 14px; font-family:var(--mono); font-size:var(--t-sm); font-weight:500;
  letter-spacing:.1em; text-transform:uppercase; color:var(--signal);
}
.brief-chart{display:block; width:100%; height:auto; min-height:140px;}
.brief-legend{
  display:flex; flex-wrap:wrap; gap:14px; margin-top:10px;
  font-size:var(--t-sm);
}
.brief-legend .lg-a{color:var(--signal);}
.brief-legend .lg-b{color:var(--risk-2-txt);}
.brief-money{
  margin:0 0 6px; font-family:var(--num); font-weight:600;
  font-size:clamp(32px,4.5vw,44px); letter-spacing:-.02em; line-height:1.05;
  color:var(--txt-1); font-variant-numeric:tabular-nums lining-nums;
}
.brief-money-note{margin:0 0 14px; font-size:13px; color:var(--txt-3);}
.brief-list{display:flex; flex-direction:column; gap:0;}
.brief-list > div{
  display:flex; justify-content:space-between; gap:12px; align-items:baseline;
  padding:11px 0; border-bottom:1px solid rgba(196,184,163,.1);
  font-size:14px;
}
.brief-list > div:last-child{border-bottom:none;}
.brief-list span{color:var(--txt-2);}
.brief-list b{color:var(--txt-1); font-family:var(--num); font-weight:600; font-size:16px; font-variant-numeric:tabular-nums;}

.brief-foot{
  margin-top:18px; padding-top:16px;
  border-top:1px solid rgba(196,184,163,.1);
  text-align:center; font-size:var(--t-sm); line-height:1.6; color:var(--txt-3);
}

/* responsivo — números nunca encolhem demais */
@media (max-width:960px){
  .metric-board{grid-template-columns:repeat(2, minmax(0,1fr));}
  .brief-split{grid-template-columns:1fr;}
}
@media (max-width:560px){
  .brief{border-radius:18px; padding:16px;}
  .metric-board{grid-template-columns:1fr; gap:10px;}
  .metric{min-height:120px; padding:18px 16px;}
  .metric-num{font-size:clamp(48px,14vw,56px);}
  .brief-actions{width:100%;}
  .brief-btn{width:100%; justify-content:center;}
  .brief-head{gap:16px;}
}
@media (min-width:961px) and (max-width:1100px){
  .metric-num{font-size:clamp(36px,4vw,52px);}
}

.foot{text-align:center; font-size:var(--t-sm); color:var(--txt-3); padding:24px 0 10px; line-height:1.7;}
.tip{
  position:fixed; pointer-events:none; background:var(--surface); border:.5px solid var(--line-strong);
  border-radius:9px; padding:8px 11px; font-size:var(--t-sm); opacity:0; transition:.12s; z-index:30; max-width:210px;
}
.tip .tt{color:var(--signal); font-size:var(--t-sm); letter-spacing:.04em; text-transform:uppercase; margin-bottom:2px;}
/* —— toast · severidade —— o texto já diz o que aconteceu; a cor da borda e
   o ícone agora reforçam em vez de repetir a mesma cara pra tudo. A classe
   é aplicada automaticamente por toast() a partir de palavras-chave da
   mensagem — nenhum dos ~80 pontos de chamada precisou mudar. */
.toast{
  position:fixed; bottom:24px; left:50%; transform:translateX(-50%) translateY(80px);
  background:var(--raised); color:var(--txt-1); padding:12px 18px 12px 16px; border-radius:12px;
  font-size:13px; font-weight:600; opacity:0; transition:.3s var(--ease); z-index:50;
  display:flex; align-items:center; gap:9px; box-shadow:0 8px 30px var(--sombra);
  border:1px solid var(--line-strong); border-left:3px solid var(--signal); max-width:min(420px,88vw);
  /* O toast é informativo, sem botão — mas como elemento fixo ele ENGOLIA o
     clique de quem estava embaixo: no celular, cobria a barra do polegar e o
     "Atender" morria justamente após cada ação (toda ação tosta). Aviso não
     rouba clique. */
  pointer-events:none;
}
.toast.show{transform:translateX(-50%) translateY(0); opacity:1;}
/* e no celular ele sobe para CIMA da barra do polegar — não em cima dela */
@media(max-width:900px){
  .toast{bottom:calc(72px + env(safe-area-inset-bottom));}
}
.toast i{font-size:16px; color:var(--signal); flex-shrink:0;}
.toast.t-success{border-left-color:var(--ok);} .toast.t-success i{color:var(--ok);}
.toast.t-warn{border-left-color:var(--risk-1);} .toast.t-warn i{color:var(--risk-1);}
.toast.t-error{border-left-color:var(--risk-2-txt);} .toast.t-error i{color:var(--risk-2-txt);}
.modal-bg{display:none; position:fixed; inset:0; background:rgba(10,8,4,.62); backdrop-filter:blur(2px); z-index:40; align-items:center; justify-content:center; padding:18px;}
.modal-bg.show{display:flex;}
.modal{
  background:var(--surface); border:1px solid var(--line-strong); border-radius:16px; padding:20px;
  width:100%; max-width:380px; animation:riseIn .28s var(--ease) both;
}
.modal.modal-wide{max-width:640px;}
.confirm-modal{text-align:center; padding:28px 24px 22px;}
.confirm-ic{
  width:52px; height:52px; margin:0 auto 14px; border-radius:50%;
  display:grid; place-items:center; font-size:24px;
  background:rgba(201,169,106,.14); color:var(--signal);
}
.confirm-modal.perigo .confirm-ic{background:rgba(214,106,92,.14); color:var(--risk-2-txt);}
.confirm-msg{margin:0 0 20px; font-size:15px; line-height:1.55; color:var(--txt-1); white-space:pre-line;}
.confirm-actions{display:flex; gap:10px;}
.confirm-actions button{flex:1;}
.confirm-modal.perigo .btn-p{background:var(--risk-2);}
.data-btns{display:flex; gap:8px; flex-wrap:wrap; margin-top:10px;}
.data-btns button{
  background:var(--raised); border:1px solid var(--line-strong); color:var(--txt-1);
  border-radius:var(--r-md); padding:var(--s-3) var(--s-4); min-height:var(--toque);
  font-size:var(--t-sm); cursor:pointer; font-family:var(--body); font-weight:500;
  display:inline-flex; align-items:center; gap:var(--s-2);
  transition:border-color .15s, background .15s, transform .12s var(--ease);
}
.data-btns button:hover{border-color:var(--signal); background:rgba(201,169,106,.08);}
.data-btns button:active{transform:scale(.97);}
/* Apagar a base local é irreversível — o botão precisa ler como perigoso,
   não como "mais um do lado". */
.data-btns button.danger{
  color:var(--risk-2-txt); border-color:rgba(214,106,92,.45); background:rgba(214,106,92,.08);
}
.data-btns button.danger:hover{border-color:var(--risk-2-txt); background:rgba(214,106,92,.16);}

/* —— os leitos agora · cartões por gravidade ——
   A unidade inteira em um olhar. A ANIMAÇÃO é proporcional à gravidade:
   urgência pulsa forte, não avaliado pulsa suave, pendente e avaliado
   ficam quietos — se tudo se mexe, nada se destaca. */
.leitos-bloco{margin-bottom:18px;}
.leitos-head{
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  flex-wrap:wrap; margin-bottom:10px;
}
.leitos-titulo{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.18em;
  text-transform:uppercase; color:var(--signal);
  display:inline-flex; align-items:center; gap:8px;
}
.leitos-legenda{display:flex; gap:14px; flex-wrap:wrap;}
.leitos-legenda .lg{
  display:inline-flex; align-items:center; gap:6px;
  font-size:var(--t-sm); color:var(--txt-3);
}
.leitos-legenda .lg i{width:7px; height:7px; border-radius:7px; display:block;}
.leitos-legenda .lg2 i{background:var(--risk-2-txt);}
.leitos-legenda .lg1 i{background:var(--risk-1-txt);}
.leitos-legenda .lgP i{background:var(--signal);}
.leitos-legenda .lg0 i{background:var(--ok);}

.leitos-grid{
  display:grid; grid-template-columns:repeat(auto-fill,minmax(172px,1fr)); gap:12px;
}
.leito-card{
  position:relative; overflow:hidden; cursor:pointer; text-align:left;
  display:flex; flex-direction:column; gap:5px; min-height:var(--toque);
  padding:14px 16px 13px;
  font-family:var(--body); color:var(--txt-1);
  background:
    linear-gradient(90deg, transparent, var(--lc-cor, var(--filete)), transparent) top center/62% 2px no-repeat,
    var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  box-shadow:0 10px 30px var(--sombra-fraca);
  transition:transform .22s var(--ease), box-shadow .22s, border-color .22s;
}
@media(hover:hover){
  .leito-card:hover{ transform:translateY(-3px); box-shadow:0 18px 44px var(--sombra); border-color:var(--line-strong); }
}
.leito-card .lc-rot{
  display:flex; width:100%; align-items:center; gap:7px;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em;
  text-transform:uppercase; font-weight:500;
}
.leito-card .lc-ponto{width:7px; height:7px; border-radius:7px; flex:none;}
.leito-card .lc-leito{
  font-family:var(--num-disp); font-size:23px; line-height:1.05; font-weight:500;
}
.leito-card .lc-nome{font-size:13.5px; font-weight:600; color:var(--txt-1);}
.leito-card .lc-chip{
  align-self:flex-start;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.06em;
  padding:3px 10px; border-radius:var(--r-full);
  border:1px solid var(--line);
}
.leito-card .lc-sub{font-size:var(--t-sm); color:var(--txt-3); line-height:1.4;}

/* urgência — garnet, halo pulsando forte */
.leito-card.lc2{border-color:rgba(214,106,92,.4); animation:lcHalo2 2.2s ease-out infinite;}
.leito-card.lc2{--lc-cor:var(--risk-2-txt);}
.leito-card.lc2 .lc-rot{color:var(--risk-2-txt);}
.leito-card.lc2 .lc-ponto{background:var(--risk-2-txt); animation:lcPonto 1.8s ease-out infinite;}
.leito-card.lc2 .lc-chip{background:var(--risk-2); border-color:transparent; color:var(--on-risk-2); font-weight:600;}
.leito-card.lc2 .lc-sub{color:var(--risk-2-txt); font-weight:500;}
@keyframes lcHalo2{
  0%,100%{box-shadow:0 10px 30px var(--sombra-fraca), 0 0 0 0 rgba(214,106,92,.22);}
  50%{box-shadow:0 10px 30px var(--sombra-fraca), 0 0 0 9px rgba(214,106,92,0);}
}
@keyframes lcPonto{
  0%,100%{box-shadow:0 0 0 0 rgba(214,106,92,.4);}
  55%{box-shadow:0 0 0 6px rgba(214,106,92,0);}
}

/* não avaliado — âmbar, pulso suave */
.leito-card.lc1{border-color:rgba(216,154,69,.38); animation:lcHalo1 3.4s ease-out infinite;}
.leito-card.lc1{--lc-cor:var(--risk-1-txt);}
.leito-card.lc1 .lc-rot{color:var(--risk-1-txt);}
.leito-card.lc1 .lc-ponto{background:var(--risk-1-txt); animation:lcPonto1 2.6s ease-out infinite;}
.leito-card.lc1 .lc-chip{background:var(--amber-t); border-color:rgba(216,154,69,.38); color:var(--risk-1-txt);}
.leito-card.lc1 .lc-sub{color:var(--risk-1-txt);}
@keyframes lcHalo1{
  0%,100%{box-shadow:0 10px 30px var(--sombra-fraca), 0 0 0 0 rgba(216,154,69,.16);}
  50%{box-shadow:0 10px 30px var(--sombra-fraca), 0 0 0 7px rgba(216,154,69,0);}
}
@keyframes lcPonto1{
  0%,100%{box-shadow:0 0 0 0 rgba(216,154,69,.35);}
  55%{box-shadow:0 0 0 5px rgba(216,154,69,0);}
}

/* pendente — dourado, quieto (aguarda terceiros) */
.leito-card.lcP{--lc-cor:var(--signal);}
.leito-card.lcP .lc-rot{color:var(--signal);}
.leito-card.lcP .lc-ponto{background:var(--signal);}
.leito-card.lcP .lc-chip{background:var(--amber-t); border-color:var(--line-strong); color:var(--signal);}

/* avaliado — verde, sereno */
.leito-card.lc0{--lc-cor:var(--ok);}
.leito-card.lc0 .lc-rot{color:var(--ok);}
.leito-card.lc0 .lc-ponto{background:var(--ok);}
.leito-card.lc0 .lc-chip{background:rgba(111,176,138,.12); border-color:rgba(111,176,138,.3); color:var(--ok);}

/* —— planta em alas: o mural fala a língua da grade ——
   Duas colunas de leitos com o corredor no meio — o mapa que se lê da
   porta da unidade. Os cartões são os MESMOS da grade do Plantão. */
.planta-alas{display:grid; grid-template-columns:1fr 56px 1fr; gap:14px; align-items:start;}
.planta-alas.solo{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));}
@media(max-width:760px){ .planta-alas{grid-template-columns:1fr;} .planta-corredor{display:none;} }
.planta-ala{display:flex; flex-direction:column; gap:12px;}
.planta-ala-h{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.2em;
  color:var(--signal); text-transform:uppercase;
  padding-bottom:2px; border-bottom:1px solid var(--line-strong);
}
.planta-corredor{
  align-self:stretch; display:flex; align-items:center; justify-content:center;
  background:repeating-linear-gradient(45deg, transparent 0 8px, var(--hachura) 8px 9px);
  border-left:1px dashed var(--line-strong); border-right:1px dashed var(--line-strong);
  border-radius:var(--r-sm); min-height:200px;
}
.planta-corredor span{
  writing-mode:vertical-rl; font-family:var(--mono); font-size:11px;
  letter-spacing:.4em; color:var(--txt-3);
}
.leito-card .lc-flags{display:flex; gap:4px; flex-wrap:wrap;}
.leito-card .lc-meta{font-size:var(--t-sm); color:var(--txt-3); border-top:1px solid var(--line); padding-top:6px; margin-top:2px;}

/* —— seleção visível ——
   O sistema responde ao toque (pressionado encolhe de leve) e DIZ qual
   paciente está aberto: moldura dourada + a palavra "aberto" no cartão,
   fundo âmbar na linha do censo. Faltava essa devolutiva. */
.leito-card:active, .ct-row:active, .fila-row:active, .rail-item:active{
  transform:scale(.985);
}
.leito-card.atual{
  border-color:var(--signal-d);
  box-shadow:0 0 0 2px var(--amber-t), 0 10px 30px var(--sombra-fraca);
}
.leito-card .lc-aberto{
  margin-left:auto; font-family:var(--mono); font-size:var(--t-sm);
  letter-spacing:.08em; color:var(--signal); text-transform:none;
  display:inline-flex; align-items:center; gap:5px;
}
.leito-card .lc-aberto::before{content:''; width:5px; height:5px; border-radius:5px; background:var(--signal);}
.ct-row.atual{
  background:var(--amber-t);
  border-color:var(--line-strong);
}

@media(prefers-reduced-motion:reduce){
  .leito-card.lc2, .leito-card.lc1,
  .leito-card .lc-ponto{animation:none;}
}

/* —— início hub —— */
.ini-hero{display:flex; align-items:flex-end; gap:16px; flex-wrap:wrap; margin-bottom:18px;}
.ini-hello{font-family:var(--disp); font-size:clamp(28px,4vw,40px); font-weight:700; letter-spacing:-.02em; line-height:1.1;}
.ini-sub{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.12em; color:var(--signal); margin-bottom:6px;}
.ini-kpis{display:flex; gap:9px; margin-left:auto; flex-wrap:wrap;}
.ini-kpi{
  background:var(--surface); border:.5px solid var(--line); border-radius:12px;
  padding:10px 16px; text-align:center; min-width:88px;
}
.ini-kpi b{font-family:var(--num-disp); font-size:24px; font-weight:600; display:block; line-height:1.1; font-variant-numeric:tabular-nums;}
.ini-kpi span{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em; color:var(--txt-3);}
.ini-tiles{display:grid; grid-template-columns:repeat(auto-fit,minmax(155px,1fr)); gap:11px; margin-top:14px;}
.ini-tile{
  background:linear-gradient(160deg, rgba(196,184,163,.06), rgba(196,184,163,.015));
  border:.5px solid var(--line); border-radius:16px; padding:17px 15px; cursor:pointer;
  transition:.2s var(--ease); position:relative; overflow:hidden;
}
.ini-tile:hover{transform:translateY(-3px); border-color:var(--signal); box-shadow:0 14px 32px var(--sombra);}
.ini-tile i.big{font-size:26px; color:var(--signal); display:block; margin-bottom:10px;}
.ini-tile b{font-family:var(--disp); font-size:15.5px; font-weight:600; display:block; margin-bottom:3px;}
.ini-tile span{font-size:var(--t-sm); color:var(--txt-2); line-height:1.45; display:block;}
.pend-item{
  display:flex; align-items:center; gap:11px;
  background:var(--raised); border:.5px solid var(--line); border-radius:11px;
  padding:10px 13px; cursor:pointer; transition:.14s; margin-bottom:8px;
}
.pend-item:hover{border-color:var(--line-strong); background:rgba(255,255,255,.055);}
.pend-item .tag{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em; padding:4px 9px; border-radius:9px; flex-shrink:0;}
.pend-item .tx{font-size:var(--t-sm); flex:1;}
.pend-item i{color:var(--txt-3);}
.pend-zero{display:flex; align-items:center; gap:10px; color:var(--txt-2); font-size:13px; padding:14px 4px;}

/* —— odontograma —— */
.od-chip{
  display:inline-flex; align-items:center; gap:7px; padding:7px 12px; border-radius:10px;
  font-size:var(--t-sm); border:.5px solid var(--line); color:var(--txt-2);
  background:var(--raised); cursor:pointer; transition:border-color .15s, background .15s, color .15s;
  user-select:none;
}
.od-chip .sw{width:11px; height:11px; border-radius:4px; flex:0 0 auto;}
.od-chip:hover{border-color:rgba(201,169,106,.4); color:var(--txt-1);}
.od-chip.on{border-color:var(--signal); background:rgba(201,169,106,.16); color:var(--txt-1);}
.od-tooth{cursor:pointer;}
.od-tooth rect{transition:fill .15s, stroke .15s;}
.od-tooth:hover rect{stroke:var(--signal); stroke-width:1.5;}
.odt{transition:opacity .15s, filter .15s;}
.odt-i{cursor:pointer;}
.odt-i:hover{opacity:1; filter:brightness(1.18) drop-shadow(0 0 4px rgba(201,169,106,.35));}
.od-sum{display:flex; gap:9px; flex-wrap:wrap; margin-top:12px;}
.od-sum .s{
  font-size:var(--t-sm); padding:6px 12px; border-radius:16px; background:var(--raised);
  border:.5px solid var(--line); color:var(--txt-2); display:inline-flex; align-items:center; gap:6px;
}

.dom-grid{display:grid; grid-template-columns:86px repeat(var(--ncols,4),1fr) 64px; gap:4px; align-items:center;}
.dom-grid{min-width:0;}
/* letter-spacing + mono faziam o rótulo medir mais que a coluna 1fr. */
.dom-grid .dg-h{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.02em; color:var(--txt-3); text-align:center; padding-bottom:2px; min-width:0; overflow:hidden; text-overflow:ellipsis;}
.dom-grid .dg-d{min-width:0; overflow:hidden; text-overflow:ellipsis;}
.dom-grid .dg-n{font-size:var(--t-sm); color:var(--txt-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dom-grid .dg-c{height:26px; border-radius:6px; display:flex; align-items:center; justify-content:center; font-size:var(--t-sm); font-weight:600; transition:.15s;}
.dom-grid .dg-c:hover{transform:scale(1.12);}
.dom-grid .dg-d{font-family:var(--mono); font-size:var(--t-sm); text-align:right; white-space:nowrap;}
.diff-row{display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:9px; background:var(--raised); font-size:var(--t-sm);}
.diff-row i{font-size:14px;}

.wiz-step{display:none; animation:fadeUp .3s var(--ease);}
.wiz-step.on{display:block;}
.wiz-nav{display:flex; gap:10px; margin-top:14px;}
.wiz-nav .btn-p{flex:2; min-width:0;}
.wiz-nav .btn-g{flex:1;}
.stepper{display:flex; gap:6px; margin-bottom:14px; flex-wrap:wrap;}
.stepper .st{
  flex:1; min-width:120px; background:var(--surface); border:1px solid var(--line);
  border-radius:10px; padding:9px 11px; display:flex; align-items:center; gap:9px;
  font-size:var(--t-sm); color:var(--txt-2); cursor:pointer;
  transition:border-color .15s, background .15s, transform .15s;
}
.stepper .st:hover{border-color:var(--line-strong); transform:translateY(-1px);}
.stepper .st.done{border-color:rgba(111,176,138,.4); color:var(--txt-2);}
.stepper .st.done .si{background:rgba(111,176,138,.18); color:var(--ok);}
.stepper .st.active{background:var(--signal); color:var(--on-signal); border-color:transparent;}
.stepper .st .si{
  width:20px; height:20px; border-radius:50%; background:rgba(201,169,106,.15);
  display:flex; align-items:center; justify-content:center; font-size:var(--t-sm); font-weight:600; flex-shrink:0;
  transition:background .15s, color .15s;
}
.stepper .st.active .si{background:var(--baixo-2); color:var(--on-signal);}

.guide{
  background:linear-gradient(100deg,rgba(201,169,106,.12), rgba(201,169,106,.02));
  border:.5px solid rgba(201,169,106,.25); border-radius:14px; padding:13px 16px;
  margin-bottom:14px; display:flex; align-items:center; gap:13px;
}
.guide .gnum{
  width:28px; height:28px; border-radius:50%; background:var(--signal); color:var(--on-signal);
  font-weight:600; font-size:14px; display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.guide .gtxt{font-size:var(--t-sm); color:var(--txt-1); line-height:1.4; flex:1;}
.guide .gtxt b{color:var(--signal);}

.scale-leg{display:flex; gap:8px; margin-top:11px; flex-wrap:wrap;}
.scale-leg .sl{
  display:flex; align-items:center; gap:7px; background:var(--raised);
  border:.5px solid var(--line); border-radius:9px; padding:6px 10px; font-size:var(--t-sm); flex:1; min-width:100px;
}
.scale-leg .sl .sn{width:20px; height:20px; border-radius:6px; display:flex; align-items:center; justify-content:center; font-weight:600; font-size:var(--t-sm); flex-shrink:0;}

/* —— login · estação de plantão —— */
/* Com o login aberto o app por baixo não pode gerar scroll nem “respirar” o viewport */
html{scrollbar-gutter:stable;}
body.login-open{
  overflow:hidden !important;
  height:100%;
  overscroll-behavior:none;
}
body.login-open .wrap,
body.login-open #idleLock{
  display:none !important;
}
.login-bg{
  position:fixed; inset:0; z-index:60; display:flex; align-items:center; justify-content:center;
  padding:20px; overflow:hidden; /* nunca auto: scrollbar on/off oscilava o layout */
  background:
    radial-gradient(ellipse 80% 60% at 18% 20%, rgba(201,169,106,.16), transparent 58%),
    radial-gradient(ellipse 50% 45% at 90% 85%, rgba(214,106,92,.08), transparent 55%),
    radial-gradient(ellipse 40% 30% at 60% 0%, rgba(111,176,138,.05), transparent 50%),
    linear-gradient(165deg, #1F1D19 0%, #141311 55%, #0E0D0B 100%);
}
.login-grid{
  position:absolute; inset:0; pointer-events:none;
  background:
    linear-gradient(rgba(201,169,106,.035) 1px, transparent 1px),
    linear-gradient(90deg, rgba(201,169,106,.035) 1px, transparent 1px);
  background-size:48px 48px;
  mask-image:radial-gradient(ellipse 90% 80% at 35% 40%, #000 10%, transparent 75%);
}
.login-glow{
  position:absolute; width:420px; height:420px; left:8%; top:18%; pointer-events:none;
  background:radial-gradient(circle, rgba(201,169,106,.14), transparent 68%);
  filter:blur(8px); opacity:.8;
}
.login-scan{display:none;} /* animação de top expandia overflow e empurrava o card */
.login-shell{
  position:relative; z-index:2; width:min(1120px, 100%);
  height:min(680px, 100%);
  max-height:100%;
  min-height:0;
  display:grid; grid-template-columns:1.12fr .88fr;
  border:1px solid var(--line-strong);
  border-radius:20px; overflow:hidden;
  background:linear-gradient(180deg, rgba(29,34,40,.94), rgba(16,19,23,.97));
  box-shadow:0 0 0 1px var(--raised) inset, 0 48px 140px var(--sombra);
}
.login-brand{
  padding:40px 44px 36px; display:flex; flex-direction:column; justify-content:space-between; gap:28px;
  border-right:1px solid var(--line); min-height:0; overflow:hidden;
  background:
    linear-gradient(160deg, rgba(201,169,106,.08) 0%, transparent 42%),
    linear-gradient(0deg, rgba(0,0,0,.2), transparent 40%);
}
.login-chrome{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em; color:var(--signal);
}
.login-live{
  display:inline-flex; align-items:center; gap:7px;
  padding:5px 10px; border-radius:999px;
  background:rgba(111,176,138,.12); border:.5px solid rgba(111,176,138,.35); color:var(--ok);
}
.login-live i{
  width:7px; height:7px; border-radius:50%; background:var(--ok);
  box-shadow:0 0 10px var(--ok); display:block;
}
.login-chip{
  padding:5px 10px; border-radius:999px;
  border:.5px solid var(--line); background:var(--raised); color:var(--txt-2);
}
.login-hero{flex:1; display:flex; flex-direction:column; justify-content:center;}
.login-mark{margin:0 0 18px;}
.login-mark-n{
  font-family:var(--disp); font-weight:560; font-optical-sizing:auto; font-style:italic;
  font-size:clamp(40px,5.6vw,60px);
  letter-spacing:-.01em; line-height:.98; color:var(--txt-1);
  text-shadow:0 0 80px rgba(201,169,106,.24);
}
.login-mark-s{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.28em; color:var(--signal); margin-top:14px;
}
.login-lead{
  margin:0 0 28px; max-width:30ch; font-size:16px; line-height:1.55; color:var(--txt-2);
}
.login-vitals{
  position:relative;
  border:1px solid var(--line-strong);
  border-radius:14px; padding:14px 16px 12px;
  background:linear-gradient(180deg, rgba(201,169,106,.07), var(--baixo));
  overflow:hidden;
}
.login-vitals::before, .login-vitals::after{
  content:''; position:absolute; width:12px; height:12px; pointer-events:none;
  border:2px solid var(--signal); opacity:.5;
}
.login-vitals::before{ top:-1px; left:-1px; border-right:none; border-bottom:none; }
.login-vitals::after{ bottom:-1px; right:-1px; border-left:none; border-top:none; }
.login-wave{width:100%; height:56px; display:block; overflow:hidden;}
.login-wave-a, .login-wave-b{
  fill:none; stroke-linecap:round; stroke-linejoin:round;
}
.login-wave-a{
  stroke:rgba(201,169,106,.9); stroke-width:1.8;
}
.login-wave-b{
  stroke:rgba(111,176,138,.45); stroke-width:1.2;
}
.login-vital-row{
  display:grid; grid-template-columns:repeat(3,1fr); gap:10px;
  margin-top:12px; padding-top:12px; border-top:.5px solid var(--line);
}
.login-vital span{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em; color:var(--txt-3); margin-bottom:3px;
}
.login-vital b{font-size:13px; font-weight:600; color:var(--txt-1); letter-spacing:.02em;}
.login-meta{
  display:grid; grid-template-columns:repeat(3,1fr); gap:14px;
  padding-top:18px; border-top:.5px solid var(--line);
}
.login-meta span{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em; color:var(--txt-3); margin-bottom:4px;
}
.login-meta b{font-size:13px; font-weight:600; color:var(--txt-1); font-variant-numeric:tabular-nums;}

.login-console{
  padding:36px 36px 32px; display:flex; flex-direction:column; justify-content:center;
  overflow:auto; min-height:0; overscroll-behavior:contain;
  background:
    linear-gradient(180deg, var(--raised), transparent 30%),
    var(--baixo-2);
}
.login-console-h{
  display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:26px;
}
.login-console-k{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.2em; color:var(--signal); margin-bottom:8px;
}
.login-console h1{
  margin:0; font-family:var(--disp); font-weight:600; font-size:clamp(26px,3.2vw,34px);
  letter-spacing:-.025em; line-height:1.12;
}
.login-console-sub{
  margin:10px 0 0; font-size:13px; line-height:1.5; color:var(--txt-3); max-width:36ch;
}
.login-back{
  width:42px; height:42px; border-radius:12px; display:grid; place-items:center; flex-shrink:0;
  color:var(--txt-2); text-decoration:none; border:.5px solid var(--line); background:var(--raised);
  transition:border-color .15s, background .15s, color .15s;
}
.login-back:hover{border-color:var(--line-strong); color:var(--txt-1); background:rgba(201,169,106,.12);}
.login-form{display:flex; flex-direction:column; gap:15px;}
/* display:flex nos painéis anula o atributo hidden — força exclusão mútua */
.login-form[hidden],
.login-sessao[hidden],
.login-erro[hidden],
.login-erro:empty,
.login-offline[hidden]{
  display:none !important;
}
.login-field{display:block; text-align:left;}
.login-field .l{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em;
  color:var(--txt-3); margin-bottom:7px; text-transform:uppercase;
}
.login-field input{
  width:100%; box-sizing:border-box;
  background:rgba(255,255,255,.035); border:.5px solid var(--line-strong); border-radius:12px;
  color:var(--txt-1); font-family:var(--body); font-size:15px;
  padding:14px 15px; outline:none; transition:border-color .15s, background .15s, box-shadow .15s;
}
.login-pass-row{position:relative;}
.login-pass-row input{padding-right:48px;}
.login-eye{
  position:absolute; right:8px; top:50%; transform:translateY(-50%);
  width:34px; height:34px; border:none; border-radius:9px; cursor:pointer;
  background:transparent; color:var(--txt-3); display:grid; place-items:center;
}
.login-eye:hover{color:var(--txt-1); background:rgba(201,169,106,.12);}
.login-field input::placeholder{color:var(--txt-3);}
.login-field input:hover{border-color:var(--line-strong);}
.login-field input:focus{
  border-color:var(--signal); background:rgba(201,169,106,.07);
  box-shadow:0 0 0 3px rgba(201,169,106,.14);
}
.login-submit{
  width:100%; margin-top:4px; justify-content:center;
  padding:15px 22px; font-size:15px; gap:10px;
}
.login-submit i{font-size:18px;}
.login-outro{
  width:100%; justify-content:center; margin-top:8px;
  padding:13px 18px; font-size:14px; gap:8px;
}
.login-sessao{display:flex; flex-direction:column; gap:4px;}
.login-sessao-card{
  display:flex; align-items:center; gap:14px;
  padding:16px; margin-bottom:14px; border-radius:14px;
  border:.5px solid rgba(201,169,106,.35);
  background:linear-gradient(135deg, rgba(201,169,106,.12), rgba(111,176,138,.06));
}
.login-sessao-av{
  width:48px; height:48px; border-radius:14px; flex-shrink:0;
  display:grid; place-items:center;
  background:rgba(201,169,106,.16); border:.5px solid rgba(201,169,106,.35); color:var(--signal);
}
.login-sessao-av i{font-size:22px;}
.login-sessao-body{min-width:0;}
.login-sessao-k{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em;
  color:var(--signal); margin-bottom:4px;
}
.login-sessao-body b{
  display:block; font-size:16px; font-weight:600; color:var(--txt-1); margin-bottom:3px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.login-sessao-body span:last-child{
  display:block; font-size:var(--t-sm); color:var(--txt-3); line-height:1.4;
}
.login-nota{
  margin:22px 0 0; font-size:var(--t-sm); line-height:1.55; color:var(--txt-3); text-align:left;
}
.login-offline{margin-top:4px;}
.role-pick{display:grid; grid-template-columns:1fr; gap:8px; margin:0 0 6px; text-align:left;}
.role-opt{
  display:flex; align-items:flex-start; gap:12px; padding:12px 14px; border-radius:12px;
  border:.5px solid var(--line); background:var(--baixo); cursor:pointer; transition:.15s;
}
.role-opt:hover{border-color:var(--line-strong);}
.role-opt.on{border-color:var(--signal); background:rgba(201,169,106,.1);}
.role-opt i{font-size:20px; color:var(--signal); margin-top:2px;}
.role-opt b{display:block; font-size:13.5px; margin-bottom:2px;}
.role-opt span{font-size:var(--t-sm); color:var(--txt-3); line-height:1.4;}

@media(max-width:900px){
  .login-bg{padding:0; align-items:stretch;}
  .login-shell{
    grid-template-columns:1fr; height:100%; max-height:none; width:100%;
    margin:0; border:none; border-radius:0; box-shadow:none;
    overflow:auto;
  }
  .login-brand{
    padding:28px 22px 22px; border-right:none; border-bottom:.5px solid var(--line); gap:18px;
    overflow:visible;
  }
  .login-mark-n{font-size:clamp(40px,12vw,56px);}
  .login-lead{margin-bottom:18px; font-size:14.5px;}
  .login-meta{grid-template-columns:1fr 1fr 1fr; gap:10px;}
  .login-console{padding:28px 22px 40px;}
  .login-glow{display:none;}
}

@media(max-width:700px){
  .topbar{
    grid-template-columns:1fr;
    grid-template-areas:
      "left"
      "right"
      "nav";
    gap:10px;
  }
  .topbar-left{flex-wrap:wrap;}
  .topbar-right{justify-content:flex-start;}
  .mode-rail{width:100%; justify-content:stretch;}
  .mode-rail button{flex:1; text-align:center; padding:9px 8px;}
  .nav{-webkit-overflow-scrolling:touch; scrollbar-width:none;}
  .nav::-webkit-scrollbar{display:none;}
  .nav button{padding:10px 13px;}
  .btn-p{min-width:0;}
  .modal{max-width:100%;}
}
#episodios .card, #turno .card{overflow-x:auto;}
@media(max-width:640px){
  #epList{min-width:560px;}
  #odonto .card{overflow-x:auto;}
  #odSvg{min-width:620px !important; max-width:none !important;}
}

/* ============================================================
   SÍNTESE CLÍNICA · resumo determinístico do episódio
   ============================================================ */
.sintese{
  border:.5px solid rgba(201,169,106,.34);
  background:
    radial-gradient(ellipse 620px 240px at 12% -10%, rgba(201,169,106,.13), transparent 62%),
    linear-gradient(168deg, rgba(196,184,163,.062), rgba(196,184,163,.018));
}
.sintese.lvl-1{border-color:rgba(232,168,56,.34);}
.sintese.lvl-2{border-color:rgba(214,106,92,.42);}

.sintese-top{display:flex; align-items:flex-start; gap:12px; flex-wrap:wrap;}
.sintese-lede{flex:1 1 260px; min-width:0;}
.sintese-kicker{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1.7px; color:var(--signal);
  display:flex; align-items:center; gap:6px; margin-bottom:6px;
}
.sintese-kicker i{font-size:var(--t-sm);}
.sintese-headline{font-size:16.5px; line-height:1.42; font-weight:600; color:var(--txt-1); letter-spacing:-.1px;}
.sintese-conf{
  display:inline-flex; align-items:center; gap:6px; padding:6px 11px; border-radius:999px;
  font-size:var(--t-sm); font-weight:600; letter-spacing:.2px; white-space:nowrap;
  border:.5px solid var(--line-strong); background:var(--baixo-2); color:var(--txt-2); cursor:help;
}
.sintese-conf i{font-size:var(--t-sm);}
.sintese-conf.alta{border-color:rgba(111,176,138,.5); color:var(--ok);}
.sintese-conf.parcial{border-color:rgba(232,168,56,.5); color:var(--risk-1);}
.sintese-conf.baixa{border-color:rgba(224,90,90,.5); color:var(--risk-2-txt);}

.sintese-nums{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(96px,1fr)); gap:8px; margin:14px 0 4px;
}
.sintese-num{
  background:var(--baixo); border:.5px solid var(--line); border-radius:11px; padding:9px 11px;
}
.sintese-num{min-width:0;}
/* 1,3px de letter-spacing num rótulo longo ("REAVALIAÇÃO") passava da
   caixa de 96px do grid auto-fit. */
.sintese-num .k{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.6px; color:var(--txt-3); display:block; margin-bottom:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.sintese-num .v{font-size:17px; font-weight:600; line-height:1.1; letter-spacing:-.3px;}
.sintese-num .v.ok{color:var(--ok);} .sintese-num .v.warn{color:var(--risk-1);}
.sintese-num .v.crit{color:var(--risk-2-txt);} .sintese-num .v.mute{color:var(--txt-2);}

.sintese-tabs{display:flex; gap:4px; margin:14px 0 12px; background:var(--baixo-2); padding:4px; border-radius:11px; border:.5px solid var(--line);}
.sintese-tabs button{
  flex:1; padding:8px 10px; border-radius:8px; border:none; cursor:pointer; background:transparent;
  color:var(--txt-2); font-family:inherit; font-size:var(--t-sm); font-weight:600; letter-spacing:.2px;
  display:flex; align-items:center; justify-content:center; gap:6px; transition:.15s var(--ease);
}
.sintese-tabs button i{font-size:13px;}
.sintese-tabs button:hover{color:var(--txt-1);}
.sintese-tabs button.on{background:rgba(201,169,106,.16); color:var(--txt-1); box-shadow:inset 0 0 0 .5px rgba(201,169,106,.4);}
.sintese-tabs .cnt{
  font-family:var(--mono); font-size:var(--t-sm); padding:1px 5px; border-radius:999px;
  background:rgba(214,106,92,.22); color:var(--risk-2-txt);
}

.sintese-pane{display:none;} .sintese-pane.on{display:block;}

/* --- o que importa agora --- */
.pri-list{display:flex; flex-direction:column; gap:8px;}
.pri{
  display:flex; gap:11px; padding:11px 13px; border-radius:11px;
  background:rgba(255,255,255,.028); border:.5px solid var(--line); border-left:2.5px solid var(--txt-3);
}
.pri.sev0{border-left-color:var(--risk-2-txt); background:rgba(224,90,90,.06);}
.pri.sev1{border-left-color:var(--risk-1); background:rgba(232,168,56,.05);}
.pri.sev2{border-left-color:rgba(201,169,106,.6);}
.pri-ic{
  flex-shrink:0; width:26px; height:26px; border-radius:8px; display:flex; align-items:center; justify-content:center;
  background:var(--baixo-2); border:.5px solid var(--line-strong);
}
.pri-ic i{font-size:14px; color:var(--txt-2);}
.pri.sev0 .pri-ic i{color:var(--risk-2-txt);} .pri.sev1 .pri-ic i{color:var(--risk-1);} .pri.sev2 .pri-ic i{color:var(--signal);}
.pri-body{min-width:0; flex:1;}
.pri-t{font-size:13px; font-weight:600; color:var(--txt-1); line-height:1.35; margin-bottom:3px;}
.pri-w{font-size:var(--t-sm); color:var(--txt-2); line-height:1.55;}
.pri-a{
  font-size:var(--t-sm); color:var(--txt-1); line-height:1.5; margin-top:5px;
  padding-left:9px; border-left:1.5px solid rgba(201,169,106,.45);
}
.pri-a b{color:var(--signal); font-weight:600;}
.pri-src{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.7px; color:var(--txt-3);
  margin-top:6px; display:flex; align-items:center; gap:5px;
}
.pri-src i{font-size:var(--t-sm);}
.pri-vazio{
  font-size:var(--t-sm); color:var(--txt-2); text-align:center; padding:18px 12px;
  background:rgba(111,176,138,.07); border:.5px dashed rgba(111,176,138,.32); border-radius:11px;
}
.pri-vazio i{display:block; font-size:22px; color:var(--ok); margin-bottom:7px;}

/* --- narrativa --- */
.prosa{display:flex; flex-direction:column; gap:12px;}
.prosa-bloco{padding-left:11px; border-left:1.5px solid rgba(201,169,106,.28);}
.prosa-t{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1.6px; color:var(--signal); margin-bottom:5px;}
.prosa-c{font-size:var(--t-sm); line-height:1.72; color:var(--txt-1);}

.sintese-acts{display:flex; gap:8px; flex-wrap:wrap; margin-top:13px;}
.sintese-acts .btn-g, .sintese-acts .btn-p{flex:1 1 auto; min-width:140px;}
.sintese-foot{
  margin-top:12px; padding-top:11px; border-top:.5px solid var(--line);
  font-size:var(--t-sm); line-height:1.6; color:var(--txt-3); display:flex; gap:8px; align-items:flex-start;
}
.sintese-foot i{font-size:13px; color:var(--signal); flex-shrink:0; margin-top:1px;}

/* faixa compacta usada no leito / listas */
.sintese-linha{
  font-size:var(--t-sm); color:var(--txt-2); display:flex; align-items:center; gap:7px; flex-wrap:wrap;
  padding:8px 11px; border-radius:9px; background:var(--baixo); border:.5px solid var(--line);
}
.sintese-linha i{font-size:var(--t-sm); color:var(--signal);}

/* ============================================================
   RECADO PARA A EQUIPE DA UTI · mesma síntese, outra língua
   ============================================================ */
.uti-card{display:flex; flex-direction:column; gap:10px;}
.uti-estado{
  display:flex; align-items:center; gap:9px; padding:12px 14px; border-radius:11px;
  font-size:14.5px; font-weight:500; letter-spacing:-.15px;
  background:rgba(111,176,138,.1); border:.5px solid rgba(111,176,138,.3); color:var(--ok);
}
.uti-estado i{font-size:19px;}
.uti-estado.lvl-1{background:rgba(232,168,56,.1); border-color:rgba(232,168,56,.32); color:var(--risk-1);}
.uti-estado.lvl-2{background:rgba(214,106,92,.12); border-color:rgba(214,106,92,.38); color:var(--risk-2-txt);}
.uti-item{
  padding:11px 13px; border-radius:10px; background:var(--baixo);
  border:.5px solid var(--line); border-left:2px solid rgba(201,169,106,.5);
}
.uti-item b{display:block; font-size:var(--t-sm); font-weight:600; color:var(--txt-1); margin-bottom:4px;}
.uti-item span{display:block; font-size:var(--t-sm); line-height:1.6; color:var(--txt-2);}
.uti-pedidos{
  padding:12px 14px; border-radius:11px; margin-top:2px;
  background:linear-gradient(150deg, rgba(201,169,106,.1), rgba(201,169,106,.03));
  border:.5px solid rgba(201,169,106,.32);
}
.uti-pedidos-h{
  display:flex; align-items:center; gap:7px; font-family:var(--mono); font-size:var(--t-sm);
  letter-spacing:1.5px; color:var(--signal); margin-bottom:9px;
}
.uti-pedidos-h i{font-size:13px;}
.uti-pedidos ul{margin:0; padding-left:17px; display:flex; flex-direction:column; gap:6px;}
.uti-pedidos li{font-size:var(--t-sm); line-height:1.6; color:var(--txt-1);}
.uti-pedidos li::marker{color:var(--signal);}

/* ============================================================
   SUMÁRIO BUCAL DE ALTA / TRANSFERÊNCIA
   ============================================================ */
.alta{border-color:rgba(111,176,138,.3);}
.alta.alta-previa{border-color:var(--line); border-style:dashed;}
.alta .card-h{justify-content:flex-start; flex-wrap:wrap; gap:8px;}
.alta-tag{
  margin-left:auto; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1px; padding:3px 9px;
  border-radius:999px; background:rgba(111,176,138,.14); border:.5px solid rgba(111,176,138,.4); color:var(--ok);
}
.alta-tag.lvl-1{background:rgba(232,168,56,.13); border-color:rgba(232,168,56,.4); color:var(--risk-1);}
.alta-tag.lvl-2{background:rgba(214,106,92,.14); border-color:rgba(214,106,92,.44); color:var(--risk-2-txt);}
.alta-aviso{
  display:flex; align-items:flex-start; gap:8px; padding:9px 12px; border-radius:9px; margin-bottom:12px;
  background:var(--line); border:.5px dashed var(--line-strong);
  font-size:var(--t-sm); line-height:1.55; color:var(--txt-2);
}
.alta-aviso i{font-size:14px; color:var(--signal); flex-shrink:0; margin-top:1px;}
.alta-traj{font-size:13.2px; line-height:1.65; color:var(--txt-1); margin:0 0 14px;}
.alta-traj span{
  display:inline-block; margin-left:6px; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1px;
  padding:2px 8px; border-radius:999px; background:rgba(196,184,163,.1); color:var(--txt-2); vertical-align:middle;
}
.alta-bloco{margin-bottom:12px;}
.alta-bt{
  display:flex; align-items:center; gap:7px; font-family:var(--mono); font-size:var(--t-sm);
  letter-spacing:1.5px; color:var(--signal); margin-bottom:7px;
}
.alta-bt i{font-size:13px;}
.alta-bloco ul{margin:0; padding-left:17px; display:flex; flex-direction:column; gap:5px;}
.alta-bloco li{font-size:var(--t-sm); line-height:1.6; color:var(--txt-1);}
.alta-bloco li::marker{color:rgba(111,176,138,.6);}

/* ============================================================
   SINCRONIZAÇÃO COM A NUVEM
   ============================================================ */
.sync-chip{
  display:flex; align-items:center; gap:6px; cursor:pointer; white-space:nowrap;
  padding:5px 11px; border-radius:999px; font-family:var(--mono); font-size:var(--t-sm);
  letter-spacing:.9px; transition:.18s var(--ease);
  background:var(--line); border:.5px solid var(--line-strong); color:var(--txt-2);
}
.sync-chip i{font-size:14px;}
.sync-chip:hover{background:var(--line);}
.sync-chip.ok{background:rgba(95,211,160,.12); border-color:rgba(95,211,160,.32); color:var(--ok);}
.sync-chip.pend{background:rgba(201,169,106,.12); border-color:rgba(201,169,106,.32); color:var(--risk-1);}
.sync-chip.erro{background:rgba(214,106,92,.1); border-color:rgba(214,106,92,.3); color:var(--risk-2-txt);}
.sync-chip.off{background:var(--raised); color:var(--txt-3);}
.sync-chip.ativo i{animation:sincGira 1.1s linear infinite;}
@keyframes sincGira{from{transform:rotate(0);}to{transform:rotate(360deg);}}
@media(max-width:760px){.sync-chip span{display:none;} .sync-chip{padding:5px 8px;}}

.aviso-bloqueio{
  display:flex; gap:12px; align-items:flex-start; margin:0 0 18px;
  padding:14px 16px; border-radius:12px; line-height:1.6;
  background:rgba(232,168,56,.09); border:.5px solid rgba(232,168,56,.34);
}
.aviso-bloqueio i{font-size:21px; color:var(--risk-1); flex-shrink:0; margin-top:1px;}
.aviso-bloqueio b{display:block; font-size:13.5px; color:var(--txt-1); margin-bottom:3px;}
.aviso-bloqueio span{font-size:var(--t-sm); color:var(--txt-3);}

.login-erro{
  display:none; align-items:flex-start; gap:8px; text-align:left;
  padding:11px 13px; border-radius:10px; font-size:var(--t-sm); line-height:1.55;
  background:rgba(214,106,92,.1); border:.5px solid rgba(214,106,92,.36); color:var(--risk-2-txt);
}
.login-erro:not([hidden]):not(:empty){display:flex;}
.login-submit:disabled, .login-console .btn-p:disabled{opacity:.6; cursor:progress;}
.login-submit:disabled i, .login-console .btn-p:disabled i{animation:sincGira 1s linear infinite;}

/* ============================================================
   RONDA DE HIGIENE · registro em um toque
   ============================================================ */
.ronda{border-color:rgba(111,176,138,.3);}
.ronda .card-h{justify-content:flex-start;}
.ronda-turno{
  margin-left:auto; display:flex; align-items:center; gap:5px;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1.1px; padding:3px 10px; border-radius:999px;
  background:rgba(111,176,138,.13); border:.5px solid rgba(111,176,138,.38); color:var(--ok);
}
.ronda-turno i{font-size:var(--t-sm);}
.ronda-prog{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:14px;}
.ronda-barra{
  flex:1 1 160px; height:7px; border-radius:999px; overflow:hidden; min-width:120px;
  background:var(--line); border:.5px solid var(--line);
}
.ronda-barra i{display:block; height:100%; background:linear-gradient(90deg,#5F8F72,#9FC4A8); transition:width .35s var(--ease);}
.ronda-prog b{font-size:14px; font-weight:600; color:var(--txt-1); white-space:nowrap;}
.ronda-prog span{font-size:var(--t-sm); color:var(--txt-3);}
.ronda-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:10px;}
.ronda-leito{
  /* Coluna flex com a ação empurrada para o pé: sem isto os cartões da linha
     esticam até o mais alto e o botão fica boiando no meio de um vazio — foi
     assim que a ronda ficou com buracos. */
  display:flex; flex-direction:column;
  padding:12px 13px; border-radius:12px; background:var(--baixo);
  border:.5px solid var(--line); border-left:3px solid rgba(111,176,138,.5); transition:.18s var(--ease);
}
.ronda-leito.lvl-1{border-left-color:rgba(232,168,56,.65);}
.ronda-leito.lvl-2{border-left-color:rgba(214,106,92,.75);}
.ronda-leito.est-feito{background:rgba(111,176,138,.07); border-color:rgba(111,176,138,.26);}
.ronda-leito.est-falhou{background:rgba(214,106,92,.07); border-color:rgba(214,106,92,.28);}
.ronda-top{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:4px;}
.ronda-top b{font-family:var(--mono); font-size:13px; letter-spacing:.6px; color:var(--txt-1);}
.ronda-top>span:first-of-type{font-size:var(--t-sm); color:var(--txt-2); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.ronda-selo{
  margin-left:auto; display:flex; align-items:center; gap:4px; white-space:nowrap;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.9px; padding:2px 7px; border-radius:999px;
}
.ronda-selo i{font-size:var(--t-sm);}
.ronda-selo.ok{background:rgba(111,176,138,.16); color:var(--ok);}
.ronda-selo.nao{background:rgba(214,106,92,.16); color:var(--risk-2-txt);}
.ronda-selo.pend{background:rgba(196,184,163,.1); color:var(--txt-3);}
.ronda-meta{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.9px; color:var(--txt-3); margin-bottom:10px;}
.ronda-btns{display:flex; gap:7px; margin-top:auto;}
.ronda-ok{
  flex:1; display:flex; align-items:center; justify-content:center; gap:8px; cursor:pointer;
  padding:14px 10px; border-radius:11px; font-size:13px; font-weight:500; font-family:inherit;
  background:rgba(111,176,138,.14); border:.5px solid rgba(111,176,138,.4); color:var(--ok);
  transition:.15s var(--ease);
}
.ronda-ok:hover{background:rgba(95,211,160,.26); color:var(--ok);}
.ronda-ok:active{transform:scale(.985);}
.ronda-ok i{font-size:20px;}
.ronda-nao{
  width:52px; display:flex; align-items:center; justify-content:center; cursor:pointer;
  border-radius:11px; background:rgba(214,106,92,.1); border:.5px solid rgba(214,106,92,.32);
  color:var(--risk-2-txt); transition:.15s var(--ease);
}
.ronda-nao:hover{background:rgba(214,106,92,.24);}
.ronda-nao i{font-size:19px;}
.ronda-desfazer{
  margin-top:auto;
  min-height:44px;
  width:100%; display:flex; align-items:center; justify-content:center; gap:6px; cursor:pointer;
  padding:9px; border-radius:10px; font-size:var(--t-sm); font-family:inherit;
  background:transparent; border:.5px solid var(--line-strong); color:var(--txt-2); transition:.15s var(--ease);
}
.ronda-desfazer:hover{background:var(--line); color:var(--txt-1);}
.ronda-desfazer i{font-size:14px;}

/* ============================================================
   REGISTRO FOTOGRÁFICO INTRAORAL
   ============================================================ */
.fotos .card-h{justify-content:flex-start;}
.fotos-cnt{
  margin-left:auto; font-family:var(--mono); font-size:var(--t-sm); padding:2px 8px; border-radius:999px;
  background:rgba(201,169,106,.16); border:.5px solid rgba(201,169,106,.4); color:var(--signal);
}
.fotos-vazio{
  font-size:var(--t-sm); line-height:1.6; color:var(--txt-2); text-align:center; padding:20px 16px;
  background:var(--baixo); border:.5px dashed var(--line-strong); border-radius:11px;
}
.fotos-vazio i{display:block; font-size:26px; color:var(--txt-3); margin-bottom:9px;}
.fotos-grupo{margin-bottom:14px;}
.fotos-gh{display:flex; align-items:baseline; gap:9px; flex-wrap:wrap; margin-bottom:8px;}
.fotos-gh b{font-size:var(--t-sm); font-weight:600; color:var(--txt-1);}
.fotos-gh span{font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.9px; color:var(--txt-3);}
.fotos-gh .linkish{margin-left:auto;}
.fotos-tiras{display:flex; gap:8px; overflow-x:auto; padding-bottom:4px; scrollbar-width:thin;}
.foto-tira{
  position:relative; flex:0 0 auto; width:98px; height:76px; border-radius:10px; overflow:hidden;
  cursor:pointer; padding:0; background:#000; border:.5px solid var(--line-strong); transition:.15s var(--ease);
}
.foto-tira:hover{border-color:var(--signal); transform:translateY(-2px);}
.foto-tira img{width:100%; height:100%; object-fit:cover; display:block;}
.foto-tira span{
  position:absolute; left:0; right:0; bottom:0; padding:3px 6px; text-align:left;
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.6px; color:var(--txt-1);
  background:linear-gradient(transparent, rgba(0,0,0,.8));
}
.fotos-acts{display:flex; gap:8px; flex-wrap:wrap; margin-top:13px;}
.fotos-acts .btn-p,.fotos-acts .btn-g{flex:1 1 auto; min-width:140px;}
.fotos-foot{
  margin-top:11px; padding-top:10px; border-top:.5px solid var(--line);
  font-size:var(--t-sm); line-height:1.55; color:var(--txt-3); display:flex; gap:7px; align-items:flex-start;
}
.fotos-foot i{font-size:13px; color:var(--signal); flex-shrink:0; margin-top:1px;}

/* --- captura e visor --- */
.foto-modal{
  position:fixed; inset:0; z-index:500; display:flex; align-items:center; justify-content:center;
  padding:16px; background:rgba(4,8,12,.82); backdrop-filter:blur(8px); animation:fadeIn .18s var(--ease);
}
@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}
.foto-box{
  width:min(560px,100%); max-height:92vh; overflow-y:auto; border-radius:16px; padding:16px;
  background:var(--surface); border:.5px solid var(--line-strong); box-shadow:0 28px 70px var(--sombra);
}
.foto-h{display:flex; align-items:center; gap:9px; margin-bottom:12px;}
.foto-h i{font-size:18px; color:var(--signal);}
.foto-h b{font-size:14.5px; font-weight:500; color:var(--txt-1);}
.foto-x{
  margin-left:auto; width:32px; height:32px; border-radius:9px; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  background:rgba(196,184,163,.1); border:.5px solid var(--line-strong); color:var(--txt-2);
}
.foto-x:hover{background:rgba(214,106,92,.16); color:var(--risk-2-txt);}
.foto-aviso{
  display:flex; gap:8px; align-items:flex-start; padding:9px 11px; border-radius:9px; margin-bottom:12px;
  background:rgba(232,168,56,.08); border:.5px solid rgba(232,168,56,.3);
  font-size:var(--t-sm); line-height:1.55; color:var(--risk-1);
}
.foto-aviso i{font-size:15px; flex-shrink:0; margin-top:1px;}
.foto-palco{
  position:relative; border-radius:12px; overflow:hidden; background:#000;
  aspect-ratio:4/3; display:flex; align-items:center; justify-content:center; margin-bottom:12px;
}
.foto-palco video,.foto-palco img{width:100%; height:100%; object-fit:cover; display:block;}
.foto-erro{padding:22px; font-size:var(--t-sm); line-height:1.6; color:var(--txt-2); text-align:center;}
.foto-luz{
  position:absolute; top:10px; right:10px; width:38px; height:38px; border-radius:11px; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  background:rgba(0,0,0,.55); border:.5px solid rgba(255,255,255,.24); color:var(--txt-1);
}
.foto-luz.on{background:var(--risk-1); color:var(--on-risk-1); border-color:var(--risk-1);}
.foto-luz i{font-size:19px;}
.foto-campos{display:flex; flex-direction:column; gap:10px; margin-bottom:13px;}
.foto-f span{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1.4px;
  color:var(--signal); margin-bottom:5px;
}
.foto-f select,.foto-f input{
  width:100%; background:var(--raised); border:.5px solid var(--line-strong); color:var(--txt-1);
  border-radius:9px; padding:10px 11px; font-size:13px; font-family:inherit;
}
.foto-acts{display:flex; gap:9px; flex-wrap:wrap;}
.foto-acts button{flex:1; min-width:130px;}
.foto-visor img{width:100%; border-radius:12px; display:block; background:#000;}
.foto-info{
  margin-top:10px; font-size:var(--t-sm); color:var(--txt-2); line-height:1.6;
}
.foto-info b{color:var(--txt-1); font-weight:600;}
.foto-info span{display:block; margin-top:4px; color:var(--txt-1);}
.foto-comp{width:min(860px,100%);}
.foto-par{display:grid; grid-template-columns:1fr 1fr; gap:10px;}
.foto-par figure{margin:0;}
.foto-par figcaption{
  margin-top:6px; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.8px; color:var(--txt-3);
}
.foto-par figcaption b{display:block; color:var(--signal); font-size:var(--t-sm);}
.foto-par figcaption span{
  display:block; margin-top:4px; font-family:var(--sans); font-size:var(--t-sm);
  letter-spacing:0; color:var(--txt-2); line-height:1.5;
}
@media(max-width:600px){.foto-par{grid-template-columns:1fr;}}

/* ============================================================
   LEITURA EM VOZ ALTA
   ============================================================ */
.voz-bar{
  position:fixed; left:50%; bottom:-90px; transform:translateX(-50%);
  display:flex; align-items:center; gap:12px; z-index:400;
  padding:10px 12px 10px 16px; border-radius:14px; min-width:290px; max-width:min(94vw,460px);
  background:rgba(12,18,24,.94); border:.5px solid rgba(201,169,106,.4);
  box-shadow:0 18px 44px var(--sombra); backdrop-filter:blur(14px);
  transition:bottom .3s var(--ease), opacity .2s; opacity:0; pointer-events:none;
}
.voz-bar.on{bottom:22px; opacity:1; pointer-events:auto;}
@media(max-width:900px){.voz-bar.on{bottom:78px;}}
.voz-onda{display:flex; align-items:center; gap:3px; height:20px; flex-shrink:0;}
.voz-onda i{width:3px; border-radius:2px; background:var(--signal); height:6px; animation:vozPulso 1s var(--ease) infinite;}
.voz-onda i:nth-child(2){animation-delay:.15s;} .voz-onda i:nth-child(3){animation-delay:.3s;} .voz-onda i:nth-child(4){animation-delay:.45s;}
.voz-bar.pausado .voz-onda i{animation-play-state:paused; opacity:.4;}
@keyframes vozPulso{0%,100%{height:5px;}50%{height:18px;}}
.voz-txt{flex:1; min-width:0;}
.voz-txt b{display:block; font-size:var(--t-sm); font-weight:500; color:var(--txt-1);}
.voz-txt span{
  display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.8px; color:var(--txt-3);
  margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.voz-b{
  width:34px; height:34px; border-radius:10px; flex-shrink:0; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  background:rgba(201,169,106,.12); border:.5px solid var(--line-strong); color:var(--signal);
  transition:.15s var(--ease);
}
.voz-b:hover{background:rgba(201,169,106,.22); color:var(--txt-1);}
.voz-b i{font-size:17px;}

/* ============================================================
   ANTES E DEPOIS DO PROTOCOLO
   ============================================================ */
.comp{border-color:rgba(201,169,106,.3);}
.comp .card-h{justify-content:flex-start;}
.comp-marco{
  margin-left:auto; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:1.1px;
  padding:3px 9px; border-radius:999px; background:rgba(201,169,106,.14);
  border:.5px solid rgba(201,169,106,.4); color:var(--signal);
}
.comp-frase{font-size:13.2px; line-height:1.65; color:var(--txt-1); margin:2px 0 14px;}
.comp-tabela{display:flex; flex-direction:column; gap:6px;}
.comp-linha{
  display:grid; grid-template-columns:1fr auto auto; gap:12px; align-items:center;
  padding:10px 12px; border-radius:10px; background:var(--baixo); border:.5px solid var(--line);
}
.comp-k{font-size:var(--t-sm); color:var(--txt-1); line-height:1.35; min-width:0;}
.comp-k span{display:block; font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.8px; color:var(--txt-3); margin-top:3px;}
.comp-v{display:flex; align-items:center; gap:8px; white-space:nowrap;}
.comp-v i{font-size:13px; color:var(--txt-3);}
.comp-v b{font-size:15px; font-weight:600; letter-spacing:-.2px;}
.comp-v .antes{color:var(--txt-2); opacity:.75;}
.comp-v .depois.ok{color:var(--ok);} .comp-v .depois.crit{color:var(--risk-2-txt);} .comp-v .depois.mute{color:var(--txt-2);}
.comp-d{
  display:flex; align-items:center; gap:4px; font-family:var(--mono); font-size:var(--t-sm);
  padding:4px 8px; border-radius:999px; white-space:nowrap; min-width:62px; justify-content:center;
}
.comp-d i{font-size:var(--t-sm);}
.comp-d.ok{background:rgba(111,176,138,.14); color:var(--ok);}
.comp-d.crit{background:rgba(224,90,90,.14); color:var(--risk-2-txt);}
.comp-d.mute{background:rgba(196,184,163,.1); color:var(--txt-2);}
.comp-foot{
  margin-top:12px; padding-top:11px; border-top:.5px solid var(--line);
  font-size:var(--t-sm); line-height:1.6; color:var(--txt-3); display:flex; gap:8px; align-items:flex-start;
}
.comp-foot i{font-size:13px; color:var(--signal); flex-shrink:0; margin-top:1px;}
.comp-foot.fraca{color:var(--risk-1);} .comp-foot.fraca i{color:var(--risk-1);}
.comp-vazio{
  font-size:var(--t-sm); color:var(--txt-2); line-height:1.6; padding:16px 14px; text-align:center;
  background:var(--baixo); border:.5px dashed var(--line-strong); border-radius:11px;
}
.comp-vazio i{display:block; font-size:21px; color:var(--txt-3); margin-bottom:8px;}
@media(max-width:640px){
  .comp-linha{grid-template-columns:1fr auto; row-gap:8px;}
  .comp-d{grid-column:2; justify-self:end;}
}

/* ============================================================
   DITADO POR VOZ
   ============================================================ */
.dit-wrap{position:relative; display:block;}
.dit-campo{padding-right:56px !important;}
textarea.dit-campo{padding-right:56px !important;}
.dit-campo--label{padding-right:104px !important;}
textarea.dit-campo--label{padding-right:104px !important;}
/* O microfone acompanha a repaginada: os campos viraram pílulas de 48px e o
   botão ficou um quadrado de 30px pregado no canto — torto e abaixo do piso
   de toque. Agora é pílula de 44×44 (o piso com luva), CENTRALIZADA no eixo
   do campo de linha e ancorada no alto da textarea; o padding-right dos
   campos cresce junto para o texto nunca passar por baixo do botão. */
.dit-wrap--linha .dit-btn{top:50%; right:4px; transform:translateY(-50%);}
.dit-wrap--linha .dit-btn.rec{transform:translateY(-50%);}
.dit-btn{
  position:absolute; top:6px; right:6px; width:44px; height:44px; border-radius:var(--r-full);
  display:flex; align-items:center; justify-content:center; gap:5px; cursor:pointer; z-index:2;
  background:rgba(201,169,106,.14); border:.5px solid rgba(201,169,106,.4); color:var(--signal);
  transition:.15s var(--ease); font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.06em; text-transform:uppercase;
}
.dit-btn--label{width:auto; min-width:88px; padding:0 13px; height:44px;}
.dit-btn i{font-size:16px;}
.dit-btn span{font-size:var(--t-sm); letter-spacing:.08em;}
.dit-btn:hover{background:rgba(201,169,106,.26); color:var(--txt-1);}
.dit-btn.off{opacity:.35; cursor:not-allowed;}
.dit-btn.rec{
  background:var(--risk-2); border-color:var(--risk-2-txt); color:var(--txt-1);
  animation:ditPulse 1.5s ease-in-out infinite;
}
.dit-banner{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin:12px 0 4px; padding:12px 14px; border-radius:12px;
  background:linear-gradient(135deg, rgba(201,169,106,.14), rgba(29,158,117,.08));
  border:.5px solid rgba(201,169,106,.35);
}
.dit-banner-txt{display:flex; align-items:flex-start; gap:10px; flex:1; min-width:200px;}
.dit-banner-txt > i{font-size:22px; color:var(--signal); margin-top:1px;}
.dit-banner-txt b{display:block; font-size:13px; color:var(--txt-1); margin-bottom:2px;}
.dit-banner-txt span{display:block; font-size:var(--t-sm); color:var(--txt-2); line-height:1.45;}
.dit-banner-btn{flex-shrink:0; padding:10px 14px;}
.wiz-3d{margin-bottom:10px;}
.wiz-3d #wiz3d{border-radius:0 0 12px 12px;}
@keyframes ditPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(224,90,90,.5);}
  50%{box-shadow:0 0 0 7px rgba(224,90,90,0);}
}
.dit-live{
  display:none; font-size:var(--t-sm); color:var(--signal); margin-top:5px; line-height:1.5;
  padding-left:8px; border-left:1.5px solid rgba(201,169,106,.4); min-height:16px;
}
.dit-live.on{display:block;}
.dit-live.erro{color:var(--risk-2-txt); border-left-color:var(--risk-2-txt);}

.dit-consent{
  position:fixed; inset:0; z-index:90; display:flex; align-items:center; justify-content:center; padding:20px;
  background:rgba(6,10,14,.72); backdrop-filter:blur(6px);
}
.dit-consent-box{
  width:100%; max-width:440px; border-radius:18px; padding:22px 22px 18px;
  background:linear-gradient(168deg, rgba(22,30,40,.99), rgba(18,24,32,.99));
  border:.5px solid var(--line-strong); box-shadow:0 40px 100px var(--sombra);
}
.dit-consent-h{
  display:flex; align-items:center; gap:9px; font-size:15px; font-weight:600; color:var(--txt-1); margin-bottom:13px;
}
.dit-consent-h i{font-size:19px; color:var(--signal);}
.dit-consent-box p{font-size:var(--t-sm); line-height:1.65; color:var(--txt-2); margin:0 0 11px;}
.dit-consent-ok, .dit-consent-warn{
  padding:10px 12px; border-radius:10px; display:flex; gap:8px; align-items:flex-start;
}
.dit-consent-ok{background:rgba(111,176,138,.1); border:.5px solid rgba(111,176,138,.35); color:var(--ok) !important;}
.dit-consent-warn{background:rgba(201,169,106,.10); border:1px solid rgba(201,169,106,.35); color:var(--risk-1);}
.dit-consent-ok i, .dit-consent-warn i{font-size:15px; flex-shrink:0; margin-top:1px;}
.dit-consent-ok b, .dit-consent-warn b{color:var(--txt-1);}
.dit-consent-fine{font-size:var(--t-sm) !important; color:var(--txt-3) !important;}
.dit-consent-acts{display:flex; gap:8px; margin-top:15px;}
.dit-consent-acts button{flex:1;}

@media(max-width:700px){
  .sintese-headline{font-size:15px;}
  .sintese-tabs button .lbl{display:none;}
  .sintese-tabs button i{font-size:15px;}
  .sintese-acts .btn-g, .sintese-acts .btn-p{flex:1 1 100%;}
}

::-webkit-scrollbar{height:8px; width:8px;}
::-webkit-scrollbar-thumb{background:rgba(196,184,163,.2); border-radius:8px;}
::-webkit-scrollbar-track{background:transparent;}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important;}
  html{scroll-behavior:auto;}
}


/* —— superfícies do shell ——
   O bloco anterior aqui usava `!important` para forçar tema claro e, no
   caminho, MATAVA toda a semântica de risco: `.card{border:… !important}`
   vencia `.sintese.lvl-2`, `.alta`, `.ronda` e `.comp`, apagando as bordas
   coloridas que comunicam gravidade — inclusive as tentativas de contorno
   com `style=""` inline no app.html. Sem `!important`, elas voltam a valer. */
.card{
  background:var(--surface);
  border:1px solid var(--line);
  box-shadow:none;
}
.brand .n{color:var(--txt-1);}
.brand .s{color:var(--txt-3);}
.logout-btn, .account-btn{
  background:var(--surface); border:1px solid var(--line); color:var(--txt-1);
}
.ws-rail{ background:var(--surface); border:1px solid var(--line); }
.ws-rail-k{color:var(--txt-1);}
.ws-rail-sub{color:var(--txt-3);}
.flag{background:var(--raised); color:var(--txt-1); border-color:var(--line);}
.flag-iot{background:rgba(201,169,106,.14); color:var(--risk-1); border-color:rgba(201,169,106,.34);}
.flag-alg{background:rgba(214,106,92,.14); color:var(--risk-2-txt); border-color:rgba(214,106,92,.34);}
.flag-iso{background:rgba(201,160,255,.14); color:var(--iso-txt); border-color:rgba(201,160,255,.34);}
.handoff-box, .audit-list, .audit-row{ background:transparent; }
.brief{
  background:var(--surface);
  border:1px solid var(--line);
  box-shadow:none;
}
.metric, .brief-card{
  background:var(--raised);
  border:1px solid var(--line);
}
.ward-map{ background:var(--surface); border:1px solid var(--line); }
.ward-map .bed{ background:var(--raised); border:1px solid var(--line); }
.proto-panel{ background:var(--surface); border:1px solid var(--line); }
.impact{display:none;} /* economia modelada fora do prontuário limpo */
.cc-grid{gap:var(--s-3);}
.fila-dense{max-height:420px; gap:6px;}
.pend-zero{color:var(--txt-3); padding:18px; text-align:center;}

/* ============================================================================
   ESCOPO SEMPRE-ESCURO
   ----------------------------------------------------------------------------
   Algumas superfícies são escuras por construção, não por tema: a estação de
   login (que imita o monitor à beira do leito) e o viewport 3D da arcada (que
   é uma janela de renderização, como a tela do monitor). Sem redeclarar os
   tokens aqui, no modo claro elas ficavam com texto claro-sobre-claro — ou,
   pior, texto escuro sobre o próprio fundo escuro.
   ========================================================================== */
.login-bg, .od-stage-clean, .arcada-stage{
  color-scheme:dark;
  --bg:#161512;
  --surface:#201F1B;
  --raised:#292722;
  --txt-1:#F3EFE6;
  --txt-2:#B3AB99;
  --txt-3:#98917F;
  --line:rgba(243,239,230,.12);
  --line-strong:rgba(243,239,230,.22);
  --signal:#C9A96A;
  --signal-d:#B08D57;
  --on-signal:#221A0A;
  --risk-0:#6FB08A;
  --risk-1:#D89A45;
  --risk-0-txt:#6FB08A; --risk-1-txt:#D89A45; --risk-2:#B84A3E; --risk-2-txt:#E08A7E;
  --on-risk-0:#0E1712;
  --on-risk-1:#1A1408;
  --on-risk-2:#FFFFFF;
  --ok:#6FB08A;
  --iso:#8D7AA6; --iso-txt:#A18EBA;
  color:var(--txt-1);
}

/* menu de conta */
.account-wrap{position:relative; flex-shrink:0;}
.account-btn{
  display:inline-flex; align-items:center; gap:9px; cursor:pointer;
  padding:5px 12px 5px 5px; border-radius:999px; font-size:var(--t-sm);
  min-width:0; max-width:220px;
}
.account-avatar{
  width:32px; height:32px; border-radius:50%; flex-shrink:0;
  display:inline-flex; align-items:center; justify-content:center;
  background:rgba(201,169,106,.14); color:var(--signal-d);
  font-family:var(--mono); font-size:var(--t-sm); font-weight:600; letter-spacing:.02em;
}
.account-txt{display:flex; flex-direction:column; align-items:flex-start; min-width:0; line-height:1.15;}
.account-name{
  font-size:var(--t-sm); font-weight:600; color:var(--txt-1);
  max-width:140px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.account-role{
  font-size:var(--t-sm); color:var(--txt-3); max-width:140px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.account-caret{font-size:14px; color:var(--txt-3); margin-left:2px;}
.account-menu{
  position:absolute; right:0; top:calc(100% + 8px); z-index:40; width:280px;
  background:var(--surface); border:1px solid var(--line); border-radius:14px;
  padding:12px; box-shadow:0 16px 40px rgba(20,40,60,.12);
}
.account-menu[hidden]{display:none !important;}
.account-menu .am-name{font-weight:600; font-size:14px; color:var(--txt-1);}
.account-menu .am-meta{font-size:var(--t-sm); color:var(--txt-3); margin:3px 0 12px; line-height:1.45;}
.account-menu button{
  width:100%; justify-content:flex-start; margin-top:6px;
}
.account-menu .am-k{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em; color:var(--txt-3); margin-bottom:4px;
}

/* cockpit: prévia 3D da arcada */
.cock-3d{padding:0 !important; overflow:hidden;}
.cock-3d .od-viewbar{position:absolute; top:8px; left:8px; right:8px; z-index:2;}
.cock-3d-canvas{
  width:100%; height:min(38vh,340px); min-height:260px;
  overflow:hidden; touch-action:none; cursor:grab; position:relative; z-index:1;
}
.cock-3d .od-hud{bottom:8px;}
#cockOdSvg[hidden]{display:none !important;}

/* idle lock */
.idle-lock{
  position:fixed; inset:0; z-index:80; display:flex; align-items:center; justify-content:center;
  background:rgba(242,245,248,.88); backdrop-filter:blur(8px); padding:20px;
}
.idle-lock[hidden]{display:none !important;}
.idle-lock-box{
  width:min(420px,100%); background:var(--surface); border:1px solid var(--line); border-radius:18px;
  padding:28px 24px; text-align:center;
}
.idle-lock-box h2{margin:10px 0 6px; font-family:var(--disp); font-size:22px;}
.idle-lock-box p{margin:0 0 18px; color:var(--txt-3); font-size:13.5px; line-height:1.5;}
.idle-lock-box .btn-p{width:100%; justify-content:center;}

/* boletim CCIH: tipografia legível no tema claro */
.brief-money{color:var(--txt-1) !important;}
.brief-list b{color:var(--txt-1) !important;}
.metric-num{color:var(--txt-1);}
.metric--alert .metric-num{color:var(--risk-2-txt);}
.metric--warn .metric-num{color:var(--risk-1);}
.metric--ok .metric-num{color:var(--ok);}


/* ============================================================================
   ALVOS DE TOQUE · beira do leito, com luva
   ----------------------------------------------------------------------------
   Padrão em saúde é 44px; com luva de procedimento, 48px. Estes componentes
   estavam entre 29 e 34px — abaixo do mínimo justamente nos gestos mais
   repetidos do plantão (navegar, ditar, marcar dente, filtrar).
   ========================================================================== */
.nav button{ min-height:var(--toque); padding:var(--s-2) var(--s-4); font-size:var(--t-sm); }
.mode-rail button{ min-height:44px; padding:var(--s-2) var(--s-3); font-size:var(--t-sm); }
.chart-tabs button{ min-height:44px; font-size:var(--t-sm); }
.dit-btn{ min-width:44px; min-height:44px; }
.ws-rail-add, .foto-x, .voz-b, .login-eye, .dit-btn{ min-width:44px; min-height:44px; }
.tar-filtro{ min-height:44px; }
button.badge{ min-height:44px; display:inline-flex; align-items:center; }
.od-view, .od-chip{ min-height:44px; padding:var(--s-2) var(--s-3); font-size:var(--t-sm); }
.alert-chip{ min-height:44px; padding:var(--s-2) var(--s-3); font-size:var(--t-sm); }
.role-opt, .stepper .st{ min-height:44px; }

/* Confirmação tátil em <100ms. Existia em 2 de ~40 alvos; em tablet não há
   hover, então sem :active o componente parece inerte até o dado aparecer. */
.btn-p:active, .btn-g:active, .btn:active, .nav button:active,
.ronda-ok:active, .ronda-nao:active, .od-chip:active, .alert-chip:active,
.mode-rail button:active, .chart-tabs button:active{ transform:scale(.97); }

/* Elementos fixos respeitando a barra de gestos do iPhone. */
.toast{ bottom:calc(24px + env(safe-area-inset-bottom)); z-index:var(--z-toast); }
.voz-bar{ bottom:calc(22px + env(safe-area-inset-bottom)); z-index:var(--z-toast); }
.tip{ z-index:var(--z-tooltip); }   /* tooltip ACIMA do modal (antes ficava atrás) */
.modal-bg{ z-index:var(--z-modal); }
.account-menu{ z-index:var(--z-dropdown); }
.ws-rail{ max-height:calc(100dvh - 24px); }

/* ============================================================================
   FAIXA DE IDENTIFICAÇÃO DO PACIENTE · wizard OHAT
   ----------------------------------------------------------------------------
   Acompanha todos os passos. O paciente sumia da tela a partir do passo 2 e a
   avaliação era pontuada, a boca marcada e o registro salvo sem reconferência.
   ========================================================================== */
.wiz-banner{
  display:flex; align-items:center; gap:var(--s-3); flex-wrap:wrap;
  background:var(--surface); border:1px solid var(--line);
  border-left:5px solid var(--risco, var(--signal));
  border-radius:var(--r-md); padding:var(--s-3) var(--s-4); margin-bottom:var(--s-4);
  position:sticky; top:var(--s-2); z-index:var(--z-sticky);
}
.wiz-banner > i{ font-size:22px; color:var(--risco, var(--signal)); flex-shrink:0; }
.wiz-banner .wb-id{ display:flex; flex-direction:column; min-width:0; flex:1; }
.wiz-banner .wb-id b{ font-size:var(--t-md); color:var(--txt-1); line-height:1.3;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wiz-banner .wb-id span{ font-family:var(--num); font-size:var(--t-sm); color:var(--txt-3); }
.wiz-banner .wb-tag{
  display:inline-flex; align-items:center; gap:var(--s-1);
  font-size:var(--t-sm); padding:var(--s-1) var(--s-2); border-radius:var(--r-sm);
  background:rgba(201,169,106,.14); color:var(--risk-1); border:1px solid rgba(201,169,106,.32);
}
.wiz-banner .wb-tag.wb-alg{
  background:rgba(214,106,92,.14); color:var(--risk-2-txt); border-color:rgba(214,106,92,.32);
}
.wiz-banner .wb-risco{
  font-family:var(--num); font-size:var(--t-sm); font-weight:600; letter-spacing:.06em;
  text-transform:uppercase; padding:var(--s-1) var(--s-3); border-radius:var(--r-full);
  background:var(--risco); color:#1A1408; min-width:88px; text-align:center;
}
@media(max-width:560px){
  .wiz-banner{ padding:var(--s-2) var(--s-3); }
  .wiz-banner .wb-risco{ min-width:0; }
}

/* Número clínico em mono tabular: uma coluna de escores fica comparável
   sem leitura, como PA e SpO2 num monitor multiparâmetro. */
.metric-num, .score-big, .kpi-v, .c-ohat, .rail-ohat, .pill{
  font-family:var(--num); font-variant-numeric:tabular-nums lining-nums;
}

/* Seletor de tema no menu de conta. */
.tema-sel{ display:flex; gap:var(--s-1); margin:var(--s-2) 0 var(--s-3); }
.tema-sel button{
  flex:1; min-height:44px; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:2px; cursor:pointer;
  background:var(--raised); border:1px solid var(--line); color:var(--txt-2);
  border-radius:var(--r-sm); font-size:var(--t-sm); font-family:var(--body);
  transition:background .12s, color .12s, border-color .12s;
}
.tema-sel button i{ font-size:16px; }
.tema-sel button.on{ background:var(--signal); color:var(--on-signal); border-color:var(--signal); }
.tema-sel button:active{ transform:scale(.97); }

/* Últimos alvos abaixo do mínimo, encontrados por varredura automática a 375px.
   `linkish` e `sync-chip` são links de texto puro — ganham área de toque sem
   mudar a aparência, via padding. */
.linkish{ display:inline-flex; align-items:center; min-height:44px; padding:0 var(--s-2); }
.sync-chip{ min-height:44px; padding:var(--s-2) var(--s-3); }
.alert-more{ min-height:44px; padding:var(--s-2) var(--s-3); }
.od-view-reset{ min-width:44px; }
.brief-btn{ min-height:44px; }
.chart-tabs button, .mtoggle button{ min-height:44px; }
.audit-row a, .prosa-c a{ min-height:44px; display:inline-flex; align-items:center; }
.sintese-tabs button{ min-height:44px; }
.sync-chip{ min-width:44px; justify-content:center; }
/* Links de ação dentro de prosa: área de toque sem alterar a linha do texto. */
.prosa-c a, .sintese a, .card a[onclick]{
  display:inline-flex; align-items:center; min-height:44px;
}

/* ============================================================================
   CELULAR · o cromo não pode comer a tela
   ----------------------------------------------------------------------------
   Em 390×844 o cabeçalho empilhava em 5 faixas e consumia ~700px antes do
   primeiro dado clínico. Numa UTI, com uma mão, isso é inutilizável.
   ========================================================================== */
@media(max-width:700px){
  /* Contexto institucional não muda durante o plantão — sai da tela pequena.
     A unidade continua visível no cabeçalho e no card de cada paciente. */
  .ctx-line{ display:none; }

  .topbar{ gap:var(--s-2); padding:var(--s-2) 0; }
  .brand .s{ display:none; }
  .brand .n{ font-size:var(--t-base); }
  .brand-mark{ width:34px; height:34px; }

  /* Modo e papel numa faixa só, compactos. */
  .mode-rail{ flex:1 1 auto; }
  .mode-rail button{ flex:1; padding:var(--s-2) var(--s-1); font-size:var(--t-sm); }
  .role-chip{ display:none; }          /* o papel já aparece sob o nome no menu */
  .topbar-right{ gap:var(--s-2); flex-wrap:nowrap; }
  .account-name{ display:none; }       /* avatar basta; nome está no menu */
  .account-btn{ padding:var(--s-1); min-height:44px; }
  .live{ font-size:var(--t-sm); padding:var(--s-1) var(--s-2); }

  /* Alerta clínico: título, chip e ação em duas linhas limpas. */
  .alert-strip{ padding:var(--s-3); }
  .alert-strip-inner{ flex-wrap:wrap; gap:var(--s-2); row-gap:var(--s-2); }
  .alert-strip-inner > b{ flex:0 0 auto; }
  .alert-chip{ flex:1 1 auto; }

  /* Faixa do paciente: o NOME nunca pode truncar — é a salvaguarda contra
     registrar no paciente errado. Ele ocupa a linha inteira e as tags descem. */
  .wiz-banner{ gap:var(--s-2); }
  .wiz-banner .wb-id{ flex:1 1 100%; }
  .wiz-banner .wb-id b{ white-space:normal; font-size:var(--t-base); }
  .wiz-banner .wb-risco{ margin-left:auto; }

  .title{ font-size:var(--t-lg); }
  .subtitle{ font-size:var(--t-sm); }
}

/* A navegação rola horizontalmente em telas estreitas: sem uma pista visual
   de que há mais itens, "Boletim" e "Dados" simplesmente não são descobertos. */
@media(max-width:900px){
  .nav{
    -webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);
    mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);
    scrollbar-width:thin;
  }
  .nav::-webkit-scrollbar{ display:block; height:3px; }
  .nav::-webkit-scrollbar-thumb{ background:var(--line-strong); border-radius:2px; }
}

/* ============================================================================
   FICHA CLÍNICA · contexto que decide a conduta
   ========================================================================== */
.fch{max-width:960px;max-height:90dvh;overflow-y:auto}
.fch-topo{display:flex;align-items:flex-start;gap:var(--s-3);margin-bottom:var(--s-4)}
.fch-topo .foto-x{margin-left:auto}
.fch-quem{font-family:var(--num);font-size:var(--t-sm);color:var(--txt-3);margin-top:2px}
.fch-corpo{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4)}
@media(max-width:760px){.fch-corpo{grid-template-columns:1fr}}
.fch-col{display:flex;flex-direction:column;gap:var(--s-4)}
.fch-bloco{background:var(--raised);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s-3)}
.fch-h{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.12em;color:var(--signal);margin-bottom:var(--s-2)}
.fch-sub{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.1em;color:var(--txt-3);margin:var(--s-3) 0 var(--s-2)}
.fch-ops{display:flex;flex-wrap:wrap;gap:var(--s-1)}
.fch-op{min-height:44px;padding:var(--s-2) var(--s-3);border-radius:var(--r-sm);cursor:pointer;
  background:var(--surface);border:1px solid var(--line-strong);color:var(--txt-2);
  font-family:var(--body);font-size:var(--t-sm);transition:transform .12s var(--ease)}
.fch-op:active{transform:scale(.97)}
.fch-op.on{background:var(--signal);color:var(--on-signal);border-color:var(--signal);font-weight:600}
.fch-busca{position:relative}
.fch-sug{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:var(--z-dropdown);
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);
  padding:var(--s-2);max-height:320px;overflow-y:auto;box-shadow:0 18px 40px var(--sombra)}
.fch-sug > button{display:flex;align-items:baseline;gap:var(--s-2);width:100%;min-height:44px;
  padding:var(--s-2) var(--s-3);border:none;background:transparent;color:var(--txt-1);
  border-radius:var(--r-sm);cursor:pointer;text-align:left;font-family:var(--body);font-size:var(--t-base)}
.fch-sug > button:hover,.fch-sug > button:focus-visible{background:var(--raised)}
.fch-sug > button span{font-size:var(--t-sm);color:var(--txt-3);margin-left:auto}
.fch-livre{border-top:1px solid var(--line);margin-top:var(--s-2);padding-top:var(--s-2)}
.fch-livre > span{display:block;font-size:var(--t-sm);color:var(--txt-3);margin-bottom:var(--s-2)}
.fch-classe{min-height:36px;padding:var(--s-1) var(--s-2);margin:2px;border-radius:var(--r-sm);
  background:var(--raised);border:1px solid var(--line);color:var(--txt-2);
  font-size:var(--t-sm);cursor:pointer;font-family:var(--body)}
.fch-lista{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-3)}
.fch-med{display:inline-flex;align-items:center;gap:var(--s-2);padding:var(--s-2) var(--s-2) var(--s-2) var(--s-3);
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-sm);font-size:var(--t-sm)}
.fch-med b{color:var(--txt-1);font-weight:600}
.fch-med span{color:var(--txt-3)}
.fch-med button{min-width:32px;min-height:32px;display:grid;place-items:center;border:none;
  background:transparent;color:var(--txt-3);cursor:pointer;border-radius:var(--r-sm)}
.fch-med button:hover{color:var(--risk-2-txt);background:rgba(214,106,92,.12)}
.fch-vazio{font-size:var(--t-sm);color:var(--txt-3);font-style:italic}

/* painel "o que isso muda no cuidado" — a consequência aparece ao vivo,
   enquanto a pessoa preenche, para o preenchimento não parecer burocracia */
.fch-band-h{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.12em;
  color:var(--signal);margin:var(--s-5) 0 var(--s-2)}
.fch-bands{display:flex;flex-direction:column;gap:var(--s-2)}
.fch-band{display:flex;gap:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);
  background:var(--raised);border:1px solid var(--line);border-left:4px solid var(--txt-3)}
.fch-band i{font-size:20px;flex-shrink:0}
.fch-band b{display:block;font-size:var(--t-base)}
.fch-band span{display:block;font-size:var(--t-sm);color:var(--txt-2);margin-top:2px}
.fch-band em{display:block;font-family:var(--mono);font-size:var(--t-sm);color:var(--txt-3);
  font-style:normal;margin-top:var(--s-1)}
.fch-band.sev-critico{border-left-color:var(--risk-2-txt)} .fch-band.sev-critico i{color:var(--risk-2-txt)}
.fch-band.sev-atencao{border-left-color:var(--risk-1)} .fch-band.sev-atencao i{color:var(--risk-1)}
.fch-band.sev-info{border-left-color:var(--signal)}    .fch-band.sev-info i{color:var(--signal)}

/* instrução de técnica no card da ronda — quem executa lê isto no leito */
.ronda-instr{display:flex;flex-direction:column;gap:var(--s-1);margin-top:var(--s-2)}
.ronda-instr .ri{display:flex;gap:var(--s-2);align-items:flex-start;
  font-size:var(--t-sm);line-height:1.4;padding:var(--s-2);border-radius:var(--r-sm);
  background:var(--raised);border-left:3px solid var(--txt-3)}
.ronda-instr .ri i{font-size:15px;flex-shrink:0;margin-top:1px}
.ronda-instr .sev-critico{border-left-color:var(--risk-2-txt);color:var(--txt-1)}
.ronda-instr .sev-critico i{color:var(--risk-2-txt)}
.ronda-instr .sev-atencao{border-left-color:var(--risk-1);color:var(--txt-2)}
.ronda-instr .sev-atencao i{color:var(--risk-1)}
.ronda-instr .sev-info{border-left-color:var(--signal);color:var(--txt-2)}
.ronda-instr .sev-info i{color:var(--signal)}

/* modificador sugerido pela ficha (ainda não confirmado) */
.modtag.sugerido{border-style:dashed;border-color:var(--signal);color:var(--signal);
  background:rgba(201,169,106,.10)}
.modtag.sugerido i{font-size:14px;margin-right:4px}
.mods-sug{margin-top:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);
  background:rgba(201,169,106,.08);border:1px solid rgba(201,169,106,.30);
  font-size:var(--t-sm);color:var(--txt-2);line-height:1.5}
.mods-sug b{color:var(--txt-1)}

/* alerta de conduta desaconselhada pela ficha */
.wiz-alerta{display:flex;flex-direction:column;gap:var(--s-2);margin-top:var(--s-3)}
.wiz-alerta .wa{display:flex;gap:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);
  background:rgba(214,106,92,.10);border:1px solid rgba(214,106,92,.42)}
.wiz-alerta .wa i{font-size:20px;color:var(--risk-2-txt);flex-shrink:0}
.wiz-alerta .wa b{color:var(--risk-2-txt)}
.wiz-alerta .wa span{display:block;font-size:var(--t-sm);color:var(--txt-2);margin-top:2px}
.flag-band.sev-critico{background:rgba(214,106,92,.14);color:var(--risk-2-txt);border-color:rgba(214,106,92,.38)}
.flag-band.sev-atencao{background:rgba(201,169,106,.14);color:var(--risk-1);border-color:rgba(201,169,106,.38)}
.flag-band.sev-info{background:rgba(201,169,106,.12);color:var(--signal);border-color:rgba(201,169,106,.34)}
.flag-editar{cursor:pointer;min-height:44px;background:var(--raised);color:var(--txt-1);
  border:1px dashed var(--line-strong);font-family:var(--body)}
.flag-editar:active{transform:scale(.97)}
/* Marcar clorexidina era um <div onclick> de 22px: pequeno demais com luva e
   invisível para o teclado. Vira alvo de 48px com papel de checkbox. */
.clx-toggle{
  display:flex; align-items:center; gap:var(--s-3);
  margin-top:var(--s-3); min-height:var(--toque);
  padding:var(--s-2) var(--s-3); border-radius:var(--r-md);
  background:var(--raised); border:1px solid var(--line);
  font-size:var(--t-base); cursor:pointer;
}
.clx-toggle:active{transform:scale(.99)}

/* ============================================================================
   MATRIZ DE PLANTÃO · leito × turno
   ----------------------------------------------------------------------------
   Densidade é o ponto: a grade só entrega valor se a unidade inteira couber
   num relance. Por isso célula pequena e trilho de estado à esquerda — o olho
   desce a borda e lê 20 leitos sem ler texto.
   ========================================================================== */
.mtz-resumo{text-align:right; max-width:34ch; margin-left:auto; line-height:1.35}
.mtz-resumo b{display:block;font-family:var(--num-disp);font-size:var(--t-xl);
  font-weight:600;color:var(--risk-1);line-height:1}
.mtz-resumo span{display:block;font-family:var(--num);font-size:var(--t-sm);color:var(--txt-3)}

.mtz-barra{display:flex;align-items:center;gap:var(--s-4);flex-wrap:wrap;margin:var(--s-4) 0 var(--s-3)}
.mtz-periodo{display:flex;gap:var(--s-1)}
.mtz-periodo button{min-height:44px;padding:var(--s-2) var(--s-3);cursor:pointer;
  background:var(--raised);border:1px solid var(--line);color:var(--txt-2);
  border-radius:var(--r-sm);font-family:var(--num);font-size:var(--t-sm)}
.mtz-periodo button.on{background:var(--signal);color:var(--on-signal);border-color:var(--signal)}
.mtz-periodo button:active{transform:scale(.97)}
.mtz-legenda{display:flex;gap:var(--s-4);flex-wrap:wrap;margin-left:auto}
.mtz-legenda span{display:flex;align-items:center;gap:var(--s-2);
  font-family:var(--num);font-size:var(--t-sm);color:var(--txt-3)}

.mtz-rolagem{overflow-x:auto}
.mtz{border-collapse:collapse;width:100%;min-width:760px}
.mtz th,.mtz td{padding:0;text-align:center}
.mtz thead th{font-family:var(--num);font-size:var(--t-sm);font-weight:500;color:var(--txt-3);
  letter-spacing:.06em;padding:var(--s-2) 0;border-bottom:1px solid var(--line)}
.mtz-dia{border-left:1px solid var(--line)}
.mtz-th-turnos th{font-weight:400;padding-bottom:var(--s-2)}
.mtz-t.ini{border-left:1px solid var(--line)}
.mtz-leito-h{text-align:left!important;padding-left:var(--s-4)!important;letter-spacing:.1em}

.mtz-l{border-top:1px solid var(--line)}
.mtz-l:hover,.mtz-l2:hover{background:var(--raised)}
.mtz-leito{text-align:left;vertical-align:top;width:250px;position:relative}
.mtz-abrir{display:block;width:100%;max-width:250px;text-align:left;background:transparent;border:none;
  cursor:pointer;padding:var(--s-3) var(--s-3) var(--s-3) var(--s-4);position:relative;
  font-family:var(--body);color:inherit;min-height:var(--toque)}
.mtz-abrir:active{transform:scale(.995)}
.mtz-abrir:focus-visible{outline:2px solid var(--signal);outline-offset:-2px}
/* trilho: a ESPESSURA muda com o risco, então sobrevive à impressão P&B
   e à acromatopsia — cor sozinha nunca carrega a informação */
.mtz-leito .trilho{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--risk-0)}
.r1 .mtz-leito .trilho{background:var(--risk-1);
  background-image:repeating-linear-gradient(180deg,transparent 0 3px,var(--hachura) 3px 6px)}
.r2 .mtz-leito .trilho{width:5px;background:var(--risk-2)}
.mtz-id{display:block;font-family:var(--num);font-size:var(--t-base);font-weight:600;color:var(--txt-1)}
.mtz-nome{display:block;font-size:var(--t-sm);color:var(--txt-2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.mtz-marcas{display:flex;align-items:center;gap:var(--s-1);margin-top:5px;flex-wrap:wrap}
.mtz-tag{font-family:var(--num);font-size:var(--t-sm);font-weight:600;letter-spacing:.06em;
  padding:1px 6px;border-radius:4px;border:1px solid}
.mtz-tag.vm{color:var(--risk-1);border-color:rgba(201,169,106,.4);background:rgba(201,169,106,.12)}
.mtz-tag.iso{color:var(--iso-txt);border-color:rgba(201,160,255,.4);background:rgba(201,160,255,.12)}
.mtz-tag.crit{color:var(--risk-2-txt);border-color:rgba(214,106,92,.45);background:rgba(214,106,92,.14);
  display:inline-flex;align-items:center;gap:3px}
.mtz-risco{margin-left:var(--s-1);font-family:var(--num);font-size:var(--t-sm);font-weight:600;
  letter-spacing:.06em;padding:2px 8px;border-radius:var(--r-full)}
.r0 .mtz-risco{background:var(--risk-0);color:var(--on-risk-0)}
.r1 .mtz-risco{background:var(--risk-1);color:var(--on-risk-1)}
.r2 .mtz-risco{background:var(--risk-2);color:var(--on-risk-2)}

.mtz-c{width:30px;height:38px;position:relative;vertical-align:middle}
.mtz-c.ini{border-left:1px solid var(--line)}
/* coluna do turno corrente: a borda viva diz onde é "agora" */
.mtz-c.agora{background:linear-gradient(180deg,rgba(201,169,106,.12),transparent)}
.mtz-c.agora::before{content:'';position:absolute;left:0;right:0;top:0;height:2px;background:var(--signal)}

.mk{width:14px;height:14px;border-radius:50%;display:inline-block;position:relative}
.mk-feita{background:var(--ok)}
.mk-clx{background:var(--ok)}
.mk-clx::after{content:'';position:absolute;inset:4px;border-radius:50%;background:var(--bg)}
.mk-falhou{background:transparent;border:2px solid var(--risk-2)}
.mk-falhou::after{content:'';position:absolute;left:2px;right:2px;top:5px;height:2px;background:var(--risk-2)}
.mk-semreg{width:5px;height:5px;background:var(--txt-3);opacity:.5}
.mk-corrente{width:7px;height:7px;background:var(--signal)}
.mk-futuro{width:5px;height:5px;background:transparent;border:1px solid var(--line-strong)}
.mk-antes{width:12px;height:1px;border-radius:0;background:var(--line-strong)}

.mtz-l2{border:none}
.mtz-l2 td{height:20px;padding-bottom:var(--s-2)}
.mtz-ohat-c{border-left:1px solid var(--line)}
.mtz-ohat{font-family:var(--num);font-size:var(--t-sm);font-weight:600;color:var(--txt-2);
  background:var(--raised);border:1px solid var(--line-strong);border-radius:4px;padding:1px 5px;white-space:nowrap}
.mtz-ohat.subiu{color:var(--risk-2-txt);border-color:rgba(214,106,92,.5)}
.mtz-ohat.caiu{color:var(--risk-0);border-color:rgba(95,211,232,.5)}

/* glifo da boca: 32 posições FDI na topografia real */
.mtz-glifo{display:inline-grid;grid-template-columns:repeat(16,5px);gap:1px;margin-top:var(--s-2);
  padding:3px;background:var(--baixo-2);border-radius:4px;border:1px solid var(--line)}
.mtz-glifo i{height:8px;border-radius:1px;display:block;background:var(--baixo-2)}
.mtz-glifo i.g1{background:var(--risk-2)}                    /* cárie */
.mtz-glifo i.g2{background:var(--signal)}                    /* restaurado */
.mtz-glifo i.g3{background:var(--risk-1)}                    /* mobilidade */
.mtz-glifo i.g4{background:var(--risk-2);box-shadow:inset 0 0 0 1px var(--txt-1)}  /* resto radicular */
.mtz-glifo i.g5{background:transparent;box-shadow:inset 0 0 0 1px rgba(196,184,163,.20)} /* ausente */
.mtz-glifo i.g6{background:var(--txt-2)}                     /* prótese */

.mtz-nota{font-size:var(--t-sm);color:var(--txt-3);margin-top:var(--s-3);max-width:70ch}
@media(max-width:700px){
  .mtz-legenda{margin-left:0;gap:var(--s-3)}
  .mtz-leito{min-width:180px}
  .mtz-nome{max-width:150px}
}

/* ============================================================================
   BUNDLE DE PAV · componente bucal (boletim da CCIH)
   ========================================================================== */
.pav-bloco{margin-bottom:var(--s-5)}
.pav-grade{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--s-3);margin-bottom:var(--s-3)}
.pav-cel{background:var(--raised);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s-3)}
.pav-k{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.1em;color:var(--txt-3)}
.pav-v{font-family:var(--num);font-size:var(--t-xl);font-weight:600;line-height:1.15;margin:var(--s-1) 0}
.pav-s{font-size:var(--t-sm);color:var(--txt-3);line-height:1.4}
.pav-entrada{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;
  background:var(--raised);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s-3)}
.pav-entrada label{font-size:var(--t-sm);color:var(--txt-2);flex:1 1 240px}
.pav-entrada input{width:110px;flex:none;text-align:center;font-family:var(--num)}
.pav-periodo{display:flex;gap:var(--s-1)}
.pav-periodo button{min-height:44px;min-width:48px;cursor:pointer;background:var(--surface);
  border:1px solid var(--line-strong);color:var(--txt-2);border-radius:var(--r-sm);
  font-family:var(--num);font-size:var(--t-sm)}
.pav-periodo button.on{background:var(--signal);color:var(--on-signal);border-color:var(--signal)}
.pav-periodo button:active{transform:scale(.97)}
.pav-nota{display:flex;gap:var(--s-2);margin-top:var(--s-3);font-size:var(--t-sm);
  color:var(--txt-3);line-height:1.5;max-width:78ch}
.pav-nota i{color:var(--signal);flex-shrink:0;margin-top:2px}
.pav-nota b{color:var(--txt-2)}

/* ============================================================================
   BARRA INFERIOR · zona do polegar
   ========================================================================== */
.tab-bar{display:none}
@media(max-width:900px){
  .tab-bar{
    display:flex; position:fixed; left:0; right:0; bottom:0; z-index:var(--z-sticky);
    background:var(--surface); border-top:1px solid var(--line-strong);
    padding-bottom:env(safe-area-inset-bottom);
  }
  .tab-bar .tb{
    flex:1; min-width:0; min-height:56px; display:flex; flex-direction:column;
    align-items:center; justify-content:center; gap:2px; cursor:pointer;
    background:transparent; border:none; color:var(--txt-3);
    font-family:var(--body); font-size:11px; padding:var(--s-2) 2px;
  }
  .tab-bar .tb i{font-size:21px}
  .tab-bar .tb span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
  .tab-bar .tb.on{color:var(--signal)}
  .tab-bar .tb.on i{transform:translateY(-1px)}
  .tab-bar .tb:active{transform:scale(.95)}
  /* o topo perde a lista de telas: ela mora embaixo, ao alcance do polegar */
  .nav{display:none}
  /* espaço para a barra não cobrir o fim do conteúdo */
  body{padding-bottom:calc(56px + env(safe-area-inset-bottom))}
  .toast{bottom:calc(70px + env(safe-area-inset-bottom))}
  .voz-bar{bottom:calc(68px + env(safe-area-inset-bottom))}
}
.mais-bg{display:none;position:fixed;inset:0;z-index:var(--z-modal);
  background:rgba(0,0,0,.62);align-items:flex-end;justify-content:center}
.mais-bg.show{display:flex}
.mais{width:100%;max-width:520px;background:var(--surface);
  border:1px solid var(--line-strong);border-radius:var(--r-lg) var(--r-lg) 0 0;
  padding:var(--s-4);padding-bottom:calc(var(--s-4) + env(safe-area-inset-bottom));
  display:flex;flex-direction:column;gap:var(--s-1)}
.mais-h{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.12em;
  color:var(--txt-3);margin-bottom:var(--s-2)}
.mais button{display:flex;align-items:center;gap:var(--s-3);min-height:var(--toque);
  padding:var(--s-2) var(--s-3);border-radius:var(--r-md);cursor:pointer;
  background:transparent;border:none;color:var(--txt-1);
  font-family:var(--body);font-size:var(--t-base);text-align:left}
.mais button i{font-size:20px;color:var(--signal)}
.mais button:active{background:var(--raised)}
.mais .mais-x{justify-content:center;margin-top:var(--s-2);
  background:var(--raised);color:var(--txt-2);border:1px solid var(--line)}

/* ============================================================================
   RETORNO DA ENFERMAGEM · painel no card do leito
   ========================================================================== */
.ret-painel{margin-top:var(--s-3);padding-top:var(--s-3);border-top:1px solid var(--line);
  display:flex;flex-direction:column;gap:var(--s-2)}
.ret-h{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.1em;color:var(--txt-3)}
.ret-ops{display:flex;flex-wrap:wrap;gap:var(--s-1)}
.ret-op{display:inline-flex;align-items:center;gap:var(--s-1);min-height:44px;
  padding:var(--s-2) var(--s-3);border-radius:var(--r-sm);cursor:pointer;
  background:var(--surface);border:1px solid var(--line-strong);color:var(--txt-2);
  font-family:var(--body);font-size:var(--t-sm);transition:transform .12s var(--ease)}
.ret-op i{font-size:15px}
.ret-op:active{transform:scale(.97)}
.ret-op.on{background:var(--signal);color:var(--on-signal);border-color:var(--signal);font-weight:600}
/* motivo de processo (falta de material, sobrecarga) fica visualmente distinto
   do clínico: são problemas de natureza diferente e ações diferentes */
.ret-op.proc.on{background:var(--risk-1);color:var(--on-risk-1);border-color:var(--risk-1)}
.ret-aviso{display:flex;gap:var(--s-2);align-items:flex-start;font-size:var(--t-sm);
  color:var(--risk-1);background:rgba(201,169,106,.10);border:1px solid rgba(201,169,106,.32);
  border-radius:var(--r-sm);padding:var(--s-2) var(--s-3);line-height:1.4}
.ret-aviso.ok{color:var(--ok);background:rgba(95,211,160,.10);border-color:rgba(95,211,160,.32)}
.ret-aviso i{flex-shrink:0;margin-top:1px}
.ret-obs{width:100%}
.ret-chamar{display:flex;align-items:center;justify-content:center;gap:var(--s-2);
  min-height:var(--toque);border-radius:var(--r-md);cursor:pointer;
  background:var(--raised);border:1px dashed var(--line-strong);color:var(--txt-2);
  font-family:var(--body);font-size:var(--t-base)}
.ret-chamar.on{background:rgba(214,106,92,.14);border:1px solid var(--risk-2);color:var(--risk-2-txt);font-weight:600}
.ret-chamar:active{transform:scale(.98)}
.ret-acoes{display:flex;gap:var(--s-2)}
.ret-acoes button{flex:1}

/* ============================================================================
   RESUMO DIÁRIO
   ========================================================================== */
.res-nota{font-size:var(--t-sm);color:var(--txt-3);margin-bottom:var(--s-3);line-height:1.5}
.res-nota b{color:var(--txt-2)}
.res-txt{white-space:pre-wrap;font-family:var(--mono);font-size:var(--t-sm);line-height:1.65;
  color:var(--txt-1);background:var(--raised);border:1px solid var(--line);
  border-radius:var(--r-md);padding:var(--s-4);margin:0;max-height:52dvh;overflow-y:auto}
.flag-resumo{cursor:pointer;min-height:44px;background:rgba(201,169,106,.12);
  color:var(--signal);border:1px solid rgba(201,169,106,.34);font-family:var(--body)}
.flag-resumo:active{transform:scale(.97)}
@media print{
  .res-txt{max-height:none;border:none;background:#fff;color:#111}
}
.ronda-add{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-1);
  min-height:44px;padding:var(--s-2) var(--s-3);border-radius:var(--r-md);cursor:pointer;
  background:transparent;border:1px dashed var(--line-strong);color:var(--txt-3);
  font-family:var(--body);font-size:var(--t-sm)}
.ronda-add:active{transform:scale(.97)}
.ronda-achado{display:flex;align-items:center;gap:var(--s-2);margin-top:var(--s-2);
  padding:var(--s-2) var(--s-3);border-radius:var(--r-sm);font-size:var(--t-sm);
  background:rgba(201,169,106,.12);border:1px solid rgba(201,169,106,.34);color:var(--risk-1)}

/* quebra da adesão: ranking dos motivos de não-realização */
.qb-lista{display:flex;flex-direction:column;gap:var(--s-1);margin-top:var(--s-2)}
.qb-linha{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-3);
  background:var(--raised);border:1px solid var(--line);border-radius:var(--r-sm)}
.qb-tag{font-family:var(--mono);font-size:var(--t-sm);letter-spacing:.06em;
  padding:1px 7px;border-radius:4px;flex-shrink:0;min-width:74px;text-align:center}
.qb-tag.cl{background:rgba(95,211,232,.14);color:var(--risk-0);border:1px solid rgba(95,211,232,.34)}
.qb-tag.pr{background:rgba(201,169,106,.14);color:var(--risk-1);border:1px solid rgba(201,169,106,.34)}
.qb-rot{font-size:var(--t-sm);color:var(--txt-1);flex:1 1 150px;min-width:0}
.qb-barra{flex:2 1 100px;height:6px;background:var(--line);border-radius:3px;overflow:hidden;min-width:60px}
.qb-barra i{display:block;height:100%;background:var(--txt-3);border-radius:3px}
.qb-linha:has(.qb-tag.pr) .qb-barra i{background:var(--risk-1)}
.qb-linha:has(.qb-tag.cl) .qb-barra i{background:var(--risk-0)}
.qb-n{font-family:var(--num);font-size:var(--t-base);font-weight:600;color:var(--txt-1);
  min-width:28px;text-align:right}
@media(max-width:560px){.qb-barra{display:none}}
.qb-tag.nd{background:var(--raised);color:var(--txt-3);border:1px dashed var(--line-strong)}
.qb-linha.sd .qb-barra i{background:var(--txt-3);opacity:.5}

/* parâmetros da instituição (modelo de impacto) */
.mod-int{font-size:var(--t-sm);color:var(--txt-3);line-height:1.6;margin-bottom:var(--s-3);max-width:74ch}
.mod-int b{color:var(--txt-2)}
.mod-grade{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-3)}
@media(max-width:700px){.mod-grade{grid-template-columns:1fr}}
.mod-un{font-size:var(--t-sm);color:var(--txt-3);margin-top:var(--s-1);line-height:1.4}

/* ============================================================================
   IMPACTO ESTIMADO · faixa, cadeia e procedência
   ========================================================================== */
.imp-vazio{display:flex;gap:var(--s-3);align-items:flex-start;font-size:var(--t-sm);
  color:var(--txt-3);line-height:1.6;background:var(--raised);border:1px dashed var(--line-strong);
  border-radius:var(--r-md);padding:var(--s-4)}
.imp-vazio i{font-size:22px;color:var(--txt-3);flex-shrink:0}
.imp-vazio b{color:var(--txt-1)}
.imp-faixa{display:flex;align-items:baseline;gap:var(--s-2);flex-wrap:wrap;margin:var(--s-2) 0 0}
.imp-faixa b{font-family:var(--num);font-size:var(--t-xl);font-weight:600;color:var(--txt-1);line-height:1.1}
.imp-faixa span{font-size:var(--t-sm);color:var(--txt-3)}
.imp-central{font-family:var(--num);font-size:var(--t-sm);color:var(--txt-3);margin:var(--s-1) 0 var(--s-3)}
.imp-cadeia{display:flex;flex-direction:column;gap:1px;background:var(--line);
  border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.imp-cadeia div{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-3);
  background:var(--surface);padding:var(--s-2) var(--s-3)}
.imp-cadeia span{font-size:var(--t-sm);color:var(--txt-3)}
.imp-cadeia b{font-family:var(--num);font-size:var(--t-sm);color:var(--txt-1)}
.imp-fonte{font-size:var(--t-sm);color:var(--txt-3);line-height:1.55;margin-top:var(--s-3)}

/* atalho para a ficha no passo 1 do wizard */
.wctx-ficha{margin-bottom:var(--s-3)}
.wctx-ficha button{display:inline-flex;align-items:center;gap:var(--s-2);min-height:var(--toque);
  padding:var(--s-2) var(--s-3);border-radius:var(--r-md);cursor:pointer;
  background:rgba(201,169,106,.12);border:1px solid rgba(201,169,106,.34);color:var(--signal);
  font-family:var(--body);font-size:var(--t-sm)}
.wctx-ficha button:active{transform:scale(.98)}
/* leito sem ficha preenchida */
.rail-semficha{display:inline-flex;align-items:center;color:var(--txt-3);margin-left:var(--s-1)}
.rail-semficha i{font-size:14px}

/* ============================================================================
   ADMISSÃO EM CELULAR · tabela vira cartão
   ----------------------------------------------------------------------------
   A linha era um grid de 6 colunas fixas somando 430px de mínimo, forçado num
   contêiner de 560px com rolagem horizontal. Em 390px o resultado era ilegível:
   o cabeçalho cortava em "RISCO", o nome do paciente quebrava em cinco linhas e
   o botão de desfecho ficava para fora da borda. Tabela não sobrevive a celular
   — vira cartão empilhado, e o cabeçalho de coluna deixa de fazer sentido.
   ========================================================================== */
@media(max-width:760px){
  #epList{ min-width:0; }
  #episodios .card{ overflow-x:visible; }
  .ep-row.ep-head{ display:none; }
  .ep-row{
    display:flex; flex-wrap:wrap; align-items:center;
    gap:var(--s-2); padding:var(--s-3) var(--s-4);
  }
  .ep-row > span:nth-child(1){ flex:1 1 100%; }          /* paciente + prontuário */
  .ep-row > span:nth-child(2){ flex:1 1 100%; color:var(--txt-2); }  /* unidade · leito */
  .ep-row > span:nth-child(3){ flex:0 1 auto; }          /* flags */
  .ep-row > span:nth-child(4){ flex:0 0 auto; font-family:var(--num); }  /* OHAT */
  .ep-row > span:nth-child(5){ flex:0 0 auto; margin-left:auto; }        /* risco */
  .ep-row > span:nth-child(6){ flex:1 1 100%; }          /* ação */
  .ep-row > span:nth-child(6) button,
  .ep-row > span:nth-child(6) > *{ width:100%; justify-content:center; }
  /* separação de cartão em vez de linha de tabela */
  .ep-row{ border-bottom:8px solid var(--bg); background:var(--surface); border-radius:var(--r-md); }
  #epList{ display:flex; flex-direction:column; gap:var(--s-2); padding:var(--s-2); }
  .ep-row:last-child{ border-bottom:none; }
}

/* foto dentro do fluxo de conduta (wizard e Evoluir) */
.wiz-foto{display:flex;flex-wrap:wrap;gap:var(--s-2);align-items:center;margin-top:var(--s-3)}
.wiz-foto button{display:inline-flex;align-items:center;gap:var(--s-2);min-height:var(--toque);
  padding:var(--s-2) var(--s-4);border-radius:var(--r-md);cursor:pointer;
  background:var(--raised);border:1px solid var(--line-strong);color:var(--txt-1);
  font-family:var(--body);font-size:var(--t-sm)}
.wiz-foto button:active{transform:scale(.97)}
.wiz-foto-tira{display:flex;flex-wrap:wrap;gap:var(--s-1);align-items:center}
.wiz-foto-tira .wf{display:inline-flex;align-items:center;gap:4px;font-size:var(--t-sm);
  color:var(--txt-2);background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:2px var(--s-2)}
.wiz-foto-tira .wf-n{font-family:var(--num);font-size:var(--t-sm);color:var(--txt-3)}

/* A barra de vistas do 3D quebrava em duas linhas e ficava POR CIMA do modelo
   quando o card era estreito. Rola na horizontal em vez de empilhar. */
.od-viewbar{ flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; }
.od-viewbar::-webkit-scrollbar{ display:none; }
.od-view{ flex:0 0 auto; }
@media(max-width:900px){ .od-view{ padding:var(--s-2); font-size:var(--t-sm); } }

/* ============================================================================
   SUB-ABAS · o segundo nível da navegação
   ----------------------------------------------------------------------------
   Existe para que reduzir o topo a cinco destinos não deixe nenhuma tela
   inalcançável: o que saiu da barra principal vira sub-aba do destino a que
   pertence, em vez de sumir.
   ========================================================================== */
.subnav{display:flex;gap:var(--s-1);flex-wrap:wrap;margin-bottom:var(--s-4);
  padding:var(--s-1);background:var(--raised);border:1px solid var(--line);
  border-radius:var(--r-md)}
.subnav button{flex:1 1 auto;min-height:44px;padding:var(--s-2) var(--s-4);cursor:pointer;
  background:transparent;border:none;border-radius:var(--r-sm);color:var(--txt-2);
  font-family:var(--body);font-size:var(--t-sm);white-space:nowrap;
  transition:background .12s,color .12s}
.subnav button[aria-selected="true"]{background:var(--signal);color:var(--on-signal);font-weight:600}
.subnav button:active{transform:scale(.98)}
@media(max-width:560px){.subnav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .subnav::-webkit-scrollbar{display:none}.subnav button{flex:0 0 auto}}

/* atalho do passo 3 para o mapa completo */
.wiz-mapa{display:flex;align-items:center;justify-content:center;gap:var(--s-2);
  width:100%;min-height:var(--toque);margin-top:var(--s-3);cursor:pointer;
  background:var(--raised);border:1px dashed var(--line-strong);color:var(--txt-2);
  border-radius:var(--r-md);font-family:var(--body);font-size:var(--t-sm)}
.wiz-mapa:active{transform:scale(.98)}
/* faixa de retorno ao atendimento em curso */
.od-voltar{display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;
  padding:var(--s-3) var(--s-4);margin-bottom:var(--s-4);border-radius:var(--r-md);
  background:rgba(201,169,106,.10);border:1px solid rgba(201,169,106,.34);
  font-size:var(--t-sm);color:var(--txt-2)}
.od-voltar i{font-size:20px;color:var(--signal)}
.od-voltar button{margin-left:auto;min-height:44px;padding:var(--s-2) var(--s-4);
  border-radius:var(--r-md);cursor:pointer;background:var(--signal);color:var(--on-signal);
  border:none;font-family:var(--body);font-size:var(--t-sm);font-weight:600}
.od-voltar button:active{transform:scale(.97)}

/* ============================================================================
   LEITURA DA PULSEIRA
   ========================================================================== */
.puls-barra{display:flex;gap:var(--s-2);margin-bottom:var(--s-3)}
.puls-barra input{flex:1}
.puls-barra button{flex:0 0 auto;white-space:nowrap}
.puls-cam{position:relative;margin-bottom:var(--s-3);border-radius:var(--r-md);
  overflow:hidden;background:#000;aspect-ratio:16/10}
.puls-cam video{width:100%;height:100%;object-fit:cover;display:block}
.puls-cam button{position:absolute;top:var(--s-2);right:var(--s-2);min-width:44px;min-height:44px;
  border-radius:50%;border:none;cursor:pointer;background:rgba(0,0,0,.6);color:#fff}
.puls-dica{position:absolute;left:0;right:0;bottom:0;padding:var(--s-2);text-align:center;
  font-family:var(--mono);font-size:var(--t-sm);color:#fff;background:rgba(0,0,0,.55)}
/* conferência: o passo que impede o código lido virar paciente errado */
.puls-conf{background:var(--raised);border:1px solid rgba(201,169,106,.34);
  border-radius:var(--r-md);padding:var(--s-3);margin-bottom:var(--s-3)}
.pc-h{display:flex;align-items:center;gap:var(--s-2);font-family:var(--mono);
  font-size:var(--t-sm);letter-spacing:.1em;color:var(--signal);margin-bottom:var(--s-2)}
.pc-aviso{font-size:var(--t-sm);color:var(--risk-1);line-height:1.5;margin-bottom:var(--s-2)}
.pc-campos{display:flex;flex-direction:column;gap:var(--s-1);margin-bottom:var(--s-3)}
.pc-campos div{display:flex;justify-content:space-between;gap:var(--s-3);
  padding:var(--s-2) var(--s-3);background:var(--surface);border-radius:var(--r-sm)}
.pc-campos span{font-size:var(--t-sm);color:var(--txt-3)}
.pc-campos b{font-size:var(--t-sm);color:var(--txt-1);text-align:right}
.pc-cru{font-family:var(--mono);color:var(--txt-3)!important}
.pc-acoes{display:flex;gap:var(--s-2)}
.pc-acoes button{flex:1}

/* Janela do indicador ao lado do título do bloco: adesão sem período
   declarado não é indicador — é um número solto indo para a comissão. */
.bb-jan{
  margin-left:10px; font-family:var(--mono); font-size:var(--t-sm);
  letter-spacing:.12em; text-transform:uppercase; color:var(--txt-3);
  font-weight:400;
}

/* Botão de destaque no cabeçalho do boletim: a auditoria é o documento que a
   comissão pede, e estava escondida atrás do mesmo peso visual do resumo. */
.brief-btn.destaque{
  background:var(--signal); color:var(--on-signal); border-color:var(--signal);
  font-weight:500;
}
.brief-btn.destaque:hover{filter:brightness(1.08);}

/* ============================================================
   REVISÃO DENTE A DENTE
   ------------------------------------------------------------
   Um dente por vez, com a lista curta. O alvo é o polegar de
   quem está em pé ao lado do leito, com luva — por isso os
   chips têm 44px de altura mínima e nada aqui depende de hover.
   ============================================================ */
/* —— do achado ao plano: prioridade da conduta na barra de seleção ——
   Três pílulas com o semáforo do sistema; a escolha gera as tarefas do
   plano de cuidado com prazo clínico. "Sem plano" é o padrão — nada
   nasce sem gesto explícito. */
.od-plano{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:10px;
  padding:10px 12px; border-radius:var(--r-md);
  background:var(--baixo); border:1px solid var(--line);
}
.od-plano[hidden]{display:none;}
.od-plano-rot{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em;
  color:var(--txt-2); display:inline-flex; align-items:center; gap:7px;
}
.od-plano-rot i{color:var(--signal);}
.od-plano-ops{display:flex; gap:6px; flex-wrap:wrap;}
.od-plano-op{
  font-family:var(--body); font-size:var(--t-sm); font-weight:600; cursor:pointer;
  min-height:44px; padding:8px 14px; border-radius:var(--r-full);
  background:var(--surface); border:1px solid var(--line-strong); color:var(--txt-2);
  transition:.15s var(--ease);
}
.od-plano-op[aria-pressed="true"]{background:var(--txt-1); color:var(--bg); border-color:transparent;}
.od-plano-op.p-crit[aria-pressed="true"]{background:var(--risk-2); color:var(--on-risk-2);}
.od-plano-op.p-aten[aria-pressed="true"]{background:var(--risk-1); color:var(--on-risk-1);}
.od-plano-op.p-rot[aria-pressed="true"]{background:var(--ok); color:var(--on-risk-0);}

/* snapshots automáticos da base — a rede de segurança do aparelho */
.data-snaps{margin-top:12px; border-top:1px solid var(--line); padding-top:10px;}
.data-snaps .snap-h{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.1em;
  color:var(--txt-3); margin-bottom:8px;
}
.data-snaps .snap-lista{display:flex; gap:8px; flex-wrap:wrap;}
.data-snaps .snap-item{
  display:inline-flex; align-items:center; gap:6px;
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-2);
  background:var(--baixo); border:1px solid var(--line); border-radius:var(--r-full);
  padding:5px 6px 5px 12px;
}
.data-snaps .snap-item .linkish{min-height:34px; padding:0 10px;}

/* virada de turno → a passagem se oferece (mesma família do convite verde) */
.virada-turno{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin-bottom:14px; padding:12px 14px; border-radius:var(--r-md);
  background:var(--amber-t); border:1px solid var(--line-strong);
  font-size:var(--t-sm); color:var(--txt-1);
}
.virada-turno[hidden]{display:none;}
.virada-turno > i{color:var(--signal); font-size:19px;}
.virada-turno span{flex:1; min-width:220px;}
.virada-turno .btn-p, .virada-turno .btn-g{min-height:44px; padding:9px 16px; font-size:var(--t-sm);}

/* plano criado → convite ao rascunho da evolução */
.od-plano-feito{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin-top:10px; padding:12px 14px; border-radius:var(--r-md);
  background:rgba(111,176,138,.1); border:1px solid rgba(111,176,138,.32);
  font-size:var(--t-sm); color:var(--txt-1);
}
.od-plano-feito[hidden]{display:none;}
.od-plano-feito > i{color:var(--ok); font-size:19px;}
.od-plano-feito span{flex:1; min-width:200px;}
.od-plano-feito .btn-p{min-height:44px; padding:9px 16px; font-size:var(--t-sm);}

.od-sel-acoes{display:grid; grid-template-columns:1fr; gap:8px; margin-top:9px;}
.od-sel-acoes .btn-p, .od-sel-acoes .btn-g{width:100%; padding:12px; min-height:48px;}
@media(min-width:560px){.od-sel-acoes{grid-template-columns:1fr auto;}}

.rev-modal{max-width:min(620px,95vw); display:flex; flex-direction:column; gap:12px;}
.rev-topo{display:flex; align-items:flex-start; gap:12px;}
.rev-passo{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em;
  text-transform:uppercase; color:var(--signal);
}
.rev-dente{font-family:var(--num); font-size:34px; font-weight:600; line-height:1.1;}
.rev-tipo{font-size:13px; color:var(--txt-2);}
.rev-x{
  margin-left:auto; width:40px; height:40px; border-radius:50%; cursor:pointer;
  background:var(--baixo); border:.5px solid var(--line); color:var(--txt-2);
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.rev-atual{
  display:flex; align-items:center; gap:7px;
  font-size:13px; color:var(--txt-2);
  background:var(--baixo); border:.5px solid var(--line);
  border-radius:10px; padding:9px 11px;
}
.rev-chips{display:flex; flex-wrap:wrap; gap:7px; max-height:38vh; overflow-y:auto;}
.rev-chip{
  display:inline-flex; align-items:center; gap:6px; cursor:pointer;
  min-height:44px; padding:9px 14px; border-radius:11px;
  font-family:inherit; font-size:14px; line-height:1.25; text-align:left;
  background:var(--baixo); border:.5px solid var(--line-strong); color:var(--txt-1);
  transition:.14s var(--ease);
}
.rev-chip:hover{border-color:var(--signal);}
.rev-chip.on{background:var(--signal); border-color:var(--signal); color:var(--on-signal); font-weight:500;}
/* Achado que exige comunicação hoje é marcado ANTES de ser tocado: quem
   procura na lista precisa vê-lo, não descobri-lo depois de marcar. */
.rev-chip.urg{border-color:var(--risk-2-txt); color:var(--risk-2-txt);}
.rev-chip.urg.on{background:var(--risk-2); border-color:var(--risk-2-txt); color:var(--on-risk-2);}
.rev-chip.urg i{font-size:15px;}
/* Achado que só existe porque há tubo na boca — a origem fica dita. */
.rev-chip.uti::after{
  content:'VM'; font-family:var(--mono); font-size:10px; letter-spacing:.08em;
  opacity:.62; margin-left:2px;
}
#revLivre{width:100%;}
.rev-aviso{
  font-size:13px; line-height:1.5; color:var(--txt-2);
  background:var(--baixo); border-left:3px solid var(--signal);
  border-radius:8px; padding:9px 12px;
}
.rev-aviso.urg{border-left-color:var(--risk-2-txt); color:var(--txt-1);}
.rev-nav{display:flex; gap:8px;}
.rev-nav button{flex:1; min-height:48px; justify-content:center;}
.rev-nav .btn-p{flex:1.4;}
.rev-nav button:disabled{opacity:.4; cursor:not-allowed;}

/* ============================================================
   TERMO DE CONSENTIMENTO FOTOGRÁFICO
   ------------------------------------------------------------
   Lido por quem assina — muitas vezes um familiar em pé, no
   corredor da UTI, num tablet. Texto grande, alvos grandes, e o
   quadro de assinatura com altura de mão inteira, não de campo
   de formulário.
   ============================================================ */
.con-modal{max-width:min(680px,95vw); display:flex; flex-direction:column; gap:14px; max-height:92vh; overflow-y:auto;}
.con-topo{display:flex; align-items:flex-start; gap:12px;}
.con-eyebrow{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em;
  text-transform:uppercase; color:var(--signal);
}
.con-tit{font-size:22px; font-weight:600; line-height:1.2;}
.con-pac{font-size:14px; color:var(--txt-2); margin-top:2px;}
.con-texto{
  white-space:pre-wrap; font-family:var(--body); font-size:15px; line-height:1.6;
  color:var(--txt-1); background:var(--baixo); border:.5px solid var(--line);
  border-radius:12px; padding:16px 18px; margin:0; max-height:34vh; overflow-y:auto;
}
.con-bloco{display:flex; flex-direction:column; gap:8px;}
.con-h{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.14em;
  text-transform:uppercase; color:var(--txt-3);
}
.con-hint{letter-spacing:0; text-transform:none; font-family:var(--body); opacity:.85;}
.con-finais{display:flex; flex-direction:column; gap:6px;}
.con-fin{
  display:flex; align-items:center; gap:9px; cursor:pointer; text-align:left;
  min-height:48px; padding:10px 13px; border-radius:11px; font-family:inherit; font-size:15px;
  background:var(--baixo); border:.5px solid var(--line); color:var(--txt-1);
}
.con-fin i{font-size:20px; color:var(--txt-3); flex-shrink:0;}
.con-fin.on{border-color:var(--signal);}
.con-fin.on i{color:var(--signal);}
/* Finalidade assistencial não se desmarca: é o motivo de a foto existir.
   Ensino e pesquisa começam DESMARCADAS — consentimento pré-marcado para
   finalidade secundária não é consentimento. */
.con-fin.fixa{cursor:default; opacity:.9;}
.con-fixa{font-family:var(--mono); font-size:11px; letter-spacing:.1em; color:var(--txt-3); margin-left:auto;}
.con-quem{display:flex; flex-direction:column; gap:7px;}
.con-op{
  display:flex; flex-direction:column; gap:2px; cursor:pointer; text-align:left;
  padding:13px 15px; border-radius:12px; font-family:inherit;
  background:var(--baixo); border:1px solid var(--line); color:var(--txt-1);
  transition:.14s var(--ease);
}
.con-op b{font-size:15px; font-weight:600;}
.con-op span{font-size:13px; color:var(--txt-2);}
.con-op em{font-size:12px; color:var(--risk-1); font-style:normal; margin-top:3px;}
.con-op.on{border-color:var(--signal); background:color-mix(in srgb, var(--signal) 9%, var(--baixo));}
.con-campos{display:flex; flex-direction:column; gap:10px;}
.con-campo{display:flex; flex-direction:column; gap:5px;}
.con-campo span{font-size:13px; color:var(--txt-2);}
.con-campo input, .con-campo textarea{width:100%; font-family:inherit;}
.con-assin{position:relative;}
#conCanvas{
  width:100%; height:180px; display:block; touch-action:none; cursor:crosshair;
  background:var(--surface); border:1px solid var(--line-strong); border-radius:12px;
  color:var(--txt-1);   /* currentColor = cor do traço */
}
.con-linha-assin{
  position:absolute; left:24px; right:24px; bottom:44px; height:1px;
  background:var(--line-strong); pointer-events:none;
}
.con-limpar{
  position:absolute; right:10px; top:10px; display:inline-flex; align-items:center; gap:5px;
  padding:7px 12px; border-radius:9px; cursor:pointer; font-family:inherit; font-size:13px;
  background:var(--raised); border:.5px solid var(--line); color:var(--txt-2);
}
.con-pend{
  font-size:14px; line-height:1.5; border-radius:11px; padding:12px 14px;
  border-left:3px solid var(--risk-2); background:var(--baixo); color:var(--txt-1);
}
.con-pend.aviso{border-left-color:var(--risk-1);}
.con-pend ul{margin:6px 0 0; padding-left:20px;}
.con-nav{display:flex; gap:9px;}
.con-nav button{flex:1; min-height:50px; justify-content:center;}
.con-nav .btn-p{flex:1.6;}

/* Seletor dos três formatos de evolução */
.evo-fmts{display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:8px; margin-bottom:12px;}
.evo-fmt{
  display:flex; flex-direction:column; gap:2px; cursor:pointer; text-align:left;
  padding:11px 13px; border-radius:11px; font-family:inherit; min-height:56px;
  background:var(--baixo); border:1px solid var(--line); color:var(--txt-1);
  transition:.14s var(--ease);
}
.evo-fmt b{font-size:14px; font-weight:600;}
.evo-fmt span{font-size:12px; color:var(--txt-2); line-height:1.35;}
.evo-fmt.on{border-color:var(--signal); background:color-mix(in srgb, var(--signal) 10%, var(--baixo));}
.evo-acentos{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  font-size:13px; color:var(--txt-2); margin:10px 0 4px;
}
.evo-acentos input{width:18px; height:18px; flex-shrink:0;}
.evo-acentos span{color:var(--txt-3);}

/* Protocolo de higiene oral — a evidência fica ao lado da escolha */
.proto-ev{margin:10px 0 14px; padding-left:18px; display:flex; flex-direction:column; gap:8px;}
.proto-ev li{font-size:13.5px; line-height:1.55; color:var(--txt-1);}
.proto-f{display:block; font-size:12px; color:var(--txt-3); margin-top:2px;}
.proto-ops{display:flex; flex-direction:column; gap:8px;}
.proto-op{
  display:flex; flex-direction:column; gap:3px; cursor:pointer; text-align:left;
  padding:13px 15px; border-radius:12px; font-family:inherit;
  background:var(--baixo); border:1px solid var(--line); color:var(--txt-1);
  transition:.14s var(--ease);
}
.proto-op b{font-size:15px; font-weight:600;}
.proto-op span{font-size:13px; color:var(--txt-2); line-height:1.45;}
.proto-op.on{border-color:var(--signal); background:color-mix(in srgb, var(--signal) 10%, var(--baixo));}
.proto-estado{
  display:flex; align-items:flex-start; gap:8px; margin-top:12px;
  font-size:13px; line-height:1.5; padding:11px 13px; border-radius:10px;
  background:var(--baixo); border-left:3px solid var(--ok); color:var(--txt-1);
}
/* Sem decisão registrada, "padrão do sistema" não pode passar por "protocolo
   aprovado". A diferença importa no documento que vai para a comissão. */
.proto-estado.pendente{border-left-color:var(--risk-1);}
.proto-estado i{font-size:18px; flex-shrink:0; margin-top:1px;}
.proto-ressalva{font-size:12.5px; line-height:1.55; color:var(--txt-3); margin:12px 0 0;}

/* Aviso de módulo ausente — visível, não descartável.
   O app abrir pela metade em silêncio é pior que abrir com um aviso feio. */
.aviso-modulos{
  display:flex; gap:11px; align-items:flex-start;
  margin-bottom:13px; padding:13px 15px; border-radius:12px;
  background:color-mix(in srgb, var(--risk-1) 12%, var(--surface));
  border:1px solid var(--risk-1); color:var(--txt-1);
  font-size:14px; line-height:1.5;
}
/* display:flex vencia o [hidden] do user-agent: o aviso vazio aparecia como
   uma faixa âmbar permanente no topo de todas as telas. */
.aviso-modulos[hidden]{display:none;}
.aviso-modulos i{font-size:22px; color:var(--risk-1); flex-shrink:0;}
.aviso-modulos ul{margin:7px 0 0; padding-left:20px;}
.aviso-modulos li{margin-bottom:2px;}

/* Consentimento revogado: o lugar das fotos passa a explicar o porquê,
   em vez de simplesmente sumir — sumir parece defeito. */
.fotos-revogado{
  display:flex; gap:11px; align-items:flex-start;
  padding:14px 16px; border-radius:12px;
  background:var(--baixo); border:1px solid var(--line-strong);
  font-size:13.5px; line-height:1.55; color:var(--txt-2);
}
.fotos-revogado b{color:var(--txt-1);}
.fotos-revogado i{font-size:20px; color:var(--txt-3); flex-shrink:0;}

/* ============================================================================
   AUDITORIA DA CCIH · documento com índice
   ----------------------------------------------------------------------------
   O documento é tabular e alinhado em monoespaçada — quebrar linha desalinha
   coluna e a comissão perde a conferência. Por isso o <pre> mantém
   `white-space:pre` e rola SÓ ele na horizontal, dentro da própria seção,
   em vez de empurrar a página inteira.
   ========================================================================== */
.aud-head{
  display:flex; align-items:flex-start; justify-content:space-between;
  gap:16px; flex-wrap:wrap; margin-bottom:16px;
}
.aud-acts{display:flex; gap:8px; flex-wrap:wrap;}
.aud-acts .btn-g{min-width:0;}

.aud-layout{display:grid; grid-template-columns:236px minmax(0,1fr); gap:18px; align-items:start;}
.aud-index{
  position:sticky; top:12px; max-height:calc(100vh - 28px); overflow:auto;
  background:var(--surface); border:1px solid var(--line); border-radius:14px;
  padding:12px 10px; display:flex; flex-direction:column; gap:2px;
}
.aud-index-t{
  font-family:var(--mono); font-size:var(--t-sm); letter-spacing:.16em;
  text-transform:uppercase; color:var(--txt-3); padding:2px 8px 10px;
  border-bottom:1px solid var(--line); margin-bottom:6px;
}
.aud-link{
  display:flex; align-items:flex-start; gap:9px; width:100%; text-align:left;
  background:none; border:none; border-radius:8px; cursor:pointer;
  font-family:var(--body); font-size:var(--t-sm); line-height:1.35;
  color:var(--txt-2); padding:9px 8px; min-height:44px;
  border-left:2px solid transparent;
  transition:background .15s, color .15s, border-color .15s;
}
.aud-link:hover{background:var(--raised); color:var(--txt-1);}
.aud-link.on{background:var(--raised); color:var(--txt-1); border-left-color:var(--signal);}
.aud-n{
  font-family:var(--mono); font-size:var(--t-sm); color:var(--txt-3);
  flex-shrink:0; min-width:14px;
}
.aud-link.on .aud-n{color:var(--signal);}

.aud-doc{min-width:0; display:flex; flex-direction:column; gap:14px;}
.aud-sec{
  background:var(--surface); border:1px solid var(--line); border-radius:14px;
  padding:16px 18px; scroll-margin-top:14px; min-width:0;
}
.aud-h{
  font-family:var(--disp); font-optical-sizing:auto; font-weight:560;
  font-size:19px; color:var(--txt-1); margin:0 0 12px;
  padding-bottom:10px; border-bottom:1px solid var(--line);
}
.aud-pre{
  margin:0; font-family:var(--mono); font-size:12.5px; line-height:1.62;
  color:var(--txt-2); white-space:pre; overflow-x:auto; min-width:0;
  padding-bottom:2px;
}
@media(max-width:900px){
  .aud-layout{grid-template-columns:1fr;}
  .aud-index{position:static; max-height:none; flex-direction:row; flex-wrap:wrap;}
  .aud-index-t{width:100%; border-bottom:none; padding-bottom:4px; margin-bottom:2px;}
  .aud-link{width:auto; border-left:none; border-bottom:2px solid transparent;}
  .aud-link.on{border-left-color:transparent; border-bottom-color:var(--signal);}
}

/* pendências no fim da narrativa — fecham a história do caso */
.prosa-pend{margin:0; padding-left:18px; color:var(--txt-2); font-size:14px; line-height:1.6;}
.prosa-pend li{margin-bottom:4px;}
.prosa-pend b{font-weight:600;}

/* ============================================================================
   RASTREIO DE MUCOSA · região por região
   As áreas de alta suspeição para câncer de boca (borda lateral de língua,
   ventre, soalho) ficam marcadas SEMPRE — inclusive quando não têm achado —
   porque o risco aqui é a região não ser olhada, não o achado passar batido.
   ========================================================================== */
.muc-resumo{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  font-size:var(--t-sm); color:var(--txt-2); margin-bottom:10px;
}
.muc-resumo b{color:var(--txt-1); font-family:var(--num); font-size:15px;}
.muc-cont{color:var(--risk-1);}
.muc-alerta{
  display:inline-flex; align-items:center; gap:5px; margin-left:auto;
  color:var(--risk-1); font-weight:600;
}
.muc-alerta i{font-size:15px;}
.muc-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:7px;}
.muc-reg{
  display:flex; flex-direction:column; gap:3px; text-align:left; cursor:pointer;
  background:var(--raised); border:1px solid var(--line); border-left:3px solid transparent;
  border-radius:10px; padding:10px 12px; min-height:var(--toque);
  font-family:var(--body); color:inherit;
  transition:border-color .15s, background .15s;
}
.muc-reg:hover{border-color:var(--line-strong);}
.muc-reg.risco{border-left-color:var(--risk-1);}
.muc-reg.normal{border-left-color:var(--ok);}
.muc-reg.com-achado{border-left-color:var(--risk-2); background:rgba(214,106,92,.08);}
.muc-reg.aberta{border-color:var(--signal);}
.muc-n{
  display:flex; align-items:center; gap:6px;
  font-size:13.5px; font-weight:600; color:var(--txt-1); line-height:1.25;
}
.muc-n i{font-size:13px; color:var(--risk-1); flex-shrink:0;}
.muc-d{font-size:var(--t-sm); color:var(--txt-3); line-height:1.35;}
.muc-reg.com-achado .muc-d{color:var(--risk-2-txt);}
.muc-reg.normal .muc-d{color:var(--ok);}

.muc-editor{
  margin-top:10px; padding:13px 14px; border-radius:12px;
  background:var(--surface); border:1px solid var(--signal);
  animation:riseIn .25s var(--ease) both;
}
.muc-editor-t{font-size:14px; font-weight:600; color:var(--txt-1); margin-bottom:10px;}
.muc-achados{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px;}
.muc-chip{
  background:var(--raised); border:1px solid var(--line-strong); border-radius:999px;
  color:var(--txt-2); font-family:var(--body); font-size:var(--t-sm);
  padding:6px 13px; cursor:pointer; min-height:44px;
  display:inline-flex; align-items:center;
  transition:background .15s, color .15s, border-color .15s;
}
.muc-chip:hover{border-color:var(--signal); color:var(--txt-1);}
.muc-chip.on{background:var(--risk-2); border-color:var(--risk-2); color:#FFFFFF;}
.muc-chip.ok.on{background:var(--ok); border-color:var(--ok); color:var(--on-risk-0);}
.muc-obs{width:100%; margin-bottom:10px;}
.muc-editor-acts{display:flex; align-items:center; gap:12px; justify-content:flex-end;}
.muc-fechar{min-width:0; padding:var(--s-2) var(--s-4);}
@media(max-width:560px){ .muc-grid{grid-template-columns:1fr;} .muc-alerta{margin-left:0; width:100%;} }

/* ===== Assistente · resposta da IA, fontes, ações, tarefas ===== */
.perg-md{margin:8px 0 4px;}
.perg-md .perg-p{margin:0 0 6px; line-height:1.55;}
.perg-md .perg-l{margin:2px 0 8px;}
.perg-br{height:4px;}
.perg-tag{display:inline-block; margin-left:8px; padding:2px 8px; border-radius:999px; font:600 10px/1.4 var(--mono); letter-spacing:.08em; background:rgba(201,169,106,.16); color:var(--risk-1); vertical-align:middle;}
.perg-spin{display:inline-block; animation:pergspin 1s linear infinite;}
@keyframes pergspin{to{transform:rotate(360deg);}}
.perg-acoes{display:flex; flex-wrap:wrap; gap:8px; margin:10px 0 6px; align-items:center;}
.perg-acao-card{display:flex; flex-wrap:wrap; gap:10px; align-items:center; justify-content:space-between; width:100%; padding:10px 12px; border-radius:12px; border:1px solid var(--line); background:var(--raised);}
.perg-acao-card>div{flex:1 1 240px; line-height:1.45;}
.perg-fontes{display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin:8px 0 4px; font-size:var(--t-sm); color:var(--txt-3);}
.perg-fonte{display:inline-block; padding:3px 9px; border-radius:999px; border:1px solid var(--line); background:var(--raised); color:var(--txt-2); text-decoration:none; font-size:var(--t-sm); max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
a.perg-fonte:hover{border-color:var(--signal); color:var(--signal);}
.perg-esclarecer{margin-top:8px;}
.perg-revisao{flex-wrap:wrap;}
.assistente-status.ativo{color:var(--ok);}
.tarefa-dialog{max-width:520px;}
.tarefa-titulo{margin:10px 0 6px; font-size:18px; line-height:1.3;}
.tarefa-meta{margin:4px 0; font-size:var(--t-sm); color:var(--txt-3); line-height:1.5;}
.tarefa-detalhe{margin:8px 0; line-height:1.5;}
.tarefa-vencida{color:var(--risk-2-txt); font-weight:600;}
.tarefa-acoes{display:flex; flex-wrap:wrap; gap:8px; margin-top:14px;}

/* ===== Tela Tarefas · fila da equipe ===== */
.tarefas-head{display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px;}
.tarefas-filtros{display:flex; flex-wrap:wrap; gap:6px; margin:12px 0;}
.tar-filtro{padding:7px 12px; border-radius:999px; border:1px solid var(--line); background:var(--raised); color:var(--txt-2); font-size:var(--t-sm); cursor:pointer;}
.tar-filtro b{font-family:var(--num); font-weight:600; margin-left:2px;}
.tar-filtro.on{border-color:var(--signal); color:var(--signal); background:rgba(47,126,168,.10);}
.tarefas-lista{display:flex; flex-direction:column; gap:8px;}
.tar-row{display:flex; align-items:center; gap:12px; width:100%; text-align:left; padding:12px 14px; border-radius:12px; border:1px solid var(--line); background:var(--raised); cursor:pointer; min-height:52px;}
.tar-row:hover{border-color:var(--signal);}
.tar-sev{width:4px; align-self:stretch; border-radius:4px; background:var(--txt-3);}
.tar-row.sev0 .tar-sev{background:var(--risk-2);}
.tar-row.sev1 .tar-sev{background:var(--risk-1);}
.tar-row.sev2 .tar-sev{background:var(--signal);}
.tar-row.sev3{opacity:.72;}
.tar-main{flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px;}
.tar-main b{line-height:1.35;}
.tar-main small{color:var(--txt-3); font-size:var(--t-sm);}
.tar-meta{display:flex; flex-direction:column; align-items:flex-end; gap:4px; flex:none;}
.tar-meta small{color:var(--txt-3); font-size:var(--t-sm); display:flex; align-items:center; gap:4px;}
.tar-estado{padding:2px 9px; border-radius:999px; font:600 10px/1.5 var(--mono); letter-spacing:.06em; border:1px solid var(--line); color:var(--txt-2);}
.tar-estado.e-concluida{color:var(--ok); border-color:var(--ok);}
.tar-estado.e-aceita,.tar-estado.e-em_execucao{color:var(--signal); border-color:var(--signal);}
.tar-estado.e-recusada,.tar-estado.e-anulada{color:var(--txt-3);}
.tarefa-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px; margin-top:10px;}
@media(max-width:560px){ .tar-meta{align-items:flex-start;} .tar-row{flex-wrap:wrap;} }

/* ===== Contexto assistencial · faixa no prontuário ===== */
.ctx-strip{display:flex; align-items:center; flex-wrap:wrap; gap:12px 16px; padding:11px 14px; border-radius:12px; border:1px solid var(--line); background:var(--raised); margin-bottom:13px;}
.ctx-strip.vazia{color:var(--txt-2);}
.ctx-strip.vencido{border-color:rgba(214,106,92,.5);}
.ctx-strip.confirme{border-color:rgba(201,169,106,.45);}
.ctx-idade{display:inline-flex; align-items:center; gap:5px; padding:3px 10px; border-radius:999px; font:600 10px/1.6 var(--mono); letter-spacing:.08em; text-transform:uppercase;}
.ctx-idade.e-ok{color:var(--ok); border:1px solid var(--ok);}
.ctx-idade.e-confirme{color:var(--risk-1); border:1px solid var(--risk-1);}
.ctx-idade.e-vencido{color:var(--risk-2-txt); border:1px solid var(--risk-2);}
.ctx-fatos{display:flex; flex-wrap:wrap; gap:4px 18px; flex:1 1 auto;}
.ctx-fatos span{display:flex; flex-direction:column;}
.ctx-fatos small{font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--txt-3); font-family:var(--mono);}
.ctx-fatos b{font-size:13px;}
.ctx-fonte{display:flex; align-items:center; gap:5px; font-size:var(--t-sm); color:var(--txt-3);}
.ctx-fonte em{font-style:normal; opacity:.85;}
.ctx-acts{display:flex; gap:8px;}
.ctx-acts .btn-g{min-width:0; padding:8px 12px;}
@media(max-width:700px){ .ctx-acts{width:100%;} .ctx-acts .btn-g{flex:1;} }

/* ===== Drill-down do boletim ===== */
.metric--click{cursor:pointer;}
.metric--click:hover{border-color:var(--signal);}
.drill-dialog{max-width:620px;}
.drill-kicker{font:600 10px/1.6 var(--mono); letter-spacing:.08em; color:var(--txt-3); margin-top:8px;}
.drill-lista{display:flex; flex-direction:column; gap:6px; margin:12px 0 4px; max-height:46vh; overflow-y:auto;}
.drill-row{display:flex; align-items:center; gap:10px; width:100%; text-align:left; padding:9px 12px; border-radius:10px; border:1px solid var(--line); background:var(--raised); cursor:pointer;}
.drill-row:hover{border-color:var(--signal);}
.drill-row b{font-family:var(--num); min-width:44px;}
.drill-nome{flex:0 0 auto;}
.drill-extra{flex:1 1 auto; text-align:right; color:var(--txt-3); font-size:var(--t-sm);}
.drill-zero{color:var(--txt-3); padding:10px 2px;}
.drill-conta{display:flex; flex-wrap:wrap; gap:8px 22px; padding:10px 2px;}
.drill-conta span{display:flex; flex-direction:column;}
.drill-conta b{font-family:var(--num); font-size:22px;}
.drill-conta small{color:var(--txt-3); font-size:var(--t-sm);}
.drill-sub{font:600 10px/1.6 var(--mono); letter-spacing:.1em; color:var(--txt-3); margin-top:10px;}
.drill-motivo{display:flex; justify-content:space-between; padding:5px 2px; border-bottom:1px dashed var(--line);}

/* ===== Envio ao prontuário · estado sempre à vista ===== */
.envio-linha{display:flex; align-items:center; gap:10px; margin-top:6px;}
.envio-chip{display:inline-flex; align-items:center; gap:5px; padding:2px 9px; border-radius:999px; font-size:var(--t-sm); border:1px solid var(--line); color:var(--txt-2);}
.envio-chip.ok{color:var(--ok); border-color:var(--ok);}
.envio-chip.pend{color:var(--risk-1); border-color:var(--risk-1);}
.envio-chip.erro{color:var(--risk-2-txt); border-color:var(--risk-2);}
