/* ==========================================================================
   Aceite — aceite.app.br
   tokens.css — design tokens (cores, escala, tipografia)
   --------------------------------------------------------------------------
   Tema: `:root` = ESCURO (padrao).
         `html[data-theme="light"]` = CLARO (sobrescreve os mesmos tokens).
         Sem atributo no <html>, o ESCURO vale quando o sistema pede
         `@media (prefers-color-scheme: dark)`.
   Cor em OKLCH. Nenhuma cor hard-coded deve existir fora deste arquivo.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. TEMA ESCURO (padrao) - Cyber Premium Dark
   -------------------------------------------------------------------------- */
:root {
  color-scheme: dark;

  /* --- superficies e texto --- */
  --bg: oklch(8% 0.002 260);
  --surface: oklch(12% 0.008 260);
  --surface-2: oklch(15% 0.01 260);
  --text: oklch(95% 0.004 260);
  --text-muted: oklch(70% 0.008 260);
  --border: oklch(25% 0.01 260);
  /* Borda dos CONTROLES DE FORMULARIO (.input/.select/.textarea do app.css —
     os 31 campos das 6 telas). E' um token PROPRIO, e nao `--border`, por um
     motivo medido: `--border` tem 84 consumidores (separador de tabela, borda
     de cartao, divisor) e o valor dele e' quase o fundo do campo
     (rgb(31,34,39) contra o campo rgb(10,12,15) e o cartao rgb(15,15,15) =
     1.19:1 e 1.12:1, medido com pixel composto em tools/qa-campo-borda-cdp.mjs).
     A WCAG 1.4.11 pede 3:1 no limite do controle, e 3:1 a partir de um fundo
     escuro exige uma borda CLARA — mexer em `--border` vazaria essa borda clara
     para os 84 lugares que so' querem um divisor. Ver o bloco claro (56%) e o
     do `prefers-color-scheme`: a FORCA muda por tema porque a luminancia do
     fundo muda; o matiz e o croma sao os do `--border`. */
  --border-control: oklch(52% 0.01 260);

  /* --- marca --- */
  --brand: oklch(85% 0.12 180); /* Neon cyan */
  /* Segundo ponto do gradiente da marca. As paginas usam
     `from-[var(--brand)] to-[var(--accent)]` nos titulos; sem este
     token o gradiente nao pinta nada e o texto, que e `text-transparent`,
     fica INVISIVEL. Definido aqui, vale para todas as paginas. */
  --accent: oklch(78% 0.16 305); /* Neon violeta */
  --brand-ink: oklch(20% 0.02 260);

  /* --- semantico --- */
  --danger: oklch(75% 0.18 25);
  --warn: oklch(80% 0.16 75);
  --ok: oklch(85% 0.14 155);

  /* --- status (um por status; use nos badges) --- */
  --st-rascunho: oklch(65% 0.02 260);
  --st-enviada: oklch(80% 0.14 200); /* Neon blue */
  --st-vista: oklch(75% 0.12 220);
  --st-aceita: oklch(85% 0.14 155); /* Neon green */
  --st-recusada: oklch(75% 0.18 25); /* Neon red */
  --st-expirada: oklch(80% 0.16 75); /* Neon amber */
  --st-cancelada: oklch(62% 0.008 260);
  /* "Realizado" e' o unico status que ja' ACONTECEU. Era o mesmo verde de
     "Presenca confirmada" (--st-aceita) e as duas etiquetas ficavam iguais.
     Violeta da marca, para nao inventar cor nova. */
  --st-realizado: var(--accent);

  /* --- foco visivel --- */
  --focus-ring: oklch(85% 0.12 180); /* Neon cyan */
  --focus-ring-offset: oklch(10% 0 0);

  /* Chevron do <select>. Data URI nao aceita currentColor, entao a cor precisa
     ser um token por tema — senao no tema claro o chevron branco some. */
  --chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");

  /* --- escala de espaco (4px base) --- */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;

  /* --- raio e sombra --- */
  --radius: 0.75rem;
  --radius-sm: 0.375rem;
  --radius-lg: 1.25rem; /* canto do painel do menu do fone */
  --shadow: 0 1px 2px oklch(0% 0 0 / 0.3),
            0 8px 24px oklch(0% 0 0 / 0.4),
            0 0 1px oklch(85% 0.12 180 / 0.1); /* Neon cyan glow */
  /* Sombra do painel deslizante: pesa para a ESQUERDA (o painel esta' colado
     na borda direita), entao a profundidade aparece do lado de dentro. */
  --shadow-drawer: -1px 0 0 var(--border),
                   -24px 0 56px oklch(0% 0 0 / 0.5);

  /* --- overlay do menu do fone ---
     O scrim e' o veu que fica entre a pagina e o painel. Sem ele o painel
     parece um recorte colado na tela; com ele a pagina vira fundo. */
  --scrim: oklch(0% 0 0 / 0.55);

  /* --- movimento --- */
  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);

  /* --- tipografia --- */
  --font-sans: "Satoshi", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
               "Helvetica Neue", Arial, sans-serif;

  /* tipografia fluida: min no fone, max no PC */
  --fs-sm: clamp(0.8125rem, 0.79rem + 0.11vw, 0.875rem);
  --fs-md: clamp(0.9375rem, 0.9rem + 0.19vw, 1rem);
  --fs-lg: clamp(1.0625rem, 1rem + 0.31vw, 1.25rem);
  --fs-xl: clamp(1.25rem, 1.11rem + 0.7vw, 1.625rem);
  --fs-2xl: clamp(1.5rem, 1.24rem + 1.3vw, 2.25rem);
  --fs-3xl: clamp(2rem, 1.6rem + 2vw, 3.25rem);
}

/* --------------------------------------------------------------------------
   2. TEMA CLARO — explicito (`<html data-theme="light">`)
   -------------------------------------------------------------------------- */
html[data-theme="light"] {
  color-scheme: light;

  /* --- superficies e texto --- */
  --bg: oklch(98% 0.003 255);
  --surface: oklch(100% 0 0);
  --surface-2: oklch(97% 0.003 255);
  --text: oklch(25% 0.02 260);
  /* 50% e nao 55%: medido com pixel composto (tools/qa-contraste-muted-cdp.mjs),
     o par antigo dava 4.45:1 sobre `--surface-2`, 4.49:1 sobre o fundo do
     <caption> e 3.84:1 sobre o fundo do campo do form (o pior do tema). Em 50%
     o pior caso medido vira 4.72:1 e o resto sobe para 5.4-6.0:1. So' a
     LUMINOSIDADE mudou — matiz e croma do cinza ficam iguais, e 50% ja' existe
     na paleta clara (`--st-rascunho`), entao nao e' cor nova. O tema ESCURO nao
     entra: la' `--text-muted` e' outro valor (70%) e mede 6.2:1 no pior caso. */
  --text-muted: oklch(50% 0.018 260);
  --border: oklch(85% 0.008 260);
  /* Bordas do controle no tema CLARO. 56% e nao os 52% do escuro: no claro o
     fundo e' que decide, e a luminosidade dele (0.91 nos cartoes mais claros,
     medido) exige uma borda ESCURA para os 3:1 — o mesmo valor do escuro
     passaria de 8:1 aqui e viraria um contorno preto. Ver o comentario do
     bloco escuro. */
  --border-control: oklch(56% 0.008 260);

  /* --- marca --- */
  --brand: oklch(48% 0.16 180); /* Neon cyan */
  /* Segundo ponto do gradiente da marca. As paginas usam
     `from-[var(--brand)] to-[var(--accent)]` nos titulos; sem este
     token o gradiente nao pinta nada e o texto, que e `text-transparent`,
     fica INVISIVEL. Definido aqui, vale para todas as paginas. */
  --accent: oklch(50% 0.20 305); /* Neon violeta */
  --brand-ink: oklch(99% 0.005 180);

  /* --- semantico --- */
  --danger: oklch(55% 0.2 25);
  --warn: oklch(53% 0.16 75);
  --ok: oklch(52% 0.14 155);

  /* --- status --- */
  --st-rascunho: oklch(50% 0.02 260);
  --st-enviada: oklch(55% 0.18 200); /* Neon blue */
  --st-vista: oklch(58% 0.12 220);
  --st-aceita: oklch(55% 0.14 155); /* Neon green */
  --st-recusada: oklch(60% 0.18 25); /* Neon red */
  --st-expirada: oklch(70% 0.16 75); /* Neon amber */
  --st-cancelada: oklch(45% 0.008 260);
  --st-realizado: var(--accent);

  /* --- foco visivel --- */
  --focus-ring: oklch(55% 0.18 180); /* Neon cyan */
  --focus-ring-offset: oklch(100% 0 0);

  --chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");

  /* --- sombra (mais opaca no claro, senao some) --- */
  --shadow: 0 1px 2px oklch(25% 0.02 260 / 0.08),
            0 8px 24px oklch(25% 0.01 260 / 0.15),
            0 0 1px oklch(55% 0.18 180 / 0.1); /* Neon cyan glow */
  --shadow-drawer: -1px 0 0 var(--border),
                   -24px 0 56px oklch(25% 0.01 260 / 0.22);
  /* No claro o veu e' mais leve: escurecer demais uma tela clara cansa a vista. */
  --scrim: oklch(25% 0.02 260 / 0.42);
}

/* --------------------------------------------------------------------------
   3. TEMA CLARO pelo sistema — so quando o <html> NAO traz data-theme.
      Assim um `data-theme="dark"` explicito continua ganhando no escuro.
   -------------------------------------------------------------------------- */
@media (prefers-color-scheme: light) {
  :root:not([data-theme]) {
    color-scheme: light;

    --bg: oklch(98% 0.003 255);
    --surface: oklch(100% 0 0);
    --surface-2: oklch(97% 0.003 255);
    --text: oklch(25% 0.02 260);
    /* Mesmo valor do bloco `html[data-theme="light"]` acima (50%). Os dois
       blocos sao o mesmo tema por portas diferentes: se um mudar sozinho, a
       tela clara do sistema e a tela clara escolhida no botao divergem. */
    --text-muted: oklch(50% 0.018 260);
    --border: oklch(85% 0.008 260);
    /* Mesmo valor do bloco `html[data-theme="light"]`: os dois blocos sao o
       MESMO tema por portas diferentes (o botao e o sistema). */
    --border-control: oklch(56% 0.008 260);

    --brand: oklch(48% 0.16 180); /* Neon cyan */
    /* Segundo ponto do gradiente da marca. As paginas usam
       `from-[var(--brand)] to-[var(--accent)]` nos titulos; sem este
       token o gradiente nao pinta nada e o texto, que e `text-transparent`,
       fica INVISIVEL. Definido aqui, vale para todas as paginas. */
    --accent: oklch(50% 0.20 305); /* Neon violeta */
    --brand-ink: oklch(99% 0.005 180);

    --danger: oklch(55% 0.2 25);
    --warn: oklch(53% 0.16 75);
    --ok: oklch(52% 0.14 155);

    --st-rascunho: oklch(50% 0.02 260);
    --st-enviada: oklch(55% 0.18 200); /* Neon blue */
    --st-vista: oklch(58% 0.12 220);
    --st-aceita: oklch(55% 0.14 155); /* Neon green */
    --st-recusada: oklch(60% 0.18 25); /* Neon red */
    --st-expirada: oklch(70% 0.16 75); /* Neon amber */
    --st-cancelada: oklch(45% 0.008 260);
    --st-realizado: var(--accent);

    --focus-ring: oklch(55% 0.18 180); /* Neon cyan */
    --focus-ring-offset: oklch(100% 0 0);

    --chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");

    --shadow: 0 1px 2px oklch(25% 0.02 260 / 0.08),
              0 8px 24px oklch(25% 0.01 260 / 0.15),
              0 0 1px oklch(55% 0.18 180 / 0.1); /* Neon cyan glow */
    --shadow-drawer: -1px 0 0 var(--border),
                     -24px 0 56px oklch(25% 0.01 260 / 0.22);
    --scrim: oklch(25% 0.02 260 / 0.42);
  }
}

/* --------------------------------------------------------------------------
   4. FOCO VISIVEL — acessivel nos dois temas
   -------------------------------------------------------------------------- */
:focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

/* --------------------------------------------------------------------------
   5. MOVIMENTO REDUZIDO
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}