@aurea-uds/core 0.42.0 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/aurea.css +70 -29
  2. package/package.json +1 -1
package/dist/aurea.css CHANGED
@@ -797,6 +797,13 @@ img,svg { display:block; }
797
797
  .topbar-tabs { flex-basis:100%; display:flex; align-items:flex-end; gap:var(--space-1); min-block-size:var(--space-10);
798
798
  overflow-x:auto; overflow-y:hidden; }
799
799
  @media (min-width:768px) { .topbar-tabs { gap:var(--space-3); } }
800
+ /* A PONTA DA LINHA DAS ÁREAS (`Header tabsEnd`, bloco 1 — 23/10/2026): a chave Web | Native da documentação da
801
+ referência, do lado oposto das áreas e no meio da altura da linha. As áreas continuam rolando de lado quando não cabem;
802
+ a ponta não encolhe. Abaixo de 768 ela some, como lá. */
803
+ .topbar-tabs-row { flex-basis:100%; display:flex; align-items:center; gap:var(--space-4); min-inline-size:0; }
804
+ .topbar-tabs-row > .topbar-tabs { flex:1 1 auto; min-inline-size:0; }
805
+ .topbar-tabs-end { flex:none; }
806
+ @media (max-width:767px) { .topbar-tabs-end { display:none; } }
800
807
  .topbar-tab { position:relative; flex-shrink:0; display:inline-flex; align-items:center; gap:var(--space-2);
801
808
  padding:0 var(--space-1) calc(var(--space-2) + var(--focus-width)); color:var(--muted-foreground); font-size:var(--text-sm);
802
809
  font-weight:var(--weight-medium); white-space:nowrap; text-decoration:none; }
@@ -1678,24 +1685,19 @@ img,svg { display:block; }
1678
1685
  Aurea não tinha o botão de ação secundária mais comum do mercado — contorno na cor da marca.
1679
1686
  Nada de novo aqui: mesma receita do par `danger-*` logo abaixo, com o token do outro tom, e o
1680
1687
  texto em `--primary` já era precedente do `.btn-link-primary`. */
1681
- .btn-primary-outline { --btn-bg:transparent; --btn-fg:var(--primary); --btn-border:var(--primary); }
1688
+ .btn-primary-outline { --btn-bg:transparent; --btn-fg:var(--primary-emphasis); --btn-border:var(--primary-emphasis); }
1682
1689
  .btn-primary-outline:hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--primary) 14%, transparent); }
1683
- .btn-primary-ghost { --btn-bg:transparent; --btn-fg:var(--primary); --btn-border:transparent; }
1690
+ .btn-primary-ghost { --btn-bg:transparent; --btn-fg:var(--primary-emphasis); --btn-border:transparent; }
1684
1691
  .btn-primary-ghost:hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--primary) 14%, transparent); }
1685
1692
  .btn-danger-outline { --btn-bg:transparent; --btn-fg:var(--danger-400); --btn-border:var(--danger-400); }
1686
1693
  .btn-danger-outline:hover:not(:disabled):not([aria-disabled="true"]) { --btn-bg:color-mix(in oklab, var(--destructive) 14%, transparent); }
1687
1694
  .btn-danger-ghost { --btn-bg:transparent; --btn-fg:var(--danger-400); --btn-border:transparent; }
1688
1695
  .btn-danger-ghost:hover:not(:disabled):not([aria-disabled="true"]) { --btn-bg:color-mix(in oklab, var(--destructive) 14%, transparent); }
1689
1696
  [data-theme="light"] .btn-danger-outline:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-danger-ghost:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-link-danger:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-fg:var(--danger-400); }
1690
- /* A MESMA correção para a marca, que estava faltando. Medido em 21/08/2026 na varredura de AA
1691
- da matriz de tom: `.btn-primary-outline` e `.btn-primary-ghost` pintavam o rótulo com
1692
- `--primary` cru, e no tema claro isso dá **1.73:1** — reprovação grave, em componente
1693
- publicado. O `.btn-link-primary` logo abaixo já tinha a correção; as duas irmãs nasceram sem
1694
- ela. Não é conserto local: é a mesma pergunta do §21 — quem MAIS tem esse problema? — e a
1695
- resposta foram estas duas, mais a borda, que é componente de UI e pede 3:1. */
1696
- [data-theme="light"] .btn-primary-outline:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-primary-ghost:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
1697
- [data-theme="light"] .btn-primary-outline:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-border:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
1698
- [data-theme="light"] .btn-outline.btn-tone-brand:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-border:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
1697
+ /* A LETRA DA MARCA nos botões sem caixa é a de DESTAQUE (ADR-0081, 24/10/2026 — a ADR-0076 aplicada a eles): o azul no
1698
+ claro, o amarelo no escuro, e na `lory` o laranja escuro dela. De 21/08 até aqui, o claro levava a mistura marrom
1699
+ (a marca a 45% no texto): passava sobre a página e caía para 4,22 dentro da barra de ferramentas; o azul dá 4,69. O
1700
+ `--primary-outline` não serve de letra: na `lory` ele é translúcido (é do contorno). */
1699
1701
  /* LINK: aparência de texto, sem cápsula e sem altura de controle — o sublinhado é o que diz
1700
1702
  que é clicável, então ele existe desde o repouso (revelar no hover esconde a affordance).
1701
1703
  Três tons: neutro, marca e destrutivo. No claro a marca aprofunda, senão não passa o AA. */
@@ -1704,8 +1706,7 @@ img,svg { display:block; }
1704
1706
  prosa, e media 67×13px. O texto continua onde está — a caixa cresce centrada nele. */
1705
1707
  .btn-link { height:auto; min-height:24px; padding:0; gap:6px; border:0; border-radius:var(--radius-sm); --btn-bg:transparent; --btn-fg:var(--foreground); text-decoration:underline; text-underline-offset:3px; text-decoration-thickness:1px; }
1706
1708
  .btn-link:hover:not(:disabled):not([aria-disabled="true"]) { text-decoration-thickness:2px; }
1707
- .btn-link-primary { --btn-fg:var(--primary); }
1708
- [data-theme="light"] .btn-link-primary:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
1709
+ .btn-link-primary { --btn-fg:var(--primary-emphasis); }
1709
1710
  .btn-link-danger { --btn-fg:var(--danger-400); }
1710
1711
  /* pressed entra na linguagem única de "selecionado" acima; só-ícone não leva o fio. */
1711
1712
  /* Kbd — a tecla que dispara a ação, dentro ou fora do botão. Peça própria, não decoração.
@@ -1765,9 +1766,8 @@ img,svg { display:block; }
1765
1766
  token de tom (`--success`) é o FUNDO cheio — a mesma cor funda nos dois temas —, e não serve
1766
1767
  de letra no escuro. Letra, ícone, borda e barra sobre a superfície usam o par de letra
1767
1768
  (`--success-400`, `--info-400`, `--warning-400`, `--danger-400`), que cada tema ajusta. */
1768
- .btn-tone-brand,.btn-tone-brand:hover:not(:disabled) { --btn-fg:var(--primary); }
1769
- [data-theme="light"] .btn-tone-brand:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-tone-brand:hover:not(:disabled):where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
1770
- .btn-outline.btn-tone-brand { --btn-border:var(--primary); }
1769
+ .btn-tone-brand,.btn-tone-brand:hover:not(:disabled) { --btn-fg:var(--primary-emphasis); }
1770
+ .btn-outline.btn-tone-brand { --btn-border:var(--primary-emphasis); }
1771
1771
  .btn-tone-brand:not(.btn-link):hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--primary) 14%, transparent); }
1772
1772
  .btn-tone-danger,.btn-tone-danger:hover:not(:disabled) { --btn-fg:var(--danger-400); }
1773
1773
  [data-theme="light"] .btn-tone-danger:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-tone-danger:hover:not(:disabled):where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --btn-fg:var(--danger-400); }
@@ -2385,13 +2385,19 @@ img,svg { display:block; }
2385
2385
  /* A borda transparente de 1 (as abas não têm) entra no recheio: 1 + 3 = os 4 da referência, e o
2386
2386
  trilho mede 40 como o das abas — sem o desconto, 42 (a geometria pegou). */
2387
2387
  .segmented { display:inline-flex; gap:0; padding:calc(var(--space-1) - var(--border-width)); border-radius:var(--radius-control); background:var(--muted); border:var(--border-width) solid transparent; box-shadow:none; }
2388
- .segmented button { min-block-size:var(--control-h-sm); padding:0 var(--space-4); border:0; border-radius:var(--radius-control); color:var(--muted-foreground); background:transparent; font-weight:var(--weight-medium); cursor:pointer; }
2389
- .segmented button.active { color:var(--foreground); background:var(--segment); box-shadow:var(--shadow-sm); border:0; }
2388
+ .segmented :is(button,a) { min-block-size:var(--control-h-sm); padding:0 var(--space-4); border:0; border-radius:var(--radius-control); color:var(--muted-foreground); background:transparent; font-weight:var(--weight-medium); cursor:pointer; }
2389
+ .segmented :is(button,a).active { color:var(--foreground); background:var(--segment); box-shadow:var(--shadow-sm); border:0; }
2390
2390
  /* `fullWidth` (A5, 06/10/2026): ocupa a linha, e cada segmento cresce a partir do rótulo sem
2391
2391
  encolher abaixo dele — o mesmo desenho do nativo. `1 0 auto` e não `1` (= `1 1 0%`): base zero
2392
2392
  reparte a largura em partes iguais, e é isso que quebrava o rótulo no nativo rodando no
2393
2393
  navegador. Quando não cabe, rola pela regra de tela estreita, como sem a prop. */
2394
- .segmented-full { display:flex; } .segmented-full button { flex:1 0 auto; }
2394
+ .segmented-full { display:flex; } .segmented-full :is(button,a) { flex:1 0 auto; }
2395
+ /* A CÁPSULA QUE NAVEGA (bloco 1, o 5-A — 23/10/2026): com `href` nos itens, o `SegmentedControl` é um <nav> de links — a
2396
+ chave Web | Native do site, a peça "Tabs em pílula" da referência na ponta da linha das áreas. O link tem a pele do
2397
+ segmento; o atual leva `aria-current="page"` e a mesma marca do escolhido. */
2398
+ .segmented a { display:inline-flex; align-items:center; justify-content:center; gap:var(--space-1); text-decoration:none; }
2399
+ /* `size="sm"`: a da referência (abas de 24 numa cápsula de 32, letra 14) — a altura do controle `xs` da densidade. */
2400
+ .segmented-sm :is(button,a) { min-block-size:var(--control-h-xs); padding:0 var(--space-4); font-size:var(--text-sm); }
2395
2401
  /* Toggle (Lote 1): pressionado usa o MESMO par de tokens do segmento aceso, logo acima. Um
2396
2402
  toggle solto e um segmento selecionado dizem a mesma coisa — se parecessem diferentes, o
2397
2403
  sistema teria dois idiomas para "isto está ligado". O estado vem do motor (`data-pressed`),
@@ -2405,12 +2411,12 @@ img,svg { display:block; }
2405
2411
  grita mais que o próprio rótulo. No tema CLARO o amarelo puro como texto dá 1.6:1, longe
2406
2412
  dos 4.5:1 do AA, então o rótulo aprofunda com --foreground e segue âmbar. */
2407
2413
  .is-selected,.btn-nav[aria-current]:not([aria-current="false"]),.btn[aria-pressed="true"],
2408
- .segmented button.active { --btn-bg:var(--secondary); --btn-fg:var(--primary); position:relative; background:var(--secondary); color:var(--primary); }
2414
+ .segmented :is(button,a).active { --btn-bg:var(--secondary); --btn-fg:var(--primary); position:relative; background:var(--secondary); color:var(--primary); }
2409
2415
  /* A CÁPSULA ELEVADA que a regra acima promete, e que no trilho não se via (ADR-0059, 08/10/2026):
2410
2416
  o segmento aceso e a aba escolhida vivem sobre --muted, e --secondary dava 1:1 contra ele no
2411
2417
  claro e 1,02:1 no escuro. Sobre o trilho a cápsula é --segment, com a sombra pequena — como a
2412
2418
  aba da referência principal. O rótulo na cor da marca e o fio continuam. */
2413
- .segmented button.active { --btn-bg:var(--segment); background:var(--segment); box-shadow:var(--shadow-sm); }
2419
+ .segmented :is(button,a).active { --btn-bg:var(--segment); background:var(--segment); box-shadow:var(--shadow-sm); }
2414
2420
  /* O TOGGLE LIGADO tem fundo próprio (0.32.0). Com o solto no fundo neutro (o `default` da referência),
2415
2421
  o cinza do "selecionado" acima deixava ligado e desligado com o MESMO fundo — só a letra e o fio
2416
2422
  mudavam, e o `skin.spec` cobra que o ligado pareça ligado pelo fundo. O ligado dela é o tom suave
@@ -2439,7 +2445,7 @@ img,svg { display:block; }
2439
2445
  saíram com a mesma cor. Com o `:not` ela pesa (0,3,1) e só alcança quem está em repouso. */
2440
2446
  [data-theme="light"] .doc-nav a:not(.active):where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { color:color-mix(in oklab, var(--sidebar-foreground) 72%, transparent); }
2441
2447
  .is-selected::after,.btn-nav[aria-current]:not([aria-current="false"])::after,
2442
- .btn[aria-pressed="true"]:not(.btn-icon)::after,.segmented button.active::after,.tabs-secondary .tab[data-active]::after,
2448
+ .btn[aria-pressed="true"]:not(.btn-icon)::after,.segmented :is(button,a).active::after,.tabs-secondary .tab[data-active]::after,
2443
2449
  .doc-nav a.active::after,.sidebar-item[aria-current]::after { content:""; position:absolute; inset-inline:15px; bottom:0; height:2px; border-radius:var(--radius-full); background:color-mix(in oklab, var(--primary) 75%, transparent); }
2444
2450
  /* e o fio do ativo da lateral segue a marca DELA, pelo mesmo motivo da regra de cor acima. */
2445
2451
  .doc-nav a.active::after,.sidebar-item[aria-current]::after { background:var(--sidebar-current-line, color-mix(in oklab, var(--sidebar-primary) 75%, transparent)); }
@@ -2451,7 +2457,7 @@ img,svg { display:block; }
2451
2457
  botão: o azul sobre o amarelo mede 3,49:1 — o axe da varredura achou, no "12" do exemplo da `Sidebar`. */
2452
2458
  [data-theme="light"] :is(.sidebar-item[aria-current],.doc-nav a.active):not(:where([data-brand],[data-brand] *)):where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *) { --sidebar-current-line:transparent; --primary-emphasis:var(--primary-foreground); --sidebar-primary:var(--primary-foreground); background:var(--primary); color:var(--primary-foreground); }
2453
2459
  [data-theme="light"] .is-selected:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .btn-nav[aria-current]:not([aria-current="false"]):where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),
2454
- [data-theme="light"] .btn[aria-pressed="true"]:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .segmented button.active:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *)
2460
+ [data-theme="light"] .btn[aria-pressed="true"]:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *),[data-theme="light"] .segmented :is(button,a).active:where(:not([data-theme="dark"] *),[data-theme="dark"] [data-theme="light"] *)
2455
2461
  { --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); color:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
2456
2462
  /* A NAV DA LATERAL SAIU DESTA LISTA em 20/08/2026. O ajuste existe porque o amarelo puro não se lê
2457
2463
  sobre o claro — mas ele mistura o `--foreground` da PÁGINA, e o item da lateral não está sobre a
@@ -2544,9 +2550,13 @@ img,svg { display:block; }
2544
2550
  seis deixam o contador sobre a superfície da barra, onde ele já se lê. */
2545
2551
 
2546
2552
  .badge-success { --badge-accent:var(--success-400); --badge-fill:var(--success); --badge-on:var(--success-foreground); color:var(--success-400); background:var(--success-bg); border-color:transparent; }
2547
- .badge-warning { --badge-accent:var(--warning-400); --badge-fill:var(--warning); --badge-on:var(--warning-foreground); color:var(--warning-400); background:var(--warning-bg); border-color:transparent; }
2553
+ .badge-warning,.badge-paused { --badge-accent:var(--warning-400); --badge-fill:var(--warning); --badge-on:var(--warning-foreground); color:var(--warning-400); background:var(--warning-bg); border-color:transparent; }
2548
2554
  .badge-danger { --badge-accent:var(--danger-400); --badge-fill:var(--destructive); --badge-on:var(--destructive-foreground); color:var(--danger-400); background:var(--danger-bg); border-color:transparent; }
2549
2555
  .badge-info,.badge-running { --badge-accent:var(--info-400); --badge-fill:var(--info); --badge-on:var(--info-foreground); color:var(--info-400); background:var(--info-bg); border-color:transparent; }
2556
+ /* Os tons de ESTADO DE TRABALHO (ADR-0081, 24/10/2026): running é o info (acima), paused o aviso, review o violeta de
2557
+ categoria, e offline o apagado — como o `Status offline`. Antes paused, offline e review saíam iguais ao neutral. O
2558
+ cheio do offline é o par do texto apagado invertido: a letra que passa sobre o fundo vira o fundo. */
2559
+ .badge-offline { --badge-accent:var(--subtle-foreground); --badge-fill:var(--muted-foreground); --badge-on:var(--background); color:var(--subtle-foreground); background:var(--fill-1); border-color:transparent; }
2550
2560
  /* AS OITO CORES DE CATEGORIA (GAR-07, ADR-0060, 09/10/2026): marcam GRUPO, não estado — "Motos" e
2551
2561
  "Carros" num site de notícias. Mesma receita dos quatro propósitos acima (acento, fundo suave e
2552
2562
  o fio misturado com a borda), e por isso as três ênfases valem para elas sem regra nova. O
@@ -2557,7 +2567,7 @@ img,svg { display:block; }
2557
2567
  .badge-teal { --badge-accent:var(--category-teal); color:var(--category-teal); background:var(--category-teal-bg); border-color:transparent; }
2558
2568
  .badge-cyan { --badge-accent:var(--category-cyan); color:var(--category-cyan); background:var(--category-cyan-bg); border-color:transparent; }
2559
2569
  .badge-blue { --badge-accent:var(--category-blue); color:var(--category-blue); background:var(--category-blue-bg); border-color:transparent; }
2560
- .badge-violet { --badge-accent:var(--category-violet); color:var(--category-violet); background:var(--category-violet-bg); border-color:transparent; }
2570
+ .badge-violet,.badge-review { --badge-accent:var(--category-violet); color:var(--category-violet); background:var(--category-violet-bg); border-color:transparent; }
2561
2571
  .badge-pink { --badge-accent:var(--category-pink); color:var(--category-pink); background:var(--category-pink-bg); border-color:transparent; }
2562
2572
  /* ── AS TRÊS ÊNFASES — e elas vêm DEPOIS das variantes de propósito ─────────────────
2563
2573
  Cada variante declara só o ACENTO; as ênfases saem dele. Antes cada variante escrevia
@@ -2939,6 +2949,12 @@ img,svg { display:block; }
2939
2949
  .avatar:is(.avatar-tone-brand,.avatar-tone-danger,.avatar-tone-success,.avatar-tone-warning,.avatar-tone-info) { color:var(--avatar-ink); }
2940
2950
  .avatar.avatar-soft { border-color:transparent; background:var(--muted); }
2941
2951
  .avatar.avatar-soft:is(.avatar-tone-brand,.avatar-tone-danger,.avatar-tone-success,.avatar-tone-warning,.avatar-tone-info) { background:color-mix(in oklab, var(--avatar-tint) 14%, transparent); }
2952
+ /* Os quatro tons de ESTADO no fundo do selo suave (o `-bg` de cada um, a receita do `Badge` — ADR-0081, 24/10/2026): com
2953
+ o tom a 14%, o info media 4,12 no claro. A marca fica na mistura: o fundo dela não tem par. */
2954
+ .avatar.avatar-soft.avatar-tone-info { background:var(--info-bg); }
2955
+ .avatar.avatar-soft.avatar-tone-success { background:var(--success-bg); }
2956
+ .avatar.avatar-soft.avatar-tone-warning { background:var(--warning-bg); }
2957
+ .avatar.avatar-soft.avatar-tone-danger { background:var(--danger-bg); }
2942
2958
  .avatar img { width:100%; height:100%; object-fit:cover; }
2943
2959
  /* LINK (0.32.0): o link de texto da referência — peso médio, a cor de link, sem sublinhado; com o mouse
2944
2960
  ou apertado, o sublinhado de 1,5 a 4 da letra, na cor esmaecida (a meia força com o mouse). A seta do
@@ -3155,6 +3171,21 @@ button.tag-main { cursor:pointer; }
3155
3171
  é inalcançável por teclado (axe scrollable-region-focusable). Quem escreve esta marcação à
3156
3172
  mão precisa de `tabindex="0"` no <pre> — o componente React já o emite. */
3157
3173
  .code-block { overflow:auto; padding:16px; border:1px solid transparent; border-radius:var(--radius-lg); background:var(--surface-inset); color:var(--muted-foreground); font:12px/1.7 var(--font-code); }
3174
+ /* O CÓDIGO EM ABAS (`CodeBlock tabs`, bloco 1 — o 3-A): a caixa é UMA — a fileira em cima e o código embaixo —, como a
3175
+ documentação da referência, medida na página dela (1280 × 663, 23/10/2026): a fileira de 37 (o texto 14, peso médio, a
3176
+ entrelinha 20 → a `--leading-normal`, 21, com 8 em cima e embaixo), as abas a 14 uma da outra e a 16 da borda; o
3177
+ código é o bloco de sempre. A fileira é um degrau acima da página e o código um acima dela (a referência: a página, a
3178
+ superfície, o código) — no texto do site, a página 31, a fileira 41 e o código 51, a cor do bloco sozinho. A escolhida
3179
+ na cor do texto, com o traço cheio de baixo, como as abas de área do site (o indicador, não uma linha — ADR-0072). */
3180
+ .code-tabs { border-radius:var(--radius-lg); background:var(--surface-1); overflow:hidden; }
3181
+ .prose .code-tabs { border-radius:var(--radius-card); }
3182
+ .code-tabs-list { display:flex; gap:calc(var(--space-3) + var(--space-05)); padding:0 var(--space-4); overflow-x:auto; }
3183
+ .code-tab { position:relative; flex:none; padding:var(--space-2) 0; border:0; background:transparent; color:var(--muted-foreground);
3184
+ font-size:var(--text-sm); font-weight:var(--weight-medium); line-height:var(--leading-normal); cursor:pointer; }
3185
+ .code-tab:hover, .code-tab.active { color:var(--foreground); }
3186
+ .code-tab.active::after { content:""; position:absolute; inset-inline:0; inset-block-end:0; block-size:var(--focus-width); background:var(--primary); }
3187
+ .code-tab:focus-visible { outline-offset:calc(-1 * var(--focus-width)); }
3188
+ .code-tabs .code-block { border-radius:0; }
3158
3189
  /* Lote V (20/10/2026): o número da linha e as cores do código (`CodeBlock lineNumbers` e `highlight`). O número é o da
3159
3190
  referência, medido na página dela: uma coluna de 16 (--space-4), alinhada à direita, a 24 do código (--space-6); ela
3160
3191
  cresce com os algarismos da última linha (`--code-line-digits`, que o componente escreve), para a coluna não pular
@@ -3191,7 +3222,7 @@ button.tag-main { cursor:pointer; }
3191
3222
  .code-preview { display:flex; flex-direction:column; block-size:var(--demo-height,auto); padding:0; overflow:hidden; }
3192
3223
  .demo-tabs { display:flex; padding:var(--space-2); border-bottom:var(--border-width) solid transparent; }
3193
3224
  .demo-tabs .segmented { flex:1; display:flex; }
3194
- .demo-tabs .segmented button { flex:1; }
3225
+ .demo-tabs .segmented :is(button,a) { flex:1; }
3195
3226
  .demo-panel { flex:1; min-height:0; overflow:auto; padding:var(--space-6); }
3196
3227
  .demo-panel[hidden] { display:none; }
3197
3228
  .demo-panel[data-panel="preview"] { display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:var(--space-4); background:var(--surface-inset); }
@@ -3200,6 +3231,11 @@ button.tag-main { cursor:pointer; }
3200
3231
  .demo-code .code-block-wrap { flex:1; }
3201
3232
  .demo-code .code-block { padding:var(--space-6); border:0; border-radius:0; }
3202
3233
  .copy-code { position:absolute; top:var(--space-3); inset-inline-end:var(--space-3); z-index:1; }
3234
+ /* O fim da linha fica fora do botão de copiar (achado no 3-A, 23/10/2026): no Quick Start, o `pnpm add` de uma linha
3235
+ terminava a 915 e o botão começava a 901 — o fim do comando ficava embaixo dele. O código reserva no fim o lugar do
3236
+ botão (a distância da borda, o botão e um vão), e a linha mais longa ROLA antes de chegar nele. Vale para todo bloco
3237
+ com copiar: o sozinho, o do texto do site (`.prose pre`) e o do exemplo (`.demo-code`) — por isso vem depois deles. */
3238
+ .code-block-wrap > .code-block { padding-inline-end:calc(var(--space-3) + var(--control-h-md) + var(--space-2)); }
3203
3239
  .copy-code .c-done { display:none; }
3204
3240
  .copy-code.is-done .c-copy { display:none; } .copy-code.is-done .c-done { display:block; color:var(--primary); }
3205
3241
  /* "On this page": índice da própria página, fixo na lateral. Navegação, não decoração —
@@ -3504,7 +3540,9 @@ button.tag-main { cursor:pointer; }
3504
3540
  /* DOC-11 (0.32.0): o `tone` do nativo, na web. `link` é o amarelo de escrever; `primary`, o de
3505
3541
  preencher (no claro quase some, como no nativo); as cores de estado, o par `-400` (ADR-0061). */
3506
3542
  .typography-tone-subtle { color:var(--subtle-foreground); }
3507
- .typography-tone-primary { color:var(--primary); }
3543
+ /* A letra do tom primary é a de DESTAQUE (ADR-0081, 24/10/2026): o azul no claro, o amarelo no escuro. Era o amarelo de
3544
+ preencher, de propósito — 1,75:1 no claro. */
3545
+ .typography-tone-primary { color:var(--primary-emphasis); }
3508
3546
  .typography-tone-link { color:var(--link); }
3509
3547
  .typography-tone-danger { color:var(--danger-400); }
3510
3548
  .typography-tone-success { color:var(--success-400); }
@@ -3521,6 +3559,11 @@ button.tag-main { cursor:pointer; }
3521
3559
  identificação, como no sistema que serviu de modelo (na tabela dele, só a coluna de número e a de valor; o resto
3522
3560
  da tabela fica no texto). Vem depois dos `.typography-h*`, e por isso o título com `numeric` também troca. */
3523
3561
  .typography-numeric { font-family:var(--font-code); font-variant-numeric:tabular-nums; }
3562
+ /* O alinhamento só existe num bloco: o `Text` (um <span>) e o `Code` (um <code>) são texto em linha, e com o
3563
+ `text-align` sozinho o `align` deles não fazia nada — achado pelo exemplo de cada valor (bloco 1, o catálogo fiel,
3564
+ 23/10/2026). Com `align`, a peça vira bloco, como já faz o `truncate`; no `Heading` e no `Paragraph`, que já são
3565
+ bloco, nada muda. */
3566
+ .typography-align-start, .typography-align-center, .typography-align-end, .typography-align-justify { display:block; }
3524
3567
  .typography-align-start { text-align:start; }
3525
3568
  .typography-align-center { text-align:center; }
3526
3569
  .typography-align-end { text-align:end; }
@@ -4614,8 +4657,6 @@ button.graph-node-body { cursor:pointer; }
4614
4657
  }
4615
4658
 
4616
4659
 
4617
- /* Aurea v1.7 stabilization patch — visual design unchanged. */
4618
- .badge-running{background:var(--success-bg);color:var(--success-400);border-color:transparent}
4619
4660
  /* superfície (overflow, borda, fundo, raio) mora junto com a do `.table-wrap` lá em cima — aqui
4620
4661
  fica só o que é DESTA região: ela é focável, e o foco dela é a linha de dentro, abaixo. Era um
4621
4662
  halo de `--focus` a 38% (B-09, 24/09/2026): claro demais para se ver, e fora do contrato de foco.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurea-uds/core",
3
- "version": "0.42.0",
3
+ "version": "0.43.0",
4
4
  "description": "O CSS da Aurea UDS e o comportamento em JavaScript puro. Importe @aurea-uds/fonts/css antes deste.",
5
5
  "keywords": [
6
6
  "aurea",