/* ====================================================================== *
 *  CENTRIU ONE — TOKENS
 *
 *  Prefixo obrigatório: --one-*
 *
 *  ## Procedência (DS-4)
 *
 *  A rampa de marca, os neutros, as fontes, a base de espaçamento e as
 *  cores de estado são as MESMAS de `src/design-system/tokens/tokens.css`
 *  (camada `--ct-*`, canônica da Centriu). Os valores estão copiados, não
 *  referenciados: a regra D-4 proíbe a One atravessar a fronteira do
 *  módulo, e o app da One é autônomo.
 *
 *  Cópia sem vigilância vira cópia velha. O verificador
 *  `scripts/safeguards/check-token-parity.mjs` compara as duas e reprova
 *  quando divergem.
 *
 *  ## O que é próprio da One
 *
 *  Seções 11 a 14: origem do dado, evidência, gate e auditoria. São o
 *  vocabulário que nenhum outro módulo da plataforma tem, porque nenhum
 *  outro precisa responder "de onde veio este número?" em toda tela.
 *
 *  ## Regra
 *
 *  Componente NUNCA escreve #hex, px de raio ou ms de transição. Lê token.
 * ====================================================================== */

:root {
  /* ================================================================== *
   *  1. PALETA BRUTA — insumo. Componente NÃO consome daqui.
   *     Procedência: --ct-palette-* (idêntica).
   * ================================================================== */

  --one-palette-brand-50: #eef2ff;
  --one-palette-brand-100: #dbeafe;
  --one-palette-brand-200: #bfdbfe;
  --one-palette-brand-300: #93c5fd;
  --one-palette-brand-400: #60a5fa;
  --one-palette-brand-500: #3b82f6;
  --one-palette-brand-600: #2563eb; /* Bright Blue — identidade */
  --one-palette-brand-700: #1d4ed8;
  --one-palette-brand-800: #1e40af;
  --one-palette-brand-900: #1e3a8a; /* Deep Blue — identidade */
  --one-palette-brand-950: #172554;

  /* Neutros frios (slate). Harmonizam com o azul da marca. */
  --one-palette-ink-0: #ffffff;
  --one-palette-ink-25: #fbfcfe;
  --one-palette-ink-50: #f7f9fc;
  --one-palette-ink-100: #eef2f8;
  --one-palette-ink-200: #e2e8f0;
  --one-palette-ink-300: #cbd5e1;
  --one-palette-ink-400: #94a3b8;
  --one-palette-ink-500: #64748b;
  --one-palette-ink-600: #475569;
  --one-palette-ink-700: #334155;
  --one-palette-ink-800: #1e293b;
  --one-palette-ink-900: #0f172a;
  --one-palette-ink-950: #0b1220;

  /* ================================================================== *
   *  2. MARCA
   * ================================================================== */

  --one-brand: var(--one-palette-brand-900);
  --one-brand-interactive: var(--one-palette-brand-600);
  --one-brand-interactive-hover: var(--one-palette-brand-700);
  --one-brand-interactive-active: var(--one-palette-brand-800);
  --one-brand-soft: var(--one-palette-brand-50);
  --one-brand-soft-border: var(--one-palette-brand-100);
  --one-brand-on-soft: var(--one-palette-brand-800);
  --one-brand-on: #ffffff;

  /* ================================================================== *
   *  3. SUPERFÍCIES
   *
   *  Quatro planos. O workspace do método usa três ao mesmo tempo
   *  (régua, painel, trilho de evidências) — por isso o plano recuado
   *  existe de verdade aqui, e não só no papel.
   * ================================================================== */

  --one-surface-page: var(--one-palette-ink-50);
  --one-surface: var(--one-palette-ink-0);
  --one-surface-raised: var(--one-palette-ink-0);
  --one-surface-sunken: var(--one-palette-ink-100);
  --one-surface-inverse: var(--one-palette-ink-950);

  /* ================================================================== *
   *  4. TEXTO
   * ================================================================== */

  --one-text: var(--one-palette-ink-900);
  --one-text-secondary: var(--one-palette-ink-600);
  --one-text-muted: var(--one-palette-ink-500);
  --one-text-on-inverse: var(--one-palette-ink-50);
  --one-text-link: var(--one-palette-brand-700);
  --one-text-link-hover: var(--one-palette-brand-800);

  /* ================================================================== *
   *  5. BORDAS
   * ================================================================== */

  --one-border: var(--one-palette-ink-200);
  --one-border-subtle: var(--one-palette-ink-100);
  --one-border-strong: var(--one-palette-ink-300);
  --one-border-active: var(--one-brand-interactive);

  /* ================================================================== *
   *  6. ESTADOS
   *
   *  Versões 700 das rampas: passam AA (4.5:1) como TEXTO sobre branco.
   *  As 500 (#10B981, #F59E0B, #EF4444) continuam válidas como
   *  preenchimento, nunca como texto.
   * ================================================================== */

  --one-success: #047857;
  --one-success-soft: #ecfdf5;
  --one-success-border: #a7f3d0;

  --one-warning: #b45309;
  --one-warning-soft: #fffbeb;
  --one-warning-border: #fde68a;

  --one-danger: #b91c1c;
  --one-danger-soft: #fef2f2;
  --one-danger-border: #fecaca;

  --one-info: var(--one-palette-brand-700);
  --one-info-soft: #eff6ff;
  --one-info-border: var(--one-palette-brand-200);

  --one-on-soft: var(--one-palette-ink-900);

  /* ================================================================== *
   *  7. FOCO E SOBREPOSIÇÃO
   * ================================================================== */

  --one-focus-ring-color: var(--one-brand-interactive);
  --one-focus-ring-width: 2px;
  --one-focus-ring-offset: 2px;
  --one-focus-halo: 0 0 0 4px rgba(37, 99, 235, 0.28);

  --one-overlay: rgba(11, 18, 32, 0.58);

  /* ================================================================== *
   *  8. TIPOGRAFIA
   *
   *  Divergência D-a: a escala da One é UM PASSO MENOR que a do site.
   *  O Advisor OS mostra carteira, método e dinheiro na mesma tela; a
   *  escala generosa do site público não cabe sem rolagem constante.
   * ================================================================== */

  --one-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --one-font-display: "Space Grotesk", "Inter", system-ui, sans-serif;
  --one-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;

  --one-text-display-lg: clamp(1.625rem, 1.28rem + 1.53vw, 2.375rem);
  --one-text-heading-lg: clamp(1.375rem, 1.19rem + 0.82vw, 1.75rem);
  --one-text-heading-md: clamp(1.125rem, 1.04rem + 0.39vw, 1.3125rem);
  --one-text-heading-sm: 1.0625rem;
  --one-text-body: 0.9375rem;
  --one-text-body-sm: 0.875rem;
  --one-text-label: 0.8125rem;
  --one-text-micro: 0.75rem;

  /**
   * Número de métrica. `font-variant-numeric: tabular-nums` é obrigatório
   * em todo lugar que exibe valor: sem ele, a largura muda conforme o
   * dígito, e uma coluna de dinheiro fica dançando.
   */
  --one-text-metric: clamp(1.5rem, 1.22rem + 1.25vw, 2.125rem);
  --one-text-metric-sm: 1.25rem;

  --one-leading-tight: 1.15;
  --one-leading-snug: 1.3;
  --one-leading-normal: 1.5;

  --one-tracking-tight: -0.02em;
  --one-tracking-caps: 0.08em;

  --one-weight-regular: 400;
  --one-weight-medium: 500;
  --one-weight-semibold: 600;
  --one-weight-bold: 700;

  --one-measure: 68ch;

  /* ================================================================== *
   *  9. ESPAÇAMENTO — base 4px
   * ================================================================== */

  --one-space-0: 0;
  --one-space-1: 0.25rem;
  --one-space-2: 0.5rem;
  --one-space-3: 0.75rem;
  --one-space-4: 1rem;
  --one-space-5: 1.25rem;
  --one-space-6: 1.5rem;
  --one-space-8: 2rem;
  --one-space-10: 2.5rem;
  --one-space-12: 3rem;
  --one-space-16: 4rem;

  /* ================================================================== *
   *  10. RAIO, ELEVAÇÃO, MOVIMENTO E CAMADA
   * ================================================================== */

  --one-radius-sm: 6px;
  --one-radius: 10px;
  --one-radius-lg: 14px;
  --one-radius-full: 999px;

  /* Sombras discretas: "premium e limpo" é pouca sombra bem colocada,
     não muita sombra. */
  --one-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.06);
  --one-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
  --one-shadow-raised: 0 8px 24px rgba(15, 23, 42, 0.12);

  --one-motion-fast: 120ms;
  --one-motion: 180ms;
  --one-motion-slow: 260ms;
  --one-easing: cubic-bezier(0.2, 0, 0, 1);

  --one-z-base: 0;
  --one-z-sticky: 100;
  --one-z-drawer: 300;
  --one-z-dialog: 400;
  --one-z-toast: 500;
  --one-z-tooltip: 600;

  /* ================================================================== *
   *  11. ORIGEM DO DADO — próprio da One
   *
   *  Todo número de negócio precisa dizer de onde veio. As quatro
   *  origens têm cores DELIBERADAMENTE fora da paleta de estado:
   *  origem não é estado, e usar verde/amarelo aqui faria "verificado"
   *  parecer "sucesso" e "manual" parecer "aviso".
   * ================================================================== */

  /** Calculado pelo sistema a partir de regra versionada. */
  --one-source-calculated: var(--one-palette-brand-700);
  --one-source-calculated-soft: var(--one-palette-brand-50);

  /** Verificado por pessoa contra fonte oficial (a ponte do U-19). */
  --one-source-verified: #0f766e;
  --one-source-verified-soft: #f0fdfa;

  /** Informado manualmente, sem verificação independente. */
  --one-source-declared: #6d28d9;
  --one-source-declared-soft: #f5f3ff;

  /** Vindo de sistema externo, por adaptador. */
  --one-source-external: var(--one-palette-ink-600);
  --one-source-external-soft: var(--one-palette-ink-100);

  /* ================================================================== *
   *  12. EVIDÊNCIA — próprio da One
   *
   *  Um achado COM evidência e um SEM evidência não podem parecer
   *  iguais. E "evidência de alinhamento do cliente" (U-28) tem
   *  tratamento próprio, porque nunca pode ser lida como aceite.
   * ================================================================== */

  --one-evidence-present: #0f766e;
  --one-evidence-present-soft: #f0fdfa;
  --one-evidence-absent: var(--one-palette-ink-400);
  --one-evidence-absent-soft: var(--one-palette-ink-50);
  --one-evidence-alignment: #7c3aed;
  --one-evidence-alignment-soft: #f5f3ff;

  /* Cobertura de instrumento (ADR-014). Nunca é "nota"; é fração. */
  --one-coverage-track: var(--one-palette-ink-200);
  --one-coverage-fill: var(--one-palette-brand-600);
  --one-coverage-partial: #b45309;

  /* ================================================================== *
   *  13. GATE — próprio da One
   * ================================================================== */

  --one-gate-open: var(--one-palette-ink-400);
  --one-gate-ready: var(--one-palette-brand-600);
  --one-gate-approved: #047857;
  --one-gate-blocked: #b45309;

  /* ================================================================== *
   *  14. AUDITORIA E IMUTABILIDADE — próprio da One
   *
   *  Cinza-azulado sóbrio de propósito: auditoria não é alerta. Marcar
   *  em vermelho o que é imutável ensinaria a ler imutabilidade como
   *  problema.
   * ================================================================== */

  --one-audit: var(--one-palette-ink-600);
  --one-audit-soft: var(--one-palette-ink-100);
  --one-audit-border: var(--one-palette-ink-300);

  /* ================================================================== *
   *  15. INDISPONIBILIDADE — próprio da One
   *
   *  EMPTY ≠ ERROR ≠ UNAVAILABLE. Três tokens porque são três coisas.
   * ================================================================== */

  --one-empty: var(--one-palette-ink-500);
  --one-empty-soft: var(--one-palette-ink-50);
  --one-unavailable: #b45309;
  --one-unavailable-soft: #fffbeb;
  --one-unavailable-border: #fde68a;
}

/* ====================================================================== *
 *  Tema escuro do app autenticado.
 *
 *  O Advisor OS é app, e o ecossistema já liga `darkMode: 'class'`. Sem
 *  este bloco, um componente da One dentro do app ficaria ilegível.
 * ====================================================================== */

.dark {
  --one-brand: var(--one-palette-brand-400);
  --one-brand-interactive: var(--one-palette-brand-500);
  --one-brand-interactive-hover: var(--one-palette-brand-400);
  --one-brand-soft: rgba(37, 99, 235, 0.14);
  --one-brand-soft-border: rgba(37, 99, 235, 0.28);
  --one-brand-on-soft: var(--one-palette-brand-200);

  --one-surface-page: var(--one-palette-ink-950);
  --one-surface: #111a2b;
  --one-surface-raised: #162135;
  --one-surface-sunken: #0d1524;
  --one-surface-inverse: var(--one-palette-ink-0);

  --one-text: var(--one-palette-ink-50);
  --one-text-secondary: var(--one-palette-ink-300);
  --one-text-muted: var(--one-palette-ink-400);
  --one-text-on-inverse: var(--one-palette-ink-900);
  --one-text-link: var(--one-palette-brand-300);

  --one-border: rgba(255, 255, 255, 0.12);
  --one-border-subtle: rgba(255, 255, 255, 0.07);
  --one-border-strong: rgba(255, 255, 255, 0.2);

  --one-success: #34d399;
  --one-success-soft: rgba(16, 185, 129, 0.12);
  --one-warning: #fbbf24;
  --one-warning-soft: rgba(245, 158, 11, 0.12);
  --one-danger: #f87171;
  --one-danger-soft: rgba(239, 68, 68, 0.12);
  --one-info: var(--one-palette-brand-300);
  --one-info-soft: rgba(37, 99, 235, 0.14);
  --one-on-soft: var(--one-palette-ink-50);

  --one-source-calculated: var(--one-palette-brand-300);
  --one-source-calculated-soft: rgba(37, 99, 235, 0.14);
  --one-source-verified: #5eead4;
  --one-source-verified-soft: rgba(13, 148, 136, 0.14);
  --one-source-declared: #c4b5fd;
  --one-source-declared-soft: rgba(109, 40, 217, 0.16);
  --one-source-external: var(--one-palette-ink-300);
  --one-source-external-soft: rgba(255, 255, 255, 0.06);

  --one-evidence-present: #5eead4;
  --one-evidence-present-soft: rgba(13, 148, 136, 0.14);
  --one-evidence-absent: var(--one-palette-ink-500);
  --one-evidence-absent-soft: rgba(255, 255, 255, 0.04);
  --one-evidence-alignment: #c4b5fd;
  --one-evidence-alignment-soft: rgba(124, 58, 237, 0.16);

  --one-coverage-track: rgba(255, 255, 255, 0.12);
  --one-coverage-fill: var(--one-palette-brand-400);
  --one-coverage-partial: #fbbf24;

  --one-gate-open: var(--one-palette-ink-500);
  --one-gate-ready: var(--one-palette-brand-400);
  --one-gate-approved: #34d399;
  --one-gate-blocked: #fbbf24;

  --one-audit: var(--one-palette-ink-300);
  --one-audit-soft: rgba(255, 255, 255, 0.06);
  --one-audit-border: rgba(255, 255, 255, 0.16);

  --one-empty: var(--one-palette-ink-400);
  --one-empty-soft: rgba(255, 255, 255, 0.04);
  --one-unavailable: #fbbf24;
  --one-unavailable-soft: rgba(245, 158, 11, 0.12);
  --one-unavailable-border: rgba(245, 158, 11, 0.32);

  --one-overlay: rgba(0, 0, 0, 0.68);
}

/* ====================================================================== *
 *  Movimento reduzido. Não é enfeite de acessibilidade: pessoa com
 *  sensibilidade vestibular passa mal com transição, e o Advisor OS é
 *  ferramenta de trabalho diário.
 * ====================================================================== */

@media (prefers-reduced-motion: reduce) {
  :root {
    --one-motion-fast: 0ms;
    --one-motion: 0ms;
    --one-motion-slow: 0ms;
  }
}
