/* =============================================================================
   PERFECTUM DS — UI-1 · Fundação
   Camada CANÔNICA de tokens do Design System Perfectum.
   NÃO é um segundo sistema: os tokens de cor abaixo são APELIDOS dos tokens que
   style.css + perfectum-themes.css já resolvem por tema (Corporate / Executive
   Light / Obsidian Premium). Carregar SEMPRE antes de style.css.

   UI-1 é aditivo. A única superfície visível que ele altera:
     (a) a fonte da marca (Inter) passa a carregar de verdade, self-hosted;
     (b) foco de teclado ganha anel visível (:focus-visible);
     (c) prefers-reduced-motion passa a ser respeitado;
     (d) .alert.error passa a ler como erro; .alert.info fica explícito.
   Nenhuma mudança de layout, componente, rota ou regra de negócio.
   ========================================================================== */

/* ---- Inter — self-hosted (SIL Open Font License 1.1), zero dependência externa ---- */
@font-face{
  font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonts/inter-latin-400.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonts/inter-latin-ext-400.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;
  src:url('/static/fonts/inter-latin-500.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;
  src:url('/static/fonts/inter-latin-ext-500.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/fonts/inter-latin-600.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/fonts/inter-latin-ext-600.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

:root{
  /* ======================================================================
     COR — apelidos canônicos. Resolvem contra os tokens que o tema ativo
     define em style.css / perfectum-themes.css. Custom properties são
     avaliadas no ponto de uso, então seguem Corporate/Light/Obsidian.
     ====================================================================== */
  --pds-bg:var(--bg);
  --pds-surface:var(--panel);
  --pds-surface-2:var(--panel-2);
  --pds-surface-3:var(--panel-3);
  --pds-ink:var(--text);
  --pds-ink-soft:var(--muted);
  --pds-ink-faint:var(--muted-2);
  --pds-line:var(--line);
  --pds-line-soft:var(--line-soft);
  --pds-accent:var(--cyan);
  --pds-accent-2:var(--blue);

  /* semânticos — conjunto com guardrail dos 3 temas (perfectum-themes.css) */
  --pds-ok:var(--pt-status-ok,#31c98a);
  --pds-warn:var(--pt-status-warn,#e6a63a);
  --pds-danger:var(--pt-status-danger,#e35d6a);
  --pds-info:var(--pds-accent);
  /* UI-6: pares -soft (fundo) e -ink (texto sobre fundo claro) por color-mix,
     resolvidos contra o tema ativo. Substituem os color-mix inline. */
  --pds-ok-soft:color-mix(in srgb, var(--pds-ok) 15%, transparent);
  --pds-warn-soft:color-mix(in srgb, var(--pds-warn) 18%, transparent);
  --pds-danger-soft:color-mix(in srgb, var(--pds-danger) 14%, transparent);
  --pds-accent-soft:color-mix(in srgb, var(--pds-accent) 12%, transparent);
  --pds-ok-ink:var(--pt-status-ok-ink, var(--pds-ok));
  --pds-warn-ink:var(--pt-status-warn-ink, var(--pds-warn));
  --pds-danger-ink:var(--pt-status-danger-ink, var(--pds-danger));

  /* ======================================================================
     NOVO — vocabulário que hoje não existe. Puramente aditivo: nada consome
     estes tokens ainda; ficam disponíveis para UI-3 (Componentes).
     ====================================================================== */

  /* tipografia */
  --pds-font-sans:'Inter',ui-sans-serif,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  --pds-font-mono:ui-monospace,'SFMono-Regular','Cascadia Code','Roboto Mono',Menlo,Consolas,'Liberation Mono',monospace;
  --pds-fs-caption:12px;   /* piso absoluto de texto */
  --pds-fs-sm:13px;
  --pds-fs-body:14px;
  --pds-fs-lg:16px;
  --pds-fs-h3:18px;
  --pds-fs-h2:22px;
  --pds-fs-h1:28px;
  --pds-fs-display:34px;
  --pds-lh-tight:1.2;
  --pds-lh-body:1.55;
  --pds-weight-regular:400;
  --pds-weight-medium:500;
  --pds-weight-semibold:600;
  --pds-tracking-label:.08em;

  /* espaço — escala base 4px */
  --pds-space-1:4px;
  --pds-space-2:8px;
  --pds-space-3:12px;
  --pds-space-4:16px;
  --pds-space-5:24px;
  --pds-space-6:32px;
  --pds-space-7:48px;

  /* raio */
  --pds-radius-sm:8px;    /* input, chip */
  --pds-radius-md:12px;   /* card, alerta */
  --pds-radius-lg:16px;   /* hero, modal */
  --pds-radius-pill:999px;

  /* elevação — 3 níveis */
  --pds-elev-0:none;
  --pds-elev-1:0 1px 2px rgba(8,16,24,.10), 0 10px 28px rgba(8,16,24,.10);
  --pds-elev-2:0 2px 6px rgba(8,16,24,.14), 0 22px 52px rgba(8,16,24,.20);

  /* foco de teclado */
  --pds-focus-color:var(--pds-accent);
  --pds-focus-width:2px;
  --pds-focus-offset:2px;

  /* movimento */
  --pds-dur-fast:.12s;
  --pds-dur:.18s;
  --pds-ease:cubic-bezier(.2,0,0,1);
}

/* UI-6 · utilitários de espaçamento — substituem style="margin-*" avulsos.
   Escala 4px. Só margem: layout de grade/flex continua nos <style>/classes. */
.pds-mt-0{margin-top:0}.pds-mt-1{margin-top:var(--pds-space-1)}.pds-mt-2{margin-top:var(--pds-space-2)}
.pds-mt-3{margin-top:var(--pds-space-3)}.pds-mt-4{margin-top:var(--pds-space-4)}.pds-mt-5{margin-top:var(--pds-space-5)}.pds-mt-6{margin-top:var(--pds-space-6)}
.pds-mb-0{margin-bottom:0}.pds-mb-1{margin-bottom:var(--pds-space-1)}.pds-mb-2{margin-bottom:var(--pds-space-2)}
.pds-mb-3{margin-bottom:var(--pds-space-3)}.pds-mb-4{margin-bottom:var(--pds-space-4)}.pds-mb-5{margin-bottom:var(--pds-space-5)}.pds-mb-6{margin-bottom:var(--pds-space-6)}
.pds-mtauto{margin-top:auto}.pds-w100{width:100%}

/* Executive Light: sombras precisam de tinta fria, não preto puro. */
html[data-perfectum-theme="light"]{
  --pds-elev-1:0 1px 2px rgba(25,45,70,.06), 0 10px 28px rgba(25,45,70,.08);
  --pds-elev-2:0 2px 6px rgba(25,45,70,.08), 0 22px 52px rgba(25,45,70,.12);
}

/* =============================================================================
   PRIMITIVAS GLOBAIS DE HIGIENE — sem regressão de layout
   ========================================================================== */

/* (b) Foco de teclado visível. outline não afeta o fluxo; segue o border-radius
   do elemento. Clique de mouse não dispara (só :focus-visible). */
:focus-visible{
  outline:var(--pds-focus-width) solid var(--pds-focus-color);
  outline-offset:var(--pds-focus-offset);
}
:focus:not(:focus-visible){outline:none;}

/* (c) Respeitar prefers-reduced-motion. Mantém os estados finais; só corta o
   movimento. Os !important aqui são o padrão canônico da regra, não override
   de tema. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    scroll-behavior:auto!important;
  }
}

/* (d) Normalização de alertas: .error passa a ler como erro; .info fica
   explícito (visualmente idêntico ao .alert base de hoje). A cobertura por
   tema de .alert.error vive em perfectum-themes.css. */
.alert.error{
  border-color:color-mix(in srgb, var(--pds-danger) 42%, transparent);
  border-left-color:var(--pds-danger);
}
.alert.info{
  border-left-color:var(--pds-accent);
}
