@aurea-uds/core 0.16.1 → 0.18.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 +130 -4
- package/package.json +1 -1
package/dist/aurea.css
CHANGED
|
@@ -494,6 +494,14 @@ img,svg { display:block; }
|
|
|
494
494
|
.cluster-justify-center { justify-content:center; } .cluster-justify-end { justify-content:flex-end; } .cluster-justify-between { justify-content:space-between; }
|
|
495
495
|
.cluster-nowrap { flex-wrap:nowrap; }
|
|
496
496
|
.grid-fixed { grid-template-columns:repeat(var(--grid-cols,1),minmax(0,1fr)); }
|
|
497
|
+
/* AN-08 (03/10/2026): a largura mínima da coluna, por nome — a trava de um consumidor reprova medida
|
|
498
|
+
escrita, e `min="sm"` virava UMA coluna sem aviso (o `--grid-min` inválido derruba a regra inteira).
|
|
499
|
+
O HeroUI não tem `Grid`; nenhum número é novo, cada um já mede uma grade ou uma caixa daqui:
|
|
500
|
+
xs 8rem — a miniatura da `.gallery` (`--gallery-min`)
|
|
501
|
+
sm 12rem — a célula da `.health-matrix`
|
|
502
|
+
md 15rem — o padrão do `.grid`, logo acima (sem classe)
|
|
503
|
+
lg 20rem — o `.dialog-xs`, o `max-w-xs` do HeroUI */
|
|
504
|
+
.grid-min-xs { --grid-min:8rem; } .grid-min-sm { --grid-min:12rem; } .grid-min-lg { --grid-min:20rem; }
|
|
497
505
|
|
|
498
506
|
/* ========================================================================== */
|
|
499
507
|
/* 03. APP SHELL E DOCUMENTAÇÃO */
|
|
@@ -587,7 +595,10 @@ img,svg { display:block; }
|
|
|
587
595
|
encostado, não sobre a lateral — a rente já encosta sozinha. */
|
|
588
596
|
.app-shell-flush .sidebar:not(.sidebar-flush) { --shell-top:calc(var(--topbar-height) + var(--space-05)); margin-block-start:var(--space-05); }
|
|
589
597
|
.app-shell-flush .content { margin-block-start:var(--space-05); }
|
|
590
|
-
|
|
598
|
+
/* A margem é LÓGICA desde 03/10/2026 (AN-01): era `margin:space-4 space-4 space-4 0`, física, e na
|
|
599
|
+
escrita da direita para a esquerda o conteúdo encostava na borda da página e deixava 32 de vão na
|
|
600
|
+
junção com a lateral. Medido no banco da moldura; na esquerda para a direita nada muda. */
|
|
601
|
+
.content { min-width:0; margin-block:var(--space-4); margin-inline:0 var(--space-4); padding:var(--space-6); border:1px solid var(--border); border-radius:var(--radius-card); background:var(--card); color:var(--card-foreground); }
|
|
591
602
|
/* contentVariant="plain" (B-10): a área de conteúdo sem caixa. Os `Card` da tela passam a ser as
|
|
592
603
|
únicas superfícies. A margem continua: é ela que afasta o conteúdo da lateral e da barra. */
|
|
593
604
|
.content-plain { padding:0; border:0; border-radius:0; background:none; color:inherit; }
|
|
@@ -717,6 +728,33 @@ img,svg { display:block; }
|
|
|
717
728
|
nada. Gate nenhum via, porque `sidebar.html` não tem baseline de pixel. */
|
|
718
729
|
.app-shell:has(> .sidebar-collapsed) { --sidebar-track:calc(var(--sidebar-rail) + var(--space-4)*2); }
|
|
719
730
|
.app-shell:has(> .sidebar-collapsed.sidebar-flush) { --sidebar-track:var(--sidebar-rail); }
|
|
731
|
+
/* AN-01 (03/10/2026): O BOTÃO DE RECOLHER, no alto da junção do menu com o conteúdo — o lugar que o
|
|
732
|
+
Victor marcou. Só com `sidebarCollapsible`, e por isso mora sob `.app-shell-collapsible`: o
|
|
733
|
+
`.app-shell` cru (o catálogo escrito à mão o usa como raiz) não muda.
|
|
734
|
+
O botão é um item da grade na MESMA célula da lateral, e por isso a lateral e o conteúdo ganham
|
|
735
|
+
lugar escrito: sem ele, o posicionamento automático da grade empurraria a lateral para a coluna
|
|
736
|
+
do conteúdo. A caixa do botão é de tamanho zero na borda da coluna e copia da lateral a margem de
|
|
737
|
+
cima e o `--shell-top`, então gruda junto quando a página rola; o botão se centra nela.
|
|
738
|
+
No alto: o centro do botão na altura do centro do primeiro item da lateral (borda + `space-1` +
|
|
739
|
+
metade do `control-h-md`). Na junção: no meio do vão de `space-4` entre as duas caixas, ou em cima
|
|
740
|
+
do fio, na lateral rente. */
|
|
741
|
+
.app-shell-collapsible > .sidebar { grid-column:1; grid-row:2; }
|
|
742
|
+
.app-shell-collapsible > .content { grid-column:2; grid-row:2; }
|
|
743
|
+
.sidebar-toggle-slot { --toggle-top:calc(var(--topbar-height) + var(--space-4)*2); --toggle-x:calc(var(--space-4) / -2); --toggle-edge:var(--border-width);
|
|
744
|
+
grid-column:1; grid-row:2; justify-self:end; align-self:start; position:sticky; top:var(--toggle-top); z-index:var(--z-sticky); width:0; height:0; margin-block-start:var(--space-4); }
|
|
745
|
+
.app-shell-flush > .sidebar-toggle-slot { --toggle-top:calc(var(--topbar-height) + var(--space-05)); margin-block-start:var(--space-05); }
|
|
746
|
+
.app-shell-collapsible:has(> .sidebar-flush) > .sidebar-toggle-slot { --toggle-top:var(--topbar-height); --toggle-x:0px; --toggle-edge:0px; margin-block-start:0; }
|
|
747
|
+
/* O botão se centra por conta, com o lado dele escrito, e não por `translate` — que é físico e pede
|
|
748
|
+
`:dir(rtl)` para virar, e o empacotador do app reescreve `:dir()` (medido no Vite, 03/10/2026).
|
|
749
|
+
Com as margens lógicas ele vira sozinho. O lado é o `control-h-xs` do `IconButton size="xs"`, e o
|
|
750
|
+
alvo de toque com o dedo (`target-min`, a mesma troca do `.btn-icon` lá embaixo). A seta, quem
|
|
751
|
+
vira é o React, pela direção do provedor. */
|
|
752
|
+
.sidebar-toggle-slot > .btn.sidebar-toggle { --toggle-size:var(--control-h-xs); --btn-bg:var(--card); --btn-border:var(--border-strong); position:absolute; inline-size:var(--toggle-size); block-size:var(--toggle-size); min-inline-size:0; min-block-size:0;
|
|
753
|
+
inset-block-start:calc(var(--toggle-edge) + var(--space-1) + var(--control-h-md) / 2 - var(--toggle-size) / 2); inset-inline-start:calc(var(--toggle-x) - var(--toggle-size) / 2); }
|
|
754
|
+
@media (pointer:coarse) { .sidebar-toggle-slot > .btn.sidebar-toggle { --toggle-size:var(--target-min); } }
|
|
755
|
+
@media (max-width:1023px) {
|
|
756
|
+
.sidebar-toggle-slot { display:none; }
|
|
757
|
+
.app-shell-collapsible > .sidebar, .app-shell-collapsible > .content { grid-column:auto; grid-row:auto; } }
|
|
720
758
|
|
|
721
759
|
/* ── Navegação inferior — o vocabulário de APLICATIVO ───────────────────────────────
|
|
722
760
|
Lacuna estrutural medida no `CONSUMIDOR-1.md` §4.1: `.topbar` e `.sidebar` são
|
|
@@ -782,7 +820,7 @@ img,svg { display:block; }
|
|
|
782
820
|
nativo (`navigation.tsx`). ~~A folga de 4dp do M3 entre o indicador e o rótulo~~ vale só para
|
|
783
821
|
os redondos agora. */
|
|
784
822
|
.bottom-nav-mark { height:var(--icon-lg); }
|
|
785
|
-
.bottom-nav-ind-circle .bottom-nav-mark, .bottom-nav-ind-circle-raised .bottom-nav-mark, .bottom-nav-ind-circle-outline .bottom-nav-mark
|
|
823
|
+
.bottom-nav-ind-circle .bottom-nav-mark, .bottom-nav-ind-circle-raised .bottom-nav-mark, .bottom-nav-ind-circle-outline .bottom-nav-mark { height:var(--bottomnav-ring); }
|
|
786
824
|
/* `inline-flex` no envoltório: como `<span>` solto ele é caixa de LINHA, e mede a entrelinha do
|
|
787
825
|
item (18px) em vez do contador que carrega (16px). A diferença não aparece na tela — aparece
|
|
788
826
|
na medição, e medição errada é o que faz a razão parecer 0,75 quando é 0,67. */
|
|
@@ -807,7 +845,30 @@ img,svg { display:block; }
|
|
|
807
845
|
O FOCO CONTINUA, e a diferença não é de gosto: `:focus-visible` é o que o teclado enxerga, vem
|
|
808
846
|
do contrato de foco global e o `geometry.spec` cobra. Tirar hover é tirar enfeite; tirar foco
|
|
809
847
|
seria tirar acesso. */
|
|
810
|
-
|
|
848
|
+
/* O PESO DO RÓTULO NÃO MUDA COM A ESCOLHA — 03/10/2026, pedido do Victor: *"quero ele estático,
|
|
849
|
+
apenas os botões dinâmicos"*. Era `--weight-medium` só no escolhido, e texto mais grosso é texto
|
|
850
|
+
mais LARGO: no `width="content"` a barra mudava de largura a cada toque, nos sete indicadores
|
|
851
|
+
(medido: 247,7 contra 249,0). Agora todos os rótulos são `--weight-medium` — o "Label medium" do
|
|
852
|
+
Material 3, que no Expressive também deixou de engrossar o escolhido. O que marca a escolha é a
|
|
853
|
+
cor, o ícone cheio e a forma. Quem cobra: `geometry.spec`, "a barra não se mexe". */
|
|
854
|
+
.bottom-nav-item { font-weight:var(--weight-medium); }
|
|
855
|
+
/* A ALTURA DO TELEGRAM — 03/10/2026, pedido do Victor (*"ainda acho ele muito largo comparado a
|
|
856
|
+
bottomnav como do telegram"*; "largo" é a grossura). Medido no fonte do Telegram para Android
|
|
857
|
+
12.10.6: pílula de 56, botão de 48, ícone de 24, nome de 12 numa linha de 16. O recheio de cima
|
|
858
|
+
e de baixo cai de `--space-1` para `--space-05`, e a linha do nome é a do Telegram: o tamanho
|
|
859
|
+
mais `--space-1` (12 + 4). Com a do corpo (1,5) ela media 18; com a `--leading-tight` (14,4) a
|
|
860
|
+
perna do "j" passava 1 da caixa, e a caixa corta (`overflow:hidden`, para as reticências).
|
|
861
|
+
Fica 56 nos indicadores sem moldura e 64 nos que têm a de 32 — a altura do Material 3
|
|
862
|
+
Expressive. O mesmo no `navigation.tsx`. */
|
|
863
|
+
.bottom-nav-item { padding-block:var(--space-05); }
|
|
864
|
+
/* O NOME COLADO NO ÍCONE — 03/10/2026, pedido do Victor (*"o texto pode ficar mais próximo do
|
|
865
|
+
ícone"*): vão ZERO, como no Telegram, em que o nome começa onde a caixa do ícone acaba. O
|
|
866
|
+
`--space-05` de 30/09/2026 somava 2 aos 2 de folga da linha do nome: medido de tinta a tinta,
|
|
867
|
+
eram 9 no `pill` e 13 no `circle-bold`. No `circle-bold` a moldura de 32 também sai (logo
|
|
868
|
+
abaixo): lá o círculo é o disco, não ela. */
|
|
869
|
+
.bottom-nav-item, .bottom-nav-disc { gap:0; }
|
|
870
|
+
.bottom-nav-label { line-height:calc(1em + var(--space-1)); }
|
|
871
|
+
.bottom-nav-item[aria-current] { color:var(--foreground); }
|
|
811
872
|
.bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
812
873
|
/* ── A GRAMÁTICA: DOIS EIXOS, E ELES NÃO SE MISTURAM ────────────────────────────────
|
|
813
874
|
Reescrito em 20/08/2026 pela auditoria de UI/UX do BottomNav que o Victor encomendou.
|
|
@@ -876,7 +937,15 @@ img,svg { display:block; }
|
|
|
876
937
|
/* `padding-inline: space-1` — o recheio de sempre do item (`.bottom-nav-item`). No `width="content"`
|
|
877
938
|
o item ganha `space-3` dos lados, e dentro dos 56 sobravam 32 para o rótulo: "Avisos" (35)
|
|
878
939
|
saía "Avis…". Medido em 02/10/2026, no navegador e no nativo; igual no `navigation.tsx`. */
|
|
879
|
-
|
|
940
|
+
/* ~~O disco ERA o item escolhido~~ (até a `0.16.1`): ele media 56 e os outros mediam o conteúdo,
|
|
941
|
+
então trocar de aba mudava a largura da barra (249 a 257 no app, medido em 03/10/2026) e, no
|
|
942
|
+
`full`, os outros itens andavam. Agora o disco é uma caixa DENTRO do item (`.bottom-nav-disc`),
|
|
943
|
+
em todos os itens, e o recheio passa do item para ele: o item mede o mesmo escolhido ou não, e a
|
|
944
|
+
altura da barra não muda. O mesmo no `navigation.tsx`. */
|
|
945
|
+
.bottom-nav.bottom-nav-ind-circle-bold .bottom-nav-item { padding:0; }
|
|
946
|
+
.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); }
|
|
947
|
+
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] { color:var(--primary-foreground); }
|
|
948
|
+
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .bottom-nav-disc { background:var(--primary); }
|
|
880
949
|
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
881
950
|
/* O contador do `circle-bold` INVERTE, como o do `.btn-primary`, e a volta atrás está medida.
|
|
882
951
|
Tentei em 20/08/2026 deixá-lo dourado com um anel da cor da barra em volta — é o que as telas
|
|
@@ -885,6 +954,36 @@ img,svg { display:block; }
|
|
|
885
954
|
se esconde. Fio fino não substitui contraste quando as duas cores são claras. */
|
|
886
955
|
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .badge { background:var(--primary-foreground); color:var(--primary); border-color:transparent; }
|
|
887
956
|
.bottom-nav-ind-circle-bold .bottom-nav-item[aria-current] .bottom-nav-badge { color:var(--primary-foreground); }
|
|
957
|
+
/* ── CÁPSULA (`capsule`) — a "A" da bancada do Victor, 03/10/2026: o Material 3 Expressive ────
|
|
958
|
+
A moldura do ícone vira a cápsula de 56 × 32 do indicador ativo do M3 Expressive
|
|
959
|
+
(`--bottomnav-bold` × `--bottomnav-ring`), em TODOS os itens; só a do escolhido é pintada, de
|
|
960
|
+
amarelo sólido. O rótulo fica embaixo, fora dela — é isso que a separa do antigo bloco amarelo
|
|
961
|
+
que a auditoria de 20/08/2026 recusou (achado 5): a forma não estica com o nome.
|
|
962
|
+
O contador fica no canto do ÍCONE, e não da cápsula: sem a cápsula pintada ele ficaria solto,
|
|
963
|
+
longe do sino. São os (56 − 32) / 2 a mais para dentro. E ele INVERTE sobre o amarelo, pela
|
|
964
|
+
mesma razão medida do `circle-bold`, logo acima. */
|
|
965
|
+
.bottom-nav-ind-capsule .bottom-nav-mark { width:var(--bottomnav-bold,3.5rem); height:var(--bottomnav-ring); border-radius:var(--radius-full); }
|
|
966
|
+
.bottom-nav-ind-capsule .bottom-nav-badge { inset-inline-end:calc((var(--bottomnav-bold,3.5rem) - var(--bottomnav-ring)) / 2 - var(--space-05)); }
|
|
967
|
+
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .bottom-nav-mark { background:var(--primary); color:var(--primary-foreground); }
|
|
968
|
+
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
969
|
+
.bottom-nav-ind-capsule .bottom-nav-item[aria-current] .badge { background:var(--primary-foreground); color:var(--primary); border-color:transparent; }
|
|
970
|
+
/* No `content`, o recheio de sempre (`--space-1`) e não o `--space-3`: com ele cada item teria 80. */
|
|
971
|
+
.bottom-nav-content:not(.bottom-nav-edge).bottom-nav-ind-capsule .bottom-nav-item { padding-inline:var(--space-1); }
|
|
972
|
+
/* ── EXPANDE (`expand`) — a "C" da bancada do Victor, 03/10/2026 ───────────────────────────────
|
|
973
|
+
Os outros itens mostram só o ícone; o escolhido vira cápsula amarela com o nome ao lado.
|
|
974
|
+
⚠ É a exceção à regra "o rótulo nunca some" (auditoria de 20/08/2026, achado 6/7), por ordem do
|
|
975
|
+
Victor: o nome dos não escolhidos sai da TELA e fica para o leitor de tela (o componente põe a
|
|
976
|
+
`.sr-only` nele), então o link continua com nome.
|
|
977
|
+
É o ÚNICO em que o botão escolhido cresce — os botões andam, a BARRA não: a vaga do escolhido é
|
|
978
|
+
FIXA, e não do tamanho do nome. Ícone + vão (`--space-2`) + lugar do nome (`--space-20`) +
|
|
979
|
+
recheio (`--space-3` dos dois lados) = 136. Nome maior que 80 termina em "…". */
|
|
980
|
+
.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; }
|
|
981
|
+
.bottom-nav-ind-expand .bottom-nav-mark { width:var(--icon-lg); }
|
|
982
|
+
.bottom-nav-ind-expand .bottom-nav-label { font-size:var(--text-sm); }
|
|
983
|
+
.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-foreground); }
|
|
984
|
+
.bottom-nav-ind-expand .bottom-nav-item[aria-current] .icon { opacity:1; }
|
|
985
|
+
.bottom-nav-ind-expand .bottom-nav-item[aria-current] .badge { background:var(--primary-foreground); color:var(--primary); border-color:transparent; }
|
|
986
|
+
.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; }
|
|
888
987
|
|
|
889
988
|
/* ── A LINHA DE LISTA TOCÁVEL (§4.3 do CONSUMIDOR-1) ──────────────────────────
|
|
890
989
|
A LISTA NÃO PINTA SUPERFÍCIE. Quem dá o card é o `Card`, e repintar aqui seria um segundo
|
|
@@ -918,6 +1017,11 @@ img,svg { display:block; }
|
|
|
918
1017
|
/* O VALOR E A SETA NÃO ENCOLHEM: valor cortado MENTE (um "R$ 1.2" no lugar de "R$ 1.234"), e seta
|
|
919
1018
|
cortada deixa de dizer que a linha abre. Quem cede espaço é o texto, que reticencia dizendo. */
|
|
920
1019
|
.nav-list-value { flex:none; color:var(--muted-foreground); font-size:var(--text-sm); }
|
|
1020
|
+
/* AN-04 (03/10/2026): os sinais ao lado do valor — fixada, silenciada. Pequenos (`sm`), apagados como o
|
|
1021
|
+
valor, e o vão é o mesmo de dentro do texto (`space-1`). A foto é o `.avatar` de sempre. */
|
|
1022
|
+
.nav-list-indicators { flex:none; display:inline-flex; align-items:center; gap:var(--space-1); color:var(--muted-foreground); }
|
|
1023
|
+
.nav-list-indicators>span { display:inline-flex; }
|
|
1024
|
+
.nav-list-row>.avatar { flex:none; }
|
|
921
1025
|
.nav-list-row .nav-list-chevron { flex:none; opacity:.6; }
|
|
922
1026
|
@media (hover:hover) and (pointer:fine) { .nav-list-row:hover { background:var(--secondary); } }
|
|
923
1027
|
/* `aria-disabled` e NÃO `:disabled` — a razão está escrita ao lado de `.btn:disabled`, medida em
|
|
@@ -1630,6 +1734,28 @@ img,svg { display:block; }
|
|
|
1630
1734
|
@media (max-width:640px) { .banner { grid-template-columns:auto minmax(0,1fr); } .banner>:last-child { grid-column:2; justify-self:start; } }
|
|
1631
1735
|
.progress { height:8px; overflow:hidden; border-radius:999px; background:var(--surface-3); }
|
|
1632
1736
|
.progress>span { display:block; height:100%; border-radius:inherit; background:var(--primary); }
|
|
1737
|
+
/* AN-07 (03/10/2026): a caixa de fora, o texto de apoio e o tom. A anatomia é a do `ProgressBar` do
|
|
1738
|
+
HeroUI 3.2.6 (`@heroui/styles`, progress-bar.css): a saída no alto à direita, `text-sm` médio com
|
|
1739
|
+
algarismos de largura igual, e `gap-1` até o trilho. O tom é a lista fechada do `ButtonTone`:
|
|
1740
|
+
pausado é `neutral`, falha é `danger`. */
|
|
1741
|
+
.progress-field { display:grid; gap:var(--space-1); }
|
|
1742
|
+
.progress-detail { justify-self:end; color:var(--muted-foreground); font-size:var(--text-sm); font-weight:var(--weight-medium); font-variant-numeric:tabular-nums; }
|
|
1743
|
+
.progress-tone-neutral>span { background:var(--muted-foreground); }
|
|
1744
|
+
.progress-tone-success>span { background:var(--success); }
|
|
1745
|
+
.progress-tone-warning>span { background:var(--warning); }
|
|
1746
|
+
.progress-tone-danger>span { background:var(--destructive); }
|
|
1747
|
+
.progress-tone-info>span { background:var(--info); }
|
|
1748
|
+
/* Sem total, um pedaço de 2/5 corre pelo trilho: os números do HeroUI (`w-2/5`, de -100% a 350% da
|
|
1749
|
+
própria largura, 1,5 s, a curva dele). O HeroUI anda com `translateX`; aqui anda a MARGEM LÓGICA
|
|
1750
|
+
(de -40% a 140% do trilho, o mesmo percurso), para correr ao contrário na escrita da direita para
|
|
1751
|
+
a esquerda sem `:dir(rtl)` — o empacotador do app reescreve `:dir()` como lista de idiomas e a
|
|
1752
|
+
regra deixa de pegar (medido no Vite, 03/10/2026). O pedaço tem 8 de altura: a conta por quadro é
|
|
1753
|
+
desprezível.
|
|
1754
|
+
Com menos movimento ele não corre: a barra inteira, apagada — nunca um pedaço parado, que leria
|
|
1755
|
+
como 40% feito. */
|
|
1756
|
+
.progress-indeterminate>span { width:40%; animation:progress-indeterminate 1.5s cubic-bezier(0.65,0,0.35,1) infinite; }
|
|
1757
|
+
@keyframes progress-indeterminate { from { margin-inline-start:-40%; } to { margin-inline-start:140%; } }
|
|
1758
|
+
@media (prefers-reduced-motion:reduce) { .progress-indeterminate>span { width:100%; animation:none; opacity:var(--opacity-disabled); } }
|
|
1633
1759
|
/* DataState (M3): a região que troca de cara. Ela NÃO desenha nada próprio — só empilha o que
|
|
1634
1760
|
já existe (esqueleto, alerta, estado vazio, conteúdo) com respiro entre eles. Se ganhar borda
|
|
1635
1761
|
ou fundo, viram duas superfícies para a mesma coisa — o defeito que a `.table-region` cobrou. */
|