@aurea-uds/core 0.11.0 → 0.12.2
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.
- package/dist/aurea.css +92 -24
- package/package.json +1 -1
package/dist/aurea.css
CHANGED
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
--radius-control:999px;
|
|
43
43
|
--radius-full:var(--radius-control);
|
|
44
44
|
--border-width:1px;
|
|
45
|
+
--focus-width:2px;
|
|
46
|
+
--focus-offset:2px;
|
|
45
47
|
--opacity-disabled:0.5;
|
|
46
48
|
--shadow-md:0 16px 42px rgba(0,0,0,0.28);
|
|
47
49
|
--shadow-lg:0 28px 80px rgba(0,0,0,0.42);
|
|
@@ -433,7 +435,7 @@ body { margin:0; background:var(--background); color:var(--foreground); font-fam
|
|
|
433
435
|
::selection { background:var(--selection); }
|
|
434
436
|
button,input,textarea,select { font:inherit; }
|
|
435
437
|
button,a,[role="button"],input,textarea,select { outline:none; }
|
|
436
|
-
:focus-visible { outline:
|
|
438
|
+
:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); box-shadow:none; border-color:var(--focus-strong)!important; }
|
|
437
439
|
button { color:inherit; }
|
|
438
440
|
/* O link NÃO é `--primary`. Medido em 22/08/2026 com o axe e depois à mão: o amarelo da
|
|
439
441
|
marca sobre o fundo do tema CLARO dá 1,73:1, e o AA de texto (WCAG 1.4.3) pede 4,5:1 —
|
|
@@ -735,7 +737,7 @@ img,svg { display:block; }
|
|
|
735
737
|
.bottom-nav { --bottomnav-ring:2rem; --bottomnav-surface:var(--card); position:sticky; bottom:0; z-index:var(--z-sticky); display:flex; gap:var(--space-1); margin:var(--space-4); margin-bottom:calc(var(--space-4) + env(safe-area-inset-bottom)); padding:var(--space-1); border:1px solid var(--border); border-radius:var(--radius-control); background:var(--card); color:var(--card-foreground); box-shadow:var(--shadow-md); }
|
|
736
738
|
/* `--control-h-lg` e não `--control-h-md`: alvo de toque. O md dá 36px em comfortable e
|
|
737
739
|
o alvo confortável de dedo é maior — com o recuo, o item renderiza acima de 44px. */
|
|
738
|
-
.bottom-nav-item { flex:1; min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--space-
|
|
740
|
+
.bottom-nav-item { flex:1; min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--space-05); min-height:var(--control-h-lg); padding:var(--space-1); border:0; border-radius:var(--radius-control); background:transparent; color:var(--muted-foreground); font:inherit; font-size:var(--text-xs); text-align:center; text-decoration:none; cursor:pointer; }
|
|
739
741
|
.bottom-nav-item .icon { flex:none; opacity:.8; }
|
|
740
742
|
.bottom-nav-label { max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
741
743
|
/* O CONTADOR PENDURA NO ÍCONE — canto superior da ponta, encostando na borda dele.
|
|
@@ -769,6 +771,17 @@ img,svg { display:block; }
|
|
|
769
771
|
entrega 42px em comfortable e 48 em spacious, contra os 44pt mínimos da HIG da Apple e os
|
|
770
772
|
48dp do Material. A moldura é a caixa do DESENHO; o alvo é o item inteiro. */
|
|
771
773
|
.bottom-nav-mark { position:relative; flex:none; display:inline-flex; align-items:center; justify-content:center; width:var(--bottomnav-ring); height:var(--bottomnav-ring); border-radius:var(--radius-control); }
|
|
774
|
+
/* A BARRA MAIS BAIXA — pedido do Victor, 30/09/2026, aprovado pela imagem: *"ele é muito largo, e
|
|
775
|
+
é assim por conta da distância entre o ícone em cima e o texto embaixo"*. A moldura de 32 só
|
|
776
|
+
serve aos quatro indicadores REDONDOS, em que ela vira o círculo. Nos outros três ela era folga
|
|
777
|
+
vazia: 4 em cima e 4 embaixo do ícone de 24, mais o vão de 4 até o rótulo — 9 medidos entre o
|
|
778
|
+
ícone e o texto. Fora dos redondos (e na barra sem classe de indicador, a do HTML puro) a
|
|
779
|
+
moldura fica da altura do ícone, e o vão do item cai para
|
|
780
|
+
`--space-05`. A largura continua 32: é ela que dá o canto ao contador. O mesmo conserto está no
|
|
781
|
+
nativo (`navigation.tsx`). ~~A folga de 4dp do M3 entre o indicador e o rótulo~~ vale só para
|
|
782
|
+
os redondos agora. */
|
|
783
|
+
.bottom-nav-mark { height:var(--icon-lg); }
|
|
784
|
+
.bottom-nav-ind-circle .bottom-nav-mark, .bottom-nav-ind-circle-raised .bottom-nav-mark, .bottom-nav-ind-circle-outline .bottom-nav-mark, .bottom-nav-ind-circle-bold .bottom-nav-mark { height:var(--bottomnav-ring); }
|
|
772
785
|
/* `inline-flex` no envoltório: como `<span>` solto ele é caixa de LINHA, e mede a entrelinha do
|
|
773
786
|
item (18px) em vez do contador que carrega (16px). A diferença não aparece na tela — aparece
|
|
774
787
|
na medição, e medição errada é o que faz a razão parecer 0,75 quando é 0,67. */
|
|
@@ -989,7 +1002,7 @@ img,svg { display:block; }
|
|
|
989
1002
|
rolar a página lateralmente ao focar. Aparece no foco, que é o único momento em que precisa
|
|
990
1003
|
aparecer. */
|
|
991
1004
|
.skip-link { position:fixed; inset-block-start:var(--space-2); inset-inline-start:var(--space-2); z-index:calc(var(--z-toast) + 1); display:inline-flex; align-items:center; height:var(--control-h-md); padding:0 var(--space-4); border-radius:var(--radius-control); background:var(--primary); color:var(--primary-foreground); font-size:var(--text-sm); font-weight:var(--weight-semibold); line-height:var(--leading-none); text-decoration:none; transform:translateY(-160%); transition:transform var(--duration-fast) var(--ease-standard); }
|
|
992
|
-
.skip-link:focus-visible { transform:translateY(0); outline:
|
|
1005
|
+
.skip-link:focus-visible { transform:translateY(0); outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); }
|
|
993
1006
|
.btn-primary { --btn-bg:var(--primary); --btn-fg:var(--primary-foreground); --btn-border:transparent; }
|
|
994
1007
|
.btn-primary:hover:not(:disabled):not([aria-disabled="true"]) { --btn-bg:var(--primary-hover); --btn-border:transparent; }
|
|
995
1008
|
.btn-secondary { --btn-bg:var(--secondary); --btn-fg:var(--secondary-foreground); --btn-border:transparent; }
|
|
@@ -1100,12 +1113,21 @@ img,svg { display:block; }
|
|
|
1100
1113
|
.btn-outline.btn-tone-warning { --btn-border:var(--warning); }
|
|
1101
1114
|
.btn-tone-warning:not(.btn-link):not(.btn-solid):hover:not(:disabled) { --btn-bg:color-mix(in oklab, var(--warning) 14%, transparent); }
|
|
1102
1115
|
.btn-nav:hover:not(:disabled):not([aria-disabled="true"]) { --btn-fg:var(--foreground); }
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1116
|
+
/* O botão só de ícone é REDONDO, em todos os tamanhos — decisão do Victor, 25/09/2026
|
|
1117
|
+
(ADR-0052). Era um quadrado de canto 10px (6px nos dois menores). O HeroUI 3.2.6 faz o botão só
|
|
1118
|
+
de ícone redondo, e os botões de texto da Aurea já são cápsula: o de ícone era o único quadrado. */
|
|
1119
|
+
.btn-icon { width:var(--control-h-md); padding:0; border-radius:var(--radius-full); }
|
|
1120
|
+
.btn-icon.btn-xs { width:var(--control-h-xs); }
|
|
1121
|
+
.btn-icon.btn-sm { width:var(--control-h-sm); } .btn-icon.btn-lg { width:var(--control-h-lg); }
|
|
1106
1122
|
/* xs e xl também precisam de largura: sem isto a altura mudava e a largura ficava na do
|
|
1107
1123
|
md, e o alvo só-ícone deixava de ser quadrado (achado na onda Actions, 24/07). */
|
|
1108
|
-
.btn-icon.btn-xl { width:var(--control-h-xl);
|
|
1124
|
+
.btn-icon.btn-xl { width:var(--control-h-xl); }
|
|
1125
|
+
/* ThemeToggle (25/09/2026): a cor no ícone mostra o tema para onde se vai. No claro a LUA, na tinta
|
|
1126
|
+
do texto; no escuro o SOL, no amarelo da marca — as duas combinações se enxergam, e é por isso
|
|
1127
|
+
que o botão nunca mostra a lua no escuro nem o sol no claro. Mais específico que o `.btn:hover`,
|
|
1128
|
+
então a cor fica também com o mouse em cima. */
|
|
1129
|
+
.theme-toggle-moon .icon { color:var(--foreground); }
|
|
1130
|
+
.theme-toggle-sun .icon { color:var(--primary); }
|
|
1109
1131
|
/* wrap, não estoura: os botões do grupo são pills com gap (não segmentos colados), então
|
|
1110
1132
|
quebrar linha em tela estreita preserva o visual. Único gap de eixo horizontal que a
|
|
1111
1133
|
auditoria da Etapa 3 achou sem proteção — o resto já rola (tabela) ou já quebra (toolbar). */
|
|
@@ -1222,7 +1244,7 @@ img,svg { display:block; }
|
|
|
1222
1244
|
contorno do input de dentro ficaria escondido atrás da borda do grupo. */
|
|
1223
1245
|
.input-group { display:flex; flex-wrap:wrap; align-items:center; inline-size:100%; min-inline-size:0; min-block-size:var(--control-h-md); background:var(--field-bg); border:1px solid var(--border-strong); border-radius:var(--radius-control); transition:border-color var(--duration-fast),box-shadow var(--duration-fast); }
|
|
1224
1246
|
.input-group:hover { border-color:var(--border); }
|
|
1225
|
-
.input-group:focus-within { outline:
|
|
1247
|
+
.input-group:focus-within { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); }
|
|
1226
1248
|
.input-group:has(.input-sm) { min-block-size:var(--control-h-sm); }
|
|
1227
1249
|
.input-group:has(.input-lg) { min-block-size:var(--control-h-lg); }
|
|
1228
1250
|
/* O controle dentro do grupo abre mão da própria moldura: quem desenha a caixa é o grupo. */
|
|
@@ -1357,7 +1379,7 @@ img,svg { display:block; }
|
|
|
1357
1379
|
.control-mark-lg { --step-h:var(--control-h-lg); }
|
|
1358
1380
|
.checkbox .control-mark { border-radius:5px; } .radio .control-mark { border-radius:50%; }
|
|
1359
1381
|
.checkbox input:checked + .control-mark { background:var(--control-selected); border-color:var(--control-selected); color:var(--control-selected-foreground); }
|
|
1360
|
-
.checkbox input:focus-visible + .control-mark,.radio input:focus-visible + .control-mark,.switch input:focus-visible + .switch-track { outline:
|
|
1382
|
+
.checkbox input:focus-visible + .control-mark,.radio input:focus-visible + .control-mark,.switch input:focus-visible + .switch-track { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); }
|
|
1361
1383
|
.checkbox input:checked + .control-mark:after { content:""; width:8px; height:4px; border-left:2px solid currentColor; border-bottom:2px solid currentColor; transform:rotate(-45deg) translateY(-1px); }
|
|
1362
1384
|
.radio input:checked + .control-mark:after { content:""; width:8px; height:8px; border-radius:50%; background:var(--control-selected); }
|
|
1363
1385
|
.switch { display:inline-flex; align-items:center; gap:10px; cursor:pointer; } .switch input { position:absolute; opacity:0; }
|
|
@@ -1890,7 +1912,11 @@ img,svg { display:block; }
|
|
|
1890
1912
|
estética: é CLS. O exemplo de playlist do `media-chrome` declara o mesmo com o motivo escrito —
|
|
1891
1913
|
sem proporção fixa, um player com `preload=none` mede zero até a mídia chegar e a página SALTA.
|
|
1892
1914
|
Tirar a proporção sem fixar a altura devolve o salto. */
|
|
1893
|
-
|
|
1915
|
+
/* A cor do foco no player é a do contexto, não uma regra à parte (B-09, 24/09/2026). O fundo do
|
|
1916
|
+
player é quase preto nos DOIS temas (`--media-canvas`), e o `--focus-strong` do tema claro é
|
|
1917
|
+
escuro: o foco dos controles sumia no tema claro. Redefinir o token aqui conserta todos os
|
|
1918
|
+
controles de uma vez e deixa a linha de foco (espessura, afastamento) com a regra global. */
|
|
1919
|
+
.media-player { --focus-strong:var(--primary); position:relative; isolation:isolate; overflow:hidden; min-height:var(--media-h,360px); aspect-ratio:var(--media-ar,16/9); border:1px solid var(--border); border-radius:var(--radius-card); background:var(--media-canvas); color:var(--media-foreground); }
|
|
1894
1920
|
.media-viewport { position:absolute; inset:0; display:grid; place-items:center; background:var(--media-canvas); }
|
|
1895
1921
|
.media-fill { width:100%; height:100%; object-fit:contain; } /* vídeo React preenche o viewport (auditoria 18/07, M14) */
|
|
1896
1922
|
.media-placeholder { display:grid; place-items:center; gap:10px; color:var(--media-muted); text-align:center; }
|
|
@@ -1910,10 +1936,10 @@ img,svg { display:block; }
|
|
|
1910
1936
|
.media-seek input::-webkit-slider-thumb { width:14px; height:14px; margin-top:-5px; appearance:none; border:2px solid var(--media-foreground); border-radius:50%; background:var(--primary); }
|
|
1911
1937
|
.media-seek input::-moz-range-track { height:4px; background:transparent; }
|
|
1912
1938
|
.media-seek input::-moz-range-thumb { width:12px; height:12px; border:2px solid var(--media-foreground); border-radius:50%; background:var(--primary); }
|
|
1913
|
-
.media-seek input:focus-visible { outline:
|
|
1939
|
+
.media-seek input:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); box-shadow:none; }
|
|
1914
1940
|
.media-control-row,.media-control-group { display:flex; align-items:center; gap:4px; }
|
|
1915
1941
|
.media-control-row { min-width:0; justify-content:space-between; }
|
|
1916
|
-
.media-control { min-width:36px; height:36px; display:inline-grid; place-items:center; padding:0
|
|
1942
|
+
.media-control { min-width:36px; height:36px; display:inline-grid; place-items:center; padding:0; border:1px solid transparent; border-radius:var(--radius-full); background:transparent; color:var(--media-foreground); cursor:pointer; }
|
|
1917
1943
|
.media-control:hover,.media-control.active { background:var(--media-track); color:var(--primary); }
|
|
1918
1944
|
.media-time { padding:0 7px; color:var(--media-muted); font:var(--text-xs) var(--font-code); white-space:nowrap; }
|
|
1919
1945
|
.media-volume { width:82px; accent-color:var(--primary); }
|
|
@@ -1978,6 +2004,37 @@ img,svg { display:block; }
|
|
|
1978
2004
|
.gallery-tile:not(.is-selected) { background:transparent; color:var(--muted-foreground); }
|
|
1979
2005
|
.gallery-caption { font-size:var(--text-sm); }
|
|
1980
2006
|
|
|
2007
|
+
/* TIPOGRAFIA (B-02, 25/09/2026) — `Text`, `Heading`, `Paragraph` e `Code`, no molde do HeroUI
|
|
2008
|
+
3.2.6 (`typography.css`), por ordem do Victor: HeroUI sempre primeiro. O que vem dele é a FORMA:
|
|
2009
|
+
uma LISTA FECHADA de papéis em vez de tamanhos soltos (título 1–6, texto, texto pequeno, texto
|
|
2010
|
+
mínimo, código), cor só normal ou apagada, quatro pesos. O que é nosso são os números, todos de
|
|
2011
|
+
token: a escala de letras é a dele desde a ADR-0050, a entrelinha do texto é `--leading-relaxed`
|
|
2012
|
+
(27, 24 e 20px, contra os 28, 24 e 20 dele) e o código reusa a pele do `code` do `.prose`.
|
|
2013
|
+
A margem vai a zero porque `h1`…`h6` e `p` trazem a do navegador; o espaço entre blocos é de
|
|
2014
|
+
quem os empilha (`Stack`), não do texto. */
|
|
2015
|
+
.typography { margin:0; color:var(--foreground); }
|
|
2016
|
+
.typography-h1,.typography-h2,.typography-h3,.typography-h4,.typography-h5,.typography-h6 { font-weight:var(--weight-semibold); line-height:var(--leading-tight); letter-spacing:var(--tracking-tight); }
|
|
2017
|
+
.typography-h1 { font-size:var(--text-4xl); }
|
|
2018
|
+
.typography-h2 { font-size:var(--text-3xl); }
|
|
2019
|
+
.typography-h3 { font-size:var(--text-2xl); }
|
|
2020
|
+
.typography-h4 { font-size:var(--text-xl); }
|
|
2021
|
+
.typography-h5 { font-size:var(--text-lg); }
|
|
2022
|
+
.typography-h6 { font-size:var(--text-base); }
|
|
2023
|
+
.typography-body { font-size:var(--text-base); line-height:var(--leading-relaxed); }
|
|
2024
|
+
.typography-body-sm { font-size:var(--text-sm); line-height:var(--leading-relaxed); }
|
|
2025
|
+
.typography-body-xs { font-size:var(--text-xs); line-height:var(--leading-relaxed); }
|
|
2026
|
+
.typography-code { padding:var(--space-05) var(--space-1); border-radius:var(--radius-xs); background:var(--surface-2); font-family:var(--font-code); font-size:var(--text-sm); }
|
|
2027
|
+
.typography-muted { color:var(--muted-foreground); }
|
|
2028
|
+
.typography-weight-normal { font-weight:var(--weight-regular); }
|
|
2029
|
+
.typography-weight-medium { font-weight:var(--weight-medium); }
|
|
2030
|
+
.typography-weight-semibold { font-weight:var(--weight-semibold); }
|
|
2031
|
+
.typography-weight-bold { font-weight:var(--weight-bold); }
|
|
2032
|
+
.typography-align-start { text-align:start; }
|
|
2033
|
+
.typography-align-center { text-align:center; }
|
|
2034
|
+
.typography-align-end { text-align:end; }
|
|
2035
|
+
.typography-align-justify { text-align:justify; }
|
|
2036
|
+
.typography-truncate { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
2037
|
+
|
|
1981
2038
|
/* PROSA (PLANO-1.0, item L5). É a PELE do texto longo, não o parser — quem transforma Markdown em
|
|
1982
2039
|
elementos é o consumidor. Aqui só se decide como esses elementos se leem.
|
|
1983
2040
|
|
|
@@ -2149,7 +2206,15 @@ img,svg { display:block; }
|
|
|
2149
2206
|
DropdownMenu, ContextMenu, Menubar e a lista da CommandPalette. */
|
|
2150
2207
|
.menu { --menu-px:10px; z-index:var(--z-modal); min-width:200px; max-width:min(320px,calc(100vw - 32px)); padding:var(--space-1); border:1px solid var(--border); border-radius:var(--radius-card); background:var(--popover); color:var(--popover-foreground); box-shadow:var(--shadow-lg); }
|
|
2151
2208
|
.menu-item { display:flex; align-items:center; gap:10px; width:100%; min-height:var(--control-h-md); padding:0 var(--menu-px,10px); border:0; border-radius:calc(var(--radius-card) - var(--space-1)); background:transparent; color:var(--foreground); font:inherit; text-align:start; cursor:pointer; }
|
|
2152
|
-
.menu-item[data-highlighted],.menu-item:hover:not([data-disabled]) { background:var(--surface-3);
|
|
2209
|
+
.menu-item[data-highlighted],.menu-item:hover:not([data-disabled]) { background:var(--surface-3); }
|
|
2210
|
+
/* Foco de TECLADO no item: a linha de foco, por dentro, porque a lista recorta o que passa da borda
|
|
2211
|
+
(B-09 e a ordem de 25/09/2026, "HeroUI sempre primeiro": o `menu-item` do HeroUI 3.2.6 leva o
|
|
2212
|
+
`status-focused` no foco de teclado). Até aqui a regra de cima apagava a linha com
|
|
2213
|
+
`outline:none` e vencia a global: com o teclado, o item em foco era só o fundo cinza — igual ao
|
|
2214
|
+
do mouse em cima. O mouse continua só com o fundo: `:focus-visible` não acende por ponteiro.
|
|
2215
|
+
⚠ Onde o foco fica no CAMPO (`Combobox`, `CommandPalette`: o item é destacado por
|
|
2216
|
+
`aria-activedescendant`), o item nunca tem `:focus-visible`, e o destaque continua sendo o fundo. */
|
|
2217
|
+
.menu-item:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); }
|
|
2153
2218
|
.menu-item[data-disabled] { opacity:var(--opacity-disabled); cursor:not-allowed; }
|
|
2154
2219
|
/* CommandPalette (M6): a lista dentro da paleta. Reusa `.menu` e `.menu-item` — a paleta nao
|
|
2155
2220
|
inventa uma segunda pele de lista, que e o defeito que a `.table-region` cobrou caro. O que se
|
|
@@ -2199,7 +2264,7 @@ img,svg { display:block; }
|
|
|
2199
2264
|
.menubar-trigger { display:inline-flex; align-items:center; min-block-size:var(--control-h-sm); padding-inline:var(--space-3); border:0; border-radius:var(--radius-control); background:transparent; color:var(--foreground); font:inherit; font-size:var(--text-sm); font-weight:var(--weight-medium); white-space:nowrap; cursor:pointer; }
|
|
2200
2265
|
.menubar-trigger:hover { background:var(--surface-hover); }
|
|
2201
2266
|
.menubar-trigger[data-popup-open] { background:var(--secondary); color:var(--primary); }
|
|
2202
|
-
.menubar-trigger:focus-visible { outline:
|
|
2267
|
+
.menubar-trigger:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); }
|
|
2203
2268
|
/* Combobox: reaproveita .menu/.menu-item; só dimensionamento e a coluna do check são próprios.
|
|
2204
2269
|
--anchor-width e --available-height vêm do positioner do Base UI. */
|
|
2205
2270
|
.combobox-group { position:relative; display:flex; align-items:center; }
|
|
@@ -2225,7 +2290,7 @@ img,svg { display:block; }
|
|
|
2225
2290
|
/* MultiCombobox (Fase 4) — chips de multi-seleção + grupos. Espaçamento novo tokenizado. */
|
|
2226
2291
|
.combobox-multi { display:flex; align-items:center; gap:var(--space-2); width:100%; min-width:0; min-height:var(--control-h-md); padding:var(--space-1) var(--space-2); background:var(--field-bg); border:1px solid var(--border-strong); border-radius:var(--radius-control); transition:border-color var(--duration-fast); }
|
|
2227
2292
|
.combobox-multi:hover { border-color:var(--border); }
|
|
2228
|
-
.combobox-multi:focus-within { outline:
|
|
2293
|
+
.combobox-multi:focus-within { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); border-color:var(--focus-strong); }
|
|
2229
2294
|
.combobox-multi>.combobox-actions { position:static; inset-inline-end:auto; }
|
|
2230
2295
|
/* o campo de chips não é `.input`, então a regra de :disabled dos campos não o alcança. Quem
|
|
2231
2296
|
marca aqui é o `data-disabled` que o Base UI põe no InputGroup a partir do estado da Root. */
|
|
@@ -2251,7 +2316,7 @@ img,svg { display:block; }
|
|
|
2251
2316
|
o arrastar-soltar é reforço. Espaçamento novo tokenizado; superfície = card. */
|
|
2252
2317
|
.dropzone { display:flex; flex-direction:column; align-items:center; gap:var(--space-2); padding:var(--space-8) var(--space-6); text-align:center; color:var(--muted-foreground); background:var(--surface-inset); border:1px dashed var(--border-strong); border-radius:var(--radius-card); cursor:pointer; transition:border-color var(--duration-fast),background-color var(--duration-fast); }
|
|
2253
2318
|
.dropzone:hover { border-color:var(--border); }
|
|
2254
|
-
.dropzone:focus-within { outline:
|
|
2319
|
+
.dropzone:focus-within { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); border-color:var(--focus-strong); }
|
|
2255
2320
|
.dropzone[data-dragging="true"] { border-style:solid; border-color:var(--primary); background:var(--surface-2); }
|
|
2256
2321
|
.dropzone strong { color:var(--foreground); }
|
|
2257
2322
|
.dropzone-icon { color:var(--primary); }
|
|
@@ -2330,7 +2395,7 @@ img,svg { display:block; }
|
|
|
2330
2395
|
.tree-item { outline:none; }
|
|
2331
2396
|
.tree-node { display:flex; align-items:center; gap:var(--space-2); min-height:var(--control-h-md); padding-block:var(--space-1); padding-inline-end:var(--space-3); border-radius:var(--radius-sm); color:var(--foreground); cursor:pointer; user-select:none; }
|
|
2332
2397
|
.tree-node:hover { background:var(--surface-3); }
|
|
2333
|
-
.tree-item:focus-visible > .tree-node { outline:
|
|
2398
|
+
.tree-item:focus-visible > .tree-node { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); }
|
|
2334
2399
|
.tree-node[data-selected] { background:color-mix(in srgb,var(--primary) 14%,transparent); }
|
|
2335
2400
|
.tree-twist { flex:none; color:var(--muted-foreground); transition:transform var(--duration-fast); }
|
|
2336
2401
|
.tree-item[aria-expanded="true"] > .tree-node > .tree-twist { transform:rotate(90deg); }
|
|
@@ -2353,7 +2418,7 @@ img,svg { display:block; }
|
|
|
2353
2418
|
.notification-item { display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:baseline; column-gap:var(--space-3); row-gap:var(--space-1); width:100%; padding:var(--space-3); border:0; border-radius:var(--radius-sm); background:none; color:var(--foreground); font:inherit; text-align:start; }
|
|
2354
2419
|
button.notification-item { cursor:pointer; }
|
|
2355
2420
|
button.notification-item:hover { background:var(--surface-3); }
|
|
2356
|
-
.notification-item:focus-visible { outline:
|
|
2421
|
+
.notification-item:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); }
|
|
2357
2422
|
.notification-dot { grid-row:1/-1; align-self:center; width:8px; height:8px; border-radius:50%; background:var(--primary); }
|
|
2358
2423
|
.notification-item[data-read] .notification-dot { visibility:hidden; }
|
|
2359
2424
|
.notification-item-title { grid-column:2; display:flex; align-items:center; gap:var(--space-2); min-width:0; font-size:var(--text-sm); font-weight:var(--weight-medium); }
|
|
@@ -2376,14 +2441,14 @@ button.notification-item:hover { background:var(--surface-3); }
|
|
|
2376
2441
|
selecionada usa data-selected (o estado acessível é o checkbox da linha).
|
|
2377
2442
|
Espaço novo tokenizado. */
|
|
2378
2443
|
.datagrid { display:grid; gap:var(--space-3); }
|
|
2379
|
-
.datagrid > .table-wrap:focus-visible { outline:
|
|
2444
|
+
.datagrid > .table-wrap:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); box-shadow:none; }
|
|
2380
2445
|
.datagrid > .pagination { justify-self:end; }
|
|
2381
2446
|
/* Fix aditivo: os 34px dos botões numéricos do .pagination esmagavam os botões
|
|
2382
2447
|
de TEXTO (Anterior/Próxima) do Pagination React. Não muda os numéricos. */
|
|
2383
2448
|
/* text-transform/letter-spacing: o UA reseta nos <button>; herdar explícito
|
|
2384
2449
|
para o cabeçalho ordenável ficar idêntico ao th estático. */
|
|
2385
2450
|
.datagrid-sort { display:inline-flex; align-items:center; gap:var(--space-1); padding:0; border:0; background:none; color:inherit; font:inherit; text-transform:inherit; letter-spacing:inherit; cursor:pointer; }
|
|
2386
|
-
.datagrid-sort:focus-visible { outline:
|
|
2451
|
+
.datagrid-sort:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); border-radius:var(--radius-sm); }
|
|
2387
2452
|
.datagrid-sort-icon { flex:none; color:var(--subtle-foreground); }
|
|
2388
2453
|
th[aria-sort] .datagrid-sort-icon { color:var(--primary); }
|
|
2389
2454
|
.datagrid-selcol { width:1%; white-space:nowrap; }
|
|
@@ -2424,7 +2489,7 @@ th[aria-sort] .datagrid-sort-icon { color:var(--primary); }
|
|
|
2424
2489
|
.datagrid thead th:has(> .datagrid-resizer) { position:relative; }
|
|
2425
2490
|
.datagrid-resizer { position:absolute; inset-block:0; inset-inline-end:0; inline-size:var(--space-1); padding:0; border:0; background:none; cursor:col-resize; touch-action:none; }
|
|
2426
2491
|
.datagrid-resizer:hover, .datagrid-resizer:focus-visible { background:var(--primary); }
|
|
2427
|
-
.datagrid-resizer:focus-visible { outline:
|
|
2492
|
+
.datagrid-resizer:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); }
|
|
2428
2493
|
|
|
2429
2494
|
/* F8: o esqueleto dentro da célula. Sem altura própria ele mede zero — a `.skeleton`
|
|
2430
2495
|
é uma <div> vazia — e a linha de carregamento sairia rasa demais para parecer uma
|
|
@@ -2682,7 +2747,7 @@ button.graph-node-body { cursor:pointer; }
|
|
|
2682
2747
|
mora na cápsula, então é ela que precisa crescer — o filho estica atrás. */
|
|
2683
2748
|
@media (pointer:coarse) { .btn:not(.btn-link),.tabs,.segmented,.pagination button,.schedule-grid button,.media-control,.nav-list-row { min-height:var(--target-min); } .btn-icon,.media-control { min-width:var(--target-min); } }
|
|
2684
2749
|
@media (forced-colors:active) {
|
|
2685
|
-
:focus-visible { outline:
|
|
2750
|
+
:focus-visible { outline:var(--focus-width) solid CanvasText; outline-offset:var(--focus-offset); box-shadow:none; }
|
|
2686
2751
|
.badge,.pattern-gallery button[aria-pressed="true"],.device-grid button[aria-pressed="true"] { border:1px solid CanvasText; }
|
|
2687
2752
|
}
|
|
2688
2753
|
|
|
@@ -2690,9 +2755,12 @@ button.graph-node-body { cursor:pointer; }
|
|
|
2690
2755
|
/* Aurea v1.7 stabilization patch — visual design unchanged. */
|
|
2691
2756
|
.badge-running{background:var(--success-bg);color:var(--success-400);border-color:color-mix(in oklab,var(--success-400) 32%,transparent)}
|
|
2692
2757
|
/* superfície (overflow, borda, fundo, raio) mora junto com a do `.table-wrap` lá em cima — aqui
|
|
2693
|
-
fica só o que é DESTA região: ela é focável, e o
|
|
2758
|
+
fica só o que é DESTA região: ela é focável, e o foco dela é a linha de dentro, abaixo. Era um
|
|
2759
|
+
halo de `--focus` a 38% (B-09, 24/09/2026): claro demais para se ver, e fora do contrato de foco.
|
|
2760
|
+
A linha vai para DENTRO porque a região é o próprio contêiner recortado — como no HeroUI 3.2.6,
|
|
2761
|
+
que desenha o foco da tabela com `inset 0 0 0 2px var(--focus)`. */
|
|
2694
2762
|
.table-region{outline:none}
|
|
2695
|
-
.table-region:focus-visible{
|
|
2763
|
+
.table-region:focus-visible{outline:var(--focus-width) solid var(--focus-strong);outline-offset:calc(-1 * var(--focus-width));box-shadow:none}
|
|
2696
2764
|
/* CONTAINER QUERY, e não breakpoint de viewport — Parte D, item D3 (08/08/2026).
|
|
2697
2765
|
Era `@media (max-width:400px)`, o último dos seis legados do achado M13. Trocar por um degrau
|
|
2698
2766
|
da escala (639px) teria resolvido o gate e mantido o defeito: a largura que aperta os
|