/* =====================================================================
 * GTSI System - Alimentação — TEMA ESCURO + CIANO (identidade oficial)
 * Fonte ÚNICA de cores/components. Todas as telas (login, dashboard e o
 * DRE da 1D) consomem estas variáveis — não repintar tela por tela.
 *
 * Base escura alinhada aos painéis DRE atuais (slate). Destaque = ciano
 * #00B4D8 (cor oficial do GTSI System). Emerald/rose preservados para a
 * semântica financeira do DRE (receita/lucro vs despesa/negativo).
 * Contraste texto/fundo AA.
 * ===================================================================== */

:root{
  /* superfícies */
  --bg:        #0B0F14;   /* base da página */
  --bg-elev:   #0F141B;   /* topo/superfícies elevadas */
  --card:      #151B23;   /* cartões */
  --card-2:    #1B232D;   /* cartões internos / hover */
  --border:    #232D38;   /* bordas sutis: SEPARADOR (decorativo) */
  --border-2:  #2C3845;
  /* [a11y 06/09/2026] BORDA DE COMPONENTE INTERATIVO — botão, campo, aba.
     🔴 O dono: "existem varios botoes ... o botao apagado que nao conseguimos ver pelo fato
     da cor". Metade disso era texto quase preto herdado do primário; a outra metade é ESTA:
     `--border` dá 1,24:1 sobre --card, e a WCAG 1.4.11 exige 3:1 para o limite visual de um
     componente. O botão secundário não tinha FORMA — num botão só-emoji sobrava o glifo solto,
     que foi exatamente a descrição dele ("só aparecia o emoji").
     ⚠️ #5C6E82 = 3,30:1 sobre --card, 3,53 sobre --bg-elev, 3,61 sobre --bg. O portão sugeriu
     #4B5A6B; refiz a conta e dá 2,45 — não passava. *Número de laudo também se confere.*
     `--border` continua onde é decorativo (linha de tabela, divisória de seção). */
  --border-int:#5C6E82;

  /* texto */
  --text:      #E6EDF3;   /* texto primário (AA sobre --bg) */
  --text-muted:#9AA7B4;   /* secundário */
  /* [a11y 02/09/2026] Era #6B7785: 3,79:1 sobre --card e 4,21:1 sobre --bg — reprova o AA de
     4,5:1 em TODO fundo do sistema, e é a cor do rótulo de cada campo e do cabeçalho de cada
     tabela. #8A96A3 dá 5,02:1 e 5,57:1, e continua um degrau abaixo de --text-muted (7,06). */
  --text-dim:  #8A96A3;   /* terciário/legendas */

  /* destaque oficial — ciano */
  --accent:    #00B4D8;
  --accent-h:  #33C6E6;   /* hover: ciano mais claro */
  --accent-press:#0096B4;
  --on-accent: #04141A;   /* texto sobre botão ciano (AA) */
  --accent-soft:rgba(0,180,216,.12);
  --accent-ring:rgba(0,180,216,.30);

  /* semântica financeira (preservada do DRE) */
  --pos:   #10B981;       /* receita / lucro / positivo */
  --pos-2: #34D399;
  --neg:   #F87171;       /* despesa / negativo */
  --warn:  #FBBF24;       /* alerta / parcial */

  --radius: 14px;
  --shadow: 0 10px 40px rgba(0,0,0,.45);
  --font: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
}

*{box-sizing:border-box}
html,body{height:100%;max-width:100%;overflow-x:hidden}   /* trava: página nunca fica mais larga que a tela (mobile não "encolhe pra caber") */
body{
  margin:0;
  background:
    radial-gradient(1200px 600px at 50% -10%, rgba(0,180,216,.07), transparent 60%),
    var(--bg);
  color:var(--text);
  font-family:var(--font);
  -webkit-font-smoothing:antialiased;
}

a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-h)}

/* ── Marca ───────────────────────────────────────────────── */
.gtsi-brand{display:flex;align-items:center;gap:9px;font-family:'Plus Jakarta Sans',var(--font)}
.gtsi-brand .bt{font-weight:800;color:var(--text)}
.gtsi-brand .bc{font-weight:700;color:var(--accent)}   /* "Alimentação" em ciano */

/* ── Cartão ──────────────────────────────────────────────── */
.gtsi-card{
  background:linear-gradient(180deg, var(--card) 0%, var(--bg-elev) 100%);
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
}

/* ── Inputs ──────────────────────────────────────────────── */
.gtsi-label{display:block;font-size:11px;letter-spacing:.6px;color:var(--text-dim);
  text-transform:uppercase;font-weight:600;margin:14px 0 6px}
.gtsi-input{
  width:100%;padding:12px;border:1px solid var(--border-int);border-radius:10px;
  background:#0C1117;color:var(--text);font-size:14px;font-family:inherit;
}
.gtsi-input::placeholder{color:var(--text-dim)}
.gtsi-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}

/* ── Botão ───────────────────────────────────────────────── */
.gtsi-btn{
  width:100%;margin-top:22px;padding:12px;border:none;border-radius:10px;
  background:var(--accent);color:var(--on-accent);font-weight:700;font-size:14px;
  cursor:pointer;transition:background .15s, transform .05s;
}
.gtsi-btn:hover{background:var(--accent-h)}
.gtsi-btn:active{background:var(--accent-press);transform:translateY(1px)}

/* ── Mensagem de erro ────────────────────────────────────── */
.gtsi-erro{
  background:rgba(248,113,113,.10);border-left:3px solid var(--neg);color:#FCA5A5;
  padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:8px;
}

/* ── Topbar ──────────────────────────────────────────────── */
.gtsi-top{
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 24px;background:var(--bg-elev);border-bottom:1px solid var(--border);
}
.gtsi-link-sair{color:var(--neg);font-size:13px}
.gtsi-link-sair:hover{color:#FCA5A5}

/* ── Utilitários ─────────────────────────────────────────── */
.gtsi-muted{color:var(--text-muted)}

/* [a11y 06/09/2026] Texto que SÓ o leitor de tela lê. Nasceu do chip de mês sem
 * dado: eu tinha trocado `opacity:.32` por cor legível e posto `aria-disabled`,
 * mas `aria-disabled` num <span> SEM role é ignorado pela tecnologia assistiva, e
 * `title` em <span> não é anunciado. Ou seja: o estado "sem dado" ficou dito só
 * por COR e traço tracejado — invisível para quem não vê. Aqui a informação vira
 * texto de verdade, fora da tela mas dentro da leitura.
 * ⚠️ `clip-path` + 1px: o `display:none` esconderia da leitura também. */
.gtsi-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
         clip-path:inset(50%);white-space:nowrap;border:0}
.gtsi-dim{color:var(--text-dim)}
.gtsi-ok{color:var(--pos);font-weight:600}
.gtsi-kv{display:grid;grid-template-columns:160px 1fr;gap:8px 16px;margin-top:16px;font-size:14px}
/* [regressão visual 06/09/2026] A coluna de rótulo era 160px FIXOS. Em tela de 320px sobram
   ~124px para o valor, e "tenant_scope_scan ✓" nao cabe: medido `div.gtsi-ok right=327`
   contra `clientWidth 320` — o `overflow-x:hidden` do body APARAVA o final em silencio.
   ⚠️ Nao e so o dashboard: `.gtsi-kv` desenha tambem o cabecalho do pedido na Auditoria
   (Valor / Abertura / Observacao) e os marketplaces do DRE. Consertar no tema conserta as
   duas que ficam; a terceira (marketplaces do DRE) traz a propria grade e NUNCA teve o
   defeito — medido: 0 vazamentos em 320px la. A mensagem do commit anterior dizia "as
   tres" e estava errada; sao DUAS. Abaixo de 420px o par vira uma coluna so.

   🔴 ESTE COMENTARIO JA MATOU A REGRA UMA VEZ (06/09/2026). Eu fechei o bloco aqui no meio
   e deixei 6 linhas de texto CRU na folha: o parser entra em recuperacao de erro, engole o
   bloco `{...}` seguinte — a `@media` inteira — e NAO AVISA NADA. `php -l` nao le CSS, o
   `grep` achava a regra intacta, e o vazamento de 320px voltou em silencio. Pior: os
   "0 desalinhados" que eu medi no DRE eram falso-verde — alinhou porque a regra estava
   MORTA, nao porque o `:not()` funcionou. 🔑 *Regra de CSS se prova pelo `document.styleSheets`
   do navegador, nunca pelo texto do arquivo.* ⚠️ E nao escreva o terminador de comentario DENTRO do comentario nem entre
   crases: o parser nao le aspas, e eu fiz exatamente isso na frase que
   descreve o defeito. Ha assercao para o balanco de abre-e-fecha.

   ⚠️ A 1ª versão desta regra alcançava TAMBÉM a variante de coluna automática do DRE
   (marketplaces), que traz a própria grade e não vira uma coluna. Lá a grade não mudava
   (estilo inline vence media query) mas o `margin-top` do rótulo passava, jogando o rótulo
   8px ABAIXO do valor em 3 linhas de cada card. *Metade de uma regra aplicada é uma regra
   errada* — mesma família de "sobrescrever metade de um par cor/fundo". Daí o
   `:not(.gtsi-kv--auto)`. */
@media (max-width:420px){ .gtsi-kv:not(.gtsi-kv--auto){grid-template-columns:1fr;gap:2px 0}
                          .gtsi-kv:not(.gtsi-kv--auto) .k{margin-top:8px} }
.gtsi-kv .k{color:var(--text-muted)}

/* ===================================================================
 * COMPONENTES DO DRE (reusados por todos os painéis 1D — não repintar)
 * =================================================================== */
/* Coluna central única: conteúdo e barras alinham no mesmo eixo (estilo organizado/centralizado) */
:root{--container:1280px;--gutter:24px}
.gtsi-wrap{max-width:var(--container);margin:0 auto;padding:20px var(--gutter)}
/* Barras full-bleed (fundo de ponta a ponta) com o CONTEÚDO alinhado à coluna central */
.gtsi-top,.gtsi-nav,.gtsi-filters,.gtsi-chips{
  padding-left:calc(max(0px, (100% - var(--container)) / 2) + var(--gutter)) !important;
  padding-right:calc(max(0px, (100% - var(--container)) / 2) + var(--gutter)) !important;
}

/* Navegação por painel */
.gtsi-nav{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--border);padding:0 20px;background:var(--bg-elev)}
.gtsi-tab{padding:12px 14px;font-size:13.5px;font-weight:600;color:var(--text-muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.gtsi-tab:hover{color:var(--text)}
.gtsi-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.gtsi-subnav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}
/* 🔴 [design-reviewer 26/08/2026] Esta classe nasceu para <a> e é usada em 51 <button> por
   4 telas (Estoque, Arena agenda/quadras, DRE marketplaces). Faltava `background`,
   `font-family` e `cursor`: num <button>, o navegador pinta o ButtonFace dele — e com
   `color-scheme:dark` isso vira CINZA CHAPADO. O efeito na tela de Estoque: "movimentar"
   (que é <a>) saía com contorno, enquanto "editar" saía cinza sólido parecendo DESABILITADO
   e "excluir" virava a pílula de maior peso visual da linha — a única ação destrutiva como a
   mais chamativa, o inverso da hierarquia. Corrigido na FONTE porque o defeito é dela. */
.gtsi-subtab{padding:7px 12px;font-size:12.5px;font-weight:600;color:var(--text-muted);border:1px solid var(--border-int);border-radius:8px;
             background:transparent;font-family:inherit;cursor:pointer}
/* ⚠️ O `inline-flex` fica SÓ no <button>. Aplicá-lo à classe inteira mudaria o alinhamento
   de dezenas de <a class="gtsi-subtab"> nas subnavs de 16 páginas — telas que hoje estão
   certas. Consertar um <button> não é motivo para mexer no que já funciona. */
button.gtsi-subtab{display:inline-flex;align-items:center;justify-content:center;text-align:center}
.gtsi-subtab:hover{color:var(--text);border-color:var(--border-2)}
.gtsi-subtab.active{color:var(--on-accent);background:var(--accent);border-color:var(--accent)}

/* Barra de filtros */
.gtsi-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:16px 20px;background:var(--bg-elev);border-bottom:1px solid var(--border)}
.gtsi-filters .ttl{font-size:18px;font-weight:700;color:var(--text);margin-right:auto}
.gtsi-filters .ttl small{display:block;font-size:12px;font-weight:400;color:var(--text-dim)}
.gtsi-select{padding:9px 12px;border:1px solid var(--border-int);border-radius:9px;background:#0C1117;color:var(--text);font-size:13px;font-family:inherit}
.gtsi-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}
.gtsi-btn-sm{padding:9px 14px;border:none;border-radius:9px;background:var(--accent);color:var(--on-accent);font-weight:700;font-size:13px;cursor:pointer}
.gtsi-btn-sm:hover{background:var(--accent-h)}

/* ── SECUNDÁRIO e DESTRUTIVO ────────────────────────────────────────────────────────────────
 * [design-reviewer 02/09/2026] `.gtsi-btn-sm` é PRIMÁRIO (accent sólido, peso 700) e era o
 * único que existia. Resultado: "Editar" e "Excluir" saíam idênticos, e a ação destrutiva
 * ficava com o MESMO peso da corriqueira — a mesma lição já gravada aqui em 26/08 no bloco
 * `.gtsi-subtab`, repetida. Sem um secundário canônico, `leads.php`, `clientes.php` e
 * `catalogo.php` copiavam o mesmo `style=` inline; agora é um lugar só.
 *
 * 🔑 Destrutivo REVERSÍVEL (tirar do catálogo, remover lead) é SECUNDÁRIO em repouso e vermelho
 * no hover/foco. Vermelho permanente numa lista de 40 linhas vira parede vermelha e para de
 * significar perigo — o vermelho fixo fica para o que não se desfaz. */
/* ── LINHA INATIVA ──────────────────────────────────────────────────────────────────────
 * [a11y 06/09/2026] 🔴 Era `opacity:.5` na <tr> inteira, e isso apagava a coluna de AÇÕES
 * junto: o botão ▶ que REATIVA caía de 7,06:1 para 2,75:1. Era o estado inativo tornando
 * ilegível o botão que o desfaz — a pessoa via a linha apagada e não achava a saída.
 * 🔑 Inativo se marca ONDE A INFORMAÇÃO ESTÁ: o nome esmaece (5,75:1, ainda legível) e o
 * selo "○ inativo" continua dizendo. As ações ficam em opacidade cheia, porque agir sobre
 * o inativo é justamente o que se quer fazer nessa linha. */
.linha-inativa td{color:var(--text-dim)}
.linha-inativa td b,.linha-inativa td strong{color:var(--text-dim);font-weight:600}

.gtsi-btn-sm.sec{background:transparent;border:1px solid var(--border-int);color:var(--text-muted);font-weight:600}
.gtsi-btn-sm.sec:hover{background:transparent;color:var(--text);border-color:var(--border-2)}
.gtsi-btn-sm.danger{background:transparent;border:1px solid var(--border-int);color:var(--text-muted);font-weight:600}
.gtsi-btn-sm.danger:hover,.gtsi-btn-sm.danger:focus-visible{background:rgba(248,113,113,.10);border-color:var(--neg);color:var(--neg)}

/* [a11y 06/09/2026] FOCO DE TECLADO, numa regra só. Havia estilo de foco para `.gtsi-input`
   e `.gtsi-select`, e para exatamente DOIS botões — a intenção existia e não foi generalizada.
   Sem `outline:none` global o anel padrão do navegador sobrevive, mas ele é fino e, sobre um
   botão secundário que até agora não tinha contorno, praticamente não se separava.
   --accent-h sobre --card = 8,54:1 (eu tinha escrito 9,4; o portão remediu e este arquivo
   prega justamente que número se confere). */
.gtsi-btn:focus-visible,.gtsi-btn-sm:focus-visible,.gtsi-subtab:focus-visible,
.gtsi-tab:focus-visible,.cm-btn:focus-visible,.gtsi-toggle a:focus-visible,
.gd-x:focus-visible,a.gtsi-btn:focus-visible,a.gtsi-btn-sm:focus-visible{
  outline:2px solid var(--accent-h);outline-offset:2px}

/* `.gtsi-btn` é `width:100%` — em rodapé de formulário isso empurra o "Cancelar" para a linha
 * de baixo. `.auto` devolve o botão ao tamanho do conteúdo, sem mexer nas telas que já contam
 * com a largura cheia (Administrativo, Arena e outras 20 usam `class="gtsi-btn"` puro).
 * ⚠️ A 1ª versão deste comentário dizia que a largura cheia "nasceu no LOGIN". Medido pelo
 * portão de regressão visual: `login.php` NÃO carrega este arquivo e não tem nenhum
 * `gtsi-btn`. *Comentário que vira mentira ensina a ignorar os verdadeiros* — a origem real
 * da regra não está apurada, e é melhor não afirmar do que afirmar errado. */
.gtsi-btn.auto{width:auto;margin-top:0;padding:10px 18px}

/* ── Alvo de toque e zoom do iOS ────────────────────────────────────────────────────────────
 * `.gtsi-btn-sm` tem ~36px de altura e `.gtsi-input` 14px de fonte. Abaixo de 44px o toque erra
 * (WCAG 2.5.5), e abaixo de 16px o iOS DÁ ZOOM ao focar o campo — e ao sair, a página fica
 * deslocada. Vale para as 16 páginas, não só para a tela nova que expôs isto. */
@media(max-width:820px){
  /* 🔴 O `inline-flex` NÃO pode vir na classe inteira. O comentário 40 linhas acima já dizia
     isso — "aplicá-lo à classe inteira mudaria o alinhamento de dezenas de <a class=gtsi-subtab>
     nas subnavs de 16 páginas" — e minha 1ª versão passou por cima dele, mexendo em 62 âncoras
     só no celular, onde ninguém revisa. O portão de a11y pegou.
     ⚠️ *Lição gravada NO PRÓPRIO ARQUIVO não dispensa lê-lo antes de editar.*
     Altura e largura são seguras para todos; o `display` fica onde já estava. */
  .gtsi-btn-sm,.gtsi-subtab,.gtsi-btn,.gtsi-tab,.cm-btn,.gtsi-toggle a,.gtsi-select{min-height:44px}
  /* 44 é 44×44: só altura deixa passar o botão de UM GLIFO (as setas ← → da Escala, ~37px).
   *
   * 🔴 MAS `min-width` EM ITEM DE FLEX É UMA ARMADILHA. Todo item flex tem `min-width:auto`
   * implícito, e é justamente esse o piso que o impede de encolher abaixo do próprio conteúdo.
   * Trocá-lo por `44px` REMOVE o piso e libera o `flex-shrink` a esmagar o item até 44px — a
   * regra escrita para deixar o alvo pequeno MAIOR deixou o alvo grande MENOR.
   * Medido pelo portão de regressão visual: as abas do DRE a 375px caíram de 160px para 83px
   * ("Evolução de Resultados") e de 86px para 50px ("Dashboard"), com 96 rótulos CORTADOS e
   * sobrepostos em 13 telas — a navegação do DRE e do CRM inteira, no celular, virou papa.
   * A barra `.gtsi-nav` rola de lado; quem tem de encolher é o container, nunca a aba.
   *
   * ⚠️ `.gtsi-tab` sai da lista: aba com rótulo de texto nunca chega perto de 44px de largura,
   * então o `min-width` ali só tinha efeito colateral. E onde o piso É necessário, ele vem
   * acompanhado de `flex:0 0 auto`, que devolve a recusa a encolher. */
  .gtsi-btn-sm,.cm-btn,.gd-x{min-width:44px;flex:0 0 auto}
  /* O ✕ do drawer tinha ~24×32px e não estava nesta lista. */
  .gd-x{min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  .gtsi-nav .gtsi-tab{flex:0 0 auto}
  .gtsi-btn-sm,button.gtsi-subtab{display:inline-flex;align-items:center;justify-content:center}
  .gtsi-input,.gtsi-select,textarea.gtsi-input{font-size:16px}
}

/* Toggle Gerencial | Contábil */
.gtsi-toggle{display:inline-flex;background:#0C1117;border:1px solid var(--border-2);border-radius:9px;padding:3px}
.gtsi-toggle a{padding:7px 13px;font-size:12.5px;font-weight:600;border-radius:7px;color:var(--text-muted)}
.gtsi-toggle a.active{background:var(--accent);color:var(--on-accent)}

/* KPIs */
.gtsi-grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}
@media(max-width:760px){.gtsi-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}
.gtsi-kpi{padding:18px;min-width:0}   /* min-width:0 deixa o cartão encolher (valor grande não estoura a grade) */
.gtsi-kpi .lbl{display:flex;align-items:center;gap:6px;font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:var(--text-dim);margin-bottom:10px}
.gtsi-kpi .val{font-size:26px;font-weight:800;line-height:1.1}
.gtsi-kpi .sub{font-size:12px;color:var(--text-dim);margin-top:5px}

/* Tabelas */
.gtsi-table{width:100%;border-collapse:collapse;font-size:14px}
.gtsi-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--border)}
.gtsi-table th.r,.gtsi-table td.r{text-align:right}
.gtsi-table td{padding:11px 12px;border-bottom:1px solid var(--border);color:var(--text)}
.gtsi-table tr:hover td{background:rgba(255,255,255,.02)}
.gtsi-table .num{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.gtsi-pos{color:var(--pos)} .gtsi-neg{color:var(--neg)} .gtsi-warn{color:var(--warn)} .gtsi-accent{color:var(--accent)}
.gtsi-row-sub td{font-weight:700;color:var(--text)}
.gtsi-row-hl td{background:var(--accent-soft)}
.gtsi-row-info td{font-size:12px;color:var(--text-dim)}
.gtsi-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;background:var(--accent-soft);color:var(--accent)}

/* ── Kit LIXEIRA: mapeia .cm-btn/.cm-tb ao visual GTSI (uma vez, compartilhado) ── */
.cm-btn{display:inline-block;padding:7px 12px;font-size:12.5px;font-weight:600;color:var(--text-muted);border:1px solid var(--border-int);border-radius:8px;background:transparent;cursor:pointer;text-decoration:none;transition:color .15s,border-color .15s}
.cm-btn:hover{color:var(--text);border-color:var(--border-2)}
.cm-tb{width:100%;border-collapse:collapse;font-size:14px}
.cm-tb th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-dim);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--border)}
.cm-tb td{padding:11px 12px;border-bottom:1px solid var(--border);color:var(--text)}
.cm-tb tr:hover td{background:rgba(255,255,255,.02)}
.gtsi-bar{height:7px;border-radius:999px;background:#0C1117;overflow:hidden}
.gtsi-bar > span{display:block;height:100%;border-radius:999px}

/* ===================================================================
 * RESPONSIVO (celular / tablet) — ajusta TODAS as telas de uma vez.
 * =================================================================== */
/* Qualquer cartão com tabela rola na horizontal (não estoura a tela). */
.gtsi-card:has(table){overflow-x:auto;-webkit-overflow-scrolling:touch}

@media(max-width:820px){
  :root{--gutter:14px}   /* coluna central encosta mais nas bordas no celular */
  .gtsi-wrap{padding:14px}
  .gtsi-top{padding:12px 14px}
  /* Abas dos módulos: 1 linha rolável em vez de quebrar em 3 linhas. */
  .gtsi-nav{flex-wrap:nowrap;overflow-x:auto;padding:0 12px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .gtsi-nav::-webkit-scrollbar{display:none}
  .gtsi-tab{white-space:nowrap;padding:12px 11px;font-size:13px}
  /* Filtros: título ocupa a linha toda; controles descem e quebram. */
  .gtsi-filters{padding:12px 14px;gap:8px}
  .gtsi-filters .ttl{width:100%;margin-right:0;font-size:16px}
  .gtsi-kpi{padding:14px}
  .gtsi-kpi .val{font-size:21px}
  .gtsi-table{font-size:13px}
  .gtsi-table th,.gtsi-table td{padding:9px 8px}
  /* Menu do usuário: só o avatar (esconde o nome) p/ caber. */
  .gtsi-top .gtsi-user-nm{display:none}
  .gtsi-user-menu{min-width:200px}
}
@media(max-width:460px){
  .gtsi-kpi .val{font-size:18px}
  .gtsi-kpi .lbl{font-size:10px;letter-spacing:.3px}
  .gtsi-filters .ttl{font-size:15px}
  .gtsi-table{font-size:12.5px}
  .gtsi-table th,.gtsi-table td{padding:8px 7px}
}

/* Respeita quem pediu menos movimento no sistema operacional (WCAG 2.2.2).
   ⚠️ Esta nota dizia que o ÚNICO `animation: infinite` do ERP morava no `_topnav.php`. É
   FALSO — medido pelo portão de a11y em 06/09/2026: há também `pdv/cozinha.php` (pulseRed) e
   `pdv/atendente.php` (pulse), telas que ficam ligadas o dia inteiro na cozinha e no salão, e
   que NÃO carregam este arquivo. A guarda abaixo não as alcança. *Comentário que vira mentira
   ensina a ignorar os verdadeiros.* */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
                       transition-duration:.01ms!important;scroll-behavior:auto!important}
}
