/* Base compartilhada. Cada aplicação define as próprias cores em :root. */
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
html,body{min-height:100%}
body{font-family:var(--f,system-ui,sans-serif);color:var(--txt,#14203a);background:var(--bg,#f4f6fb);line-height:1.45}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid var(--foco,#f2b705);outline-offset:2px}
a{color:var(--primaria,#1437a6)}
img,video,canvas,svg{max-width:100%;display:block}
.view{display:none}
.view.on{display:block}
.hide{display:none!important}
.sr{position:absolute;left:-9999px}

/* botões */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5em;padding:.8em 1.3em;border-radius:12px;font-weight:600;background:var(--primaria,#1437a6);color:#fff;transition:filter .15s,transform .1s;min-height:44px}
.btn:hover{filter:brightness(1.08)}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.45;cursor:not-allowed;filter:none}
.btn.sec{background:var(--sec-bg,#e6ebf5);color:var(--primaria,#1437a6)}
.btn.claro{background:#fff;color:var(--primaria,#1437a6);border:1.5px solid var(--linha,#d5dceb)}
.btn.perigo{background:#c62828;color:#fff}
.btn.ok{background:#1b7f4b;color:#fff}
.btn.mini{padding:.45em .8em;min-height:34px;font-size:.9em;border-radius:9px}
.btn.bloco{width:100%}
.btn.grande{font-size:1.15em;padding:1em 1.6em}

/* campos */
.campo{display:flex;flex-direction:column;gap:.35em;margin-bottom:1em}
.campo label{font-size:.9em;font-weight:600;color:var(--muted,#5b6b86)}
.campo input,.campo select,.campo textarea{padding:.75em .9em;border:1.5px solid var(--linha,#d5dceb);border-radius:10px;background:#fff;min-height:46px;width:100%}
.campo input:focus,.campo select:focus{border-color:var(--primaria,#1437a6);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--primaria,#1437a6) 18%,transparent)}
.campo .dica{font-size:.82em;color:var(--muted,#5b6b86)}
.campo.erro input{border-color:#c62828}
.linha2{display:grid;grid-template-columns:1fr 1fr;gap:.8em}
.check{display:flex;gap:.7em;align-items:flex-start;font-size:.95em;line-height:1.4;cursor:pointer}
.check input{width:22px;height:22px;flex:none;margin-top:2px;accent-color:var(--primaria,#1437a6)}

/* cartões e listas */
.card{background:#fff;border:1px solid var(--linha,#d5dceb);border-radius:16px;padding:1.2em}
.card+.card{margin-top:1em}
.muted{color:var(--muted,#5b6b86)}
.peq{font-size:.86em}
.forte{font-weight:700}
.centro{text-align:center}
.linha{display:flex;align-items:center;gap:.8em;flex-wrap:wrap}
.entre{justify-content:space-between}
.mt{margin-top:1em}.mt2{margin-top:2em}.mb{margin-bottom:1em}
.vazio{padding:2.5em 1em;text-align:center;color:var(--muted,#5b6b86);border:1.5px dashed var(--linha,#d5dceb);border-radius:14px}

/* chips de status */
.chip{display:inline-flex;align-items:center;gap:.4em;padding:.25em .7em;border-radius:99px;font-size:.82em;font-weight:700;white-space:nowrap}
.chip.neutro{background:#e9edf5;color:#3d4a66}
.chip.ok{background:#dff3e7;color:#146c3c}
.chip.alerta{background:#fff1cc;color:#8a5a00}
.chip.destaque{background:#dbe7ff;color:#12388f}
.chip.erro{background:#fde0e0;color:#a11616}

/* tabela simples */
.tabela{width:100%;border-collapse:collapse;font-size:.95em}
.tabela th{text-align:left;font-size:.8em;color:var(--muted,#5b6b86);font-weight:700;padding:.5em .6em;border-bottom:1.5px solid var(--linha,#d5dceb)}
.tabela td{padding:.6em .6em;border-bottom:1px solid var(--linha,#e6ebf5);vertical-align:middle}
.tabela tr:last-child td{border-bottom:none}
.rolagem{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* etapas (só onde o conteúdo é uma sequência) */
.etapas{display:flex;gap:6px;margin-bottom:1.2em}
.etapas i{flex:1;height:5px;border-radius:3px;background:var(--linha,#d5dceb)}
.etapas i.feita{background:var(--primaria,#1437a6)}

/* câmera */
.cam{position:relative;background:#0b1220;border-radius:16px;overflow:hidden;aspect-ratio:4/3}
.cam video,.cam img{width:100%;height:100%;object-fit:cover}
.cam.espelho video{transform:scaleX(-1)}
.cam .guia{position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center}
.cam .guia svg{width:70%;height:70%;opacity:.7}
.cam .legenda{position:absolute;left:0;right:0;bottom:0;padding:.6em 1em;background:linear-gradient(transparent,rgba(0,0,0,.65));color:#fff;font-size:.9em;text-align:center}
.cam .caixa{position:absolute;border:3px solid #35d07f;border-radius:8px;pointer-events:none}

/* mapa de assentos */
.aviao{display:inline-grid;gap:6px;margin:0 auto;padding:1em;background:#f4f6fb;border-radius:40px 40px 14px 14px;border:1px solid var(--linha,#d5dceb)}
.aviao .fila{display:grid;grid-auto-flow:column;gap:6px;align-items:center}
.aviao .num{width:22px;font-size:.75em;color:var(--muted);text-align:center}
.aviao .corredor{width:14px}
.assento{width:34px;height:34px;border-radius:8px 8px 4px 4px;border:1.5px solid #9fb0d0;background:#fff;font-size:.72em;font-weight:700;color:#3d4a66;display:flex;align-items:center;justify-content:center}
.assento:hover{border-color:var(--primaria)}
.assento.ocupado{background:#cfd6e4;color:#8a94a8;border-color:#cfd6e4;cursor:not-allowed}
.assento.meu{background:var(--primaria,#1437a6);color:#fff;border-color:var(--primaria,#1437a6)}
.assento.saida{border-color:#f2b705}

/* avisos */
#toasts{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);display:flex;flex-direction:column;gap:8px;z-index:100;width:min(92vw,480px)}
.toast{background:#14203a;color:#fff;padding:.8em 1.1em;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.25);font-size:.95em;animation:subir .25s ease-out}
.toast.erro{background:#a11616}.toast.ok{background:#146c3c}
.toast.sumir{opacity:0;transition:opacity .4s}
@keyframes subir{from{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}
.sem-rede{position:fixed;top:0;left:0;right:0;background:#a11616;color:#fff;text-align:center;padding:.5em;font-weight:600;z-index:200;font-size:.95em}
.aviso{padding:.9em 1em;border-radius:12px;background:#fff8e1;border:1px solid #f2d27a;color:#6a4700;font-size:.93em}
.aviso.ok{background:#e8f7ee;border-color:#9fd8b6;color:#0f5a2f}
.aviso.erro{background:#fdecec;border-color:#f3b0b0;color:#8a1111}
.aviso.info{background:#e9f0ff;border-color:#b9ccf5;color:#1a3a80}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
