
:root{
  --bg:#f0f1f5; --sup:#fff; --sup2:#f7f8fa; --sup3:#fafbfc;
  --bd:#d9dce2; --bd2:#eceef2;
  --tx:#1c2436; --tx2:#475569; --tf:#64748b; --tf2:#5f6b7a;
  --pri:#5e9f1e; --pri-esc:#4d8418; --pri-sol:#436e15; --pri-sol-h:#35590f;
  --pri-fr:#eef6e4; --pri-bd:#cfe6b3;
  --ok-bg:#e7f4e4; --ok-tx:#2f6d1d; --ok-bd:#c9e4bd;
  --am-bg:#fdf1dc; --am-tx:#7a4e05; --am-bd:#f2ddb6;
  --vm-bg:#fdeaea; --vm-tx:#a02323; --vm-bd:#f5cccc;
  --az-bg:#e8eefc; --az-tx:#2b4d9e; --az-bd:#ccd9f5;
  --cz-bg:#eef0f4; --cz-tx:#475569; --cz-bd:#dde1e8;
  --anel:#6ea63a;
  --r:8px; --rp:6px;
  --som:0 1px 2px rgba(16,24,40,.06);
  --som2:0 1px 3px rgba(16,24,40,.10), 0 1px 2px rgba(16,24,40,.06);
  --som3:0 8px 24px rgba(16,24,40,.10), 0 2px 6px rgba(16,24,40,.06);
  --fonte:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;

  --sobre-pri:#fff; --sobre-pri-2:#e2f0d2; --pri-tx:#3d6613; --av-bg:#dfeacd; --av-bd:#cbe0b0; --ic:#8a94a4; --ic2:#b6bdc9; --bd-forte:#c5cad3; --sup-press:#eef0f4; --foco:rgba(94,159,30,.16); --rolagem:rgba(15,23,42,.14); --veu:rgba(16,24,40,.44); --vm-forte:#c8362f; --vm-tx2:#8a2020; --am-forte:#d59a2a; --am-tx2:#6b4405; --am-fundo:#fffaf1; --az-forte:#7d93c4; --az-tx2:#33437a; --ok-tx2:#2a5f1a; --graf:#b3d68c; --graf-h:#9ccb6c; --graf-linha:#97a5b4; --login-bg:#e4eedb; --mer-sub:#dcecca; --mer-feito:#fbfefa; --mer-realce:rgba(255,255,255,.18); --pri-noite:#2f5410;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){color-scheme:dark;--bg:#0e1116;--sup:#161a21;--sup2:#1c212a;--sup3:#181c24;--bd:#2b313c;--bd2:#232833;--tx:#e7eaf0;--tx2:#b8c0cd;--tf:#8f99aa;--tf2:#98a2b3;--pri:#7cc242;--pri-esc:#8fd151;--pri-sol:#46791a;--pri-sol-h:#55901f;--pri-fr:#1e2a15;--pri-bd:#3a5423;--ok-bg:#15261a;--ok-tx:#94d6a0;--ok-bd:#28452f;--am-bg:#2a2112;--am-tx:#f0c274;--am-bd:#4d3b17;--vm-bg:#2d1618;--vm-tx:#f29c9c;--vm-bd:#532628;--az-bg:#15203a;--az-tx:#a2baf0;--az-bd:#2a3a66;--cz-bg:#1f242d;--cz-tx:#b8c0cd;--cz-bd:#2e3541;--anel:#8fd151;--som:0 1px 2px rgba(0,0,0,.45);--som2:0 1px 3px rgba(0,0,0,.5), 0 1px 2px rgba(0,0,0,.4);--som3:0 8px 24px rgba(0,0,0,.55), 0 2px 6px rgba(0,0,0,.4);--sobre-pri:#fff;--sobre-pri-2:#d8edc2;--pri-tx:#a8d974;--av-bg:#243119;--av-bd:#3a5423;--ic:#7f899a;--ic2:#5e6778;--bd-forte:#3b4351;--sup-press:#232933;--foco:rgba(124,194,66,.28);--rolagem:rgba(0,0,0,.55);--veu:rgba(0,0,0,.62);--vm-forte:#e25757;--vm-tx2:#f6b3b3;--am-forte:#e3a83d;--am-tx2:#f4cf88;--am-fundo:#261f12;--az-forte:#8ca4da;--az-tx2:#b8caf3;--ok-tx2:#a2ddad;--graf:#5e8f33;--graf-h:#76a94a;--graf-linha:#6c7789;--login-bg:#131a11;--pri-noite:#27450d;--mer-sub:#cfe3b8;--mer-feito:#17201a;--mer-realce:rgba(255,255,255,.18);}}
:root[data-theme="dark"]{color-scheme:dark;--bg:#0e1116;--sup:#161a21;--sup2:#1c212a;--sup3:#181c24;--bd:#2b313c;--bd2:#232833;--tx:#e7eaf0;--tx2:#b8c0cd;--tf:#8f99aa;--tf2:#98a2b3;--pri:#7cc242;--pri-esc:#8fd151;--pri-sol:#46791a;--pri-sol-h:#55901f;--pri-fr:#1e2a15;--pri-bd:#3a5423;--ok-bg:#15261a;--ok-tx:#94d6a0;--ok-bd:#28452f;--am-bg:#2a2112;--am-tx:#f0c274;--am-bd:#4d3b17;--vm-bg:#2d1618;--vm-tx:#f29c9c;--vm-bd:#532628;--az-bg:#15203a;--az-tx:#a2baf0;--az-bd:#2a3a66;--cz-bg:#1f242d;--cz-tx:#b8c0cd;--cz-bd:#2e3541;--anel:#8fd151;--som:0 1px 2px rgba(0,0,0,.45);--som2:0 1px 3px rgba(0,0,0,.5), 0 1px 2px rgba(0,0,0,.4);--som3:0 8px 24px rgba(0,0,0,.55), 0 2px 6px rgba(0,0,0,.4);--sobre-pri:#fff;--sobre-pri-2:#d8edc2;--pri-tx:#a8d974;--av-bg:#243119;--av-bd:#3a5423;--ic:#7f899a;--ic2:#5e6778;--bd-forte:#3b4351;--sup-press:#232933;--foco:rgba(124,194,66,.28);--rolagem:rgba(0,0,0,.55);--veu:rgba(0,0,0,.62);--vm-forte:#e25757;--vm-tx2:#f6b3b3;--am-forte:#e3a83d;--am-tx2:#f4cf88;--am-fundo:#261f12;--az-forte:#8ca4da;--az-tx2:#b8caf3;--ok-tx2:#a2ddad;--graf:#5e8f33;--graf-h:#76a94a;--graf-linha:#6c7789;--login-bg:#131a11;--pri-noite:#27450d;--mer-sub:#cfe3b8;--mer-feito:#17201a;--mer-realce:rgba(255,255,255,.18);}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg)}
.pg{font:14px/1.5 var(--fonte);color:var(--tx);-webkit-font-smoothing:antialiased}
:where(.pg) :where(h1,h2,h3,h4,p,figure){margin:0}
:where(.pg) :where(ul){margin:0;padding:0;list-style:none}
:where(.pg) :where(a){color:inherit;text-decoration:none}
:where(.pg) :where(button,input,select,textarea){font:inherit;color:inherit}
.pg :focus-visible{outline:2px solid var(--anel);outline-offset:2px;border-radius:var(--rp)}
.pg .num,.pg .tab td.num,.pg .tab th.num{font-variant-numeric:tabular-nums}
.pg .tabnum{font-variant-numeric:tabular-nums}

/* ── esqueleto: lateral 240 + topo compacto ───────────────────────────────────────── */
.app{display:flex;align-items:flex-start;min-height:calc(100vh - 34px)}
.lateral{flex:0 0 240px;width:240px;background:var(--sup);border-right:1px solid var(--bd);
  position:sticky;top:0;max-height:100vh;display:flex;flex-direction:column;overflow:auto}
.marca{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--bd2)}
/* O quadrado da marca cai na mesma regra dos botões sólidos: verde chapado com texto
   branco em cima usa --pri-sol. O verde da marca (--pri) só dá 3,25:1 com o "n" branco,
   e AA pede 4,5 — em --pri-sol dá 6,0:1. O --pri continua sendo o verde de identidade
   (item ativo do menu, barra do mês corrente, chave ligada, anel de foco). */
.marca-q{width:30px;height:30px;border-radius:8px;background:var(--pri-sol);color:var(--sobre-pri);display:grid;
  place-items:center;font-weight:800;font-size:16px;letter-spacing:-.04em;flex:none;
  box-shadow:inset 0 -1px 0 rgba(0,0,0,.12)}
.marca-n{font-weight:700;font-size:15px;letter-spacing:-.02em;line-height:1.15}
.marca-s{font-size:11px;color:var(--tf);line-height:1.2;margin-top:1px}
.nav{padding:10px 10px 4px;flex:1}
.nav-g{padding:12px 8px 5px;font-size:10.5px;font-weight:700;letter-spacing:.07em;
  text-transform:uppercase;color:var(--tf2)}
.nav-g:first-child{padding-top:4px}
.nav-i{display:flex;align-items:center;gap:9px;height:34px;padding:0 9px;border-radius:var(--rp);
  color:var(--tx2);font-weight:500;margin-bottom:1px;transition:background .12s,color .12s}
.nav-i svg{flex:none;color:var(--ic);transition:color .12s}
.nav-i:hover{background:var(--sup2);color:var(--tx)}
.nav-i:hover svg{color:var(--tx2)}
.nav-i.on{background:var(--pri-fr);color:var(--pri-tx);font-weight:600;box-shadow:inset 2px 0 0 var(--pri)}
.nav-i.on svg{color:var(--pri-esc)}
.nav-i.off{color:var(--tf);cursor:default}
.nav-i.off svg{color:var(--ic2)}
.nav-selo{margin-left:auto;min-width:19px;height:19px;padding:0 5px;border-radius:99px;
  background:var(--cz-bg);color:var(--cz-tx);font-size:11px;font-weight:700;display:grid;
  place-items:center;font-variant-numeric:tabular-nums}
.nav-i.on .nav-selo{background:var(--sup);color:var(--pri-sol)}
.nav-selo.q{background:var(--am-bg);color:var(--am-tx)}
.lat-pe{border-top:1px solid var(--bd2);padding:10px;background:var(--sup3)}
.lat-user{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:var(--rp)}
.lat-user:hover{background:var(--sup2)}
.av{width:30px;height:30px;border-radius:99px;background:var(--av-bg);color:var(--pri-tx);display:grid;
  place-items:center;font-weight:700;font-size:13px;flex:none;border:1px solid var(--av-bd)}
.ident{min-width:0}
.ident b{font-size:13px;font-weight:600;display:block;line-height:1.25}
.ident i{font-style:normal;font-size:11.5px;color:var(--tf);line-height:1.25;display:block}

/* max-width:100% é o que faz a rolagem da .tab-cx valer: sem ele uma tabela larga empurra
   a coluna inteira e quem rola é a PÁGINA, não a tabela. */
.principal{flex:1;min-width:0;max-width:100%;display:flex;flex-direction:column}
.topo{height:52px;background:var(--sup);border-bottom:1px solid var(--bd);display:flex;
  align-items:center;gap:14px;padding:0 20px;position:sticky;top:0;z-index:30}
.trilha{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--tf);min-width:0}
.trilha b{color:var(--tx);font-weight:600}
.trilha svg{color:var(--ic2);flex:none}
.topo-dir{margin-left:auto;display:flex;align-items:center;gap:12px}
.topo-data{font-size:12.5px;color:var(--tf);white-space:nowrap}
.icobtn{width:34px;height:34px;border-radius:var(--rp);border:1px solid transparent;background:none;
  display:grid;place-items:center;color:var(--tf);cursor:pointer;position:relative}
.icobtn:hover{background:var(--sup2);border-color:var(--bd);color:var(--tx)}
.pt{position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:99px;background:var(--vm-forte);
  border:1.5px solid var(--sup)}
.topo-sep{width:1px;height:24px;background:var(--bd)}
.topo-user{display:flex;align-items:center;gap:9px}
.conteudo{padding:20px;max-width:1460px;width:100%}

/* ── cabeçalho de página ──────────────────────────────────────────────────────────── */
.cab{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.cab h1{font-size:21px;font-weight:700;letter-spacing:-.02em;line-height:1.2}
.cab p{font-size:13px;color:var(--tf2);margin-top:3px}
.cab-acoes{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}

/* ── botões ───────────────────────────────────────────────────────────────────────── */
.bt{height:36px;padding:0 13px;border-radius:var(--rp);border:1px solid var(--bd);background:var(--sup);
  color:var(--tx);font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:7px;
  cursor:pointer;white-space:nowrap;box-shadow:var(--som);transition:background .12s,border-color .12s}
.bt svg{color:var(--tf)}
.bt:hover{background:var(--sup2);border-color:var(--bd-forte)}
.bt:active{background:var(--sup-press)}
.bt-p{background:var(--pri-sol);border-color:var(--pri-sol);color:var(--sobre-pri);box-shadow:var(--som2)}
.bt-p svg{color:var(--sobre-pri-2)}
.bt-p:hover{background:var(--pri-sol-h);border-color:var(--pri-sol-h)}
.bt-f{border-color:transparent;background:none;box-shadow:none;color:var(--tx2)}
.bt-f:hover{background:var(--sup2);border-color:var(--bd)}
.bt-pq{height:30px;padding:0 10px;font-size:12.5px}
.bt-g{height:44px;padding:0 18px;font-size:14px}
.bt[disabled]{opacity:.55;cursor:not-allowed}

/* ── cartões ──────────────────────────────────────────────────────────────────────── */
.ct{background:var(--sup);border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--som)}
.ct-cab{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--bd2)}
.ct-cab h2{font-size:14px;font-weight:650;letter-spacing:-.01em}
/* Título que leva a algum lugar. A seta é o que diz isso antes do passar do mouse — sem
   ela, um título sublinhado no hover é descoberta por acidente. */
.ct-tit{display:inline-flex;align-items:center;gap:5px}
/* No painel, cada cartão tem a altura do que ele tem a dizer. Esticados até a altura do
   maior da fileira, uma pergunta sem resposta virava 300px de branco. */
.pnl .grade-auto{align-items:start}
/* Matriz e lista de textos ocupam a fileira inteira: espremidas em 360px, as colunas de
   contagem saíam da tela e a tabela rolava de lado escondendo o que interessa. */
.pnl .pnl-largo{grid-column:1/-1}
.ct-tit svg{color:var(--tf);transition:transform .12s}
.ct-tit:hover{color:var(--pri-sol);text-decoration:underline;text-underline-offset:3px}
.ct-tit:hover svg{color:var(--pri-sol);transform:translateX(2px)}
.ct-cab .sub{font-size:12px;color:var(--tf)}
.ct-cab .dir{margin-left:auto;display:flex;gap:7px;align-items:center}
.ct-corpo{padding:14px}
.ct-pe{padding:10px 14px;border-top:1px solid var(--bd2);background:var(--sup3);
  border-radius:0 0 var(--r) var(--r);display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--tf)}

/* ── distintivos ──────────────────────────────────────────────────────────────────── */
.se{display:inline-flex;align-items:center;gap:5px;height:21px;padding:0 8px;border-radius:99px;
  font-size:11.5px;font-weight:600;line-height:1;white-space:nowrap;border:1px solid transparent}
.se::before{content:"";width:6px;height:6px;border-radius:99px;background:currentColor;opacity:.75}
.se.sd::before{display:none}
.se-ok{background:var(--ok-bg);color:var(--ok-tx);border-color:var(--ok-bd)}
.se-am{background:var(--am-bg);color:var(--am-tx);border-color:var(--am-bd)}
.se-vm{background:var(--vm-bg);color:var(--vm-tx);border-color:var(--vm-bd)}
.se-az{background:var(--az-bg);color:var(--az-tx);border-color:var(--az-bd)}
.se-cz{background:var(--cz-bg);color:var(--cz-tx);border-color:var(--cz-bd)}
.se-vd{background:var(--pri-fr);color:var(--pri-tx);border-color:var(--pri-bd)}

/* ── formulário ───────────────────────────────────────────────────────────────────── */
.campo{display:flex;flex-direction:column;gap:5px;min-width:0}
.campo>label,.rot{font-size:12px;font-weight:600;color:var(--tx2)}
.ent{width:100%;padding:0 11px;border:1px solid var(--bd);border-radius:var(--rp);
  background:var(--sup);font-size:13.5px;transition:border-color .12s,box-shadow .12s}
/* A altura fixa é dos campos de UMA linha. Ela estava em .ent e valia para a textarea
   também: um rows="5" virava uma fresta de 36px com um texto de cinco linhas rolando lá
   dentro. Quatro módulos já tinham reescrito a regra por conta própria — quando o mesmo
   remendo aparece quatro vezes, o defeito é da regra de baixo. */
input.ent,select.ent{height:36px}
textarea.ent{min-height:74px;padding:9px 11px;line-height:1.5;resize:vertical}
.ent::placeholder{color:var(--tf)}
.ent:hover{border-color:var(--bd-forte)}
/* O seletor de arquivo: um label com cara de botão comandando um input escondido, porque o
   botão nativo traz o rótulo no idioma do navegador ("Choose File" numa tela em português) e
   nenhum CSS troca esse texto. O nome do arquivo fica ao lado — é o que se precisa conferir. */
.arq-nome{margin-left:10px}
.ent:focus{outline:none;border-color:var(--pri);box-shadow:0 0 0 3px var(--foco)}
.ent[readonly]{background:var(--sup2);color:var(--tx2)}
select.ent{appearance:none;padding-right:30px;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 8px center;background-size:15px}
.busca-cx{position:relative;flex:1;min-width:180px}
.busca-cx svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--tf);pointer-events:none}
.busca-cx .ent{padding-left:32px}
.ajuda{font-size:11.5px;color:var(--tf)}
.vazio-cp{font-size:12px;color:var(--tf2);font-style:italic}

.chave{display:inline-flex;align-items:center;gap:9px;cursor:pointer;user-select:none}
.chave input{position:absolute;opacity:0;width:0;height:0}
.chave-tr{width:38px;height:22px;border-radius:99px;background:var(--bd-forte);position:relative;
  transition:background .15s;flex:none}
.chave-tr::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:99px;
  background:var(--sobre-pri);box-shadow:0 1px 2px rgba(16,24,40,.3);transition:transform .15s}
.chave input:checked+.chave-tr{background:var(--pri)}
.chave input:checked+.chave-tr::after{transform:translateX(16px)}
.chave input:focus-visible+.chave-tr{outline:2px solid var(--anel);outline-offset:2px}
.chave b{font-size:13px;font-weight:600}
.chave i{font-style:normal;font-size:12px;color:var(--tf)}

.opts{display:flex;flex-wrap:wrap;gap:7px}
/* Marca redonda quando a escolha é EXCLUSIVA. O quadrado com tique diz "marque quantos
   quiser"; num par à vista/a prazo isso é mentira, e a pessoa tenta marcar os dois. */
.op:has(input[type=radio]) .op-mk{border-radius:50%}
.op:has(input[type=radio]) .op-mk svg{display:none}
.op:has(input[type=radio]:checked) .op-mk{background:var(--sup);border-color:var(--pri);
  box-shadow:inset 0 0 0 3.5px var(--pri)}
/* A conferência do total da nota: soma dos itens × o que está no papel. */
.nf-conf{display:flex;flex-wrap:wrap;gap:8px 22px;align-items:center;margin-top:10px;
  padding:11px 13px;border:1px solid var(--bd);border-radius:9px;background:var(--sup2);font-size:13px}
.nf-conf b{font-variant-numeric:tabular-nums;margin-left:6px}
.nf-dif{margin-left:auto;font-weight:650;font-size:12.5px;padding:3px 9px;border-radius:99px}
.nf-dif.ok{background:var(--ok-bg);color:var(--ok-tx)}
.nf-dif.ruim{background:var(--vm-bg);color:var(--vm-tx)}
.nf-dif.mudo{background:transparent;color:var(--tf);font-weight:500}
/* O envio de anexo: o seletor de arquivo do navegador é feio em todo lugar, e o único
   jeito de trocá-lo é escondê-lo atrás de um rótulo que já parece botão do kit. */
.anx{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
.anx input[type=file]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.anx .anx-rot{flex:1;min-width:190px}
.anx-nomes{font-size:12.5px;color:var(--tf);flex-basis:100%}
/* Os itens do arquivo da nota que ainda não têm produto nosso — um cartão por item. */
.pend{border:1px solid var(--bd);border-radius:10px;padding:11px 12px;margin-bottom:9px;background:var(--sup)}
.pend-cab{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:9px}
.pend-cab b{font-size:13.5px;font-weight:650;color:var(--tx)}
.pend-cab .sub{font-size:12px}
.pend-qtd{margin-left:auto;font-size:12.5px;color:var(--tx2);font-variant-numeric:tabular-nums;white-space:nowrap}
.pend-lin{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.pend-lin select.ent{flex:1 1 220px;min-width:0}
.pend-fator{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--tx2);white-space:nowrap}
.pend-fator input.ent{width:78px;height:32px;text-align:right}
.pend-acoes{display:flex;gap:7px;justify-content:flex-end;margin-top:9px}
.op{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 11px;border:1px solid var(--bd);
  border-radius:99px;font-size:13px;cursor:pointer;background:var(--sup);transition:.12s}
.op input{position:absolute;opacity:0;width:0;height:0}
.op:hover{background:var(--sup2)}
.op:has(input:checked){background:var(--pri-fr);border-color:var(--pri-bd);color:var(--pri-tx);font-weight:600}
.op:has(input:focus-visible){outline:2px solid var(--anel);outline-offset:2px}
.op-mk{width:14px;height:14px;border:1.5px solid var(--bd-forte);border-radius:4px;flex:none;display:grid;
  place-items:center;background:var(--sup)}
.op:has(input:checked) .op-mk{background:var(--pri);border-color:var(--pri)}
.op-mk svg{opacity:0;color:var(--sobre-pri)}
.op:has(input:checked) .op-mk svg{opacity:1}

.fichas{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.fi{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 6px 0 10px;border-radius:99px;
  background:var(--sup2);border:1px solid var(--bd);font-size:12.5px;font-weight:500}
.fi button{width:18px;height:18px;border:0;background:none;padding:0;border-radius:99px;color:var(--tf);
  display:grid;place-items:center;cursor:pointer}
.fi button:hover{background:var(--vm-bg);color:var(--vm-tx)}

/* ── lista que cresce (merendeiras, telefones) ────────────────────────────────────── */
.lista{display:flex;flex-direction:column;gap:8px}
.lista:empty{display:none}
.lista-lin{display:grid;grid-template-columns:1fr 180px 34px;gap:8px;align-items:center}
.lista-lin .bt-x{width:34px;height:36px;padding:0;display:grid;place-items:center;border:1px solid var(--bd);
  border-radius:var(--rp);background:var(--sup);color:var(--tf);cursor:pointer;flex:none}
.lista-lin .bt-x:hover{background:var(--vm-bg);border-color:var(--vm-bd);color:var(--vm-tx)}
.lista-vazia{font-size:12.5px;color:var(--tf);padding:9px 11px;border:1px dashed var(--bd);
  border-radius:var(--rp);background:var(--sup2)}
@media (max-width:560px){ .lista-lin{grid-template-columns:1fr 34px} .lista-lin .ent:nth-child(2){grid-column:1} }

/* Os botões de uma linha de tabela, juntos e sem quebrar. Soltos, o "excluir" caía para a
   linha de baixo e ficava embaixo do lápis da pergunta seguinte. */
.acoes-linha{display:flex;gap:4px;align-items:center;flex-wrap:nowrap}
.acoes-linha form{display:inline-flex}

/* ── formulário: uma pergunta por cartão ──────────────────────────────────────────────
   É o desenho dos formulários da web que todo mundo já respondeu — Google Forms, Microsoft
   Forms — com as nossas cores. Quarenta e duas perguntas empilhadas numa caixa só viram uma
   parede de campos: quem preenche perde o lugar e quem revisa não sabe em que parte da
   visita está. Cada pergunta num cartão resolve isso, e é o único desenho que a merendeira
   e a nutricionista já conhecem de outro lugar.

   A coluna estreita AQUI é de propósito, e não briga com a regra de ocupar a largura toda:
   uma linha de 1400px com um "Sim/Não" perdido na ponta direita é ilegível. Tela de
   CADASTRO continua largura cheia; questionário se lê em coluna. */
.fm{max-width:820px;margin:0 auto;display:flex;flex-direction:column;gap:12px}

/* O cartão de abertura, com a faixa de cor no topo — é o que diz, antes de ler, "isto é um
   formulário para responder", e não mais uma tela do sistema. */
.fm-cab{background:var(--sup);border:1px solid var(--bd);border-radius:var(--r);
  box-shadow:var(--som);overflow:hidden}
.fm-cab::before{content:"";display:block;height:9px;background:var(--pri-sol)}
.fm-cab-in{padding:19px 24px}
.fm-cab h2{font-size:23px;font-weight:700;letter-spacing:-.02em;line-height:1.25}
.fm-cab .desc{font-size:13.5px;color:var(--tf2);margin-top:6px;line-height:1.5}
.fm-cab-pe{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-top:15px;padding-top:13px;border-top:1px solid var(--bd2)}
.fm-cab-pe .un{min-width:0}
.fm-cab-pe .un b{display:block;font-size:14px;font-weight:650;line-height:1.3}
.fm-cab-pe .un i{font-style:normal;font-size:12px;color:var(--tf);display:block;margin-top:1px}
.fm-cab-pe .dir{margin-left:auto;display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.fm-nota-obr{font-size:12px;color:var(--vm-tx);font-weight:600;white-space:nowrap}

/* ── o cartão de uma pergunta ──────────────────────────────────────────────────────── */
.fm-q{position:relative;background:var(--sup);border:1px solid var(--bd);border-radius:var(--r);
  box-shadow:var(--som);padding:17px 22px}
/* A barra colorida na esquerda: "você está aqui" numa página de quarenta cartões iguais. */
.fm-q::before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:3px;
  border-radius:var(--r) 0 0 var(--r);background:transparent;transition:background .12s}
.fm-q:focus-within{border-color:var(--pri-bd);box-shadow:var(--som2)}
.q-cab{display:flex;gap:11px;align-items:flex-start}
.q-num{width:23px;height:23px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:var(--cz-bg);color:var(--tf);font-size:11.5px;font-weight:700;margin-top:1px;
  font-variant-numeric:tabular-nums;transition:background .12s,color .12s}
/* Respondida: o número fica verde. É como se acha o que ainda falta numa lista de 42 sem
   ter de reler pergunta por pergunta. */
.fm-q[data-feita] .q-num{background:var(--pri-fr);color:var(--pri-sol);
  box-shadow:inset 0 0 0 1px var(--pri-bd)}
.q-tit{min-width:0;flex:1}
.q-tit>label{display:block;font-size:15px;font-weight:600;color:var(--tx);line-height:1.4;
  letter-spacing:-.005em}
.q-tit .ajuda{display:block;margin-top:3px;line-height:1.45}
.q-corpo{margin:12px 0 0 34px}
.obr{color:var(--vm-tx);font-weight:800}
/* O campo de número e o de data não ganham nada com 700px de largura — ficam piores: o olho
   perde a ligação entre o rótulo e o valor. */
.fm-q .campo-lado .ent,.fm-q input[type=date].ent{max-width:200px}
/* Nome de merendeira não precisa de 700px de campo, e um campo desse tamanho ainda promete
   uma resposta longa que a pergunta não quer. A textarea continua inteira. */
.fm-q input.ent{max-width:440px}
.fm-q .mtz{border-color:var(--bd2)}
@media (max-width:560px){ .fm-q{padding:15px 15px} .q-corpo{margin-left:0} }

/* A pergunta que só apareceu por causa de uma resposta anterior. Sem a tarja, quem revisa
   não entende por que o formulário de uma escola tem dez campos a mais que o de outra. */
.q-cond::before{background:var(--am-bd)}
.q-cond .q-num{background:var(--am-bg);color:var(--am-tx)}
.q-marca{display:inline-flex;align-items:center;gap:5px;margin-top:5px;font-size:11px;
  font-weight:600;color:var(--am-tx)}
/* Depois das duas de cima: quem está respondendo AGORA manda na cor da barra. */
.fm-q:focus-within::before{background:var(--pri)}

/* ── o cabeçalho de um bloco ───────────────────────────────────────────────────────────
   No papel a visita é dividida em partes, e é assim que a nutricionista fala delas ("o de
   armazenamento ficou não conforme"). */
.fm-sec{background:var(--pri-fr);border:1px solid var(--pri-bd);border-radius:var(--r);
  padding:14px 22px;margin-top:6px}
.fm-sec:first-child{margin-top:0}
.fm-sec .n{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--pri-sol);display:block}
.fm-sec h3{font-size:17px;font-weight:700;letter-spacing:-.015em;margin-top:2px;line-height:1.3}
.fm-sec .c{font-size:12.5px;color:var(--tx2);margin-top:2px;display:block}

/* ── as opções ─────────────────────────────────────────────────────────────────────────
   Em coluna, uma linha por opção, com a linha inteira valendo como alvo. Em pastilha lado a
   lado, "Sim" e "Não" ficam a 4px um do outro — no celular é o que faz marcar o errado. */
.fm-q .opts{flex-direction:column;gap:1px;align-items:stretch}
.fm-q .op{height:auto;min-height:40px;padding:8px 11px;border-radius:var(--rp);
  border-color:transparent;background:none;box-shadow:none;justify-content:flex-start;
  font-size:14px;font-weight:500;line-height:1.4}
.fm-q .op:hover{background:var(--sup2)}
.fm-q .op:has(input:checked){background:var(--pri-fr);border-color:var(--pri-bd);
  color:var(--tx);font-weight:600}
.fm-q .op-mk{width:18px;height:18px;border-width:2px;border-radius:5px}
/* Bola é escolher uma; quadrado é poder marcar várias. O formato diz isso ANTES do toque. */
.fm-q .op:has(input[type=radio]) .op-mk{border-radius:50%}
.fm-q .op:has(input[type=radio]) .op-mk svg{display:none}
.fm-q .op:has(input[type=radio]:checked) .op-mk{background:var(--pri-sol);
  border-color:var(--pri-sol);box-shadow:inset 0 0 0 3px var(--sup)}

/* ── o construtor: o mesmo cartão, com os comandos no rodapé ───────────────────────────
   Quem monta vê o que a merendeira vai ver. O campo é desenhado igual e só não recebe toque
   — sem isto, o construtor seria uma tabela DESCREVENDO o formulário, e a diferença entre a
   descrição e a coisa é onde mora o erro que só aparece com a folha na mão. */
.fm-q-mont .q-corpo{pointer-events:none}
.fm-q-mont .q-corpo .ent{background:var(--sup3)}
.q-tipo{flex:none;align-self:flex-start;font-size:10.5px;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--tf2);background:var(--sup2);border:1px solid var(--bd2);
  border-radius:99px;padding:3px 9px;white-space:nowrap}
.q-pe{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:14px;padding-top:11px;
  border-top:1px solid var(--bd2)}
.q-regras{display:flex;gap:5px;flex-wrap:wrap;min-width:0}
.q-regras:empty{display:none}
.q-pe .acoes-linha{margin-left:auto}
/* As três perguntas que o painel lê pelo id não têm botão de excluir — um botão que sempre
   recusa é pior que botão nenhum. O cadeado diz por quê. */
.q-trava{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--rp);
  color:var(--tf);background:var(--sup2);border:1px dashed var(--bd)}
/* A que está aberta na gaveta de edição. */
.fm-q-sel{border-color:var(--pri);box-shadow:0 0 0 3px var(--foco)}
.fm-q-sel::before{background:var(--pri)}
.fm-sec-mont{padding-bottom:11px}
.fm-sec-mont .q-pe{border-top-color:var(--pri-bd)}
/* Acrescentar pergunta: uma faixa tracejada no fim da coluna, do tamanho de um cartão. Um
   botão pequenininho no cabeçalho some numa página de quarenta cartões. */
.fm-mais{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
  min-height:52px;border:1.5px dashed var(--bd);border-radius:var(--r);background:var(--sup2);
  color:var(--tx2);font-size:14px;font-weight:600;cursor:pointer;transition:.12s}
.fm-mais:hover{border-color:var(--pri);background:var(--pri-fr);color:var(--pri-sol)}
.fm-mais svg{color:inherit}
/* O cabeçalho editável: os campos do formulário dentro do cartão de capa. */
.fm-cab-in>form>.campo,.fm-cab-in>form>.grade2{margin-bottom:12px}
.fm-cab-in>form>.campo:last-child,.fm-cab-in>form>.grade2:last-child{margin-bottom:0}

/* ── o progresso ───────────────────────────────────────────────────────────────────────
   Fica no rodapé, junto do botão de enviar, e responde a única pergunta de quem está no
   meio de quarenta e duas: falta muito? */
/* Opções empilhadas fora do formulário de perguntas — lista de jornadas, de turnos. Em
   pastilha lado a lado, uma lista de sete some no embrulho das linhas. */
.opts-col{flex-direction:column;align-items:stretch;gap:2px}
.opts-col .op{justify-content:flex-start;height:auto;min-height:38px;padding:7px 11px}
.fm-prog{display:flex;align-items:center;gap:9px;min-width:180px;font-size:12.5px;color:var(--tf)}
/* O trilho em --cz-bg (#eef0f4) sumia contra o fundo da barra da cozinha (#f0f1f5):
   sobrava o "0 de 11" solto e nenhuma barra. */
.fm-prog .bar{flex:1;min-width:70px;height:6px;border-radius:99px;background:var(--bd);
  overflow:hidden}
.fm-prog .bar i{display:block;height:100%;width:0;background:var(--pri);border-radius:99px;
  transition:width .18s}
.fm-prog b{font-weight:700;color:var(--tx2);white-space:nowrap;font-variant-numeric:tabular-nums}

/* ── na cozinha ────────────────────────────────────────────────────────────────────────
   O mesmo desenho, com o dedo em mente. 16px de fonte no campo não é escolha de estilo:
   abaixo disso o iPhone dá zoom ao focar, a tela salta e a pessoa perde o lugar. */
.cz .fm{gap:10px}
.cz .fm-q{padding:15px 14px;border-radius:12px}
.cz .q-corpo{margin-left:0}
.cz .q-tit>label{font-size:1rem}
.cz .fm-q .ent{min-height:48px;font-size:16px}
.cz .fm-q textarea.ent{min-height:84px;padding-top:11px}
.cz .fm-q .op{min-height:48px;font-size:1rem}
.cz .fm-cab{border-radius:12px}
.cz .fm-cab-in{padding:15px}
.cz .fm-cab h2{font-size:1.2rem}
.cz .fm-sec{padding:13px 14px;border-radius:12px}
.cz-pe-fixo .fm-prog{margin-bottom:10px}

/* ── matriz de avaliação (o checklist da nutricionista) ───────────────────────────────
   Uma linha por afirmação, as mesmas colunas em todas. Rola de lado no celular em vez de
   espremer as colunas até o rótulo virar duas letras. */
.mtz{overflow-x:auto;border:1px solid var(--bd);border-radius:var(--r);background:var(--sup)}
.mtz table{border-collapse:collapse;width:100%;min-width:320px}
.mtz th,.mtz td{padding:11px 12px;border-bottom:1px solid var(--bd2);font-size:13.5px;text-align:center}
.mtz th{background:var(--sup2);font-size:10.5px;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;color:var(--tf2);white-space:nowrap;min-width:96px}
.mtz tbody td:first-child,.mtz thead th:first-child{text-align:left;width:100%;min-width:190px;
  line-height:1.4}
.mtz tbody tr:nth-child(even){background:var(--sup3)}
.mtz tbody tr:last-child td{border-bottom:0}
.mtz tbody tr:hover{background:var(--pri-fr)}
/* A célula inteira é o alvo: numa matriz de sete linhas, mirar um círculo de 18px com o
   dedo é o que faz marcar a linha de baixo sem perceber. */
.mtz label{display:flex;align-items:center;justify-content:center;cursor:pointer;
  margin:-11px -12px;padding:11px 12px}
.mtz input[type=radio]{width:19px;height:19px;accent-color:var(--pri);cursor:pointer}
.mtz input[type=checkbox]{width:18px;height:18px;accent-color:var(--pri);cursor:pointer}
/* A matriz de permissão: a coluna da tela precisa de largura para o nome e a explicação
   caberem em duas linhas; as quatro colunas de ação são estreitas e iguais. */
/* ── a permissão por NÍVEL ──────────────────────────────────────────────────────────────
   Uma linha por tela, uma lista suspensa por linha. Quatro caixas × quinze telas eram
   sessenta marcadores numa gaveta de 480px: cabia, mas ninguém lia. */
.nvl{display:flex;flex-direction:column;gap:1px}
.nvl-g{font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--tf2);padding:14px 2px 5px}
.nvl-g:first-child{padding-top:2px}
.nvl-i{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 9px;
  border-radius:var(--rp);transition:background .12s}
.nvl-i:hover{background:var(--sup2)}
.nvl-nome{flex:1;min-width:130px}
.nvl-nome b{display:block;font-size:13.5px;font-weight:600;line-height:1.3}
.nvl-nome span{display:block;font-size:11px;color:var(--tf);line-height:1.3;margin-top:1px}
.nvl-sel{width:132px;flex:none}
/* O botão do ajuste fino: um ícone só, com nome para quem usa leitor de tela. */
.nvl-chave{flex:none;display:grid;place-items:center;width:30px;height:30px;cursor:pointer;
  border:1px solid transparent;border-radius:var(--rp);color:var(--tf)}
.nvl-chave:hover{background:var(--sup);border-color:var(--bd);color:var(--tx)}
.nvl-chave input{position:absolute;opacity:0;width:0;height:0}
.nvl-chave:has(input:checked){background:var(--am-bg);border-color:var(--am-bd);color:var(--am-tx)}
.nvl-chave:has(input:focus-visible){outline:2px solid var(--anel);outline-offset:1px}
/* As quatro caixas só aparecem quando alguém pede — e aí a lista suspensa se apaga, porque
   quem manda naquela linha passou a ser o ajuste fino. */
.nvl-fino{display:none;width:100%;gap:5px;flex-wrap:wrap;padding:2px 0 2px 2px}
.nvl-i:has(.nvl-chave input:checked){background:var(--am-bg)}
.nvl-i:has(.nvl-chave input:checked) .nvl-fino{display:flex}
.nvl-i:has(.nvl-chave input:checked) .nvl-sel{opacity:.4;pointer-events:none}
.nvl-fino .op{height:28px;font-size:12px;background:var(--sup)}
.nvl-fixa{font-size:12.5px;color:var(--tf);flex:none;width:132px;text-align:center}

/* A matriz mora dentro da gaveta lateral, que tem ~480px úteis. Com as medidas da matriz
   comum a coluna EXCLUIR saía da borda — e é a coluna que alguém abre esta tela para ver.
   Aperta-se aqui, não na gaveta: alargar a gaveta desalinharia esta tela de todas as outras. */
.mtz-perm tbody td:first-child,.mtz-perm thead th:first-child{min-width:150px;line-height:1.35}
.mtz-perm th:not(:first-child){min-width:60px}
.mtz-perm th,.mtz-perm td{padding:8px 5px;font-size:12.5px}
.mtz-perm th{font-size:10px;letter-spacing:.03em}
.mtz-perm .sub{font-size:11px;line-height:1.3;display:block;margin-top:1px}
.mtz-cx{width:100%}
.mtz-perm label{margin:-8px -5px;padding:8px 5px}
.mtz tbody tr:has(input:checked) td:first-child{font-weight:600}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ── campo com botão colado (CNPJ + Buscar, link + Copiar) ────────────────────────── */
.campo-lado{display:flex;gap:8px;align-items:center}
.campo-lado .bt{flex:none}

/* ── painel que abre sem ser gaveta: o escolhedor de uma lista grande ──────────────── */
.painel{display:none;border:1px solid var(--bd);border-radius:var(--r);background:var(--sup);margin-top:10px}
.painel[data-aberta]{display:block}
.painel-cab{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:10px;
  border-bottom:1px solid var(--bd);background:var(--sup2);border-radius:var(--r) var(--r) 0 0}
.painel-busca{display:none;padding:9px 10px;border-bottom:1px solid var(--bd)}
.painel-busca[data-aberta]{display:block}
.painel-lista{max-height:300px;overflow:auto;padding:4px 10px 8px}
.painel-pe{display:flex;justify-content:flex-end;gap:8px;padding:9px 10px;border-top:1px solid var(--bd)}
.esc-g{margin:9px 0 3px;font-size:10.5px;font-weight:700;letter-spacing:.07em;
  text-transform:uppercase;color:var(--tf2)}
.esc-i{display:flex;align-items:center;gap:9px;padding:7px 5px;border-radius:var(--rp);
  cursor:pointer;font-size:13.5px}
.esc-i:hover{background:var(--sup2)}
.esc-i input{width:17px;height:17px;flex:none;accent-color:var(--pri)}
.esc-i .cod{margin-left:auto;font-size:11.5px;color:var(--tf)}
.esc-i.apagada{color:var(--tf)}
.esc-i i{font-style:normal;font-size:11.5px;color:var(--tf)}
/* Linha com DOIS controles: marcar e eleger a principal. O rótulo do meio é quem cresce. */
.esc-tx{display:flex;align-items:center;gap:9px;flex:1;min-width:0;cursor:pointer}
.esc-pri{display:inline-flex;align-items:center;gap:5px;flex:none;font-size:11.5px;
  color:var(--tf);cursor:pointer;white-space:nowrap}
.esc-pri input{width:15px;height:15px;accent-color:var(--pri)}
.esc-i:has(.esc-pri input:checked){background:var(--pri-fr)}
.esc-i:has(.esc-pri input:checked) .esc-pri{color:var(--pri-sol);font-weight:700}

/* ── a mesma caixa em dois modos: as escolhidas, ou o catálogo para escolher ─────────
   Fechada mostra só o que está marcado, cada um na sua linha. Aberta (no "Adicionar")
   mostra tudo, com busca e o atalho de marcar. Uma caixa só, e não duas listas: duas
   listas com as MESMAS caixas de marcar postariam o valor duas vezes. */
.escl{border:1px solid var(--bd);border-radius:var(--r);background:var(--sup)}
.escl-cab{display:none;gap:6px;flex-wrap:wrap;align-items:center;padding:10px;
  border-bottom:1px solid var(--bd);background:var(--sup2);border-radius:var(--r) var(--r) 0 0}
.escl-lista{padding:4px 10px 8px}
.escl-pe{display:none;justify-content:flex-end;padding:9px 10px;border-top:1px solid var(--bd)}
.escl[data-aberta] .escl-cab,.escl[data-aberta] .escl-pe{display:flex}
.escl[data-aberta] .escl-lista{max-height:300px;overflow:auto}
/* Fechada: some o que não foi marcado — e some inteira quando não há nada marcado, para o
   vazio ser a frase de ajuda mais o botão, sem uma moldura oca no meio. */
.escl:not([data-aberta]) .esc-i:not(:has(input[type=checkbox]:checked)){display:none}
.escl:not([data-aberta]):not(:has(input[type=checkbox]:checked)){display:none}
.escl:not([data-aberta]) .escl-so-aberto{display:none}

/* ── cartão de acesso: o link e o QR de uma unidade ───────────────────────────────────
   Empilhado, e não lado a lado: isto mora na gaveta, que tem 420px. Em duas colunas o
   endereço ficava numa caixinha de 160px, cortado no meio — e o endereço é justamente o
   que se precisa LER para conferir se é o da unidade certa. */
.acesso{display:flex;flex-direction:column;gap:14px}
.acesso-qr{width:210px;align-self:center;padding:11px;background:#fff;border:1px solid var(--bd);
  border-radius:var(--r);box-shadow:var(--som)}
.acesso-qr svg{display:block;width:100%;height:auto}
.acesso-lado{display:flex;flex-direction:column;gap:12px}
.acesso-link{display:flex;gap:8px}
.acesso-link .ent{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}
.acesso-link .bt{flex:none}

/* ── tabela ───────────────────────────────────────────────────────────────────────── */
/* A sombra que denuncia a coluna escondida.
   A caixa rola de lado desde sempre, mas em silêncio: numa tabela de nove colunas a última
   — que costuma ser a AÇÃO, como o botão do comprovante — simplesmente não estava lá, e
   nada dizia que bastava arrastar. O degradê à direita aparece só enquanto há o que rolar,
   porque é preso ao fundo com background-attachment:local. */
.tab-cx{
  overflow:auto; border-radius:0 0 var(--r) var(--r);
  background:
    linear-gradient(to right, var(--sup) 30%, transparent),
    linear-gradient(to left, var(--sup) 30%, transparent) 100% 0,
    linear-gradient(to right, var(--rolagem), transparent 14px),
    linear-gradient(to left, var(--rolagem), transparent 14px) 100% 0;
  background-repeat:no-repeat;
  background-size:36px 100%, 36px 100%, 14px 100%, 14px 100%;
  background-attachment:local, local, scroll, scroll;
}
.tab{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.tab th{position:sticky;top:0;z-index:2;background:var(--sup3);text-align:left;font-size:11px;
  font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--tf2);padding:9px 14px;
  border-bottom:1px solid var(--bd);white-space:nowrap}
.tab td{padding:10px 14px;border-bottom:1px solid var(--bd2);vertical-align:middle}
.tab th.centro,.tab td.centro{text-align:center}
/* Ganha de .tab .num (à direita) por especificidade, não por ordem — são duas classes mais
   o elemento contra duas classes. Cabeçalho e célula andam juntos, e o número fica embaixo
   do rótulo em vez de pendurado na borda direita de uma coluna larga. */
.tab th.num.centro,.tab td.num.centro{text-align:center}
.tab td.num.centro .cel-link{text-align:center}
.tab tbody tr:last-child td{border-bottom:0}
.tab tbody tr{transition:background .1s}
.tab tbody tr:hover{background:var(--sup2)}
.tab tbody tr.sel{background:var(--pri-fr)}
/* Link que cobre a célula inteira: a linha toda vira alvo de clique sem embrulhar o <td>
   num <a> gigante, o que quebraria o alinhamento da tabela. As margens negativas comem o
   padding da célula para a área clicável não ficar menor que ela. */
.cel-link{display:block;margin:-10px -14px;padding:10px 14px;color:inherit;text-decoration:none}
.tab td.centro .cel-link{text-align:center}
.tab td.num .cel-link{text-align:right}
.tab tbody tr.sel td:first-child{box-shadow:inset 2px 0 0 var(--pri)}
.tab tbody tr.apagada td:not(:last-child){color:var(--tf)}
/* A linha que pede atenção. Existe porque .sel é o VERDE da marca: usar ele para avisar
   "isso aqui está errado" pinta o problema com a cor de "está tudo certo". */
.tab tbody tr.aviso{background:var(--vm-bg)}
.tab tbody tr.aviso td:first-child{box-shadow:inset 2px 0 0 var(--vm-tx)}
.tab .num{text-align:right;font-variant-numeric:tabular-nums}
.tab .cod{font-variant-numeric:tabular-nums;color:var(--tf2);font-size:12.5px;white-space:nowrap}
.tab .forte{font-weight:600}
.tab tfoot td{padding:9px 14px;background:var(--sup3);font-size:12.5px;color:var(--tf);
  border-top:1px solid var(--bd);font-weight:600}
.trunc{display:block;max-width:290px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tab.densa th,.tab.densa td{padding-inline:10px}
.tab.densa .trunc{max-width:190px}
.linha-nome{display:block;font-weight:600}
.linha-nome:hover{color:var(--pri-sol);text-decoration:underline;text-underline-offset:2px}

/* ── barra de filtro ──────────────────────────────────────────────────────────────── */
.filtro{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;padding:12px 14px;background:var(--sup);
  border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--som);margin-bottom:14px}
.filtro .campo{min-width:170px}
.filtro-fim{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--tf)}
.seg{display:inline-flex;background:var(--sup2);border:1px solid var(--bd);border-radius:var(--rp);padding:2px}
.seg a{height:28px;padding:0 11px;display:inline-flex;align-items:center;font-size:12.5px;font-weight:600;
  color:var(--tf2);border-radius:4px}
.seg a:hover{color:var(--tx)}
.seg a.on{background:var(--sup);color:var(--tx);box-shadow:var(--som2)}

/* ── estatísticas ─────────────────────────────────────────────────────────────────── */
/* Quatro indicadores em 1024 ou 820 não cabem em quatro colunas de 200: o auto-fit punha
   três e deixava o quarto sozinho, com dois terços de linha vazios embaixo. Cair para DOIS
   é o que mantém a fileira cheia — e 2×2 lê melhor que 3+1 em qualquer largura. */
.kpis{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-bottom:14px}
@media (max-width:1240px){.kpis{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.kpis{grid-template-columns:1fr}}
.kpi{background:var(--sup);border:1px solid var(--bd);border-radius:var(--r);padding:13px 14px;
  box-shadow:var(--som);position:relative;overflow:hidden}
.kpi-t{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--tf)}
.kpi-t svg{color:var(--ic)}
.kpi-n{font-size:27px;font-weight:700;letter-spacing:-.03em;line-height:1.15;margin-top:7px;
  font-variant-numeric:tabular-nums}
.kpi-n.mo{font-size:23px}
.kpi-d{font-size:12px;color:var(--tf);margin-top:2px}
.kpi-d b{font-weight:600;color:var(--ok-tx)}
.kpi-d b.q{color:var(--am-tx)}
.kpi.q{border-color:var(--am-bd);background:linear-gradient(180deg,var(--am-fundo),var(--sup) 42%)}
/* O cartão de número que LEVA à lista de onde o número saiu (kpiLink). A seta fica no canto,
   fora do fluxo: solta no fim do cartão ela descia para o rodapé e esticava a fileira toda. */
a.kpi{display:block;color:inherit;text-decoration:none;transition:border-color .15s,transform .15s,box-shadow .15s}
a.kpi:hover{border-color:var(--pri);box-shadow:var(--som2);transform:translateY(-1px)}
a.kpi:focus-visible{outline:none;border-color:var(--pri);box-shadow:0 0 0 3px var(--foco)}
.kpi-ir{position:absolute;right:12px;top:12px;display:flex;color:var(--ic2)}
a.kpi:hover .kpi-ir{color:var(--pri)}
/* O número de contexto (quantas unidades) — o que dá escala aos outros. Igual aos vizinhos,
   ele sumia no meio deles. */
.kpi.kpi-forte{background:linear-gradient(135deg,var(--pri-sol),var(--pri-noite));border-color:transparent;color:var(--sobre-pri)}
.kpi.kpi-forte .kpi-t,.kpi.kpi-forte .kpi-t svg,.kpi.kpi-forte .kpi-d{color:var(--sobre-pri-2)}
.kpi.kpi-forte .kpi-n{color:var(--sobre-pri)}
a.kpi.kpi-forte:hover{border-color:transparent;filter:brightness(1.07)}
.kpi.kpi-forte .kpi-ir,a.kpi.kpi-forte:hover .kpi-ir{color:var(--sobre-pri-2)}
/* Título de seção dentro da página: versalete miúdo, com ar em cima. */
.grupo-tit{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--tf2);margin:22px 0 10px}
.grupo-tit:first-child{margin-top:0}

/* ── avisos (início) ──────────────────────────────────────────────────────────────── */
.avisos{display:flex;flex-direction:column;gap:8px}
.fx{display:flex;align-items:center;gap:12px;padding:11px 13px;background:var(--sup);
  border:1px solid var(--bd);border-left:3px solid var(--bd);border-radius:var(--r);box-shadow:var(--som);
  transition:box-shadow .12s,transform .12s,border-color .12s}
.fx:hover{box-shadow:var(--som2);transform:translateX(1px)}
.fx-ic{width:32px;height:32px;border-radius:var(--rp);display:grid;place-items:center;flex:none}
.fx-tx{min-width:0;flex:1}
.fx-tx b{display:block;font-size:13.5px;font-weight:600;letter-spacing:-.01em}
.fx-tx span{display:block;font-size:12.5px;color:var(--tf);margin-top:1px}
.fx-fim{margin-left:auto;display:flex;align-items:center;gap:10px;flex:none}
.fx-fim svg{color:var(--ic2)}
.fx:hover .fx-fim svg{color:var(--tx2)}
.fx.g1{border-left-color:var(--vm-forte)}
.fx.g1 .fx-ic{background:var(--vm-bg);color:var(--vm-tx)}
.fx.g2{border-left-color:var(--am-forte)}
.fx.g2 .fx-ic{background:var(--am-bg);color:var(--am-tx)}
.fx.g3{border-left-color:var(--az-forte)}
.fx.g3 .fx-ic{background:var(--az-bg);color:var(--az-tx)}
/* No celular o selo espremia o título em três linhas. A cor da borda e o ícone tingido já dizem
   a gravidade — o texto do aviso é o que não pode faltar. */
@media (max-width:480px){.fx-fim .se{display:none}}
.mais-avisos{margin-top:2px}
.avisos+.mais-avisos{margin-top:10px}
.mais-avisos>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:7px;
  height:32px;padding:0 12px;border-radius:99px;border:1px dashed var(--bd);color:var(--tf);
  font-size:12.5px;font-weight:600;background:var(--sup)}
.mais-avisos>summary::-webkit-details-marker{display:none}
.mais-avisos>summary:hover{background:var(--sup2);color:var(--tx);border-color:var(--bd-forte)}
.mais-avisos[open]>summary{margin-bottom:8px}
.mais-avisos .avisos{margin-bottom:0}

/* ── atalhos ──────────────────────────────────────────────────────────────────────── */
.atalhos{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
@media (min-width:1080px){.atalhos{grid-template-columns:repeat(3,1fr)}}
.at{display:flex;align-items:flex-start;gap:11px;padding:13px;background:var(--sup);
  border:1px solid var(--bd);border-radius:var(--r);box-shadow:var(--som);transition:.13s}
.at:hover{border-color:var(--pri-bd);box-shadow:var(--som2);transform:translateY(-1px)}
.at:hover .at-ic{background:var(--pri);color:var(--sobre-pri);border-color:var(--pri)}
.at-ic{width:34px;height:34px;border-radius:var(--rp);background:var(--pri-fr);color:var(--pri-esc);
  border:1px solid var(--pri-bd);display:grid;place-items:center;flex:none;transition:.13s}
.at b{display:block;font-size:13.5px;font-weight:600}
.at span{display:block;font-size:12px;color:var(--tf);margin-top:2px;line-height:1.4}
.at.off{border-style:dashed;box-shadow:none;background:var(--sup3);cursor:default}
.at.off:hover{transform:none;border-color:var(--bd);box-shadow:none}
.at.off .at-ic{background:var(--cz-bg);color:var(--ic);border-color:var(--cz-bd)}
.at.off:hover .at-ic{background:var(--cz-bg);color:var(--ic);border-color:var(--cz-bd)}
.at.off b{color:var(--tx2)}
.at-tag{display:inline-block;margin-top:5px;font-size:10.5px;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--tf2)}

/* ── gráfico (CSS puro) ───────────────────────────────────────────────────────────── */
.graf{display:flex;gap:10px;padding:6px 2px 0}
.graf-y{position:relative;width:30px;flex:none;height:196px}
.graf-y span{position:absolute;right:0;font-size:11px;color:var(--tf2);transform:translateY(50%);
  font-variant-numeric:tabular-nums}
.graf-dir{flex:1;min-width:0}
.graf-tela{position:relative;height:196px;border-bottom:1px solid var(--bd);
  background-image:repeating-linear-gradient(to top,var(--bd2) 0 1px,transparent 1px 25%)}
.graf-media{position:absolute;left:0;right:0;border-top:1px dashed var(--graf-linha);pointer-events:none;z-index:2}
.graf-media span{position:absolute;left:0;top:-9px;background:var(--sup);padding:0 6px 0 2px;
  font-size:11px;color:var(--tf);font-variant-numeric:tabular-nums;white-space:nowrap}
.graf-cols{position:absolute;inset:0;display:flex;align-items:flex-end;gap:clamp(8px,3vw,42px);
  padding:0 clamp(6px,2vw,26px)}
.graf-col{flex:1 1 0;min-width:0;height:100%;display:flex;align-items:flex-end;position:relative}
.graf-b{width:100%;max-width:74px;margin:0 auto;background:var(--graf);border-radius:5px 5px 0 0;
  position:relative;transition:background .13s}
.graf-col:hover .graf-b{background:var(--graf-h)}
.graf-b.atual{background:var(--pri)}
.graf-col:hover .graf-b.atual{background:var(--pri-esc)}
/* O número da coluna é uma pastilha da largura do texto, com fundo do cartão e acima da
   linha de média (z-index 3 > 2): sem isso o tracejado da média corta os algarismos. */
.graf-b span{position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);
  z-index:3;padding:0 5px;border-radius:3px;background:var(--sup);white-space:nowrap;
  font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--tx2)}
.graf-b.atual span{color:var(--pri-sol)}
.graf-x{display:flex;gap:clamp(8px,3vw,42px);padding:7px clamp(6px,2vw,26px) 0}
.graf-x span{flex:1 1 0;min-width:0;text-align:center;font-size:12px;color:var(--tf);font-weight:500}
.graf-x span.atual{color:var(--tx);font-weight:700}
.leg{display:flex;gap:14px;align-items:center;font-size:12px;color:var(--tf)}
.leg i{width:9px;height:9px;border-radius:3px;display:inline-block;margin-right:6px;vertical-align:-1px}

/* ── duas colunas: lista + ficha/detalhe ──────────────────────────────────────────── */
.duas{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:14px;align-items:start}
.painel-lat{position:sticky;top:66px}
@media (max-width:1180px){.duas{grid-template-columns:1fr}.painel-lat{position:static}}

.ficha-cab{padding:14px;border-bottom:1px solid var(--bd2);display:flex;gap:12px;align-items:flex-start}
.ficha-cab .q{width:38px;height:38px;border-radius:var(--rp);background:var(--pri-fr);
  border:1px solid var(--pri-bd);color:var(--pri-esc);display:grid;place-items:center;flex:none}
.ficha-cab h2{font-size:15px;font-weight:650;letter-spacing:-.015em;line-height:1.25}
.ficha-cab .cod{font-size:12px;color:var(--tf);font-variant-numeric:tabular-nums;margin-top:2px}
.grade2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
/* Uma coluna de campos com respiro entre as LINHAS. Sem isto, o texto de ajuda de um campo
   encosta no rótulo do de baixo e passa a parecer explicação do campo errado. */
.pilha>.campo,.pilha>.grade2{margin-bottom:13px}
.pilha>.campo:last-child,.pilha>.grade2:last-child{margin-bottom:0}
/* Embrulho que NÃO cria caixa: serve para esconder um punhado de botões de uma vez sem
   quebrar o alinhamento do rodapé, que é um flex e contaria o embrulho como um item só. */
.contents{display:contents}
.contents[hidden]{display:none}
.grade2 .larga{grid-column:1/-1}
.sec-rot{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tf2);
  padding-top:4px;border-top:1px solid var(--bd2);margin-top:4px;grid-column:1/-1}
.acoes-fim{position:sticky;bottom:0;display:flex;gap:8px;align-items:center;padding:11px 14px;
  border-top:1px solid var(--bd2);background:var(--sup3);border-radius:0 0 var(--r) var(--r)}
.acoes-fim .dir{margin-left:auto;display:flex;gap:8px}

/* ── chamados ─────────────────────────────────────────────────────────────────────── */
.ch-lista{display:flex;flex-direction:column}
.ch-i{display:flex;gap:11px;padding:12px 14px;border-bottom:1px solid var(--bd2);transition:background .1s}
/* Linha com ação ao lado: o botão não pode morar DENTRO do link da linha (botão dentro de
   <a> é HTML inválido e o navegador desmonta), então a linha vira um par — o link, que
   ocupa o espaço todo, e a ação encostada na direita. A borda e o realce passam para o
   par; sem isso apareceriam dois traços e dois fundos. */
.ch-lin{display:flex;align-items:center;border-bottom:1px solid var(--bd2)}
.ch-lin:last-child{border-bottom:0}
.ch-lin:hover{background:var(--sup2)}
.ch-lin.sel{background:var(--pri-fr);box-shadow:inset 2px 0 0 var(--pri)}
.ch-lin>.ch-i{flex:1;min-width:0;border-bottom:0;background:none;box-shadow:none}
.ch-ac{flex:none;padding:0 14px 0 6px}
.ch-i:last-child{border-bottom:0}
.ch-i:hover{background:var(--sup2)}
.ch-i.sel{background:var(--pri-fr);box-shadow:inset 2px 0 0 var(--pri)}
.ch-ic{width:32px;height:32px;border-radius:var(--rp);display:grid;place-items:center;flex:none;
  background:var(--cz-bg);color:var(--cz-tx);border:1px solid var(--cz-bd)}
.ch-i.aberto .ch-ic{background:var(--am-bg);color:var(--am-tx);border-color:var(--am-bd)}
.ch-c{min-width:0;flex:1}
.ch-c p{font-size:13.5px;font-weight:600;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;
  -webkit-box-orient:vertical;overflow:hidden}
.ch-meta{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:5px;font-size:12px;color:var(--tf2)}
.ch-meta b{font-weight:500;color:var(--tx2)}
.ch-fim{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:none}
.ch-fim .q{font-size:11.5px;color:var(--tf2);white-space:nowrap;font-variant-numeric:tabular-nums}
.det-txt{font-size:15px;font-weight:600;line-height:1.45;letter-spacing:-.01em}
.det-grade{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px;margin-top:14px;padding-top:13px;
  border-top:1px solid var(--bd2)}
.det-i .r{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--tf2)}
.det-i .v{font-size:13.5px;margin-top:3px;font-weight:500}
.vazio{display:flex;flex-direction:column;align-items:center;gap:6px;padding:20px;border:1px dashed var(--bd);
  border-radius:var(--rp);background:var(--sup3);color:var(--tf);font-size:12.5px;text-align:center}
.vazio svg{color:var(--ic2)}

/* ── login ────────────────────────────────────────────────────────────────────────── */
.login{min-height:calc(100vh - 34px);display:grid;place-items:center;padding:36px 18px;
  background:radial-gradient(1100px 520px at 50% -14%,var(--login-bg) 0%,var(--bg) 62%)}
.login-cx{width:100%;max-width:392px}
.login-marca{display:flex;align-items:center;gap:11px;justify-content:center;margin-bottom:6px}
.login-marca .marca-q{width:38px;height:38px;border-radius:10px;font-size:20px}
.login-marca b{font-size:22px;font-weight:800;letter-spacing:-.035em}
.login-sub{text-align:center;font-size:13px;color:var(--tf2);margin-bottom:20px}
.login-ct{background:var(--sup);border:1px solid var(--bd);border-radius:12px;box-shadow:var(--som3);
  padding:22px}
.login-ct h1{font-size:17px;font-weight:650;letter-spacing:-.02em}
.login-ct>p{font-size:13px;color:var(--tf);margin-top:3px;margin-bottom:18px}
.login-campos{display:flex;flex-direction:column;gap:13px}
.login-campos .ent{height:38px}
.lab-lin{display:flex;align-items:center}
.lab-lin a{margin-left:auto;font-size:12px;font-weight:600;color:var(--pri-sol)}
.lab-lin a:hover{text-decoration:underline}
.bt-bloco{width:100%;justify-content:center;height:40px;margin-top:4px}
.ou{display:flex;align-items:center;gap:10px;margin:18px 0 14px;color:var(--tf2);font-size:11.5px;
  font-weight:600;letter-spacing:.04em;text-transform:uppercase}
.ou::before,.ou::after{content:"";flex:1;height:1px;background:var(--bd2)}
.qr-aviso{display:flex;gap:11px;padding:12px;border:1px solid var(--az-bd);background:var(--az-bg);
  border-radius:var(--rp)}
.qr-aviso svg{color:var(--az-tx);flex:none;margin-top:1px}
.qr-aviso b{display:block;font-size:12.5px;font-weight:700;color:var(--az-tx)}
.qr-aviso span{display:block;font-size:12.5px;color:var(--az-tx2);line-height:1.45;margin-top:2px}
.login-pe{text-align:center;font-size:11.5px;color:var(--tf2);margin-top:16px;line-height:1.6}

/* ── merendeira: 390px primeiro ───────────────────────────────────────────────────── */
.mer{max-width:470px;margin:0 auto;background:var(--sup);min-height:calc(100vh - 34px);
  border-inline:1px solid var(--bd);font-size:16px}
.mer-topo{background:var(--pri-sol);color:var(--sobre-pri);padding:16px 16px 18px}
.mer-topo .m{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:700;letter-spacing:-.01em;
  opacity:.92}
.mer-topo .m i{width:22px;height:22px;border-radius:6px;background:var(--mer-realce);display:grid;
  place-items:center;font-style:normal;font-weight:800;font-size:13px}
.mer-topo h1{font-size:20px;font-weight:700;letter-spacing:-.02em;line-height:1.28;margin-top:12px}
.mer-topo p{font-size:13.5px;color:var(--mer-sub);margin-top:5px}
.mer-corpo{padding:16px 14px 40px;display:flex;flex-direction:column;gap:20px}
.mer-sec>h2{font-size:12px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--tf2);
  margin-bottom:9px;display:flex;align-items:center;gap:8px}
.mer-sec>h2 .c{margin-left:auto;font-size:11.5px;font-weight:700;letter-spacing:0;text-transform:none;
  color:var(--tf)}
.mer-ct{border:1px solid var(--bd);border-radius:10px;background:var(--sup);box-shadow:var(--som);
  overflow:hidden}
.mer-ct+.mer-ct{margin-top:10px}
.mer-form{display:flex;align-items:center;gap:12px;padding:14px}
.mer-form .i{width:42px;height:42px;border-radius:9px;background:var(--az-bg);color:var(--az-tx);
  border:1px solid var(--az-bd);display:grid;place-items:center;flex:none}
.mer-form b{display:block;font-size:16px;font-weight:650;line-height:1.3}
.mer-form i{display:block;font-style:normal;font-size:13px;color:var(--tf);margin-top:2px}
.mer-bt{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;height:54px;border:0;
  border-radius:10px;background:var(--pri-sol);color:var(--sobre-pri);font-size:16px;font-weight:800;
  letter-spacing:.03em;cursor:pointer;box-shadow:var(--som2)}
.mer-bt:hover{background:var(--pri-sol-h)}
.mer-bt:active{transform:translateY(1px)}
.mer-bt.sec{background:var(--sup);color:var(--tx);border:1px solid var(--bd);height:50px;font-weight:700;
  letter-spacing:0;font-size:15px;box-shadow:var(--som)}
.mer-bt.sec:hover{background:var(--sup2)}
.mer-bt.ok{background:var(--ok-bg);color:var(--ok-tx);border:1px solid var(--ok-bd);box-shadow:none;
  cursor:default}
.mer-ped-cab{display:flex;align-items:flex-start;gap:11px;padding:14px 14px 0}
.mer-ped-cab .i{width:42px;height:42px;border-radius:9px;background:var(--am-bg);color:var(--am-tx);
  border:1px solid var(--am-bd);display:grid;place-items:center;flex:none}
.mer-ped-cab b{display:block;font-size:17px;font-weight:700;letter-spacing:-.01em}
.mer-ped-cab i{display:block;font-style:normal;font-size:13px;color:var(--tf);margin-top:2px;line-height:1.4}
.mer-ped-corpo{padding:14px}
.contador{display:flex;align-items:center;gap:10px;background:var(--sup2);border:1px solid var(--bd);
  border-radius:10px;padding:8px;margin-bottom:12px}
.contador-b{width:52px;height:52px;border-radius:9px;border:1px solid var(--bd);background:var(--sup);
  font-size:26px;font-weight:600;line-height:1;color:var(--tx);cursor:pointer;flex:none;display:grid;
  place-items:center;box-shadow:var(--som)}
.contador-b:hover{background:var(--sup-press)}
.contador-b:active{transform:translateY(1px)}
.contador-b[disabled]{opacity:.4;cursor:not-allowed}
.contador-mid{flex:1;text-align:center;line-height:1.1}
.contador-num{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.contador-un{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tf2);
  display:block;margin-top:2px}
.mer-nota{display:flex;gap:8px;align-items:flex-start;font-size:13px;color:var(--tf);
  padding:0 14px 14px;line-height:1.45}
.mer-nota svg{flex:none;margin-top:1px;color:var(--ic)}
.mer-pedido.feito{border-color:var(--ok-bd);background:var(--mer-feito)}
.mer-est li{display:flex;align-items:center;gap:12px;padding:13px 14px;border-bottom:1px solid var(--bd2)}
.mer-est li:last-child{border-bottom:0}
.mer-est b{font-size:15px;font-weight:600;line-height:1.3;min-width:0}
.mer-est .qt{margin-left:auto;text-align:right;flex:none}
.mer-est .qt i{font-style:normal;font-size:19px;font-weight:700;font-variant-numeric:tabular-nums}
.mer-est .qt em{font-style:normal;font-size:13px;color:var(--tf2);margin-left:3px}
.mer-est li.baixo{background:var(--vm-bg);box-shadow:inset 3px 0 0 var(--vm-forte)}
.mer-est li.baixo b{color:var(--vm-tx2)}
.mer-est li.baixo .qt i{color:var(--vm-tx)}
.mer-rod{text-align:center;font-size:12px;color:var(--tf2);padding-top:6px;line-height:1.6}
@media (min-width:720px){
  .mer{margin:22px auto;min-height:0;border:1px solid var(--bd);border-radius:14px;overflow:hidden;
    box-shadow:var(--som3)}
  .mer-topo{border-radius:0}
}

/* ── responsivo do painel ─────────────────────────────────────────────────────────── */
@media (max-width:960px){
  .app{flex-direction:column}
  .lateral{position:static;flex:none;width:100%;max-height:none;border-right:0;
    border-bottom:1px solid var(--bd)}
  .nav{display:flex;gap:4px;overflow-x:auto;padding:8px 10px}
  .nav-g,.lat-pe{display:none}
  .nav-i{white-space:nowrap;margin-bottom:0}
  .topo{position:static}
  .conteudo{padding:14px}
  .grade2,.det-grade{grid-template-columns:1fr}
  .ident,.topo-data{display:none}
}

/* ── utilidades de arranjo ────────────────────────────────────────────────────────── */
.pilha{display:flex;flex-direction:column;gap:12px}
.pilha.pq{gap:8px}
.linha-fx{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.empurra{margin-left:auto}
.grade-auto{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(var(--min,230px),1fr))}
.grade-fixa{display:grid;gap:12px;grid-template-columns:repeat(var(--cols,4),1fr)}
@media (max-width:1100px){.grade-fixa{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.grade-fixa{grid-template-columns:1fr}}

/* ── quadradinho de ícone + tons reaproveitáveis ──────────────────────────────────── */
.qic{width:32px;height:32px;border-radius:var(--rp);display:grid;place-items:center;flex:none;
  background:var(--cz-bg);color:var(--cz-tx);border:1px solid var(--cz-bd)}
.qic.g{width:38px;height:38px}
.qic.p{width:26px;height:26px;border-radius:5px}
.tom-ok{background:var(--ok-bg);color:var(--ok-tx);border-color:var(--ok-bd)}
.tom-am{background:var(--am-bg);color:var(--am-tx);border-color:var(--am-bd)}
.tom-vm{background:var(--vm-bg);color:var(--vm-tx);border-color:var(--vm-bd)}
.tom-az{background:var(--az-bg);color:var(--az-tx);border-color:var(--az-bd)}
.tom-cz{background:var(--cz-bg);color:var(--cz-tx);border-color:var(--cz-bd)}
.tom-vd{background:var(--pri-fr);color:var(--pri-tx);border-color:var(--pri-bd)}

/* ── recado (caixa de observação) ─────────────────────────────────────────────────── */
.recado{display:flex;gap:11px;padding:12px;border:1px solid var(--cz-bd);background:var(--cz-bg);
  border-radius:var(--rp)}
.recado>svg{flex:none;margin-top:1px;color:var(--cz-tx)}
.recado b{display:block;font-size:12.5px;font-weight:700;color:var(--tx)}
.recado span span{display:block;font-size:12.5px;line-height:1.45;margin-top:2px;color:var(--tx2)}
.recado.az{border-color:var(--az-bd);background:var(--az-bg)}
.recado.az>svg,.recado.az b{color:var(--az-tx)}
.recado.az span span{color:var(--az-tx2)}
.recado.am{border-color:var(--am-bd);background:var(--am-bg)}
.recado.am>svg,.recado.am b{color:var(--am-tx)}
.recado.am span span{color:var(--am-tx2)}
.recado.vm{border-color:var(--vm-bd);background:var(--vm-bg)}
.recado.vm>svg,.recado.vm b{color:var(--vm-tx)}
.recado.vm span span{color:var(--vm-tx2)}
.recado.ok{border-color:var(--ok-bd);background:var(--ok-bg)}
.recado.ok>svg,.recado.ok b{color:var(--ok-tx)}
.recado.ok span span{color:var(--ok-tx2)}
.recado.vd{border-color:var(--pri-bd);background:var(--pri-fr)}
.recado.vd>svg,.recado.vd b{color:var(--pri-tx)}
.recado.vd span span{color:var(--pri-tx)}

/* ── barra de progresso ───────────────────────────────────────────────────────────── */
.prog{height:7px;border-radius:99px;background:var(--cz-bg);border:1px solid var(--bd2);overflow:hidden}
.prog>i{display:block;height:100%;background:var(--pri)}
.prog.am>i{background:var(--am-forte)}
.prog.vm>i{background:var(--vm-forte)}
.prog-rot{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--tf);margin-bottom:5px}
.prog-rot b{margin-left:auto;color:var(--tx2);font-weight:600;font-variant-numeric:tabular-nums}

/* ── barras horizontais (ranking) ─────────────────────────────────────────────────── */
.bh{display:flex;flex-direction:column;gap:9px}
.bh-i{display:grid;grid-template-columns:132px minmax(0,1fr) auto;gap:10px;align-items:center;
  font-size:12.5px}
.bh-r{color:var(--tx2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bh-t{height:15px;border-radius:4px;background:var(--sup2);border:1px solid var(--bd2);overflow:hidden}
.bh-t>i{display:block;height:100%;background:var(--graf)}
.bh-i.destaque .bh-t>i{background:var(--pri)}
.bh-v{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;color:var(--tx)}
@media (max-width:620px){.bh-i{grid-template-columns:96px minmax(0,1fr) auto}}

/* ── área de soltar arquivo ────────────────────────────────────────────────────────── */
/* Veio do envio de fotos dos chamados. Subiu para o kit quando a importação de relatório
   precisou do mesmo gesto: duas telas com dois desenhos para "arraste aqui" ensinariam
   duas coisas diferentes para a mesma ação. */
.ft-solta{display:flex;align-items:center;gap:11px;width:100%;padding:12px 13px;
  border:1.5px dashed var(--bd);border-radius:var(--r);background:var(--sup2);
  text-align:left;cursor:pointer;transition:border-color .13s,background .13s}
.ft-solta:hover,.ft-solta.sobre{border-color:var(--pri);background:var(--pri-fr)}
.ft-solta b{display:block;font-size:13.5px;font-weight:600;color:var(--tx)}
.ft-dica{display:block;font-size:11.5px;color:var(--tf);margin-top:1px}
.ft-ic{width:38px;height:38px;border-radius:10px;background:var(--sup);flex:none;
  border:1px solid var(--bd);display:grid;place-items:center;color:var(--pri-sol)}
.ft-solta:hover .ft-ic,.ft-solta.sobre .ft-ic{border-color:var(--pri-bd);background:var(--sup)}
/* O arquivo escolhido, embaixo da área. Fica em linha própria porque nome de exportação de
   ERP é longo — "RequisicaoPorSetor_20260901_20260905.xlsx" não cabe ao lado de nada. */
.ft-escolhido{display:none;align-items:center;gap:8px;margin-top:9px;padding:8px 11px;
  border:1px solid var(--bd);border-radius:var(--r);background:var(--sup);font-size:13px}
.ft-escolhido.tem{display:flex}
.ft-escolhido .nome{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ft-escolhido .peso{color:var(--tf);font-size:11.5px;flex:none}
.ft-escolhido .tirar{flex:none;border:0;background:none;color:var(--tf);cursor:pointer;
  padding:2px 4px;border-radius:5px;font:inherit;font-size:12px}
.ft-escolhido .tirar:hover{background:var(--sup3);color:var(--vm-tx)}
/* ── sanfona ───────────────────────────────────────────────────────────────────────── */
/* Abrir e fechar um bloco de linhas dentro de uma tabela. Não dá para usar <details> aqui:
   ele não pode envolver <tr>, e a conferência precisa que o produto e as escolas dele
   fiquem na MESMA tabela, alinhados pelas mesmas colunas. */
.sanf{cursor:pointer;user-select:none}
.sanf:hover{background:var(--sup2)}
.sanf-seta{display:inline-block;width:12px;color:var(--pri-sol);transition:transform .12s;
  font-size:13px;margin-right:6px;font-weight:700}
.sanf.aberta .sanf-seta{transform:rotate(90deg)}
/* A linha-mãe de um produto: fundo levemente diferente, para o olho achar o começo do bloco. */
.tab tbody tr.grupo-mae{background:var(--sup3)}
.tab tbody tr.grupo-mae td{font-weight:600}
/* A linha de categoria — só um rótulo, sem dados. */
.tab tbody tr.cat td{background:var(--sup2);font-size:11px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--pri-sol);font-weight:700;padding-top:9px;padding-bottom:7px}
/* A linha da escola, dentro do produto: recuada, para se ler como filha. */
.tab tbody tr.filha td:first-child{padding-left:26px;color:var(--tx2)}
/* Aviso de divergência ao lado do nome do produto. */
.sanf-alerta{color:var(--vm-tx);font-size:11.5px;font-weight:600;margin-left:7px;white-space:nowrap}
/* Campo de busca que filtra cartões na própria tela. */
.busca-cx{margin-bottom:12px}
.busca-cx .ent{height:40px}
/* ── blocos de setor, na tela do envio ─────────────────────────────────────────────── */
.setor-bloco{border:1px solid var(--bd);border-radius:var(--r);background:var(--sup);
  margin-bottom:10px;overflow:hidden;box-shadow:var(--som)}
.setor-cab{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 15px;font-size:14.5px}
.setor-dir{display:flex;align-items:center;gap:12px;flex:none}
.setor-corpo{padding:0 15px 15px;border-top:1px solid var(--bd2)}
/* O atalho para o setor inteiro fica largo e sozinho: é o caminho principal daqui, e um
   botão pequeno ao lado dos cartões some no meio deles. */
.bt-largo{display:flex;align-items:center;justify-content:center;width:100%;height:42px;
  margin:13px 0;font-weight:600}
.grade-esc{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:9px}
.cartao-esc{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 13px;border:1px solid var(--bd);border-radius:var(--r);background:var(--sup);
  text-decoration:none;color:var(--tx);transition:border-color .12s,background .12s}
.cartao-esc:hover{border-color:var(--pri-bd);background:var(--pri-fr)}
.cartao-esc b{display:block;font-size:13.5px;font-weight:600}
.cartao-esc .sub{display:block;margin-top:2px}
.cartao-esc svg{color:var(--tf);flex:none}
@media (max-width:640px){.grade-esc{grid-template-columns:1fr}}
/* Campos da conferência: numéricos estreitos e o botão de zerar o produto no setor. */
/* O número dentro da caixinha, no meio e forte: é ele que se lê ao conferir, e
   encostado na borda direita ele se confunde com o total da coluna ao lado. */
.ent-num{width:88px;height:32px;text-align:center;padding:0 6px;font-size:13.5px;
  font-weight:700;font-variant-numeric:tabular-nums}
.ent-pq{height:30px;font-size:12.5px;padding:0 7px;max-width:190px;text-align:center;
  text-align-last:center}
.bt-zerar{background:var(--am-bg);border-color:var(--am-bd);color:var(--am-tx);font-weight:600;flex:none}
/* O seletor de unidade e o "zerar" na MESMA linha: empilhados, o botão parecia pertencer à
   linha de baixo, que é de outra escola. */
.acao-prod{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:nowrap}
.bt-zerar:hover{background:var(--am-bd);border-color:var(--am-tx);color:var(--am-tx)}
/* ── abas ─────────────────────────────────────────────────────────────────────────── */
.abas{display:flex;gap:2px;border-bottom:1px solid var(--bd);overflow:auto;margin-bottom:14px}
.aba{height:38px;padding:0 13px;display:inline-flex;align-items:center;gap:7px;font-size:13px;
  font-weight:600;color:var(--tf2);background:none;border:0;border-bottom:2px solid transparent;
  margin-bottom:-1px;cursor:pointer;white-space:nowrap}
.aba:hover{color:var(--tx)}
.aba.on{color:var(--pri-sol);border-bottom-color:var(--pri)}
.aba-painel[hidden]{display:none}

/* ── gaveta lateral / modal ───────────────────────────────────────────────────────── */
.gav{position:fixed;inset:0;z-index:10000;display:none}
.gav[data-aberta]{display:block}
.gav.centro{overflow:auto}
.gav-fundo{position:absolute;inset:0;background:var(--veu)}
.gav-cx{position:absolute;top:0;right:0;bottom:0;width:min(520px,100%);background:var(--sup);
  border-left:1px solid var(--bd);box-shadow:var(--som3);display:flex;flex-direction:column;
  animation:gav-entra .18s ease-out}
@keyframes gav-entra{from{transform:translateX(16px);opacity:.5}to{transform:none;opacity:1}}
.gav.centro .gav-cx{position:relative;inset:auto;margin:8vh auto 24px;max-height:84vh;
  width:min(560px,calc(100% - 28px));border:1px solid var(--bd);border-radius:12px;
  animation:mod-entra .16s ease-out}
@keyframes mod-entra{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}
.gav-cab{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-bottom:1px solid var(--bd2)}
.gav-cab h2{font-size:15px;font-weight:650;letter-spacing:-.015em}
.gav-cab .sub{display:block;font-size:12.5px;color:var(--tf);margin-top:2px}
.gav-x{width:32px;height:32px;border-radius:var(--rp);border:1px solid transparent;background:none;
  color:var(--tf);display:grid;place-items:center;cursor:pointer;flex:none;margin-left:auto}
.gav-x:hover{background:var(--sup2);border-color:var(--bd);color:var(--tx)}
.gav-corpo{padding:16px;overflow:auto;flex:1}
.gav-pe{padding:12px 16px;border-top:1px solid var(--bd2);background:var(--sup3);display:flex;
  align-items:center;gap:8px;flex-wrap:wrap}
/* Quebra, e não corta: a nota que já existe, na aba de produtos, junta cinco botões no pé
   (Fechar, Adicionar, Excluir, Salvar rascunho, Lançar) — e o último, que é o que importa,
   saía cortado para fora da gaveta, sem barra de rolagem que o trouxesse de volta. */
.gav-pe .dir{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
@media (max-width:620px){.gav-cx{width:100%}}

/* ── calendário (cardápio do mês) ─────────────────────────────────────────────────── */
.cal{display:grid;grid-template-columns:repeat(var(--cols,5),minmax(0,1fr));gap:8px}
.cal-cab{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--tf2);text-align:center;padding-bottom:2px}
.cal-d{border:1px solid var(--bd);border-radius:var(--rp);background:var(--sup);padding:9px 10px;
  min-height:108px;display:flex;flex-direction:column;gap:5px}
.cal-d .n{display:flex;align-items:baseline;gap:6px;font-size:13px;font-weight:700;color:var(--tx2);
  font-variant-numeric:tabular-nums}
.cal-d .n em{font-style:normal;font-size:11px;font-weight:600;color:var(--tf2)}
.cal-d li{font-size:12px;color:var(--tx2);line-height:1.45}
.cal-d p{font-size:12px;color:var(--tf);font-style:italic}
.cal-d.hoje{border-color:var(--pri);background:var(--pri-fr);box-shadow:inset 0 0 0 1px var(--pri)}
.cal-d.hoje .n{color:var(--pri-sol)}
.cal-d.sem{background:var(--sup3);border-style:dashed}
.cal-d.sem .n{color:var(--tf)}
@media (max-width:900px){.cal{grid-template-columns:repeat(2,minmax(0,1fr))}.cal-cab{display:none}}
@media (max-width:520px){.cal{grid-template-columns:1fr}}
