@akonwi/mica 0.9.0 → 0.11.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/README.md +27 -2
- package/breadcrumbs.d.ts +5 -0
- package/breadcrumbs.js +74 -0
- package/header.d.ts +7 -0
- package/header.js +172 -0
- package/mica.css +872 -12
- package/package.json +34 -3
- package/sidebar.d.ts +11 -0
- package/sidebar.js +135 -0
- package/table.d.ts +5 -0
- package/table.js +59 -0
- package/tabs.d.ts +2 -1
- package/tabs.js +139 -17
- package/types/react.d.ts +9 -1
package/mica.css
CHANGED
|
@@ -764,6 +764,68 @@
|
|
|
764
764
|
--m-badge-color: var(--color-danger-text);
|
|
765
765
|
}
|
|
766
766
|
|
|
767
|
+
/* Callouts are CSS-only content. Variants never imply role=alert.
|
|
768
|
+
Optional icons and dismissal controls are authored, not generated.
|
|
769
|
+
For a neutral panel with colored emphasis, override --callout-background
|
|
770
|
+
and --callout-border to the shared surface and border roles. */
|
|
771
|
+
:where(m-callout) {
|
|
772
|
+
--callout-background: var(--color-surface-raised);
|
|
773
|
+
--callout-border: var(--color-border);
|
|
774
|
+
--callout-emphasis: var(--color-text);
|
|
775
|
+
display: flex;
|
|
776
|
+
align-items: flex-start;
|
|
777
|
+
gap: var(--callout-gap, var(--space-sm));
|
|
778
|
+
padding: var(--callout-padding, var(--space-md));
|
|
779
|
+
border: 1px solid var(--callout-border);
|
|
780
|
+
border-radius: var(--radius-md);
|
|
781
|
+
background: var(--callout-background);
|
|
782
|
+
color: var(--color-text);
|
|
783
|
+
font-size: var(--callout-font-size, .875rem);
|
|
784
|
+
line-height: var(--callout-line-height, 1.5);
|
|
785
|
+
}
|
|
786
|
+
:where(m-callout[variant="success"]) {
|
|
787
|
+
--callout-background: var(--color-success-surface);
|
|
788
|
+
--callout-border: var(--color-success-border);
|
|
789
|
+
--callout-emphasis: var(--color-success-text);
|
|
790
|
+
}
|
|
791
|
+
:where(m-callout[variant="warning"]) {
|
|
792
|
+
--callout-background: var(--color-warn-surface);
|
|
793
|
+
--callout-border: var(--color-warn-border);
|
|
794
|
+
--callout-emphasis: var(--color-warn-text);
|
|
795
|
+
}
|
|
796
|
+
:where(m-callout[variant="danger"]) {
|
|
797
|
+
--callout-background: var(--color-danger-surface);
|
|
798
|
+
--callout-border: var(--color-danger-border);
|
|
799
|
+
--callout-emphasis: var(--color-danger-text);
|
|
800
|
+
}
|
|
801
|
+
:where(m-callout[hidden]) { display: none; }
|
|
802
|
+
:where(m-callout > [data-callout-body]) { flex: 1; min-inline-size: 0; overflow-wrap: anywhere; }
|
|
803
|
+
:where(m-callout [data-callout-title]) {
|
|
804
|
+
margin: 0 0 var(--space-2xs);
|
|
805
|
+
color: var(--callout-emphasis);
|
|
806
|
+
font: inherit;
|
|
807
|
+
font-weight: var(--callout-title-weight, 600);
|
|
808
|
+
}
|
|
809
|
+
:where(m-callout > [data-callout-body] > p:not([data-callout-title])) { margin: 0; }
|
|
810
|
+
:where(m-callout > [data-callout-body] > p + p) { margin-block-start: var(--space-xs); }
|
|
811
|
+
:where(m-callout a) { color: var(--callout-emphasis); }
|
|
812
|
+
:where(m-callout > [data-callout-icon]) {
|
|
813
|
+
inline-size: var(--callout-icon-size, 1.125rem);
|
|
814
|
+
block-size: var(--callout-icon-size, 1.125rem);
|
|
815
|
+
flex: 0 0 auto;
|
|
816
|
+
margin-block-start: var(--callout-icon-offset, .125rem);
|
|
817
|
+
color: var(--callout-emphasis);
|
|
818
|
+
}
|
|
819
|
+
:where(m-callout [data-callout-actions]) { display: flex; flex-wrap: wrap; gap: var(--space-xs); margin-block-start: var(--space-sm); }
|
|
820
|
+
:where(m-callout > button[data-callout-dismiss]) {
|
|
821
|
+
flex: 0 0 auto;
|
|
822
|
+
inline-size: var(--callout-dismiss-size, 2rem);
|
|
823
|
+
block-size: var(--callout-dismiss-size, 2rem);
|
|
824
|
+
padding: 0;
|
|
825
|
+
margin-block-start: calc(-1 * var(--space-2xs));
|
|
826
|
+
margin-inline-end: calc(-1 * var(--space-2xs));
|
|
827
|
+
}
|
|
828
|
+
|
|
767
829
|
:where(m-badge[count]) {
|
|
768
830
|
--m-badge-min-width: 1.5rem;
|
|
769
831
|
--m-badge-padding: var(--space-2xs);
|
|
@@ -847,6 +909,85 @@
|
|
|
847
909
|
);
|
|
848
910
|
}
|
|
849
911
|
|
|
912
|
+
/* --- skeleton: quiet CSS-only loading placeholder ---------------- */
|
|
913
|
+
:where(m-skeleton) {
|
|
914
|
+
display: block;
|
|
915
|
+
flex: none;
|
|
916
|
+
inline-size: var(--skeleton-width, 100%);
|
|
917
|
+
block-size: var(--skeleton-height, 0.75rem);
|
|
918
|
+
overflow: hidden;
|
|
919
|
+
border-radius: var(--skeleton-radius, var(--radius-md));
|
|
920
|
+
background-color: var(--color-surface-raised);
|
|
921
|
+
animation: mica-skeleton-pulse 1.6s ease-in-out infinite alternate;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
@keyframes mica-skeleton-pulse {
|
|
925
|
+
to {
|
|
926
|
+
background-color: var(--color-border);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
@media (prefers-reduced-motion: reduce) {
|
|
931
|
+
:where(m-skeleton) {
|
|
932
|
+
animation: none;
|
|
933
|
+
background-color: var(--color-border);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
/* --- stat grid: semantic summaries in a fused frame -------------- */
|
|
938
|
+
:where(dl.stat-grid) {
|
|
939
|
+
display: flex;
|
|
940
|
+
flex-wrap: wrap;
|
|
941
|
+
gap: 1px;
|
|
942
|
+
margin-block: 0;
|
|
943
|
+
padding: 1px;
|
|
944
|
+
overflow: hidden;
|
|
945
|
+
border-radius: var(--radius-md);
|
|
946
|
+
background: var(--color-border);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
:where(dl.stat-grid) > :where(div.stat) {
|
|
950
|
+
display: flex;
|
|
951
|
+
flex-direction: column;
|
|
952
|
+
flex: 1 1 min(100%, 8rem);
|
|
953
|
+
gap: var(--space-sm);
|
|
954
|
+
min-inline-size: 0;
|
|
955
|
+
padding: var(--space-md);
|
|
956
|
+
background: var(--color-surface);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
:where(dl.stat-grid) > :where(div.stat) > :where(dt) {
|
|
960
|
+
color: var(--color-text-muted);
|
|
961
|
+
font-size: 0.75rem;
|
|
962
|
+
font-weight: 500;
|
|
963
|
+
line-height: 1.4;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
:where(dl.stat-grid) > :where(div.stat) > :where(dd) {
|
|
967
|
+
display: flex;
|
|
968
|
+
flex-direction: column;
|
|
969
|
+
flex: 1 1 auto;
|
|
970
|
+
gap: var(--space-2xs);
|
|
971
|
+
min-inline-size: 0;
|
|
972
|
+
margin-block: 0;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
:where(dl.stat-grid) > :where(div.stat) > :where(dd) > :first-child {
|
|
976
|
+
color: var(--color-text);
|
|
977
|
+
font-size: 1.5rem;
|
|
978
|
+
font-weight: 600;
|
|
979
|
+
font-variant-numeric: tabular-nums;
|
|
980
|
+
line-height: 1.2;
|
|
981
|
+
overflow-wrap: anywhere;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
:where(dl.stat-grid) > :where(div.stat) > :where(dd) > :where(small) {
|
|
985
|
+
margin-block-start: auto;
|
|
986
|
+
color: var(--color-text-muted);
|
|
987
|
+
font-size: 0.75rem;
|
|
988
|
+
line-height: 1.4;
|
|
989
|
+
}
|
|
990
|
+
|
|
850
991
|
/* --- content: tables, lists, code, quotes ------------------------ */
|
|
851
992
|
:where(table) {
|
|
852
993
|
inline-size: 100%;
|
|
@@ -983,6 +1124,71 @@
|
|
|
983
1124
|
background: var(--color-danger);
|
|
984
1125
|
}
|
|
985
1126
|
|
|
1127
|
+
/* --- stepper: framed sequence controls --------------------------- *
|
|
1128
|
+
* Mica owns only the fused layout. Consumers own labels, disabled
|
|
1129
|
+
* state, events, routing, and value changes. The frame deliberately does
|
|
1130
|
+
* not clip overflow: native focus rings must remain fully visible.
|
|
1131
|
+
* ------------------------------------------------------------------ */
|
|
1132
|
+
:where(m-stepper) {
|
|
1133
|
+
display: grid;
|
|
1134
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
1135
|
+
align-items: stretch;
|
|
1136
|
+
min-inline-size: 0;
|
|
1137
|
+
border: 1px solid var(--color-border-strong);
|
|
1138
|
+
border-radius: var(--radius-md);
|
|
1139
|
+
background: var(--color-surface);
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
:where(m-stepper:has(> [data-reset])) {
|
|
1143
|
+
grid-template-columns: auto minmax(0, 1fr) auto auto;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
:where(m-stepper) > :where(button) {
|
|
1147
|
+
border: 0;
|
|
1148
|
+
border-radius: 0;
|
|
1149
|
+
background: transparent;
|
|
1150
|
+
|
|
1151
|
+
&:focus-visible {
|
|
1152
|
+
z-index: 1;
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
:where(m-stepper) > :where(button:first-child) {
|
|
1157
|
+
border-start-start-radius: inherit;
|
|
1158
|
+
border-end-start-radius: inherit;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
:where(m-stepper) > :where(button:last-child) {
|
|
1162
|
+
border-start-end-radius: inherit;
|
|
1163
|
+
border-end-end-radius: inherit;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
:where(m-stepper) > :where([data-step]) {
|
|
1167
|
+
inline-size: var(--control-height);
|
|
1168
|
+
padding-inline: 0;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
:where(m-stepper) > :where(:nth-child(2)) {
|
|
1172
|
+
display: grid;
|
|
1173
|
+
place-items: center;
|
|
1174
|
+
min-inline-size: 0;
|
|
1175
|
+
block-size: var(--control-height);
|
|
1176
|
+
padding-inline: var(--space-sm);
|
|
1177
|
+
overflow: hidden;
|
|
1178
|
+
border-inline: 1px solid var(--color-border);
|
|
1179
|
+
background: var(--color-surface-raised);
|
|
1180
|
+
color: var(--color-text);
|
|
1181
|
+
font-size: 0.875rem;
|
|
1182
|
+
font-weight: 600;
|
|
1183
|
+
text-align: center;
|
|
1184
|
+
text-overflow: ellipsis;
|
|
1185
|
+
white-space: nowrap;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
:where(m-stepper) > :where([data-reset]) {
|
|
1189
|
+
border-inline-start: 1px solid var(--color-border);
|
|
1190
|
+
}
|
|
1191
|
+
|
|
986
1192
|
/* --- dialog: modal + drawer --------------------------------------- *
|
|
987
1193
|
* The browser brings focus trapping, Esc, top layer, ::backdrop, and
|
|
988
1194
|
* form[method=dialog] closing. Invoker commands (commandfor/command)
|
|
@@ -1535,38 +1741,136 @@
|
|
|
1535
1741
|
/* --- tabs: m-tabs + tabs.js (JS-enhanced) ------------------------------ *
|
|
1536
1742
|
* without the module: inert nav, all panels visible in order —
|
|
1537
1743
|
* complete content. with it: tablist semantics + roving focus.
|
|
1538
|
-
*
|
|
1744
|
+
* default: muted track + surface active tab. variant="underline":
|
|
1745
|
+
* quiet rail + accent selection line; behavior stays identical.
|
|
1539
1746
|
* ------------------------------------------------------------------ */
|
|
1540
1747
|
:where(m-tabs) {
|
|
1748
|
+
--m-tabs-rail-gap: var(--space-2xs);
|
|
1749
|
+
--m-tabs-rail-padding: var(--space-2xs);
|
|
1750
|
+
--m-tabs-rail-border: none;
|
|
1751
|
+
--m-tabs-rail-radius: var(--radius-md);
|
|
1752
|
+
--m-tabs-rail-background: var(--neutral-3);
|
|
1753
|
+
--m-tabs-overflow-cover: var(--neutral-3);
|
|
1754
|
+
--m-tabs-overflow-duration: 0.15s;
|
|
1755
|
+
--m-tabs-overflow-marker: color-mix(in oklch, var(--color-text-muted) 70%, transparent);
|
|
1756
|
+
--m-tabs-overflow-start-gutter: 0px;
|
|
1757
|
+
--m-tabs-overflow-end-gutter: 0px;
|
|
1758
|
+
--m-tabs-overflow-start: 0;
|
|
1759
|
+
--m-tabs-overflow-end: 0;
|
|
1760
|
+
--m-tabs-tab-radius: var(--radius-sm);
|
|
1761
|
+
--m-tabs-tab-edge-padding: var(--space-sm);
|
|
1762
|
+
--m-tabs-tab-focus-offset: var(--focus-ring-offset);
|
|
1763
|
+
--m-tabs-tab-selected-background: var(--color-surface);
|
|
1764
|
+
--m-tabs-tab-selected-shadow: 0 1px 2px oklch(0 0 0 / 0.08);
|
|
1541
1765
|
display: block;
|
|
1542
1766
|
}
|
|
1543
1767
|
|
|
1768
|
+
:where(m-tabs[variant="underline"]) {
|
|
1769
|
+
--m-tabs-rail-gap: 0;
|
|
1770
|
+
--m-tabs-rail-padding: 0;
|
|
1771
|
+
--m-tabs-rail-border: 1px solid var(--color-border);
|
|
1772
|
+
--m-tabs-rail-radius: 0;
|
|
1773
|
+
--m-tabs-rail-background: transparent;
|
|
1774
|
+
--m-tabs-overflow-cover: var(--color-surface);
|
|
1775
|
+
--m-tabs-tab-radius: 0;
|
|
1776
|
+
--m-tabs-tab-edge-padding: 0;
|
|
1777
|
+
--m-tabs-tab-focus-offset: -2px;
|
|
1778
|
+
--m-tabs-tab-selected-background: transparent;
|
|
1779
|
+
--m-tabs-tab-selected-shadow: inset 0 -2px var(--color-accent);
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1544
1782
|
:where(m-tabs) > :where(nav) {
|
|
1545
1783
|
display: inline-flex;
|
|
1546
|
-
gap: var(--
|
|
1547
|
-
padding: var(--
|
|
1548
|
-
|
|
1549
|
-
border-radius: var(--radius
|
|
1784
|
+
gap: var(--m-tabs-rail-gap);
|
|
1785
|
+
padding: var(--m-tabs-rail-padding);
|
|
1786
|
+
border-block-end: var(--m-tabs-rail-border);
|
|
1787
|
+
border-radius: var(--m-tabs-rail-radius);
|
|
1788
|
+
background: var(--m-tabs-rail-background);
|
|
1550
1789
|
|
|
1551
1790
|
/* Graceful collapse: labels never wrap inside a tab — when the rail
|
|
1552
|
-
is narrower than its tabs it scrolls horizontally instead.
|
|
1553
|
-
|
|
1554
|
-
|
|
1791
|
+
is narrower than its tabs it scrolls horizontally instead. Before
|
|
1792
|
+
enhancement, the native scrollbar remains the overflow affordance.
|
|
1793
|
+
tabs.js hides it, activates sticky direction markers in clear
|
|
1794
|
+
gutters, and reveals a selected tab within those gutters. Scroll
|
|
1795
|
+
chaining stays contained. */
|
|
1555
1796
|
max-inline-size: 100%;
|
|
1556
1797
|
overflow-x: auto;
|
|
1557
1798
|
overscroll-behavior-x: contain;
|
|
1558
1799
|
scrollbar-width: thin;
|
|
1559
1800
|
|
|
1801
|
+
&[role="tablist"] {
|
|
1802
|
+
scrollbar-width: none;
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
&::before,
|
|
1806
|
+
&::after {
|
|
1807
|
+
content: "";
|
|
1808
|
+
position: sticky;
|
|
1809
|
+
z-index: 1;
|
|
1810
|
+
align-self: stretch;
|
|
1811
|
+
background-color: var(--m-tabs-overflow-cover);
|
|
1812
|
+
background-position: center;
|
|
1813
|
+
background-size: 6px 10px;
|
|
1814
|
+
background-repeat: no-repeat;
|
|
1815
|
+
pointer-events: none;
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
&::before {
|
|
1819
|
+
inset-inline-start: 0;
|
|
1820
|
+
flex: 0 0 var(--space-md);
|
|
1821
|
+
margin-inline-end: calc(var(--m-tabs-overflow-start-gutter) - var(--space-md));
|
|
1822
|
+
opacity: var(--m-tabs-overflow-start);
|
|
1823
|
+
background-image: conic-gradient(from 45deg at left center,
|
|
1824
|
+
var(--m-tabs-overflow-marker) 0 25%, transparent 0);
|
|
1825
|
+
transition:
|
|
1826
|
+
opacity var(--m-tabs-overflow-duration),
|
|
1827
|
+
margin-inline-end var(--m-tabs-overflow-duration);
|
|
1828
|
+
}
|
|
1829
|
+
|
|
1830
|
+
&::after {
|
|
1831
|
+
inset-inline-end: 0;
|
|
1832
|
+
flex: 0 0 var(--space-md);
|
|
1833
|
+
margin-inline-start: calc(var(--m-tabs-overflow-end-gutter) - var(--space-md));
|
|
1834
|
+
opacity: var(--m-tabs-overflow-end);
|
|
1835
|
+
background-image: conic-gradient(from 225deg at right center,
|
|
1836
|
+
var(--m-tabs-overflow-marker) 0 25%, transparent 0);
|
|
1837
|
+
transition:
|
|
1838
|
+
opacity var(--m-tabs-overflow-duration),
|
|
1839
|
+
margin-inline-start var(--m-tabs-overflow-duration);
|
|
1840
|
+
}
|
|
1841
|
+
|
|
1842
|
+
&:dir(rtl)::before {
|
|
1843
|
+
background-image: conic-gradient(from 225deg at right center,
|
|
1844
|
+
var(--m-tabs-overflow-marker) 0 25%, transparent 0);
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
&:dir(rtl)::after {
|
|
1848
|
+
background-image: conic-gradient(from 45deg at left center,
|
|
1849
|
+
var(--m-tabs-overflow-marker) 0 25%, transparent 0);
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1560
1852
|
& > :where(button) {
|
|
1561
1853
|
flex-shrink: 0;
|
|
1562
1854
|
white-space: nowrap;
|
|
1563
1855
|
block-size: var(--control-height-sm);
|
|
1564
1856
|
padding-inline: var(--space-sm);
|
|
1565
1857
|
border: 0;
|
|
1566
|
-
border-radius: var(--radius
|
|
1858
|
+
border-radius: var(--m-tabs-tab-radius);
|
|
1567
1859
|
background: transparent;
|
|
1568
1860
|
color: var(--color-text-muted);
|
|
1569
1861
|
|
|
1862
|
+
&:first-of-type {
|
|
1863
|
+
padding-inline-start: var(--m-tabs-tab-edge-padding);
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
&:last-of-type {
|
|
1867
|
+
padding-inline-end: var(--m-tabs-tab-edge-padding);
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
&:focus-visible {
|
|
1871
|
+
outline-offset: var(--m-tabs-tab-focus-offset);
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1570
1874
|
/* :not() guards mirror the base button states (house rule) */
|
|
1571
1875
|
&:hover:not(:disabled, [aria-disabled="true"]),
|
|
1572
1876
|
&:active:not(:disabled, [aria-disabled="true"]) {
|
|
@@ -1575,19 +1879,25 @@
|
|
|
1575
1879
|
}
|
|
1576
1880
|
|
|
1577
1881
|
&[aria-selected="true"] {
|
|
1578
|
-
background: var(--
|
|
1882
|
+
background: var(--m-tabs-tab-selected-background);
|
|
1579
1883
|
color: var(--color-text);
|
|
1580
|
-
box-shadow:
|
|
1884
|
+
box-shadow: var(--m-tabs-tab-selected-shadow);
|
|
1581
1885
|
|
|
1582
1886
|
&:hover:not(:disabled, [aria-disabled="true"]),
|
|
1583
1887
|
&:active:not(:disabled, [aria-disabled="true"]) {
|
|
1584
|
-
background: var(--
|
|
1888
|
+
background: var(--m-tabs-tab-selected-background);
|
|
1585
1889
|
color: var(--color-text);
|
|
1586
1890
|
}
|
|
1587
1891
|
}
|
|
1588
1892
|
}
|
|
1589
1893
|
}
|
|
1590
1894
|
|
|
1895
|
+
/* Vendor pseudo gets its own rule: one unknown selector in a list
|
|
1896
|
+
invalidates the whole list. */
|
|
1897
|
+
:where(m-tabs) > :where(nav[role="tablist"])::-webkit-scrollbar {
|
|
1898
|
+
display: none;
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1591
1901
|
:where(m-tabs) > :where(section) {
|
|
1592
1902
|
padding-block: var(--space-md);
|
|
1593
1903
|
}
|
|
@@ -1763,6 +2073,556 @@
|
|
|
1763
2073
|
display: block;
|
|
1764
2074
|
}
|
|
1765
2075
|
|
|
2076
|
+
/* --- header navigation: native links + optional header.js collapse --- */
|
|
2077
|
+
:where(m-header) {
|
|
2078
|
+
container: m-header / inline-size;
|
|
2079
|
+
display: flex;
|
|
2080
|
+
flex-wrap: wrap;
|
|
2081
|
+
align-items: center;
|
|
2082
|
+
gap: var(--header-gap, var(--space-md));
|
|
2083
|
+
padding: var(--header-pad, var(--space-sm)) var(--header-gutter, var(--space-md));
|
|
2084
|
+
border-block-end: 1px solid var(--color-border);
|
|
2085
|
+
background: var(--color-surface);
|
|
2086
|
+
color: var(--color-text);
|
|
2087
|
+
}
|
|
2088
|
+
:where(m-header > [data-brand]) {
|
|
2089
|
+
display: inline-flex;
|
|
2090
|
+
align-items: center;
|
|
2091
|
+
gap: var(--space-xs);
|
|
2092
|
+
min-block-size: var(--control-height);
|
|
2093
|
+
color: var(--color-text);
|
|
2094
|
+
font-weight: var(--header-strong-weight, 650);
|
|
2095
|
+
text-decoration: none;
|
|
2096
|
+
overflow-wrap: anywhere;
|
|
2097
|
+
}
|
|
2098
|
+
:where(m-header > nav) {
|
|
2099
|
+
display: flex;
|
|
2100
|
+
flex: 1 1 auto;
|
|
2101
|
+
flex-wrap: wrap;
|
|
2102
|
+
align-items: center;
|
|
2103
|
+
gap: var(--space-2xs);
|
|
2104
|
+
min-inline-size: 0;
|
|
2105
|
+
justify-content: var(--header-nav-align, start);
|
|
2106
|
+
}
|
|
2107
|
+
:where(m-header[align="end"]) { --header-nav-align: end; }
|
|
2108
|
+
:where(m-header > nav > a) {
|
|
2109
|
+
display: inline-flex;
|
|
2110
|
+
align-items: center;
|
|
2111
|
+
min-block-size: var(--control-height);
|
|
2112
|
+
padding: var(--space-2xs) var(--space-sm);
|
|
2113
|
+
border-radius: var(--radius-md);
|
|
2114
|
+
color: var(--color-text-muted);
|
|
2115
|
+
font-size: var(--header-font-size, .875rem);
|
|
2116
|
+
font-weight: var(--header-font-weight, 500);
|
|
2117
|
+
text-decoration: none;
|
|
2118
|
+
overflow-wrap: anywhere;
|
|
2119
|
+
}
|
|
2120
|
+
:where(m-header > nav > a):hover:not([aria-disabled="true"]) { background: var(--color-surface-raised); color: var(--color-text); }
|
|
2121
|
+
:where(m-header > nav > a)[aria-current="page"]{ background: var(--color-surface-raised); color: var(--color-text); font-weight: var(--header-strong-weight, 650); }
|
|
2122
|
+
:where(m-header > nav > a)[aria-disabled="true"]{ color: var(--color-text-muted); opacity: .5; }
|
|
2123
|
+
:where(m-header > [data-actions]) { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-xs); margin-inline-start: auto; }
|
|
2124
|
+
/* A small enhancement switches the same nav between inline and native
|
|
2125
|
+
popover. Without script, all links stay visible in the wrapping header. */
|
|
2126
|
+
:where(m-header > [data-menu]) { display: none; }
|
|
2127
|
+
:where(m-header > nav > [data-compact]) { display: none; }
|
|
2128
|
+
:where(m-header[data-m-header-collapsed]) { flex-wrap: nowrap; }
|
|
2129
|
+
:where(m-header[data-m-header-collapsed] > [data-brand]) { min-inline-size: 0; }
|
|
2130
|
+
:where(m-header[data-m-header-collapsed] > [data-actions]) { display: none; }
|
|
2131
|
+
:where(m-header[data-m-header-collapsed] > [data-menu]) { display: inline-flex; margin-inline-start: auto; flex: none; }
|
|
2132
|
+
:where(m-header > nav[popover]):not(:popover-open) { display: none; }
|
|
2133
|
+
:where(m-header > nav[popover]):popover-open{
|
|
2134
|
+
display: flex;
|
|
2135
|
+
flex-direction: column;
|
|
2136
|
+
flex-wrap: nowrap;
|
|
2137
|
+
justify-content: start;
|
|
2138
|
+
align-items: stretch;
|
|
2139
|
+
gap: var(--space-2xs);
|
|
2140
|
+
position: fixed;
|
|
2141
|
+
position-area: none;
|
|
2142
|
+
max-inline-size: none;
|
|
2143
|
+
scale: 1;
|
|
2144
|
+
inset: auto;
|
|
2145
|
+
top: var(--m-header-menu-top);
|
|
2146
|
+
left: var(--m-header-menu-left);
|
|
2147
|
+
width: var(--m-header-menu-width);
|
|
2148
|
+
max-block-size: var(--m-header-menu-height);
|
|
2149
|
+
overflow-y: auto;
|
|
2150
|
+
margin: 0;
|
|
2151
|
+
padding: var(--space-xs);
|
|
2152
|
+
border: 1px solid var(--color-border-strong);
|
|
2153
|
+
border-radius: var(--radius-md);
|
|
2154
|
+
background: var(--color-surface-overlay);
|
|
2155
|
+
color: var(--color-text);
|
|
2156
|
+
box-shadow: none;
|
|
2157
|
+
opacity: 1;
|
|
2158
|
+
transform: none;
|
|
2159
|
+
transition: none;
|
|
2160
|
+
animation: none;
|
|
2161
|
+
}
|
|
2162
|
+
:where(m-header > nav[popover] > a) { min-block-size: var(--header-target-height, 2.75rem); flex-shrink: 0; }
|
|
2163
|
+
:where(m-header > nav[popover] > [data-compact]) { display: inline-flex; }
|
|
2164
|
+
:where(m-header > nav[popover] > :not([data-compact]) + [data-compact]) { border-block-start: 1px solid var(--color-border); }
|
|
2165
|
+
:where(m-header > [data-menu] svg) { inline-size: 1rem; block-size: 1rem; }
|
|
2166
|
+
|
|
2167
|
+
|
|
2168
|
+
:where(m-header > [data-menu]) { --m-header-collapse: 0; }
|
|
2169
|
+
@container m-header (inline-size < 40rem) {
|
|
2170
|
+
:where(m-header > [data-menu]) { --m-header-collapse: 1; }
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
|
|
2174
|
+
/* Navigation disclosures: native details remain usable without header.js.
|
|
2175
|
+
Enhancement adds floating placement; mobile keeps content in flow.
|
|
2176
|
+
Panel contents are authored links and layouts, never ARIA menu widgets. */
|
|
2177
|
+
:where(m-header > nav[data-navigation-menu]) {
|
|
2178
|
+
--nav-panel-width: 34rem;
|
|
2179
|
+
--nav-panel-gap: var(--space-xs);
|
|
2180
|
+
--nav-panel-pad: var(--space-xs);
|
|
2181
|
+
--nav-panel-link-pad: var(--space-sm);
|
|
2182
|
+
--nav-panel-description-size: .8125rem;
|
|
2183
|
+
--nav-panel-heading-size: .6875rem;
|
|
2184
|
+
--nav-panel-z: 10;
|
|
2185
|
+
}
|
|
2186
|
+
:where(m-header > nav[data-navigation-menu] > details) { margin: 0; padding: 0; border: 0; background: none; max-inline-size: 100%; }
|
|
2187
|
+
:where(m-header > nav[data-navigation-menu] > details)::details-content { transition: none; overflow: visible; }
|
|
2188
|
+
:where(m-header > nav[data-navigation-menu] > details > summary) {
|
|
2189
|
+
display: flex;
|
|
2190
|
+
align-items: center;
|
|
2191
|
+
gap: var(--space-xs);
|
|
2192
|
+
min-block-size: var(--control-height);
|
|
2193
|
+
padding: var(--space-2xs) var(--space-sm);
|
|
2194
|
+
font-size: var(--header-font-size, .875rem);
|
|
2195
|
+
font-weight: var(--header-font-weight, 500);
|
|
2196
|
+
color: var(--color-text-muted);
|
|
2197
|
+
border-radius: var(--radius-md);
|
|
2198
|
+
}
|
|
2199
|
+
:where(m-header > nav[data-navigation-menu] > details > summary):hover {
|
|
2200
|
+
text-decoration: none; color: var(--color-text); background: var(--color-surface-raised);
|
|
2201
|
+
}
|
|
2202
|
+
:where(m-header > nav[data-navigation-menu] > details)[open] > :where(summary) {
|
|
2203
|
+
color: var(--color-text); background: var(--color-surface-raised);
|
|
2204
|
+
}
|
|
2205
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel]) {
|
|
2206
|
+
inline-size: min(var(--nav-panel-width), var(--m-nav-max-width, calc(100vw - 2 * var(--nav-panel-gap))));
|
|
2207
|
+
max-inline-size: 100%;
|
|
2208
|
+
max-block-size: var(--m-nav-height, none);
|
|
2209
|
+
margin: 0;
|
|
2210
|
+
padding: var(--nav-panel-pad);
|
|
2211
|
+
row-gap: var(--nav-panel-gap);
|
|
2212
|
+
border: 1px solid var(--color-border);
|
|
2213
|
+
border-radius: var(--radius-md);
|
|
2214
|
+
background: var(--color-surface-overlay);
|
|
2215
|
+
overflow: auto;
|
|
2216
|
+
}
|
|
2217
|
+
:where(m-header > nav[data-m-navigation-ready] > details > [data-nav-panel]) {
|
|
2218
|
+
position: fixed; z-index: var(--nav-panel-z);
|
|
2219
|
+
left: var(--m-nav-left); top: var(--m-nav-top);
|
|
2220
|
+
}
|
|
2221
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] a) {
|
|
2222
|
+
display: block;
|
|
2223
|
+
padding: var(--nav-panel-link-pad);
|
|
2224
|
+
border-radius: var(--radius-md);
|
|
2225
|
+
color: var(--color-text);
|
|
2226
|
+
text-decoration: none;
|
|
2227
|
+
font-size: var(--header-font-size, .875rem);
|
|
2228
|
+
overflow-wrap: anywhere;
|
|
2229
|
+
}
|
|
2230
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] a):hover:not([aria-disabled="true"]),
|
|
2231
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] a)[aria-current="page"] { background: var(--color-surface-raised); }
|
|
2232
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] a)[aria-disabled="true"] { opacity: .5; }
|
|
2233
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] strong) { display: block; font-weight: var(--header-strong-weight, 650); }
|
|
2234
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] small) {
|
|
2235
|
+
display: block; margin-block-start: var(--space-2xs);
|
|
2236
|
+
font-size: var(--nav-panel-description-size); color: var(--color-text-muted);
|
|
2237
|
+
}
|
|
2238
|
+
:where(m-header > nav[data-navigation-menu] [data-nav-panel] h2) {
|
|
2239
|
+
margin: 0; padding: var(--nav-panel-link-pad);
|
|
2240
|
+
font-size: var(--nav-panel-heading-size); font-weight: var(--header-font-weight, 500); color: var(--color-text-muted);
|
|
2241
|
+
}
|
|
2242
|
+
:where(m-header[data-m-header-collapsed] > nav[data-navigation-menu] > details) { flex-shrink: 0; }
|
|
2243
|
+
:where(m-header[data-m-header-collapsed] > nav[data-navigation-menu] > details > summary) { min-block-size: var(--header-target-height, 2.75rem); }
|
|
2244
|
+
:where(m-header[data-m-header-collapsed] > nav[data-navigation-menu] > details > [data-nav-panel]) {
|
|
2245
|
+
position: static; inline-size: auto; max-block-size: none;
|
|
2246
|
+
margin: var(--space-xs) var(--space-sm); padding: 0 0 0 var(--space-xs);
|
|
2247
|
+
padding-inline: var(--space-xs) 0;
|
|
2248
|
+
border: 0; border-inline-start: 1px solid var(--color-border);
|
|
2249
|
+
border-radius: 0; background: transparent; overflow: visible;
|
|
2250
|
+
}
|
|
2251
|
+
|
|
2252
|
+
/* Data collections: application-owned rows and state, native table semantics.
|
|
2253
|
+
Column widths and sticky offsets are authored for the application's schema.
|
|
2254
|
+
Selection actions replace filters; keep filters inert while selection is active.
|
|
2255
|
+
For a taller action set, increase --table-toolbar-min-height to reserve space. */
|
|
2256
|
+
:where(:root) {
|
|
2257
|
+
--table-font-size: .8125rem;
|
|
2258
|
+
--table-padding: var(--space-lg);
|
|
2259
|
+
--table-cell-padding: var(--space-sm);
|
|
2260
|
+
--table-min-width: 54rem;
|
|
2261
|
+
--table-toolbar-min-height: 0px;
|
|
2262
|
+
--table-selected-background: var(--color-surface-raised);
|
|
2263
|
+
--table-edge-width: var(--space-md);
|
|
2264
|
+
--table-edge-color: color-mix(in oklch, var(--color-text) 14%, transparent);
|
|
2265
|
+
--table-state-padding: var(--space-2xl);
|
|
2266
|
+
}
|
|
2267
|
+
:where([data-data-table]) { container: mica-table / inline-size; background: var(--color-surface); border: 1px solid var(--color-border); min-inline-size: 0; }
|
|
2268
|
+
:where([data-table-heading]) { display:flex; justify-content:space-between; align-items:center; gap:var(--space-md); padding:var(--table-padding) var(--table-padding) var(--space-sm); }
|
|
2269
|
+
:where([data-table-heading] > button) { flex-shrink:0; white-space:nowrap; }
|
|
2270
|
+
:where([data-table-heading] h2) { margin:0; font-size:var(--table-heading-size, 1.375rem); }
|
|
2271
|
+
:where([data-table-heading] p) { margin:var(--space-2xs) 0 0; color:var(--color-text-muted); font-size:var(--table-font-size); }
|
|
2272
|
+
:where([data-table-toolbar]) { position:relative; min-block-size:var(--table-toolbar-min-height); }
|
|
2273
|
+
:where([data-table-filters], [data-table-selection]) { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-xs); padding:var(--space-sm) var(--table-padding); }
|
|
2274
|
+
:where([data-table-filters] [data-table-search]) { flex:1; min-inline-size:12rem; }
|
|
2275
|
+
:where([data-table-search] input) { inline-size:100%; }
|
|
2276
|
+
:where([data-table-filters] select) { max-inline-size:11rem; }
|
|
2277
|
+
:where([data-table-filters] button) { white-space:nowrap; }
|
|
2278
|
+
:where([data-table-selection]) { position:absolute; inset:0; align-content:center; gap:var(--space-sm); font-size:var(--table-font-size); }
|
|
2279
|
+
:where([data-table-toolbar]):has(> [data-table-selection]:not([hidden])) > :where([data-table-filters]) { visibility:hidden; }
|
|
2280
|
+
:where([data-table-selection] [data-table-clear]) { margin-inline-start:auto; }
|
|
2281
|
+
:where([data-data-table] [hidden], [data-pagination] [hidden], [data-table-selection][hidden], [data-table-filters] [hidden], [data-table] [hidden]) { display:none; }
|
|
2282
|
+
:where(m-table-scroll) { display:block; position:relative; min-inline-size:0; }
|
|
2283
|
+
:where(m-table-scroll)::before, :where(m-table-scroll)::after { content:''; position:absolute; inset-block:1px; inline-size:var(--table-edge-width); z-index:4; pointer-events:none; opacity:0; }
|
|
2284
|
+
:where(m-table-scroll)::before { left:var(--m-table-edge-left, 0px); background:linear-gradient(to right,var(--table-edge-color),transparent); }
|
|
2285
|
+
:where(m-table-scroll)::after { right:var(--m-table-edge-right, 0px); background:linear-gradient(to left,var(--table-edge-color),transparent); }
|
|
2286
|
+
:where(m-table-scroll[data-m-overflow-left])::before, :where(m-table-scroll[data-m-overflow-right])::after { opacity:1; }
|
|
2287
|
+
:where([data-table-region]) { position:relative; overflow:auto; overscroll-behavior:contain; border-block:1px solid var(--color-border); }
|
|
2288
|
+
:where(table[data-table]) { margin:0; inline-size:100%; min-inline-size:var(--table-min-width, 54rem); border-collapse:separate; border-spacing:0; table-layout:fixed; }
|
|
2289
|
+
:where([data-table] th, [data-table] td) { padding:var(--table-cell-padding, var(--space-sm)); vertical-align:middle; font-size:var(--table-font-size, .8125rem); }
|
|
2290
|
+
:where([data-table] thead th) { background:var(--color-surface-raised); color:var(--color-text-muted); font-weight:500; border-block-end:1px solid var(--color-border); }
|
|
2291
|
+
:where([data-table] th button) { display:inline-flex; align-items:center; gap:var(--space-xs); padding:0; min-block-size:var(--table-sort-target, 2rem); border:0; background:none; color:inherit; font:inherit; text-align:inherit; white-space:nowrap; }
|
|
2292
|
+
:where([data-table] th[aria-sort]) button { color:var(--color-text); }
|
|
2293
|
+
:where([data-table] td a) { color:var(--color-text); font-weight:600; text-decoration:none; }
|
|
2294
|
+
:where([data-table] td) a:hover { text-decoration:underline; }
|
|
2295
|
+
:where([data-table-description]) { display:block; color:var(--color-text-muted); margin-block-start:var(--space-2xs); font-size:var(--table-description-size, .75rem); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
2296
|
+
:where([data-table] tbody tr:last-child td) { border-block-end:0; }
|
|
2297
|
+
:where([data-table] tbody tr[data-selected]) > td { background:var(--table-selected-background, var(--color-surface-raised)); }
|
|
2298
|
+
:where([data-table-state]) { padding:var(--table-state-padding, var(--space-2xl)) var(--table-padding, var(--space-lg)); text-align:center; white-space:normal; }
|
|
2299
|
+
:where([data-table-state] strong) { display:block; color:var(--color-text); font-size:var(--table-state-font-size, 1rem); }
|
|
2300
|
+
:where([data-table-state] p) { margin-block:var(--space-xs) var(--space-md); color:var(--color-text-muted); }
|
|
2301
|
+
:where([data-table-region][data-state] table) { min-inline-size:100%; table-layout:auto; }
|
|
2302
|
+
:where([data-table-region][data-state] thead) { display:none; }
|
|
2303
|
+
:where([data-table-footer]) { container: mica-pagination / inline-size; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:var(--space-md); padding:var(--space-md) var(--table-padding); font-size:var(--table-font-size); }
|
|
2304
|
+
:where([data-page-meta]) { display:flex; align-items:center; gap:var(--space-md); flex-wrap:wrap; color:var(--color-text-muted); }
|
|
2305
|
+
:where([data-page-size]) { display:flex; align-items:center; gap:var(--space-xs); }
|
|
2306
|
+
:where([data-page-size] select) { inline-size:auto; min-block-size:2rem; padding-block:var(--space-2xs); font-size:1rem; }
|
|
2307
|
+
:where(nav[data-pagination]) { --pagination-target:2.125rem; --pagination-font-size:.8125rem; display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2xs); }
|
|
2308
|
+
:where([data-pagination] > a, [data-pagination] > button, [data-pagination] > [aria-disabled]) { display:inline-flex; justify-content:center; align-items:center; min-inline-size:var(--pagination-target); min-block-size:var(--pagination-target); padding:var(--space-2xs) var(--space-xs); border:0; background:transparent; color:var(--color-text); font-size:var(--pagination-font-size); text-decoration:none; }
|
|
2309
|
+
:where([data-pagination]) > a:hover { background:var(--color-surface-raised); }
|
|
2310
|
+
:where([data-pagination]) > [aria-current=page] { background:var(--color-surface-raised); font-weight:650; color:var(--color-text); }
|
|
2311
|
+
:where([data-pagination]) > :is([aria-disabled=true], :disabled) { color:var(--color-text-muted); cursor:default; }
|
|
2312
|
+
:where([data-page-status]) { display:none; color:var(--color-text-muted); font-size:var(--pagination-font-size); }
|
|
2313
|
+
@container mica-table (max-width:44rem) {
|
|
2314
|
+
:where([data-table-heading]) { padding:var(--space-md); }
|
|
2315
|
+
:where([data-table-filters]) { padding:0 var(--space-md) var(--space-sm); }
|
|
2316
|
+
:where([data-table-search]) { flex-basis:100%; }
|
|
2317
|
+
:where([data-table-filters] select) { flex:1; min-inline-size:0; max-inline-size:none; }
|
|
2318
|
+
:where([data-table-selection]) { padding-inline:var(--space-md); }
|
|
2319
|
+
:where([data-table-footer]) { padding:var(--space-md); gap:var(--space-sm); }
|
|
2320
|
+
:where([data-table] [data-table-sticky]) { position:sticky; inset-inline-start:var(--table-sticky-offset, 0px); background:var(--color-surface); z-index:1; }
|
|
2321
|
+
:where([data-table] thead [data-table-sticky]) { background:var(--color-surface-raised); z-index:3; }
|
|
2322
|
+
}
|
|
2323
|
+
/* A compact status is opt-in: include data-page-status to let numbered
|
|
2324
|
+
links collapse. Without it, every authored page link remains visible. */
|
|
2325
|
+
@container mica-pagination (max-width:40rem) {
|
|
2326
|
+
:where([data-page-meta]) { inline-size:100%; justify-content:space-between; gap:var(--space-xs); }
|
|
2327
|
+
:where([data-pagination]):has([data-page-status]) { inline-size:100%; justify-content:space-between; }
|
|
2328
|
+
:where([data-pagination]):has([data-page-status]) > :is([data-page-number], [data-page-ellipsis]) { display:none; }
|
|
2329
|
+
:where([data-pagination] [data-page-status]) { display:block; }
|
|
2330
|
+
}
|
|
2331
|
+
|
|
2332
|
+
/* Breadcrumbs: native hierarchy with decorative separators. The current
|
|
2333
|
+
page is plain text; nothing is automatically removed on narrow screens.
|
|
2334
|
+
Override --breadcrumb-current-weight or --breadcrumb-separator-color
|
|
2335
|
+
to tune emphasis without changing the authored trail. */
|
|
2336
|
+
:where(nav[data-breadcrumbs]) {
|
|
2337
|
+
--breadcrumb-font-size: .8125rem;
|
|
2338
|
+
--breadcrumb-gap: var(--space-xs);
|
|
2339
|
+
--breadcrumb-row-gap: var(--space-2xs);
|
|
2340
|
+
--breadcrumb-current-weight: 500;
|
|
2341
|
+
--breadcrumb-separator-size: .3rem;
|
|
2342
|
+
--breadcrumb-separator-color: var(--color-text-muted);
|
|
2343
|
+
--breadcrumb-menu-width: 14rem;
|
|
2344
|
+
--breadcrumb-overflow-font-size: 1rem;
|
|
2345
|
+
--breadcrumb-menu-target: 2.25rem;
|
|
2346
|
+
--breadcrumb-menu-z: 5;
|
|
2347
|
+
font-size: var(--breadcrumb-font-size);
|
|
2348
|
+
line-height: 1.5;
|
|
2349
|
+
color: var(--color-text-muted);
|
|
2350
|
+
}
|
|
2351
|
+
:where(nav[data-breadcrumbs] ol) {
|
|
2352
|
+
display: flex; align-items: center; flex-wrap: wrap;
|
|
2353
|
+
list-style: none; margin: 0; padding: 0;
|
|
2354
|
+
column-gap: var(--breadcrumb-gap); row-gap: var(--breadcrumb-row-gap);
|
|
2355
|
+
}
|
|
2356
|
+
:where(nav[data-breadcrumbs] li) {
|
|
2357
|
+
display: flex; align-items: center; gap: var(--breadcrumb-gap);
|
|
2358
|
+
min-inline-size: 0; max-inline-size: 100%;
|
|
2359
|
+
}
|
|
2360
|
+
:where(nav[data-breadcrumbs] > ol > li + li)::before {
|
|
2361
|
+
content: ''; display: block; flex: none;
|
|
2362
|
+
inline-size: var(--breadcrumb-separator-size); block-size: var(--breadcrumb-separator-size);
|
|
2363
|
+
border: solid var(--breadcrumb-separator-color); border-width: 1px 1px 0 0;
|
|
2364
|
+
transform: rotate(45deg); margin-inline: var(--space-2xs);
|
|
2365
|
+
}
|
|
2366
|
+
:where(nav[data-breadcrumbs]:dir(rtl) > ol > li + li)::before { transform: rotate(225deg); }
|
|
2367
|
+
:where(nav[data-breadcrumbs] a) {
|
|
2368
|
+
color: var(--color-text-muted); text-decoration: none;
|
|
2369
|
+
overflow-wrap: anywhere; padding-block: var(--space-2xs);
|
|
2370
|
+
}
|
|
2371
|
+
:where(nav[data-breadcrumbs] a):hover { text-decoration: underline; color: var(--color-text); }
|
|
2372
|
+
:where(nav[data-breadcrumbs] [aria-current="page"]) {
|
|
2373
|
+
color: var(--color-text); font-weight: var(--breadcrumb-current-weight);
|
|
2374
|
+
overflow-wrap: anywhere; padding-block: var(--space-2xs);
|
|
2375
|
+
}
|
|
2376
|
+
:where(m-breadcrumb-overflow) { display: block; min-inline-size: 0; }
|
|
2377
|
+
:where(nav[data-breadcrumbs] details) { position: relative; margin: 0; border: 0; padding: 0; flex: none; }
|
|
2378
|
+
:where(nav[data-breadcrumbs] summary) {
|
|
2379
|
+
display: grid; place-items: center;
|
|
2380
|
+
inline-size: var(--breadcrumb-menu-target); min-block-size: var(--breadcrumb-menu-target);
|
|
2381
|
+
padding: 0; list-style: none; font-size: var(--breadcrumb-overflow-font-size);
|
|
2382
|
+
font-weight: var(--breadcrumb-current-weight); border-radius: var(--radius-md);
|
|
2383
|
+
color: var(--color-text-muted); cursor: pointer;
|
|
2384
|
+
}
|
|
2385
|
+
:where(nav[data-breadcrumbs] summary)::-webkit-details-marker { display: none; }
|
|
2386
|
+
:where(nav[data-breadcrumbs] summary)::after { display: none; }
|
|
2387
|
+
:where(nav[data-breadcrumbs] summary):hover,
|
|
2388
|
+
:where(nav[data-breadcrumbs] details)[open] > :where(summary) {
|
|
2389
|
+
background: var(--color-surface-raised); color: var(--color-text); text-decoration: none;
|
|
2390
|
+
}
|
|
2391
|
+
:where(nav[data-breadcrumbs] details)::details-content { transition: none; overflow: visible; }
|
|
2392
|
+
:where(nav[data-breadcrumbs] [data-breadcrumb-menu]) {
|
|
2393
|
+
position: absolute; inset-block-start: 100%; inset-inline-start: 0;
|
|
2394
|
+
inline-size: var(--breadcrumb-menu-width); max-inline-size: calc(100vw - var(--space-2xl));
|
|
2395
|
+
max-block-size: var(--m-breadcrumb-height, none); overflow: auto;
|
|
2396
|
+
z-index: var(--breadcrumb-menu-z); display: flex; flex-direction: column;
|
|
2397
|
+
align-items: stretch; flex-wrap: nowrap; gap: 0;
|
|
2398
|
+
margin: var(--space-2xs) 0 0; padding: var(--space-xs);
|
|
2399
|
+
border: 1px solid var(--color-border); border-radius: var(--radius-md);
|
|
2400
|
+
background: var(--color-surface-overlay);
|
|
2401
|
+
}
|
|
2402
|
+
:where(m-breadcrumb-overflow[data-m-breadcrumb-ready] [data-breadcrumb-menu]) {
|
|
2403
|
+
position: fixed; inset: auto; left: var(--m-breadcrumb-left); top: var(--m-breadcrumb-top);
|
|
2404
|
+
}
|
|
2405
|
+
:where(nav[data-breadcrumbs] [data-breadcrumb-menu] li) { display: block; max-inline-size: none; flex: none; }
|
|
2406
|
+
:where(nav[data-breadcrumbs] [data-breadcrumb-menu] a) {
|
|
2407
|
+
display: block; padding: var(--space-xs); min-block-size: var(--breadcrumb-menu-target);
|
|
2408
|
+
}
|
|
2409
|
+
:where(nav[data-breadcrumbs] [data-breadcrumb-menu] a):hover { background: var(--color-surface-raised); text-decoration: none; }
|
|
2410
|
+
|
|
2411
|
+
/* Bottom navigation is ordinary site navigation, not a tab widget.
|
|
2412
|
+
Place it in the last row of an app shell; no fixed positioning or
|
|
2413
|
+
breakpoint is imposed. For emphasis without fill, override
|
|
2414
|
+
--bottom-nav-active-background: transparent on the nav. */
|
|
2415
|
+
:where(nav[data-bottom-nav]) {
|
|
2416
|
+
--bottom-nav-pad: var(--space-xs);
|
|
2417
|
+
--bottom-nav-gap: var(--space-2xs);
|
|
2418
|
+
--bottom-nav-target-height: 3.5rem;
|
|
2419
|
+
--bottom-nav-font-size: .75rem;
|
|
2420
|
+
--bottom-nav-font-weight: 500;
|
|
2421
|
+
--bottom-nav-active-weight: 650;
|
|
2422
|
+
--bottom-nav-icon-size: 1.125rem;
|
|
2423
|
+
--bottom-nav-active-background: var(--color-surface-raised);
|
|
2424
|
+
display: flex;
|
|
2425
|
+
gap: var(--bottom-nav-gap);
|
|
2426
|
+
padding: var(--bottom-nav-pad);
|
|
2427
|
+
padding-block-end: max(var(--bottom-nav-pad), env(safe-area-inset-bottom));
|
|
2428
|
+
/* Safe-area insets are physical, even in an RTL document. */
|
|
2429
|
+
padding-left: max(var(--bottom-nav-pad), env(safe-area-inset-left));
|
|
2430
|
+
padding-right: max(var(--bottom-nav-pad), env(safe-area-inset-right));
|
|
2431
|
+
border-block-start: 1px solid var(--color-border);
|
|
2432
|
+
background: var(--color-surface);
|
|
2433
|
+
}
|
|
2434
|
+
:where(nav[data-bottom-nav]:not(:has([data-bottom-icon]))) {
|
|
2435
|
+
--bottom-nav-target-height: 2.75rem;
|
|
2436
|
+
--bottom-nav-font-size: .8125rem;
|
|
2437
|
+
}
|
|
2438
|
+
:where(nav[data-bottom-nav] > a) {
|
|
2439
|
+
display: flex;
|
|
2440
|
+
flex: 1;
|
|
2441
|
+
flex-direction: column;
|
|
2442
|
+
justify-content: center;
|
|
2443
|
+
align-items: center;
|
|
2444
|
+
gap: var(--bottom-nav-gap);
|
|
2445
|
+
min-inline-size: 0;
|
|
2446
|
+
min-block-size: var(--bottom-nav-target-height);
|
|
2447
|
+
padding: var(--space-xs) var(--space-2xs);
|
|
2448
|
+
border-radius: var(--radius-md);
|
|
2449
|
+
color: var(--color-text-muted);
|
|
2450
|
+
font-size: var(--bottom-nav-font-size);
|
|
2451
|
+
font-weight: var(--bottom-nav-font-weight);
|
|
2452
|
+
line-height: 1.25;
|
|
2453
|
+
text-align: center;
|
|
2454
|
+
text-decoration: none;
|
|
2455
|
+
overflow-wrap: anywhere;
|
|
2456
|
+
}
|
|
2457
|
+
:where(nav[data-bottom-nav] > a):hover:not([aria-disabled="true"]) {
|
|
2458
|
+
background: var(--color-surface-raised);
|
|
2459
|
+
color: var(--color-text);
|
|
2460
|
+
}
|
|
2461
|
+
:where(nav[data-bottom-nav] > a)[aria-current="page"] {
|
|
2462
|
+
background: var(--bottom-nav-active-background);
|
|
2463
|
+
color: var(--color-text);
|
|
2464
|
+
font-weight: var(--bottom-nav-active-weight);
|
|
2465
|
+
}
|
|
2466
|
+
:where(nav[data-bottom-nav] > a)[aria-disabled="true"] { opacity: .45; cursor: default; }
|
|
2467
|
+
:where(nav[data-bottom-nav] [data-bottom-icon]) {
|
|
2468
|
+
inline-size: var(--bottom-nav-icon-size);
|
|
2469
|
+
block-size: var(--bottom-nav-icon-size);
|
|
2470
|
+
flex: none;
|
|
2471
|
+
}
|
|
2472
|
+
|
|
2473
|
+
/* --- sidebar: authored navigation, optional sidebar.js shell behavior --- */
|
|
2474
|
+
:where(m-sidebar-layout) {
|
|
2475
|
+
--sidebar-width: 15.5rem;
|
|
2476
|
+
--sidebar-rail-width: 3.75rem;
|
|
2477
|
+
--sidebar-mobile-width: 18rem;
|
|
2478
|
+
--sidebar-pad: var(--space-xs);
|
|
2479
|
+
--sidebar-icon-size: 1rem;
|
|
2480
|
+
--sidebar-font-size: .875rem;
|
|
2481
|
+
--sidebar-group-size: .6875rem;
|
|
2482
|
+
--sidebar-subnav-size: .8125rem;
|
|
2483
|
+
--sidebar-active-weight: 600;
|
|
2484
|
+
--sidebar-close-size: 2.75rem;
|
|
2485
|
+
--sidebar-inset: 0px;
|
|
2486
|
+
--sidebar-content-border: 0px;
|
|
2487
|
+
--sidebar-edge: 1px;
|
|
2488
|
+
display: grid;
|
|
2489
|
+
grid-template-columns: var(--m-sidebar-track, var(--sidebar-width)) minmax(0, 1fr);
|
|
2490
|
+
block-size: var(--sidebar-height, 100svh);
|
|
2491
|
+
min-block-size: 0;
|
|
2492
|
+
background: var(--color-surface-raised);
|
|
2493
|
+
}
|
|
2494
|
+
:where(m-sidebar-layout[variant="inset"]) {
|
|
2495
|
+
--sidebar-inset: var(--space-xs);
|
|
2496
|
+
--sidebar-content-border: 1px;
|
|
2497
|
+
--sidebar-edge: 0px;
|
|
2498
|
+
}
|
|
2499
|
+
:where(m-sidebar-layout > [data-sidebar-main]) {
|
|
2500
|
+
min-inline-size: 0;
|
|
2501
|
+
min-block-size: 0;
|
|
2502
|
+
overflow: auto;
|
|
2503
|
+
margin-block: var(--sidebar-inset);
|
|
2504
|
+
margin-inline: 0 var(--sidebar-inset);
|
|
2505
|
+
border: var(--sidebar-content-border) solid var(--color-border);
|
|
2506
|
+
background: var(--color-surface);
|
|
2507
|
+
}
|
|
2508
|
+
:where(m-sidebar) {
|
|
2509
|
+
display: flex;
|
|
2510
|
+
flex-direction: column;
|
|
2511
|
+
min-inline-size: 0;
|
|
2512
|
+
min-block-size: 0;
|
|
2513
|
+
block-size: 100%;
|
|
2514
|
+
padding: var(--sidebar-pad, var(--space-xs));
|
|
2515
|
+
border-inline-end: var(--sidebar-edge, 1px) solid var(--color-border);
|
|
2516
|
+
background: var(--color-surface-raised);
|
|
2517
|
+
}
|
|
2518
|
+
:where(m-sidebar > header, m-sidebar > footer) { flex: none; }
|
|
2519
|
+
:where(m-sidebar > header) { display: flex; align-items: center; }
|
|
2520
|
+
:where(m-sidebar > nav) {
|
|
2521
|
+
flex: 1 1 auto;
|
|
2522
|
+
min-block-size: 0;
|
|
2523
|
+
overflow-y: auto;
|
|
2524
|
+
overscroll-behavior: contain;
|
|
2525
|
+
padding-block: var(--space-md);
|
|
2526
|
+
}
|
|
2527
|
+
:where(m-sidebar > nav section) { margin: 0 0 var(--space-lg); }
|
|
2528
|
+
:where(m-sidebar > nav h2) {
|
|
2529
|
+
margin: 0;
|
|
2530
|
+
padding: var(--space-xs);
|
|
2531
|
+
font-size: var(--sidebar-group-size, .6875rem);
|
|
2532
|
+
font-weight: 500;
|
|
2533
|
+
color: var(--color-text-muted);
|
|
2534
|
+
}
|
|
2535
|
+
:where(m-sidebar [data-sidebar-item], m-sidebar [data-sidebar-subnav] > a) {
|
|
2536
|
+
display: flex;
|
|
2537
|
+
align-items: center;
|
|
2538
|
+
gap: var(--space-xs);
|
|
2539
|
+
min-block-size: var(--control-height);
|
|
2540
|
+
block-size: auto;
|
|
2541
|
+
padding: var(--space-xs);
|
|
2542
|
+
border: 0;
|
|
2543
|
+
border-radius: var(--radius-md);
|
|
2544
|
+
background: transparent;
|
|
2545
|
+
color: var(--color-text-muted);
|
|
2546
|
+
font-size: var(--sidebar-font-size, .875rem);
|
|
2547
|
+
text-decoration: none;
|
|
2548
|
+
text-align: start;
|
|
2549
|
+
}
|
|
2550
|
+
:where(m-sidebar [data-sidebar-item], m-sidebar [data-sidebar-subnav] > a):hover:not(:disabled, [aria-disabled="true"]) {
|
|
2551
|
+
color: var(--color-text);
|
|
2552
|
+
background: var(--color-surface);
|
|
2553
|
+
}
|
|
2554
|
+
:where(m-sidebar a)[aria-current="page"] {
|
|
2555
|
+
color: var(--color-text);
|
|
2556
|
+
background: var(--color-surface);
|
|
2557
|
+
font-weight: var(--sidebar-active-weight, 600);
|
|
2558
|
+
/* Active is a quiet fill, never a framed button. */
|
|
2559
|
+
box-shadow: none;
|
|
2560
|
+
}
|
|
2561
|
+
:where(m-sidebar [data-sidebar-item])[aria-disabled="true"] { opacity: .45; }
|
|
2562
|
+
:where(m-sidebar [data-sidebar-icon]) {
|
|
2563
|
+
inline-size: var(--sidebar-icon-size, 1rem);
|
|
2564
|
+
block-size: var(--sidebar-icon-size, 1rem);
|
|
2565
|
+
flex: none;
|
|
2566
|
+
object-fit: contain;
|
|
2567
|
+
}
|
|
2568
|
+
:where(m-sidebar [data-sidebar-label]) { flex: 1; min-inline-size: 0; }
|
|
2569
|
+
:where(m-sidebar [data-sidebar-badge]) { margin-inline-start: auto; color: var(--color-text-muted); font-size: var(--sidebar-subnav-size, .8125rem); }
|
|
2570
|
+
:where(m-sidebar > header > [data-sidebar-item], m-sidebar > footer > [data-sidebar-item]) { inline-size: 100%; }
|
|
2571
|
+
:where(m-sidebar details) { margin: 0; padding: 0; border: 0; background: none; }
|
|
2572
|
+
:where(m-sidebar summary) { cursor: pointer; list-style: none; }
|
|
2573
|
+
:where(m-sidebar summary)::-webkit-details-marker { display: none; }
|
|
2574
|
+
:where(m-sidebar summary)::after { display: none; }
|
|
2575
|
+
:where(m-sidebar [data-sidebar-chevron]) { inline-size: var(--space-sm); block-size: var(--space-sm); flex: none; }
|
|
2576
|
+
:where(m-sidebar details)[open] > :where(summary) > :where([data-sidebar-chevron]) { transform: rotate(90deg); }
|
|
2577
|
+
:where(m-sidebar [data-sidebar-subnav]) {
|
|
2578
|
+
margin: var(--space-2xs) 0 var(--space-xs) var(--sidebar-icon-size, 1rem);
|
|
2579
|
+
margin-inline: var(--sidebar-icon-size, 1rem) 0;
|
|
2580
|
+
padding: 0;
|
|
2581
|
+
padding-inline-start: var(--space-md);
|
|
2582
|
+
border-inline-start: 1px solid var(--color-border);
|
|
2583
|
+
}
|
|
2584
|
+
:where(m-sidebar [data-sidebar-subnav] > a) { font-size: var(--sidebar-subnav-size, .8125rem); }
|
|
2585
|
+
:where([data-sidebar-toggle], [data-sidebar-close]) { display: none; }
|
|
2586
|
+
:where(m-sidebar-layout[data-m-sidebar-rail]) { --m-sidebar-track: var(--sidebar-rail-width); }
|
|
2587
|
+
:where(m-sidebar-layout[data-m-sidebar-rail] m-sidebar) :where([data-sidebar-label], [data-sidebar-badge], h2, [data-sidebar-chevron], [data-sidebar-subnav]) { display: none; }
|
|
2588
|
+
:where(m-sidebar-layout[data-m-sidebar-rail] m-sidebar [data-sidebar-item]) { justify-content: center; }
|
|
2589
|
+
:where(m-sidebar-layout[data-m-sidebar-rail] m-sidebar details:has([aria-current="page"]) > summary) { color: var(--color-text); background: var(--color-surface); }
|
|
2590
|
+
:where(m-sidebar-layout[data-m-sidebar-can-rail] [data-sidebar-toggle], m-sidebar-layout[data-m-sidebar-mobile] [data-sidebar-toggle]) { display: inline-flex; }
|
|
2591
|
+
:where(m-sidebar-layout[data-m-sidebar-mobile]) { grid-template-columns: minmax(0, 1fr); --sidebar-inset: 0px; --sidebar-content-border: 0px; }
|
|
2592
|
+
:where(dialog[data-sidebar-dialog]) {
|
|
2593
|
+
position: fixed;
|
|
2594
|
+
inset: 0 auto 0 0;
|
|
2595
|
+
inset-inline: 0 auto;
|
|
2596
|
+
margin: 0;
|
|
2597
|
+
padding: 0;
|
|
2598
|
+
inline-size: min(var(--sidebar-mobile-width, 18rem), calc(100vw - var(--space-2xl)));
|
|
2599
|
+
max-inline-size: none;
|
|
2600
|
+
block-size: 100dvh;
|
|
2601
|
+
max-block-size: 100dvh;
|
|
2602
|
+
border: 0;
|
|
2603
|
+
border-radius: 0;
|
|
2604
|
+
background: var(--color-surface-raised);
|
|
2605
|
+
opacity: 1;
|
|
2606
|
+
scale: 1;
|
|
2607
|
+
transform: none;
|
|
2608
|
+
transition: none;
|
|
2609
|
+
animation: none;
|
|
2610
|
+
}
|
|
2611
|
+
:where(dialog[data-sidebar-dialog])::backdrop { transition: none; }
|
|
2612
|
+
:where(dialog[data-sidebar-dialog] > m-sidebar) {
|
|
2613
|
+
flex: 1 1 auto;
|
|
2614
|
+
overflow: hidden;
|
|
2615
|
+
border: 0;
|
|
2616
|
+
padding: var(--sidebar-pad, var(--space-xs));
|
|
2617
|
+
padding-block-start: max(var(--sidebar-pad, var(--space-xs)), env(safe-area-inset-top));
|
|
2618
|
+
padding-block-end: max(var(--sidebar-pad, var(--space-xs)), env(safe-area-inset-bottom));
|
|
2619
|
+
}
|
|
2620
|
+
:where(dialog[data-sidebar-dialog] m-sidebar > header > [data-sidebar-item]) { flex: 1; inline-size: 0; min-inline-size: 0; }
|
|
2621
|
+
:where(dialog[data-sidebar-dialog] [data-sidebar-close]) { display: inline-flex; flex: none; inline-size: var(--sidebar-close-size, 2.75rem); block-size: var(--sidebar-close-size, 2.75rem); padding: var(--space-xs); }
|
|
2622
|
+
@media (max-width: 44rem) {
|
|
2623
|
+
:where(m-sidebar-layout:not([data-m-sidebar-ready])) { grid-template-columns: minmax(0, 1fr); block-size: auto; }
|
|
2624
|
+
}
|
|
2625
|
+
|
|
1766
2626
|
/* --- visually hidden: off-screen, still announced ------------------ *
|
|
1767
2627
|
*
|
|
1768
2628
|
* The one utility mica ships, and an accessibility primitive rather
|