@aurea-uds/core 0.42.0 → 0.44.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 +141 -33
  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; }
@@ -1119,7 +1126,12 @@ img,svg { display:block; }
1119
1126
  .sidebar-list { display:flex; flex-direction:column; gap:var(--space-1); margin:0; padding:0; list-style:none; }
1120
1127
  /* `width:100%` + `font:inherit` + `border:0`: o item também é <button> quando não navega, e
1121
1128
  sem isto o botão vem com a caixa do navegador e quebra a fila. */
1122
- .sidebar-item { display:flex; align-items:center; gap:var(--space-2); width:100%; min-height:var(--control-h-md); padding:var(--space-1) var(--space-3); border:0; border-radius:calc(var(--radius-card) - var(--space-1)); background:transparent; color:var(--sidebar-foreground); font:inherit; font-size:var(--text-sm); text-align:start; text-decoration:none; cursor:pointer; }
1129
+ /* 2-A (o item 102, 25/10/2026): o texto do item começa a `--sidebar-item-x` da borda dele, e o fio do item escolhido começa
1130
+ no mesmo ponto. Era 12 o texto e 15 o fio (um número cru): o Victor viu que não começavam juntos. Com 16 (`--space-4`) os
1131
+ dois começam onde a curva da cápsula já acabou (a 16 da borda o fundo fica 0,11 px acima da base) — a 12 o fio sairia da
1132
+ curva. O título do grupo, a marca e o título do painel seguem o mesmo recuo, para a coluna continuar uma só. */
1133
+ .sidebar { --sidebar-item-x:var(--space-4); }
1134
+ .sidebar-item { display:flex; align-items:center; gap:var(--space-2); width:100%; min-height:var(--control-h-md); padding:var(--space-1) var(--sidebar-item-x, var(--space-3)); border:0; border-radius:calc(var(--radius-card) - var(--space-1)); background:transparent; color:var(--sidebar-foreground); font:inherit; font-size:var(--text-sm); text-align:start; text-decoration:none; cursor:pointer; }
1123
1135
  .sidebar-item .icon { flex:none; opacity:.8; }
1124
1136
  /* min-width:0 é o que deixa o ellipsis funcionar dentro do flex; sem ele o nome longo empurra
1125
1137
  o acessório para fora da caixa em vez de cortar. */
@@ -1162,7 +1174,7 @@ img,svg { display:block; }
1162
1174
  /* O título de grupo da lateral é o da referência (ADR-0067, decisão do Victor de 13/10/2026: "igual ao dela"):
1163
1175
  letra 14, peso médio, SEM maiúsculas, na cor do texto da lateral — mais forte que o item, que é
1164
1176
  esmaecido; 16 antes do grupo. Era 12, em maiúsculas espaçadas, esmaecido. */
1165
- .sidebar-group-label { margin:var(--space-4) var(--space-3) var(--space-1); color:var(--sidebar-foreground); font-size:var(--text-sm); font-weight:var(--weight-medium); }
1177
+ .sidebar-group-label { margin:var(--space-4) var(--sidebar-item-x, var(--space-3)) var(--space-1); color:var(--sidebar-foreground); font-size:var(--text-sm); font-weight:var(--weight-medium); }
1166
1178
  .sidebar-sub { padding-inline-start:var(--space-5); }
1167
1179
  /* RECOLHIDA — a lateral vira trilho de ícones. O rótulo NÃO some do DOM: o React troca a
1168
1180
  classe dele por `.sr-only`, então quem usa leitor de tela continua ouvindo o nome. Ícone
@@ -1188,7 +1200,7 @@ img,svg { display:block; }
1188
1200
  .sidebar-body { flex:1 1 auto; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:var(--space-1); }
1189
1201
  .sidebar-footer { gap:var(--space-3); padding-block-start:var(--space-3); }
1190
1202
  /* A marca do app: o quadrinho na cor primária, com a letra na fonte de título, o nome e o subtítulo. */
1191
- .sidebar-brand { display:flex; align-items:center; gap:var(--space-3); min-width:0; padding:var(--space-2) var(--space-3); }
1203
+ .sidebar-brand { display:flex; align-items:center; gap:var(--space-3); min-width:0; padding:var(--space-2) var(--sidebar-item-x, var(--space-3)); }
1192
1204
  .sidebar-brand-logo { display:grid; place-items:center; flex:none; inline-size:var(--control-h-md); block-size:var(--control-h-md); overflow:hidden; border-radius:var(--radius-lg); background:var(--primary); color:var(--primary-foreground); font-family:var(--font-heading); font-weight:var(--weight-bold); }
1193
1205
  /* `plain` (da 8 à 10 das quinze): o desenho solto, sem o quadrinho, e o nome na fonte e no tamanho de título. */
1194
1206
  .sidebar-brand-plain { gap:var(--space-2); }
@@ -1202,7 +1214,68 @@ img,svg { display:block; }
1202
1214
  /* Recolhida: a marca vira só o quadrinho, e a pessoa, a foto e a ação empilhadas, sem a caixinha. Os nomes vão para o
1203
1215
  leitor de tela (o React troca a classe por `.sr-only`, como o rótulo do item). */
1204
1216
  .sidebar-collapsed .sidebar-brand { justify-content:center; padding-inline:0; }
1217
+ /* A marca com a ação (0.44.0): o botão de recolher ao lado do nome; recolhida, ele desce para baixo do logo. */
1218
+ .sidebar-collapsed .sidebar-brand-with-action { flex-direction:column; gap:var(--space-2); }
1205
1219
  .sidebar-collapsed .sidebar-user { flex-direction:column; padding-inline:0; background:transparent; }
1220
+ /* O BLOCO 2 DA LATERAL (25/10/2026) — o que faltava das quinze laterais que o Victor aprovou em 21/10/2026 (item 107), como
1221
+ variação: o padrão de hoje não muda. A referência principal não tem lateral; a anatomia e o comportamento são os da
1222
+ segunda da fila (o provedor, o atalho, os jeitos de recolher, a ação do grupo e do item), com a aparência da Aurea.
1223
+ 4-E — a foto do item (o time, a pessoa) no lugar do ícone: 24, o degrau que cabe na linha de 36 com folga. */
1224
+ .sidebar-item > .sidebar-avatar { --step-avatar:var(--space-6); --step-avatar-fs:var(--text-xs); flex:none; }
1225
+ /* 4-E — a divisória entre seções: um vão, sem linha (ADR-0072). Ela parte a lista em duas; o vão soma 16 aos 4 de sempre. */
1226
+ .sidebar-separator { flex:none; block-size:var(--space-4); }
1227
+ /* 4-D — a ação do item ("⋯"): fora do link, presa à ponta da linha, no meio da altura dela. O texto do item para antes dela. */
1228
+ .sidebar-item-with-action { position:relative; }
1229
+ .sidebar-item-with-action > .sidebar-item { padding-inline-end:calc(var(--control-h-sm) + var(--space-2)); }
1230
+ .sidebar-item-action { position:absolute; inset-block-start:0; inset-inline-end:var(--space-1); display:flex; align-items:center; block-size:var(--control-h-md); }
1231
+ /* 4-D — o grupo que dobra e a ação do grupo ("+"): o nome e a ação numa fila, com a margem que o nome tinha sozinho. */
1232
+ .sidebar-group-head { display:flex; align-items:center; gap:var(--space-1); margin:var(--space-4) var(--space-1) var(--space-1) var(--sidebar-item-x, var(--space-3)); }
1233
+ .sidebar-group-head > .sidebar-group-label { flex:1; min-width:0; margin:0; }
1234
+ .sidebar-group-toggle { display:flex; align-items:center; gap:var(--space-1); min-block-size:var(--control-h-xs); padding:0; border:0; border-radius:var(--radius-control); background:transparent; font:inherit; font-size:var(--text-sm); font-weight:var(--weight-medium); text-align:start; cursor:pointer; }
1235
+ .sidebar-group-toggle > span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
1236
+ .sidebar-group-caret { flex:none; opacity:.8; }
1237
+ .sidebar-group-action { display:flex; align-items:center; gap:var(--space-1); flex:none; }
1238
+ /* 4-A — A LATERAL SOLTA vai do topo da janela até embaixo, como a da referência: fora do `AppShell` não há barra de cima
1239
+ para reservar (o item 106 mediu: solta, a lateral ficava 56 mais baixa e mais curta, e o app tinha de zerar o
1240
+ `--topbar-height` à mão). O app que põe uma barra própria em cima dela diz a altura em `--sidebar-offset`. */
1241
+ .sidebar:not(.app-shell > *) { --shell-top:calc(var(--sidebar-offset, 0px) + var(--space-4)); }
1242
+ .sidebar-flush:not(.app-shell > *) { --shell-top:var(--sidebar-offset, 0px); }
1243
+ /* 4-A — a trilha em cápsula: recolhida, o canto é o do controle, e não o do cartão. */
1244
+ .sidebar-collapse-capsule.sidebar-collapsed { border-radius:var(--radius-control); }
1245
+ /* 4-A — a que sai da tela: recolhida, ela some, e a trilha do shell vai a zero. O botão da junção fica dentro da tela, a 16
1246
+ da borda (ele ficaria cortado ao meio na borda da janela). */
1247
+ .sidebar-collapse-offcanvas.sidebar-collapsed { display:none; }
1248
+ /* `.sidebar` repetido na regra de propósito: a da rente recolhida (`.app-shell:has(> .sidebar-collapsed.sidebar-flush)`) vem
1249
+ depois na folha, com a mesma força, e deixava a trilha em 68 na rente que sai da tela (o teste do bloco 2 achou). */
1250
+ .app-shell:has(> .sidebar.sidebar-collapsed.sidebar-collapse-offcanvas) { --sidebar-track:0px; }
1251
+ .app-shell-collapsible:has(> .sidebar.sidebar-collapsed.sidebar-collapse-offcanvas) > .sidebar-toggle-slot { --toggle-x:calc(var(--space-4) + var(--control-h-xs) / 2); }
1252
+ /* 4-H — o item atual nas alternativas do item 101. Todas tiram o fio da casa (o `segment-line` o põe de volta, no amarelo).
1253
+ `segment`: a cápsula da aba escolhida (ADR-0059), a letra na cor do texto e o peso normal, como a referência. Os tokens
1254
+ são os da PÁGINA (`--segment` e `--foreground`), aos pares: sob uma marca de lateral escura, a cápsula clara continua
1255
+ legível com a letra dela. */
1256
+ .sidebar[class*="sidebar-indicator-"] .sidebar-item[aria-current]::after { display:none; }
1257
+ :is(.sidebar-indicator-segment,.sidebar-indicator-segment-dot,.sidebar-indicator-segment-line) .sidebar-item[aria-current] { --sidebar-primary:var(--foreground); --primary-emphasis:var(--foreground); background:var(--segment); box-shadow:var(--shadow-sm); color:var(--foreground); font-weight:var(--weight-regular); }
1258
+ .sidebar-indicator-segment-dot .sidebar-item[aria-current] > .sidebar-label::before { content:""; display:inline-block; inline-size:var(--space-2); block-size:var(--space-2); margin-inline-end:var(--space-2); border-radius:var(--radius-full); background:var(--primary); vertical-align:middle; }
1259
+ .sidebar.sidebar-indicator-segment-line .sidebar-item[aria-current]::after { display:block; background:var(--primary); }
1260
+ /* `subtle`: só o cinza da lateral e a letra cheia dela, sem cor de marca. ⚠ É o mesmo cinza do ponteiro em cima (o item 101
1261
+ anotou): o item atual só se distingue pela letra e pelo ícone cheio. */
1262
+ .sidebar-indicator-subtle .sidebar-item[aria-current] { --sidebar-primary:var(--sidebar-foreground); --primary-emphasis:var(--sidebar-foreground); background:var(--sidebar-accent); color:var(--sidebar-foreground); }
1263
+ /* 4-F e 4-G — a trilha das seções e o painel. A lateral vira uma fila de duas caixas: a trilha, em cápsula (a 6 e a 7 das
1264
+ quinze), e o painel ao lado, um cartão da largura da lateral. As duas pintam a cor da lateral; a caixa de fora some. */
1265
+ .sidebar[class*="sidebar-panel-"] { flex-direction:row; align-items:stretch; gap:var(--space-2); padding:0; overflow:visible; border-width:0; border-radius:0; background:transparent; }
1266
+ .sidebar-rail-box { display:flex; flex-direction:column; gap:var(--space-1); flex:none; inline-size:var(--sidebar-rail); min-block-size:0; padding:var(--space-1) var(--space-2); overflow:hidden auto; border-radius:var(--radius-control); background:var(--sidebar); }
1267
+ .sidebar-rail-box .sidebar-item { justify-content:center; width:var(--control-h-md); padding-inline:0; margin-inline:auto; }
1268
+ .sidebar-rail-box .sidebar-item[aria-expanded="true"]:not([aria-current]) { background:var(--sidebar-accent); color:var(--sidebar-foreground); }
1269
+ /* O painel ENCOLHE quando falta lugar (a 320, ou na gaveta do celular, de 296): a trilha fica, e ele toma o resto, até a largura
1270
+ da lateral. Fixo em 264, a trilha e ele (340) passavam da gaveta e da tela — a varredura do site achou a 320. */
1271
+ .sidebar-panel { display:flex; flex-direction:column; gap:var(--space-1); flex:0 1 var(--sidebar-width); min-inline-size:0; min-block-size:0; padding:var(--space-1); overflow:auto; border-radius:var(--radius-card); background:var(--sidebar); color:var(--sidebar-foreground); }
1272
+ .sidebar-panel[hidden] { display:none; }
1273
+ .sidebar-panel-title { margin:var(--space-2) var(--sidebar-item-x, var(--space-3)) var(--space-1); font-family:var(--font-heading); font-size:var(--text-lg); font-weight:var(--weight-bold); line-height:var(--leading-tight); }
1274
+ .app-shell:has(> .sidebar-panel-docked) { --sidebar-track:calc(var(--sidebar-rail) + var(--space-2) + var(--sidebar-width) + var(--space-4)*2); }
1275
+ .app-shell:has(> .sidebar-panel-docked.sidebar-collapsed), .app-shell:has(> .sidebar-panel-overlay) { --sidebar-track:calc(var(--sidebar-rail) + var(--space-4)*2); }
1276
+ /* O painel por cima (4-G): a janelinha da Aurea, da largura da lateral, com a pele da lista dela. Os tokens da lateral passam a
1277
+ ser os da janelinha: sob uma marca de lateral escura, a janelinha é clara, e a letra da lateral sumiria nela. */
1278
+ .popover.sidebar-flyout { --sidebar-item-x:var(--space-4); --sidebar-foreground:var(--popover-foreground); --sidebar-accent:var(--fill-1); --sidebar-primary:var(--primary-emphasis); inline-size:var(--sidebar-width); max-inline-size:calc(100vw - var(--space-8)); padding:var(--space-1); gap:var(--space-1); }
1206
1279
  /* Estas regras tocam `.app-shell` porque a coluna do grid é do shell: a
1207
1280
  lateral não consegue encolher a própria trilha. `--sidebar-rail` continua sendo a largura
1208
1281
  do PAINEL; a flutuante soma as margens na trilha, a rente usa o token cru.
@@ -1678,24 +1751,19 @@ img,svg { display:block; }
1678
1751
  Aurea não tinha o botão de ação secundária mais comum do mercado — contorno na cor da marca.
1679
1752
  Nada de novo aqui: mesma receita do par `danger-*` logo abaixo, com o token do outro tom, e o
1680
1753
  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); }
1754
+ .btn-primary-outline { --btn-bg:transparent; --btn-fg:var(--primary-emphasis); --btn-border:var(--primary-emphasis); }
1682
1755
  .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; }
1756
+ .btn-primary-ghost { --btn-bg:transparent; --btn-fg:var(--primary-emphasis); --btn-border:transparent; }
1684
1757
  .btn-primary-ghost:hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--primary) 14%, transparent); }
1685
1758
  .btn-danger-outline { --btn-bg:transparent; --btn-fg:var(--danger-400); --btn-border:var(--danger-400); }
1686
1759
  .btn-danger-outline:hover:not(:disabled):not([aria-disabled="true"]) { --btn-bg:color-mix(in oklab, var(--destructive) 14%, transparent); }
1687
1760
  .btn-danger-ghost { --btn-bg:transparent; --btn-fg:var(--danger-400); --btn-border:transparent; }
1688
1761
  .btn-danger-ghost:hover:not(:disabled):not([aria-disabled="true"]) { --btn-bg:color-mix(in oklab, var(--destructive) 14%, transparent); }
1689
1762
  [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)); }
1763
+ /* 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
1764
+ claro, o amarelo no escuro, e na `lory` o laranja escuro dela. De 21/08 até aqui, o claro levava a mistura marrom
1765
+ (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
1766
+ `--primary-outline` não serve de letra: na `lory` ele é translúcido (é do contorno). */
1699
1767
  /* LINK: aparência de texto, sem cápsula e sem altura de controle — o sublinhado é o que diz
1700
1768
  que é clicável, então ele existe desde o repouso (revelar no hover esconde a affordance).
1701
1769
  Três tons: neutro, marca e destrutivo. No claro a marca aprofunda, senão não passa o AA. */
@@ -1704,8 +1772,7 @@ img,svg { display:block; }
1704
1772
  prosa, e media 67×13px. O texto continua onde está — a caixa cresce centrada nele. */
1705
1773
  .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
1774
  .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)); }
1775
+ .btn-link-primary { --btn-fg:var(--primary-emphasis); }
1709
1776
  .btn-link-danger { --btn-fg:var(--danger-400); }
1710
1777
  /* pressed entra na linguagem única de "selecionado" acima; só-ícone não leva o fio. */
1711
1778
  /* Kbd — a tecla que dispara a ação, dentro ou fora do botão. Peça própria, não decoração.
@@ -1765,9 +1832,8 @@ img,svg { display:block; }
1765
1832
  token de tom (`--success`) é o FUNDO cheio — a mesma cor funda nos dois temas —, e não serve
1766
1833
  de letra no escuro. Letra, ícone, borda e barra sobre a superfície usam o par de letra
1767
1834
  (`--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); }
1835
+ .btn-tone-brand,.btn-tone-brand:hover:not(:disabled) { --btn-fg:var(--primary-emphasis); }
1836
+ .btn-outline.btn-tone-brand { --btn-border:var(--primary-emphasis); }
1771
1837
  .btn-tone-brand:not(.btn-link):hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--primary) 14%, transparent); }
1772
1838
  .btn-tone-danger,.btn-tone-danger:hover:not(:disabled) { --btn-fg:var(--danger-400); }
1773
1839
  [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 +2451,19 @@ img,svg { display:block; }
2385
2451
  /* A borda transparente de 1 (as abas não têm) entra no recheio: 1 + 3 = os 4 da referência, e o
2386
2452
  trilho mede 40 como o das abas — sem o desconto, 42 (a geometria pegou). */
2387
2453
  .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; }
2454
+ .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; }
2455
+ .segmented :is(button,a).active { color:var(--foreground); background:var(--segment); box-shadow:var(--shadow-sm); border:0; }
2390
2456
  /* `fullWidth` (A5, 06/10/2026): ocupa a linha, e cada segmento cresce a partir do rótulo sem
2391
2457
  encolher abaixo dele — o mesmo desenho do nativo. `1 0 auto` e não `1` (= `1 1 0%`): base zero
2392
2458
  reparte a largura em partes iguais, e é isso que quebrava o rótulo no nativo rodando no
2393
2459
  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; }
2460
+ .segmented-full { display:flex; } .segmented-full :is(button,a) { flex:1 0 auto; }
2461
+ /* A CÁPSULA QUE NAVEGA (bloco 1, o 5-A — 23/10/2026): com `href` nos itens, o `SegmentedControl` é um <nav> de links — a
2462
+ 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
2463
+ segmento; o atual leva `aria-current="page"` e a mesma marca do escolhido. */
2464
+ .segmented a { display:inline-flex; align-items:center; justify-content:center; gap:var(--space-1); text-decoration:none; }
2465
+ /* `size="sm"`: a da referência (abas de 24 numa cápsula de 32, letra 14) — a altura do controle `xs` da densidade. */
2466
+ .segmented-sm :is(button,a) { min-block-size:var(--control-h-xs); padding:0 var(--space-4); font-size:var(--text-sm); }
2395
2467
  /* Toggle (Lote 1): pressionado usa o MESMO par de tokens do segmento aceso, logo acima. Um
2396
2468
  toggle solto e um segmento selecionado dizem a mesma coisa — se parecessem diferentes, o
2397
2469
  sistema teria dois idiomas para "isto está ligado". O estado vem do motor (`data-pressed`),
@@ -2405,12 +2477,12 @@ img,svg { display:block; }
2405
2477
  grita mais que o próprio rótulo. No tema CLARO o amarelo puro como texto dá 1.6:1, longe
2406
2478
  dos 4.5:1 do AA, então o rótulo aprofunda com --foreground e segue âmbar. */
2407
2479
  .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); }
2480
+ .segmented :is(button,a).active { --btn-bg:var(--secondary); --btn-fg:var(--primary); position:relative; background:var(--secondary); color:var(--primary); }
2409
2481
  /* A CÁPSULA ELEVADA que a regra acima promete, e que no trilho não se via (ADR-0059, 08/10/2026):
2410
2482
  o segmento aceso e a aba escolhida vivem sobre --muted, e --secondary dava 1:1 contra ele no
2411
2483
  claro e 1,02:1 no escuro. Sobre o trilho a cápsula é --segment, com a sombra pequena — como a
2412
2484
  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); }
2485
+ .segmented :is(button,a).active { --btn-bg:var(--segment); background:var(--segment); box-shadow:var(--shadow-sm); }
2414
2486
  /* O TOGGLE LIGADO tem fundo próprio (0.32.0). Com o solto no fundo neutro (o `default` da referência),
2415
2487
  o cinza do "selecionado" acima deixava ligado e desligado com o MESMO fundo — só a letra e o fio
2416
2488
  mudavam, e o `skin.spec` cobra que o ligado pareça ligado pelo fundo. O ligado dela é o tom suave
@@ -2439,19 +2511,20 @@ img,svg { display:block; }
2439
2511
  saíram com a mesma cor. Com o `:not` ela pesa (0,3,1) e só alcança quem está em repouso. */
2440
2512
  [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
2513
  .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,
2514
+ .btn[aria-pressed="true"]:not(.btn-icon)::after,.segmented :is(button,a).active::after,.tabs-secondary .tab[data-active]::after,
2443
2515
  .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
2516
  /* e o fio do ativo da lateral segue a marca DELA, pelo mesmo motivo da regra de cor acima. */
2445
2517
  .doc-nav a.active::after,.sidebar-item[aria-current]::after { background:var(--sidebar-current-line, color-mix(in oklab, var(--sidebar-primary) 75%, transparent)); }
2518
+ .sidebar-item[aria-current]::after { inset-inline:var(--sidebar-item-x, var(--space-4)); }
2446
2519
  /* ADR-0076 (20/10/2026), o Victor olhando a bancada: "não quero ele azul, não pode ser na cor do botão?". No claro da Aurea
2447
2520
  padrão, o item atual da lateral é o botão primário: o fundo amarelo e a letra cinza-escura dele (8,13:1). O fundo já
2448
2521
  marca o estado, e o fio de baixo some (`--sidebar-current-line` transparente: regra no `::after` não aceitaria a guarda
2449
2522
  de tema no fim). Só sem `data-brand` (a `lory` tem a lateral dela) e só no claro (no escuro, a letra amarela continua).
2450
2523
  Sobre o amarelo, a letra de destaque de DENTRO do item (o selo primário de contagem, um ícone de destaque) é a tinta do
2451
2524
  botão: o azul sobre o amarelo mede 3,49:1 — o axe da varredura achou, no "12" do exemplo da `Sidebar`. */
2452
- [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); }
2525
+ [data-theme="light"] :is(.sidebar-item[aria-current],.doc-nav a.active):not(:where([data-brand],[data-brand] *,.sidebar[class*="sidebar-indicator-"] *)):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
2526
  [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"] *)
2527
+ [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
2528
  { --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); color:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
2456
2529
  /* A NAV DA LATERAL SAIU DESTA LISTA em 20/08/2026. O ajuste existe porque o amarelo puro não se lê
2457
2530
  sobre o claro — mas ele mistura o `--foreground` da PÁGINA, e o item da lateral não está sobre a
@@ -2544,9 +2617,13 @@ img,svg { display:block; }
2544
2617
  seis deixam o contador sobre a superfície da barra, onde ele já se lê. */
2545
2618
 
2546
2619
  .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; }
2620
+ .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
2621
  .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
2622
  .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; }
2623
+ /* Os tons de ESTADO DE TRABALHO (ADR-0081, 24/10/2026): running é o info (acima), paused o aviso, review o violeta de
2624
+ categoria, e offline o apagado — como o `Status offline`. Antes paused, offline e review saíam iguais ao neutral. O
2625
+ cheio do offline é o par do texto apagado invertido: a letra que passa sobre o fundo vira o fundo. */
2626
+ .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
2627
  /* AS OITO CORES DE CATEGORIA (GAR-07, ADR-0060, 09/10/2026): marcam GRUPO, não estado — "Motos" e
2551
2628
  "Carros" num site de notícias. Mesma receita dos quatro propósitos acima (acento, fundo suave e
2552
2629
  o fio misturado com a borda), e por isso as três ênfases valem para elas sem regra nova. O
@@ -2557,7 +2634,7 @@ img,svg { display:block; }
2557
2634
  .badge-teal { --badge-accent:var(--category-teal); color:var(--category-teal); background:var(--category-teal-bg); border-color:transparent; }
2558
2635
  .badge-cyan { --badge-accent:var(--category-cyan); color:var(--category-cyan); background:var(--category-cyan-bg); border-color:transparent; }
2559
2636
  .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; }
2637
+ .badge-violet,.badge-review { --badge-accent:var(--category-violet); color:var(--category-violet); background:var(--category-violet-bg); border-color:transparent; }
2561
2638
  .badge-pink { --badge-accent:var(--category-pink); color:var(--category-pink); background:var(--category-pink-bg); border-color:transparent; }
2562
2639
  /* ── AS TRÊS ÊNFASES — e elas vêm DEPOIS das variantes de propósito ─────────────────
2563
2640
  Cada variante declara só o ACENTO; as ênfases saem dele. Antes cada variante escrevia
@@ -2939,6 +3016,12 @@ img,svg { display:block; }
2939
3016
  .avatar:is(.avatar-tone-brand,.avatar-tone-danger,.avatar-tone-success,.avatar-tone-warning,.avatar-tone-info) { color:var(--avatar-ink); }
2940
3017
  .avatar.avatar-soft { border-color:transparent; background:var(--muted); }
2941
3018
  .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); }
3019
+ /* 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
3020
+ o tom a 14%, o info media 4,12 no claro. A marca fica na mistura: o fundo dela não tem par. */
3021
+ .avatar.avatar-soft.avatar-tone-info { background:var(--info-bg); }
3022
+ .avatar.avatar-soft.avatar-tone-success { background:var(--success-bg); }
3023
+ .avatar.avatar-soft.avatar-tone-warning { background:var(--warning-bg); }
3024
+ .avatar.avatar-soft.avatar-tone-danger { background:var(--danger-bg); }
2942
3025
  .avatar img { width:100%; height:100%; object-fit:cover; }
2943
3026
  /* LINK (0.32.0): o link de texto da referência — peso médio, a cor de link, sem sublinhado; com o mouse
2944
3027
  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 +3238,21 @@ button.tag-main { cursor:pointer; }
3155
3238
  é inalcançável por teclado (axe scrollable-region-focusable). Quem escreve esta marcação à
3156
3239
  mão precisa de `tabindex="0"` no <pre> — o componente React já o emite. */
3157
3240
  .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); }
3241
+ /* 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
3242
+ 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
3243
+ 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
3244
+ 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
3245
+ 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
3246
+ 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). */
3247
+ .code-tabs { border-radius:var(--radius-lg); background:var(--surface-1); overflow:hidden; }
3248
+ .prose .code-tabs { border-radius:var(--radius-card); }
3249
+ .code-tabs-list { display:flex; gap:calc(var(--space-3) + var(--space-05)); padding:0 var(--space-4); overflow-x:auto; }
3250
+ .code-tab { position:relative; flex:none; padding:var(--space-2) 0; border:0; background:transparent; color:var(--muted-foreground);
3251
+ font-size:var(--text-sm); font-weight:var(--weight-medium); line-height:var(--leading-normal); cursor:pointer; }
3252
+ .code-tab:hover, .code-tab.active { color:var(--foreground); }
3253
+ .code-tab.active::after { content:""; position:absolute; inset-inline:0; inset-block-end:0; block-size:var(--focus-width); background:var(--primary); }
3254
+ .code-tab:focus-visible { outline-offset:calc(-1 * var(--focus-width)); }
3255
+ .code-tabs .code-block { border-radius:0; }
3158
3256
  /* 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
3257
  referência, medido na página dela: uma coluna de 16 (--space-4), alinhada à direita, a 24 do código (--space-6); ela
3160
3258
  cresce com os algarismos da última linha (`--code-line-digits`, que o componente escreve), para a coluna não pular
@@ -3191,7 +3289,7 @@ button.tag-main { cursor:pointer; }
3191
3289
  .code-preview { display:flex; flex-direction:column; block-size:var(--demo-height,auto); padding:0; overflow:hidden; }
3192
3290
  .demo-tabs { display:flex; padding:var(--space-2); border-bottom:var(--border-width) solid transparent; }
3193
3291
  .demo-tabs .segmented { flex:1; display:flex; }
3194
- .demo-tabs .segmented button { flex:1; }
3292
+ .demo-tabs .segmented :is(button,a) { flex:1; }
3195
3293
  .demo-panel { flex:1; min-height:0; overflow:auto; padding:var(--space-6); }
3196
3294
  .demo-panel[hidden] { display:none; }
3197
3295
  .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 +3298,11 @@ button.tag-main { cursor:pointer; }
3200
3298
  .demo-code .code-block-wrap { flex:1; }
3201
3299
  .demo-code .code-block { padding:var(--space-6); border:0; border-radius:0; }
3202
3300
  .copy-code { position:absolute; top:var(--space-3); inset-inline-end:var(--space-3); z-index:1; }
3301
+ /* 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
3302
+ 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
3303
+ 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
3304
+ com copiar: o sozinho, o do texto do site (`.prose pre`) e o do exemplo (`.demo-code`) — por isso vem depois deles. */
3305
+ .code-block-wrap > .code-block { padding-inline-end:calc(var(--space-3) + var(--control-h-md) + var(--space-2)); }
3203
3306
  .copy-code .c-done { display:none; }
3204
3307
  .copy-code.is-done .c-copy { display:none; } .copy-code.is-done .c-done { display:block; color:var(--primary); }
3205
3308
  /* "On this page": índice da própria página, fixo na lateral. Navegação, não decoração —
@@ -3504,7 +3607,9 @@ button.tag-main { cursor:pointer; }
3504
3607
  /* DOC-11 (0.32.0): o `tone` do nativo, na web. `link` é o amarelo de escrever; `primary`, o de
3505
3608
  preencher (no claro quase some, como no nativo); as cores de estado, o par `-400` (ADR-0061). */
3506
3609
  .typography-tone-subtle { color:var(--subtle-foreground); }
3507
- .typography-tone-primary { color:var(--primary); }
3610
+ /* 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
3611
+ preencher, de propósito — 1,75:1 no claro. */
3612
+ .typography-tone-primary { color:var(--primary-emphasis); }
3508
3613
  .typography-tone-link { color:var(--link); }
3509
3614
  .typography-tone-danger { color:var(--danger-400); }
3510
3615
  .typography-tone-success { color:var(--success-400); }
@@ -3521,6 +3626,11 @@ button.tag-main { cursor:pointer; }
3521
3626
  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
3627
  da tabela fica no texto). Vem depois dos `.typography-h*`, e por isso o título com `numeric` também troca. */
3523
3628
  .typography-numeric { font-family:var(--font-code); font-variant-numeric:tabular-nums; }
3629
+ /* O alinhamento só existe num bloco: o `Text` (um <span>) e o `Code` (um <code>) são texto em linha, e com o
3630
+ `text-align` sozinho o `align` deles não fazia nada — achado pelo exemplo de cada valor (bloco 1, o catálogo fiel,
3631
+ 23/10/2026). Com `align`, a peça vira bloco, como já faz o `truncate`; no `Heading` e no `Paragraph`, que já são
3632
+ bloco, nada muda. */
3633
+ .typography-align-start, .typography-align-center, .typography-align-end, .typography-align-justify { display:block; }
3524
3634
  .typography-align-start { text-align:start; }
3525
3635
  .typography-align-center { text-align:center; }
3526
3636
  .typography-align-end { text-align:end; }
@@ -4614,8 +4724,6 @@ button.graph-node-body { cursor:pointer; }
4614
4724
  }
4615
4725
 
4616
4726
 
4617
- /* Aurea v1.7 stabilization patch — visual design unchanged. */
4618
- .badge-running{background:var(--success-bg);color:var(--success-400);border-color:transparent}
4619
4727
  /* superfície (overflow, borda, fundo, raio) mora junto com a do `.table-wrap` lá em cima — aqui
4620
4728
  fica só o que é DESTA região: ela é focável, e o foco dela é a linha de dentro, abaixo. Era um
4621
4729
  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.44.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",