*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ════════════════════════════════════════════════════════════════════════════
   Front mobile — mesmos tokens do hub/style.css (cbnethub/DESIGN.md), com os
   nomes canônicos, para `check-design.mjs` verificar e para o claro sair de
   uma regra só. O que muda em relação ao hub é a FORMA, não a cor: cartão em
   vez de linha, barra inferior em vez de abas, sheet em vez de formulário
   inline. Nada de terceiro no caminho de render; Poppins vendorada (do hub,
   servida na raiz do mesmo processo).
   ════════════════════════════════════════════════════════════════════════════ */

@font-face {
  font-family: 'Poppins';
  src: url('/vendor/poppins-500.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'Poppins';
  src: url('/vendor/poppins-600.woff2') format('woff2');
  font-weight: 600; font-style: normal; font-display: swap;
}

/* ── Cor ── escuro é o padrão do ecossistema; o claro entra pelo sistema
   (sem escolha guardada) ou pela escolha explícita em <html data-theme>. */
:root {
  color-scheme: dark;
  --bg:           #061423;
  --surface:      rgba(255,255,255,.045);
  --surface-2:    rgba(255,255,255,.03);
  --border:       rgba(255,255,255,.10);
  --text:         #eaf2f8;
  --text-muted:   #93a7ba;
  --accent:       #2fd15a;
  --accent-text:  #2fd15a;
  --on-accent:    #061423;
  --danger:       #ff6b7a;
  --warning:      #ffb020;
  --on-danger:    #061423;
  --on-warning:   #061423;
  --warning-text: #ffb020;
  --info:         #4b8ff5;
  --focus-ring:   color-mix(in srgb, var(--accent) 55%, transparent);
  --sheet-bg:     #0b1a2c;
  --elev-1: 0 1px 2px rgba(0,0,0,.30);
  --elev-2: 0 20px 46px rgba(0,0,0,.50);
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    color-scheme: light;
    --bg:           #eaeff6;
    --surface:      #ffffff;
    --surface-2:    #dde5ef;
    --border:       #ccd7e4;
    --text:         #0f1c2b;
    --text-muted:   #54637a;
    --accent:       #22a847;
    --accent-text:  #147233;
    --on-accent:    #061423;
    --danger:       #b3352f;
    --warning:      #b7791f;
    --on-danger:    #ffffff;
    --on-warning:   #061423;
    --warning-text: #8a5a12;
    --info:         #2563c9;
    --sheet-bg:     #ffffff;
    --elev-1: 0 1px 2px rgba(15,28,43,.05), 0 1px 1px rgba(15,28,43,.04);
    --elev-2: 0 18px 42px rgba(15,28,43,.16);
  }
}
[data-theme="light"] {
  color-scheme: light;
  --bg:           #eaeff6;
  --surface:      #ffffff;
  --surface-2:    #dde5ef;
  --border:       #ccd7e4;
  --text:         #0f1c2b;
  --text-muted:   #54637a;
  --accent:       #22a847;
  --accent-text:  #147233;
  --on-accent:    #061423;
  --danger:       #b3352f;
  --warning:      #b7791f;
  --on-danger:    #ffffff;
  --on-warning:   #061423;
  --warning-text: #8a5a12;
  --info:         #2563c9;
  --sheet-bg:     #ffffff;
  --elev-1: 0 1px 2px rgba(15,28,43,.05), 0 1px 1px rgba(15,28,43,.04);
  --elev-2: 0 18px 42px rgba(15,28,43,.16);
}
:root {
  --info-soft:    color-mix(in srgb, var(--info) 16%, transparent);
  --accent-soft:  color-mix(in srgb, var(--accent) 14%, transparent);
  --danger-soft:  color-mix(in srgb, var(--danger) 14%, transparent);
  --warning-soft: color-mix(in srgb, var(--warning) 16%, transparent);

  --s-1: .25rem; --s-2: .5rem; --s-3: .75rem; --s-4: 1rem; --s-5: 1.5rem; --s-6: 2rem;
  --r-campo: 10px; --r-card: 14px; --r-pill: 999px;
  --ease-out: cubic-bezier(.23, 1, .32, 1);
  --t-press: 120ms; --t-enter: 240ms;

  /* Áreas seguras do aparelho (notch, barra de gestos). */
  --safe-top:    env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --nav-h: calc(58px + var(--safe-bottom));
}

/* ── Barras de rolagem (DESIGN.md §3.1) — as duas declarações, nenhuma cobre todo mundo. */
* { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--text-muted) 45%, transparent) transparent; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--text-muted) 45%, transparent); border-radius: var(--r-pill); }

html, body { height: 100%; }
body {
  background: var(--bg); color: var(--text);
  font-family: 'Poppins', system-ui, -apple-system, 'Segoe UI', sans-serif;
  font-weight: 500; font-size: 15px; line-height: 1.45;
  -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent;
  overscroll-behavior-y: contain;
}
strong, b { font-weight: 600; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
input, textarea, select { font: inherit; color: inherit; accent-color: var(--accent); }
/* Widget nativo (DESIGN.md §3.2): sem isto a LISTA do <select> abre branca no
   escuro (Chrome/Windows) — quem desenha é o UA, e ele só obedece a bg/color. */
select, select option, select optgroup { background-color: var(--bg); color: var(--text); }
a { color: var(--accent-text); }
:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.hidden { display: none !important; }
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

.ic { width: 22px; height: 22px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.ic.sm { width: 17px; height: 17px; }

/* ── Estrutura de tela ── */
#app { min-height: 100%; display: flex; flex-direction: column; }
.tela { flex: 1; display: flex; flex-direction: column; min-height: 100dvh; }
.top {
  position: sticky; top: 0; z-index: 5;
  display: flex; align-items: center; gap: 10px;
  padding: calc(8px + var(--safe-top)) 14px 8px;
  background: var(--bg);
}
.top h1 { font-size: 20px; flex: 1; min-width: 0; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.top .cod { font-weight: 600; font-variant-numeric: tabular-nums; }
.top .sp { flex: 1; }
.iconbtn {
  width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center;
  background: var(--surface); border: 1px solid var(--border); position: relative; color: var(--text);
  transition: transform var(--t-press) var(--ease-out);
}
.iconbtn.ghost { background: transparent; border-color: transparent; }
.iconbtn .n { position: absolute; top: -5px; right: -5px; }
.avatar {
  width: 36px; height: 36px; border-radius: 50%; background: var(--accent-soft); color: var(--accent-text);
  display: grid; place-items: center; font-size: 12px; font-weight: 600; flex: none;
}
.corpo { flex: 1; padding: 0 12px calc(var(--nav-h) + 84px); }
.corpo.sem-nav { padding-bottom: 24px; }
.corpo.com-barra { padding-bottom: calc(96px + var(--safe-bottom)); }

/* Contadores pequenos (badge) */
.n {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
  background: var(--danger); color: var(--on-danger); font-size: 11px; font-weight: 600;
  display: inline-grid; place-items: center; line-height: 1; font-variant-numeric: tabular-nums;
}
.n.amb { background: var(--warning); color: var(--on-warning); }

/* ── Faixa "hoje" ── chips que contam e filtram */
.hoje { display: flex; gap: 8px; padding: 2px 0 10px; overflow-x: auto; scrollbar-width: none; }
.hoje::-webkit-scrollbar { display: none; }
.chip {
  flex: none; display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 12px;
  border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--surface);
  font-size: 13px; white-space: nowrap; color: var(--text);
  transition: transform var(--t-press) var(--ease-out);
}
.chip .n { background: transparent; color: inherit; padding: 0; min-width: 0; font-size: 13px; }
.chip.red  { border-color: transparent; background: var(--danger-soft);  color: var(--danger); }
.chip.amb  { border-color: transparent; background: var(--warning-soft); color: var(--warning-text); }
.chip.blue { border-color: transparent; background: var(--info-soft);    color: var(--info); }
.chip.on   { background: var(--text); color: var(--bg); border-color: transparent; }
.chip:active { transform: scale(.97); }

/* Tira de setores: mesma tira rolável da faixa "hoje", com a contagem à direita. */
.setores { padding-bottom: 8px; }
.setores .chip .n { margin-left: 2px; opacity: .75; }
.setores .chip.on .n { opacity: .9; }

/* ── Segmentos ── */
.seg { display: flex; background: var(--surface-2); border: 1px solid var(--border); border-radius: 12px; padding: 3px; margin: 0 0 10px; }
.seg button {
  flex: 1; text-align: center; padding: 9px 4px; border-radius: 9px; font-size: 13px; color: var(--text-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 40px;
}
.seg button.on { background: var(--surface); color: var(--text); box-shadow: var(--elev-1); font-weight: 600; }
:root:not([data-theme="light"]) .seg button.on { background: rgba(255,255,255,.10); }
@media (prefers-color-scheme: light) { :root:not([data-theme="dark"]) .seg button.on { background: var(--surface); } }

/* ── Cartão de demanda ── */
.lista { display: flex; flex-direction: column; gap: 10px; }
.dem {
  position: relative; display: block; width: 100%; text-align: left;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card);
  padding: 11px 12px 11px 16px; box-shadow: var(--elev-1); overflow: hidden;
  transition: transform var(--t-press) var(--ease-out);
}
.dem:active { transform: scale(.985); }
.dem::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px; background: var(--border); }
.dem.red::before  { background: var(--danger); }
.dem.amb::before  { background: var(--warning); }
.dem.ok::before   { background: var(--accent); }
.dem.done { opacity: .62; }
.dem .l1 { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; font-size: 12px; color: var(--text-muted); margin-bottom: 4px; }
.dem .l1 .cod { font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }
.dem .l1 .sp { flex: 1; }
.dem .tit { font-size: 14.5px; line-height: 1.32; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
.dem.unread .tit { font-weight: 600; }
/* O ponto de "novo" fica no canto; a linha 1 abre espaço para ele não cobrir a pílula. */
.dem.unread .l1 { padding-right: 16px; }
.dem .l3 { display: flex; align-items: center; gap: 10px; margin-top: 7px; font-size: 12px; color: var(--text-muted); }
.dem .l3 .who { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dem .l3 .who b { color: var(--text); }
.dem .cta { margin-top: 9px; display: flex; flex-wrap: wrap; gap: 6px; }
.dem .cta .btn { flex: 1; }
.dot-new { position: absolute; right: 10px; top: 12px; width: 8px; height: 8px; border-radius: 50%; background: var(--info); box-shadow: 0 0 0 3px var(--info-soft); }
.dot-new.done { background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.dot-new.not_done { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-soft); }

.pill {
  display: inline-flex; align-items: center; height: 22px; padding: 0 9px; border-radius: var(--r-pill);
  font-size: 11.5px; font-weight: 600; white-space: nowrap;
}
.pill.overdue, .pill.not_done { background: var(--danger-soft);  color: var(--danger); }
.pill.expiring, .pill.tomorrow { background: var(--warning-soft); color: var(--warning-text); }
.pill.done  { background: var(--accent-soft);  color: var(--accent-text); }
.pill.open  { background: var(--surface-2); color: var(--text-muted); border: 1px solid var(--border); }
.pill.blue  { background: var(--info-soft); color: var(--info); }
.pill.cancelled { background: var(--surface-2); color: var(--text-muted); }

.prio { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.prio.urgente { background: var(--danger);  box-shadow: 0 0 0 3px var(--danger-soft); }
.prio.alta    { background: var(--warning); box-shadow: 0 0 0 3px var(--warning-soft); }
.prio.normal  { background: var(--border); }

.meta { display: inline-flex; align-items: center; gap: 3px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.meta.ok { color: var(--accent-text); }
.meta.blue { color: var(--info); }

/* ── Botões ── alvos de 44px por padrão (P-031: é uma tela SÓ de toque) */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 16px; border-radius: 12px; font-size: 14px; font-weight: 600;
  border: 1px solid var(--border); background: var(--surface); color: var(--text);
  transition: transform var(--t-press) var(--ease-out), opacity var(--t-press);
}
.btn:active { transform: scale(.97); }
.btn.sm { min-height: 38px; font-size: 13px; padding: 0 12px; border-radius: 10px; }
.btn.pri, .btn.sucesso { background: var(--accent); color: var(--on-accent); border-color: transparent; }
.btn.primaria { background: var(--accent); color: var(--on-accent); border-color: transparent; }
.btn.alerta { background: var(--warning-soft); color: var(--warning-text); border-color: transparent; }
.btn.destrutiva { background: var(--danger-soft); color: var(--danger); border-color: transparent; }
.btn.full { width: 100%; }
.btn.ghost { border-color: transparent; background: transparent; color: var(--text-muted); }
.btn:disabled { opacity: .45; transform: none; cursor: default; }
.btn .ic.sm { width: 18px; height: 18px; }

/* ── Barra inferior ── */
.nav {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 6;
  display: grid; grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--border); background: var(--bg);
  padding: 6px 4px calc(8px + var(--safe-bottom)); height: var(--nav-h);
}
.nav button { display: flex; flex-direction: column; align-items: center; gap: 3px; font-size: 10.5px; color: var(--text-muted); position: relative; padding-top: 4px; }
.nav button.on { color: var(--accent-text); }
.nav button .n { position: absolute; top: -2px; left: calc(50% + 6px); }
.fab {
  position: fixed; right: 14px; bottom: calc(var(--nav-h) + 14px); z-index: 6;
  width: 56px; height: 56px; border-radius: 18px; background: var(--accent); color: var(--on-accent);
  display: grid; place-items: center; box-shadow: var(--elev-2);
  transition: transform var(--t-press) var(--ease-out);
}
.fab:active { transform: scale(.94); }
.fab .ic { width: 26px; height: 26px; stroke-width: 2.5; }

/* ── Estados da lista ── */
.vazio { text-align: center; color: var(--text-muted); padding: 40px 16px; font-size: 14px; }
.vazio b { display: block; color: var(--text); margin-bottom: 4px; }
.skel { height: 84px; border-radius: var(--r-card); background: var(--surface); border: 1px solid var(--border); }
@media (prefers-reduced-motion: no-preference) {
  .skel { animation: pulsa 1.2s ease-in-out infinite; }
  @keyframes pulsa { 50% { opacity: .5; } }
}
.aviso-rede { position: fixed; left: 12px; right: 12px; top: calc(8px + var(--safe-top)); z-index: 20; background: var(--warning-soft); color: var(--warning-text); border-radius: 12px; padding: 8px 12px; font-size: 13px; text-align: center; }

/* ── Detalhe ── */
.det .hero { padding: 4px 2px 8px; }
.det .hero .tit { font-size: 17px; line-height: 1.3; margin: 4px 0 8px; overflow-wrap: anywhere; }
.facts { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 8px 0 12px; }
.fact { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 8px 10px; font-size: 12px; color: var(--text-muted); min-width: 0; }
.fact b { display: block; font-size: 14px; color: var(--text); margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fact b.red { color: var(--danger); }
.fact b.amb { color: var(--warning-text); }
.sec { font-size: 11.5px; letter-spacing: .07em; text-transform: uppercase; color: var(--text-muted); margin: 14px 0 6px; display: flex; align-items: center; gap: 8px; }
.sec .sp { flex: 1; height: 1px; background: var(--border); }
.quote { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 9px 11px; font-size: 13.5px; white-space: pre-wrap; overflow-wrap: anywhere; }
.quote.ok  { border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
.quote.dan { border-color: color-mix(in srgb, var(--danger) 40%, transparent); }
.quote.blue { border-color: color-mix(in srgb, var(--info) 45%, transparent); background: var(--info-soft); }
.quote small { display: block; color: var(--text-muted); font-size: 11px; margin-bottom: 3px; white-space: normal; }
.quote + .quote { margin-top: 6px; }
.trava { font-size: 12px; color: var(--warning-text); background: var(--warning-soft); border-radius: 10px; padding: 7px 10px; margin: 0 12px 8px; }

.audio { display: flex; flex-direction: column; gap: 8px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 9px 10px; font-size: 12.5px; }
.audio .linha { display: flex; align-items: center; gap: 10px; }
.audio audio { flex: 1; min-width: 0; height: 36px; }
.audio .transc { color: var(--text); white-space: pre-wrap; font-size: 13px; }
.audio .transc.muted { color: var(--text-muted); }

.subs { display: flex; flex-direction: column; gap: 6px; }
.sub { display: flex; align-items: center; gap: 8px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 6px 8px 6px 11px; font-size: 13px; }
.sub .t { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.sub .t small { display: block; color: var(--text-muted); font-size: 11px; }
.sub .t small.red { color: var(--danger); }
.sub .t.strike { text-decoration: line-through; color: var(--text-muted); }
.sub .bx { width: 40px; height: 40px; border-radius: 10px; border: 1.5px solid var(--border); display: grid; place-items: center; color: var(--text-muted); flex: none; transition: transform var(--t-press) var(--ease-out); }
.sub .bx:active { transform: scale(.92); }
.sub .bx.ok { background: var(--accent); border-color: transparent; color: var(--on-accent); }
.sub .bx.no { background: var(--danger); border-color: transparent; color: var(--on-danger); }
.sub .bx.del { border-color: transparent; }

.conv { display: flex; flex-direction: column; gap: 6px; }
.msg { max-width: 90%; padding: 8px 11px; border-radius: 14px; font-size: 13px; background: var(--surface); border: 1px solid var(--border); white-space: pre-wrap; overflow-wrap: anywhere; }
.msg small { display: block; color: var(--text-muted); font-size: 10.5px; margin-bottom: 2px; white-space: normal; }
.msg.me { align-self: flex-end; background: var(--accent-soft); border-color: transparent; }

.anexos { display: flex; flex-wrap: wrap; gap: 6px; }
.anexo { display: inline-flex; align-items: center; gap: 6px; min-height: 40px; padding: 0 12px; border-radius: 10px; background: var(--surface); border: 1px solid var(--border); font-size: 12.5px; max-width: 100%; }
.anexo span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pessoas { display: flex; flex-wrap: wrap; gap: 6px; }
.pessoa { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 10px; border-radius: var(--r-pill); background: var(--surface-2); border: 1px solid var(--border); font-size: 12px; }
.rodape { color: var(--text-muted); font-size: 11.5px; margin-top: 14px; line-height: 1.6; }

.actbar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 6;
  padding: 10px 12px calc(12px + var(--safe-bottom)); border-top: 1px solid var(--border); background: var(--bg);
}
.actbar .linha { display: flex; gap: 8px; }
.actbar .btn { flex: 1; padding: 0 8px; min-width: 0; }
.actbar .btn span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.actbar .btn.ico { flex: none; width: 46px; padding: 0; }

/* ── Formulários ── */
.fld { margin-bottom: 14px; }
.fld > label, .fld .lbl { display: block; font-size: 11.5px; letter-spacing: .05em; text-transform: uppercase; color: var(--text-muted); margin-bottom: 6px; }
.fld .lbl small { text-transform: none; letter-spacing: 0; }
.in {
  display: flex; align-items: center; gap: 8px; width: 100%; min-height: 48px; padding: 10px 12px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-campo);
  font-size: 16px; /* ≥16px: o iOS não dá zoom ao focar (P-031) */
  color: var(--text); text-align: left;
}
.in.ph { color: var(--text-muted); }
.in .sp { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.in:focus-within { border-color: var(--accent-text); }
.in.erro { border-color: var(--danger); }
input.in, textarea.in, select.in { display: block; }
textarea.in { min-height: 96px; resize: vertical; line-height: 1.4; }
input[type="date"].in { appearance: none; -webkit-appearance: none; }
.in::placeholder { color: var(--text-muted); }
.chips { display: flex; gap: 6px; flex-wrap: wrap; }
.seg3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.seg3 button { text-align: center; padding: 10px 0; min-height: 44px; border-radius: 10px; border: 1px solid var(--border); background: var(--surface); font-size: 13px; }
.seg3 button.on { border-color: var(--accent-text); background: var(--accent-soft); color: var(--accent-text); font-weight: 600; }
.seg3 button.on.alta { border-color: var(--warning-text); background: var(--warning-soft); color: var(--warning-text); }
.seg3 button.on.urgente { border-color: var(--danger); background: var(--danger-soft); color: var(--danger); }
.more { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 12px 2px; border-top: 1px solid var(--border); color: var(--text-muted); font-size: 13px; text-align: left; min-height: 48px; }
.more b { color: var(--text); }
.more .ic { transition: transform var(--t-enter) var(--ease-out); }
.more.aberto .ic { transform: rotate(180deg); }
.rec { display: flex; align-items: center; gap: 10px; background: var(--surface); border: 1px dashed var(--border); border-radius: 12px; padding: 8px 10px; font-size: 12.5px; color: var(--text-muted); }
.rec .mic { width: 44px; height: 44px; border-radius: 50%; background: var(--danger-soft); color: var(--danger); display: grid; place-items: center; flex: none; }
.rec .mic.gravando { background: var(--danger); color: var(--on-danger); }
@media (prefers-reduced-motion: no-preference) { .rec .mic.gravando { animation: pulsa 1s ease-in-out infinite; } }
.rec .st { flex: 1; min-width: 0; }
.rec .st.erro { color: var(--danger); }
.rec audio { width: 100%; height: 36px; margin-top: 6px; }
.toggle { display: flex; align-items: center; justify-content: space-between; min-height: 48px; padding: 6px 12px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-campo); font-size: 14px; width: 100%; text-align: left; }
.toggle .sw { width: 44px; height: 26px; border-radius: 13px; background: var(--surface-2); border: 1px solid var(--border); position: relative; flex: none; transition: background var(--t-enter); }
.toggle .sw::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: var(--text-muted); transition: transform var(--t-enter) var(--ease-out); }
.toggle.on .sw { background: var(--accent); border-color: transparent; }
.toggle.on .sw::after { background: var(--on-accent); transform: translateX(18px); }
.msg-erro { color: var(--danger); font-size: 13px; margin: 6px 0 0; }
.copiloto { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.copiloto .chip { height: 32px; font-size: 12px; }
.preview { margin-top: 8px; }

/* Lista de opções (picker) */
.opcoes { display: flex; flex-direction: column; max-height: 55vh; overflow-y: auto; margin: 0 -14px; padding: 0 14px; }
.opcao { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 6px 4px; border-bottom: 1px solid var(--border); font-size: 14.5px; text-align: left; width: 100%; }
.opcao:last-child { border-bottom: 0; }
.opcao .t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.opcao .t small { display: block; color: var(--text-muted); font-size: 11.5px; }
.opcao .ck { width: 24px; height: 24px; border-radius: 7px; border: 1.5px solid var(--border); display: grid; place-items: center; flex: none; color: transparent; }
.opcao.on .ck { background: var(--accent); border-color: transparent; color: var(--on-accent); }

/* ── Sheet ── */
.dim { position: fixed; inset: 0; z-index: 30; background: rgba(2,8,16,.55); opacity: 0; transition: opacity var(--t-enter) var(--ease-out); }
.dim.on { opacity: 1; }
.sheet {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 31; max-height: 92dvh; display: flex; flex-direction: column;
  background: var(--sheet-bg); border-radius: 22px 22px 0 0; border-top: 1px solid var(--border);
  padding: 8px 14px calc(16px + var(--safe-bottom)); box-shadow: var(--elev-2);
  transform: translateY(100%); transition: transform var(--t-enter) var(--ease-out);
}
.sheet.on { transform: translateY(0); }
.sheet .grab { width: 40px; height: 4px; border-radius: 2px; background: var(--border); margin: 0 auto 12px; flex: none; }
.sheet h2 { font-size: 16px; margin: 0 0 12px; flex: none; }
.sheet .sc { overflow-y: auto; flex: 1; min-height: 0; }
.sheet .row { display: flex; gap: 8px; margin-top: 12px; flex: none; }
.sheet .row .btn { flex: 1; }
.sheet .row .btn.pri, .sheet .row .btn.sucesso, .sheet .row .btn.alerta, .sheet .row .btn.destrutiva { flex: 2; }
.menu { display: flex; flex-direction: column; }
.menu button { display: flex; align-items: center; gap: 12px; min-height: 50px; padding: 6px 4px; border-bottom: 1px solid var(--border); font-size: 14.5px; text-align: left; width: 100%; }
.menu button:last-child { border-bottom: 0; }
.menu button.destrutiva { color: var(--danger); }
.menu button.sucesso { color: var(--accent-text); }
.menu button.alerta { color: var(--warning-text); }
.menu button:disabled { opacity: .45; }
.menu .sub-info { font-size: 12px; color: var(--text-muted); padding: 4px 4px 8px; }

/* ── Login ── */
.login { flex: 1; display: flex; flex-direction: column; justify-content: center; padding: 0 22px 60px; max-width: 26rem; margin: 0 auto; width: 100%; }
.logo { width: 64px; height: 64px; border-radius: 20px; background: var(--accent); color: var(--on-accent); display: grid; place-items: center; margin-bottom: 18px; font-size: 26px; font-weight: 600; }
.login h1 { margin: 0 0 4px; font-size: 22px; }
.login p { color: var(--text-muted); font-size: 13.5px; margin-bottom: 20px; }
.login .dica { margin: 18px 0 0; font-size: 12px; }

/* ── Avisos ── */
.avisos { display: flex; flex-direction: column; gap: 8px; }
.av { display: flex; gap: 10px; width: 100%; text-align: left; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 10px 12px; font-size: 13px; }
.av .ico { width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; flex: none; background: var(--surface-2); color: var(--text-muted); }
.av .ico.blue { background: var(--info-soft); color: var(--info); }
.av .ico.ok   { background: var(--accent-soft); color: var(--accent-text); }
.av .ico.red  { background: var(--danger-soft); color: var(--danger); }
.av .ico.amb  { background: var(--warning-soft); color: var(--warning-text); }
.av .t { flex: 1; min-width: 0; }
.av .t small { display: block; color: var(--text-muted); font-size: 11.5px; overflow-wrap: anywhere; }
.av .t .d { color: var(--text-muted); font-size: 12px; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.av .when { font-size: 11px; color: var(--text-muted); white-space: nowrap; }
.av.new { border-color: color-mix(in srgb, var(--info) 45%, transparent); }

/* ── Convite para instalar ── */
.pwa-alvo:empty { display: none; }
.login-alvo { padding: 0 22px 24px; max-width: 26rem; margin: 0 auto; width: 100%; }
.convite { display: flex; align-items: center; gap: 10px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-card); padding: 10px 8px 10px 12px; margin-bottom: 10px; box-shadow: var(--elev-1); }
.convite > .ic { color: var(--accent-text); }
.convite .sp { flex: 1; min-width: 0; font-size: 13px; line-height: 1.3; }
.convite .sp b { display: block; }
.convite .sp small { color: var(--text-muted); font-size: 11.5px; }
.convite .btn.sm { flex: none; }
.convite .iconbtn { width: 36px; height: 36px; flex: none; }
.passos { padding-left: 1.3rem; font-size: 14px; display: flex; flex-direction: column; gap: 8px; margin: 4px 0 12px; }
.nota { font-size: 13px; color: var(--text-muted); margin: 0 0 10px; line-height: 1.45; }

/* ── Toast ── */
#toasts { position: fixed; left: 12px; right: 12px; bottom: calc(var(--nav-h) + 12px); z-index: 40; display: flex; flex-direction: column; gap: 6px; pointer-events: none; }
.toast { background: var(--text); color: var(--bg); border-radius: 12px; padding: 10px 14px; font-size: 13.5px; box-shadow: var(--elev-2); pointer-events: auto; max-width: 100%; overflow-wrap: anywhere; }
.toast.erro { background: var(--danger); color: var(--on-danger); }
.toast.ok { background: var(--accent); color: var(--on-accent); }
.banner { position: fixed; left: 12px; right: 12px; top: calc(8px + var(--safe-top)); z-index: 20; display: flex; align-items: center; gap: 10px; background: var(--info-soft); color: var(--text); border: 1px solid color-mix(in srgb, var(--info) 45%, transparent); border-radius: 12px; padding: 8px 12px; font-size: 13px; }
.banner .btn { margin-left: auto; }

@media (hover: hover) {
  .btn:not(:disabled):hover, .iconbtn:hover, .chip:hover { filter: brightness(1.06); }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; }
}
/* Tela larga (tablet, desktop de curiosidade): coluna centrada, nada estica */
@media (min-width: 700px) {
  .tela { max-width: 40rem; margin: 0 auto; width: 100%; }
  .nav, .actbar, .fab { max-width: 40rem; margin: 0 auto; }
  .fab { left: calc(50% + 20rem - 70px); right: auto; }
  #toasts, .sheet { max-width: 40rem; margin: 0 auto; }
}
