/* =============================================================================
   MOTOR DE MÁSCARAS (temas) — Phoinix
   =============================================================================
   Todo o visual do CRM é dirigido por tokens (custom properties) em :root.
   Cada tema (:root override em html[data-tema="..."]) redefine só os tokens
   — os componentes abaixo consomem SÓ var(--token), nunca hex direto.

   "classico" é o visual ATUAL do sistema (extraído de templates/base.html
   sem nenhuma alteração de valor) e vive nos valores default de :root — ou
   seja, se data-tema vier ausente/inválido, o app renderiza IDÊNTICO a antes
   desta mudança. As outras três máscaras ("executiva-clara", "torre-de-
   controle", "voo-moderno") implementam a paleta/tipografia/densidade de
   docs/propostas-visuais/<tema>/DESIGN.md.

   Ver app/main.py (TEMAS_VALIDOS, tema_efetivo) e templates/base.html
   (seletor de máscara + atributo data-tema no <html>).
   ========================================================================== */

/* -----------------------------------------------------------------------
   1. TOKENS — default = "classico" (o visual de hoje)
   -------------------------------------------------------------------- */
:root {
  /* Superfícies */
  --cor-fundo: #faf8f6;
  --cor-sidebar: var(--cor-acento);
  --cor-cartao: #ffffff;
  --cor-cartao-alt: #f3ece6;       /* cabeçalho de tabela, faixas */
  --cor-cartao-hover: #ece0d5;     /* hover de th ordenável / linha */
  --cor-zebra: transparent;       /* linha alternada de tabela (classico: nenhuma) */
  --cor-input: #ffffff;
  --cor-hover-linha: transparent; /* hover de linha de tabela (classico: nenhum) */

  /* Texto */
  --texto-principal: #22201e;
  --texto-secundario: #5c554c;
  --texto-terciario: #7a7267;
  --texto-invertido: #ffffff;

  /* Bordas */
  --borda: #e5ded8;
  --borda-forte: #e5ded8;

  /* Acento (marca) */
  --cor-acento: #8b1e3f;
  --cor-acento-hover: #8b1e3f;      /* == acento em classico: sem hover novo */
  --cor-acento-texto: #ffffff;      /* texto sobre fundo de acento (botões) */
  --cor-acento-tint: transparent;   /* fundo tênue do acento (focus ring etc.) */

  /* Sidebar (podem divergir do genérico texto/acento em temas escuro↔claro) */
  --sidebar-texto: #ffffff;
  --sidebar-texto-opacidade: .82;
  --sidebar-hover-bg: rgba(255, 255, 255, .08);
  --sidebar-ativo-bg: rgba(255, 255, 255, .16);
  --sidebar-ativo-borda-lado: right;
  --sidebar-ativo-borda-cor: #ffffff;
  --sidebar-badge-bg: #ffffff;
  --sidebar-badge-texto: var(--cor-acento);
  --sidebar-titulo-transform: none;
  --sidebar-titulo-tracking: normal;
  --sidebar-titulo-fonte: var(--fonte-corpo);

  /* Estados semânticos (fundo / texto / borda) */
  --ok-bg: #dff5e1;      --ok-texto: #186a2e;      --ok-borda: transparent;
  --warn-bg: #fff3cd;    --warn-texto: #8a6100;    --warn-borda: transparent;
  --canc-bg: #fbe1e5;    --canc-texto: #9c1c2e;    --canc-borda: transparent;
  --info-bg: #eee2d8;    --info-texto: #5c554c;    --info-borda: transparent;
  --futuro-bg: #eee2d8;  --futuro-texto: #5c554c;  --futuro-borda: transparent;

  --cor-positivo: #186a2e;
  --cor-negativo: #b00020;
  --cor-erro: #b00020;

  /* Linhas de destaque de tabela */
  --linha-vigente-bg: #fbeef2;
  --linha-destaque-bg: #fbe1e5;

  /* Tipografia */
  --fonte-corpo: -apple-system, 'Segoe UI', sans-serif;
  --fonte-titulo: var(--fonte-corpo);
  --fonte-numeros: var(--fonte-corpo);
  --fonte-destaque: var(--fonte-corpo);
  --peso-destaque: 700;
  --peso-titulo: normal;

  /* Cabeçalho de tabela (th): "classico" é texto normal, sem small caps */
  --th-transform: none;
  --th-tracking: normal;
  --th-peso: 600;
  --th-tamanho: 1em;
  --th-cor: var(--texto-principal);
  --th-borda-cor: var(--borda);

  /* Raios */
  --raio-sm: 6px;
  --raio-md: 8px;
  --raio-pill: 999px;

  /* Sombras */
  --sombra-cartao: none;
  --sombra-col-acoes: -4px 0 6px -4px rgba(0, 0, 0, .2);

  /* Densidade de tabela */
  --cel-pad-y: .55rem;      --cel-pad-x: .8rem;
  --cel-pad-y-densa: .4rem; --cel-pad-x-densa: .55rem;
  --tabela-fonte-densa: .84rem;

  /* Layout / espaçamento */
  --largura-sidebar: 230px;
  --largura-main: 1500px;
  --largura-main-estreito: 1100px;
  --gap-secao: 2rem;
}

/* -----------------------------------------------------------------------
   2. MÁSCARAS — cada bloco só redefine tokens (+ overrides estruturais
      mínimos, sinalizados com comentário "estrutural").
   -------------------------------------------------------------------- */

/* ---- Executiva Clara: luxo contido/editorial, creme + dourado, serifa em
   display, small caps recessivos. Ver docs/propostas-visuais/executiva-clara/DESIGN.md ---- */
html[data-tema="executiva-clara"] {
  --cor-fundo: #F7F2E9;
  --cor-sidebar: #F1EADD;
  --cor-cartao: #FDFBF6;
  --cor-cartao-alt: var(--cor-cartao);
  --cor-cartao-hover: #F2E7CF;
  --cor-zebra: #F9F5EC;
  --cor-input: #FFFDF9;
  --cor-hover-linha: #F2E7CF;

  --texto-principal: #262119;
  --texto-secundario: #5C5346;
  --texto-terciario: #93887A;
  --texto-invertido: #262119;

  --borda: #E4DBCA;
  --borda-forte: #D5C9B2;

  --cor-acento: #A17C33;
  --cor-acento-hover: #7E5F22;
  --cor-acento-texto: #262119;
  --cor-acento-tint: #F2E7CF;

  --sidebar-texto: #5C5346;
  --sidebar-texto-opacidade: 1;
  --sidebar-hover-bg: rgba(161, 124, 51, .08);
  --sidebar-ativo-bg: rgba(161, 124, 51, .1);
  --sidebar-ativo-borda-lado: left;
  --sidebar-ativo-borda-cor: var(--cor-acento);
  --sidebar-badge-bg: var(--cor-acento);
  --sidebar-badge-texto: #FDFBF6;
  --sidebar-titulo-transform: none;
  --sidebar-titulo-tracking: .14em;
  --sidebar-titulo-fonte: var(--fonte-titulo);

  --ok-bg: #E8EEDF;     --ok-texto: #4A6234;   --ok-borda: #D3DEC2;
  --warn-bg: #F6EAD0;   --warn-texto: #8A6414; --warn-borda: #E7D3A4;
  --canc-bg: #F3E1DC;   --canc-texto: #93402F; --canc-borda: #E4C6BD;
  --info-bg: #E7E9E2;   --info-texto: #55604B; --info-borda: #CDD2C2;
  --futuro-bg: #E7E9E2; --futuro-texto: #55604B; --futuro-borda: #CDD2C2;

  --cor-positivo: #4A6234;
  --cor-negativo: #93402F;
  --cor-erro: #93402F;

  --linha-vigente-bg: var(--cor-acento-tint);
  --linha-destaque-bg: #F3E1DC;

  --fonte-corpo: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  --fonte-titulo: "Iowan Old Style", "Palatino", "Palatino Linotype", Georgia, "Times New Roman", serif;
  --fonte-numeros: var(--fonte-corpo);
  --fonte-destaque: var(--fonte-titulo);
  --peso-destaque: 500;
  --peso-titulo: 500;

  --th-transform: uppercase;
  --th-tracking: .14em;
  --th-peso: 600;
  --th-tamanho: .68rem;
  --th-cor: var(--texto-terciario);
  --th-borda-cor: var(--borda-forte);

  --raio-sm: 4px;
  --raio-md: 8px;

  --sombra-cartao: 0 1px 2px rgba(74, 60, 34, .05), 0 4px 16px rgba(74, 60, 34, .05);
  --sombra-col-acoes: -6px 0 8px -6px rgba(74, 60, 34, .18);

  --largura-sidebar: 248px;
}

/* estrutural: fio à direita da sidebar (paper-deep, não mais sólida) */
html[data-tema="executiva-clara"] .sidebar { border-right: 1px solid var(--borda); }
/* estrutural: zebra sutil nas tabelas (a proposta pede linhas alternadas) */
html[data-tema="executiva-clara"] tbody tr:nth-child(even) td { background: var(--cor-zebra); }
html[data-tema="executiva-clara"] tbody tr:hover td { background: var(--cor-hover-linha); }
html[data-tema="executiva-clara"] h1,
html[data-tema="executiva-clara"] h2 { font-family: var(--fonte-titulo); font-weight: var(--peso-titulo); }

/* ---- Torre de Controle: dark mode de operação, mono tabular, acento âmbar.
   Ver docs/propostas-visuais/torre-de-controle/DESIGN.md ---- */
html[data-tema="torre-de-controle"] {
  --cor-fundo: #0a0c0f;
  --cor-sidebar: #111318;
  --cor-cartao: #111318;
  --cor-cartao-alt: #161920;
  --cor-cartao-hover: #20242e;
  --cor-zebra: transparent;
  --cor-input: #0d0f13;
  --cor-hover-linha: #20242e;

  --texto-principal: #e9ebf0;
  --texto-secundario: #9aa3b2;
  --texto-terciario: #656e7d;
  --texto-invertido: #0a0c0f;

  --borda: #242a35;
  --borda-forte: #343c4a;

  --cor-acento: #ff9a3c;
  --cor-acento-hover: #ffb35e;
  --cor-acento-texto: #14100a;
  --cor-acento-tint: rgba(255, 154, 60, .13);

  --sidebar-texto: #e9ebf0;
  --sidebar-texto-opacidade: 1;
  --sidebar-hover-bg: #20242e;
  --sidebar-ativo-bg: rgba(255, 154, 60, .13);
  --sidebar-ativo-borda-lado: left;
  --sidebar-ativo-borda-cor: var(--cor-acento);
  --sidebar-badge-bg: rgba(255, 154, 60, .18);
  --sidebar-badge-texto: var(--cor-acento);
  --sidebar-titulo-transform: uppercase;
  --sidebar-titulo-tracking: .08em;
  --sidebar-titulo-fonte: var(--fonte-corpo);

  --ok-bg: rgba(47, 214, 142, .13);   --ok-texto: #2fd68e;   --ok-borda: rgba(47, 214, 142, .35);
  --warn-bg: rgba(242, 193, 78, .13); --warn-texto: #f2c14e; --warn-borda: rgba(242, 193, 78, .35);
  --canc-bg: rgba(255, 92, 102, .13); --canc-texto: #ff5c66; --canc-borda: rgba(255, 92, 102, .35);
  --info-bg: rgba(90, 166, 255, .13); --info-texto: #5aa6ff; --info-borda: rgba(90, 166, 255, .35);
  --futuro-bg: rgba(90, 166, 255, .13); --futuro-texto: #5aa6ff; --futuro-borda: rgba(90, 166, 255, .35);

  --cor-positivo: #2fd68e;
  --cor-negativo: #ff5c66;
  --cor-erro: #ff5c66;

  --linha-vigente-bg: rgba(255, 154, 60, .08);
  --linha-destaque-bg: rgba(255, 92, 102, .1);

  --fonte-corpo: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --fonte-titulo: var(--fonte-corpo);
  --fonte-numeros: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
  --fonte-destaque: var(--fonte-numeros);
  --peso-destaque: 700;
  --peso-titulo: 700;

  --th-transform: uppercase;
  --th-tracking: .07em;
  --th-peso: 700;
  --th-tamanho: .68rem;
  --th-cor: var(--texto-terciario);
  --th-borda-cor: var(--borda-forte);

  --raio-sm: 4px;
  --raio-md: 6px;

  --sombra-cartao: none;
  --sombra-col-acoes: -6px 0 10px -6px rgba(0, 0, 0, .5);

  --cel-pad-y-densa: .35rem; --cel-pad-x-densa: .5rem;
  --tabela-fonte-densa: .8rem;
}

html[data-tema="torre-de-controle"] body { color-scheme: dark; }
html[data-tema="torre-de-controle"] .sidebar { border-right: 1px solid var(--borda); }
html[data-tema="torre-de-controle"] table { border-color: var(--borda); }
html[data-tema="torre-de-controle"] td.num,
html[data-tema="torre-de-controle"] th.num,
html[data-tema="torre-de-controle"] .lucro-estimado,
html[data-tema="torre-de-controle"] .linha-lucro { font-family: var(--fonte-numeros); }
html[data-tema="torre-de-controle"] tbody tr:hover td { background: var(--cor-hover-linha); }

/* ---- Voo Moderno: SaaS claro-neutro, sidebar escura em gradiente, indigo +
   gradiente âmbar→coral pontual. Ver docs/propostas-visuais/voo-moderno/DESIGN.md.
   Aproximação desta fase: mantém o esqueleto <nav class="sidebar"> atual
   (sem ícones SVG, sem topbar/breadcrumb próprios, sem chips por programa)
   — só re-estiliza cores/tipografia/raio/sombra por tokens. ---- */
html[data-tema="voo-moderno"] {
  --cor-fundo: #F6F5FB;
  --cor-sidebar: #1B1733;
  --cor-cartao: #FFFFFF;
  --cor-cartao-alt: #F6F5FB;
  --cor-cartao-hover: #F0EEF8;
  --cor-zebra: transparent;
  --cor-input: #FFFFFF;
  --cor-hover-linha: #F7F6FF;

  --texto-principal: #15132A;
  --texto-secundario: #332F52;
  --texto-terciario: #69647F;
  --texto-invertido: #FFFFFF;

  --borda: #E7E4F1;
  --borda-forte: #D8D3EA;

  --cor-acento: #4C3AE3;
  --cor-acento-hover: #3B2FB0;
  --cor-acento-texto: #FFFFFF;
  --cor-acento-tint: #EDEBFF;

  --sidebar-texto: #FFFFFF;
  --sidebar-texto-opacidade: .78;
  --sidebar-hover-bg: rgba(255, 255, 255, .08);
  --sidebar-ativo-bg: rgba(109, 92, 239, .22);
  --sidebar-ativo-borda-lado: left;
  --sidebar-ativo-borda-cor: #F5A623;
  --sidebar-badge-bg: #FFFFFF;
  --sidebar-badge-texto: var(--cor-acento);
  --sidebar-titulo-transform: none;
  --sidebar-titulo-tracking: normal;
  --sidebar-titulo-fonte: var(--fonte-corpo);

  --ok-bg: #E1FAEA;   --ok-texto: #0E7A3D;  --ok-borda: transparent;
  --warn-bg: #FDF1D6; --warn-texto: #92660A; --warn-borda: transparent;
  --canc-bg: #FDE4EA; --canc-texto: #BE123C; --canc-borda: transparent;
  --info-bg: #E9EEFD; --info-texto: #3348B4; --info-borda: transparent;
  --futuro-bg: #E9EEFD; --futuro-texto: #3348B4; --futuro-borda: transparent;

  --cor-positivo: #0E7A3D;
  --cor-negativo: #BE123C;
  --cor-erro: #BE123C;

  --linha-vigente-bg: var(--cor-acento-tint);
  --linha-destaque-bg: #FDE4EA;

  --fonte-corpo: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, ui-sans-serif, sans-serif;
  --fonte-titulo: var(--fonte-corpo);
  --fonte-numeros: var(--fonte-corpo);
  --fonte-destaque: var(--fonte-corpo);
  --peso-destaque: 800;
  --peso-titulo: 800;

  --th-transform: uppercase;
  --th-tracking: .06em;
  --th-peso: 700;
  --th-tamanho: .72rem;
  --th-cor: var(--texto-terciario);
  --th-borda-cor: var(--borda);

  --raio-sm: 8px;
  --raio-md: 16px;

  --sombra-cartao: 0 1px 2px rgba(21, 19, 42, .05);
  --sombra-col-acoes: -6px 0 10px -6px rgba(21, 19, 42, .18);

  --largura-sidebar: 248px;
}

/* estrutural: sidebar em degradê diagonal (não dá para expressar 2 cores +
   ângulo num único token sem duplicar toda a paleta) */
html[data-tema="voo-moderno"] .sidebar {
  background: linear-gradient(190deg, #1B1733, #100D20);
}
html[data-tema="voo-moderno"] tbody tr:hover td { background: var(--cor-hover-linha); }
html[data-tema="voo-moderno"] h1,
html[data-tema="voo-moderno"] h2 { font-weight: var(--peso-titulo); letter-spacing: -.01em; }

/* -----------------------------------------------------------------------
   3. COMPONENTES — só consomem tokens (nenhum hex/valor fixo aqui além dos
      que já eram estruturais em "classico": tamanhos base em rem/px que
      nenhuma proposta pediu para tokenizar, como o max-width de main).
   -------------------------------------------------------------------- */
* { box-sizing: border-box; }
body {
  margin: 0;
  font-family: var(--fonte-corpo);
  background: var(--cor-fundo);
  color: var(--texto-principal);
}

/* ---- layout: sidebar fixa + conteúdo -------------------------------- */
.app { display: flex; min-height: 100vh; align-items: stretch; }
.sidebar {
  width: var(--largura-sidebar); flex: 0 0 var(--largura-sidebar);
  background: var(--cor-sidebar); color: var(--sidebar-texto);
  padding: 1rem 0 1.5rem; position: fixed; top: 0; left: 0; bottom: 0; overflow-y: auto;
}
.sidebar .brand {
  display: block; padding: .2rem 1.2rem 1.2rem; font-size: 1.2rem; font-weight: 800;
  letter-spacing: var(--sidebar-titulo-tracking); text-transform: var(--sidebar-titulo-transform);
  font-family: var(--sidebar-titulo-fonte);
  color: var(--sidebar-texto); text-decoration: none;
}
.nav-group { margin-bottom: 1.15rem; }
.nav-group-title {
  padding: 0 1.2rem; font-size: .66rem; text-transform: uppercase; letter-spacing: .08em;
  opacity: .6; margin-bottom: .35rem; color: var(--sidebar-texto);
}
.nav-group a {
  display: flex; justify-content: space-between; align-items: center; gap: .5rem;
  padding: .5rem 1.2rem; color: var(--sidebar-texto); text-decoration: none;
  opacity: var(--sidebar-texto-opacidade); font-size: .92rem;
}
.nav-group a:hover { opacity: 1; background: var(--sidebar-hover-bg); }
.nav-group a.active {
  opacity: 1; font-weight: 700; background: var(--sidebar-ativo-bg);
  border-right: 3px solid var(--sidebar-ativo-borda-cor);
}
/* nas máscaras claras/dark-terminal a proposta pede o destaque à ESQUERDA
   (não à direita como no clássico) — troca de lado, mesma cor via token */
html[data-tema="executiva-clara"] .nav-group a.active,
html[data-tema="torre-de-controle"] .nav-group a.active,
html[data-tema="voo-moderno"] .nav-group a.active {
  border-right: none;
  border-left: 2px solid var(--sidebar-ativo-borda-cor);
}
.nav-group a .badge-count {
  background: var(--sidebar-badge-bg); color: var(--sidebar-badge-texto); border-radius: var(--raio-pill);
  font-size: .72rem; font-weight: 700; padding: .05rem .5rem; line-height: 1.4;
}
.content { flex: 1; min-width: 0; margin-left: var(--largura-sidebar); }

/* ---- seletor de máscara (header do conteúdo) ------------------------ */
.tema-switch {
  display: flex; justify-content: flex-end; align-items: center; gap: .5rem;
  padding: .6rem 1rem 0; max-width: var(--largura-main); margin: 0 auto;
}
.tema-switch form { display: flex; align-items: center; gap: .5rem; }
.tema-switch label {
  font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--texto-terciario);
}
.tema-switch select {
  width: auto; margin: 0; padding: .35rem .6rem; font-size: .82rem;
  border: 1px solid var(--borda); border-radius: var(--raio-sm);
  background: var(--cor-input); color: var(--texto-principal); font-family: var(--fonte-corpo);
}
.tema-switch button {
  padding: .35rem .7rem; font-size: .8rem;
}

@media (max-width: 900px) {
  .app { flex-direction: column; }
  .sidebar {
    position: static; width: 100%; flex: none; display: flex; align-items: center;
    overflow-x: auto; padding: .3rem .4rem; white-space: nowrap;
  }
  .sidebar .brand { padding: .4rem .8rem; flex: 0 0 auto; }
  .nav-group { display: flex; margin: 0; flex: 0 0 auto; }
  .nav-group-title { display: none; }
  .nav-group a { padding: .5rem .7rem; white-space: nowrap; border-right: none !important; }
  .nav-group a.active { border-right: none; border-left: none; border-bottom: 2px solid var(--sidebar-ativo-borda-cor); background: var(--sidebar-ativo-bg); }
  .content { margin-left: 0; }
  .filtros input, .filtros select { min-width: 140px; }
  .tema-switch { justify-content: center; }
}

/* ---- componentes reutilizados pelas telas --------------------------- */
main { max-width: var(--largura-main); margin: 1.5rem auto; padding: 0 1rem; }
main.main-estreito { max-width: var(--largura-main-estreito); }

h1, h2 { font-family: var(--fonte-titulo); }

table {
  width: 100%; border-collapse: collapse; background: var(--cor-cartao);
  border: 1px solid var(--borda); box-shadow: var(--sombra-cartao); border-radius: var(--raio-md);
}
th, td { padding: var(--cel-pad-y) var(--cel-pad-x); text-align: left; border-bottom: 1px solid var(--borda); }
th {
  background: var(--cor-cartao-alt); font-weight: var(--th-peso); color: var(--th-cor);
  text-transform: var(--th-transform); letter-spacing: var(--th-tracking); font-size: var(--th-tamanho);
  border-bottom-color: var(--th-borda-cor);
}
th[data-sortavel] { cursor: pointer; user-select: none; }
th[data-sortavel]:hover { background: var(--cor-cartao-hover); }
th.sort-ativo::after { content: " \25B2"; font-size: .7em; opacity: .65; }
th.sort-ativo[data-dir="desc"]::after { content: " \25BC"; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; font-family: var(--fonte-numeros); }
tfoot td { font-weight: 700; }
tr.vigente { background: var(--linha-vigente-bg); }
tr.destaque { background: var(--linha-destaque-bg); }

/* ---- densidade para tabelas grandes (emissões, movimentações...) ---- */
.tabela-densa { font-size: var(--tabela-fonte-densa); }
.tabela-densa th, .tabela-densa td { padding: var(--cel-pad-y-densa) var(--cel-pad-x-densa); }
.tabela-densa td.num, .tabela-densa th.num { white-space: nowrap; }

/* ---- truncamento de texto longo, com tooltip nativo via title ------- */
.trunca { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.trunca a {
  display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; vertical-align: bottom;
}
.trunca-passageiro { max-width: 20ch; }
.trunca-rota { max-width: 20ch; }
.trunca-conta { max-width: 18ch; }
.trunca-descricao { max-width: 28ch; }
.trunca-nome { max-width: 22ch; }
.trunca-email { max-width: 22ch; }

/* ---- scroll horizontal com coluna de ações sempre visível ---------- */
.tabela-scroll { overflow-x: auto; }
.tabela-scroll table { margin: 0; }
th.col-acoes, td.col-acoes {
  position: sticky; right: 0; background: var(--cor-cartao);
  box-shadow: var(--sombra-col-acoes);
}
th.col-acoes { background: var(--cor-cartao-alt); }
tr.vigente td.col-acoes { background: var(--linha-vigente-bg); }
tr.destaque td.col-acoes { background: var(--linha-destaque-bg); }
tr.linha-excluida td.col-acoes { background: var(--cor-cartao); }

.card {
  background: var(--cor-cartao); border: 1px solid var(--borda); border-radius: var(--raio-md);
  padding: 1.2rem; max-width: 380px; margin: 4rem auto; box-shadow: var(--sombra-cartao);
}
input {
  width: 100%; padding: .55rem; margin: .3rem 0 .8rem; border: 1px solid var(--borda);
  border-radius: var(--raio-sm); font: inherit; background: var(--cor-input); color: var(--texto-principal);
}
button {
  background: var(--cor-acento); color: var(--cor-acento-texto); border: 0; padding: .6rem 1.2rem;
  border-radius: var(--raio-sm); cursor: pointer; font: inherit;
}
button:hover { background: var(--cor-acento-hover); }
button.secundario { background: var(--texto-terciario); }
.botao-destaque {
  display: inline-block; background: var(--cor-acento); color: var(--cor-acento-texto);
  border: 0; padding: .6rem 1.2rem; border-radius: var(--raio-sm); font-weight: 600;
  text-decoration: none; margin-bottom: .6rem;
}
.botao-destaque:hover { background: var(--cor-acento-hover); }
.linha-dropship td { color: var(--texto-secundario); }
.erro { color: var(--cor-erro); }
.badge { display: inline-block; padding: .15rem .55rem; border-radius: var(--raio-pill); font-size: .78rem; font-weight: 600; }
.badge.ok { background: var(--ok-bg); color: var(--ok-texto); border: 1px solid var(--ok-borda); }
.badge.canc { background: var(--canc-bg); color: var(--canc-texto); border: 1px solid var(--canc-borda); }
.badge.warn { background: var(--warn-bg); color: var(--warn-texto); border: 1px solid var(--warn-borda); }
.badge.futuro { background: var(--futuro-bg); color: var(--futuro-texto); border: 1px solid var(--futuro-borda); }
.badge.role { background: var(--info-bg); color: var(--info-texto); border: 1px solid var(--info-borda); margin: 0 .2rem .2rem 0; display: inline-block; }
.warn { color: var(--cor-erro); font-weight: 600; }
.muted { opacity: .6; }
.filtros { display: flex; gap: 1rem; align-items: flex-end; flex-wrap: wrap; margin-bottom: 1rem; }
.filtros div { display: flex; flex-direction: column; }
.filtros input, .filtros select { width: auto; min-width: 220px; margin: .3rem 0 0; }
.pager { display: flex; gap: 1.2rem; align-items: center; margin: .8rem 0; }
.stats { display: flex; gap: 1rem; flex-wrap: wrap; margin: 1rem 0; }
.stat {
  background: var(--cor-cartao); border: 1px solid var(--borda); border-radius: var(--raio-md);
  padding: .8rem 1.2rem; min-width: 160px; box-shadow: var(--sombra-cartao);
}
.stat strong {
  display: block; font-size: .72rem; text-transform: uppercase; letter-spacing: .03em; color: var(--texto-terciario);
}
.stat div { font-size: 1.3rem; font-weight: var(--peso-destaque); margin-top: .2rem; font-family: var(--fonte-destaque); }
a.stat { text-decoration: none; color: inherit; display: block; }
.acoes-conta { display: flex; gap: .6rem; margin: .8rem 0 1.2rem; }
.acoes-conta a { background: var(--cor-acento); color: var(--cor-acento-texto); text-decoration: none; padding: .5rem 1rem; border-radius: var(--raio-sm); font-weight: 600; font-size: .9rem; }
.abas-nav { display: flex; gap: .4rem; flex-wrap: wrap; margin: .8rem 0 1.2rem; border-bottom: 1px solid var(--borda); }
.abas-nav a { padding: .5rem .9rem; text-decoration: none; color: var(--texto-terciario); font-weight: 600; font-size: .9rem; border-bottom: 2px solid transparent; }
.abas-nav a:hover { color: var(--texto-principal); }
.abas-nav a.active { color: var(--cor-acento); border-bottom-color: var(--cor-acento); }
.tipo-tabs { display: flex; gap: 1rem; flex-wrap: wrap; margin: .6rem 0 1.2rem; }
.tipo-tabs label { display: flex; align-items: center; gap: .35rem; font-weight: 600; }
.campos-tipo { border: 1px solid var(--borda); border-radius: var(--raio-md); padding: 1rem; background: var(--cor-cartao); margin-bottom: 1rem; box-shadow: var(--sombra-cartao); }
.campos-tipo[hidden] { display: none; }
.linha-campos { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: .6rem; align-items: flex-start; }
.linha-campos label { display: flex; flex-direction: column; font-size: .85rem; font-weight: 600; color: var(--texto-secundario); min-width: 180px; }
.linha-campos label.grow { flex: 1 1 260px; }
.linha-campos select, .linha-campos textarea { width: 100%; padding: .55rem; margin: .3rem 0 0; border: 1px solid var(--borda); border-radius: var(--raio-sm); font: inherit; background: var(--cor-input); color: var(--texto-principal); }
.linha-campos textarea { min-height: 5rem; }
.conta-resumo { font-size: .8rem; color: var(--texto-terciario); margin-top: .3rem; min-height: 1.1rem; }
.lucro-estimado { font-weight: var(--peso-destaque); margin-top: .4rem; font-family: var(--fonte-destaque); }
.lucro-estimado.pos { color: var(--cor-positivo); }
.lucro-estimado.neg { color: var(--cor-negativo); }
input.linha-input { width: 6.5rem; padding: .35rem; border: 1px solid var(--borda); border-radius: var(--raio-sm); font: inherit; background: var(--cor-input); color: var(--texto-principal); }
select.linha-select { padding: .35rem; margin-left: .3rem; border: 1px solid var(--borda); border-radius: var(--raio-sm); font: inherit; background: var(--cor-input); color: var(--texto-principal); }
.linha-lucro { font-weight: var(--peso-destaque); font-family: var(--fonte-destaque); }
.linha-lucro.pos { color: var(--cor-positivo); }
.linha-lucro.neg { color: var(--cor-negativo); }
/* /vendas: linha de venda manual (balcão) abaixo da linha do programa —
   mesma cor de texto secundário em todas as 4 máscaras, só para distinguir
   visualmente sem precisar de outra coluna. */
.linha-manual td { color: var(--texto-secundario); font-style: italic; }
.checkbox-linha { display: flex; align-items: center; gap: .4rem; font-weight: 600; }
.checkbox-linha input { width: auto; margin: 0; }
.hint { font-size: .82rem; color: var(--texto-terciario); margin-top: .4rem; }
.dropzone { border: 2px dashed var(--borda); border-radius: var(--raio-md); padding: 1.1rem; text-align: center; cursor: pointer; background: var(--cor-cartao); margin-bottom: .6rem; }
.dropzone p { margin: 0; color: var(--texto-secundario); font-size: .9rem; }
.dropzone.drag { border-color: var(--cor-acento); background: var(--cor-acento-tint); }
.dropzone .file-name { display: block; margin-top: .4rem; font-weight: 600; font-size: .85rem; }
.extract-status { font-size: .88rem; font-weight: 600; margin-bottom: 1rem; min-height: 1.2rem; }
.extract-status.loading { color: var(--texto-terciario); }
.extract-status.ok { color: var(--cor-positivo); }
.extract-status.warn { color: var(--cor-erro); }
.extract-status a { color: inherit; }
.flash { max-width: var(--largura-main); margin: 1rem auto 0; padding: .6rem 1rem; background: var(--ok-bg); color: var(--ok-texto); border-radius: var(--raio-sm); font-weight: 600; }
.aviso { padding: .8rem 1rem; margin-bottom: 1rem; background: var(--warn-bg); color: var(--warn-texto); border-radius: var(--raio-sm); font-weight: 600; }
.aviso p { margin: 0 0 .6rem; }
.aviso form { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; font-weight: 400; }
.aviso form input { width: 8rem; margin: 0; }
.form-lote-custo { display: flex; gap: .4rem; align-items: center; margin: 0; }
.form-lote-custo input { width: 5.5rem; margin: 0; padding: .35rem .45rem; }
.form-lote-custo button { padding: .35rem .7rem; font-size: .85rem; }
.pct { padding: .15rem .55rem; border-radius: 4px; font-weight: 700; }
.pct.ok { background: var(--ok-bg); color: var(--ok-texto); }
.pct.warn { background: var(--warn-bg); color: var(--warn-texto); }
.pct.full { background: var(--canc-bg); color: var(--canc-texto); }
tr.linha-excluida { opacity: .55; }
td.acoes { text-align: center; }
td.acoes form { display: inline; margin: 0; }
button.btn-icone {
  background: transparent; color: var(--texto-terciario); border: 0; padding: .2rem .4rem;
  border-radius: var(--raio-sm); font-size: 1rem; line-height: 1; cursor: pointer;
}
button.btn-icone:hover { background: var(--borda); color: var(--texto-principal); }
.dash-secao { margin-top: var(--gap-secao); }
.dash-secao h2 { display: flex; justify-content: space-between; align-items: baseline; font-size: 1.05rem; }
.ver-mais { font-size: .8rem; font-weight: 600; }

/* ---- Gráficos (seção "Desempenho" do dashboard) ---------------------
   SVG gerado server-side (app/graficos.py + templates/_graficos.html) —
   só consome os tokens abaixo, nunca cor fixa, para funcionar nas 4
   máscaras. Ver docs/propostas-visuais/executiva-clara/DESIGN.md § 5. ---- */
.graficos-grid { display: grid; gap: 1.2rem; grid-template-columns: 1fr 1fr; margin-top: 1rem; }
.grafico-card {
  background: var(--cor-cartao); border: 1px solid var(--borda);
  border-radius: var(--raio-md); box-shadow: var(--sombra-cartao);
  padding: 1.15rem 1.3rem 1rem; min-width: 0;
}
.grafico-card.largo { grid-column: 1 / -1; }
.grafico-titulo {
  font-family: var(--fonte-titulo); font-weight: var(--peso-titulo);
  font-size: 1.02rem; margin: 0 0 .15rem; color: var(--texto-principal);
}
.grafico-sub { font-size: .78rem; color: var(--texto-terciario); margin: 0 0 .9rem; }
.grafico-vazio { font-size: .85rem; color: var(--texto-terciario); padding: 2rem 0; text-align: center; }
.grafico-svg-wrap { overflow-x: auto; }
.grafico-card svg { display: block; width: 100%; height: auto; }
.grafico-card svg text { font-family: var(--fonte-corpo); }

.graf-legenda { display: flex; gap: 1.1rem; flex-wrap: wrap; margin: 0 0 .75rem; font-size: .76rem; color: var(--texto-secundario); }
.graf-legenda .item { display: inline-flex; align-items: center; gap: .4rem; }
.graf-legenda .sw { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }
.graf-legenda .sw.linha { height: 3px; border-radius: 2px; width: 16px; }
.graf-legenda .sw.entradas { background: var(--cor-acento); }
.graf-legenda .sw.saidas { background: var(--texto-secundario); }
.graf-legenda .sw.receita { background: var(--cor-acento); }
.graf-legenda .sw.lucro { background: var(--cor-positivo); }
.graf-legenda .sw.tracejada {
  height: 0; width: 16px; border-radius: 0; background: none;
  border-top: 3px dashed var(--texto-terciario);
}

.gtxt-eixo { font-size: 11px; fill: var(--texto-terciario); }
.gtxt-valor { font-size: 10.5px; fill: var(--texto-secundario); font-variant-numeric: tabular-nums; }
.gtxt-rotulo { font-size: 11.5px; fill: var(--texto-secundario); }
.gtxt-serie { font-size: 11.5px; font-weight: 650; }
.gtxt-ref { font-size: 10.5px; fill: var(--texto-principal); font-weight: 650; }
.gtxt-donut-pct { font-size: 12px; fill: var(--texto-invertido); font-weight: 700; }
.gtxt-donut-total { font-family: var(--fonte-titulo); font-size: 24px; fill: var(--texto-principal); }
.gtxt-donut-sub { font-size: 10px; fill: var(--texto-terciario); letter-spacing: .12em; text-transform: uppercase; }

.graf-grade { stroke: var(--borda); stroke-width: 1; }
.graf-eixo-central { stroke: var(--borda-forte); stroke-width: 1; }

.graf-barra-entradas { fill: var(--cor-acento); }
.graf-barra-saidas { fill: var(--texto-secundario); }

.graf-linha-receita { fill: none; stroke: var(--cor-acento); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
.graf-linha-custo { fill: none; stroke: var(--texto-terciario); stroke-width: 2; stroke-dasharray: 6 5; stroke-linejoin: round; stroke-linecap: round; }
.graf-linha-lucro { fill: none; stroke: var(--cor-positivo); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
.graf-area-lucro { fill: var(--cor-positivo); opacity: .07; }
.graf-ponto-receita { fill: var(--cor-acento); stroke: var(--cor-cartao); stroke-width: 2; }
.graf-ponto-custo { fill: var(--texto-terciario); stroke: var(--cor-cartao); stroke-width: 2; }
.graf-ponto-lucro { fill: var(--cor-positivo); stroke: var(--cor-cartao); stroke-width: 2; }

.graf-barra-cm { fill: var(--cor-acento); }
.graf-linha-ref { stroke: var(--texto-principal); stroke-width: 1.4; stroke-dasharray: 5 4; }
.graf-ref-fundo { fill: var(--cor-cartao); }

/* rampa categórica do donut: 6 tons do próprio acento por opacidade
   decrescente (funciona em qualquer máscara sem hex fixo) + neutro p/ "Outros" */
.graf-cat-0 { stroke: var(--cor-acento); stroke-opacity: 1; }
.graf-cat-1 { stroke: var(--cor-acento); stroke-opacity: .82; }
.graf-cat-2 { stroke: var(--cor-acento); stroke-opacity: .64; }
.graf-cat-3 { stroke: var(--cor-acento); stroke-opacity: .48; }
.graf-cat-4 { stroke: var(--cor-acento); stroke-opacity: .34; }
.graf-cat-5 { stroke: var(--cor-acento); stroke-opacity: .22; }
.graf-cat-outros { stroke: var(--texto-terciario); stroke-opacity: .55; }
/* estas legendas ficam dentro do próprio <svg> (rótulos do donut) — SVG usa
   fill/fill-opacity, não background/opacity (que não têm efeito em <rect>) */
.graf-legenda-sw-0 { fill: var(--cor-acento); fill-opacity: 1; }
.graf-legenda-sw-1 { fill: var(--cor-acento); fill-opacity: .82; }
.graf-legenda-sw-2 { fill: var(--cor-acento); fill-opacity: .64; }
.graf-legenda-sw-3 { fill: var(--cor-acento); fill-opacity: .48; }
.graf-legenda-sw-4 { fill: var(--cor-acento); fill-opacity: .34; }
.graf-legenda-sw-5 { fill: var(--cor-acento); fill-opacity: .22; }
.graf-legenda-sw-outros { fill: var(--texto-terciario); fill-opacity: .55; }

/* Construtores genéricos (app/graficos.py: dados_barras_horizontais/
   dados_barras_mensais) — reusados fora do dashboard (saldos, vendas, voos,
   cartões, recebimentos, movimentações, clubes, emissões), pedido do Bruno
   16/07/2026 "gráficos úteis em todas as abas". */

/* barra horizontal genérica de 1 série: positivo em acento, negativo (ex.:
   programa com prejuízo no período) em --cor-negativo — mesma leitura de
   .linha-lucro.neg das tabelas; "Outros" (excedente agrupado) em neutro. */
.graf-barra-h { fill: var(--cor-acento); }
.graf-barra-h.negativo { fill: var(--cor-negativo); }
.graf-barra-h.outros { fill: var(--texto-terciario); }

/* barras verticais agrupadas por mês, 1 a 6 séries: alterna acento/
   secundário (contraste máx. em pares, como entradas×saídas do gráfico 1 do
   dashboard) com opacidade decrescente além da 2ª série (ex.: clubes por
   programa). Regra separada p/ o <rect> da barra (fill) e p/ o swatch HTML
   da legenda fora do <svg> (background) — mesmo motivo do comentário acima
   sobre .graf-legenda-sw-N: background/opacity não têm efeito em <rect>. */
.graf-serie-0 { fill: var(--cor-acento); fill-opacity: 1; }
.graf-serie-1 { fill: var(--texto-secundario); fill-opacity: 1; }
.graf-serie-2 { fill: var(--cor-acento); fill-opacity: .55; }
.graf-serie-3 { fill: var(--texto-secundario); fill-opacity: .55; }
.graf-serie-4 { fill: var(--cor-acento); fill-opacity: .3; }
.graf-serie-5 { fill: var(--texto-secundario); fill-opacity: .3; }

.graf-legenda .sw.serie-0 { background: var(--cor-acento); }
.graf-legenda .sw.serie-1 { background: var(--texto-secundario); }
.graf-legenda .sw.serie-2 { background: var(--cor-acento); opacity: .55; }
.graf-legenda .sw.serie-3 { background: var(--texto-secundario); opacity: .55; }
.graf-legenda .sw.serie-4 { background: var(--cor-acento); opacity: .3; }
.graf-legenda .sw.serie-5 { background: var(--texto-secundario); opacity: .3; }

@media (max-width: 900px) {
  .graficos-grid { grid-template-columns: 1fr; }
}

/* ---- Marquee de rótulos SVG longos (app/static/marquee_rotulos.js) ----
   O JS só aplica a classe abaixo (+ a var --marquee-dist) quando o rótulo
   não cabe no gutter (data-maxw); ping-pong contínuo: parado no início
   (0-10%), desliza até o fim (10-45%), pausa no fim (45-55%), volta
   (55-90%), pausa no início (90-100%). */
@keyframes marquee-rotulo {
  0%, 10% { transform: translateX(0); }
  45%, 55% { transform: translateX(calc(-1 * var(--marquee-dist))); }
  90%, 100% { transform: translateX(0); }
}
.gtxt-marquee {
  animation-name: marquee-rotulo;
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
}
@media (prefers-reduced-motion: reduce) {
  /* defesa extra: o JS já não aplica a classe quando reduced-motion está
     ativo, mas se o SO mudar a preferência depois do render, a animação
     para aqui também. */
  .gtxt-marquee { animation: none; }
}

/* ---- Combobox (select + digitar para filtrar) — app/static/combobox.js ---
   O <select> original fica escondido (só ele é submetido pelo form); o
   <input> visível e a lista suspensa consomem os mesmos tokens de input/menu
   já usados no resto do app, para funcionar nas 4 máscaras. -------------- */
.combobox { position: relative; }
select.combobox-select-oculto { display: none; }
.combobox-input { cursor: text; }
.combobox-lista {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 20;
  margin-top: .2rem; max-height: 14rem; overflow-y: auto;
  background: var(--cor-cartao); border: 1px solid var(--borda);
  border-radius: var(--raio-sm); box-shadow: var(--sombra-cartao);
}
.combobox-item {
  padding: .45rem .7rem; font-size: .92rem; cursor: pointer; color: var(--texto-principal);
}
.combobox-item.selecionado { background: var(--cor-acento-tint); font-weight: 600; }
.combobox-item.destaque,
.combobox-item:hover { background: var(--cor-cartao-hover); }
.combobox-vazio { padding: .5rem .7rem; font-size: .85rem; color: var(--texto-terciario); }

/* Módulo de vouchers — tela de pré-edição (/vouchers/{pnr}) */
fieldset.voucher-trecho {
  border: 1px solid var(--borda); border-radius: var(--raio-md); padding: .8rem 1rem 0;
  margin-bottom: 1rem; background: var(--cor-cartao);
}
fieldset.voucher-trecho legend { font-weight: 600; padding: 0 .4rem; color: var(--texto-secundario); }
.linha-campos label.check { flex-direction: row; align-items: center; gap: .4rem; min-width: auto; }
.linha-campos label.check input { width: auto; margin: 0; }
