/* =============================================================================
   Orion Design System — tokens (RNF-009)  ·  CT11-473

   Carregado DEPOIS do Bootstrap 5.3 e mapeado sobre as variáveis CSS por
   componente (--bs-*). Nenhum !important, nenhuma troca da camada CSS.

   Os valores vêm de Engenharia/Design-System/design-system-e-telas-prioritarias.md,
   onde cada contraste foi calculado, não estimado. Alterar um hex aqui quebra o
   DesignTokenContrastTests, que recalcula as razões contra o mínimo WCAG 2.2 AA.

   Ordem do arquivo:
     1. Primitivos      — a paleta, sem opinião sobre uso
     2. Papéis          — o que cada cor significa na interface
     3. Tipografia, espaço, forma, movimento
     4. Tema escuro     — só redefine papéis, nunca primitivos
     5. Mapeamento      — os papéis sobre as variáveis do Bootstrap
     6. Acessibilidade  — foco, alvo de toque, movimento reduzido
   ========================================================================== */

/* -----------------------------------------------------------------------------
   1. Primitivos
   -------------------------------------------------------------------------- */
:root {
    /* Marca — azul-marinho da paleta marítima Orion */
    --orion-brand-50: #EEF4FA;
    --orion-brand-100: #C9DCEE;
    --orion-brand-200: #ADC8E4;
    --orion-brand-300: #7BA5D0;
    --orion-brand-500: #2A5F96;
    --orion-brand-600: #1E4A78;
    --orion-brand-700: #163A5F;
    --orion-brand-800: #102B47;
    --orion-brand-900: #0A1D31;

    /* Acento de apoio — verde-mar */
    --orion-accent-600: #0A626A;
    /* O verde-mar escuro some contra o azul-800 da barra lateral; este é o mesmo
       acento na claridade que a superfície escura exige (CT11-484). */
    --orion-accent-300: #4FD1C5;
    /* Faixa interna do item ativo da barra e borda do marco de vínculo (6,63:1 sobre brand-800). */
    --orion-accent-400: #5FBEC6;
    --orion-accent-700: #085057;

    /* Neutros, enviesados para o azul */
    --orion-n-900: #141A21;
    --orion-n-700: #37424F;
    /* Texto secundário (7,0:1 sobre branco; 6,01:1 sobre n-150). */
    --orion-n-600: #4E5A6B;
    --orion-n-500: #616E80;
    --orion-n-400: #7E8B9C;
    --orion-n-200: #DCE2EA;
    /* Decorativo (ponto da trilha, separador, trilho do interruptor): 1,62:1 sobre
       branco, nunca para borda de controle nem para texto. */
    --orion-n-250: #C3CCD8;
    --orion-n-300: #AFBECF;
    --orion-n-150: #EAEEF3;
    --orion-n-100: #F5F7FA;
    --orion-n-50: #FBFCFD;
    --orion-n-000: #FFFFFF;

    /* Situação */
    --orion-success: #0F7A4A;
    --orion-success-bg: #E6F5EE;
    --orion-warning: #8A5A00;
    --orion-warning-bg: #FCF2E0;
    --orion-warning-border: #E0A63C;
    --orion-danger: #B3261E;
    --orion-danger-bg: #FBEBEA;
    --orion-info: #1E4A78;
    --orion-info-bg: #E9F1FA;

    /* Destaque (não é situação boa/ruim, é ênfase — CT11-130, vínculo
       principal). Mesmo primitivo já usado no botão "Seguindo" e no marco de
       vínculo do canvas de UX -- reaproveitado, não reinventado. */
    --orion-accent-bg: #D7EEF0;
    --orion-dark-accent-bg: #142A2C;

    /* Situação no tema escuro. Os pastéis acima são claros por definição: sobre
       eles só cabe texto escuro, e no tema escuro o texto é claro. Sem este par
       de primitivos a faixa de alerta fica com texto claro sobre fundo claro —
       ilegível, e invisível para quem revisa só no tema claro. */
    --orion-dark-success: #63D29B;
    --orion-dark-success-bg: #12291F;
    --orion-dark-warning: #E8B45C;
    --orion-dark-warning-bg: #2B2110;
    --orion-dark-danger: #F08C84;
    --orion-dark-danger-bg: #2E1614;
    --orion-dark-info: #7BA5D0;
    --orion-dark-info-bg: #16263A;

    /* Superfícies do tema escuro — primitivos, aplicados na seção 4 */
    --orion-dark-bg: #10161D;
    --orion-dark-surface-1: #182028;
    --orion-dark-surface-2: #212B36;
    --orion-dark-divider: #2E3A47;
    --orion-dark-field-border: #657A8D;
    --orion-dark-text: #E6EBF1;
    --orion-dark-text-muted: #A7B3C1;

    /* Hover de ação no tema escuro (antes digitado no papel). */
    --orion-action-hover-dark: #9BBCDD;

    /* Painel de imagem do Login (CT11-... Login.dc.html): usados só em site.css. */
    --orion-login-eyebrow: #6DB6EB;
    --orion-login-text: #C4D6E8;
    --orion-login-footer: #94AEC7;
    --orion-login-credit: #7E97AE;
    --orion-login-scrim-strong: rgba(6, 17, 30, 0.90);
    --orion-login-scrim-mid: rgba(8, 24, 41, 0.72);
    --orion-login-scrim-soft: rgba(10, 29, 49, 0.38);
    --orion-login-scrim-top: rgba(6, 17, 30, 0.72);
    --orion-login-scrim-top-mid: rgba(8, 24, 41, 0.52);
    --orion-login-fade-clear: rgba(255, 255, 255, 0);

    /* Sombra de balão flutuante (menus e painéis sobre a página). */
    --orion-shadow-overlay: 0 10px 28px rgba(20, 26, 33, 0.22);
}

/* -----------------------------------------------------------------------------
   2. Papéis semânticos

   A interface referencia SEMPRE o papel, nunca o primitivo. Trocar a paleta
   passa a ser mexer numa seção só, e o tema escuro vira redefinição de papel.
   -------------------------------------------------------------------------- */
:root {
    --orion-color-action: var(--orion-brand-600);
    /* Hover escurece (#163A5F), como a referência; não clareia. */
    --orion-color-action-hover: var(--orion-brand-700);
    --orion-color-link-hover: var(--orion-brand-700);
    --orion-color-action-active: var(--orion-brand-800);
    --orion-color-on-action: var(--orion-n-000);
    --orion-color-focus-ring: var(--orion-brand-500);

    --orion-color-sidebar-bg: var(--orion-brand-800);
    --orion-color-accent: var(--orion-accent-600);

    /* Sobre a barra lateral, que é escura nos DOIS temas: quem está ali não pode
       usar as cores de texto e de ação da superfície clara (CT11-484). A barra
       SUPERIOR é clara, como na proposta de interface validada — ela usa as
       cores normais de superfície. */
    --orion-color-on-sidebar: var(--orion-n-000);
    --orion-color-on-sidebar-muted: var(--orion-n-300);
    /* AJ-022: item inativo, rótulo de grupo e versão têm cada um o seu tom (10,25:1 e 5,58:1 sobre a barra). */
    --orion-color-on-sidebar-item: var(--orion-brand-100);
    --orion-color-sidebar-label: var(--orion-brand-300);
    --orion-color-accent-on-dark: var(--orion-accent-300);
    /* AJ-019: o hover é um véu claro e o ativo é o azul de ação — o hover não pode ser a cor do ativo. */
    --orion-sidebar-hover: rgba(255, 255, 255, 0.06);
    --orion-sidebar-active: var(--orion-brand-600);
    --orion-sidebar-marker: var(--orion-accent-400);
    /* AJ-018: linha fina entre a marca e o nome do produto (branco a 13 %). */
    --orion-sidebar-divider: rgba(255, 255, 255, 0.13);
    --orion-brand-logo-width: 176px;
    /* AJ-021: o anel padrão (brand-500) sobre brand-800 dá 2,18:1; na barra o anel é o texto da barra. */
    --orion-sidebar-focus-ring: var(--orion-color-on-sidebar);

    /* Texto sobre a cor de erro — o contador do sino. No tema escuro a cor de
       erro clareia, e o branco em cima dela reprovaria. */
    --orion-color-on-danger: var(--orion-n-000);

    --orion-color-heading: var(--orion-n-900);
    --orion-color-body: var(--orion-n-700);
    --orion-color-text-secondary: var(--orion-n-600);
    --orion-color-muted: var(--orion-n-500);

    --orion-color-bg: var(--orion-n-50);
    --orion-color-surface: var(--orion-n-000);
    --orion-color-surface-sunken: var(--orion-n-100);

    --orion-color-field-border: var(--orion-n-400);
    --orion-color-divider: var(--orion-n-200);
    /* Divisor interno de cartão e linha de tabela; decorativo (trilha, separador). */
    --orion-color-divider-soft: var(--orion-n-150);
    --orion-color-ornament: var(--orion-n-250);
    /* Fundo de ênfase azul claro (filtro ativo, hoje, ícone de Empresa) e sua borda. */
    --orion-color-brand-tint: var(--orion-brand-50);
    --orion-color-brand-tint-border: var(--orion-brand-200);
    /* Moldura do alerta de crédito (só moldura: o texto é warning sobre warning-bg). */
    --orion-color-warning-border: var(--orion-warning-border);
    /* Etiqueta neutra (Novo Lead, Prospect, Cancelada). */
    --orion-color-neutral-surface: var(--orion-n-150);
    --orion-color-neutral: var(--orion-n-600);

    /* Situação como PAPEL. A interface referencia estes, nunca o primitivo de
       situação: é o que faz o tema escuro trocar as quatro cores de uma vez. */
    --orion-color-success: var(--orion-success);
    --orion-color-success-surface: var(--orion-success-bg);
    --orion-color-warning: var(--orion-warning);
    --orion-color-warning-surface: var(--orion-warning-bg);
    --orion-color-danger: var(--orion-danger);
    --orion-color-danger-surface: var(--orion-danger-bg);
    --orion-color-info: var(--orion-info);
    --orion-color-info-surface: var(--orion-info-bg);

    /* Destaque (CT11-130): não é situação boa/ruim, reaproveita o papel de cor
       já usado no botão "Seguindo" e no marco de vínculo do canvas de UX. */
    --orion-color-accent-surface: var(--orion-accent-bg);

    /* Brilho que corre sobre o skeleton (CT11-480). É papel, não primitivo: no
       tema escuro o brilho precisa ser mais CLARO que a superfície, e no claro
       mais claro que o cinza afundado — o mesmo hex não serve nos dois. */
    --orion-skeleton-gradient: linear-gradient(90deg, transparent 25%, var(--orion-n-000) 50%, transparent 75%);
}

/* -----------------------------------------------------------------------------
   3. Tipografia, espaço, forma, movimento
   -------------------------------------------------------------------------- */
:root {
    /* Archivo nos títulos e rótulos de interface; Source Sans 3 no que se lê.
       A pilha de alternativas é local de propósito: se a rede do Grupo bloquear
       o Google Fonts, a interface degrada para a fonte do sistema em vez de
       cair no Times New Roman. */
    --orion-font-heading: "Archivo", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
    --orion-font-body: "Source Sans 3", "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;

    /* Escala. O piso de 0.875rem para conteúdo é regra, não sugestão. */
    --orion-text-h1: 2rem;        --orion-leading-h1: 2.5rem;
    --orion-text-h2: 1.5rem;      --orion-leading-h2: 2rem;
    --orion-text-h3: 1.25rem;     --orion-leading-h3: 1.75rem;
    --orion-text-h4: 1.125rem;    --orion-leading-h4: 1.5rem;
    --orion-text-body: 0.9375rem; --orion-leading-body: 1.375rem;
    --orion-text-body-sm: 0.875rem; --orion-leading-body-sm: 1.25rem;
    --orion-text-caption: 0.8125rem; --orion-leading-caption: 1.125rem;
    --orion-text-overline: 0.6875rem; --orion-leading-overline: 1rem;

    /* Escala da proposta de 04/09/2026 (AJ-002). Os tamanhos de 10 a 12 px são só
       de etiqueta, data, rótulo e rodapé; texto de conteúdo corrido continua com o
       piso de 14 px (Q-06). */
    --orion-text-2xs: 0.625rem;
    --orion-text-xs: 0.75rem;
    --orion-text-title-sm: 1.0625rem;
    --orion-text-kpi: 1.1875rem;
    --orion-leading-kpi: 1.5rem;
    --orion-text-page: 1.625rem;
    --orion-text-display: 2.625rem;
    --orion-leading-page: 1.15;

    --orion-weight-regular: 400;
    --orion-weight-medium: 500;
    --orion-weight-semibold: 600;
    --orion-weight-bold: 700;

    --orion-tracking-tight: -0.02em;
    --orion-tracking-overline: 0.08em;
    --orion-tracking-table: 0.07em;
    --orion-tracking-group: 0.09em;
    --orion-tracking-product: 0.03em;

    /* Datas, horas, valores em R$, telefone, CNPJ, domínio (AJ-009). A referência declara
       só ui-monospace, monospace; os nomes extras garantem a mesma largura no Windows. */
    --orion-font-mono: ui-monospace, "Cascadia Mono", Consolas, monospace;

    /* Espaço — base 4px, faixa de trabalho 8 a 24 */
    --orion-space-1: 0.25rem;
    --orion-space-2: 0.5rem;
    --orion-space-3: 0.75rem;
    --orion-space-4: 1rem;
    --orion-space-5: 1.5rem;
    --orion-space-6: 2rem;

    /* Forma. O 999px é só para etiqueta e avatar — botão com raio de pílula
       some do padrão e vira exceção visual. */
    --orion-radius-chip: 4px;
    --orion-radius: 6px;
    --orion-radius-overlay: 10px;
    --orion-radius-pill: 999px;

    /* Densidade de tabela */
    --orion-row-comfortable: 44px;
    --orion-row-compact: 36px;

    /* Alvo de toque mínimo — RNF-008 e WCAG 2.2 §2.5.8 */
    --orion-touch-target: 44px;

    --orion-follow-icon-size: 16px;

    /* Altura da prévia da assinatura do Gmail (CT11-739). Fixa: o conteúdo mora num iframe sandbox de origem opaca e a página
       não consegue medi-lo; passando disto, a prévia rola por dentro. */
    --orion-signature-frame-height: 12rem;

    /* Cabeçalho e célula de tabela (AJ-016). */
    --orion-table-head-padding-block: 9px;
    --orion-table-cell-padding-block: 11px;
    --orion-table-cell-padding-inline: 15px;

    /* Ícone de interface (menu, faixa) e padding da faixa com moldura (AJ-015). */
    --orion-icon-size: 18px;
    --orion-banner-padding-block: 11px;
    --orion-banner-padding-inline: 15px;

    /* Interruptor compacto da proposta (AJ-017). */
    --orion-switch-compact-width: 32px;
    --orion-switch-compact-height: 18px;
    --orion-switch-compact-thumb: 14px;

    /* Etiqueta de situação (AJ-004): pílula de 3x8 px, ponto de 6 px. */
    /* Chip de filtro, cartão lateral e ícone de entidade (AJ-028/029) */
    --orion-chip-padding-block: 5px;
    --orion-chip-padding-inline: 11px;
    --orion-card-side-padding-block: 14px;
    --orion-entity-icon-size: 52px;
    --orion-radius-entity: 8px;
    --orion-tag-padding-block: 3px;
    --orion-tag-padding-inline: 8px;
    --orion-tag-dot: 6px;

    /* Altura de botão e campo (AJ-003, Q-02): 36 px no desktop, como na proposta;
       44 px abaixo de 992 px e em ponteiro grosseiro (ver o bloco logo abaixo). */
    --orion-control-height: 36px;
    --orion-control-height-sm: 32px;

    /* Estrutura do shell — os números da tabela de grid do Design System
       (CT11-484). Ficam como token porque o cabeçalho fixo entra na conta do
       scroll-margin da seção 6, e dois lugares com o mesmo 56px digitado à mão
       divergem no primeiro ajuste. */
    --orion-topbar-height: 56px;
    --orion-appbar-height: 52px;
    --orion-appbar-star-size: 22px;
    --orion-search-width: 360px;
    --orion-search-height: 34px;
    --orion-icon-size-topbar: 20px;
    --orion-avatar-size: 30px;
    --orion-badge-offset-block: -3px;
    --orion-badge-offset-inline: -6px;
    --orion-badge-padding-block: 2px;
    --orion-badge-padding-inline: 5px;
    --orion-breadcrumb-padding-block: 9px;
    /* Linha do tempo (AJ-005): trilho, marco e margem à esquerda dos cartões */
    --orion-measure-list: 820px;
    --orion-feed-side-width: 340px;
    --orion-feed-gap: 24px;
    --orion-feed-icon-size: 2rem;
    --orion-feed-icon-size-sm: 1.75rem;
    --orion-fab-height: 3.25rem;
    --orion-measure-appointment: 760px;
    --orion-measure-record: 760px;
    --orion-checklist-max-height: 13.75rem;
    --orion-measure-form: 17.5rem;
    --orion-measure-search: 36rem;
    --orion-user-identity-width: 15rem;
    --orion-user-identity-width-narrow: 10rem;
    --orion-measure-card: 32.5rem;
    --orion-measure-col-sm: 12rem;
    --orion-measure-col-md: 14rem;
    --orion-icon-lg: 1.375rem;
    --orion-icon-inline: 1em;
    --orion-kanban-avatar-size: 1.5rem;
    /* AJ-124: máscaras (só o contorno importa; a cor vem de currentColor do elemento) no lugar de emoji/glifo em ::before. */
    --orion-icon-mask-alerta: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4l9 16H3z'/%3E%3Cpath d='M12 10v4.5M12 17.5v.01'/%3E%3C/svg%3E");
    --orion-icon-mask-cadeado: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='6' y='11' width='12' height='9' rx='2'/%3E%3Cpath d='M8.5 11V8a3.5 3.5 0 0 1 7 0v3'/%3E%3C/svg%3E");
    --orion-ficha-side-width: 372px;
    --orion-ficha-gap: 20px;
    --orion-select-kind-width: 140px;
    --orion-timeline-gutter: 34px;
    --orion-timeline-rail-offset: 9px;
    --orion-timeline-rail-width: 2px;
    --orion-timeline-marker: 20px;
    --orion-timeline-marker-top: 6px;
    --orion-timeline-icon: 10px;
    --orion-timeline-item-gap: 12px;
    --orion-menu-item-height: 38px;
    --orion-menu-item-padding: 10px;
    --orion-menu-group-padding-top: 14px;
    --orion-sidebar-padding-block: 16px;
    --orion-sidebar-padding-inline: 12px;
    --orion-sidebar-gap: 18px;
    --orion-sidebar-width: 256px;
    --orion-sidebar-width-collapsed: 64px;

    /* Tela inicial (CT11-716, UX CT11-708): só layout, nenhuma cor nova. A coluna lateral, o espaço entre blocos, a barra de situação do
       cartão de compromisso, a coluna do horário e o quadro do ícone de fato e de integração. */
    --orion-home-side-width: 320px;
    --orion-home-gap: var(--orion-space-5);
    --orion-home-appt-bar: 4px;
    --orion-home-time-col: 3.25rem;
    --orion-home-icon-chip: 2rem;

    /* Movimento — três durações e uma curva só */
    --orion-motion-fast: 120ms;
    --orion-motion: 180ms;
    --orion-motion-slow: 260ms;
    --orion-easing: cubic-bezier(.2, .8, .2, 1);

    /* Movimento CONTÍNUO — skeleton e spinner (CT11-480). Fica separado das três
       durações acima de propósito: aquelas são transições entre dois estados e
       terminam; estas são laços que só param quando o dado chega. Um laço de
       180ms vira estroboscópio na tela do conferente. */
    --orion-motion-skeleton: 1400ms;
    --orion-motion-spinner: 640ms;

    /* Desabilitado: o cinza é redundância, a razão em texto é a informação. */
    --orion-opacity-disabled: 0.55;
}

/* AJ-020: abaixo de 992px a barra superior é a app bar escura de 52px; a altura entra
   na grade do shell, no scroll-margin e na posição da linha de busca. */
@media (max-width: 991.98px) {
    :root {
        --orion-topbar-height: var(--orion-appbar-height);
    }
}

/* Onde há toque, o controle volta a 44 px (RNF-006 a RNF-008). */
@media (max-width: 991.98px), (pointer: coarse) {
    :root {
        --orion-control-height: var(--orion-touch-target);
        --orion-control-height-sm: var(--orion-touch-target);
        --orion-menu-item-height: var(--orion-touch-target);
    }
}

/* -----------------------------------------------------------------------------
   4. Tema escuro

   Usa o seletor nativo do Bootstrap 5.3 (data-bs-theme) e redefine APENAS
   papéis. Nenhum primitivo muda — é o que mantém os dois temas consistentes.
   -------------------------------------------------------------------------- */
[data-bs-theme="dark"] {
    --orion-color-action: var(--orion-brand-300);
    --orion-color-action-hover: var(--orion-action-hover-dark);
    --orion-color-link-hover: var(--orion-action-hover-dark);
    --orion-color-action-active: var(--orion-brand-500);
    --orion-color-on-action: var(--orion-n-900);
    --orion-color-focus-ring: var(--orion-brand-300);

    --orion-color-sidebar-bg: var(--orion-dark-surface-1);
    --orion-color-on-sidebar: var(--orion-dark-text);
    --orion-color-on-sidebar-muted: var(--orion-dark-text-muted);
    --orion-sidebar-hover: var(--orion-dark-surface-2);
    --orion-sidebar-active: var(--orion-dark-divider);
    --orion-color-on-danger: var(--orion-n-900);

    --orion-color-heading: var(--orion-dark-text);
    --orion-color-body: var(--orion-dark-text);
    --orion-color-text-secondary: var(--orion-dark-text-muted);
    --orion-color-muted: var(--orion-dark-text-muted);

    --orion-color-bg: var(--orion-dark-bg);
    --orion-color-surface: var(--orion-dark-surface-1);
    --orion-color-surface-sunken: var(--orion-dark-surface-2);

    --orion-color-field-border: var(--orion-dark-field-border);
    --orion-color-divider: var(--orion-dark-divider);
    --orion-color-divider-soft: var(--orion-dark-divider);
    --orion-color-ornament: var(--orion-dark-field-border);
    --orion-color-brand-tint: var(--orion-dark-info-bg);
    --orion-color-brand-tint-border: var(--orion-dark-divider);
    --orion-color-warning-border: var(--orion-dark-warning);
    --orion-color-neutral-surface: var(--orion-dark-surface-2);
    --orion-color-neutral: var(--orion-dark-text-muted);

    --orion-color-success: var(--orion-dark-success);
    --orion-color-success-surface: var(--orion-dark-success-bg);
    --orion-color-warning: var(--orion-dark-warning);
    --orion-color-warning-surface: var(--orion-dark-warning-bg);
    --orion-color-danger: var(--orion-dark-danger);
    --orion-color-danger-surface: var(--orion-dark-danger-bg);
    --orion-color-info: var(--orion-dark-info);
    --orion-color-info-surface: var(--orion-dark-info-bg);

    /* --orion-accent-300 já existia documentado para uso em superfícies
       escuras (CT11-484) mas nunca tinha sido ligado aqui -- lacuna anterior
       ao CT11-130, fechada agora que o papel Destaque existe. */
    --orion-color-accent: var(--orion-accent-300);
    --orion-color-accent-surface: var(--orion-dark-accent-bg);

    --orion-skeleton-gradient: linear-gradient(90deg, transparent 25%, var(--orion-dark-divider) 50%, transparent 75%);
}

/* -----------------------------------------------------------------------------
   5. Mapeamento sobre o Bootstrap 5.3

   Só variáveis. Um dia trocar o Bootstrap de versão mexe aqui e em nenhum
   outro lugar do projeto.
   -------------------------------------------------------------------------- */
:root {
    --bs-primary: var(--orion-color-action);
    --bs-primary-rgb: 30, 74, 120;
    --bs-secondary: var(--orion-color-accent);
    --bs-success: var(--orion-color-success);
    --bs-warning: var(--orion-color-warning);
    --bs-danger: var(--orion-color-danger);
    --bs-info: var(--orion-color-info);

    --bs-body-font-family: var(--orion-font-body);
    --bs-body-font-size: var(--orion-text-body);
    --bs-body-line-height: 1.4667;
    --bs-body-color: var(--orion-color-body);
    --bs-body-bg: var(--orion-color-bg);
    --bs-emphasis-color: var(--orion-color-heading);
    --bs-secondary-color: var(--orion-color-muted);
    --bs-tertiary-bg: var(--orion-color-surface-sunken);

    --bs-border-color: var(--orion-color-divider);
    --bs-border-radius: var(--orion-radius);
    --bs-border-radius-sm: var(--orion-radius-chip);
    --bs-border-radius-lg: var(--orion-radius-overlay);
    --bs-border-radius-pill: var(--orion-radius-pill);

    --bs-link-color: var(--orion-color-action);
    --bs-link-color-rgb: 30, 74, 120;
    --bs-link-hover-color: var(--orion-color-link-hover);

    --bs-focus-ring-color: var(--orion-color-focus-ring);
    --bs-focus-ring-width: 2px;
    --bs-focus-ring-opacity: 1;
}

/* Títulos e rótulos de interface em Archivo; o resto herda Source Sans 3. */
h1, h2, h3, h4, h5, h6,
.navbar-brand, .btn, .form-label, .nav-link, .table > thead {
    font-family: var(--orion-font-heading);
}

/* Título de página: 26 px, 700, -0,02em, entrelinha 1,15 (AJ-002). */
h1 {
    font-size: var(--orion-text-page);
    line-height: var(--orion-leading-page);
    font-weight: var(--orion-weight-bold);
    letter-spacing: var(--orion-tracking-tight);
}
h2 { font-size: var(--orion-text-h2); line-height: var(--orion-leading-h2); }
h3 { font-size: var(--orion-text-h3); line-height: var(--orion-leading-h3); }
h4 { font-size: var(--orion-text-h4); line-height: var(--orion-leading-h4); }

h2, h3, h4, h5, h6 {
    font-weight: var(--orion-weight-semibold);
}

h1, h2, h3, h4, h5, h6 {
    color: var(--orion-color-heading);
}

/* Número em coluna alinha pela cifra, sempre. */
.table td, .table th, .orion-numeric {
    font-variant-numeric: tabular-nums;
}

/* Número de tabela: monoespaçada e à direita, como na proposta (AJ-016). */
.orion-numeric {
    font-family: var(--orion-font-mono);
}

/* Dado de máquina — data, hora, valor, telefone, CNPJ, domínio — em monoespaçada de 12 px (AJ-009). */
.orion-mono {
    font-family: var(--orion-font-mono);
    font-size: var(--orion-text-xs);
    font-variant-numeric: tabular-nums;
}

.btn {
    --bs-btn-border-radius: var(--orion-radius);
    --bs-btn-font-weight: var(--orion-weight-semibold);
    --bs-btn-font-size: var(--orion-text-body-sm);
    --bs-btn-padding-y: 0.375rem;
    --bs-btn-padding-x: 1rem;
    min-height: var(--orion-control-height);
    transition: background-color var(--orion-motion) var(--orion-easing),
                border-color var(--orion-motion) var(--orion-easing);
}

.btn-sm {
    min-height: var(--orion-control-height-sm);
}

.btn-primary {
    --bs-btn-bg: var(--orion-color-action);
    --bs-btn-border-color: var(--orion-color-action);
    --bs-btn-color: var(--orion-color-on-action);
    --bs-btn-hover-bg: var(--orion-color-action-hover);
    --bs-btn-hover-border-color: var(--orion-color-action-hover);
    --bs-btn-hover-color: var(--orion-color-on-action);
    --bs-btn-active-bg: var(--orion-color-action-active);
    --bs-btn-active-border-color: var(--orion-color-action-active);
    --bs-btn-disabled-bg: var(--orion-color-action);
    --bs-btn-disabled-border-color: var(--orion-color-action);
    --bs-btn-disabled-color: var(--orion-color-on-action);
}

.btn-outline-primary {
    --bs-btn-color: var(--orion-color-action);
    --bs-btn-border-color: var(--orion-color-action);
    --bs-btn-hover-bg: var(--orion-color-action);
    --bs-btn-hover-border-color: var(--orion-color-action);
    --bs-btn-hover-color: var(--orion-color-on-action);
}

/* AJ-131: botão de contorno neutro (Hoje, Limpar, Voltar, ações de linha): texto de ação, borda de campo e
   fundo de superfície, sem o cinza literal do Bootstrap. */
.btn-outline-secondary {
    --bs-btn-color: var(--orion-color-action);
    --bs-btn-border-color: var(--orion-color-field-border);
    --bs-btn-bg: var(--orion-color-surface);
    --bs-btn-hover-bg: var(--orion-color-info-surface);
    --bs-btn-hover-border-color: var(--orion-color-action);
    --bs-btn-hover-color: var(--orion-color-action);
    --bs-btn-active-bg: var(--orion-color-info-surface);
    --bs-btn-active-border-color: var(--orion-color-action);
    --bs-btn-active-color: var(--orion-color-action);
    --bs-btn-disabled-bg: var(--orion-color-surface-sunken);
    --bs-btn-disabled-border-color: var(--orion-color-divider);
    --bs-btn-disabled-color: var(--orion-color-muted);
}

.btn-secondary {
    --bs-btn-bg: var(--orion-color-accent);
    --bs-btn-border-color: var(--orion-color-accent);
    --bs-btn-color: var(--orion-n-000);
    --bs-btn-hover-bg: var(--orion-accent-700);
    --bs-btn-hover-border-color: var(--orion-accent-700);
    --bs-btn-hover-color: var(--orion-n-000);
}

.form-control, .form-select {
    --bs-border-color: var(--orion-color-field-border);
    --bs-border-radius: var(--orion-radius);
    min-height: var(--orion-control-height);
}

.card {
    --bs-card-border-color: var(--orion-color-divider);
    --bs-card-border-radius: var(--orion-radius);
    --bs-card-bg: var(--orion-color-surface);
    --bs-card-spacer-x: var(--orion-space-4);
    --bs-card-spacer-y: var(--orion-space-4);
    /* Card de lista usa borda, não sombra — sombra por papel, não por hábito. */
    box-shadow: none;
}

.table {
    --bs-table-border-color: var(--orion-color-divider-soft);
    --bs-table-color: var(--orion-color-body);
}

/* Cabeçalho da proposta (AJ-016): fundo cinza claro, Archivo 11 px, 500, 0,07em, caixa-alta, 9x15 px. */
.table > thead > tr > th {
    padding: var(--orion-table-head-padding-block) var(--orion-table-cell-padding-inline);
    background-color: var(--orion-color-surface-sunken);
    color: var(--orion-color-muted);
    font-size: var(--orion-text-overline);
    font-weight: var(--orion-weight-medium);
    letter-spacing: var(--orion-tracking-table);
    text-transform: uppercase;
}

.table > tbody > tr > td {
    height: var(--orion-row-comfortable);
    padding: var(--orion-table-cell-padding-block) var(--orion-table-cell-padding-inline);
    vertical-align: middle;
}

.table-compact > tbody > tr > td {
    height: var(--orion-row-compact);
}

.modal, .offcanvas {
    --bs-modal-border-radius: var(--orion-radius-overlay);
    --bs-offcanvas-bg: var(--orion-color-surface);
}

/* Sempre pelo papel: no tema escuro o fundo vira a superfície tonal escura e o
   texto vira a cor clara da situação, sem que o alerta precise saber disso. */
.alert-success { --bs-alert-bg: var(--orion-color-success-surface); --bs-alert-color: var(--orion-color-success); --bs-alert-border-color: var(--orion-color-success); }
.alert-warning { --bs-alert-bg: var(--orion-color-warning-surface); --bs-alert-color: var(--orion-color-warning); --bs-alert-border-color: var(--orion-color-warning); }
.alert-danger  { --bs-alert-bg: var(--orion-color-danger-surface);  --bs-alert-color: var(--orion-color-danger);  --bs-alert-border-color: var(--orion-color-danger); }
.alert-info    { --bs-alert-bg: var(--orion-color-info-surface);    --bs-alert-color: var(--orion-color-info);    --bs-alert-border-color: var(--orion-color-info); }

/* -----------------------------------------------------------------------------
   6. Acessibilidade — WCAG 2.2 AA
   -------------------------------------------------------------------------- */

/* Anel de foco único, sempre :focus-visible, nunca removido. */
:focus-visible {
    outline: 2px solid var(--orion-color-focus-ring);
    outline-offset: 2px;
}

/* O foco nunca pode ficar encoberto pelo cabeçalho fixo (WCAG 2.2 §2.4.11). */
:target, h1, h2, h3, h4 {
    scroll-margin-top: calc(var(--orion-topbar-height) + var(--orion-space-4));
}

/* "Pular para o conteúdo": primeiro elemento tabulável, visível só no foco. */
.orion-skip-link {
    position: absolute;
    display: inline-flex;
    align-items: center;
    min-block-size: var(--orion-touch-target);
    left: var(--orion-space-4);
    top: calc(-1 * var(--orion-touch-target) - var(--orion-space-4));
    z-index: 1090;
    padding: var(--orion-space-2) var(--orion-space-4);
    background: var(--orion-color-action);
    color: var(--orion-color-on-action);
    border-radius: var(--orion-radius);
    transition: top var(--orion-motion-fast) var(--orion-easing);
}

.orion-skip-link:focus-visible {
    top: var(--orion-space-4);
}

/* Situação nunca só por cor: todo indicador carrega rótulo textual. */
.orion-status {
    display: inline-flex;
    align-items: center;
    gap: var(--orion-space-2);
    font-size: var(--orion-text-body-sm);
}

.orion-status::before {
    content: "";
    inline-size: 0.5rem;
    block-size: 0.5rem;
    border-radius: var(--orion-radius-pill);
    background: currentColor;
}

/* Única ocorrência de !important no arquivo, e consciente: o critério 2 do
   CT11-473 proíbe !important no MAPEAMENTO sobre o Bootstrap, e este bloco não
   é mapeamento. Respeitar movimento reduzido é preferência declarada do usuário
   no sistema operacional — ela precisa vencer qualquer animação de componente,
   inclusive as que o Bootstrap define com especificidade maior. */
@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;
    }
}
