@aurea-uds/core 0.35.0 → 0.37.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.
- package/dist/aurea.css +244 -36
- package/dist/aurea.js +18 -0
- package/package.json +1 -1
package/dist/aurea.css
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
--brand-yellow:oklch(0.795 0.184 86.047);
|
|
5
5
|
--brand-yellow-foreground:oklch(0.421 0.095 57.708);
|
|
6
6
|
--brand-yellow-text:oklch(0.516 0.105 86.047);
|
|
7
|
+
--brand-yellow-ink:#242424;
|
|
8
|
+
--brand-blue:#0246f1;
|
|
7
9
|
--white:oklch(1 0 0);
|
|
8
10
|
--black:oklch(0 0 0);
|
|
9
11
|
--font-ui:"Atkinson Hyperlegible Next","Segoe UI",sans-serif;
|
|
@@ -20,6 +22,8 @@
|
|
|
20
22
|
--text-3xl:1.875rem;
|
|
21
23
|
--text-4xl:2.25rem;
|
|
22
24
|
--text-5xl:3rem;
|
|
25
|
+
--text-6xl:3.75rem;
|
|
26
|
+
--text-7xl:4.5rem;
|
|
23
27
|
--leading-tight:1.2;
|
|
24
28
|
--leading-normal:1.5;
|
|
25
29
|
--leading-relaxed:1.7;
|
|
@@ -152,7 +156,7 @@
|
|
|
152
156
|
--popover:#292929;
|
|
153
157
|
--popover-foreground:#ffffff;
|
|
154
158
|
--primary:var(--brand-yellow);
|
|
155
|
-
--primary-foreground:var(--brand-yellow-
|
|
159
|
+
--primary-foreground:var(--brand-yellow-ink);
|
|
156
160
|
--link:var(--brand-yellow);
|
|
157
161
|
--link-hover:var(--brand-yellow);
|
|
158
162
|
--secondary:#333333;
|
|
@@ -174,7 +178,7 @@
|
|
|
174
178
|
--sidebar:#292929;
|
|
175
179
|
--sidebar-foreground:#ffffff;
|
|
176
180
|
--sidebar-primary:var(--brand-yellow);
|
|
177
|
-
--sidebar-primary-foreground:var(--brand-yellow-
|
|
181
|
+
--sidebar-primary-foreground:var(--brand-yellow-ink);
|
|
178
182
|
--sidebar-accent:#333333;
|
|
179
183
|
--sidebar-accent-foreground:#ffffff;
|
|
180
184
|
--sidebar-border:#525252;
|
|
@@ -198,7 +202,9 @@
|
|
|
198
202
|
--primary-emphasis:var(--primary);
|
|
199
203
|
--primary-outline:var(--primary);
|
|
200
204
|
--control-selected:var(--primary);
|
|
201
|
-
--control-selected-foreground:var(--
|
|
205
|
+
--control-selected-foreground:var(--brand-yellow-ink);
|
|
206
|
+
--control-selected-dot:oklch(0.985 0 0);
|
|
207
|
+
--primary-mark:var(--brand-yellow-foreground);
|
|
202
208
|
--selection:oklch(0.795 0.184 86.047 / 0.22);
|
|
203
209
|
--success-bg:#052505;
|
|
204
210
|
--warning-bg:#4a1e04;
|
|
@@ -242,9 +248,9 @@
|
|
|
242
248
|
--popover:#ffffff;
|
|
243
249
|
--popover-foreground:#242424;
|
|
244
250
|
--primary:var(--brand-yellow);
|
|
245
|
-
--primary-foreground:var(--brand-yellow-
|
|
246
|
-
--link:
|
|
247
|
-
--link-hover:
|
|
251
|
+
--primary-foreground:var(--brand-yellow-ink);
|
|
252
|
+
--link:var(--brand-blue);
|
|
253
|
+
--link-hover:var(--brand-blue);
|
|
248
254
|
--secondary:#ebebeb;
|
|
249
255
|
--secondary-foreground:#242424;
|
|
250
256
|
--muted:var(--secondary);
|
|
@@ -264,7 +270,7 @@
|
|
|
264
270
|
--sidebar:var(--card);
|
|
265
271
|
--sidebar-foreground:#242424;
|
|
266
272
|
--sidebar-primary:var(--primary-emphasis);
|
|
267
|
-
--sidebar-primary-foreground:var(--brand-yellow-
|
|
273
|
+
--sidebar-primary-foreground:var(--brand-yellow-ink);
|
|
268
274
|
--sidebar-accent:var(--secondary);
|
|
269
275
|
--sidebar-accent-foreground:#242424;
|
|
270
276
|
--sidebar-border:#e0e0e0;
|
|
@@ -284,11 +290,13 @@
|
|
|
284
290
|
--secondary-hover:var(--surface-hover);
|
|
285
291
|
--segment:oklch(1 0 0);
|
|
286
292
|
--focus:var(--primary);
|
|
287
|
-
--focus-strong:var(--
|
|
288
|
-
--primary-emphasis:var(--brand-
|
|
289
|
-
--primary-outline:var(--brand-
|
|
290
|
-
--control-selected:var(--brand-yellow
|
|
291
|
-
--control-selected-foreground:
|
|
293
|
+
--focus-strong:var(--foreground);
|
|
294
|
+
--primary-emphasis:var(--brand-blue);
|
|
295
|
+
--primary-outline:var(--brand-blue);
|
|
296
|
+
--control-selected:var(--brand-yellow);
|
|
297
|
+
--control-selected-foreground:var(--brand-yellow-ink);
|
|
298
|
+
--control-selected-dot:oklch(0.985 0 0);
|
|
299
|
+
--primary-mark:var(--brand-yellow-foreground);
|
|
292
300
|
--success-400:#0e700e;
|
|
293
301
|
--warning-400:#8a3707;
|
|
294
302
|
--danger-400:#b10e1c;
|
|
@@ -366,6 +374,8 @@
|
|
|
366
374
|
--selection:oklch(0.32 0.08 50);
|
|
367
375
|
--control-selected:oklch(0.72 0.19 48);
|
|
368
376
|
--control-selected-foreground:oklch(0.16 0.02 250);
|
|
377
|
+
--control-selected-dot:oklch(0.16 0.02 250);
|
|
378
|
+
--primary-mark:oklch(0.16 0.02 250);
|
|
369
379
|
--overlay:oklch(0 0 0 / 0.6);
|
|
370
380
|
--chart-1:oklch(0.74 0.18 50);
|
|
371
381
|
--chart-2:oklch(0.84 0.14 88);
|
|
@@ -428,6 +438,8 @@
|
|
|
428
438
|
--selection:oklch(0.96 0.04 60);
|
|
429
439
|
--control-selected:oklch(0.682 0.197 44.5);
|
|
430
440
|
--control-selected-foreground:oklch(1 0 0);
|
|
441
|
+
--control-selected-dot:oklch(1 0 0);
|
|
442
|
+
--primary-mark:oklch(1 0 0);
|
|
431
443
|
--overlay:oklch(0.16 0.018 250 / 0.45);
|
|
432
444
|
--chart-1:oklch(0.682 0.197 44.5);
|
|
433
445
|
--chart-2:oklch(0.82 0.15 88);
|
|
@@ -450,6 +462,8 @@
|
|
|
450
462
|
--warning-bg:oklch(0.95 0.06 80);
|
|
451
463
|
--danger-bg:oklch(0.95 0.05 25);
|
|
452
464
|
--info-bg:oklch(0.95 0.04 235);
|
|
465
|
+
--link:oklch(0.52 0.106 86.047);
|
|
466
|
+
--link-hover:oklch(0.44 0.106 86.047);
|
|
453
467
|
}
|
|
454
468
|
[data-density="compact"]{
|
|
455
469
|
--control-h-xs:1.5rem;
|
|
@@ -618,6 +632,43 @@ img,svg { display:block; }
|
|
|
618
632
|
.section-inset { background:var(--surface-inset); }
|
|
619
633
|
.section-spacing-sm { padding-block:var(--space-8); }
|
|
620
634
|
@media (min-width:768px) { .section { padding-block:var(--space-24); } .section-spacing-sm { padding-block:var(--space-12); } }
|
|
635
|
+
/* GAR-21 e GAR-22 (lote U, 19/10/2026): a `Section` variant="hero" — a abertura de página. Os vãos são os do início da
|
|
636
|
+
referência (medidos em 15/10/2026): a sobrelinha a 8 do título (16 a partir de 1024), o texto colado no título, os
|
|
637
|
+
botões a 16, o que vier depois a 8 (16 a partir de 1024); o texto 16/24, e 18/28 a partir de 768, em 672 de largura (o
|
|
638
|
+
640 da escala mais o --space-8). O título 36, 60 a partir de 768 e 72 a partir de 1024 (os três tamanhos são decisão
|
|
639
|
+
do Victor; as larguras, desta peça). Com imagem e align="start", o texto e a imagem lado a lado a partir de 1024;
|
|
640
|
+
abaixo disso, a imagem desce.
|
|
641
|
+
As larguras são da FAIXA, e não da janela (`@container`, como o `.media-player`): de ponta a ponta, a faixa tem a
|
|
642
|
+
largura da janela e dá o mesmo; numa coluna mais estreita (a prévia do catálogo), o título não passa dela. O 72 entra
|
|
643
|
+
em 1024, e não em 1280: numa janela de 1280 a barra de rolagem deixa a faixa com menos de 1280, e o 72 não apareceria
|
|
644
|
+
na tela larga mais comum. */
|
|
645
|
+
.section-hero { container:aurea-hero / inline-size; }
|
|
646
|
+
.section-hero-content { display:grid; justify-items:start; min-inline-size:0; }
|
|
647
|
+
.section-hero-center .section-hero-content { justify-items:center; text-align:center; }
|
|
648
|
+
.section-hero-text { display:grid; justify-items:inherit; }
|
|
649
|
+
/* A sobrelinha em flex: com um selo ou link dentro de um bloco comum, a linha de texto do bloco somava 2 à altura dele. */
|
|
650
|
+
.section-hero-eyebrow { display:flex; align-items:center; }
|
|
651
|
+
.section-hero-content > * + * { margin-block-start:var(--space-2); }
|
|
652
|
+
.section-hero-content > * + .section-hero-actions { margin-block-start:var(--space-4); }
|
|
653
|
+
.section-hero-title { margin:0; color:var(--foreground); font-family:var(--font-heading); font-size:var(--text-4xl); line-height:var(--text-4xl-leading); font-weight:var(--weight-bold); letter-spacing:var(--tracking-tight); text-wrap:balance; }
|
|
654
|
+
.section-hero-description { max-inline-size:calc(var(--breakpoint-sm) + var(--space-8)); margin:0; color:var(--muted-foreground); font-size:var(--text-base); line-height:var(--leading-normal); text-wrap:pretty; }
|
|
655
|
+
.section-hero-center .section-hero-description { text-wrap:balance; }
|
|
656
|
+
.section-hero-actions { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-3); }
|
|
657
|
+
.section-hero-center .section-hero-actions { justify-content:center; }
|
|
658
|
+
/* O campo de e-mail no lugar dos botões: o formulário cresce até 480 (o --breakpoint-xs), e não fica do tamanho do texto
|
|
659
|
+
de exemplo. */
|
|
660
|
+
.section-hero-actions > form { flex:1 1 auto; max-inline-size:var(--breakpoint-xs); }
|
|
661
|
+
.section-hero-media { min-inline-size:0; margin-block-start:var(--space-12); }
|
|
662
|
+
@container aurea-hero (min-width:768px) {
|
|
663
|
+
.section-hero-title { font-size:var(--text-6xl); line-height:var(--leading-none); }
|
|
664
|
+
.section-hero-description { font-size:var(--text-lg); line-height:var(--text-lg-leading); }
|
|
665
|
+
}
|
|
666
|
+
@container aurea-hero (min-width:1024px) {
|
|
667
|
+
.section-hero-content > * + :not(.section-hero-actions) { margin-block-start:var(--space-4); }
|
|
668
|
+
.section-hero-split .section-hero-inner { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); align-items:center; gap:var(--space-12); }
|
|
669
|
+
.section-hero-split .section-hero-media { margin-block-start:0; }
|
|
670
|
+
.section-hero-title { font-size:var(--text-7xl); }
|
|
671
|
+
}
|
|
621
672
|
/* GAR-06 (07/10/2026): a `Section` variant="footer" — o rodapé de site, uma faixa como as outras
|
|
622
673
|
(fundo, respiro e tema vêm dela). No celular tudo empilha numa coluna; a partir de 768 a marca
|
|
623
674
|
fica à esquerda e as colunas de links se repartem à direita, cada uma com pelo menos 8rem (a
|
|
@@ -982,6 +1033,75 @@ img,svg { display:block; }
|
|
|
982
1033
|
}
|
|
983
1034
|
}
|
|
984
1035
|
|
|
1036
|
+
/* O ARRANJO DE DOCUMENTAÇÃO NO CELULAR E NO TABLET (`AppShell layout="docs"`, lote U, 19/10/2026 — o Victor: "tudo como
|
|
1037
|
+
ela"), medido na página da documentação da referência a 375, 768 e 1100:
|
|
1038
|
+
- a LATERAL é coluna desde 768 (e não desde 1024): de 768 a 1023 ela fica à esquerda do texto, como lá;
|
|
1039
|
+
- abaixo de 768 ela é a gaveta, e abre pela DIREITA, do lado do botão (que o `AppShell` põe no fim da barra);
|
|
1040
|
+
- o índice ("On this page") é coluna só de 1280 para cima. Abaixo, ele é a GAVETA da BARRA DO ÍNDICE: uma barra de 40
|
|
1041
|
+
presa logo abaixo do topo, na coluna do texto, com o nome da seção em vista e a setinha; tocar desce a lista. A
|
|
1042
|
+
referência desenha um círculo de progresso; aqui é o ícone de lista, e nenhuma linha (ADR-0072).
|
|
1043
|
+
Estas regras vêm DEPOIS das da gaveta de sempre e levam a classe do arranjo — com a mesma força, a ordem decide. */
|
|
1044
|
+
.docs-toc-bar { display:none; }
|
|
1045
|
+
@media (min-width:768px) and (max-width:1023px) {
|
|
1046
|
+
.app-shell.app-shell-docs { grid-template-columns:var(--docs-sidebar-width) minmax(0,1fr); }
|
|
1047
|
+
.app-shell-docs .btn.nav-toggle { display:none; }
|
|
1048
|
+
.app-shell-docs > .sidebar[popover]:not(.app-shell-aside):not(:popover-open) { display:flex; }
|
|
1049
|
+
.app-shell-docs > .sidebar:not(.app-shell-aside):not(.sidebar-flush) { --shell-top:calc(var(--docs-top) + var(--space-4)); grid-column:1; grid-row:2 / span 2;
|
|
1050
|
+
position:sticky; inset-block-start:var(--shell-top); align-self:start; block-size:calc(100vh - var(--shell-top) - var(--space-8));
|
|
1051
|
+
max-block-size:none; margin:var(--space-4) 0 0; border-width:0; padding-block:var(--space-2) var(--space-4); padding-inline:var(--space-4); }
|
|
1052
|
+
.app-shell-docs > .sidebar > .sidebar-nav > .sidebar-list > li:first-child > .sidebar-group-label { margin-block-start:0; }
|
|
1053
|
+
.app-shell-docs > .sidebar .sidebar-item { padding-inline:var(--space-2); }
|
|
1054
|
+
.app-shell-docs > .sidebar .sidebar-group-label { margin-inline:var(--space-2); }
|
|
1055
|
+
.app-shell-docs > .docs-toc-bar { grid-column:2; grid-row:2; }
|
|
1056
|
+
.app-shell-docs > .content.content { grid-column:2; grid-row:3; }
|
|
1057
|
+
}
|
|
1058
|
+
@media (min-width:1024px) and (max-width:1279px) {
|
|
1059
|
+
.app-shell-docs > .sidebar:not(.app-shell-aside):not(.sidebar-flush) { grid-row:2 / span 2; }
|
|
1060
|
+
.app-shell-docs > .docs-toc-bar { grid-column:3; grid-row:2; }
|
|
1061
|
+
.app-shell-docs > .content.content { grid-row:3; }
|
|
1062
|
+
}
|
|
1063
|
+
@media (max-width:1279px) {
|
|
1064
|
+
.app-shell-docs > .docs-toc-bar { display:block; position:sticky; inset-block-start:var(--docs-top); z-index:var(--z-sticky); background:var(--background); }
|
|
1065
|
+
.docs-toc-toggle { display:flex; align-items:center; gap:var(--space-2); inline-size:100%; min-block-size:var(--space-10); padding:0 var(--space-6);
|
|
1066
|
+
border:0; background:transparent; color:var(--muted-foreground); font:inherit; font-size:var(--text-sm); text-align:start; cursor:pointer; }
|
|
1067
|
+
.docs-toc-toggle:hover { color:var(--foreground); }
|
|
1068
|
+
.docs-toc-toggle:focus-visible { outline:var(--focus-width) solid var(--focus-strong); outline-offset:calc(-1 * var(--focus-width)); }
|
|
1069
|
+
.docs-toc-current { flex:1; min-inline-size:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
1070
|
+
.app-shell-docs:has(> .app-shell-aside:popover-open) .docs-toc-toggle > .icon:last-child { rotate:180deg; }
|
|
1071
|
+
}
|
|
1072
|
+
@supports selector(:popover-open) {
|
|
1073
|
+
@media (max-width:1279px) {
|
|
1074
|
+
.app-shell-docs > .sidebar.app-shell-aside[popover]:not(:popover-open) { display:none; }
|
|
1075
|
+
/* Aberto, ele desce da barra: preso logo abaixo dela, na largura da coluna do texto, uma superfície que flutua por cima
|
|
1076
|
+
do texto (o fundo opaco do popover, o canto do cartão). Sem véu: a lista é um atalho, não uma janela. */
|
|
1077
|
+
.app-shell-docs > .sidebar.app-shell-aside[popover]:popover-open { position:fixed; inset-block-start:calc(var(--docs-top) + var(--space-10));
|
|
1078
|
+
inset-block-end:auto; inset-inline:var(--space-4); inline-size:auto; block-size:auto;
|
|
1079
|
+
max-block-size:calc(100dvh - var(--docs-top) - var(--space-10) - var(--space-4)); margin:0; padding:var(--space-2) var(--space-4) var(--space-4);
|
|
1080
|
+
overflow:auto; border-radius:var(--radius-card); background:var(--popover); color:var(--popover-foreground); box-shadow:var(--shadow-lg); }
|
|
1081
|
+
.app-shell-docs > .sidebar.app-shell-aside[popover]::backdrop { background:transparent; }
|
|
1082
|
+
}
|
|
1083
|
+
@media (min-width:768px) and (max-width:1279px) {
|
|
1084
|
+
.app-shell-docs > .sidebar.app-shell-aside[popover]:popover-open { inset-inline-start:calc(var(--docs-sidebar-width) + var(--space-4)); }
|
|
1085
|
+
}
|
|
1086
|
+
@media (max-width:767px) {
|
|
1087
|
+
/* A gaveta ABERTA é uma superfície, mesmo com a lateral sem caixa (`sidebarVariant="plain"`) do desktop: sem o fundo,
|
|
1088
|
+
a lista se misturava ao texto da página por baixo (medido a 375). O fundo e o canto do popover, como o do índice. */
|
|
1089
|
+
.app-shell-docs > .sidebar[popover]:not(.app-shell-aside):popover-open { inset-inline-start:auto; inset-inline-end:var(--space-4);
|
|
1090
|
+
padding:var(--space-2) var(--space-4) var(--space-4); border-radius:var(--radius-card); background:var(--popover); color:var(--popover-foreground); box-shadow:var(--shadow-lg); }
|
|
1091
|
+
.app-shell-docs > .sidebar[popover]:not(.app-shell-aside):popover-open .sidebar-item { padding-inline:var(--space-2); }
|
|
1092
|
+
.app-shell-docs > .sidebar[popover]:not(.app-shell-aside):popover-open .sidebar-group-label { margin-inline:var(--space-2); }
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
/* De 1280 para cima o índice é a coluna, e o atributo de gaveta não pode encolhê-lo: a regra da gaveta fechada
|
|
1096
|
+
(`.sidebar[popover]:not(:popover-open)`, `width:auto`) vem antes na folha com a mesma força e o deixava com 200 (medido). */
|
|
1097
|
+
@media (min-width:1280px) {
|
|
1098
|
+
.app-shell-docs > .sidebar.app-shell-aside[popover] { inline-size:var(--docs-toc-width); }
|
|
1099
|
+
}
|
|
1100
|
+
/* No celular o título fica a 32 da barra do índice, como o da referência a 375 (de 768 para cima, 16 nas duas). */
|
|
1101
|
+
@media (max-width:767px) {
|
|
1102
|
+
.app-shell-docs > .content.content { padding-block-start:var(--space-8); }
|
|
1103
|
+
}
|
|
1104
|
+
|
|
985
1105
|
/* ── A LISTA DA LATERAL (PLANO-1.0, item B1) ───────────────────────────────────────
|
|
986
1106
|
Até 06/08/2026 a Sidebar era só a caixa: item, grupo, aninhamento e marca de item atual
|
|
987
1107
|
existiam neste arquivo como `.doc-nav`, que é CHROME do catálogo (achado A6) e nunca foi
|
|
@@ -1279,7 +1399,7 @@ img,svg { display:block; }
|
|
|
1279
1399
|
altura da barra não muda. O mesmo no `navigation.tsx`. */
|
|
1280
1400
|
.bottom-nav.bottom-nav-ind-circle-bold .bottom-nav-item { padding:0; }
|
|
1281
1401
|
.bottom-nav-disc { display:flex; flex-direction:column; align-items:center; justify-content:center; inline-size:var(--bottomnav-bold,3.5rem); max-inline-size:100%; min-height:var(--control-h-lg); padding:var(--space-1); border-radius:var(--radius-full); }
|
|
1282
|
-
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] { color:var(--primary-
|
|
1402
|
+
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] { color:var(--primary-mark); }
|
|
1283
1403
|
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .bottom-nav-disc { background:var(--primary); }
|
|
1284
1404
|
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
1285
1405
|
/* O contador do `circle-bold` INVERTE, como o do `.btn-primary`, e a volta atrás está medida.
|
|
@@ -1287,8 +1407,8 @@ img,svg { display:block; }
|
|
|
1287
1407
|
do Victor mostram. O gate de contraste reprovou no tema CLARO: sobre o amarelo sólido, nem o
|
|
1288
1408
|
fundo do contador nem o anel branco chegam a 3:1. No escuro passava, e é assim que este defeito
|
|
1289
1409
|
se esconde. Fio fino não substitui contraste quando as duas cores são claras. */
|
|
1290
|
-
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .badge { background:var(--primary-
|
|
1291
|
-
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .bottom-nav-badge { color:var(--primary-
|
|
1410
|
+
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .badge { background:var(--primary-mark); color:var(--primary); border-color:transparent; }
|
|
1411
|
+
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .bottom-nav-badge { color:var(--primary-mark); }
|
|
1292
1412
|
/* ── CÁPSULA (`capsule`) — a "A" da bancada do Victor, 03/10/2026: o modelo de uma das referências ─
|
|
1293
1413
|
A moldura do ícone vira a cápsula de 56 × 32 do indicador ativo dessa referência
|
|
1294
1414
|
(`--bottomnav-bold` × `--bottomnav-ring`), em TODOS os itens; só a do escolhido é pintada, de
|
|
@@ -1299,9 +1419,9 @@ img,svg { display:block; }
|
|
|
1299
1419
|
mesma razão medida do `circle-bold`, logo acima. */
|
|
1300
1420
|
.bottom-nav-ind-capsule .bottom-nav-mark { width:var(--bottomnav-bold,3.5rem); height:var(--bottomnav-ring); border-radius:var(--radius-full); }
|
|
1301
1421
|
.bottom-nav-ind-capsule .bottom-nav-badge { inset-inline-end:calc((var(--bottomnav-bold,3.5rem) - var(--bottomnav-ring)) / 2 - var(--space-05)); }
|
|
1302
|
-
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .bottom-nav-mark { background:var(--primary); color:var(--primary-
|
|
1422
|
+
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .bottom-nav-mark { background:var(--primary); color:var(--primary-mark); }
|
|
1303
1423
|
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
1304
|
-
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .badge { background:var(--primary-
|
|
1424
|
+
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .badge { background:var(--primary-mark); color:var(--primary); border-color:transparent; }
|
|
1305
1425
|
/* No `content`, o recheio de sempre (`--space-1`) e não o `--space-3`: com ele cada item teria 80. */
|
|
1306
1426
|
.bottom-nav-content:not(.bottom-nav-edge).bottom-nav-ind-capsule .bottom-nav-item { padding-inline:var(--space-1); }
|
|
1307
1427
|
/* ── EXPANDE (`expand`) — a "C" da bancada do Victor, 03/10/2026 ───────────────────────────────
|
|
@@ -1315,9 +1435,9 @@ img,svg { display:block; }
|
|
|
1315
1435
|
.bottom-nav-ind-expand .bottom-nav-item { flex-direction:row; gap:var(--space-2); min-width:var(--target-min); min-height:var(--target-min); padding:0; }
|
|
1316
1436
|
.bottom-nav-ind-expand .bottom-nav-mark { width:var(--icon-lg); }
|
|
1317
1437
|
.bottom-nav-ind-expand .bottom-nav-label { font-size:var(--text-sm); }
|
|
1318
|
-
.bottom-nav-ind-expand .bottom-nav-item[aria-current] { flex:none; inline-size:calc(var(--icon-lg) + var(--space-2) + var(--space-20) + 2 * var(--space-3)); padding-inline:var(--space-3); background:var(--primary); color:var(--primary-
|
|
1438
|
+
.bottom-nav-ind-expand .bottom-nav-item[aria-current] { flex:none; inline-size:calc(var(--icon-lg) + var(--space-2) + var(--space-20) + 2 * var(--space-3)); padding-inline:var(--space-3); background:var(--primary); color:var(--primary-mark); }
|
|
1319
1439
|
.bottom-nav-ind-expand .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
1320
|
-
.bottom-nav-ind-expand .bottom-nav-item[aria-current] .badge { background:var(--primary-
|
|
1440
|
+
.bottom-nav-ind-expand .bottom-nav-item[aria-current] .badge { background:var(--primary-mark); color:var(--primary); border-color:transparent; }
|
|
1321
1441
|
.bottom-nav-content:not(.bottom-nav-edge).bottom-nav-ind-expand .bottom-nav-item:not([aria-current]) { flex:none; inline-size:var(--target-min); padding-inline:0; }
|
|
1322
1442
|
|
|
1323
1443
|
/* ── A LINHA DE LISTA TOCÁVEL (§4.3 do CONSUMIDOR-1) ──────────────────────────
|
|
@@ -1858,6 +1978,11 @@ img,svg { display:block; }
|
|
|
1858
1978
|
linha passa a ser só o adorno de 100%, que é o que se quer. */
|
|
1859
1979
|
.input-group>.input,.input-group>.select,.input-group>.textarea { flex:1 1 0; min-inline-size:0; background:transparent; border:0; border-radius:0; }
|
|
1860
1980
|
.input-group>.input:focus-visible,.input-group>.select:focus-visible,.input-group>.textarea:focus-visible { outline:none; }
|
|
1981
|
+
/* Desativado (lote 1, 20/10/2026): no grupo, quem pinta o estado é a moldura, como no inválido — só o texto recuava, e o
|
|
1982
|
+
fundo e o ícone ficavam iguais. O campo de dentro não recua de novo (seriam 0,25). Só o CAMPO conta: um botão
|
|
1983
|
+
desativado no adorno (o de limpar, sem texto) não desativa o grupo. */
|
|
1984
|
+
.input-group:has(> :is(.input,.select,.textarea):disabled) { opacity:var(--opacity-disabled); cursor:not-allowed; }
|
|
1985
|
+
.input-group>.input:disabled,.input-group>.select:disabled,.input-group>.textarea:disabled { opacity:1; }
|
|
1861
1986
|
/* O adorno não estica nem encolhe, e nunca rouba o clique do campo — a menos que ele PRÓPRIO
|
|
1862
1987
|
seja clicável, e aí quem devolve o ponteiro é o botão de dentro. */
|
|
1863
1988
|
.input-group-addon { display:inline-flex; flex:none; align-items:center; gap:var(--space-1); color:var(--subtle-foreground); }
|
|
@@ -1963,7 +2088,9 @@ img,svg { display:block; }
|
|
|
1963
2088
|
de virar a seta seriam dois idiomas para "isto está aberto". */
|
|
1964
2089
|
.collapsible { display:grid; }
|
|
1965
2090
|
.collapsible-trigger { display:flex; align-items:center; gap:var(--space-2); inline-size:100%; min-block-size:var(--control-h-sm); padding:0; border:0; background:transparent; color:var(--foreground); font:inherit; font-weight:var(--weight-medium); text-align:start; cursor:pointer; }
|
|
1966
|
-
.collapsible-trigger:hover { color:var(--primary); }
|
|
2091
|
+
.collapsible-trigger:hover:not([data-disabled]) { color:var(--primary); }
|
|
2092
|
+
/* Desativado (lote 1, 20/10/2026): o motor marca o gatilho com `data-disabled`; ele recua e não acende no hover. */
|
|
2093
|
+
.collapsible-trigger[data-disabled] { opacity:var(--opacity-disabled); cursor:not-allowed; }
|
|
1967
2094
|
.collapsible-chevron { flex:none; transition:transform var(--duration-fast) var(--ease-standard); }
|
|
1968
2095
|
.collapsible-trigger[data-panel-open] .collapsible-chevron { transform:rotate(180deg); }
|
|
1969
2096
|
.collapsible-panel { overflow:hidden; }
|
|
@@ -2054,7 +2181,12 @@ img,svg { display:block; }
|
|
|
2054
2181
|
/* A opção marcada fica CHEIA, com o ponto no meio, como a da referência (o ponto dela tem 8 numa
|
|
2055
2182
|
marca de 16: a metade). Era vazia, com o ponto amarelo. */
|
|
2056
2183
|
.radio input:checked + .control-mark { background:var(--control-selected); border-color:transparent; }
|
|
2057
|
-
|
|
2184
|
+
/* A BOLINHA tem 6 de 14, a da referência (`scale: 0.4286` no CSS publicado dela, 3.2.6), e é ENCOLHIDA POR ESCALA a
|
|
2185
|
+
partir do miolo inteiro, e não desenhada pequena (17/10/2026 — o Victor: "a bolinha do rádio não está centralizada, é
|
|
2186
|
+
torta"). Medido na imagem: a de antes, 7 dentro de 14, ficava meio ponto acima e à esquerda do centro em todo zoom —
|
|
2187
|
+
a folga de 3,5 virava 3 de um lado e 4 do outro. A escala gira em torno do centro exato da caixa. */
|
|
2188
|
+
.radio input:checked + .control-mark:after { content:""; inline-size:100%; block-size:100%; border-radius:50%;
|
|
2189
|
+
background:var(--control-selected-dot); scale:calc(3 / 7); }
|
|
2058
2190
|
.switch { display:inline-flex; align-items:center; gap:var(--space-3); font-size:var(--text-sm); font-weight:var(--weight-medium); cursor:pointer; } .switch input { position:absolute; opacity:0; }
|
|
2059
2191
|
/* O TRILHO DO SWITCH (0.32.0): o da referência, 40 × 20 (sm 32 × 16, lg 48 × 24) — a largura é o
|
|
2060
2192
|
dobro da altura. Era 42 × 24. A altura é a de controle MENOS 16: dá exatamente os três dela
|
|
@@ -2078,7 +2210,11 @@ img,svg { display:block; }
|
|
|
2078
2210
|
mesma distância nos dois sentidos de escrita. */
|
|
2079
2211
|
.switch-track:after { --thumb-h:calc(var(--switch-h) - 2 * var(--space-05)); --thumb-w:calc(var(--thumb-h) * 11 / 8); content:""; position:absolute; inset-inline-start:calc(var(--space-05) - var(--border-width)); top:calc(var(--space-05) - var(--border-width)); block-size:var(--thumb-h); inline-size:var(--thumb-w); border-radius:var(--radius-full); background:var(--muted-foreground); transition:transform var(--duration-base) var(--ease-standard),background var(--duration-base) var(--ease-standard); }
|
|
2080
2212
|
.switch-track { --switch-x:calc(var(--switch-h) * 2 - (var(--switch-h) - 2 * var(--space-05)) * 11 / 8 - 2 * var(--space-05)); }
|
|
2081
|
-
.switch input:checked + .switch-track { background:var(--control-selected); border-color:transparent; } .switch input:checked + .switch-track:after { transform:translateX(var(--switch-x)); background:var(--
|
|
2213
|
+
.switch input:checked + .switch-track { background:var(--control-selected); border-color:transparent; } .switch input:checked + .switch-track:after { transform:translateX(var(--switch-x)); background:var(--primary-mark); }
|
|
2214
|
+
/* DESATIVADO (lote 1, as travas, 20/10/2026 — o check 49 achou): o `<input>` é invisível e quem desenha é a marca,
|
|
2215
|
+
então o `disabled` chegava ao campo e nada mudava na tela. A peça inteira recua, marca e nome, como na referência
|
|
2216
|
+
(o estado de desativado dela vai na raiz do controle, a 0,5). Vale também para as opções de um grupo desativado. */
|
|
2217
|
+
.checkbox:has(> input:disabled),.radio:has(> input:disabled),.switch:has(> input:disabled) { opacity:var(--opacity-disabled); cursor:not-allowed; }
|
|
2082
2218
|
.range { width:100%; accent-color:var(--primary); }
|
|
2083
2219
|
/* Slider VERTICAL, no `<input type=range>` NATIVO — sem trocar de motor.
|
|
2084
2220
|
|
|
@@ -2118,7 +2254,7 @@ img,svg { display:block; }
|
|
|
2118
2254
|
.slider-track { position:relative; inline-size:100%; block-size:var(--space-5); border-inline:var(--space-3) solid transparent; border-radius:var(--radius-full); background:var(--secondary); }
|
|
2119
2255
|
.slider-fill { box-sizing:content-box; block-size:100%; margin-inline-start:calc(-1 * var(--space-3)); padding-inline-start:var(--space-3); border-radius:var(--radius-full); background:var(--primary); }
|
|
2120
2256
|
.slider-thumb { display:grid; place-items:center; inline-size:calc(var(--space-6) + var(--space-1)); block-size:100%; border-radius:var(--radius-full); background:var(--primary); cursor:grab; }
|
|
2121
|
-
.slider-thumb::after { content:""; inline-size:var(--space-6); block-size:var(--space-4); border-radius:var(--radius-full); background:var(--primary-
|
|
2257
|
+
.slider-thumb::after { content:""; inline-size:var(--space-6); block-size:var(--space-4); border-radius:var(--radius-full); background:var(--primary-mark); box-shadow:var(--shadow-sm); transition:scale var(--duration-fast) var(--ease-standard); }
|
|
2122
2258
|
.slider-thumb[data-dragging] { cursor:grabbing; }
|
|
2123
2259
|
.slider-thumb[data-dragging]::after { scale:.9; }
|
|
2124
2260
|
.slider-thumb:has(input:focus-visible) { outline:var(--focus-width) solid var(--focus-strong); outline-offset:var(--focus-offset); }
|
|
@@ -2245,7 +2381,14 @@ img,svg { display:block; }
|
|
|
2245
2381
|
.btn[aria-pressed="true"]:not(.btn-icon)::after,.segmented button.active::after,.tabs-secondary .tab[data-active]::after,
|
|
2246
2382
|
.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); }
|
|
2247
2383
|
/* e o fio do ativo da lateral segue a marca DELA, pelo mesmo motivo da regra de cor acima. */
|
|
2248
|
-
.doc-nav a.active::after,.sidebar-item[aria-current]::after { background:color-mix(in oklab, var(--sidebar-primary) 75%, transparent); }
|
|
2384
|
+
.doc-nav a.active::after,.sidebar-item[aria-current]::after { background:var(--sidebar-current-line, color-mix(in oklab, var(--sidebar-primary) 75%, transparent)); }
|
|
2385
|
+
/* 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
|
|
2386
|
+
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á
|
|
2387
|
+
marca o estado, e o fio de baixo some (`--sidebar-current-line` transparente: regra no `::after` não aceitaria a guarda
|
|
2388
|
+
de tema no fim). Só sem `data-brand` (a `lory` tem a lateral dela) e só no claro (no escuro, a letra amarela continua).
|
|
2389
|
+
Sobre o amarelo, a letra de destaque de DENTRO do item (o selo primário de contagem, um ícone de destaque) é a tinta do
|
|
2390
|
+
botão: o azul sobre o amarelo mede 3,49:1 — o axe da varredura achou, no "12" do exemplo da `Sidebar`. */
|
|
2391
|
+
[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); }
|
|
2249
2392
|
[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"] *),
|
|
2250
2393
|
[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"] *)
|
|
2251
2394
|
{ --btn-fg:color-mix(in oklab, var(--primary) 45%, var(--foreground)); color:color-mix(in oklab, var(--primary) 45%, var(--foreground)); }
|
|
@@ -2258,7 +2401,8 @@ img,svg { display:block; }
|
|
|
2258
2401
|
/* `line-height:1` não é enfeite: sem ele o .badge herdava a entrelinha do pai e a MESMA
|
|
2259
2402
|
classe media 26px dentro do .brand (lh 18px) e 22px dentro de um .btn-nav (lh 12px) — na
|
|
2260
2403
|
mesma barra (achado A2, 26/07/2026). Geometria de componente não se decide pelo contexto.
|
|
2261
|
-
|
|
2404
|
+
A etiqueta de código do SITE (a classe `.chip` do `scripts/build-catalog.mjs`, que não é peça da Aurea) já tinha
|
|
2405
|
+
aprendido isso; o .badge não. Desde 19/10/2026 (GAR-20), o componente `Chip` existe: é outro nome do `Badge`. */
|
|
2262
2406
|
/* 0.32.0: as medidas do Chip da referência (o `Badge` da Aurea é o Chip dela), lidas no CSS publicado:
|
|
2263
2407
|
24 de altura, 10 até o texto (8 da caixa + 2 do rótulo — aqui, com a borda de 1 que é nossa, 9), 4
|
|
2264
2408
|
entre o glifo e o texto (era 6); `sm` 20 com 6 até o texto, `lg` 28 com 14 e letra de 14. A cápsula e a
|
|
@@ -2272,7 +2416,14 @@ img,svg { display:block; }
|
|
|
2272
2416
|
numa fila, `align-self:flex-start` tiraria o selo do meio; o tamanho definido só desliga o
|
|
2273
2417
|
esticar, que é o que a coluna faz com um item sem tamanho. */
|
|
2274
2418
|
.badge-fit { inline-size:fit-content; }
|
|
2275
|
-
|
|
2419
|
+
/* O cheio da marca escreve com a letra do botão amarelo (`--primary-foreground`): na ADR-0073 o acento do claro virou o
|
|
2420
|
+
próprio amarelo, e a letra de antes (`--background`, clara) media 1,75:1 em cima dele. O fundo, na Aurea padrão, é o
|
|
2421
|
+
primário desde a ADR-0076 (a regra logo abaixo). */
|
|
2422
|
+
.badge-primary { --badge-accent:var(--primary-emphasis); --badge-on:var(--primary-foreground); color:var(--primary-emphasis); border-color:transparent; background:color-mix(in srgb,var(--primary) 10%,transparent); }
|
|
2423
|
+
/* ADR-0076 (20/10/2026): na Aurea padrão a letra de destaque do claro é o AZUL, e o cheio continua o AMARELO — o fundo do
|
|
2424
|
+
selo cheio é o primário, e não o acento (com o acento, sairia a letra cinza no azul, 1,99:1). Só sem `data-brand`, como o
|
|
2425
|
+
contorno lá embaixo: na `lory` do claro o primário com a letra dela mede 3,08:1, e o acento dela já é o fundo certo. */
|
|
2426
|
+
.badge-primary:not(:where([data-brand],[data-brand] *)) { --badge-fill:var(--primary); }
|
|
2276
2427
|
/* TAMANHOS. O md é a base (24px), que não muda — é o que as 103 fichas já usam. */
|
|
2277
2428
|
.badge-xs { min-height:var(--space-4); padding:0 var(--space-1); border-width:0; }
|
|
2278
2429
|
.badge-sm { min-height:var(--space-5); padding:0 calc(var(--space-1) + var(--space-05) - var(--border-width)); }
|
|
@@ -2357,8 +2508,8 @@ img,svg { display:block; }
|
|
|
2357
2508
|
`--background` como texto do sólido serve aos DOIS temas porque o acento já vira com o
|
|
2358
2509
|
tema: `--success-400` é verde CLARO no escuro e verde ESCURO no claro. */
|
|
2359
2510
|
/* O selo CHEIO de estado é o botão cheio do mesmo tom (ADR-0061): a mesma cor funda e a mesma letra
|
|
2360
|
-
(`--badge-fill`/`--badge-on`). Quem não declara o par (as categorias,
|
|
2361
|
-
|
|
2511
|
+
(`--badge-fill`/`--badge-on`). Quem não declara o par (as categorias, o neutro) segue enchendo com o
|
|
2512
|
+
acento, como antes; a marca declara a letra (ADR-0073) e, na Aurea padrão, o fundo é o primário (ADR-0076). */
|
|
2362
2513
|
.badge-solid { background:var(--badge-fill, var(--badge-accent)); color:var(--badge-on, var(--background)); border-color:transparent; }
|
|
2363
2514
|
.badge-outline { background:transparent; color:var(--badge-accent); border-color:transparent; }
|
|
2364
2515
|
/* flat (15/10/2026): o tom de sempre sem a linha em volta — o selo da referência não tem borda em forma nenhuma. A
|
|
@@ -2478,7 +2629,23 @@ img,svg { display:block; }
|
|
|
2478
2629
|
Só o ícone DIRETO do alerta: um ícone dentro do corpo (num botão, num link) é do corpo. */
|
|
2479
2630
|
.alert>.icon { --step-icon:var(--icon-sm); margin:var(--space-1); color:var(--alert-tone); }
|
|
2480
2631
|
.banner strong { font-size:var(--text-sm); } .banner p { margin:0; color:var(--muted-foreground); font-size:var(--text-sm); }
|
|
2481
|
-
|
|
2632
|
+
/* GAR-19 (lote U, 19/10/2026): o aviso de cookies, Banner variant="consent". Uma coluna: o título (h2), o texto e os
|
|
2633
|
+
três botões de MESMO peso numa linha que quebra — rejeitar tão fácil de ver quanto aceitar (o guia da ANPD) —; depois
|
|
2634
|
+
da escolha, a confirmação no lugar deles. O aviso mora no alto da página e não fica preso: com position:fixed ele
|
|
2635
|
+
cobriria o que recebe o foco (WCAG 2.4.11). A janela de preferências é o Dialog, e as categorias, o Switch. */
|
|
2636
|
+
/* O fundo e a sombra são os do cartão, como os do Alert: no fundo cinza do Banner comum, os botões cinza sumiam (medido na
|
|
2637
|
+
bancada). */
|
|
2638
|
+
.banner-consent { grid-template-columns:minmax(0,1fr); align-items:start; gap:var(--space-3); background:var(--card); box-shadow:var(--shadow-sm); }
|
|
2639
|
+
.banner-consent-title { margin:0; color:var(--foreground); font-size:var(--text-base); font-weight:var(--weight-semibold); line-height:var(--leading-tight); }
|
|
2640
|
+
.banner-consent-text { min-inline-size:0; color:var(--muted-foreground); font-size:var(--text-sm); }
|
|
2641
|
+
.banner-consent-text > * + * { margin-block-start:var(--space-2); }
|
|
2642
|
+
.banner-consent-actions { display:flex; flex-wrap:wrap; gap:var(--space-2); }
|
|
2643
|
+
.banner-consent-message { color:var(--foreground); font-size:var(--text-sm); }
|
|
2644
|
+
.banner-consent-categories { display:grid; gap:var(--space-5); }
|
|
2645
|
+
.banner-consent-required { display:grid; gap:var(--space-1); }
|
|
2646
|
+
.banner-consent-required-head { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
|
|
2647
|
+
.banner-consent-required p { margin:0; color:var(--muted-foreground); font-size:var(--text-xs); line-height:var(--space-4); }
|
|
2648
|
+
@media (max-width:640px) { .banner:not(.banner-consent) { grid-template-columns:auto minmax(0,1fr); } .banner:not(.banner-consent)>:last-child { grid-column:2; justify-self:start; } }
|
|
2482
2649
|
.progress { height:8px; overflow:hidden; border-radius:999px; background:var(--surface-3); }
|
|
2483
2650
|
.progress>span { display:block; height:100%; border-radius:inherit; background:var(--primary); }
|
|
2484
2651
|
/* AN-07 (03/10/2026): a caixa de fora, o texto de apoio e o tom. A anatomia é a da barra de progresso da
|
|
@@ -2925,6 +3092,26 @@ button.tag-main { cursor:pointer; }
|
|
|
2925
3092
|
é inalcançável por teclado (axe scrollable-region-focusable). Quem escreve esta marcação à
|
|
2926
3093
|
mão precisa de `tabindex="0"` no <pre> — o componente React já o emite. */
|
|
2927
3094
|
.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); }
|
|
3095
|
+
/* 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
|
|
3096
|
+
referência, medido na página dela: uma coluna de 16 (--space-4), alinhada à direita, a 24 do código (--space-6); ela
|
|
3097
|
+
cresce com os algarismos da última linha (`--code-line-digits`, que o componente escreve), para a coluna não pular
|
|
3098
|
+
na linha 100. A cor é a apagada da Aurea, que se lê (a da referência apaga até ~2:1). O número é DESENHO: não entra
|
|
3099
|
+
no texto copiado (`user-select:none`) nem no leitor de tela (o texto alternativo vazio depois da barra; quem não
|
|
3100
|
+
entende a barra fica com a linha de cima).
|
|
3101
|
+
As cores são as do `CodeEditor` (o `aureaHighlightStyle`), pelos mesmos tokens. Com cor, o texto sem cor é o do
|
|
3102
|
+
tema (`--foreground`), e não o apagado: o apagado fica para o comentário. */
|
|
3103
|
+
.code-block-numbered { counter-reset:aurea-linha; }
|
|
3104
|
+
.code-block-numbered .code-line::before { counter-increment:aurea-linha; content:counter(aurea-linha); content:counter(aurea-linha) / ""; display:inline-block; min-inline-size:max(var(--space-4), calc(var(--code-line-digits, 2) * 1ch)); margin-inline-end:var(--space-6); color:var(--muted-foreground); text-align:end; -webkit-user-select:none; user-select:none; }
|
|
3105
|
+
.code-block-highlighted { color:var(--foreground); }
|
|
3106
|
+
.code-block .tok-comment { color:var(--muted-foreground); font-style:italic; }
|
|
3107
|
+
/* As cores levam 20% do texto, como o nível do registro, que mora no mesmo fundo (`.log-stream`, ADR-0072): puras, o azul
|
|
3108
|
+
caía a 4,08:1 no claro e o verde a 4,44:1 no escuro (medido no site, 20/10/2026). */
|
|
3109
|
+
.code-block .tok-keyword { color:color-mix(in oklab,var(--info-400) 80%,var(--foreground)); }
|
|
3110
|
+
.code-block .tok-string { color:color-mix(in oklab,var(--success-400) 80%,var(--foreground)); }
|
|
3111
|
+
.code-block .tok-number { color:color-mix(in oklab,var(--warning-400) 80%,var(--foreground)); }
|
|
3112
|
+
.code-block .tok-property { color:var(--foreground); }
|
|
3113
|
+
.code-block .tok-function { color:var(--foreground); font-weight:var(--weight-semibold); }
|
|
3114
|
+
.code-block .tok-invalid { color:color-mix(in oklab,var(--danger-400) 80%,var(--foreground)); }
|
|
2928
3115
|
/* Bloco de código COM copiar: a moldura não rola, o <pre> rola por dentro e o gatilho fica
|
|
2929
3116
|
parado no canto. O comportamento é do core (aurea.js, [data-aurea-copy]); aqui só a pele.
|
|
2930
3117
|
O check em amarelo é confirmação instantânea — dura 1,5s e volta ao ícone de copiar. */
|
|
@@ -3177,15 +3364,17 @@ button.tag-main { cursor:pointer; }
|
|
|
3177
3364
|
`.image`; aqui fica só o que não varia. O `<iframe>` é absoluto porque a altura é da caixa, não
|
|
3178
3365
|
dele. A fachada é um `<button>` que cobre a caixa inteira: o alvo de clique é o vídeo todo, e o
|
|
3179
3366
|
anel de foco é o `:focus-visible` global da casa. A pastilha de tocar é amarela porque é a ação
|
|
3180
|
-
da tela — o mesmo combinado do `Card variant="brand"`: amarelo só para pedir ação. O
|
|
3181
|
-
`--
|
|
3182
|
-
|
|
3367
|
+
da tela — o mesmo combinado do `Card variant="brand"`: amarelo só para pedir ação. O ícone dela
|
|
3368
|
+
é o marrom da marca (`--primary-mark`), e ela não tem mais o anel escuro em volta: decisão do
|
|
3369
|
+
Victor, 17/10/2026 (*"não quero preto"*). Numa capa amarela, quem a separa é a sombra. A caixa
|
|
3370
|
+
pinta o fundo só por dentro da borda transparente (`background-clip`): sem isso, o fundo escuro
|
|
3371
|
+
aparecia como um aro de 1 em volta da capa. */
|
|
3183
3372
|
.media-embed { display:grid; gap:var(--space-2); min-inline-size:0; }
|
|
3184
|
-
.media-embed-frame { position:relative; overflow:hidden; border:1px solid transparent; border-radius:var(--radius-card); background:var(--media-canvas); }
|
|
3373
|
+
.media-embed-frame { position:relative; overflow:hidden; border:1px solid transparent; border-radius:var(--radius-card); background:var(--media-canvas); background-clip:padding-box; }
|
|
3185
3374
|
.media-embed-frame>iframe { position:absolute; inset:0; inline-size:100%; block-size:100%; border:0; }
|
|
3186
3375
|
.media-embed-facade { position:absolute; inset:0; display:grid; place-items:center; padding:0; border:0; border-radius:inherit; background:var(--media-canvas); color:var(--media-foreground); cursor:pointer; }
|
|
3187
3376
|
.media-embed-facade>img { position:absolute; inset:0; inline-size:100%; block-size:100%; object-fit:cover; }
|
|
3188
|
-
.media-embed-play { position:relative; display:grid; place-items:center; inline-size:var(--control-h-lg); block-size:var(--control-h-lg); border-radius:var(--radius-full); background:var(--primary); color:var(--primary-
|
|
3377
|
+
.media-embed-play { position:relative; display:grid; place-items:center; inline-size:var(--control-h-lg); block-size:var(--control-h-lg); border-radius:var(--radius-full); background:var(--primary); color:var(--primary-mark); box-shadow:var(--shadow-lg); }
|
|
3189
3378
|
.media-embed-facade:hover .media-embed-play { transform:scale(1.06); }
|
|
3190
3379
|
.media-embed-link { display:inline-flex; align-items:center; gap:var(--space-1); justify-self:start; color:var(--muted-foreground); font-size:var(--text-sm); }
|
|
3191
3380
|
.media-embed-link:hover { color:var(--foreground); }
|
|
@@ -3302,7 +3491,10 @@ button.tag-main { cursor:pointer; }
|
|
|
3302
3491
|
/* `0.9em` e não um token: código dentro do texto se mede em relação à LINHA em que está, e um
|
|
3303
3492
|
valor absoluto o deixaria maior que o parágrafo dentro de um h2. É o mesmo motivo pelo qual o
|
|
3304
3493
|
`.badge` tem `line-height:1` — geometria que depende do contexto se escreve relativa. */
|
|
3305
|
-
|
|
3494
|
+
/* `overflow-wrap:anywhere` (18/10/2026, lote U): código no meio do texto é uma palavra só — `window.Aurea.setDensity("compact")`
|
|
3495
|
+
—, e sem a quebra ele empurrava a página para o lado a 320 (medido na página Density do site; a WCAG 1.4.10 pede que
|
|
3496
|
+
nada role para o lado). Dentro do `pre` ela não age: lá o `white-space` não quebra, e a caixa rola. */
|
|
3497
|
+
.prose code { padding:var(--space-05) var(--space-1); border-radius:var(--radius-xs); background:var(--surface-2); font-family:var(--font-code); font-size:0.9em; overflow-wrap:anywhere; }
|
|
3306
3498
|
.prose pre { overflow-x:auto; padding:var(--space-4); border:1px solid transparent; border-radius:var(--radius-card); background:var(--surface-2); }
|
|
3307
3499
|
.prose pre code { padding:0; border-radius:0; background:transparent; font-size:var(--text-sm); }
|
|
3308
3500
|
.prose img { max-width:100%; height:auto; border-radius:var(--radius-lg); }
|
|
@@ -3616,7 +3808,8 @@ button.tag-main { cursor:pointer; }
|
|
|
3616
3808
|
/* A largura é a do GLIFO que mora dentro (`--icon-sm`, o mesmo do `<Icon size="sm">`), e não um
|
|
3617
3809
|
px cru: assim o slot acompanha a escala de glifo do sistema em vez de fixar um número. */
|
|
3618
3810
|
.menu-mark { flex:none; display:inline-flex; align-items:center; justify-content:center; inline-size:var(--icon-sm); block-size:var(--icon-sm); color:var(--primary); }
|
|
3619
|
-
/* METADE do slot,
|
|
3811
|
+
/* METADE do slot: a marca é proporcional, e PAR (8 em 16), então fica no centro em qualquer zoom — o ponto do `Radio`
|
|
3812
|
+
precisou de escala porque o dele era ímpar (17/10/2026). */
|
|
3620
3813
|
.menu-ponto { inline-size:calc(var(--icon-sm) / 2); block-size:calc(var(--icon-sm) / 2); border-radius:50%; background:currentColor; }
|
|
3621
3814
|
/* O rótulo de grupo NÃO é item: não é focável, não é clicável, e a pele não pode sugerir que é. */
|
|
3622
3815
|
.menu-label { padding:var(--space-2) var(--menu-px) var(--space-1); color:var(--muted-foreground); font-size:var(--text-xs); font-weight:var(--weight-semibold); }
|
|
@@ -4150,6 +4343,15 @@ th[aria-sort] .datagrid-sort-icon { color:var(--primary); }
|
|
|
4150
4343
|
.graph-node { position:relative; inline-size:var(--graph-node-w,180px); }
|
|
4151
4344
|
.graph-node-body { display:grid; gap:var(--space-05); inline-size:100%; padding:var(--space-2) var(--space-3); border:1px solid transparent; border-radius:var(--radius-card); background:var(--card); color:var(--foreground); font-family:inherit; font-size:var(--text-sm); text-align:start; }
|
|
4152
4345
|
button.graph-node-body { cursor:pointer; }
|
|
4346
|
+
/* O PONTEIRO NOS BOTÕES DO NÓ (lote U, 19/10/2026 — o pedido 16 do app de topologia). Fora do modo de arrumar, o nó vai ao
|
|
4347
|
+
motor como não escolhível (`selectable:false`, pela trava `alvo-clicavel`), e o motor tira o ponteiro do invólucro
|
|
4348
|
+
(`.react-flow__node`) quando o nó não é escolhível nem arrastável e o app não passa `onNodeClick`/`onNodeMouse*` — os
|
|
4349
|
+
botões de dentro herdavam o `none`, e o clique de mouse no corpo não chegava ao `onSelect` (pelo teclado chegava). Os
|
|
4350
|
+
botões pegam o ponteiro de volta: o corpo só é botão quando há `onSelect` (sem ele, segue sem ponteiro, como a trava
|
|
4351
|
+
pede); o de recolher e o de fechar o contêiner são sempre botões. A regra sai presa ao `.dependency-graph`, e não à
|
|
4352
|
+
classe do motor (o check 15 barra classe de terceiro no core): o `pointer-events` herda, e o `auto` no botão vale
|
|
4353
|
+
embaixo de qualquer invólucro. */
|
|
4354
|
+
.dependency-graph :is(button.graph-node-body,.graph-node-toggle,.graph-group-toggle) { pointer-events:auto; }
|
|
4153
4355
|
.graph-node[data-selected] .graph-node-body { border-color:transparent; background:color-mix(in oklab,var(--primary) 14%,var(--card)); }
|
|
4154
4356
|
.graph-node-label { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:var(--weight-medium); }
|
|
4155
4357
|
/* `kind` é TEXTO, e não cor: a referência pinta dez tipos de nó em dez cores, e é a quarta vez
|
|
@@ -4495,6 +4697,12 @@ button.graph-node-body { cursor:pointer; }
|
|
|
4495
4697
|
da "C" dos botões): com a letra de sempre, o verde caía a 3,79:1 no claro e o `success` a 4,15:1 no escuro, dentro do
|
|
4496
4698
|
cartão. Medido em 16/10/2026: o pior caso passa a 4,79:1. Os outros selos (suave, plano) têm fundo próprio e não mudam. */
|
|
4497
4699
|
.badge-outline { background-color:color-mix(in oklab,var(--badge-accent) 16%,transparent); color:color-mix(in oklab,var(--badge-accent) 80%,var(--foreground)); }
|
|
4700
|
+
/* Menos o primário da Aurea (ADR-0073, decisão do Victor de 18/10/2026, "A"): a letra é o próprio acento (o amarelo no
|
|
4701
|
+
escuro; o azul no claro, desde a ADR-0076), a mesma do selo suave e do botão de contorno da marca — misturado ao texto,
|
|
4702
|
+
o amarelo virava mostarda (2,36:1) só nesta peça. A
|
|
4703
|
+
referência principal usa a mesma letra no suave e no contorno. Só sem `data-brand`: na `lory` do claro, sem a
|
|
4704
|
+
mistura, a letra cairia de 5,56 para 4,42:1. */
|
|
4705
|
+
.badge-primary.badge-outline:not(:where([data-brand],[data-brand] *)) { color:var(--badge-accent); }
|
|
4498
4706
|
/* O registro ganhou o fundo dos campos; o nível `info` (o azul) caía a 4,08:1 sobre ele no claro. A mesma letra 20% para o texto. */
|
|
4499
4707
|
.log-stream .log-level.info { color:color-mix(in oklab,var(--info-400) 80%,var(--foreground)); }
|
|
4500
4708
|
.step:not(.step-done,.step-active,.step-error,.done,.active) .step-dot { background-color:var(--fill-3-solid); }
|
package/dist/aurea.js
CHANGED
|
@@ -240,6 +240,10 @@
|
|
|
240
240
|
}
|
|
241
241
|
if (!targets.length) return;
|
|
242
242
|
var seen = {};
|
|
243
|
+
// A BARRA DO ÍNDICE do `AppShell layout="docs"` (lote U, 19/10/2026): abaixo de 1280 o índice é a gaveta dela, e ela
|
|
244
|
+
// mostra o nome da seção em vista, como a da referência. É o mesmo cálculo; aqui só se escreve o nome lá.
|
|
245
|
+
var shell = toc.closest ? toc.closest(".app-shell") : null;
|
|
246
|
+
var nomeNaBarra = shell ? shell.querySelector("[data-toc-current]") : null;
|
|
243
247
|
var observer = new IntersectionObserver(function (entries) {
|
|
244
248
|
// Se o React assumiu este índice depois de nós, saímos. A ordem importa e não é
|
|
245
249
|
// controlável: `initTocs` roda no DOMContentLoaded, e a hidratação pode vir depois. Sem
|
|
@@ -255,6 +259,7 @@
|
|
|
255
259
|
if (id === current) links[id].setAttribute("aria-current", "true");
|
|
256
260
|
else links[id].removeAttribute("aria-current");
|
|
257
261
|
}
|
|
262
|
+
if (nomeNaBarra && links[current]) nomeNaBarra.textContent = links[current].textContent;
|
|
258
263
|
}, {rootMargin: "0px 0px -75% 0px"});
|
|
259
264
|
for (var k = 0; k < targets.length; k++) observer.observe(targets[k]);
|
|
260
265
|
}
|
|
@@ -350,6 +355,19 @@
|
|
|
350
355
|
for (var g = 0; g < abertas.length; g++) if (estaAberta(abertas[g])) abertas[g].hidePopover();
|
|
351
356
|
};
|
|
352
357
|
if (desktop.addEventListener) desktop.addEventListener("change", aoSubir);
|
|
358
|
+
// No `layout="docs"` (lote U) a lateral é coluna desde 768 e o índice desde 1280: cada gaveta fecha no corte DELA.
|
|
359
|
+
// 768 e 1280 são o `--breakpoint-md` e o `--breakpoint-xl`, os cortes do arranjo na folha.
|
|
360
|
+
var cortes = [["(min-width: 768px)", ".app-shell-docs > .sidebar[popover]:not(.app-shell-aside)"],
|
|
361
|
+
["(min-width: 1280px)", ".app-shell-docs > .sidebar.app-shell-aside[popover]"]];
|
|
362
|
+
cortes.forEach(function (par) {
|
|
363
|
+
var mq = window.matchMedia(par[0]);
|
|
364
|
+
if (!mq.addEventListener) return;
|
|
365
|
+
mq.addEventListener("change", function (e) {
|
|
366
|
+
if (!e.matches) return;
|
|
367
|
+
var gavetas = document.querySelectorAll(par[1]);
|
|
368
|
+
for (var g = 0; g < gavetas.length; g++) if (estaAberta(gavetas[g])) gavetas[g].hidePopover();
|
|
369
|
+
});
|
|
370
|
+
});
|
|
353
371
|
}
|
|
354
372
|
|
|
355
373
|
function toastStack() {
|