/* ════════════════════════════════════════
   PuxaBoi — Design system
   Baseado no protótipo visual (tema escuro/dourado, Bebas Neue + Barlow
   Condensed, ícones Tabler) já validado com o cliente.
   Tamanhos pensados para telas grandes (o protótipo original tinha uma
   camada extra de "ajustes para telas grandes" — aqui isso já vem embutido
   como padrão, com mais um reforço a partir de 1600px).
════════════════════════════════════════ */
:root{
  --font-ui:system-ui,-apple-system,"Segoe UI",Arial,sans-serif;
  --bg:#080808;--bg2:#111;--bg3:#191919;--bg4:#222;--bg5:#2a2a2a;
  --border:#282828;--border2:#383838;--border3:#484848;
  --gold:#E6C200;--gold2:#F5D633;--gold3:#FFE873;--gdim:#201A02;
  /* --txt4 clareado de #6E675F pra #9A9184: o tom antigo dava ~3,6:1 de
     contraste contra --bg (abaixo do 4,5:1 que WCAG AA pede pra texto
     normal) e caía pra ~2,9:1 contra o --bg5, o pior caso real de uso
     (ex: .mapa-num.pago). O novo tom passa de 4,5:1 em todos os fundos do
     sistema, mantendo a mesma tonalidade morna (R>G>B), só mais claro. */
  --txt:#F2EDE6;--txt2:#C7C2BA;--txt3:#AAA49C;--txt4:#AAA49C;
  --green:#4ADE80;--gbg:#091F12;--gborder:#153020;
  --red:#F87171;--rbg:#200A0A;--rborder:#3A1212;
  --blue:#60A5FA;--bbg:#091428;--bborder:#122038;
  --amber:#FBBF24;--ambg:#1C1208;--amborder:#3A2C08;
  --live:#EF4444;
}
*{box-sizing:border-box;margin:0;padding:0;}
html{font-size:17px;overflow-x:hidden;}
body{background:var(--bg);color:var(--txt);font-family:var(--font-ui);min-height:100vh;font-size:16px;line-height:1.45;overflow-x:hidden;}
a{color:inherit;text-decoration:none;}
code{overflow-wrap:anywhere;}
::-webkit-scrollbar{width:9px;height:9px;}
::-webkit-scrollbar-thumb{background:var(--bg5);border-radius:5px;}

/* ── FOCO VISÍVEL (teclado/acessibilidade) ── */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,
textarea:focus-visible,.btn:focus-visible,.mapa-num:focus-visible,
.pay-option:focus-visible,.ev-card:focus-visible,.sb-item:focus-visible,
.acc-head:focus-visible{
  outline:2px solid var(--gold3);outline-offset:2px;border-radius:6px;
}
.input:focus-visible,.select:focus-visible,.acc-input:focus-visible{outline-offset:1px;}

.bebas{font-family:'Bebas Neue',sans-serif;}
.gold{color:var(--gold);}
.txt2{color:var(--txt2);}
.txt3{color:var(--txt3);}

/* ── BOTÕES ── */
.btn{border-radius:10px;font-size:15px;font-weight:700;padding:12px 22px;cursor:pointer;border:none;font-family:var(--font-ui);display:inline-flex;align-items:center;gap:8px;transition:background .12s,color .12s,transform .1s,box-shadow .12s;white-space:nowrap;}
.btn i{font-size:16px;}
.btn:disabled{opacity:.7;cursor:default;}
@keyframes girar{to{transform:rotate(360deg);}}
.spin{display:inline-block;animation:girar .7s linear infinite;}
.btn:active{transform:scale(.97);}
.btn-gold{background:var(--gold);color:#0c0900;box-shadow:0 3px 14px rgba(230,194,0,.22);}
.btn-gold:hover{background:var(--gold2);box-shadow:0 5px 18px rgba(230,194,0,.32);transform:translateY(-1px);}
.btn-ghost{background:transparent;color:var(--txt2);border:1.5px solid var(--border2);}
.btn-ghost:hover{background:var(--bg3);color:var(--txt);border-color:var(--border3);}
.btn-sm{padding:9px 16px;font-size:13.5px;}
.btn-lg{padding:18px 26px;font-size:19px;border-radius:11px;}
.btn-red{background:var(--rbg);color:var(--red);border:1px solid var(--rborder);}
/* Cancelar venda: fica discreto (cinza) até passar o mouse ou focar -- só
   vira vermelho na hora que alguém realmente for clicar. Vive dentro do
   modal de detalhes da senha agora, não mais solto na linha da tabela. */
.btn-cancelar-linha:hover,.btn-cancelar-linha:focus-visible{background:var(--rbg);color:var(--red);border-color:var(--rborder);}
.btn-green{background:var(--gbg);color:var(--green);border:1px solid var(--gborder);}
.btn-blue{background:var(--bbg);color:var(--blue);border:1px solid var(--bborder);}
.btn-block{width:100%;justify-content:center;}

/* ── INPUTS ── */
.input,.select,textarea.input{background:var(--bg3);border:1px solid var(--border2);border-radius:9px;color:var(--txt);font-family:var(--font-ui);font-size:17px;padding:13px 15px;outline:none;transition:border-color .15s;width:100%;}
.input:focus,.select:focus{border-color:var(--gold);}
.input::placeholder{color:var(--txt4);}
.select{cursor:pointer;appearance:none;}
.select option{background:#191919;}
textarea.input{resize:vertical;min-height:100px;font-size:16px;}

.form-group{display:flex;flex-direction:column;gap:7px;margin-bottom:18px;}
.form-label{font-size:14px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--txt2);}
.form-hint{font-size:14px;color:var(--txt4);margin-top:3px;}

/* Campo com prefixo fixo (ex: "puxaboi.com.br/e/" antes do slug) — um
   controle único (borda/fundo compartilhados) em vez de texto solto do lado
   do input, que no mobile (hostname comprido + tela estreita) empurrava o
   input e ficava com cara de elemento quebrado. flex-wrap + min-width:0
   evitam o input estourar a largura da tela; se o prefixo não couber numa
   linha só, ele quebra pra cima do input em vez de forçar scroll horizontal. */
.input-group-prefixo{display:flex;flex-wrap:wrap;align-items:stretch;border:1px solid var(--border2);border-radius:9px;background:var(--bg3);overflow:hidden;}
.input-group-prefixo .igp-prefixo{display:flex;align-items:center;padding:7px 10px;font-size:13.5px;color:var(--txt3);background:var(--bg4);max-width:100%;overflow-wrap:anywhere;word-break:break-all;}
.input-group-prefixo .input{flex:1;min-width:120px;border:none;border-radius:0;background:transparent;}
.input-group-prefixo .input:focus{outline:none;}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.form-row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;}
.field-check{display:flex;align-items:center;gap:10px;font-size:15px;color:var(--txt2);margin-top:5px;}
.field-check input{width:18px;height:18px;accent-color:var(--gold);}

/* ── CARDS ── */
.card{background:var(--bg2);border:1px solid var(--border2);border-radius:14px;padding:26px 28px;margin-bottom:20px;box-shadow:0 2px 10px rgba(0,0,0,.25);}
.card h1{font-family:'Bebas Neue',sans-serif;font-size:34px;letter-spacing:.03em;color:var(--txt);margin:0 0 6px 0;}
.card h2{font-family:'Bebas Neue',sans-serif;font-size:25px;letter-spacing:.03em;color:var(--txt);margin:0 0 6px 0;}
.card .sub{font-size:15px;color:var(--txt3);margin-bottom:18px;}
.categoria-badge{display:inline-flex;align-items:center;gap:9px;background:var(--gdim);border:1.5px solid var(--gold);color:var(--gold);font-family:var(--font-ui);font-weight:700;font-size:19px;letter-spacing:.02em;padding:8px 18px;border-radius:10px;margin:2px 0 12px;}
.categoria-badge i{font-size:17px;}
@media (max-width:480px){.categoria-badge{font-size:17px;padding:7px 14px;}}
.divider{height:1px;background:var(--border);margin:18px 0;}
.agendar-details summary{cursor:pointer;font-size:13.5px;font-weight:600;color:var(--txt3);list-style:none;}
.agendar-details summary::-webkit-details-marker{display:none;}
.agendar-details summary::before{content:'\203A';display:inline-block;margin-right:6px;transition:transform .12s;}
.agendar-details[open] summary::before{transform:rotate(90deg);}
.agendar-details summary:hover{color:var(--txt2);}
.menu-kebab{position:relative;display:inline-block;}
.menu-kebab summary{cursor:pointer;list-style:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid var(--border2);color:var(--txt3);background:var(--bg2);}
/* Variante maior, pra ficar do lado de um .btn cheio (não .btn-sm) sem
   destoar de altura — ex: cards de evento do Dashboard, ao lado de "Ver
   vendas"/"Continuar cadastro". */
.menu-kebab.lg summary{width:45px;height:45px;border-radius:10px;font-size:17px;}
.menu-kebab summary::-webkit-details-marker{display:none;}
.menu-kebab summary:hover{background:var(--bg3);color:var(--txt);}
.menu-kebab .menu-list{position:absolute;right:0;top:calc(100% + 6px);background:var(--bg3);border:1px solid var(--border2);border-radius:10px;padding:6px;min-width:170px;z-index:20;box-shadow:0 8px 24px rgba(0,0,0,.4);display:flex;flex-direction:column;gap:2px;}
.menu-kebab .menu-list a,.menu-kebab .menu-list button{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:7px;font-size:14px;color:var(--txt2);text-decoration:none;background:none;border:none;width:100%;text-align:left;cursor:pointer;font-family:var(--font-ui);}
.menu-kebab .menu-list a:hover,.menu-kebab .menu-list button:hover{background:var(--bg4);color:var(--txt);}
.section-label{font-size:13px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--txt2);margin:20px 0 11px;}
.section-label:first-child{margin-top:0;}

/* Seção "Encerrados" do Dashboard (admin/index.php) — recolhida por padrão
   pra não deixar a lista de eventos infinita com o tempo (ver conversa com o
   Caio, ao vivo/em breve sempre visíveis, encerrados só quando pedir). */
.admin-encerrados-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;background:var(--bg2);border:1px solid var(--border);border-radius:13px;padding:13px 16px;margin:20px 0 0;font-size:14px;font-weight:700;color:var(--txt2);cursor:pointer;font-family:var(--font-ui);}
.admin-encerrados-toggle:hover{background:var(--bg3);}
.admin-encerrados-toggle span{display:flex;align-items:center;gap:8px;}
.admin-encerrados-count{background:var(--bg4);color:var(--txt3);font-size:12px;font-weight:700;padding:2px 8px;border-radius:20px;}
.admin-encerrados-toggle i.ti-chevron-down{transition:transform .15s ease;color:var(--txt4);}
.admin-encerrados-toggle.aberto i.ti-chevron-down{transform:rotate(180deg);}
#encerrados-painel{margin-top:16px;}

/* ── PILLS / BADGES ── */
.pill{font-size:13.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:4px 11px;border-radius:6px;display:inline-block;}
.pill-gold{background:var(--gdim);color:var(--gold);}
.pill-green{background:var(--gbg);color:var(--green);}
.pill-red{background:var(--rbg);color:var(--red);}
.pill-blue{background:var(--bbg);color:var(--blue);}
.pill-amber{background:var(--ambg);color:var(--amber);}
.pill-dim{background:var(--bg4);color:var(--txt3);}
/* Forma de pagamento discreta embaixo do status, na lista de vendas. */
.td-metodo{display:block;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--txt3);margin-top:4px;}
.live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--live);animation:blink 1.1s ease-in-out infinite;}
.live-badge{display:inline-flex;align-items:center;gap:7px;background:var(--live);color:#fff;font-size:13.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:5px 12px;border-radius:6px;white-space:nowrap;}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.2}}

/* ── TOGGLES / CFG ROWS ── */
.toggle{position:relative;width:42px;height:24px;flex-shrink:0;display:inline-block;}
.toggle input{opacity:0;width:0;height:0;position:absolute;}
.toggle-track{position:absolute;inset:0;background:var(--bg5);border-radius:12px;cursor:pointer;transition:background .2s;}
.toggle input:checked+.toggle-track{background:var(--gold);}
.toggle-thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s;pointer-events:none;}
.toggle input:checked~.toggle-thumb{transform:translateX(18px);}
.cfg-row{display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid var(--border);gap:14px;}
.cfg-row:last-child{border-bottom:none;}
.cfg-nm{font-size:16px;font-weight:600;color:var(--txt2);}
.cfg-sub{font-size:13px;color:var(--txt4);margin-top:2px;}

/* ── STEP TABS (assistente de etapas) ── */
.step-tabs{display:flex;gap:0;border-bottom:1px solid var(--border);padding:0 28px;flex-wrap:wrap;background:var(--bg2);}
.step-tab{display:flex;align-items:center;gap:8px;padding:13px 0;margin-right:28px;font-size:14px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--txt4);text-decoration:none;border-bottom:2px solid transparent;transition:color .15s,border-color .15s;white-space:nowrap;}
.step-tab:hover{color:var(--txt2);}
.step-tab.active{color:var(--gold);border-bottom-color:var(--gold);}
.step-tab.done{color:var(--green);}
.step-tab .sn{width:22px;height:22px;border-radius:50%;font-size:11px;display:flex;align-items:center;justify-content:center;background:var(--bg4);color:var(--txt4);flex-shrink:0;font-weight:700;}
.step-tab.active .sn{background:var(--gdim);color:var(--gold);}
.step-tab.done .sn{background:var(--gbg);color:var(--green);}
.wizard-footer{background:var(--bg2);border:1px solid var(--border2);border-radius:12px;padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:18px;}
.checklist-item{display:flex;align-items:center;gap:9px;font-size:14px;padding:5px 0;}
.checklist-item.ok{color:var(--green);}
.checklist-item.pending{color:var(--amber);}
.rascunho-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--amber);background:var(--ambg);border:1px solid var(--amborder);padding:4px 10px;border-radius:6px;}

/* ── VISUALIZAR SENHA (modo leitura, dentro do modal de Vendas) ── */
.senha-secao{margin-bottom:6px;}
.senha-view-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 20px;background:var(--bg3);border:1px solid var(--border);border-radius:10px;padding:13px 16px;margin-bottom:4px;}
.senha-view-item{display:flex;flex-direction:column;gap:2px;min-width:0;}
.senha-view-item.span2{grid-column:1 / -1;}
.senha-view-label{font-size:12.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--txt4);}
.senha-view-value{font-size:15px;font-weight:600;color:var(--txt2);word-break:break-word;}
.senha-view-value.gold{color:var(--gold);}
.senha-pares{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
.senha-par-item{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:7px 8px 7px 12px;font-size:14px;color:var(--txt2);flex:1;min-width:170px;}
@media (max-width:480px){
  .senha-view-grid{grid-template-columns:1fr;}
  .senha-view-item.span2{grid-column:auto;}
}

/* ── PÁGINA DE ERRO/AVISO (paginaErro()) ── */
.erro-pagina{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;}
.erro-card{max-width:440px;width:100%;text-align:center;background:var(--bg2);border:1px solid var(--border);border-radius:16px;padding:44px 32px;}
.erro-icone{width:64px;height:64px;border-radius:50%;background:var(--rbg);color:var(--red);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;font-size:28px;}
.erro-codigo{font-family:'Bebas Neue',sans-serif;font-size:44px;letter-spacing:.04em;color:var(--txt4);line-height:1;margin-bottom:4px;}
.erro-card h1{font-size:22px;margin:0 0 10px;}
.erro-card p{color:var(--txt3);font-size:15px;line-height:1.5;margin-bottom:26px;}

/* ── CONFIRMAÇÃO (troca o confirm() nativo do navegador) ── */
dialog.confirm-modal{width:min(420px,92vw);}
.confirm-modal .modal-body{padding:30px 26px 24px;text-align:center;}
.confirm-icon{width:52px;height:52px;border-radius:50%;background:var(--rbg);color:var(--red);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:24px;}
.confirm-msg{font-size:15.5px;color:var(--txt2);line-height:1.5;margin-bottom:24px;}
.confirm-botoes{display:flex;gap:10px;}
.confirm-botoes .btn{flex:1;}

.compra-regra{display:flex;align-items:center;gap:9px;background:var(--gdim);border:1px solid var(--gborder);border-radius:11px;color:var(--txt2);font-size:14px;padding:12px 15px;margin-bottom:20px;}
.compra-regra i{color:var(--gold);font-size:19px;flex:none;}

/* ── ACCORDION (categorias) ── */
.acc{background:var(--bg3);border:1px solid var(--border2);border-radius:13px;overflow:hidden;margin-bottom:14px;}
.acc-head{padding:18px 20px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;flex-wrap:wrap;gap:10px;}
.acc-head:hover{background:var(--bg4);}
.acc-nome{font-size:18px;font-weight:700;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
/* Reordenar categorias (ordem manual de corrida — ver categories.ordem) */
.cat-reordenar{display:flex;flex-direction:column;gap:1px;margin-right:2px;}
.btn-reordenar{background:var(--bg4);border:1px solid var(--border2);color:var(--txt3);width:22px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:4px;cursor:pointer;font-size:12px;line-height:1;padding:0;}
.btn-reordenar:hover:not(:disabled){color:var(--gold);border-color:var(--gold3);}
.btn-reordenar:disabled{opacity:.3;cursor:default;}
.acc-right{display:flex;align-items:center;gap:10px;}
.acc-preview{font-size:14px;color:var(--txt3);}
.acc-body{padding:20px;border-top:1px solid var(--border);}
.acc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px;}
.acc-field{display:flex;flex-direction:column;gap:5px;}
.acc-section{padding-top:16px;margin-top:16px;border-top:1px solid var(--border);}
.acc-section:first-child{padding-top:0;margin-top:0;border-top:none;}
.acc-section-title{font-size:11px;font-weight:600;color:var(--gold);text-transform:uppercase;letter-spacing:.04em;margin-bottom:10px;}
.modo-venda{display:flex;flex-direction:column;gap:6px;}
.modo-venda label{display:flex;align-items:flex-start;gap:8px;font-size:14.5px;padding:9px 11px;border-radius:8px;border:1px solid var(--border2);cursor:pointer;color:var(--txt2);}
.modo-venda label:has(input:checked){border-color:var(--gold);background:var(--gdim);color:var(--txt);}
.modo-venda input{margin-top:3px;accent-color:var(--gold);}
.acc-toggle-linha{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-radius:8px;border:1px solid var(--border2);}
.acc-lbl{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--txt2);}
.acc-input{background:var(--bg2);border:1px solid var(--border2);border-radius:8px;color:var(--txt);font-family:var(--font-ui);font-size:16px;padding:10px 13px;outline:none;width:100%;}
.acc-input:focus{border-color:var(--gold);}
.acc-input::placeholder{color:var(--txt4);}

/* ── DADOS DO VAQUEIRO (carrinho.php) — campos com ícone, cara de app,
   sem separação por rótulo entre obrigatório/opcional (só o *). ── */
.vq-titulo{display:flex;align-items:center;gap:9px;font-size:19px;font-weight:700;color:var(--txt);margin:4px 0 16px;}
.vq-titulo i{color:var(--gold);font-size:20px;}
.vq-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:22px;}
.vq-field{display:flex;flex-direction:column;gap:6px;}
.vq-field-lbl{display:block;font-size:12.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--txt3);padding-left:3px;}
.vq-input-wrap{position:relative;display:flex;align-items:center;}
.vq-input-wrap>i{position:absolute;left:16px;font-size:17px;color:var(--txt4);pointer-events:none;transition:color .15s;}
.vq-input-wrap input{width:100%;background:var(--bg3);border:1.5px solid var(--border2);border-radius:13px;padding:14px 16px 14px 44px;font-family:var(--font-ui);font-size:17px;color:var(--txt);outline:none;transition:border-color .15s,background-color .15s;}
.vq-input-wrap input::placeholder{color:var(--txt4);}
.vq-input-wrap input:focus{border-color:var(--gold);background:var(--bg2);}
.vq-input-wrap:focus-within>i{color:var(--gold);}

/* ── RESUMO DA COMPRA (carrinho.php) — evento, categoria e senhas
   escolhidas viviam espalhados (badge + texto cinza + seção separada);
   agora é um bloco só, no molde de resumo de pedido de app de delivery. ── */
.compra-resumo{background:var(--bg3);border:1px solid var(--border2);border-radius:16px;padding:18px 20px;margin-bottom:22px;}
.compra-resumo-evento{display:flex;align-items:center;gap:6px;font-size:13.5px;color:var(--txt3);margin-bottom:3px;}
.compra-resumo-evento i{color:var(--txt4);font-size:13px;}
.compra-resumo-categoria{font-family:'Bebas Neue',sans-serif;font-size:27px;letter-spacing:.02em;color:var(--gold);line-height:1.15;}

/* ── CHIPS DE SENHA NA SACOLA (carrinho.php) — precisavam de mais peso
   visual, senão passavam despercebidas junto ao resto do formulário. ── */
.sacola-chips{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:24px;}
.sacola-chip{display:inline-flex;align-items:center;gap:10px;background:var(--gdim);border:1.5px solid var(--gold);border-radius:14px;padding:9px 10px 9px 18px;}
.sacola-chip-num{font-family:'Bebas Neue',sans-serif;font-size:23px;letter-spacing:.02em;color:var(--gold);line-height:1;}
.sacola-chip button{background:var(--bg2);border:none;color:var(--txt3);width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:17px;transition:background-color .15s,color .15s;}
.sacola-chip button:hover{background:var(--rbg);color:var(--red);}
.compra-complementares{border-top:1px solid var(--border2);padding-top:16px;margin:-6px 0 22px;}
.compra-complementares-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;}
.compra-complementares-head h3{font-size:16px;line-height:1.3;margin:0;}
.compra-complementares .vq-grid{margin-bottom:0;}

/* ── CATEGORIAS (evento.php) — lado a lado, evita card esticado ── */
.cat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px;align-items:start;}
.cat-card{margin-bottom:0;display:flex;flex-direction:column;}
.cat-card .btn-block,.cat-card .empty{margin-top:auto;}

/* ── EVENT CARDS (público) — estilo "pôster", com selos sobrepostos ── */
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;}
.ev-card{background:var(--bg2);border:1px solid var(--border2);border-radius:16px;overflow:hidden;transition:border-color .15s,transform .15s,box-shadow .15s;box-shadow:0 2px 8px rgba(0,0,0,.2);}
.ev-card:hover{border-color:var(--gold);transform:translateY(-4px);box-shadow:0 14px 28px rgba(0,0,0,.4);}
.ev-card:hover .ev-nome{color:var(--gold);}
.ev-cover{height:138px;position:relative;overflow:hidden;}
/* Capa com foto do organizador (ev-hero, topo do evento.php) — altura fixa
   em pixel cortava demais em telas largas, porque a caixa ficava bem mais
   larga sem ficar mais alta (o crop do background-size:cover é proporcional
   à caixa, não à imagem). Com aspect-ratio a altura acompanha a largura —
   o corte fica igual em qualquer tela — até um teto (max-height) pra não
   virar uma faixa gigante em monitor muito largo. 1.75 é a proporção que já
   ficava boa no mobile (455x260 medido ao vivo). */
.ev-cover.has-banner{width:100%;height:auto;aspect-ratio:1.75;min-height:170px;max-height:380px;}
.ev-cover-icon{position:absolute;right:10px;bottom:-14px;width:92px;height:92px;opacity:.16;filter:grayscale(1) brightness(1.8);}
.ev-cover-icon img{width:100%;height:100%;object-fit:contain;display:block;}
.ev-cover-0{background:linear-gradient(135deg,#241a05,#3a2a08);}
.ev-cover-1{background:linear-gradient(135deg,#1a1408,#4a3210);}
.ev-cover-2{background:linear-gradient(135deg,#150f08,#332108);}
.ev-cover-3{background:linear-gradient(135deg,#1f1608,#42300c);}
/* Zoom sutil na capa ao passar o mouse no card — a imagem/gradiente de fundo
   vira um ::before que herda o background do .ev-cover (inclusive quando é
   inline, com a foto do organizador) e só ele escala, sem mexer no tamanho
   dos badges/data que ficam por cima. */
.ev-cover::before{content:'';position:absolute;inset:0;background:inherit;transition:transform .5s cubic-bezier(.2,.7,.2,1);}
.ev-card:hover .ev-cover::before{transform:scale(1.08);}
.ev-badge{position:absolute;top:10px;right:10px;font-size:12.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:6px 12px;border-radius:7px;text-shadow:0 1px 2px rgba(0,0,0,.4);box-shadow:0 3px 10px rgba(0,0,0,.35);}
.ev-badge.live{background:var(--live);color:#fff;display:flex;align-items:center;gap:6px;}
.ev-badge.em-breve{background:var(--amber);color:#1a1200;text-shadow:none;}
.ev-badge.encerrada{background:rgba(8,8,8,.78);backdrop-filter:blur(3px);color:var(--txt);}
.ev-date-badge{position:absolute;left:10px;bottom:10px;background:rgba(8,8,8,.82);backdrop-filter:blur(3px);color:var(--gold);font-size:13.5px;font-weight:700;padding:7px 13px;border-radius:8px;display:flex;align-items:center;gap:7px;text-shadow:0 1px 2px rgba(0,0,0,.4);}
.ev-date-badge i{color:var(--gold);font-size:14.5px;}
.ev-card-top{padding:16px 18px 4px;}
.ev-nome{font-family:'Bebas Neue',sans-serif;font-size:26px;letter-spacing:.03em;line-height:1.15;transition:color .15s;}
.ev-parque{font-size:14px;color:var(--txt3);margin-top:4px;display:flex;align-items:center;gap:5px;}
.ev-deadline{font-size:13.5px;font-weight:700;display:flex;align-items:center;gap:5px;margin-top:8px;padding:5px 10px;border-radius:7px;width:fit-content;}
.ev-deadline i{font-size:13px;}
.ev-deadline-fecha{background:var(--ambg);color:var(--amber);border:1px solid var(--amborder);}
.ev-deadline-abre{background:var(--bbg);color:var(--blue);border:1px solid var(--border2);}
.ev-stat{margin:14px 18px 0;background:var(--bg3);border:1px solid var(--border);border-radius:10px;padding:10px 14px;display:flex;align-items:center;gap:12px;}
.ev-stat i{color:var(--gold);font-size:17px;background:rgba(230,178,50,.14);width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.ev-stat-lbl{font-size:11.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--txt4);}
.ev-stat-val{font-size:16.5px;font-weight:700;color:var(--txt);font-variant-numeric:tabular-nums;}
.ev-stat-premio{background:linear-gradient(135deg,rgba(230,178,50,.16),rgba(230,178,50,.05));border-color:rgba(230,178,50,.4);}
.ev-stat-premio i{font-size:19px;background:rgba(230,178,50,.22);}
.ev-stat-premio .ev-stat-lbl{color:var(--txt3);}
.ev-stat-premio .ev-stat-val{color:var(--txt);font-size:19px;}
.ev-premio-badge{position:absolute;right:10px;bottom:10px;background:var(--gold);color:#1a1200;font-size:13px;font-weight:800;padding:6px 11px;border-radius:7px;display:flex;align-items:center;gap:6px;box-shadow:0 2px 10px rgba(0,0,0,.4);}
.ev-premio-badge i{font-size:13px;}
.ev-pills{display:flex;gap:7px;flex-wrap:wrap;padding:12px 18px 0;}
.ev-footer{padding:13px 18px 17px;display:flex;align-items:center;justify-content:space-between;gap:10px;}
.ev-cats{font-size:14px;color:var(--txt3);}
.ev-action{font-size:14px;font-weight:700;color:var(--gold);display:flex;align-items:center;gap:6px;}
.premio-box{margin-top:16px;display:inline-flex;align-items:center;gap:14px;background:linear-gradient(135deg,rgba(230,194,0,.14),rgba(230,194,0,.03));border:1px solid rgba(230,194,0,.32);border-radius:14px;padding:11px 20px 11px 12px;}
.premio-box i{width:42px;height:42px;border-radius:11px;background:var(--gold);color:#1a1200;font-size:19px;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 4px 14px rgba(230,194,0,.3);}
.premio-lbl{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--txt2);}
.premio-val{font-family:'Bebas Neue',sans-serif;font-size:27px;color:var(--txt);line-height:1.1;letter-spacing:.02em;font-variant-numeric:tabular-nums;}
.cpf-etapa{background:var(--bg2);border:1px solid var(--border2);border-radius:16px;padding:32px 24px;margin-bottom:4px;}
.cpf-etapa-icone{width:64px;height:64px;border-radius:50%;background:var(--gdim);color:var(--gold);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:28px;}
.premio-inline{display:flex;align-items:center;gap:7px;font-size:14px;color:var(--txt3);margin-bottom:14px;}
.premio-inline i{color:var(--gold);font-size:15px;}
.premio-inline b{color:var(--txt2);font-weight:700;}
@media (max-width:600px){.premio-box{width:100%;box-sizing:border-box;}}

/* ── REFRESH ESTÉTICO — páginas públicas (evento/senhas/mapa/placar) ── */
.pub-section-title{color:var(--txt);font-family:'Bebas Neue',sans-serif;font-size:23px;letter-spacing:.03em;margin:28px 0 14px;display:flex;align-items:center;gap:9px;}
.pub-section-title:first-child{margin-top:0;}
.pub-section-title i{color:var(--gold);font-size:20px;}
/* Layout de evento.php: capa+nome+premiação de um lado, Novidades+Senhas do
   outro, só em telas largas (pedido do Caio depois de ver o desktop com tudo
   empilhado numa coluna só, meio sem graça). No celular continua empilhado
   igual sempre foi — .ev-layout vira flex-column simples, sem nenhuma
   diferença visual do que já existia. */
.ev-layout{display:flex;flex-direction:column;gap:28px;}
.ev-layout-main,.ev-layout-side{min-width:0;}
.ev-layout-sem-lateral .ev-layout-side{display:none;}
@media (min-width:960px){
  .ev-layout{display:grid;grid-template-columns:1.3fr 1fr;align-items:start;gap:28px;}
  .ev-layout-sem-lateral{grid-template-columns:minmax(0,900px);justify-content:center;}
}
.ev-hero{border-radius:20px;box-shadow:0 10px 34px rgba(0,0,0,.4);}
.ev-hero-wrap{position:relative;margin-bottom:20px;}
.ev-hero-wrap .ev-hero{margin-bottom:0;}
.ev-hero-glow{position:absolute;inset:-50px;background-size:cover;background-position:center;filter:blur(55px) brightness(.45) saturate(1.2);opacity:.9;z-index:0;pointer-events:none;transform:translateZ(0);will-change:filter;backface-visibility:hidden;}
.ev-hero-wrap .card.ev-hero{position:relative;z-index:1;}
@media (max-width:600px){.ev-hero-glow{inset:-24px;filter:blur(34px) brightness(.4) saturate(1.2);}}
.pub-event-icon{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--gold),var(--gold3));color:#1a1200;display:flex;align-items:center;justify-content:center;font-size:21px;flex-shrink:0;box-shadow:0 4px 14px rgba(230,194,0,.28);}
.pub-event-icon img{width:24px;height:24px;object-fit:contain;}
.ev-cta-card{display:flex;align-items:center;gap:18px;padding:22px 24px;border-radius:18px;background:linear-gradient(135deg,rgba(230,194,0,.10),rgba(230,194,0,.02));border:1px solid rgba(230,194,0,.28);margin-bottom:20px;}
.ev-cta-icon{width:52px;height:52px;border-radius:14px;background:var(--gold);color:#1a1200;display:flex;align-items:center;justify-content:center;font-size:23px;flex-shrink:0;box-shadow:0 4px 16px rgba(230,194,0,.3);}
.ev-cta-info{flex:1;min-width:0;}
.ev-cta-count{font-weight:700;color:var(--txt);font-size:16px;}
.ev-cta-price{color:var(--txt3);font-size:13.5px;margin-top:2px;}
.ev-cta-card .btn{flex-shrink:0;}
@media (max-width:600px){
  .ev-cta-card{flex-wrap:wrap;justify-content:center;text-align:center;padding:22px 20px;}
  .ev-cta-info{flex:1 1 100%;}
  .ev-cta-card .btn{flex:1 1 100%;}
}
/* Barra fixa de "Comprar Senha" no rodapé do celular — só existe abaixo de
   960px (no desktop o card de senha já fica sempre visível na lateral, ver
   .ev-layout acima). Fica escondida (translateY) até o JS de evento.php
   marcar .mostrar, o que acontece assim que o card de senha de verdade sai
   da tela — evita CTA duplicado quando ele já está visível. */
.ev-cta-fixa{position:fixed;left:0;right:0;bottom:0;z-index:60;display:flex;align-items:center;justify-content:space-between;gap:14px;background:var(--bg2);border-top:1px solid var(--border2);padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));box-shadow:0 -8px 24px rgba(0,0,0,.45);transform:translateY(120%);transition:transform .25s ease;}
.ev-cta-fixa.mostrar{transform:translateY(0);}
.ev-cta-fixa .ev-cta-count{font-weight:700;color:var(--txt);font-size:13.5px;}
.ev-cta-fixa .ev-cta-price{color:var(--txt3);font-size:12px;margin-top:1px;}
.ev-cta-fixa .btn{flex-shrink:0;}
@media (min-width:960px){.ev-cta-fixa{display:none;}}

/* ── NOVIDADES DO EVENTO (destaques estilo Stories) ── */
.novidades-bar-wrap{margin:16px 0;}
.novidades-bar{display:flex;gap:16px;overflow-x:auto;padding:4px 2px 10px;}
.novidade-item{display:flex;flex-direction:column;align-items:center;gap:6px;flex:0 0 auto;background:none;border:none;padding:0;cursor:pointer;font-family:inherit;}
.novidade-avatar{width:64px;height:64px;border-radius:50%;padding:2.5px;border:2px solid var(--gold);display:block;box-sizing:border-box;}
.novidade-avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block;background:var(--bg3);}
.novidade-tag{font-size:11px;color:var(--txt2);text-transform:uppercase;letter-spacing:.02em;max-width:76px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

dialog.novidade-viewer{position:fixed;inset:0;margin:auto;border:none;border-radius:16px;background:#000;padding:0;width:min(400px,92vw);height:min(720px,88vh);overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.6);}
dialog.novidade-viewer[open]{display:flex;flex-direction:column;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}
dialog.novidade-viewer::backdrop{background:rgba(0,0,0,.75);}
.nv-progress{flex:0 0 auto;display:flex;gap:4px;padding:10px 10px 0;}
.nv-progress-seg{flex:1;height:2.5px;border-radius:2px;background:rgba(255,255,255,.25);overflow:hidden;}
.nv-progress-fill{display:block;height:100%;width:0%;background:var(--gold);}
.nv-progress-seg.active .nv-progress-fill{animation:nvfill 5s linear forwards;}
@keyframes nvfill{from{width:0%;}to{width:100%;}}
.nv-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;}
.nv-head-left{display:flex;align-items:center;gap:8px;}
.nv-avatar-mini{width:24px;height:24px;border-radius:50%;background:var(--gdim);border:1.5px solid var(--gold);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.nv-avatar-mini i{font-size:12px;color:var(--gold);}
.nv-nome{font-size:12.5px;color:var(--txt);font-weight:600;}
.nv-close{background:none;border:none;color:rgba(242,237,230,.8);font-size:20px;cursor:pointer;padding:4px;line-height:1;}
.nv-stage{flex:1 1 auto;min-height:0;position:relative;background:#141210;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.nv-stage img{max-width:100%;max-height:100%;object-fit:contain;display:block;-webkit-user-drag:none;user-select:none;-webkit-touch-callout:none;pointer-events:none;transition:filter .35s ease;}
.nv-stage img.nv-carregando{filter:blur(16px);transform:scale(1.04);}
.nv-nav{position:absolute;top:0;bottom:0;width:35%;background:none;border:none;padding:0;cursor:pointer;}
.nv-nav.prev{left:0;}
.nv-nav.next{right:0;}
.nv-caption{flex:0 0 auto;padding:12px 16px 16px;background:#080808;}
.nv-caption p{margin:0;font-size:13.5px;color:var(--txt);line-height:1.4;}

/* Lista de novidades no admin (evento_editar.php) */
.novidades-admin-list{display:flex;flex-direction:column;gap:10px;margin-top:18px;}
.novidade-admin-row{display:flex;align-items:center;gap:14px;padding:10px 12px;background:var(--bg3);border:1px solid var(--border2);border-radius:10px;}
.novidade-admin-thumb{width:56px;height:56px;border-radius:8px;object-fit:cover;flex-shrink:0;background:var(--bg4);}
.novidade-admin-info{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;}
.novidade-admin-legenda{font-size:13px;color:var(--txt2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.novidade-admin-acoes{display:flex;align-items:center;gap:6px;flex-shrink:0;}

/* ── AGORA CARD (ao vivo) ── */
.agora-card{background:var(--bg2);border:1px solid var(--border2);border-radius:15px;padding:22px;margin-bottom:16px;position:relative;overflow:hidden;}
.agora-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--gold),var(--gold3));}
.agora-lbl{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);margin-bottom:10px;display:flex;align-items:center;gap:7px;}
.agora-num{font-family:'Bebas Neue',sans-serif;font-size:72px;color:var(--gold);line-height:.9;letter-spacing:.02em;font-variant-numeric:tabular-nums;}
.agora-pux{font-size:24px;font-weight:700;margin-top:7px;}
.agora-est{font-size:16px;color:var(--txt2);margin-top:2px;}

/* ── CAMPEÃO DA DISPUTA (card com troféu/moldura, distinto do agora-card genérico) ── */
.campeao-card{background:linear-gradient(165deg, rgba(230,194,0,.16), var(--bg2) 60%);border:1.5px solid var(--gold);border-radius:16px;padding:30px 22px;margin-bottom:16px;text-align:center;position:relative;overflow:hidden;box-shadow:0 10px 30px rgba(230,194,0,.16);}
.campeao-card::before{content:'';position:absolute;top:-40%;left:50%;transform:translateX(-50%);width:220px;height:220px;background:radial-gradient(circle, rgba(230,194,0,.35), transparent 65%);pointer-events:none;}
.campeao-trofeu{font-size:38px;color:var(--gold);filter:drop-shadow(0 3px 8px rgba(230,194,0,.4));position:relative;display:block;}
.campeao-label{font-size:13px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--gold);margin-top:10px;position:relative;}
.campeao-nome{font-family:'Bebas Neue',sans-serif;font-size:clamp(24px, 4vw, 34px);color:var(--txt);letter-spacing:.02em;margin-top:8px;position:relative;}
.agora-badges{position:absolute;top:22px;right:22px;display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end;max-width:45%;}

/* ── PIX / PAGAMENTO ── */
.pay-options{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px;}
.pay-option{flex:1;min-width:170px;border:1.5px solid var(--border2);border-radius:11px;padding:16px;cursor:pointer;text-align:center;background:var(--bg3);font-size:16px;font-weight:600;color:var(--txt2);}
.pay-option:has(input:checked){border-color:var(--gold);background:var(--gdim);color:var(--gold);}
.pay-option input{margin-right:8px;accent-color:var(--gold);width:16px;height:16px;}
/* Variante EMPILHADA da .pay-option (usada nas Configurações): cada opção
   ocupa a linha inteira, com o título à esquerda e a explicação embaixo.
   A .pay-option original nasceu pra ficar lado a lado dentro de
   .pay-options — tem flex:1 e texto centralizado, e fora daquele container
   flex ela virava um <label> inline: as três opções se atropelavam. */
.pay-lista{display:flex;flex-direction:column;gap:10px;margin-bottom:14px;}
.pay-lista .pay-option{flex:none;min-width:0;display:flex;align-items:flex-start;gap:10px;text-align:left;font-weight:500;font-size:15px;margin:0;}
.pay-lista .pay-option input{margin:2px 0 0;margin-right:0;flex:none;}
.pay-lista .pay-option b{display:block;color:var(--txt);font-weight:700;font-size:15px;margin-bottom:2px;}
.pay-lista .pay-option:has(input:checked) b{color:var(--gold);}
.pay-lista .pay-option .sub{margin:0;}

.summary-box{background:var(--bg3);border-radius:11px;padding:18px 20px;margin-bottom:20px;font-size:15px;color:var(--txt3);}
.summary-box b{color:var(--txt);}
.summary-box .valor{font-family:'Bebas Neue',sans-serif;font-size:32px;color:var(--gold);letter-spacing:.04em;font-variant-numeric:tabular-nums;}
#carrinho-form .summary-box{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.payment-summary{display:grid;gap:10px;}
.payment-summary-line{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.payment-summary-line b{font-size:15px;text-align:right;overflow-wrap:anywhere;}
.payment-summary .form-hint{margin:0;}

.pix-card{background:var(--bg3);border:1px solid var(--border);border-radius:15px;padding:28px;text-align:center;margin-bottom:20px;}

/* Moldura branca em volta do QR Code real do Pix (devolvido pelo Mercado Pago como imagem base64). */
.qr-box{width:190px;height:190px;background:#fff;border-radius:8px;margin:0 auto 16px auto;position:relative;overflow:hidden;}
.qr-noise{position:absolute;inset:12px;background-image:repeating-conic-gradient(#111 0% 25%, transparent 0% 50%);background-size:11px 11px;opacity:.5;}
.qr-finder{position:absolute;width:38px;height:38px;background:#111;border-radius:2px;}
.qr-finder::before{content:'';position:absolute;inset:6px;background:#fff;}
.qr-finder::after{content:'';position:absolute;inset:12px;background:#111;border-radius:1px;}
.qr-finder.tl{top:10px;left:10px;}
.qr-finder.tr{top:10px;right:10px;}
.qr-finder.bl{bottom:10px;left:10px;}

/* Campos do cartão (número/validade/CVV) — o Mercado Pago injeta um iframe
   seguro dentro de cada um; o resto do formulário (rótulos, CPF, botão) é
   nosso, só esses 3 campos ficam com o "chrome" padrão do gateway. */
.mp-campo{padding:0;overflow:hidden;height:48px;display:flex;align-items:center;}
.mp-campo iframe{width:100%;height:100%;border:none;}

/* ── MAPA DE SENHAS ── */
.mapa-legenda{display:flex;gap:22px;flex-wrap:wrap;margin-bottom:20px;font-size:15px;color:var(--txt3);font-weight:600;}
.mapa-legenda .dot{display:inline-block;width:13px;height:13px;border-radius:4px;margin-right:7px;vertical-align:middle;}
.mapa-legenda .dot.disponivel{background:var(--green);}
.mapa-legenda .dot.pendente{background:var(--amber);}
.mapa-legenda .dot.pago{background:var(--red);}
.mapa-filtros{display:flex;align-items:end;gap:10px;flex-wrap:wrap;margin:-4px 0 18px;}
.mapa-filtros[hidden],.mapa-num[hidden]{display:none;}
.mapa-filtros label{display:flex;flex-direction:column;gap:5px;font-size:14px;font-weight:700;color:var(--txt2);}
.mapa-filtros .select{width:120px;}
.mapa-filtros .select{padding:9px 12px;font-size:16px;height:42px;}
.mapa-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(68px,1fr));gap:10px;margin-bottom:8px;}
/* Escolha do dia de corrida, antes do mapa (categorias que correm em mais
   de um dia). Cartões grandes de propósito: escolher o dia errado faz o
   vaqueiro aparecer no dia em que não corre. */
.dia-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin:6px 0 4px;}
.dia-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:22px 18px;border-radius:12px;background:var(--bg3);border:1.5px solid var(--border2);text-align:center;transition:transform .1s,border-color .15s;}
.dia-card:hover{transform:translateY(-2px);border-color:var(--gold);}
.dia-card .dia-nome{font-family:var(--font-ui);font-weight:700;font-size:26px;letter-spacing:.03em;color:var(--txt);text-transform:uppercase;line-height:1;}
.dia-card .dia-data{font-size:14px;color:var(--txt2);}
.dia-card .dia-saldo{font-size:14px;font-weight:700;color:var(--green);margin-top:6px;}
.dia-card.esgotado{opacity:.55;pointer-events:none;}
.dia-card.esgotado .dia-saldo{color:var(--txt4);}
.dia-atual{display:inline-flex;align-items:center;gap:7px;font-size:14px;color:var(--txt2);margin-bottom:14px;}
.dia-atual b{color:var(--txt);}
/* Bloco "Dias de corrida" no cadastro da categoria (admin). */
.dias-corrida{display:flex;flex-direction:column;gap:8px;margin-top:4px;}
.dias-corrida .dia-linha{display:flex;align-items:center;gap:9px;flex-wrap:wrap;cursor:pointer;}
.dias-corrida .dia-linha input[type=checkbox]{margin:0;}
.dias-corrida .dia-rotulo{min-width:78px;font-weight:700;}
.dias-corrida .dia-de{color:var(--txt3);font-size:13px;}
.dias-corrida .acc-input{width:88px;}
.sacola-chip-dia{font-size:12px;color:var(--txt3);margin-left:2px;}
.mapa-num{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;line-height:1.05;height:56px;border-radius:10px;font-weight:700;font-family:var(--font-ui);font-size:17px;letter-spacing:.03em;font-variant-numeric:tabular-nums;}
.mapa-num .mn-par{font-size:11px;font-weight:600;}
.mapa-num.no-carrinho .mn-num i{font-size:12px;margin-right:2px;vertical-align:baseline;}
.mapa-num.disponivel{background:var(--green);color:#08150d;border:1.5px solid var(--green);cursor:pointer;transition:transform .1s,filter .15s;}
.mapa-num.disponivel:hover{filter:brightness(1.12);transform:translateY(-2px);}
.mapa-num.bloqueada{background:var(--bg3);color:var(--txt4);border:1.5px dashed var(--border2);cursor:not-allowed;}
.mapa-num.pendente{background:var(--ambg);color:var(--amber);border:1.5px solid var(--amborder);cursor:not-allowed;}
.mapa-num.pago{background:var(--red);color:#230b0b;border:1.5px solid var(--red);cursor:not-allowed;}
.mapa-num.no-carrinho{background:var(--bbg);color:var(--blue);border:1.5px solid var(--blue);}
.mapa-num.no-carrinho:hover{background:var(--blue);color:#fff;}
.mapa-num.no-carrinho i{font-size:16px;}
.mapa-num.selecionada,.mapa-num.selecionada:hover{background:var(--blue);color:#fff;border:1.5px solid var(--blue);transform:none;}
.vm-mapa{border:1px solid var(--border);border-radius:12px;padding:14px;max-height:280px;overflow:auto;margin-bottom:16px;background:var(--bg2);}
.vm-mapa .mapa-grid{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:8px;}
.vm-mapa .mapa-num{height:44px;font-size:15px;}
.vm-placeholder{font-size:13.5px;color:var(--txt3);padding:10px 2px;}
.vm-chips{display:flex;flex-wrap:wrap;gap:8px;min-height:20px;}
.vm-chip-vazio{font-size:13.5px;color:var(--txt3);}
.vm-chip{display:inline-flex;align-items:center;gap:8px;background:var(--bbg);color:var(--blue);border:1px solid var(--bborder);border-radius:20px;padding:6px 8px 6px 14px;font-weight:700;font-family:var(--font-ui);font-size:15px;}
.vm-chip button{background:none;border:none;color:inherit;cursor:pointer;font-size:16px;line-height:1;padding:2px 4px;opacity:.75;}
.vm-chip button:hover{opacity:1;}
/* Dia de corrida grudado no chip da senha escolhida: quem vende no balcão
   precisa ver "sexta" ou "sábado" ANTES de confirmar a venda. */
.vm-chip-dia{font-style:normal;font-size:12.5px;font-weight:600;letter-spacing:.04em;
  text-transform:uppercase;color:var(--txt2);background:var(--bg4);border-radius:10px;padding:2px 8px;margin-left:2px;}
/* Fatia de um dia dentro do mapa da venda manual (categorias que correm em
   mais de um dia — ver diasFaixasCategoria em app/senhas.php). */
.vm-dia{margin-bottom:14px;}
.vm-dia:last-child{margin-bottom:0;}
.vm-dia-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin-bottom:9px;padding-bottom:7px;border-bottom:1px solid var(--border2);}
.vm-dia-nome{font-family:var(--font-ui);font-size:15px;font-weight:700;letter-spacing:0;color:var(--gold);}
.vm-dia-info{font-size:13px;color:var(--txt3);}
/* Selo de dia na lista de vendas e nas fichas — distinto do pill-gold, que
   ali já significa "senha nova, ainda não impressa". */
.pill-dia{background:var(--bg4);color:var(--gold3);}
.pill-dia i{font-size:12px;vertical-align:-1px;}

/* ── SACOLA (carrinho) ── */
.sacola-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;background:var(--bg3);border:1px solid var(--border2);border-radius:12px;padding:14px 18px;margin:16px 0;font-size:15px;color:var(--txt2);}
.mapa-legenda .dot.carrinho{background:var(--blue);}
.mapa-grid.carregando{opacity:.6;pointer-events:none;}
.mapa-num:disabled{opacity:1;}
.mapa-ajax-erro{display:none;}
.mapa-ajax-erro.show{display:block;}

/* ── CARRINHO FLUTUANTE (mapa de senhas) ── */
.cart-flutuante{position:fixed;right:18px;bottom:18px;width:280px;max-width:calc(100vw - 36px);background:var(--bg2);border:1px solid var(--border2);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.45);z-index:60;display:none;overflow:hidden;}
.cart-flutuante.show{display:block;}
.cart-flutuante-head{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--bg3);border-bottom:1px solid var(--border2);font-weight:700;font-family:var(--font-ui);font-size:16px;letter-spacing:.02em;color:var(--txt2);}
.cart-flutuante-itens{max-height:180px;overflow-y:auto;padding:6px 16px;}
.cart-flutuante-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--border);font-size:14px;color:var(--txt2);}
.cart-flutuante-item:last-child{border-bottom:none;}
.cart-flutuante-pacote{color:var(--gold);font-weight:600;font-size:12.5px;}
.cart-flutuante-remove{background:none;border:none;color:var(--txt4);cursor:pointer;min-width:44px;min-height:44px;font-size:17px;line-height:1;}
.cart-flutuante-remove:hover{color:var(--red);}
.cart-flutuante-total{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:15px;color:var(--txt2);border-top:1px solid var(--border2);}
.cart-flutuante-rodape{padding:0 16px 16px;}
@media (max-width:640px){
  .cart-flutuante{left:12px;right:12px;bottom:12px;width:auto;max-width:none;}
}

/* ── RANKING ── */
.rank-row{display:flex;align-items:center;gap:16px;padding:14px 18px;background:var(--bg2);border:1px solid var(--border);border-radius:12px;margin-bottom:9px;}
.rank-pos{font-family:'Bebas Neue',sans-serif;font-size:28px;min-width:36px;text-align:center;color:var(--txt3);font-variant-numeric:tabular-nums;}
.rank-pos.p1{color:var(--gold3);}
.rank-info{flex:1;min-width:0;}
.rank-nome{font-size:17px;font-weight:700;}
.rank-sub{font-size:14.5px;color:var(--txt3);margin-top:2px;}
.rank-pts{font-family:'Bebas Neue',sans-serif;font-size:28px;color:var(--gold);min-width:48px;text-align:right;font-variant-numeric:tabular-nums;}

/* ── TABELA ── */
table.simple{width:100%;border-collapse:collapse;font-size:15px;}
table.simple th{background:var(--bg4);color:var(--txt2);text-align:left;padding:13px 16px;font-size:13.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;}
table.simple td{padding:13px 16px;border-bottom:1px solid var(--border);color:var(--txt2);font-variant-numeric:tabular-nums;}
table.simple tr:last-child td{border-bottom:none;}
table.simple tr:hover td{background:var(--bg3);}


/* ── MENSAGENS ── */
.msg{padding:14px 18px;border-radius:11px;font-size:15px;font-weight:600;margin-bottom:20px;}
.msg.error{background:var(--rbg);color:var(--red);border:1px solid var(--rborder);}
.msg.success{background:var(--gbg);color:var(--green);border:1px solid var(--gborder);}
.regra-list{list-style:none;margin:0 0 14px 0;padding:0;}
.regra-list li{font-size:15px;color:var(--txt3);padding:9px 0;border-bottom:1px solid var(--border);}
.regra-list li:last-child{border-bottom:none;}
.regra-list b{color:var(--txt);}

.empty{color:var(--txt4);font-size:15px;font-style:italic;}
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:38px 20px;color:var(--txt4);text-align:center;}
.empty-state i{font-size:36px;color:var(--txt4);}
.empty-state span{font-size:15px;font-style:italic;max-width:360px;}
.back-link{display:inline-flex;align-items:center;gap:6px;background:var(--bg3);border:1px solid var(--border2);color:var(--txt2);font-size:14.5px;font-weight:700;padding:8px 13px;border-radius:9px;margin-bottom:16px;}
.back-link:hover{background:var(--bg4);color:var(--txt);}
.back-link i{font-size:16px;}

/* ── LAYOUT SITE PÚBLICO ── */
.topbar{padding:18px 36px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;position:sticky;top:0;z-index:20;background:rgba(8,8,8,0.9);backdrop-filter:blur(6px);border-bottom:1px solid var(--border);}
.topbar .brand{font-family:'Bebas Neue',sans-serif;color:var(--gold);font-size:30px;letter-spacing:.05em;display:inline-flex;align-items:center;gap:9px;}
.topbar nav{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.topbar nav a,.topbar nav button{background:transparent;border:1px solid var(--border2);color:var(--txt2);padding:10px 18px;border-radius:9px;font-size:14.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s;}
.topbar nav a:hover,.topbar nav button:hover{background:var(--bg3);border-color:var(--border3);}
.topbar nav a.primary{background:var(--gold);border-color:var(--gold);color:#080808;}
.topbar nav a.primary:hover{background:var(--gold2);}
.topbar nav span.user-pill{color:var(--txt3);font-size:14px;padding:8px 4px;}

.wrap{max-width:1360px;margin:0 auto;padding:20px 30px 70px 30px;}
.wrap.narrow{max-width:580px;}

.hero{max-width:1360px;margin:22px auto 34px auto;padding:clamp(40px,6vw,72px) clamp(28px,5vw,60px);border-radius:20px;border:1px solid var(--border2);text-align:center;position:relative;isolation:isolate;overflow:hidden;}
/* Foto e degradê ficam atrás do conteúdo, dentro do hero. */
.hero-bg-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 30%;z-index:-2;animation:heroFundoEntrada 1.4s ease-out both;}
.hero-bg-overlay{position:absolute;inset:0;z-index:-1;background:linear-gradient(to bottom, rgba(10,8,2,.62) 0%, rgba(11,9,2,.68) 35%, rgba(6,5,1,.78) 65%, rgba(0,0,0,.88) 100%), radial-gradient(circle at center, transparent 0%, rgba(0,0,0,.5) 100%);}
@keyframes heroFundoEntrada{from{opacity:0;transform:scale(1.08);}to{opacity:1;transform:scale(1);}}
@media(prefers-reduced-motion:reduce){.hero-bg-img{animation:none;}}
.public-home .hero-bg-img{object-position:center 35%;}
.hero-kicker{display:inline-block;background:var(--gdim);border:1px solid var(--border2);color:var(--gold2);font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:8px 18px;border-radius:20px;margin-bottom:20px;}
.hero h1{font-family:'Bebas Neue',sans-serif;font-size:clamp(36px,5.5vw,64px);letter-spacing:.03em;color:var(--txt);margin:0 0 14px 0;line-height:1.08;}
.hero h1 .hl{color:var(--gold);position:relative;display:inline-block;}
.hero p{color:var(--txt3);font-size:clamp(15px,1.2vw,18px);margin:0 auto;max-width:640px;}
.hero .hero-tags{display:flex;justify-content:center;gap:10px;margin-top:22px;flex-wrap:wrap;}
.hero .hero-tags span{background:var(--bg3);color:var(--txt2);font-size:13px;font-weight:700;padding:8px 16px;border-radius:18px;border:1px solid var(--border2);}

.hero-live{display:inline-flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center;margin-top:22px;background:rgba(239,68,68,.14);border:1px solid rgba(239,68,68,.4);color:var(--txt);padding:10px 20px;border-radius:30px;text-decoration:none;transition:background .15s,border-color .15s;}
.hero-live:hover{background:rgba(239,68,68,.22);border-color:rgba(239,68,68,.6);}
.hero-live-text{font-size:14px;font-weight:700;letter-spacing:.02em;}
.hero-live-cta{font-size:13.5px;font-weight:700;color:#fca5a5;display:inline-flex;align-items:center;gap:5px;}
.hero-live-cta i{font-size:14px;}

/* ── BUSCA NO HERO ── */
.hero-search{display:flex;gap:10px;flex-wrap:wrap;max-width:760px;margin:30px auto 0 auto;background:var(--bg2);border:1px solid var(--border2);border-radius:14px;padding:10px;text-align:left;}
.hero-search .hs-field{flex:1;min-width:180px;display:flex;align-items:center;gap:10px;padding:8px 14px;}
.hero-search .hs-field i{color:var(--gold);font-size:18px;flex-shrink:0;}
.hero-search .hs-field input{background:transparent;border:none;outline:none;color:var(--txt);font-family:var(--font-ui);font-size:16px;width:100%;}
.hero-search .hs-field input::placeholder{color:var(--txt4);}
.hero-search .hs-divider{width:1px;background:var(--border2);margin:6px 0;}
.hero-search .btn{flex-shrink:0;}
.hero-clear{margin-top:14px;font-size:13.5px;}
.hero-clear a{color:var(--gold2);text-decoration:underline;}

.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:15px;}
.section-head-link{display:inline-flex;align-items:center;gap:4px;font-size:14px;font-weight:600;color:var(--gold2);text-decoration:none;white-space:nowrap;}
.section-head-link:hover{color:var(--gold);}
.section-head-link i{font-size:16px;}
.status-group{margin-bottom:34px;}
.status-group h3{color:var(--txt);font-family:'Bebas Neue',sans-serif;font-size:27px;letter-spacing:.03em;margin:0;display:flex;align-items:center;gap:10px;}
.status-group h3 i{color:var(--gold);font-size:24px;}
.status-group .sg-sub{color:var(--txt3);font-size:14px;margin-top:3px;}
.note-wrap{text-align:center;}
.note{background:var(--bg2);border:1px solid var(--border2);color:var(--txt3);font-size:14px;padding:10px 18px;border-radius:22px;display:inline-block;margin:0 auto 18px auto;}

/* ── COMO FUNCIONA ── */
.how-it-works{padding:10px 30px 30px;}
.hiw-inner{max-width:1100px;margin:0 auto;text-align:center;}
.hiw-kicker{display:inline-block;color:var(--gold2);font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;margin-bottom:8px;}
.hiw-inner h2{font-family:'Bebas Neue',sans-serif;font-size:clamp(26px,3.4vw,36px);letter-spacing:.03em;color:var(--txt);margin:0 0 34px 0;}
.hiw-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;}
.hiw-step{display:flex;flex-direction:column;align-items:center;text-align:center;}
.hiw-icon{width:56px;height:56px;border-radius:50%;background:var(--gdim);border:1px solid var(--border2);display:flex;align-items:center;justify-content:center;margin-bottom:14px;}
.hiw-icon i{color:var(--gold);font-size:24px;}
.hiw-step-num{color:var(--gold2);font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;}
.hiw-step-title{font-family:'Bebas Neue',sans-serif;font-size:20px;letter-spacing:.02em;color:var(--txt);margin-bottom:6px;}
.hiw-step p{color:var(--txt3);font-size:14px;line-height:1.5;max-width:230px;}

/* ── FAIXA CTA ── */
.cta-band{max-width:1360px;margin:10px auto 34px auto;border-radius:20px;padding:clamp(30px,5vw,52px);text-align:center;background:linear-gradient(120deg, var(--gold3), var(--gold) 55%, #b8860b);color:#1a1200;}
.cta-band h2{font-family:'Bebas Neue',sans-serif;font-size:clamp(26px,3.4vw,38px);letter-spacing:.03em;margin:0 0 8px 0;}
.cta-band p{font-size:15px;opacity:.85;max-width:520px;margin:0 auto 20px auto;}
.cta-band .btn{background:#151005;color:var(--gold2);}
.cta-band .btn:hover{background:#241c08;}

/* ── RODAPÉ ── */
.site-footer{border-top:1px solid var(--border);margin-top:20px;padding:44px 30px 26px;background:var(--bg2);}
.footer-grid{max-width:1360px;margin:0 auto;display:grid;grid-template-columns:1.4fr .8fr .8fr .9fr;gap:32px;}
.footer-brand{font-family:'Bebas Neue',sans-serif;font-size:24px;letter-spacing:.04em;color:var(--gold);margin-bottom:10px;display:flex;align-items:center;gap:8px;}
.footer-col p{color:var(--txt3);font-size:14px;line-height:1.6;max-width:280px;}
.footer-col h4{font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--txt2);margin-bottom:14px;padding-bottom:8px;border-bottom:2px solid var(--gdim);display:inline-block;}
.footer-col ul{list-style:none;display:flex;flex-direction:column;gap:9px;}
.footer-col ul a{color:var(--txt3);font-size:14.5px;display:inline-flex;align-items:center;gap:7px;}
.footer-col ul a i{color:var(--gold2);font-size:15px;}
.footer-col ul a:hover{color:var(--gold2);}
.footer-trust{max-width:1360px;margin:26px auto 0 auto;display:flex;align-items:center;gap:8px;color:var(--txt3);font-size:13.5px;font-weight:600;}
.footer-trust i{color:var(--gold2);font-size:16px;}
.footer-bottom{max-width:1360px;margin:16px auto 0 auto;padding-top:18px;border-top:1px solid var(--border);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;color:var(--txt4);font-size:13px;}
.site-footer-compact{padding:18px 30px;}
.footer-compact-inner{max-width:1360px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap;color:var(--txt3);font-size:14px;}
.footer-compact-links{display:flex;align-items:center;gap:10px 20px;flex-wrap:wrap;}
.footer-compact-links a:hover{color:var(--gold2);}

/* ── LAYOUT ADMIN (sidebar) ── */
.admin-layout{display:flex;min-height:100vh;}
.sidebar{width:280px;flex-shrink:0;background:var(--bg2);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;}
.sb-logo{padding:26px 22px 18px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--border);}
.sb-nav{display:flex;flex-direction:column;flex:1;}
.sb-toggle-input{display:none;}
.sb-backdrop{display:none;}
.sb-toggle-btn{display:none;margin-left:auto;font:inherit;font-size:22px;color:var(--txt3);cursor:pointer;padding:6px 8px;border-radius:8px;border:0;background:transparent;min-width:44px;min-height:44px;align-items:center;justify-content:center;position:relative;z-index:53;}
.sb-toggle-btn:hover{background:var(--bg3);color:var(--txt);}
.sb-logo-brand{display:flex;flex-direction:column;align-items:flex-start;gap:7px;min-width:0;}
.sb-logo-sub{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--txt4);}
.sb-section{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--txt4);padding:18px 22px 8px;}
.sb-item{display:flex;align-items:center;gap:12px;padding:12px 22px;font-size:16px;font-weight:500;color:var(--txt3);cursor:pointer;border-left:3px solid transparent;transition:background .12s,color .12s,border-color .12s;}
.sb-item i{font-size:18px;}
.sb-item:hover{background:var(--bg3);color:var(--txt2);}
.sb-item.active{background:var(--gdim);color:var(--gold);border-left-color:var(--gold);}
.admin-main{flex:1;display:flex;flex-direction:column;min-width:0;}
.admin-topbar{background:var(--bg2);border-bottom:1px solid var(--border);padding:20px 34px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;}
.admin-page-title{font-family:var(--font-ui);font-size:28px;font-weight:700;letter-spacing:-.035em;line-height:1.15;overflow-wrap:anywhere;}
.admin-page-sub{font-size:14.5px;color:var(--txt3);margin-top:4px;}
.admin-content{flex:1;padding:34px;max-width:1500px;}
/* Botões à direita do título (Financeiro, Gerenciar evento, Painel...):
   com flex-wrap, no celular eles descem em fileiras em vez de sumir pela
   borda direita. Antes era um style inline sem quebra em cada página. */
.topbar-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
/* Cards de resumo (Dashboard, Vendas, Financeiro): três lado a lado no
   desktop; no celular viram 2 colunas com o último (normalmente o valor
   em dinheiro) na largura inteira — antes eram três cards empilhados que
   empurravam a lista pra fora da tela. */
.resumo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
.resumo-grid.quatro{grid-template-columns:repeat(4,1fr);}
.resumo-grid.dois{grid-template-columns:repeat(2,1fr);}
.form-opcional{font-weight:400;color:var(--txt3);font-size:12.5px;}

/* Ocultar valores ("olho" de aplicativo de banco). Desfoque em vez de trocar
   o texto por bolinhas: o número continua ocupando a mesma largura, então
   nada na tela pula de lugar ao mostrar/ocultar. O select-none evita que
   alguem revele o valor arrastando o cursor por cima. */
.valores-ocultos .vlr{filter:blur(7px);user-select:none;-webkit-user-select:none;pointer-events:none;}

/* Venda manual: no celular segue empilhado (uma coluna). No desktop o modal
   alarga e vira duas colunas - "escolha a senha" de um lado, "dados do
   vaqueiro" do outro. Antes tudo cabia numa coluna de 680px, e o mapa ficava
   numa janelinha com rolagem propria DENTRO de um modal que tambem rolava:
   quem vendia nunca via o mapa e os dados ao mesmo tempo. */
.vm-col-titulo{font-family:var(--font-ui);font-size:15px;font-weight:700;letter-spacing:0;line-height:1.4;color:var(--gold);margin-bottom:12px;}
@media (min-width:1000px){
  dialog.modal.modal-wide{width:min(1180px,96vw);max-height:92vh;}
  @supports (height:1dvh){dialog.modal.modal-wide{max-height:92dvh;}}
  .vm-grid{display:grid;grid-template-columns:1fr 1.15fr;grid-template-rows:auto auto;gap:8px 28px;align-items:start;}
  .vm-grid > .vm-col{min-width:0;}
  #vm-col-senha{grid-column:1;grid-row:1;}
  #vm-col-dados{grid-column:1;grid-row:2;}
  #vm-col-mapa{grid-column:2;grid-row:1 / span 2;}
  .vm-grid .vm-mapa{max-height:520px;}
  #vm-col-senha .form-group,#vm-col-dados .form-group{margin-bottom:11px;}
  #vm-col-senha .form-row,#vm-col-dados .form-row{gap:12px;}
  #vm-col-dados .vm-col-titulo{margin-bottom:8px;}
  dialog.modal.modal-wide{max-height:96vh;}
  @supports (height:1dvh){dialog.modal.modal-wide{max-height:96dvh;}}
}
.resumo-grid .card{padding:16px;margin-bottom:0;}
.resumo-valor{font-family:var(--font-ui);font-size:28px;font-weight:700;letter-spacing:-.025em;line-height:1.1;font-variant-numeric:tabular-nums;}
/* Cabeçalho de cada senha dentro do modal de visualização (título + botões
   Comprovante/Imprimir/Editar): quebra linha no celular, senão o título
   virava uma coluna de uma palavra por linha espremida pelos botões. */
.senha-secao-head{display:flex;justify-content:space-between;align-items:center;gap:8px 12px;flex-wrap:wrap;margin-bottom:10px;}
.senha-secao-head > b{min-width:0;}
.senha-secao-acoes{display:flex;gap:8px;flex-wrap:wrap;}

@media (min-width:1600px){
  .wrap,.hero{max-width:1520px;}
  .admin-content{padding:42px;}
  .sidebar{width:300px;}
}

@media (max-width:900px){
  .admin-layout{flex-direction:column;}
  .sidebar{width:100%;height:auto;position:relative;overflow:visible;}
  .sb-logo{border-bottom:1px solid var(--border);}
  .sb-toggle-btn{display:flex;}
  .sb-nav{display:none;position:absolute;top:100%;left:0;right:0;width:100%;background:var(--bg2);border-bottom:1px solid var(--border);max-height:75vh;overflow-y:auto;z-index:52;box-shadow:0 20px 40px rgba(0,0,0,.5);}
  .sb-toggle-input:checked ~ .sb-nav{display:flex;}
  .sb-toggle-input:checked ~ .sb-backdrop{display:block;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:51;cursor:default;}
  .sb-section{display:block;}
  .sb-item{white-space:normal;}
  .sb-item.active{background:var(--bg3);}
  .form-row,.form-row-3,.acc-grid,.vq-grid{grid-template-columns:1fr;}
  .resumo-grid,.resumo-grid.quatro{grid-template-columns:1fr 1fr;gap:10px;}
  .resumo-grid > .card:last-child:nth-child(odd){grid-column:1 / -1;}
  .resumo-grid .card{padding:14px 16px;}
  .resumo-valor{font-size:26px;}
  .mapa-grid{grid-template-columns:repeat(auto-fill,minmax(54px,1fr));}
  .mapa-num{height:48px;font-size:16px;}
  .wrap{padding:16px 18px 50px 18px;}
  .admin-content{padding:20px;}
  .card{padding:20px;}
  .footer-grid{grid-template-columns:1fr 1fr;}
}

@media (max-width:700px){
  table.simple tr:first-child{display:none;}
  table.simple,table.simple tbody,table.simple tr,table.simple td{display:block;width:100%;}
  table.simple tr{margin-bottom:12px;border:1px solid var(--border2);border-radius:10px;overflow:hidden;background:var(--bg3);}
  table.simple td{border-bottom:1px solid var(--border);padding:10px 14px;display:flex;justify-content:space-between;align-items:center;gap:10px;text-align:right;}
  table.simple td:last-child{border-bottom:none;}
  table.simple td::before{content:attr(data-label);font-weight:700;color:var(--txt3);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;text-align:left;}
  table.simple tr:hover td{background:transparent;}

  /* Lista de vendas: card compacto em vez de empilhar todas as colunas com rótulo. */
  /* A linha de cabeçalho (Nº, Categoria, Puxador...) não faz sentido no
     formato de card — os campos já se distinguem por posição/estilo — e sem
     essa regra ela herdaria o mesmo grid dos <td> só que com <th> sem
     grid-area, ficando com os rótulos embaralhados. */
  table.vendas-table tr.vendas-table-head{display:none;}
  table.vendas-table tr{display:grid;grid-template-columns:1fr auto;grid-template-areas:"num status" "puxador puxador" "esteira esteira" "valor valor" "acao acao";gap:5px 10px;padding:14px 16px;align-items:center;border-bottom:none;}
  table.vendas-table td{display:block;border:none;padding:0;background:none;text-align:left;}
  table.vendas-table td::before{content:none;}
  /* A caixinha de seleção (modo impressão) antes ficava sobreposta a outros
     elementos do card (primeiro em cima do status, depois numa borda
     apertada) e era difícil de achar/tocar no celular. Agora ela vira uma
     faixa própria, com o texto inteiro clicável (não só a caixinha), no
     topo do card — impossível de perder ou confundir com outra coisa. */
  table.vendas-table .td-sel{grid-area:sel;margin:-14px -16px 10px -16px;padding:0;}
  table.vendas-table .td-sel:empty{margin:0;}
  table.vendas-table .sel-linha{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--bg4);cursor:pointer;}
  table.vendas-table .sel-linha input{width:19px;height:19px;flex-shrink:0;}
  table.vendas-table .sel-linha span{font-size:13.5px;font-weight:700;color:var(--txt2);}
  table.vendas-table.modo-selecao tr{grid-template-areas:"sel sel" "num status" "puxador puxador" "esteira esteira" "valor valor" "acao acao";}
  table.vendas-table tr:has(.chk-senha:checked){outline:2px solid var(--gold);outline-offset:-2px;border-radius:10px;}
  /* O número vem com as pílulas (kit, nova, dia) e o nome da categoria na
     mesma célula. Em nowrap tudo isso passava dos 390px e o card inteiro
     vazava pela direita (status e botões sumiam). Agora é uma linha
     flexível que quebra, com a categoria numa linha só dela. */
  table.vendas-table td{min-width:0;}
  table.vendas-table .td-num{grid-area:num;font-family:var(--font-ui);font-size:17px;font-weight:700;letter-spacing:0;white-space:normal;display:flex;flex-wrap:wrap;align-items:center;gap:6px 6px;}
  table.vendas-table .td-num .pill{margin-left:0 !important;}
  /* Versão compacta da categoria, só pro mobile — junto do número em vez de
     ocupar uma linha própria (a coluna "Categoria" de baixo, usada no
     desktop, fica escondida aqui). */
  table.vendas-table .td-num-cat{display:block;flex-basis:100%;font-family:var(--font-ui);font-size:13px;font-weight:600;color:var(--txt3);margin-left:0;letter-spacing:.02em;}
  table.vendas-table .td-cat{display:none;}
  table.vendas-table .td-status{grid-area:status;justify-self:end;align-self:start;margin-top:2px;text-align:right;}
  table.vendas-table .td-puxador{grid-area:puxador;font-weight:700;font-size:15.5px;color:var(--txt);margin-top:2px;}
  table.vendas-table .td-esteira{grid-area:esteira;font-size:13px;color:var(--txt3);}
  table.vendas-table tr.sem-esteira{grid-template-areas:"num status" "puxador puxador" "valor valor" "acao acao";}
  table.vendas-table tr.sem-esteira .td-esteira{display:none;}
  table.vendas-table.modo-selecao tr.sem-esteira{grid-template-areas:"sel sel" "num status" "puxador puxador" "valor valor" "acao acao";}
  table.vendas-table .td-valor{grid-area:valor;font-weight:700;font-size:16px;color:var(--gold2);text-align:right;}
  table.vendas-table .td-acao{grid-area:acao;display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-top:8px;padding-top:10px;border-top:1px solid var(--border);}

  /* Botões de impressão (aparecem ao tocar "Imprimir"): no desktop cabem
     lado a lado no cabeçalho do card, mas no celular ficavam meio soltos —
     largura automática, do tamanho do texto, sem alinhamento entre si. Aqui
     viram uma coluna de botões de largura cheia, cada um com altura de toque
     confortável, empilhados na ordem de uso (ação principal em cima). */
  .print-toolbar{flex-direction:column;align-items:stretch;}
  .print-toolbar > div:not(:first-child){width:100%;flex-direction:column;align-items:stretch;}
  #btn-toggle-imprimir{width:100%;justify-content:center;padding:12px;}
  #print-actions{flex-direction:column;width:100%;}
  #print-actions .btn{width:100%;justify-content:center;padding:12px;font-size:14px;}
}

/* ── CELULAR (telas bem estreitas) ── */
@media (max-width:600px){
  html{font-size:16px;}
  .ev-grid{grid-template-columns:1fr;}
  .topbar{padding:14px 16px;}
  .topbar .brand{font-size:24px;}
  .admin-topbar{padding:16px 18px;}
  .admin-page-title{font-size:24px;}
  .sb-logo{padding:14px 18px 12px;}
  .btn-sm{min-height:40px;padding:8px 14px;}
  .topbar-actions{width:100%;}
  dialog.modal{width:94vw;max-height:90vh;}
  @supports (height:1dvh){dialog.modal{max-height:90dvh;}}
  .modal-head{padding:14px 16px;}
  .modal-body{padding:16px;}
  .resumo-valor{font-size:24px;}
  .pix-card{padding:20px;}
  .qr-box{width:160px;height:160px;}
  .mapa-legenda{gap:10px 16px;}
  .hero{margin:14px auto 22px auto;border-radius:14px;}
  .card h1{font-size:27px;}
  .card{padding:18px;}
  .acc-body{padding:16px;}
  .acc-head{padding:14px 16px;}
  .footer-grid{grid-template-columns:1fr;gap:26px;}
  .footer-col p{max-width:none;}
  .hero-search{flex-direction:column;padding:12px;}
  .hiw-steps{grid-template-columns:1fr 1fr;gap:28px 16px;}
  .cta-band{padding:28px 20px;border-radius:16px;}
}

/* ── MODAIS (dialog nativo) ── */
dialog.modal{position:fixed;inset:0;margin:auto;border:none;border-radius:14px;background:var(--bg2);color:var(--txt);padding:0;width:min(680px,92vw);max-height:85vh;height:fit-content;overflow:auto;box-shadow:0 24px 70px rgba(0,0,0,.55);}
@supports (height:1dvh){dialog.modal{max-height:85dvh;}}
dialog.modal::backdrop{background:rgba(0,0,0,.62);}
.modal-head{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:18px 22px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg2);}
.modal-head h3{margin:0;font-size:19px;}
.modal-head .sub{margin-top:2px;}
.modal-badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}
.modal-close{background:transparent;border:none;color:var(--txt3);font-size:24px;cursor:pointer;line-height:1;padding:4px;flex-shrink:0;}
.modal-close:hover{color:var(--txt);}
.modal-body{padding:20px 22px;}
.acesso-modal .modal-body{padding:14px;display:flex;flex-direction:column;gap:10px;}
.acesso-opcao{display:flex;align-items:center;gap:14px;padding:16px;border:1px solid var(--border2);border-radius:12px;background:var(--bg3);color:var(--txt);text-decoration:none;transition:background .15s,border-color .15s;}
.acesso-opcao:hover{background:var(--bg4);border-color:var(--border3);}
.acesso-opcao>i:first-child{font-size:22px;color:var(--gold);flex-shrink:0;}
.acesso-opcao-titulo{font-size:15.5px;font-weight:700;}
.acesso-opcao-sub{font-size:13.5px;color:var(--txt3);margin-top:2px;}
.acesso-opcao>i:last-child{margin-left:auto;color:var(--txt4);font-size:18px;flex-shrink:0;}

/* ── PÁGINA DE VENDAS (filtro + botões de impressão) ── */
.filtro-vendas{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;}
.filtro-vendas .form-group{margin-bottom:0;min-width:160px;flex:1;}
.filtro-vendas .filtro-busca{flex:1.5;}
/* Celular: dois filtros por linha (categoria/status, ordenar/impressão),
   busca e Limpar na largura inteira — antes cada select ocupava uma linha e
   a lista só aparecia depois de cinco campos. */
@media (max-width:600px){
  .filtro-vendas{gap:10px;}
  .filtro-vendas .form-group{min-width:0;flex:1 1 calc(50% - 5px);}
  .filtro-vendas .filtro-busca{flex-basis:100%;}
  .filtro-vendas #btn-limpar{width:100%;justify-content:center;}
}
.print-toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:6px;}
.print-toolbar > div:first-child{font-weight:700;font-size:15px;display:flex;align-items:center;gap:8px;color:var(--txt);}
.print-toolbar-count{color:var(--txt3);font-weight:400;}
/* .td-num-cat (categoria compacta) e o texto dentro de .sel-linha só existem
   pro layout em card do mobile — esse texto extra escondido por padrão
   evita que ele apareça duplicado (categoria já tem coluna própria) ou
   quebrando a coluna estreita da caixinha de seleção no desktop, onde a
   tabela continua no formato linha-e-coluna normal. */
.td-num-cat{display:none;}
.sel-linha span{display:none;}

/* ── PÁGINA DE VERIFICAÇÃO DE SENHA ── */
.verifica-box{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:12px;font-size:15px;}
.verifica-box i{font-size:28px;flex-shrink:0;}
.verifica-ok{background:var(--gbg);border:1px solid var(--gborder);color:var(--green);}
.verifica-ok b{color:var(--txt);}
.verifica-erro{background:var(--rbg);border:1px solid var(--rborder);color:var(--red);}
.verifica-erro b{color:var(--txt);}
.verifica-atencao{background:var(--ambg);border:1px solid var(--amborder);color:var(--amber);}
.verifica-atencao b{color:var(--txt);}

/* ── FICHA DE JULGAMENTO PARA IMPRESSÃO (locutor/juiz) ──
   Cada ficha ocupa metade de uma folha A4 — duas fichas por folha (uma em
   cima, outra em baixo), com uma linha de corte no meio. É pensada pra ser
   preenchida à mão, com caneta, durante a corrida: por isso os campos de
   classificação e disputa são quadrados vazios grandes, fáceis de marcar e
   de ler de longe. Fundo claro mesmo com o resto do painel sendo escuro —
   economiza tinta e fica mais legível impressa. */
.print-body{background:var(--bg);min-height:100vh;padding-top:74px;}
.print-bar{position:fixed;top:0;left:0;right:0;background:var(--bg2);border-bottom:1px solid var(--border2);padding:12px 24px;display:flex;justify-content:space-between;align-items:center;gap:16px;z-index:10;color:var(--txt);font-size:14px;flex-wrap:wrap;}
.copias-form{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--txt2);}
.copias-form input[type="number"]{width:56px;background:var(--bg3);border:1px solid var(--border2);border-radius:8px;color:var(--txt);padding:6px 8px;text-align:center;font-family:inherit;font-size:14px;}

.a4-page{width:200mm;margin:16px auto;background:#fff;box-shadow:0 4px 20px rgba(0,0,0,.4);padding:6mm;box-sizing:border-box;}

.ficha-julg{min-height:137mm;display:flex;flex-direction:column;color:#1a1a1a;font-family:var(--font-ui);border:1.4px solid #d8cfa8;border-radius:6px;overflow:hidden;text-transform:uppercase;}
.ficha-vazia{min-height:137mm;}
.corte{display:flex;align-items:center;gap:10px;margin:2mm 0;color:#aaa;font-size:11px;text-transform:uppercase;letter-spacing:.08em;}
.corte::before,.corte::after{content:'';flex:1;border-top:1px dashed #bbb;}

/* Quatro fichas iguais por folha A4 em paisagem, com o desenho aprovado
   reduzido proporcionalmente para cada quadrante de 148 x 105 mm. */
.a4-page-4up{width:297mm;height:210mm;margin:16px auto;background:#fff;box-shadow:0 4px 20px rgba(0,0,0,.4);box-sizing:border-box;display:grid;grid-template-columns:148mm 148mm;grid-template-rows:105mm 105mm;}

.ficha-julg.ficha-a6{width:148mm;height:105mm;min-height:0;border-radius:4px;}
.ficha-vazia.ficha-a6{height:105mm;}
.a5-page-1up{width:210mm;height:148mm;margin:16px auto;background:#fff;box-shadow:0 4px 20px rgba(0,0,0,.4);box-sizing:border-box;padding:5.5mm 6mm;}

/* Cabeçalho: marca + nome do evento à esquerda, número da senha em
   dígitos separados (como numa ficha oficial impressa de verdade) e a
   categoria à direita. Fundo claro de propósito (sem preenchimento sólido
   escuro) — são impressas em impressora a laser, várias e várias fichas, e
   uma barra preta cheia por ficha gasta muito mais toner à toa; os
   destaques dourados/negrito já dão a identidade visual sem isso. */
.fj-top{background:#fff;color:#141210;padding:2.5mm 7mm;display:flex;justify-content:space-between;align-items:flex-start;gap:10px;border-bottom:2.5px solid #a1740a;flex-wrap:wrap;}
.fj-brand-block{min-width:0;}
.fj-brand-sm{display:flex;align-items:center;gap:5px;margin:0 0 1.5mm;white-space:nowrap;}
.fj-evento-nome{font-family:'Bebas Neue',sans-serif;font-size:25px;letter-spacing:.02em;color:#141210;line-height:1.1;}
.fj-evento-sub{font-size:10.5px;color:#6b6252;margin-top:2px;}

.fj-senha-block{text-align:center;flex-shrink:0;}
.fj-senha-lbl{font-size:10px;font-weight:700;letter-spacing:.12em;color:#a1740a;margin:0 0 3px;}
.fj-senha-num{font-family:var(--font-ui);font-size:48px;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;color:#141210;white-space:nowrap;}
.fj-cat{font-size:13px;font-weight:700;letter-spacing:.03em;color:#a1740a;margin-top:3px;}
/* Dia de corrida na ficha — em caixa preta pra separar do nome da categoria
   à primeira olhada, que é como a secretaria separa as fichas na mesa. */
.fj-dia{display:inline-block;margin-top:4px;padding:2px 8px;border-radius:4px;background:#1a1a1a;color:#fff;
  font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}

/* Dados do puxador/esteira: cada campo é uma linha sublinhada — se
   estiver vazio, fica só a linha em branco pra anotar à mão na hora. */
.fj-dados{padding:4mm 7mm;display:flex;flex-direction:column;gap:3mm;border-bottom:1px solid #e2ddd0;}
.fj-linha{font-size:19px;display:flex;gap:12px;align-items:baseline;}
.fj-lbl{font-weight:700;color:#8a7f6a;min-width:42mm;font-size:13.5px;letter-spacing:.03em;flex-shrink:0;}
.fj-val{font-weight:700;color:#1a1a1a;font-size:19px;flex:1;border-bottom:1.5px solid #333;min-height:7mm;padding-bottom:2px;}

/* Puxador+Animal e Esteira+Animal lado a lado, cada par numa linha só —
   label mais estreito aqui porque "Animal" fica claro pelo contexto ao
   lado de "Puxador"/"Esteira", sem precisar do texto completo "Animal do
   puxador"/"Animal do esteira" que não cabia em meia largura. */
.fj-linha-dupla{display:flex;gap:10px;}
.fj-linha-dupla .fj-linha{flex:1 1 auto;min-width:0;}
.fj-linha-dupla .fj-lbl{min-width:20mm;}

/* Ficha combinada de casadinha (ver renderFichaJulgamentoCasadinha em
   app/ficha.php): cabeçalho da senha igual à ficha normal (só a 1ª senha,
   em destaque) -- as duas seções de classificação empilhadas é que dizem os
   dois números, uma pra cada corrida, à esquerda da Disputa (compartilhada). */
.fj-classif-dupla{flex:1;min-width:0;display:flex;flex-direction:column;gap:2.5mm;}

.fj-julgamento{flex:1;padding:2mm 7mm;display:flex;flex-direction:column;gap:1.5mm;justify-content:center;}
.fj-secao-titulo{font-size:11px;font-weight:700;letter-spacing:.06em;color:#8a7f6a;margin-bottom:1.5mm;}
.fj-boxes{display:flex;gap:3.5mm;flex-wrap:wrap;}
.fj-box{width:9mm;height:9mm;border:1.6px solid #333;border-radius:3px;background:#fff;box-sizing:border-box;display:flex;align-items:flex-start;justify-content:flex-start;padding:1mm;font-size:13px;font-weight:700;color:#999;line-height:1;}
.fj-box-extra{border-style:dashed;}
.fj-box-ouro{border-style:double;border-width:4px;font-size:13px;}
/* Classificação e disputa lado a lado, na mesma linha — economiza altura
   da ficha em vez de empilhar as duas seções. */
.fj-secoes-linha{display:flex;gap:6mm;align-items:flex-start;}
.fj-secao-classif{flex:1;min-width:0;}
.fj-secao-disputa{flex-shrink:0;border-left:1px dashed #ccc;padding-left:6mm;}

/* Rodapé oficial: identifica quem emitiu a ficha e reserva o espaço pra
   assinatura de quem confere/apura na pista, igual a uma ficha de campo. */
.fj-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:1.5mm 7mm;background:#F7F3E8;border-top:1px solid #e2ddd0;flex-wrap:wrap;}
.fj-footer-txt{font-size:11px;color:#8a7f6a;letter-spacing:.03em;}
.fj-assinatura{display:flex;flex-direction:column;align-items:center;min-width:44mm;}
.fj-assinatura-linha{width:100%;border-bottom:1.3px solid #333;height:4mm;}
.fj-assinatura-lbl{font-size:9px;color:#555;text-transform:uppercase;letter-spacing:.03em;margin-top:1.5px;white-space:nowrap;}

/* Modo "preto e branco (laser)": em vez de deixar o navegador converter o
   dourado da marca num cinza desbotado (o que costuma sair borrado/desigual
   numa laser P&B), troca direto por preto puro nas bordas/textos de
   destaque e por branco nos fundos em creme — fica nítido e não gasta
   toner à toa. Só entra em vigor com a classe "modo-pb" no <body>. */
.modo-pb .ficha-julg{border-color:#333;}
.modo-pb .fj-top{border-bottom-color:#000;}
.modo-pb .fj-senha-lbl,
.modo-pb .fj-cat{color:#000;}
.modo-pb .fj-dia{background:#000;color:#fff;}
.modo-pb .fj-footer{background:#fff;}
.modo-pb .ficha-julg img{filter:brightness(0);}

/* O mesmo desenho em A4 e A5; no A4 com quatro fichas ele é reduzido sem
   omitir campos nem alterar a composição. */
@font-face{font-family:'Ficha Inter';src:url('fonts/Inter-400.ttf') format('truetype');font-weight:400;font-display:swap;}
@font-face{font-family:'Ficha Inter';src:url('fonts/Inter-700.ttf') format('truetype');font-weight:700 800;font-display:swap;}
@font-face{font-family:'Ficha Inter';src:url('fonts/Inter-Black.ttf') format('truetype');font-weight:900;font-display:swap;}
.fj-approved{height:137mm;min-height:137mm;padding:0;background:#fff;border:1px solid #252525;border-radius:5mm;display:block;overflow:hidden;color:#111;font-family:'Ficha Inter',Arial,sans-serif;position:relative;}
.fja-inner{height:100%;box-sizing:border-box;padding:4.5mm 5.5mm 3mm;display:flex;flex-direction:column;gap:0;}
.fj-approved.ficha-a6{width:148mm;height:105mm;min-height:105mm;padding:0;border-radius:2mm;}
.fj-approved.ficha-a6 .fja-inner{position:absolute;left:4mm;top:3mm;width:194mm;height:137mm;transform:scale(.72);transform-origin:top left;}
.fja-header{display:grid;grid-template-columns:minmax(0,1fr) 32mm 30mm;gap:3mm;align-items:center;min-height:21mm;padding-bottom:2.5mm;border-bottom:1px solid #dddfe3;}
.fja-event{min-width:0;}
.fja-kicker{display:flex;align-items:center;gap:2mm;white-space:nowrap;font-size:9px;font-weight:800;color:#676b75;letter-spacing:.03em;}
.fja-kicker strong{display:inline-block;background:#111;color:#fff;padding:1mm 1.6mm;border-radius:1mm;font-size:10px;letter-spacing:.02em;}
.fja-event-name{margin-top:1mm;font-size:20px;font-weight:900;line-height:1.05;overflow-wrap:anywhere;}
.fja-event-place{font-size:11px;color:#62656c;margin-top:1mm;line-height:1.15;}
.fja-category{min-width:0;min-height:15mm;padding:1mm 1.5mm;background:#f7f8f9;border:1px solid #d9dce1;border-radius:2mm;display:flex;align-items:center;justify-content:center;text-align:center;font-size:17px;font-weight:900;line-height:1.05;overflow-wrap:anywhere;}
.fja-number{text-align:center;min-width:0;align-self:center;white-space:nowrap;}
.fja-number span{display:block;font-size:9px;font-weight:800;color:#555;line-height:1;}
.fja-number strong{display:block;font-size:44px;font-weight:900;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.04em;}
.fja-day{align-self:flex-end;margin-top:1mm;font-size:10px;font-weight:800;color:#333;}
.fja-people{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2mm 5mm;padding:3mm 0 2mm;border-bottom:1px solid #dddfe3;}
.fja-person,.fja-detail{min-width:0;background:#f7f8f9;border:1px solid #d9dce1;border-radius:2mm;padding:2.4mm 4mm;}
.fja-person{min-height:23mm;display:flex;flex-direction:column;}
.fja-label{display:block;color:#62656c;font-size:10px;font-weight:800;letter-spacing:.05em;line-height:1.05;}
.fja-person-name{display:block;font-size:19px;font-weight:900;line-height:1.1;overflow-wrap:anywhere;margin-top:.8mm;}
.fja-animal{display:flex;align-items:baseline;justify-content:space-between;gap:1.5mm;border-top:1px dashed #d9dce1;padding-top:1mm;margin-top:auto;min-width:0;}
.fja-animal span{font-size:10px;font-weight:800;color:#62656c;letter-spacing:.05em;}
.fja-animal strong{font-size:13px;font-weight:800;line-height:1.05;text-align:right;overflow-wrap:anywhere;min-width:0;}
.fja-detail{min-height:15mm;display:flex;flex-direction:column;justify-content:center;gap:1.5mm;}
.fja-detail strong{font-size:15px;font-weight:900;line-height:1.08;overflow-wrap:anywhere;}
.fja-detail-wide{grid-column:1/-1;}
.fja-tracking{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1.12fr;gap:4mm;align-items:start;padding:10mm 0 4mm;}
.fja-section-title{font-size:10px;font-weight:800;letter-spacing:.04em;color:#676b75;margin-bottom:5mm;white-space:nowrap;}
.fja-classification,.fja-finals{min-width:0;}
.fja-class-row{min-height:13mm;border:1px solid #d9dce1;border-radius:1.5mm;display:flex;align-items:center;gap:2mm;padding:1.3mm 2mm;margin-bottom:2mm;}
.fja-class-number{font-size:19px;font-weight:900;min-width:17mm;line-height:1;font-variant-numeric:tabular-nums;}
.fja-class-row .fj-boxes{display:flex;flex-wrap:nowrap;gap:1.3mm;min-width:0;}
.fja-class-row .fj-box,.fja-mark-box{width:8.5mm;height:8.5mm;flex:0 0 8.5mm;display:flex;align-items:flex-start;justify-content:flex-start;border:1.2px solid #242424;border-radius:1mm;background:#fff;padding:.8mm;font-size:8px;font-weight:600;color:#777;line-height:1;}
.fja-class-row .fj-box-extra{border-style:solid;}
.fja-class-row .fj-box-ouro{border-width:2px;border-style:double;}
.fja-dispute-boxes{display:flex;justify-content:space-between;gap:.8mm;}
.fja-notes-title{margin:4mm 0 2mm;}
.fja-note-line{height:6mm;border-bottom:1px solid #bec1c8;}
.fja-footer{border-top:1px solid #d9dce1;padding-top:2mm;color:#62656c;font-size:9px;line-height:1;}
.modo-pb .fj-approved{border-color:#111;}
.modo-pb .fja-category,.modo-pb .fja-person,.modo-pb .fja-detail{background:#fff;}
/* Cor só nos pontos de orientação da ficha; as áreas de escrita seguem claras. */
.fj-approved{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.fj-approved .fja-header{border-bottom-color:#c69d16;}
.fj-approved .fja-kicker strong{color:#f0c500;}
.fj-approved .fja-category{background:#fff9e5;border-color:#d9b64b;}
.fj-approved .fja-number strong,.fj-approved .fja-class-number{color:#9b7400;}
.fj-approved .fja-section-title{color:#8b6900;}
.fj-approved .fja-footer{border-top-color:#c69d16;}
.modo-pb .fj-approved .fja-header,.modo-pb .fj-approved .fja-footer{border-color:#bfc2c8;}
.modo-pb .fj-approved .fja-kicker strong{color:#fff;}
.modo-pb .fj-approved .fja-category{background:#fff;border-color:#d9dce1;}
.modo-pb .fj-approved .fja-number strong,.modo-pb .fj-approved .fja-class-number{color:#111;}
.modo-pb .fj-approved .fja-section-title{color:#676b75;}

/* Utilitário genérico pra qualquer tela do admin que precise de um botão
   "Imprimir" simples (ex: financeiro.php) — esconde a navegação e deixa só
   o conteúdo, sem precisar de um layout de impressão dedicado como o das
   fichas de julgamento acima. */
@media print{
  .no-print{display:none !important;}
  .sidebar{display:none !important;}
}

@media print{
  .print-bar{display:none;}
  .print-body{padding-top:0;background:#fff;}
  .a4-page{width:auto;margin:0;box-shadow:none;padding:6mm;page-break-after:always;}
  .a4-page:last-child{page-break-after:auto;}
  .corte{color:#ccc;}
  @page{size:A4;margin:0;}

  /* Layout 4 por folha: a folha física precisa girar pra paisagem (só assim
     2 colunas de A6 paisagem — 148mm cada — cabem nos 297mm de largura). A
     "@page layout4up" só entra em vigor nas páginas dentro de ".layout-4up"
     (regra "page:" abaixo), então o layout 2 (body sem essa classe) continua
     imprimindo em retrato normalmente, sem nenhuma mudança. */
  .a4-page-4up{width:auto;height:auto;margin:0;box-shadow:none;page-break-after:always;}
  .a4-page-4up:last-child{page-break-after:auto;}
  .layout-4up{page:layout4up;}
  @page layout4up{size:A4 landscape;margin:0;}

  /* Faltava esse reset (o a4-page e o a4-page-4up ja tem) - sem ele a folha
     ficava com a largura/altura/margem/sombra da TELA (16px de margem +
     sombra), 16px mais alta que o papel de verdade, e isso empurrava o
     conteudo pra baixo na impressao real. */
  .a5-page-1up{width:210mm;height:148mm;margin:0;box-shadow:none;page-break-after:always;}
  .a5-page-1up:last-child{page-break-after:auto;}
  .layout-a5{page:layouta5;}
  @page layouta5{size:A5 landscape;margin:0;}
}

/* "screen and" aqui é essencial: a folha A4 tem ~794px de largura
   equivalente, ou seja, MENOS que 900px — sem essa restrição de tela, esta
   regra (pensada só pra celular) também entrava em vigor na hora de
   imprimir, empilhando Disputa embaixo de Classificação e encolhendo os
   dígitos da senha na ficha impressa. */
@media screen and (max-width:900px){
  /* A prévia mantém o tamanho real da folha; o script reduz a folha inteira
     para caber no visor, sem refazer as colunas ou quebrar os nomes. */
  .a4-page{width:200mm;}
  .print-preview-sheet{position:relative;margin:16px auto;}
  .print-preview-sheet>.a4-page,.print-preview-sheet>.a4-page-4up,.print-preview-sheet>.a5-page-1up{position:absolute;left:0;top:0;margin:0;}
  .print-bar{padding:12px 16px;}
  .fj-senha-num{font-size:42px;}
  .fj-lbl{min-width:30mm;}
  .fj-secoes-linha{flex-direction:column;gap:3mm;}
  .fj-secao-disputa{border-left:none;padding-left:0;border-top:1px dashed #ccc;padding-top:3mm;}
}
@media print{
  .print-preview-sheet{display:contents!important;}
  .print-preview-sheet>.a4-page,.print-preview-sheet>.a4-page-4up,.print-preview-sheet>.a5-page-1up{position:static!important;transform:none!important;margin:0!important;}
}

/* Respeita quem desativou animação no sistema operacional — regra única e
   genérica (não precisa listar cada @keyframes/transition um por um, nem
   duplicar isso nos <style> inline de placar/juiz/locutor/telão: como é
   universal + !important, vence qualquer regra mais específica em qualquer
   arquivo carregado depois desse). O spin de loading (.spin) continua —
   indicador de "carregando" precisa continuar comunicando isso de algum
   jeito, então é a exceção de propósito aqui. */
@media (prefers-reduced-motion:reduce){
  *:not(.spin){animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important;}
}

/* ===== Base compartilhada: telas ao vivo (placar/fila/locutor) =====
   Antes esse tanto de CSS vivia repetido (e ligeiramente divergente) dentro
   de <style> inline em placar.php (2x), fila.php e locutor.php. Aqui embaixo
   fica uma cópia só; cada arquivo mantém só o que é específico dele (tipo o
   tamanho do ícone/texto do flash de resultado, que varia por tela). */

/* Flash de resultado (valeu/zero/retorno) — usado em fila.php e locutor.php */
.resultado-overlay{position:fixed;inset:0;z-index:200;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;opacity:0;pointer-events:none;transition:opacity .2s ease;}
.resultado-overlay.show{opacity:1;}
.resultado-overlay span{font-family:'Bebas Neue',sans-serif;letter-spacing:.03em;}
.resultado-overlay.show i,.resultado-overlay.show span{animation:puxaboiResultadoPop .35s ease;}
.resultado-valeu{background:#0d4a2a;color:#d9ffe6;}
.resultado-zero{background:#5a1414;color:#ffe0e0;}
.resultado-retorno{background:#123a63;color:#dcecff;}
@keyframes puxaboiResultadoPop{0%{transform:scale(.55);opacity:0;}65%{transform:scale(1.08);opacity:1;}100%{transform:scale(1);opacity:1;}}

/* Base do placar.php — comum às duas variações da página (com e sem categoria) */
.placar-wrap{max-width:480px;margin:0 auto;padding:0 0 40px;}
.placar-sticky-top{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;background:rgba(8,8,8,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);}
.placar-back-btn{display:inline-flex;align-items:center;gap:6px;background:var(--bg3);border:1px solid var(--border2);color:var(--txt2);font-size:13.5px;font-weight:700;padding:8px 13px;border-radius:9px;flex-shrink:0;white-space:nowrap;}
.placar-back-btn:active{background:var(--bg4);}
.placar-back-btn i{font-size:16px;}
.placar-brand-mini{display:inline-flex;flex-shrink:0;}
.placar-topo{padding:16px 16px 0;}
.placar-evento{font-family:'Bebas Neue',sans-serif;font-size:26px;letter-spacing:.03em;line-height:1.1;}
.placar-vazio{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:40px 20px;color:var(--txt3);font-size:14px;}
.placar-vazio i{font-size:30px;color:var(--txt4);}

/* ════════════════════════════════════════
   App nativo (Capacitor) — ver mobile/ e assets/capacitor-bridge.js
   O bridge marca <html> com .is-native-app assim que detecta que a página
   está rodando dentro do app. Estas regras só valem lá: no navegador nada
   disso é aplicado.
════════════════════════════════════════ */

/* Notch/ilha do iPhone e barra de gestos: o WebView do app vai até a borda
   da tela, então o respiro tem que vir do CSS (no Android a barra de status
   ocupa espaço próprio — ver setOverlaysWebView no bridge — e o
   env(safe-area-inset-top) simplesmente vale 0). */
.is-native-app .topbar{padding-top:calc(18px + env(safe-area-inset-top));}
.is-native-app .placar-sticky-top{padding-top:calc(12px + env(safe-area-inset-top));}
.is-native-app body{padding-bottom:env(safe-area-inset-bottom);}

/* Dentro do app, links que levam pra fora do fluxo não fazem sentido
   (instalar PWA, "baixe o app"). Marque esses blocos com data-so-web. */
.is-native-app [data-so-web]{display:none !important;}

/* O contrário: bloco que só aparece dentro do app (ex: "ativar avisos"). */
[data-so-app]{display:none;}
.is-native-app [data-so-app]{display:revert;}

/* Seleção de texto por toque longo atrapalha mais do que ajuda num app —
   menos nos campos e nos textos que a pessoa pode querer copiar (código do
   comprovante, chave Pix). */
.is-native-app{-webkit-touch-callout:none;}
.is-native-app input,.is-native-app textarea,.is-native-app [data-copiavel]{
  -webkit-touch-callout:default;-webkit-user-select:text;user-select:text;
}

/* ════════════════════════════════════════
   DOCUMENTOS LEGAIS (privacidade, termos)
   Texto corrido longo — o resto do sistema é card e número grande, então
   aqui a régua é outra: coluna estreita pra leitura, entrelinha maior e
   nada de dourado no corpo do texto (só nos títulos), senão a página vira
   um borrão brilhante.
════════════════════════════════════════ */
.doc{max-width:760px;margin:0 auto;padding:30px 0 70px;}
.doc-head{border-bottom:1px solid var(--border);padding-bottom:18px;margin-bottom:8px;}
.doc-head h1{font-family:'Bebas Neue',Arial,sans-serif;font-size:2.4rem;letter-spacing:.5px;line-height:1.05;}
.doc-head .doc-sub{color:var(--txt3);font-size:1rem;margin-top:6px;}
.doc-atualizado{display:inline-flex;align-items:center;gap:6px;background:var(--bg3);
  border:1px solid var(--border);border-radius:999px;padding:4px 12px;
  color:var(--txt3);font-size:.85rem;margin-top:12px;}
.doc h2{font-family:'Bebas Neue',Arial,sans-serif;font-size:1.5rem;letter-spacing:.4px;
  color:var(--gold);margin:34px 0 10px;}
.doc h3{font-size:1.05rem;font-weight:600;color:var(--txt);margin:20px 0 6px;}
.doc p{color:var(--txt2);margin:0 0 12px;line-height:1.6;}
.doc strong{color:var(--txt);font-weight:600;}
.doc a{color:var(--gold2);text-decoration:underline;text-underline-offset:2px;}
.doc ul{color:var(--txt2);margin:0 0 14px;padding-left:20px;line-height:1.6;}
.doc li{margin-bottom:6px;}
.doc li::marker{color:var(--gold);}
/* Bloco de destaque pro que a pessoa precisa mesmo enxergar (o que é
   público, como apagar os dados) — em texto corrido isso se perde. */
.doc-nota{background:var(--bg2);border:1px solid var(--border);border-left:3px solid var(--gold);
  border-radius:8px;padding:14px 16px;margin:0 0 16px;}
.doc-nota p:last-child{margin-bottom:0;}
.doc-nota.doc-nota-alerta{border-left-color:var(--amber);background:var(--ambg);border-color:var(--amborder);}
/* Tabela "que dado / pra quê" — no celular vira lista, tabela de 3 colunas
   em 360px é ilegível. */
.doc-tabela{width:100%;border-collapse:collapse;margin:0 0 18px;font-size:.95rem;}
.doc-tabela th{text-align:left;color:var(--gold);font-weight:600;padding:8px 10px;
  border-bottom:1px solid var(--border2);}
.doc-tabela td{color:var(--txt2);padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:top;}
.doc-tabela td:first-child{color:var(--txt);font-weight:500;white-space:nowrap;}
@media(max-width:640px){
  .doc-head h1{font-size:1.9rem;}
  .doc-tabela,.doc-tabela tbody,.doc-tabela tr,.doc-tabela td{display:block;width:100%;}
  .doc-tabela thead{display:none;}
  .doc-tabela tr{border:1px solid var(--border);border-radius:8px;padding:8px 4px;margin-bottom:10px;}
  .doc-tabela td{border:0;padding:4px 10px;}
  .doc-tabela td:first-child{color:var(--gold);font-size:.9rem;}
}
/* Pendência de preenchimento (LEGAL_RESPONSAVEL vazio no config) — some
   sozinho quando os dados forem preenchidos. */
.doc-pendente{background:var(--rbg);border:1px solid var(--rborder);border-radius:8px;
  padding:12px 14px;margin:0 0 16px;color:var(--red);font-size:.92rem;}

/* ════════════════════════════════════════
   COMPROVANTE DE SENHAS (public/comprovante.php)
   Arte clara (creme/preto/dourado) dentro do site escuro — é ela que vira
   PDF e imagem no assets/comprovante.js. Duas regras valem pra tudo aqui,
   porque o html2canvas desenha por cima do CSS calculado:
     1. nada de clip-path, mask ou rotação — o capturador ignora e o arquivo
        sai diferente da tela;
     2. cor e tamanho de ícone SVG vão como ATRIBUTO no próprio <svg> (ver
        cpvIcone em comprovante.php), porque o CSS externo não acompanha o
        SVG quando ele é serializado pra dentro da imagem.
════════════════════════════════════════ */
.cpv-body{background:var(--bg);min-height:100vh;padding-bottom:36px;}
.cpv-bar{position:sticky;top:0;z-index:6;display:flex;align-items:center;justify-content:space-between;
  gap:10px;flex-wrap:wrap;padding:10px 14px;background:var(--bg2);border-bottom:1px solid var(--border);}
.cpv-bar-acoes{display:flex;gap:8px;align-items:center;}
.cpv-mais{position:relative;}
.cpv-mais summary{list-style:none;cursor:pointer;}
.cpv-mais summary::-webkit-details-marker{display:none;}
.cpv-mais-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:190px;padding:8px;
  display:grid;gap:6px;background:var(--bg2);border:1px solid var(--border2);border-radius:10px;
  box-shadow:0 12px 28px rgba(0,0,0,.4);}
.cpv-mais-menu .btn{justify-content:flex-start;width:100%;white-space:nowrap;}
.cpv-palco{display:flex;flex-direction:column;align-items:center;padding:22px 14px 0;}

.cpv-folha{width:100%;max-width:640px;background:#F7F5F1;color:#101010;border-radius:18px;overflow:hidden;
  box-shadow:0 18px 50px rgba(0,0,0,.5);font-family:var(--font-ui);line-height:1.35;}
.cpv-i{display:inline-block;vertical-align:middle;flex:0 0 auto;}

/* ── Cabeçalho ── */
.cpv-topo{background:#FFFFFF;border-top:7px solid #E6C200;padding:16px 18px 10px;text-align:center;}
.cpv-logo{height:34px;width:auto;display:block;margin:0 auto 10px;}
.cpv-faixa{display:inline-flex;align-items:center;gap:8px;background:#E6C200;color:#101010;
  font-family:'Bebas Neue',sans-serif;font-size:24px;letter-spacing:.07em;line-height:1;padding:7px 18px;border-radius:9px;}
.cpv-subtitulo{margin-top:8px;font-size:12px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:#4A443C;}
.cpv-ornamento{display:flex;align-items:center;justify-content:center;gap:13px;margin-top:8px;}
.cpv-ornamento span{display:block;width:88px;height:2px;background:#E6C200;}

/* ── Evento ── */
.cpv-evento{text-align:center;padding:16px 24px 4px;}
.cpv-evento-nome{font-family:'Bebas Neue',sans-serif;font-size:27px;letter-spacing:.03em;line-height:1.12;}
.cpv-evento-sub{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:3px;font-size:14.5px;color:#5A534A;}

/* ── Bloco de cada vaqueiro ── */
.cpv-vaqueiro{margin:14px 20px 0;}
.cpv-vq-barra{display:flex;align-items:center;gap:14px;background:#151515;border-radius:14px;padding:12px 18px;}
.cpv-vq-nome{border-left:2px solid #E6C200;padding-left:14px;min-width:0;}
.cpv-vq-nome span{display:block;font-size:12px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:#B8B0A4;}
.cpv-vq-nome b{display:block;font-family:'Bebas Neue',sans-serif;font-weight:400;font-size:29px;letter-spacing:.02em;color:#FFFFFF;line-height:1.1;}
.cpv-vq-total{margin-top:7px;text-align:right;font-size:13.5px;color:#5A534A;}

.cpv-linha{background:#ECE8E1;border-radius:12px;padding:11px 16px;margin-top:9px;}
.cpv-linha-topo{display:flex;align-items:center;gap:11px;flex-wrap:wrap;}
.cpv-tag{background:#E6C200;color:#101010;font-size:12.5px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;padding:5px 13px;border-radius:999px;white-space:nowrap;}
.cpv-dia{display:inline-flex;align-items:center;gap:5px;background:#101010;color:#F5D633;font-size:12.5px;
  font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:5px 12px;border-radius:999px;white-space:nowrap;}
.cpv-nums{margin-left:auto;font-family:'Bebas Neue',sans-serif;font-size:33px;letter-spacing:.02em;line-height:1;white-space:nowrap;}
.cpv-linha-pe{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:6px;}
.cpv-detalhe{font-size:13.5px;color:#5A534A;}
.cpv-selo{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;padding:3px 9px;border-radius:999px;}
.cpv-selo-kit{background:#DCE6F5;color:#1D4E89;}
.cpv-selo-pend{background:#FBEECB;color:#8A6A00;}

/* ── Total, frase e rodapé ── */
.cpv-total{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:14px 20px 0;
  padding:12px 18px;background:#101010;border-radius:14px;color:#F7F5F1;}
.cpv-total-lbl{display:block;font-size:12.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#B8B0A4;}
.cpv-total-ok{display:inline-flex;align-items:center;gap:5px;font-size:14px;font-weight:600;color:#4ADE80;}
.cpv-total-aviso{font-size:14px;font-weight:600;color:#FBBF24;}
.cpv-rodape{display:flex;align-items:center;gap:14px;margin:14px 20px 0;padding:12px 16px;background:#ECE8E1;border-radius:14px;}
.cpv-qr{flex:0 0 auto;background:#FFFFFF;border-radius:8px;padding:6px;line-height:0;}
.cpv-qr img{display:block;width:88px;height:88px;}
.cpv-rodape-txt{display:flex;flex-direction:column;gap:2px;font-size:13.5px;color:#5A534A;}
.cpv-rodape-txt b{font-size:15px;color:#101010;}
.cpv-codigo{font-size:12.5px;letter-spacing:.04em;color:#8A8177;}
.cpv-marca{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:16px;padding:13px;
  background:#101010;color:#F7F5F1;font-family:'Bebas Neue',sans-serif;font-size:20px;letter-spacing:.14em;}

/* Convite pra juntar as outras senhas do mesmo contato (só aparece pra quem
   está logado no painel — ver public/comprovante.php). */
.cpv-contato{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  width:100%;max-width:640px;margin:16px auto 0;padding:13px 16px;
  background:var(--bg2);border:1px solid var(--border2);border-radius:14px;}
.cpv-contato b{display:block;font-size:15px;}
.cpv-contato span{display:block;margin-top:2px;font-size:13.5px;color:var(--txt3);}

/* Painel "escolher quais senhas entram" — fica fora da arte (.cpv-folha) de
   propósito: não entra na captura pro PDF/imagem nem na impressão. */
.cpv-escolher{width:100%;max-width:640px;margin:16px auto 0;padding:16px;
  background:var(--bg2);border:1px solid var(--border);border-radius:14px;}
.cpv-escolher[hidden]{display:none;}
.cpv-escolher-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
.cpv-escolher-head b{display:block;font-size:16px;}
.cpv-escolher-head span{display:block;margin-top:2px;font-size:13.5px;color:var(--txt3);line-height:1.4;}
.cpv-escolher-lista{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow:auto;margin-bottom:14px;}
.cpv-escolher-item{display:flex;align-items:center;gap:11px;padding:9px 12px;cursor:pointer;
  background:var(--bg3);border:1px solid var(--border);border-radius:10px;}
.cpv-escolher-item:hover{border-color:var(--border3);}
.cpv-escolher-num{flex:0 0 auto;min-width:54px;font-family:'Bebas Neue',sans-serif;font-size:21px;line-height:1;color:var(--gold);}
.cpv-escolher-txt{min-width:0;}
.cpv-escolher-txt b{display:block;font-size:14.5px;}
.cpv-escolher-txt span{display:block;font-size:12.5px;color:var(--txt3);}

/* Aviso curto do próprio comprovante (no app nativo quem mostra é o bridge). */
.cpv-toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:2147483647;max-width:86vw;
  padding:12px 18px;border-radius:999px;background:var(--bg3);border:1px solid var(--border2);color:var(--txt);
  font-size:15px;text-align:center;opacity:0;transition:opacity .2s;pointer-events:none;}
.cpv-toast.is-visivel{opacity:1;}

/* Aviso de venda online nova em admin/vendas.php - flutua no canto, so fica
   clicavel (pointer-events) quando visivel, pra nao atrapalhar cliques por
   baixo dele o resto do tempo. */
.venda-toast{position:fixed;top:80px;right:20px;z-index:9999;max-width:320px;
  padding:14px 16px;border-radius:10px;background:var(--bg2);border:1.5px solid var(--gold);color:var(--txt);
  font-size:14px;box-shadow:0 10px 28px rgba(0,0,0,.45);opacity:0;transform:translateX(24px);
  transition:opacity .25s,transform .25s;pointer-events:none;display:flex;align-items:center;gap:10px;}
.venda-toast.is-visivel{opacity:1;transform:translateX(0);pointer-events:auto;}
.venda-toast .ti-bell-ringing{color:var(--gold);font-size:22px;flex-shrink:0;}
.venda-toast span{flex:1;min-width:0;}
@media(max-width:560px){
  .venda-toast{left:12px;right:12px;top:auto;bottom:16px;max-width:none;}
}

@media(max-width:560px){
  .cpv-bar{flex-wrap:nowrap;gap:6px;padding:8px;}
  .cpv-bar-acoes{gap:6px;min-width:0;}
  .cpv-bar .btn-sm{padding:8px;font-size:12px;min-height:40px;white-space:nowrap;}
  .cpv-mais-menu{right:0;}
  .cpv-logo{height:30px;}
  .cpv-faixa{font-size:21px;padding:6px 14px;}
  .cpv-subtitulo{letter-spacing:.18em;font-size:11px;}
  .cpv-ornamento span{width:56px;}
  .cpv-evento-nome{font-size:23px;}
  .cpv-vaqueiro,.cpv-total,.cpv-rodape{margin-left:14px;margin-right:14px;}
  .cpv-vq-nome b{font-size:25px;}
  .cpv-nums{font-size:28px;}
  .cpv-qr img{width:72px;height:72px;}
}


/* Cupom térmico (bobina 58mm) — some da tela, aparece só na impressão de
   cupom. Ver o bloco #cpv-termica em public/comprovante.php. */
.cpv-termica{display:none;width:48mm;color:#000;background:#fff;font-family:Arial,Helvetica,sans-serif;font-size:9pt;line-height:1.25;text-align:center;}
.cpt-marca{font-weight:700;font-size:13pt;letter-spacing:1px;}
.cpt-tit{font-size:8pt;letter-spacing:2px;margin-bottom:1mm;}
.cpt-hr{border-top:1px dashed #000;margin:1.5mm 0;}
.cpt-evento{font-weight:700;font-size:9.5pt;}
.cpt-local{font-size:8pt;}
.cpt-vq-lbl{font-size:7pt;letter-spacing:1px;margin-top:1mm;}
.cpt-vq-nome{font-weight:700;font-size:11pt;margin-bottom:1mm;}
.cpt-cat{font-size:8.5pt;}
.cpt-nums{font-weight:700;font-size:17pt;letter-spacing:1px;margin:0.5mm 0 1mm;}
.cpt-det{font-size:7.5pt;}
.cpt-total{font-weight:700;font-size:10pt;}
.cpt-qr{margin:1.5mm 0 1mm;}
.cpt-qr img{width:36mm;height:36mm;}
.cpt-pe{font-size:7.5pt;margin-top:1mm;}

@media print{
  .cpv-bar,.cpv-escolher,.cpv-contato{display:none!important;}
  .cpv-body{background:#FFFFFF;padding:0;}
  .cpv-palco{padding:0;}
  .cpv-folha{max-width:none;box-shadow:none;border-radius:0;}
  /* Página nomeada (mesmo truque do layout4up acima): um "@page" solto aqui
     valeria pro site inteiro e roubaria a margem zero das fichas de
     julgamento, que dependem dela pra encaixar duas por folha. */
  .cpv-body{page:comprovante;}
  @page comprovante{size:A4;margin:10mm;}

  /* Modo cupom: esconde a arte de 210mm, mostra o bloco de 48mm e troca a
     página nomeada pra bobina contínua. "page" é propriedade normal de CSS,
     então a classe no body alterna entre as duas — o botão "Imprimir" comum
     continua saindo em A4. */
  .cpv-body.modo-cupom .cpv-palco{display:none!important;}
  .cpv-body.modo-cupom .cpv-termica{display:block;}
  .cpv-body.modo-cupom{page:cupom;background:#fff;}
  @page cupom{size:58mm auto;margin:2mm;}
}

/* Refinamento de leitura e hierarquia — mantém a tipografia da marca nos títulos. */
.form-label,.acc-lbl{font-size:14px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--txt2);}
.form-hint{font-size:13px;line-height:1.55;}
.btn{font-weight:600;line-height:1.35;}
.btn-gold{box-shadow:none;}
.btn-gold:hover{box-shadow:none;}
.card{border-color:var(--border);box-shadow:none;}
.input,.select,.acc-input{font-size:16px;line-height:1.45;min-height:46px;}
input[type=file]::file-selector-button{font:inherit;font-size:14px;color:var(--txt);background:var(--bg4);border:1px solid var(--border3);border-radius:6px;padding:8px 12px;margin-right:12px;cursor:pointer;}
.evento-form-layout{width:100%;max-width:900px;}
.wrap.evento-form-layout{max-width:900px;margin-left:0;margin-right:0;}
.sb-item{font-size:14px;color:var(--txt2);}
.step-tab{letter-spacing:0;text-transform:none;font-weight:600;}
@media(max-width:640px){.btn{white-space:normal;}.form-label,.acc-lbl{font-size:14px;}}

/* Informações do evento: dados principais e publicação em áreas distintas. */
.evento-info-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;align-items:start;width:100%;max-width:1440px;}
.evento-info-layout>.msg{grid-column:1/-1;}
.evento-info-layout>.card{margin:0;max-width:none;padding:24px;}
.evento-info-layout .card h2{font-family:var(--font-ui);font-size:20px;font-weight:600;letter-spacing:-.02em;line-height:1.4;}
.evento-info-layout .senha-view-grid{gap:22px 24px;padding-top:10px;}
.evento-info-layout .senha-view-label{font-size:13px;letter-spacing:0;text-transform:none;color:var(--txt3);}
.evento-info-layout .senha-view-value{font-size:16px;line-height:1.5;overflow-wrap:anywhere;}
.evento-info-layout .evento-publicacao{background:transparent;}
.evento-info-layout .evento-publicacao h2{margin-bottom:18px;}
.evento-info-layout .evento-publicacao .btn-gold{background:var(--bg3);color:var(--txt2);border:1px solid var(--border2);}
.evento-info-layout .evento-publicacao .input{min-width:0!important;flex-basis:100%!important;}
.evento-info-layout #edit-dados-evento{padding-top:8px;}
.evento-info-layout .form-group{margin-bottom:22px;}
.evento-subsection{font-family:var(--font-ui);font-size:16px;font-weight:600;color:var(--txt);border-top:1px solid var(--border);padding-top:24px;margin:8px 0 18px;}
@media(max-width:1100px){.evento-info-layout{grid-template-columns:minmax(0,1fr);}.evento-info-layout .evento-publicacao{background:var(--bg2);}}
@media(max-width:640px){.evento-info-layout{gap:16px;}.evento-info-layout>.card{padding:20px;}.evento-info-layout .senha-view-grid{gap:18px;}.evento-info-layout .card h2{font-size:18px;}}

/* Categorias: identificação, preço e regras em níveis separados. */
.categorias-layout{background:transparent;border:0;padding:0;}
.categorias-layout>div:first-child{margin-bottom:24px;}
.categorias-layout>div:first-child h2{font-family:var(--font-ui);font-size:20px;font-weight:600;letter-spacing:-.02em;}
.categorias-layout .acc{background:var(--bg2);border-color:var(--border);margin-bottom:16px;}
.categorias-layout .acc-head{cursor:default;align-items:flex-start;padding:22px 24px;}
.categorias-layout .acc-head:hover{background:transparent;}
.categorias-layout .acc-body{padding:0 24px 22px;}
.categoria-identidade h3{font-family:var(--font-ui);font-size:18px;line-height:1.4;font-weight:600;margin-bottom:6px;}
.categoria-preco-resumo{font-size:16px;font-weight:600;}
.categoria-preco-resumo span{font-size:13px;color:var(--txt3);font-weight:400;}
.categorias-layout .cat-reordenar{margin-right:8px;}
.categorias-layout .btn-reordenar{width:28px;height:25px;}
.categorias-layout .categoria-regras{display:flex;flex-wrap:wrap;gap:10px 20px;}
.categorias-layout .categoria-regras .pill{background:transparent;border:0;padding:0;font-size:13px;font-weight:400;text-transform:none;letter-spacing:0;line-height:1.6;color:var(--txt2);white-space:normal;}
.categorias-layout .categoria-regras .pill-amber{color:var(--amber);}
.categorias-layout .categoria-regras .pill-gold{color:var(--gold);}
.categorias-layout .acc-body>.sub{border-top:1px solid var(--border);padding-top:14px;font-size:13px;}
@media(max-width:640px){.categorias-layout .acc-head{padding:18px;}.categorias-layout .acc-body{padding:0 18px 18px;}.categorias-layout .acc-nome{width:100%;}.categorias-layout .acc-right{margin-left:44px;}.categoria-preco-resumo span{display:block;margin-top:3px;}.categoria-identidade{flex:1;min-width:0;}}

/* Portal público: fotografia, títulos largos e cartazes com mais presença. */
.public-home .hero{max-width:none;margin:0 0 56px;border-radius:0;border:0;border-bottom:1px solid var(--border);padding:72px 24px 64px;background-position:center 35%;}
.public-home .hero h1{font-family:var(--font-ui);font-weight:850;font-size:clamp(44px,6vw,80px);letter-spacing:-.055em;line-height:1.03;margin:0 auto 22px;max-width:1000px;}
.public-home .hero p{color:var(--txt2);font-size:18px;line-height:1.5;}
.public-home .hero-kicker{font-size:12px;letter-spacing:.08em;background:rgba(0,0,0,.4);border-color:rgba(255,255,255,.15);margin-bottom:26px;}
.public-home .hero-search{max-width:880px;margin-top:32px;background:rgba(8,8,8,.9);padding:12px;border-radius:12px;gap:12px;}
.public-home .hero-search .hs-field{background:var(--bg3);border:1px solid var(--border);border-radius:8px;min-height:52px;}
.public-home .hero-search .hs-divider{display:none;}
.public-home .hero-search .btn{min-height:52px;padding:12px 28px;}
.public-home .status-group{margin-bottom:56px;}
.public-home .status-group h3{font-family:var(--font-ui);font-size:clamp(24px,3vw,32px);font-weight:700;letter-spacing:-.035em;line-height:1.3;}
.public-home .section-head{margin-bottom:24px;}
.public-home .sg-sub{font-size:14px;margin-top:8px;}
.public-home .home-vendas-aviso{display:flex;align-items:flex-start;gap:10px;margin:0 0 28px;padding:14px 16px;border:1px solid var(--border2);border-radius:10px;background:var(--bg2);color:var(--txt2);font-size:14px;line-height:1.5;}
.public-home .home-vendas-aviso i{color:var(--gold);font-size:19px;flex:none;}
.public-home .ev-grid{gap:24px;}
.public-home .ev-card{border-color:var(--border);border-radius:12px;box-shadow:none;}
.public-home .ev-card:hover{transform:translateY(-3px);box-shadow:none;border-color:var(--border3);}
.public-home .ev-cover{height:auto;aspect-ratio:4/3;min-height:220px;background-repeat:no-repeat!important;}
.public-home .ev-nome{font-family:var(--font-ui);font-size:21px;font-weight:700;letter-spacing:-.025em;line-height:1.3;}
.public-home .ev-card-top{padding:22px 22px 8px;}
.public-home .ev-parque{line-height:1.5;margin-top:8px;}
.public-home .ev-stat{margin:12px 22px;padding:14px 0;background:transparent;border:0;border-radius:0;}
.public-home .ev-stat-val{font-family:var(--font-ui);font-size:24px;font-weight:700;letter-spacing:-.02em;}
.public-home .ev-footer{padding:16px 22px;gap:12px;flex-wrap:wrap;}
.public-home .ev-action{font-size:14px;font-weight:600;}
.public-home .hiw-inner h2,.public-home .cta-band h2{font-family:var(--font-ui);font-weight:700;letter-spacing:-.035em;}
@media(max-width:640px){
 .public-home .hero{padding:44px 20px 36px;margin-bottom:32px;}
 .public-home .hero h1{font-size:44px;}
 .public-home .hero p{font-size:16px;}
 .public-home .hero-kicker{font-size:10px;padding:7px 12px;}
 .public-home .hero-search{padding:10px;margin-top:24px;}
 .public-home .hero-search .hs-field{min-width:0;padding:12px;}
 .public-home .status-group{margin-bottom:36px;}
 .public-home .ev-cover{min-height:0;}
 .public-home .ev-nome{font-size:20px;}
}

.public-home .hero h1{text-transform:uppercase;}

.public-home .hero h1{font-size:clamp(30px,4.3vw,60px);max-width:1100px;}
@media(max-width:640px){.public-home .hero h1{font-size:clamp(20px,5.7vw,36px);letter-spacing:-.04em;}}

@media(max-width:640px){.public-home .hero h1{font-size:clamp(30px,9.7vw,48px);font-weight:900;line-height:1.05;letter-spacing:-.045em;}.public-home .hero h1 .hero-abertura{display:block;}.public-home .hero h1 .hl{display:block;}.public-home .hero h1 br{display:none;}}

/* Vitrine: capas horizontais 16:9 e grade de até três cards. */
.public-home .ev-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));}
.public-home .ev-card{max-width:440px;width:100%;}
.public-home .ev-cover.ev-poster{height:auto;max-height:none;aspect-ratio:auto;min-height:0;background:var(--bg3);padding-bottom:48px;}
.public-home .ev-poster::before{display:none;}
.public-home .ev-poster>img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;object-position:center;}
.public-home .ev-poster .ev-badge{top:auto;bottom:12px;right:12px;font-size:10px;padding:5px 7px;}
.public-home .ev-poster .ev-date-badge{bottom:12px;left:12px;font-size:11px;padding:5px 7px;background:transparent;}
.public-home .ev-footer{justify-content:space-between;}
.public-home .hiw-step-title{font-family:var(--font-ui);font-size:17px;font-weight:600;letter-spacing:0;line-height:1.4;}

/* Evento encerrado: leitura de arquivo, com menos ênfase que eventos ativos. */
.ev-card--encerrado{background:#14181b;border-color:#343d43;}
.ev-card--encerrado .ev-cover>img,.ev-card--encerrado .ev-cover::before{filter:saturate(.68) brightness(.86);}
.ev-card--encerrado .ev-badge.encerrada{background:rgba(27,34,39,.94);border:1px solid rgba(188,201,209,.45);color:#e0e6e9;box-shadow:none;text-shadow:none;}
.ev-card--encerrado .ev-date-badge,.ev-card--encerrado .ev-date-badge i{color:#c2cbd0;}
.ev-card--encerrado .ev-nome{color:#e0e5e8;}
.ev-card--encerrado .ev-stat i{color:#c2ccd2;background:rgba(184,200,210,.12);}
.ev-card--encerrado .ev-stat-premio .ev-stat-val{color:#d3dce1;}
.ev-card--encerrado .ev-action{color:#bcc9d0;}
.ev-card--encerrado:hover,.public-home .ev-card--encerrado:hover{border-color:#697a84;}
.ev-card--encerrado:hover .ev-nome{color:#fff;}
.public-home .ev-card--encerrado{border-color:#343d43;}



@media(max-width:640px){
 .topbar{padding:12px 16px;gap:10px;flex-wrap:nowrap;}
 .topbar .brand{font-size:24px;flex-shrink:0;}
 .topbar nav{gap:6px;flex-wrap:nowrap;margin-left:auto;}
 .topbar nav .user-pill{display:none;}
 .topbar nav a,.topbar nav button{font-size:13px;padding:9px 10px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;}
 .public-home .hero{padding-top:32px;padding-bottom:28px;}
 .public-home .hero-kicker{margin-bottom:18px;}
 .public-home .hero h1{margin-bottom:18px;}
 .public-home .ev-card{max-width:none;}
}

.public-home .hero{padding-top:48px;padding-bottom:40px;margin-bottom:24px;}
.public-home .home-filtros{margin-bottom:24px;color:var(--txt2);}
.public-home .home-filtros summary{cursor:pointer;font-size:14px;}
.public-home .home-filtros .hero-search{margin:14px 0 0;}
@media(max-width:640px){.public-home .hero{padding:24px 20px;margin-bottom:8px;}.public-home .hero-kicker{margin-bottom:14px;}.public-home .hero h1{margin-bottom:14px;}.public-home .hero p{font-size:15px;}}

.public-home .home-filtros .hero-search{max-width:none;background:transparent;border:0;padding:0;margin:0 0 28px;gap:10px;}
.public-home .home-filtros .hero-search .hs-field{min-height:44px;padding:10px 12px;}
.public-home .home-filtros .hero-search .hs-field input{font-size:14px;}
.public-home .home-filtros .hero-search .btn{min-height:44px;font-size:14px;padding:10px 20px;background:var(--bg3);color:var(--txt);border:1px solid var(--border2);}
@media(max-width:640px){.public-home .home-filtros .hero-search{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;}.public-home .home-filtros .hero-search .hs-field:first-child{grid-column:1/-1;}.public-home .home-filtros .hero-search .hs-field{min-width:0;}.public-home .home-filtros .hero-search .btn{padding:10px 16px;}}

.public-home .hero{padding:72px 24px 64px;margin-bottom:56px;}
@media(max-width:640px){.public-home .hero{padding:44px 20px 36px;margin-bottom:32px;}}

.public-home .topbar{position:fixed;top:0;left:0;right:0;background:rgba(0,0,0,var(--barra-opacidade,.18));border-bottom-color:rgba(255,255,255,var(--barra-borda,0));backdrop-filter:blur(8px);z-index:40;}
.public-home .hero{padding-top:calc(72px + var(--barra-altura,80px));}
@media(max-width:640px){.public-home .hero{padding-top:calc(44px + var(--barra-altura,64px));}}

/* Página do evento: cartaz integral e informações para compra. */
.public-evento .ev-hero{border-radius:12px;box-shadow:none;}
.public-evento .ev-hero-glow{display:none;}
.public-evento .ev-hero h1{font-family:var(--font-ui);font-size:clamp(24px,3vw,34px);font-weight:700;letter-spacing:-.035em;line-height:1.25;}
.public-evento .ev-cover.evento-cartaz{height:auto;aspect-ratio:auto;min-height:0;max-height:none;background:var(--bg3);padding-bottom:48px;}
.public-evento .evento-cartaz::before{display:none;}
.public-evento .evento-cartaz-imagem{width:100%;height:auto;display:block;}
.public-evento .evento-cartaz .ev-badge{top:auto;bottom:12px;right:12px;font-size:11px;}
.public-evento .evento-cartaz .ev-date-badge{bottom:12px;left:12px;background:transparent;font-size:12px;}
.public-evento .pub-section-title{font-family:var(--font-ui);font-size:22px;font-weight:700;letter-spacing:-.02em;}
.public-evento .ev-cta-card{background:var(--bg2);border-color:var(--border);border-radius:12px;box-shadow:none;flex-wrap:wrap;}
.public-evento .ev-cta-card .btn{width:100%;justify-content:center;}
.public-evento .ev-cta-icon{box-shadow:none;width:44px;height:44px;border-radius:10px;}
.public-evento .premio-box{background:transparent;border:0;padding-left:0;padding-right:0;}
.public-evento .premio-val{font-family:var(--font-ui);font-size:26px;font-weight:700;letter-spacing:-.02em;}
@media(min-width:1000px){.public-evento .ev-layout:not(.ev-layout-sem-lateral){grid-template-columns:minmax(0,1.5fr) minmax(300px,1fr);}}
@media(max-width:640px){.public-evento .ev-layout{gap:16px;}.public-evento .ev-hero h1{font-size:24px;}.public-evento .ev-cta-fixa .btn{font-size:14px;padding:12px 16px;}.public-evento .evento-cartaz .ev-date-badge{font-size:10px;padding:5px 6px;}.public-evento .evento-cartaz .ev-badge{font-size:10px;padding:5px 6px;}}

/* Seleção de categoria: comparação de preços e ações alinhadas. */
.public-categorias .cat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));align-items:stretch;}
.public-categorias .cat-card{border-radius:12px;box-shadow:none;gap:4px;min-width:0;}
.public-categorias .cat-card h2{font-family:var(--font-ui);font-size:22px;font-weight:700;letter-spacing:-.02em;line-height:1.3;}
.public-categorias .cat-preco{font-family:var(--font-ui);font-size:30px;font-weight:700;letter-spacing:-.03em;line-height:1.2;}
.public-categorias .pub-section-title{font-family:var(--font-ui);font-size:26px!important;font-weight:700;letter-spacing:-.02em;}
.public-categorias .cat-precos{width:100%;border-collapse:collapse;margin:0 0 14px;font-size:14px;}
.public-categorias .cat-precos th,.public-categorias .cat-precos td{padding:7px 0;border-bottom:1px solid var(--border);text-align:left;}
.public-categorias .cat-precos th{color:var(--txt2);font-weight:500;}
.public-categorias .cat-precos th:last-child,.public-categorias .cat-precos td:last-child{text-align:right;}
.public-categorias .cat-card .empty{padding:12px;font-size:14px;}

/* Etapas de compra: sequência completa em uma linha no celular. */
.compra-etapas{flex-wrap:nowrap;}
@media(max-width:640px){
  .compra-etapas{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;}
  .compra-etapas .step-tab{flex-direction:column;gap:7px;margin:0;padding:10px 0;font-size:11px;min-width:0;white-space:normal;text-align:center;}
  .compra-etapas .compra-etapa-nome{line-height:1.2;}
  .compra-etapas .step-tab .sn{width:24px;height:24px;}
}
.kiosk-pista-form{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:2px 0 7px;color:var(--txt2);font-size:13px;font-weight:700;}
.kiosk-pista-form .kiosk-fila-btn{padding:5px 10px;min-height:32px;}
.kiosk-pista-form .kiosk-fila-btn:disabled{opacity:.45;cursor:default;}

/* Tipografia das interfaces. A visualização/impressão das fichas usa
   .print-body e fontes próprias; não participa desta mudança. */
@font-face{font-family:'PuxaBoi UI';src:url('fonts/Inter-400.ttf') format('truetype');font-style:normal;font-weight:400;font-display:swap;}
@font-face{font-family:'PuxaBoi UI';src:url('fonts/Inter-600.ttf') format('truetype');font-style:normal;font-weight:600;font-display:swap;}
@font-face{font-family:'PuxaBoi UI';src:url('fonts/Inter-700.ttf') format('truetype');font-style:normal;font-weight:700;font-display:swap;}
@font-face{font-family:'PuxaBoi UI';src:url('fonts/Inter-Black.ttf') format('truetype');font-style:normal;font-weight:900;font-display:swap;}
body:not(.print-body):not(.cpv-body):not(.kiosk){--font-ui:'PuxaBoi UI',system-ui,-apple-system,'Segoe UI',Arial,sans-serif;}

/* A frase da hero já foi acertada no mobile; preservar sua quebra e peso. */
.public-home .hero h1{font-family:system-ui,-apple-system,'Segoe UI',Arial,sans-serif;}

/* Leitura do painel: rótulos e títulos secundários menos condensados. */
.admin-layout .card h2{font-family:var(--font-ui);font-size:21px;font-weight:700;letter-spacing:-.025em;line-height:1.25;}
.admin-layout .section-label{font-family:var(--font-ui);font-size:14px;font-weight:700;letter-spacing:0;text-transform:none;line-height:1.35;}
.admin-layout .form-label{font-size:14.5px;letter-spacing:0;text-transform:none;line-height:1.35;}
.admin-layout .sb-section{font-size:12.5px;letter-spacing:.08em;}
