/* ═══════════════════════════════════════════════════════════════════════════
   sirius-themes.css — camada canônica de cores da aplicação
   ═══════════════════════════════════════════════════════════════════════════
   Fonte única de verdade das cores. Todas as telas (site.css, QuerySystem.css,
   DatabaseSchema.css, DatabaseHealth.css, Profile.css, …) derivam as próprias
   variáveis destes tokens --sr-*, então trocar o tema aqui repinta a aplicação
   inteira — inclusive as telas embutidas em iframe pelo Query Studio.

   Como funciona
   ─────────────
   1. SEEDS  (~22 cores): o que um tema realmente define e o que a tela Temas
      edita. Ficam em [data-sirius-theme="<id>"].
   2. DERIVADOS: tudo o mais (ramps do acento, bordas, sombras, gradientes,
      linhas de grid). Declarados a partir dos seeds, nunca por tema.
   3. POLARIDADE: [data-sirius-polarity="dark"|"light"] escolhe a DIREÇÃO dos
      derivados (clarear vs. escurecer). É o que faz um mesmo acento funcionar
      como texto legível nos dois tipos de fundo.

   Os seletores são de ATRIBUTO (e não html[…]) de propósito: além do <html>,
   qualquer elemento pode carregar um par tema+polaridade e repintar só a sua
   subárvore. É assim que a galeria da tela Temas mostra cada card já na cara do
   próprio tema, sem JS pintando nada. Por isso os derivados também são
   declarados em [data-sirius-theme]: substituição de custom property acontece
   no elemento em que a declaração vale, então sem redeclarar ali o card
   herdaria as bordas/sombras do tema do <html>, não as do tema dele.

   Este arquivo é carregado ANTES do CSS da tela (ver _Layout.cshtml) e o
   theme-engine.js, também no <head>, define os atributos data-sirius-* antes
   da primeira pintura — sem flash de tema errado.

   Temas customizados do usuário entram como [data-sirius-theme="user:<id>"]
   via <style> injetado pelo theme-engine.js, sobrescrevendo os mesmos seeds.

   ⚠ Usa color-mix() e a sintaxe de cor relativa rgb(from … r g b / α) — as duas
   dependem de navegador atual (Chrome/Edge 119+, Safari 16.4+, Firefox 128+).
   ═══════════════════════════════════════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════════
   1. SEEDS — Nebulosa (tema padrão; também o fallback de tudo)
   ══════════════════════════════════════════════════════════════════ */
:root,
[data-sirius-theme="nebula"] {
    /* superfícies, do mais fundo ao mais alto */
    --sr-bg: #02010a;
    --sr-surface: #0d0a1e;
    --sr-surface-2: #141029;
    --sr-elevated: #1a1530;
    /* texto, do mais forte ao mais apagado */
    --sr-text: #ece9ff;
    --sr-text-dim: #9c94c2;
    --sr-text-faint: #5d5680;
    /* acentos */
    --sr-accent: #7c3aed;
    --sr-accent-2: #2dd4bf;
    /* estados / semântica de dados */
    --sr-info: #38bdf8;
    --sr-success: #34d399;
    --sr-warning: #fbbf24;
    --sr-danger: #f87171;
    --sr-magenta: #f472b6;
    /* tokens SQL do editor do Query Studio */
    --sr-tk-read: #38bdf8;
    --sr-tk-create: #34d399;
    --sr-tk-modify: #fbbf24;
    --sr-tk-destroy: #f87171;
    --sr-tk-kw: #c4b5fd;
    --sr-tk-str: #fdba74;
    --sr-tk-num: #f0abfc;
    --sr-tk-func: #5eead4;
    /* cor do texto sobre preenchimentos de acento (botões primários) */
    --sr-on-accent: #ffffff;
}

/* ── Aurora Clara ── claro violeta/teal (era o "light" do Query Studio) ── */
[data-sirius-theme="aurora"] {
    --sr-bg: #f4f2fb;
    --sr-surface: #ffffff;
    --sr-surface-2: #f1edfa;
    --sr-elevated: #ffffff;
    --sr-text: #211a3a;
    --sr-text-dim: #5c5478;
    --sr-text-faint: #948cb3;
    --sr-accent: #7c3aed;
    --sr-accent-2: #0d9488;
    --sr-info: #0284c7;
    --sr-success: #059669;
    --sr-warning: #b45309;
    --sr-danger: #dc2626;
    --sr-magenta: #a21caf;
    --sr-tk-read: #0284c7;
    --sr-tk-create: #059669;
    --sr-tk-modify: #b45309;
    --sr-tk-destroy: #dc2626;
    --sr-tk-kw: #7c3aed;
    --sr-tk-str: #c2410c;
    --sr-tk-num: #a21caf;
    --sr-tk-func: #0d9488;
    --sr-on-accent: #ffffff;
}

/* ── Oceano Profundo ── escuro azul-marinho + azure/ciano ── */
[data-sirius-theme="ocean"] {
    --sr-bg: #030b1a;
    --sr-surface: #0a1730;
    --sr-surface-2: #102340;
    --sr-elevated: #16294a;
    --sr-text: #e2f1ff;
    --sr-text-dim: #93aacb;
    --sr-text-faint: #566d8f;
    --sr-accent: #2f7fe8;
    --sr-accent-2: #22d3ee;
    --sr-info: #38bdf8;
    --sr-success: #2dd4a4;
    --sr-warning: #f2b03c;
    --sr-danger: #fb6f7c;
    --sr-magenta: #e879f9;
    --sr-tk-read: #7dd3fc;
    --sr-tk-create: #34d399;
    --sr-tk-modify: #fcd34d;
    --sr-tk-destroy: #fb7185;
    --sr-tk-kw: #93c5fd;
    --sr-tk-str: #a5f3fc;
    --sr-tk-num: #c4b5fd;
    --sr-tk-func: #5eead4;
    --sr-on-accent: #ffffff;
}

/* ── Chama Solar ── escuro quente: âmbar/laranja com um ciano de contraste ── */
[data-sirius-theme="solar"] {
    --sr-bg: #140a04;
    --sr-surface: #21130a;
    --sr-surface-2: #2c1b0e;
    --sr-elevated: #372211;
    --sr-text: #ffeede;
    --sr-text-dim: #c9a98a;
    --sr-text-faint: #8a6b4f;
    --sr-accent: #f97316;
    --sr-accent-2: #facc15;
    --sr-info: #5ed4cd;
    --sr-success: #a3e635;
    --sr-warning: #fcd34d;
    --sr-danger: #ef4444;
    --sr-magenta: #f472b6;
    --sr-tk-read: #5ed4cd;
    --sr-tk-create: #a3e635;
    --sr-tk-modify: #fbbf24;
    --sr-tk-destroy: #ef4444;
    --sr-tk-kw: #fdba74;
    --sr-tk-str: #fde68a;
    --sr-tk-num: #f0abfc;
    --sr-tk-func: #7dd3fc;
    --sr-on-accent: #1a0d03;
}

/* ── Terminal Esmeralda ── escuro verde, ar de console ── */
[data-sirius-theme="matrix"] {
    --sr-bg: #030b08;
    --sr-surface: #08170f;
    --sr-surface-2: #0d2115;
    --sr-elevated: #112a1b;
    --sr-text: #dbffe9;
    --sr-text-dim: #7fbf9b;
    --sr-text-faint: #4a7a60;
    --sr-accent: #10b981;
    --sr-accent-2: #a3e635;
    --sr-info: #22d3ee;
    --sr-success: #4ade80;
    --sr-warning: #fbbf24;
    --sr-danger: #f87171;
    --sr-magenta: #f472b6;
    --sr-tk-read: #22d3ee;
    --sr-tk-create: #4ade80;
    --sr-tk-modify: #fbbf24;
    --sr-tk-destroy: #fb7185;
    --sr-tk-kw: #86efac;
    --sr-tk-str: #d9f99d;
    --sr-tk-num: #a3e635;
    --sr-tk-func: #5eead4;
    --sr-on-accent: #04180f;
}

/* ── Vazio Carmesim ── escuro vinho + carmim/rosa ── */
[data-sirius-theme="crimson"] {
    --sr-bg: #0f0409;
    --sr-surface: #1c0812;
    --sr-surface-2: #260c19;
    --sr-elevated: #310f21;
    --sr-text: #ffe4ee;
    --sr-text-dim: #c99bab;
    --sr-text-faint: #8a5f73;
    --sr-accent: #e11d63;
    --sr-accent-2: #fb7185;
    --sr-info: #60a5fa;
    --sr-success: #34d399;
    --sr-warning: #fbbf24;
    --sr-danger: #ff4d6d;
    --sr-magenta: #e879f9;
    --sr-tk-read: #f9a8d4;
    --sr-tk-create: #34d399;
    --sr-tk-modify: #fbbf24;
    --sr-tk-destroy: #ff6b81;
    --sr-tk-kw: #fda4af;
    --sr-tk-str: #fecdd3;
    --sr-tk-num: #e879f9;
    --sr-tk-func: #67e8f9;
    --sr-on-accent: #ffffff;
}

/* ── Quartzo Rosa ── claro quente: creme/rosé + plum ── */
[data-sirius-theme="quartz"] {
    --sr-bg: #fdf5f7;
    --sr-surface: #ffffff;
    --sr-surface-2: #fbeef2;
    --sr-elevated: #ffffff;
    --sr-text: #3a1f2b;
    --sr-text-dim: #7c5566;
    --sr-text-faint: #b08c9c;
    --sr-accent: #be185d;
    --sr-accent-2: #0f766e;
    --sr-info: #0369a1;
    --sr-success: #15803d;
    --sr-warning: #b45309;
    --sr-danger: #be123c;
    --sr-magenta: #a21caf;
    --sr-tk-read: #0369a1;
    --sr-tk-create: #15803d;
    --sr-tk-modify: #b45309;
    --sr-tk-destroy: #be123c;
    --sr-tk-kw: #be185d;
    --sr-tk-str: #a16207;
    --sr-tk-num: #a21caf;
    --sr-tk-func: #0f766e;
    --sr-on-accent: #ffffff;
}

/* ── Grafite ── claro neutro (slate) + índigo ── */
[data-sirius-theme="graphite"] {
    --sr-bg: #eef1f6;
    --sr-surface: #ffffff;
    --sr-surface-2: #e6eaf2;
    --sr-elevated: #ffffff;
    --sr-text: #1e2537;
    --sr-text-dim: #566079;
    --sr-text-faint: #8b95a9;
    --sr-accent: #4f46e5;
    --sr-accent-2: #0e7490;
    --sr-info: #1d4ed8;
    --sr-success: #047857;
    --sr-warning: #a16207;
    --sr-danger: #b91c1c;
    --sr-magenta: #9333ea;
    --sr-tk-read: #1d4ed8;
    --sr-tk-create: #047857;
    --sr-tk-modify: #a16207;
    --sr-tk-destroy: #b91c1c;
    --sr-tk-kw: #4f46e5;
    --sr-tk-str: #b45309;
    --sr-tk-num: #9333ea;
    --sr-tk-func: #0e7490;
    --sr-on-accent: #ffffff;
}

/* ══════════════════════════════════════════════════════════════════
   2. DERIVADOS — não dependem da polaridade
   Sobrescrever um seed (por tema, por card ou inline no live preview da
   tela Temas) já repinta tudo isto: os valores abaixo são recalculados
   em cada elemento onde esta regra vale.
   ══════════════════════════════════════════════════════════════════ */
:root,
[data-sirius-theme] {
    /* ── ramps do acento ──
       -strong: preenchimento mais fundo (hover de botão, gradiente)
       -text  : o acento como TEXTO legível sobre o fundo da página
       -text-hi: variação ainda mais legível (títulos, ícone em destaque) */
    --sr-accent-strong: color-mix(in oklab, var(--sr-accent), #000 24%);
    --sr-accent-deep: color-mix(in oklab, var(--sr-accent), #000 42%);
    --sr-accent-soft: rgb(from var(--sr-accent) r g b / 0.12);
    --sr-accent-soft-hi: rgb(from var(--sr-accent) r g b / 0.22);
    --sr-accent-2-soft: rgb(from var(--sr-accent-2) r g b / 0.12);
    --sr-accent-2-soft-hi: rgb(from var(--sr-accent-2) r g b / 0.22);

    /* ── bordas ── */
    --sr-border: rgb(from var(--sr-accent) r g b / 0.18);
    --sr-border-soft: rgb(from var(--sr-accent) r g b / 0.10);
    --sr-border-hi: rgb(from var(--sr-accent-text) r g b / 0.42);

    /* ── estados ── */
    --sr-success-strong: color-mix(in oklab, var(--sr-success), #000 24%);
    --sr-success-soft: rgb(from var(--sr-success) r g b / 0.12);
    --sr-warning-strong: color-mix(in oklab, var(--sr-warning), #000 24%);
    --sr-warning-soft: rgb(from var(--sr-warning) r g b / 0.12);
    --sr-danger-strong: color-mix(in oklab, var(--sr-danger), #000 26%);
    --sr-danger-soft: rgb(from var(--sr-danger) r g b / 0.12);
    --sr-info-soft: rgb(from var(--sr-info) r g b / 0.12);
    --sr-magenta-soft: rgb(from var(--sr-magenta) r g b / 0.12);

    /* ── superfícies translúcidas ──
       glass: header/sidebar com backdrop-filter; veil: véu de modal */
    --sr-glass: rgb(from var(--sr-surface) r g b / 0.82);
    --sr-glass-2: rgb(from var(--sr-surface) r g b / 0.92);
    --sr-veil: rgb(from var(--sr-bg) r g b / 0.72);

    /* ── listas / grids ── */
    --sr-row-hover: rgb(from var(--sr-accent) r g b / 0.10);
    --sr-grid-line: rgb(from var(--sr-accent) r g b / 0.10);

    /* ── gradiente da marca (nós do grafo, chips ativos, avatares) ── */
    --sr-gradient: linear-gradient(135deg, var(--sr-accent) 0%, var(--sr-accent-strong) 55%, var(--sr-info) 100%);
    --sr-gradient-2: linear-gradient(135deg, var(--sr-accent) 0%, var(--sr-accent-2) 100%);

    /* ── sombra ──
       Usada como rgb(from var(--sr-shadow-color) r g b / calc(α * var(--sr-shadow-k))):
       o multiplicador deixa a mesma regra suave em tema claro e densa em escuro. */
    --sr-shadow-color: #000000;
    --sr-shadow-k: 1;
}

/* ══════════════════════════════════════════════════════════════════
   3. DERIVADOS por POLARIDADE
   Em tema escuro "mais legível" = mais claro; em tema claro = mais escuro.
   Estes blocos são a única coisa que precisa saber o tipo do tema.
   ══════════════════════════════════════════════════════════════════ */
[data-sirius-polarity="dark"] {
    color-scheme: dark;
    --sr-accent-text: color-mix(in oklab, var(--sr-accent), #fff 26%);
    --sr-accent-text-hi: color-mix(in oklab, var(--sr-accent), #fff 55%);
    --sr-accent-2-text: color-mix(in oklab, var(--sr-accent-2), #fff 12%);
    --sr-accent-2-text-hi: color-mix(in oklab, var(--sr-accent-2), #fff 38%);
    --sr-info-text: color-mix(in oklab, var(--sr-info), #fff 12%);
    --sr-magenta-text: color-mix(in oklab, var(--sr-magenta), #fff 12%);
    /* traço de seleção nos nós do grafo: precisa "estourar" sobre o canvas */
    --sr-stroke-hi: #ffffff;
    /* branco translúcido (divisórias, trilhas de barra) */
    --sr-mist: rgb(from #ffffff r g b / 0.07);
    --sr-mist-hi: rgb(from #ffffff r g b / 0.14);
    --sr-row-alt: rgb(from #ffffff r g b / 0.022);
}

[data-sirius-polarity="light"] {
    color-scheme: light;
    --sr-accent-text: color-mix(in oklab, var(--sr-accent), #000 8%);
    --sr-accent-text-hi: color-mix(in oklab, var(--sr-accent), #000 26%);
    --sr-accent-2-text: color-mix(in oklab, var(--sr-accent-2), #000 8%);
    --sr-accent-2-text-hi: color-mix(in oklab, var(--sr-accent-2), #000 24%);
    --sr-info-text: color-mix(in oklab, var(--sr-info), #000 8%);
    --sr-magenta-text: color-mix(in oklab, var(--sr-magenta), #000 8%);
    --sr-stroke-hi: #1b1b28;
    --sr-mist: rgb(from var(--sr-text) r g b / 0.06);
    --sr-mist-hi: rgb(from var(--sr-text) r g b / 0.12);
    --sr-row-alt: rgb(from var(--sr-accent) r g b / 0.035);
    /* sombra violeta suave em vez de preto pesado */
    --sr-shadow-color: #4b3a78;
    --sr-shadow-k: 0.34;
}

/* Sem o atributo (JS desligado / primeira pintura sem engine): trata como escuro,
   que é o padrão histórico da aplicação. */
html:not([data-sirius-polarity]) {
    color-scheme: dark;
    --sr-accent-text: color-mix(in oklab, var(--sr-accent), #fff 26%);
    --sr-accent-text-hi: color-mix(in oklab, var(--sr-accent), #fff 55%);
    --sr-accent-2-text: color-mix(in oklab, var(--sr-accent-2), #fff 12%);
    --sr-accent-2-text-hi: color-mix(in oklab, var(--sr-accent-2), #fff 38%);
    --sr-info-text: color-mix(in oklab, var(--sr-info), #fff 12%);
    --sr-magenta-text: color-mix(in oklab, var(--sr-magenta), #fff 12%);
    --sr-stroke-hi: #ffffff;
    --sr-mist: rgb(from #ffffff r g b / 0.07);
    --sr-mist-hi: rgb(from #ffffff r g b / 0.14);
    --sr-row-alt: rgb(from #ffffff r g b / 0.022);
}

/* ══════════════════════════════════════════════════════════════════
   4. Transição na troca de tema
   A classe é colocada pelo theme-engine.js por ~260ms só quando o usuário
   troca de tema — nunca no carregamento (senão a primeira pintura anima).
   ══════════════════════════════════════════════════════════════════ */
html.sr-theming,
html.sr-theming body,
html.sr-theming .sr-themed {
    transition: background-color 0.24s ease, color 0.24s ease, border-color 0.24s ease;
}
