:root {
  /* 01 · blur — filter blur (desfoque: vidro fosco/backdrop) */
  --blur-sm: 4px;
  --blur-md: 8px;
  --blur-lg: 16px;

  /* 02 · bp — REMOVIDO: @media nao aceita var(), entao os --bp-* eram orfaos
     (0 uso). Breakpoints ficam LITERAIS no @media; escala canonica S3 (DESIGN-SPEC C3),
     px SEMPRE (rem dispara em ponto diferente com zoom de fonte do usuario):
       640  (sm — grids/forms/tabelas colapsam p/ 1 coluna)
       860  (md — colapso do shell sidebar->drawer; o unico breakpoint ESTRUTURAL)
       1200 (lg — degrau opcional de densidade em telas largas; 0 uso ate hoje)
     Excecao registrada: 768 na superficie PUBLICA (storefront.css x2) — fora do app.
     N-colunas se resolve por auto-fit minmax (kpi-grid/card-grid), NUNCA por @media.
     [lapide: convencao anterior "640/768/860/1024" superada no S3; 4 strays em rem
     (55/48/42.5/35rem) migrados p/ 860/860/640/640 na mesma data.] */

  /* 03 · bs — border-style (estilo da borda) */
  --bs-solid: solid;
  --bs-dashed: dashed;

  /* 04 · bw — border-width (espessura da borda) */
  /* lapide: --bw-hairline (dup literal de --bw-thin) morto no S1 — nome nao reusar */
  --bw-accent: 3px;    /* borda lateral de destaque (alert/infobox) — F3 do DESIGN-SPEC */
  --bw-thin: 1px;
  --bw-thick: 2px;

  /* 05 · c — color (cor) */
  --c-white:  #ffffff;   /* branco — superficie */
  --c-ink:    #0e2a56;   /* navy — texto / info */
  --c-yellow: #f59e0b;   /* amarelo — aviso */
  /* lapide: --c-green #007000 morto no S1 (misturava INTERACAO e ESTADO) — dividido em --c-accent (interacao) e --c-success (estado); nome nao reusar */
  /* lapide: --c-red morto no S1 — no legado era ALIAS DE VERDE (armadilha semantica) e o #7f1d1d era quase-marrom; papel perigo = --c-danger; nome nao reusar */
  --c-danger: #b91c1c;   /* vermelho de perigo — o valor que o LEGADO de fato usava onde importava (core.css:461/550) */
  --c-gray:   #64748b;   /* cinza — neutro */

  /* 05b · c (semantica) — cores DERIVADAS. Encapsulam os color-mix repetidos >=3x
     do kit: MESMO valor computado (token = a expressao exata) => 0 mudanca visual,
     muda 1x aqui. Nome = papel, nao valor. */
  --c-surface-subtle: color-mix(in srgb, var(--c-ink) 4%, var(--c-white));   /* superficie sutil (zebra/raise leve) */
  --c-surface-sunken: color-mix(in srgb, var(--c-ink) 8%, var(--c-white));   /* superficie afundada / info */
  --c-surface-hover:  color-mix(in srgb, var(--c-ink) 10%, var(--c-white));  /* fundo de hover */
  --c-surface-tint:   #f3f7ff; /* off-white AZULADO de marca (ex --c-surface-2 do legado, renomeado por papel no S1): faixa de thead/section. Literal exato, fora da curva ink-mix de proposito. */
  --c-border:         #e5e7eb; /* borda neutra = legado --c-line(--g-200) #e5e7eb; literal EXATO p/ casar o ref (era color-mix gray 20% = #e0e3e8 → drift corrigido pro valor do legado; afeta todas as bordas do projeto, só tonalidade). Fora da curva gray-mix das irmãs (-faint/-table/-strong), de propósito: match exato do legado. */
  --c-border-subtle:  color-mix(in srgb, var(--c-ink) 8%, var(--c-white));   /* borda sutil TINGIDA de navy (legado navy-wash .06-.08); ex -faint gray-mix */
  --c-border-strong:  color-mix(in srgb, var(--c-ink) 16%, var(--c-white));  /* borda que precisa aparecer (controles/tabela/popover) — UNIFICA no S1 os ex -table/-strong/-control-border (delta<=3 entre si) e -ink (lapides; nomes nao reusar) */
  --c-success-bg:     color-mix(in srgb, var(--c-success) 10%, var(--c-white));/* superficie de sucesso (rebase S1: mix sobre --c-success; ~#e8f2ed, delta 4 do legado #e8f6ee) */
  --c-accent-hover:   color-mix(in srgb, var(--c-accent) 85%, black);         /* acento ativo/hover (escurece; absorve o --c-accent-strong do legado) */
  --c-accent-soft:    color-mix(in srgb, var(--c-accent) 10%, var(--c-white));  /* wash de interacao (menu aberto, item ativo) */
  --c-danger-bg:      color-mix(in srgb, var(--c-danger) 8%, var(--c-white));   /* superficie de perigo (CRIADO no S1) */
  --c-text-placeholder: color-mix(in srgb, var(--c-ink) 45%, var(--c-white)); /* placeholder (ex --c-text-muted, renomeado: 'muted' colidia com --c-gray) */
  --c-scrim:          rgba(0,0,0,.5);                                        /* veu de overlay unico (S1: media legado .55-.65 x refac .4; absorve --op-overlay) */

  /* 05c · cores semanticas PORTADAS do legado (core.css :root de ~/crontex_from_prod_clean). Literais EXATOS, nomes do legado preservados, FORA da escala color-mix(ink,white) — decisao registrada (nao derivar/renomear/converter). Aliases do legado NAO portados: --c-danger e --c-orange (= var(--c-accent) = #007a1a, mesmo valor de --c-accent). Conflitos NAO sobrescritos (valor diverge do ref): --c-red(legado #007a1a vs ref #7f1d1d) · --c-green(legado #22c55e vs ref #007000) · --c-success-bg(legado #e8f6ee vs ref color-mix #e0eee0). */
  --c-navy:           #052450; /* azul-marinho de marca (legado :root) */
  /* lapide: --c-navy-dark morto no S1 (delta 3.2 de --c-ink — redundancia ja flagada); nome nao reusar */
  --c-accent:         #007a1a; /* VERDE-INTERACAO de marca (REVIVIDO no S1): foco global, link/hover, tab ativa, menu aberto, progresso. AA 5.5:1 */
  /* lapide: --c-accent-strong morto no S1 (absorvido por --c-accent-hover); nome nao reusar */
  --c-cta:            #2b8b67; /* verde-CTA (ex --c-btn-primary, renomeado por papel no S1): CTA de auth/marketing + accent-color de controles nativos (check/radio/switch) — 2o verde DELIBERADO do legado */
  --c-success:        #16794b; /* verde de sucesso (legado) */
  --c-warn:           #8a4b00; /* ambar/marrom de aviso (legado) */
  --c-warn-bg:        #fff1e0; /* superficie de aviso (legado) */
  --c-info:           #1e3a8a; /* azul de informacao (legado) */
  --c-info-bg:        #eff6ff; /* superficie de info (legado) — ~ --c-surface-subtle #f5f6f8 (Δ9.2): possivel redundancia (ver ADR) */
  /* lapide: --c-blue-soft morto no S1 (papel = info-bg; usos migrados p/ --c-info-bg); nome nao reusar */
  --c-cta-vivid:      #1a8cff; /* [escopo:ks_pdp_v2_ajustes2] azul vivo/saturado (estilo "abrir no
    Figma"), distinto do --c-info legado (mais escuro/menos vibrante); consumido via --sf-cta em
    storefront.css (CTA do mockup PDP v2), obrigatorio por V1 do gate G1 (0 cor literal fora de
    tokens.css) — nao remover sem verificar consumidores. */

  /* 06 · container/dim — dimension (dimensao: larguras e alturas de layout) */
  --container: 1280px;
  --sidebar-w: 264px;
  --sidebar-collapsed-w: 72px;
  --header-h: 64px;
  --logo-size: 51px;                      /* logo do topnav — quadrado (asset 1254×1254); 51 (era 61; antes 45 = legado --u-phi-2; ajuste por escolha do founder; cabe nos 64 do --header-h, align-items:center centra). Token ÚNICO do logo da navbar; consumido por .topnav__logo (shell.css, produto) e kitchen_sink.css (bancada). Auth usa .auth__logo próprio; email não consome. */
  --footer-h: 56px;
  --flyout-w: 220px;                      /* card de hover da sidebar recolhida (sidebar-popup) — min-width do .sidebar-flyout-card; medido do legado (base_app.js:169 min-width:220px) */
  --kpi-ring-size: 38px;                  /* donut do kpi de card de módulo (kpi-donut-produto) — width/height do .kpi__ring; literal de fidelidade do legado (core.css:1890) */
  --control-h: 52px;
  --control-h-lg: 60px;   /* degrau grande de altura de controle (signup) */
  --btn-h: 44px;      /* S1/R5: volta ao 44 do legado (touch-target WCAG 2.5.5) */
  --btn-h-sm: 36px;   /* S1: novo degrau (=44-8); mata 38 legado e 32 refac */
  --auth-card-w: min(440px, 100%);
  --auth-card-w-wide: min(980px, 100%);   /* signup 2-col (legado); fluido */
  --plan-card-h: 124px;                   /* altura fixa do plan-card (legado --plan-card-h) */
  --media-preview-w: 300px;               /* teto da coluna de imagem do form de produto — medido do legado (catalog.css:824 minmax(220px,300px) e :896 width:min(100%,300px)) */
  --media-preview-min-w: 220px;           /* piso da coluna de imagem (legado catalog.css:824) */

  /* 07 · dur — transition-duration (duracao do movimento) */
  --dur-fast: 150ms;
  --dur-base: 200ms;
  --dur-slow: 300ms;
  --dur-kpi-ring: 820ms;                  /* preenchimento do donut do kpi (kpi-donut-produto) — literal de fidelidade do legado (core.css:1898 animation 820ms) */

  /* 08 · ease — transition-timing-function (curva do movimento) */
  --ease-base: cubic-bezier(.4,0,.2,1);
  --ease-in: cubic-bezier(.4,0,1,1);
  --ease-out: cubic-bezier(0,0,.2,1);

  /* 09 · font — font-family (familia da fonte) */
  --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;

  /* 10 · fs — font-size (tamanho da letra) */
  --fs-11: 11px;      /* S1/T1: micro-label/overline (uppercase+ls-wide) — absorve 10/11 do legado */
  --fs-12: 12px;
  --fs-13: 13px;
  --fs-14: 14px;
  --fs-16: 16px;
  --fs-20: 20px;
  --fs-24: 24px;
  /* lapide: --fs-32 (display/kpi-hero, criado pela proposta T1 do DESIGN-SPEC) morto no L3
     [escopo:l3-canonicalize-token-and-css-ownership] — 0 consumidores em css/templates/js/py
     desde a criacao; recriar SO quando o papel display ganhar consumidor real. Nome nao reusar. */

  /* 11 · fw — font-weight (peso da letra) */
  --fw-regular: 400;
  --fw-medium: 500;
  --fw-semibold: 600;
  --fw-bold: 700;
  --fw-extrabold: 800;

  /* 12 · gradient — linear-gradient (gradiente) */
  --gradient-brand: linear-gradient(135deg, #0e2a56, #1e3a8a);
  --gradient-fade: linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,.08));

  /* 13 · grid — larguras minimas dos grids auto-fit (DESIGN-SPEC C5: 3 grids canonicos —
     form-grid explicito · kpi-grid auto-fit · card-grid auto-fit; gaps vem da escala --sp) */
  /* lapide: --grid-cols (12) morto no S3 — sistema 12-col aposentado (span-6 == form-grid--2,
     indirecao redundante; 1 uso, kitchen). Nome nao reusar. */
  /* lapide: --gutter (24px) morto no S3 — calha nao e conceito proprio, gap vem da escala
     --sp (C6); 1 uso, kitchen. Nome nao reusar. */
  --kpi-min: 144px;      /* menor largura util de um .kpi; desfaz o acoplamento semantico
                            falso calc(--sidebar-collapsed-w*2) que coincidia em 144 (C5) */
  --card-min: 320px;     /* menor largura util de um card de modulo no .card-grid (C1) */

  /* icon — icon-size (so o TAMANHO do icone; o desenho vem da font, a cor de --c-*) */
  --icon-sm: 18px;
  --icon-md: 20px;
  --icon-lg: 24px;
  --icon-xl: 32px;

  /* 14 · lh — line-height (altura da linha) */
  --lh-tight: 1.2;
  --lh-base: 1.5;
  --lh-relaxed: 1.7;

  /* 15 · ls — letter-spacing (espaco entre letras) */
  --ls-tight: -0.02em;
  --ls-normal: 0;
  --ls-wide: 0.05em;

  /* 16 · measure — max-width de texto (largura de leitura) */
  --measure: 70ch;   /* S3/C4: role prose 16/lh-relaxed/~70ch (legado declarava 72ch; era 68) */

  /* 17 · op — opacity (opacidade) */
  --op-disabled: 0.5;
  --op-muted: 0.65;
  /* lapide: --op-overlay morto no S1 (conceito duplicado com --c-scrim) */

  /* 18 · r — radius POR FAMILIA (F1-fix, 3a correcao-por-evidencia do dono, 2026-07-04).
     O legado NUNCA teve raio unico: core.css:87-95 declara --r-sm:8 (controles),
     --r-md:0 e --r-lg:0 (containers RETOS), --r-legacy-12 (popovers), --r-legacy-14
     (side-link/toast). O refac leu "14" (raio de sidebar) como padrao universal =
     sobre-generalizacao de CONTROLE p/ CONTAINER. Valores abaixo = computed MEDIDO
     no legado :8000 (playwright, sessao master), zero chute. */
  --r-sm: 4px;         /* minis: chips/sublink (legado tem 4px em app.css:965/971) */
  --r-container: 0;    /* containers RETOS como o legado: card/kpi/card-modulo/form/wrapper-tabela/modal/upload/alert/inline-form/kanban (medido: 0px em TODAS; legado --r-md/--r-lg:0, core.css:88-89) */
  --r-control: 8px;    /* controles: btn texto/input/select/busca/bulk-bar (medido: 8px; legado --r-sm:8, core.css:87) */
  --r-pop: 12px;       /* popovers e bolha de chat: ui-actions-pop/ui-filter-pop/chat-bubble (medido: 12px; legado --r-legacy-12, core.css:94) */
  /* lapide: --r-card-elevated morto em corrigir-sombra-lista-cards-referencia-card — .table--cards
     passou a usar radius 0 (paridade exata com .card, --r-container), sem exceção ao contrato de
     containers retos; nome não reusar */
  --r-nav: 14px;       /* item de navegacao da sidebar + toast (medido: 14px; legado --r-legacy-14, core.css:95) — o UNICO 14 real do legado */
  /* lapide: --r-md 14px morto no F1-fix — "14 pra tudo (controles, cards, inputs, dropdowns)" era leitura ERRADA do legado (padrao fix-b2/b8: componente lido como default global); nome nao reusar */
  /* lapide: --r-lg 12px morto no S1; o papel real dele (popover) renasceu como --r-pop no F1-fix */
  --r-pill: 9999px;
  --r-circle: 50%;

  /* 19 · ratio — aspect-ratio (proporcao de caixa) */
  --ratio-square: 1 / 1;
  --ratio-video: 16 / 9;
  --ratio-golden: 1.618 / 1;

  /* 20 · ring — outline (anel de foco) */
  --ring-w: 2px;
  --ring-offset: 2px;
  --ring-color: rgba(0,122,26,.55);   /* S1: foco VERDE-marca (assinatura do legado: outline accent global) — era azul-info */

  /* 21 · shadow — box-shadow (sombra: elevacao) */
  /* familia NAVY do legado (ADR-0025 D5 legado; S1/F2 — sombras tingidas harmonizam com bordas/washes navy) */
  --shadow-sm: 0 2px 8px rgba(6,27,66,.06);
  --shadow-md: 0 4px 14px rgba(6,27,66,.08);
  --shadow-lg: 0 12px 28px rgba(6,27,66,.12);
  --shadow-pop: 0 16px 42px rgba(6,27,66,.18);
  --shadow-container: 0 10px 30px rgba(6,27,66,.10);   /* F1-fix: sombra do section-card do legado (.card.pop; = --shadow-legacy-md core.css:104) — medida computed :8000 monitor/painel */
  --shadow-control: 0 1px 1px rgba(6,27,66,.06);   /* L3: sombra sutil de controle (btn-estilo-control) — era literal em components.css:48; mesma familia navy, valor identico */
  /* lapides: --shadow-xs (->sm) e --shadow-xl (->pop) mortos no S1 · --shadow-list-header
     (0 8px 18px -2px rgba(6,27,66,.18)) morto no L3 [escopo:l3-canonicalize-token-and-css-ownership]:
     orfao desde [lista-sombra-cards-monitor] 2026-07-23c (0 consumidores; remocao ja adiada 2x,
     KI-0014); valor preservado nesta lapide caso o dono reabra. Nomes nao reusar. */

  /* 22 · sp — spacing (espacamento: padding, margin, gap) */
  --sp-0: 0;
  --sp-2: 2px;
  --sp-4: 4px;
  --sp-6: 6px;
  --sp-7: 7px;   /* card-v2-icones-7-fullbleed: offset dos ícones favorito/share do card de listagem storefront (topo e lateral do glifo) */
  --sp-8: 8px;
  --sp-10: 10px;
  --sp-12: 12px;
  --sp-14: 14px;
  --sp-16: 16px;
  --sp-18: 18px;
  --sp-20: 20px;
  --sp-24: 24px;
  --sp-28: 28px;
  --sp-32: 32px;
  --sp-48: 48px;   /* L3: degrau alto (hero/section do storefront). CORRECAO DE BUG: storefront.css E0.4 ja consumia var(--sp-48) em clamp() SEM o token existir — var indefinida invalida a declaracao inteira (IACVT) e o padding do .sf-hero--immersive__content computava 0 no desktop; definir o token restaura o clamp autoral (delta visual EXPLICADO do L3, so hero imersivo da vitrine publica). */

  /* 23 · z — z-index (empilhamento de camadas) */
  --z-base: 0;
  --z-popover: 50;        /* overlays locais (combo/selectlist/modal-board) acima do conteudo */
  --z-dropdown: 1000;
  --z-sticky: 1020;
  --z-modal: 1050;
  --z-toast: 1080;

  /* 24 · sf — STOREFRONT (vitrine publica). MOVIDO de storefront.css no L3
     [escopo:l3-canonicalize-token-and-css-ownership]: tokens.css e o owner unico de
     custom property visual em :root (ADR-0041.3); o namespace --sf-* permanece
     (identidade propria da vitrine, ADR-0039), so a DEFINICAO muda de casa.
     Escopo :root PRESERVADO (ja era global; a bancada consome --sf-* fora de
     body.storefront via .sf-frame — escopar quebraria o kitchen-sink).
     Mapeamento --sf-* → --c-*: paper→--c-white, mist→--c-border-subtle,
     slate→--c-gray, accent→--c-accent. Graphite e o UNICO neutro contextual do
     storefront (hex permitido: este arquivo e o owner de valor); --c-ink/--c-navy
     permanecem azuis no contrato global. Familia tipografica herdada: var(--font-sans). */
  /* tipografia da vitrine */
  --sf-fs-display: clamp(32px, 5vw, 56px);
  --sf-fw-display: 600;
  --sf-fs-title: clamp(24px, 3vw, 32px);
  --sf-fw-title: 600;
  --sf-fs-eyebrow: 12px;
  --sf-fw-eyebrow: 600;
  --sf-ls-eyebrow: 0.08em;
  --sf-fs-body: 16px;
  --sf-fs-meta: 13px;
  --sf-fs-price-card: 16px;
  --sf-fs-price-pdp: clamp(22px, 3vw, 28px);
  --sf-fw-price: 700;
  /* cores — aliases da casa + um neutro contextual exclusivo da vitrine */
  --sf-paper: var(--c-white);
  --sf-graphite: #2b2b2b;
  --sf-ink: var(--sf-graphite);
  --sf-mist: var(--c-border-subtle);
  --sf-slate: var(--c-gray);
  --sf-accent: var(--c-accent);
  /* layout */
  --sf-section-gap: 64px;
  --sf-section-gap-desk: 96px;   /* token dedicado (padrao da casa: cada degrau nomeado) */
  --sf-container-max: 1280px;
  --sf-card-list-min: 150px;      /* largura mínima semântica dos cards da listagem pública */
  /* aspects (ar) da vitrine */
  --ar-hero: 3/2;
  --ar-card: 4/5;
  /* lapides L3: --ar-square (1/1; papel ja coberto por --ratio-square) e --ar-og (1.91/1)
     mortos — 0 consumidores em css/templates/js/py. Nomes nao reusar. */
  /* motion (E0.4; easing padrao: var(--ease-out)) */
  --sf-motion-fast: 200ms;
  --sf-motion-med: 400ms;
  /* lapides L3: --sf-hero-h (70svh) e --sf-hero-h-desk (80svh) mortos — a altura do hero
     imersivo passou a formula min(82svh, 100svh - peek) no E0.6 e os tokens ficaram com 0
     consumidores (ja eram orfaos na origem storefront.css). Nomes nao reusar. */
  /* avatar/monograma de identidade do tenant (E0.5a) */
  --sf-avatar: 32px;
  --sf-avatar-sm: 28px;
  --sf-avatar-lg: 40px;
  /* altura do header da vitrine (E0.6) — referencia --header-h (topnav real), mesmo valor */
  --sf-header-h: var(--header-h);
}
