/* ============================================================
   COMPONENTS — inventário nomeado de componentes (ADR-0002)
   Um componente = um bloco nomeado consumindo tokens.
   Primitivos → compostos → padrões de tela. Ajuste específico
   de uma tela vai em css/screens/, nunca aqui.
   ============================================================ */

/* ── PRIMITIVOS ────────────────────────────────────────────── */

/* Wordmark Curattive (logo + subtítulo) */
.wm{display:inline-flex;align-items:center;gap:9px;font-weight:700;letter-spacing:.02em;color:var(--ink)}
.wm .mk{width:26px;height:26px;flex:none}
.wm .tx{font-size:18px;font-weight:800;letter-spacing:.06em}
.wm .tx b{color:var(--accent);font-weight:800}
.wm .sub{display:block;font-size:9px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--mut);margin-top:2px}

/* Botão (primário · sm · ghost · block) e botão-link */
.btn{background:var(--accent);color:#fff;border-radius:var(--r);padding:10px 22px;font-size:14px;font-weight:600;transition:background .15s}
.btn:hover{background:var(--accent2)}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn.block{width:100%}
.btn.sm{padding:7px 14px;font-size:13px}
.btn.ghost{background:var(--surface);color:var(--ink2);border:1px solid var(--hair2)}
.btn.ghost:hover{background:var(--hover)}
.linkbtn{background:none;color:var(--mut);font-size:12px;margin-top:12px;text-decoration:underline;display:block;width:100%;text-align:center}
.linkbtn:hover{color:var(--accent)}

/* Campo de formulário (label + input/select/textarea + hint) */
.field{margin-bottom:14px}
.field label{display:block;font-size:12px;color:var(--mut);margin-bottom:6px;font-weight:500}
.field input,.field select,.field textarea{width:100%;padding:9px 12px;border:1px solid var(--hair2);border-radius:var(--r);font-size:14px;background:var(--surface);color:var(--ink)}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.field .hint{font-size:11px;color:var(--mut2);margin-top:6px}
.field textarea{resize:vertical;min-height:70px}

/* Badge de status */
.bdg{font-size:10.5px;padding:2px 9px;border-radius:6px;white-space:nowrap;display:inline-block;font-weight:600;background:var(--active);color:var(--ink2)}
.bdg.ok{background:var(--ok-bg);color:var(--ok)}
.bdg.warn{background:var(--warn-bg);color:var(--warn)}
.bdg.alert{background:var(--alert-bg);color:var(--alert)}
.bdg.info{background:var(--info-bg);color:var(--info)}
.bdg.coral{background:var(--accent-soft);color:var(--accent2)}

/* Toggle (liga/desliga; .lock = travado no ligado) */
.toggle{width:42px;height:24px;border-radius:99px;background:var(--mut2);position:relative;transition:.18s;flex:none;cursor:pointer}
.toggle::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.18s}
.toggle.on{background:var(--ok)}
.toggle.on::after{left:21px}
.toggle.lock{background:var(--accent);cursor:not-allowed;opacity:.85}
.toggle.lock::after{left:21px}

/* Estado vazio */
.empty{background:var(--surface);border:1px dashed var(--hair2);border-radius:10px;padding:32px;text-align:center;color:var(--mut);font-size:13px}

/* ── COMPOSTOS ─────────────────────────────────────────────── */

/* Banner de demonstração (ADR-0001: obrigatório com adapter memória ativo) */
.demo-banner{display:none}
html.demo .demo-banner{display:flex;position:fixed;top:0;left:0;right:0;height:32px;z-index:2000;align-items:center;justify-content:center;background:#B3261E;color:#fff;font-weight:700;font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}
html.demo #login{height:calc(100vh - 32px);height:calc(100svh - 32px);margin-top:32px}
/* Mobile: o corpo rola — o app só desloca sob o banner; altura fixa é do desktop */
html.demo #app{margin-top:32px;min-height:calc(100vh - 32px);min-height:calc(100svh - 32px)}
html.demo #drawer{top:32px;height:calc(100vh - 32px);height:calc(100dvh - 32px)}
@media (min-width:48em){
  html.demo #app{height:calc(100vh - 32px);height:calc(100svh - 32px);min-height:0}
}

/* Banner de módulo Fase 2 */
.phase-banner{display:flex;align-items:center;gap:11px;background:var(--accent-soft);border:1px solid #F2D2D0;border-radius:var(--r);padding:11px 15px;margin-bottom:18px;font-size:13px;color:var(--accent2)}
.phase-banner svg{width:17px;height:17px;flex:none;stroke:var(--accent2);stroke-width:2;fill:none}
.phase-banner b{font-weight:700}

/* Widget KPI (indicador com faixa de cor e delta) */
/* Mobile: 2×2 compacto (síntese empilha por prioridade); desktop: auto-ajustável */
.kpi-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
@media (min-width:48em){
  .kpi-grid{grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));gap:14px}
}
.kpi{background:var(--surface);border:1px solid var(--hair);border-radius:10px;padding:16px;position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--hair2)}
.kpi.coral::before{background:var(--accent)}
.kpi.ok::before{background:var(--ok)}
.kpi.alert::before{background:var(--alert)}
.kpi.info::before{background:var(--info)}
.kpi-lab{font-size:11px;color:var(--mut);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.kpi-val{font-size:26px;font-weight:700;color:var(--ink);margin-top:7px;line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpi-ctx{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;min-height:1px}
.kpi-sub{font-size:11px;color:var(--mut);margin-top:7px}
.kpi-delta{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:6px;white-space:nowrap;font-variant-numeric:tabular-nums}
.kpi-delta.up{background:var(--ok-bg);color:var(--ok)}
.kpi-delta.down{background:var(--alert-bg);color:var(--alert)}
.kpi-delta.warn{background:var(--warn-bg);color:var(--warn)}
.kpi-delta.flat{background:var(--active);color:var(--ink2)}

/* Painel genérico (cartão com cabeçalho) */
.panel{background:var(--surface);border:1px solid var(--hair);border-radius:12px;padding:18px}
.panel-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.panel-h h3{font-size:14.5px;font-weight:700;color:var(--ink)}
.panel-h .hint{font-size:12px;color:var(--mut)}
.section-title{font-size:13px;font-weight:700;color:var(--ink);margin:0 0 10px;text-transform:uppercase;letter-spacing:.05em}

/* Lista de atenção (pendências com ponto de severidade) */
.att{display:flex;align-items:flex-start;gap:11px;padding:11px 0;border-bottom:1px solid var(--hair)}
.att:last-child{border-bottom:none}
.att .ad{width:8px;height:8px;border-radius:50%;margin-top:5px;flex:none}
.att .ad.alert{background:var(--alert)}.att .ad.warn{background:var(--warn)}.att .ad.info{background:var(--info)}
.att .at{font-size:13px;color:var(--ink);font-weight:500}
.att .aw{font-size:11.5px;color:var(--mut);margin-top:2px}
.att .ax{margin-left:auto;font-size:12px;color:var(--accent);font-weight:600;white-space:nowrap;cursor:pointer}

/* Barra de progresso rotulada */
.barline{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.barline .bl{width:130px;font-size:12.5px;color:var(--ink2);flex:none}
.barline .bt{flex:1;height:9px;background:var(--soft);border-radius:6px;overflow:hidden}
.barline .bt span{display:block;height:100%;background:var(--accent);border-radius:6px}
.barline .bt span.green{background:var(--ok)}
.barline .bv{width:42px;text-align:right;font-size:12.5px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}

/* Ações rápidas (grade de atalhos) */
.quick{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.qa{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--hair);border-radius:var(--r);padding:12px 14px;text-align:left;transition:.12s}
.qa:hover{border-color:var(--accent);background:var(--hover)}
.qa .qi{width:34px;height:34px;border-radius:8px;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;flex:none}
.qa .qi svg{width:17px;height:17px;stroke:var(--accent);stroke-width:1.9;fill:none}
.qa .qt{font-size:13px;font-weight:600;color:var(--ink)}
.qa .qd{font-size:11px;color:var(--mut);margin-top:1px}

/* Tabela densa + toolbar de busca/filtros */
.tablewrap{background:var(--surface);border:1px solid var(--hair);border-radius:12px;overflow:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl thead th{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);font-weight:600;padding:11px 14px;border-bottom:1px solid var(--hair);background:var(--raise);white-space:nowrap}
.tbl tbody td{padding:11px 14px;border-bottom:1px solid var(--hair);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr.clk{cursor:pointer;transition:background .12s}
.tbl tbody tr.clk:hover{background:var(--hover)}
.tbl .c-emp{font-weight:600;color:var(--ink)}
.tbl .c-sub{color:var(--mut);font-size:12px;margin-top:1px}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums}
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap;position:sticky;top:0;z-index:5;background:var(--base)}
html.demo .toolbar{top:32px}
@media (min-width:48em){html.demo .toolbar{top:0}}
.toolbar input,.toolbar select{padding:9px 12px;border:1px solid var(--hair2);border-radius:var(--r);font-size:13px;background:var(--surface);color:var(--ink)}
.toolbar input:focus,.toolbar select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.toolbar input.search{flex:1;max-width:320px}
.toolbar .spacer{flex:1}
.count{font-size:12px;color:var(--mut)}
/* Par tabela-desktop ↔ cards-mobile (mesmo DOM, duas renderizações — spec F3).
   Os rótulos vêm de data-label, estampados pelo router a partir do thead.
   Exceção deliberada ao min-width: o par é definido pelo lado desktop acima;
   abaixo de 48em cada linha vira um card empilhado. */
@media (max-width:47.999em){
  .tablewrap{background:none;border:none;overflow:visible}
  table.tbl,.tbl tbody{display:block;width:100%}
  .tbl thead{display:none}
  .tbl tbody tr{display:block;background:var(--surface);border:1px solid var(--hair);border-radius:10px;padding:12px 14px;margin-bottom:10px}
  .tbl tbody tr:last-child{margin-bottom:0}
  .tbl tbody td{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:3px 0;border:none;text-align:right}
  .tbl tbody td::before{content:attr(data-label);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);flex:none;text-align:left}
  .tbl tbody td:not([data-label])::before{content:none}
  .tbl tbody td:first-child{display:block;text-align:left;padding-bottom:6px}
  .tbl tbody td:first-child::before{content:none}
  .tbl tbody td:empty{display:none}
  .tbl tbody td[colspan]{display:block;text-align:left}
  .tbl .num{text-align:right}
}

/* Cartão de lesão (strip de registros fotográficos) */
.lesao-strip{display:flex;gap:14px;overflow-x:auto;padding-bottom:6px;align-items:stretch}
.lesao-card{flex:none;width:184px;background:var(--surface);border:1px solid var(--hair);border-radius:10px;overflow:hidden}
.lesao-photo{height:150px;background:repeating-linear-gradient(45deg,#F4EEEA,#F4EEEA 9px,#EFE7E2 9px,#EFE7E2 18px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;border-bottom:1px solid var(--hair);color:var(--mut);overflow:hidden}
.lesao-photo img{width:100%;height:100%;object-fit:cover;display:block}
.lesao-photo svg{width:30px;height:30px;stroke:var(--mut2);stroke-width:1.6;fill:none}
.lesao-photo .ph{font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--mut2)}
.lesao-meta{padding:11px 12px}
.lesao-meta .ld{font-size:12px;font-weight:700;color:var(--ink)}
.lesao-meta .la{font-size:11.5px;color:var(--accent2);font-weight:600;margin-top:3px}
.lesao-meta .ln{font-size:11px;color:var(--mut);margin-top:6px;line-height:1.4}
.lesao-arrow{flex:none;display:flex;align-items:center;color:var(--mut2);font-size:18px}

/* Linha de compartilhamento (avatar + pessoa + toggle de acesso) */
.share-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--hair)}
.share-row:last-child{border-bottom:none}
.share-av{width:34px;height:34px;border-radius:50%;background:var(--soft);color:var(--ink2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none}
.share-info{flex:1;min-width:0}
.share-info .sn{font-size:13px;font-weight:600;color:var(--ink)}
.share-info .sr{font-size:11.5px;color:var(--mut);margin-top:1px}

/* Parâmetro com slider (limiar configurável) */
.param{background:var(--raise);border:1px solid var(--hair);border-radius:10px;padding:16px}
.param + .param{margin-top:12px}
.param .pl{font-size:12.5px;font-weight:600;color:var(--ink)}
.param .pd{font-size:11.5px;color:var(--mut);margin-top:2px}
.param .prow{display:flex;align-items:center;gap:14px;margin-top:12px}
.param input[type=range]{flex:1;accent-color:var(--accent)}
.param .pv{font-size:14px;font-weight:700;color:var(--accent2);font-variant-numeric:tabular-nums;width:96px;text-align:right}

/* Conversa (balões de chat) */
.chat{background:var(--raise);border:1px solid var(--hair);border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:10px}
.cm{max-width:78%;padding:10px 13px;border-radius:12px;font-size:13px;line-height:1.45}
.cm.ia{background:var(--surface);border:1px solid var(--hair2);color:var(--ink2);align-self:flex-start;border-bottom-left-radius:3px}
.cm.tec{background:#DCF8C6;color:#2b3a22;align-self:flex-end;border-bottom-right-radius:3px}
.cm .who{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:3px;color:var(--mut)}
.cm.tec .who{color:#5a7a3f}
.cm .tm{font-size:9.5px;color:var(--mut2);margin-top:4px;text-align:right}

/* Nota de confiança (LGPD / garantia) */
.trust{display:flex;gap:13px;background:var(--info-bg);border:1px solid #D4E0F2;border-radius:10px;padding:15px}
.trust svg{width:20px;height:20px;flex:none;stroke:var(--info);stroke-width:2;fill:none;margin-top:1px}
.trust .tt{font-size:13px;font-weight:700;color:var(--info)}
.trust .tw{font-size:12.5px;color:var(--ink2);margin-top:3px;line-height:1.5}

/* Mini gráfico de barras */
.chart{display:flex;align-items:flex-end;gap:8px;height:130px;padding-top:8px}
.chart .gb{flex:1;background:var(--accent);border-radius:5px 5px 0 0;min-height:4px;position:relative;transition:.2s}
.chart .gb:hover{background:var(--accent2)}
.chart .gb span{position:absolute;bottom:-20px;left:0;right:0;text-align:center;font-size:10px;color:var(--mut)}

/* Drawer lateral (+ overlay) e blocos internos */
#ov{position:fixed;inset:0;background:rgba(58,51,47,.22);opacity:0;pointer-events:none;transition:.2s;z-index:9}
#ov.show{opacity:1;pointer-events:auto}
#drawer{position:fixed;top:0;right:0;height:100vh;height:100dvh;width:480px;max-width:100vw;background:var(--surface);border-left:1px solid var(--hair);box-shadow:-8px 0 30px rgba(58,51,47,.12);transform:translateX(100%);transition:.25s;z-index:10;display:flex;flex-direction:column}
@media (min-width:48em){#drawer{max-width:94vw}}
#drawer.show{transform:translateX(0)}
#drawer .dh{padding:18px 22px;border-bottom:1px solid var(--hair);display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
#drawer .dh .emp{font-size:16px;color:var(--ink);font-weight:700}
#drawer .dh .nm{color:var(--mut);font-size:13px;margin-top:3px}
#drawer .dh .x{font-size:24px;color:var(--mut);line-height:1}
#drawer .db{overflow-y:auto;flex:1;padding:20px 22px}
#drawer .df{padding:14px 22px;border-top:1px solid var(--hair);display:flex;gap:10px}
#drawer .df .btn{flex:1;text-align:center}
.d-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px}
/* Variante de 4 estatísticas (cabeçalho da ficha): 2×2 no telefone, linha no escritório */
.d-stats.d-stats-4{grid-template-columns:1fr 1fr}
@media (min-width:48em){.d-stats.d-stats-4{grid-template-columns:repeat(4,1fr)}}
.d-stat{background:var(--raise);border:1px solid var(--hair);border-radius:var(--r);padding:11px 13px}
.d-stat-k{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);font-weight:600}
.d-stat-v{font-size:15px;font-weight:700;color:var(--ink);margin-top:4px;font-variant-numeric:tabular-nums}
.kv-row{display:flex;gap:12px;padding:9px 0;border-top:1px solid var(--hair)}
.kv-row:first-child{border-top:none}
.kv-k{flex:none;width:140px;font-size:12px;color:var(--mut);font-weight:500}
.kv-v{flex:1;min-width:0;font-size:13px;color:var(--ink2)}

/* Timeline (evolução de atendimentos) */
.timeline{position:relative}
.timeline .tl{position:relative;padding:0 0 16px 16px;border-left:1px solid var(--hair)}
.timeline .tl:last-child{border-left-color:transparent;padding-bottom:0}
.timeline .tl::before{content:"";position:absolute;left:-4px;top:3px;width:8px;height:8px;border-radius:50%;background:var(--accent)}
.timeline .tl .tlt{font-size:13px;color:var(--ink);font-weight:600}
.timeline .tl .tlw{font-size:11.5px;color:var(--mut);margin-top:2px;line-height:1.45}

/* Toast (aviso flutuante) — no mobile sobe acima da navegação inferior */
.toast{position:fixed;bottom:calc(88px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:11px 20px;border-radius:10px;font-size:13px;font-weight:500;opacity:0;pointer-events:none;transition:.25s;z-index:20;box-shadow:0 10px 30px rgba(58,51,47,.25)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
@media (min-width:48em){.toast{bottom:24px}}

/* ── PADRÕES DE TELA (Fase 3 responsiva) ───────────────────── */

/* Navegação inferior (mobile): 4 itens de operação + aba Mais;
   ícone com rótulo, alvo de toque ≥44px (spec F3 + grill 18/07) */
#bnav{position:fixed;bottom:0;left:0;right:0;z-index:8;display:flex;background:var(--side);border-top:1px solid var(--side2);padding-bottom:env(safe-area-inset-bottom)}
.bn-item{flex:1;min-width:0;min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:7px 2px 6px;color:var(--side-mut);font-size:10px;font-weight:600;letter-spacing:.01em}
.bn-item .ic{width:21px;height:21px;flex:none;stroke:currentColor;stroke-width:1.9;fill:none}
.bn-item .lbl{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bn-item.active{color:#fff}
.bn-item.active .ic{stroke:var(--accent)}

/* Aba Mais (bottom sheet): restante da árvore de navegação + identidade + sair */
#sheet-ov{position:fixed;inset:0;background:rgba(58,51,47,.3);opacity:0;pointer-events:none;transition:.2s;z-index:11}
#sheet-ov.show{opacity:1;pointer-events:auto}
#sheet{position:fixed;left:0;right:0;bottom:0;z-index:12;background:var(--surface);border-radius:16px 16px 0 0;box-shadow:0 -10px 40px rgba(58,51,47,.22);transform:translateY(105%);transition:.25s;max-height:80vh;max-height:80dvh;overflow-y:auto;padding:10px 16px calc(16px + env(safe-area-inset-bottom))}
#sheet.show{transform:translateY(0)}
#sheet .alca{width:38px;height:4px;border-radius:99px;background:var(--hair2);margin:2px auto 12px}
#sheet .sh-id{display:flex;align-items:center;gap:12px;padding:10px 2px 14px;border-bottom:1px solid var(--hair)}
#sheet .sh-id .u{font-size:14px;font-weight:700;color:var(--ink)}
#sheet .sh-id .e{font-size:11.5px;color:var(--mut);margin-top:2px}
#sheet .sh-id .rolebadge{display:inline-block;font-size:10px;font-weight:600;padding:2px 8px;border-radius:6px;background:var(--accent);color:#fff}
#sheet .sh-item{width:100%;display:flex;align-items:center;gap:12px;min-height:48px;padding:6px 2px;font-size:14px;font-weight:500;color:var(--ink);border-bottom:1px solid var(--hair)}
#sheet .sh-item .ic{width:19px;height:19px;flex:none;stroke:var(--ink2);stroke-width:1.9;fill:none}
#sheet .sh-item .tag{font-size:9px;font-weight:700;letter-spacing:.04em;padding:2px 6px;border-radius:5px;background:var(--accent-soft);color:var(--accent2);text-transform:uppercase;margin-left:auto}
#sheet .sh-sair{width:100%;min-height:48px;margin-top:8px;font-size:13.5px;font-weight:600;color:var(--accent2)}
/* Navegação inferior e sheet são exclusivos do mobile — a regra de
   visibilidade mora aqui, com o componente (components.css carrega
   depois de layout.css; regra lá seria anulada pela cascata). */
@media (min-width:48em){#bnav,#sheet,#sheet-ov{display:none}}

/* Seção colapsável (registro/documento no mobile — spec F3, natureza 2) */
.colapsavel .panel-h{cursor:default}
@media (max-width:47.999em){
  .colapsavel>.panel-h{cursor:pointer;position:relative;padding-right:26px}
  .colapsavel>.panel-h::after{content:"";position:absolute;right:4px;top:50%;width:9px;height:9px;margin-top:-7px;border-right:2px solid var(--mut);border-bottom:2px solid var(--mut);transform:rotate(45deg);transition:.15s}
  .colapsavel.fechado>.panel-h::after{transform:rotate(-45deg);margin-top:-4px}
  .colapsavel.fechado>.panel-h{margin-bottom:0}
  .colapsavel.fechado>*:not(.panel-h){display:none}
}
