@happyvertical/smrt-svelte 0.55.17 → 0.55.18

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.
@@ -622,3 +622,13 @@ lives beside, not inside, `./workspace` so the AdminShell barrel stays free of
622
622
  form is a plain `method="POST"`; pass `enhance` from `$app/forms` to enhance
623
623
  it. The token is a hidden field only and is never stored, logged or shown.
624
624
  Single-use, loopback-only enforcement stays server-side.
625
+
626
+ ## Theme (premium baseline)
627
+
628
+ The shell only consumes theme tokens; CSS and tokens changed, DOM and behaviour did not.
629
+
630
+ - Surface ladder: main and phone top bar on `--smrt-surface-ground`; header, footer and top/bottom bands, corners and the left sidebar on `--smrt-surface-panel`; the dock (right edge), drawers, phone sheet and phone drawers, popovers, toasts and the shortcuts dialog on raised glass (`--smrt-glass-surface-strong`, `--smrt-elevation-3`, drawers and sheet `--smrt-elevation-4`, plus `--smrt-inset-highlight`). Edit-mode strips use `--smrt-surface-sunken`.
631
+ - Region edges are `--smrt-hairline`; no solid outline-variant borders remain in the shell. Edit-mode drop zones and strips use the hairline with `border-style: dashed` and state tokens for fill. The resize separator keeps its own primary affordance.
632
+ - Glass: the header, phone top bar, phone tab bar, dock, drawers, sheet and popovers set `backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation))` over `--smrt-glass-surface` (`-strong` for raised regions). Outside the Glass preset the tokens are opaque with blur 0. `backdrop-filter` makes the element a containing block for fixed descendants; the e2e suite covers the account menu and the floating layout toggle.
633
+ - State layers: rows, tabs, rail buttons, toggles and the account trigger use one `::after` veil (`background: currentColor`, opacity from `--smrt-state-hover` / `-pressed` / `-selected`); transparent icon buttons use the equivalent `color-mix`. The selected nav row keeps its container fill and start indicator under the veil. Disabled uses `--smrt-state-disabled`. Focus rings come from `--smrt-focus-ring-*`; control radius and heights from `--smrt-control-*`.
634
+ - E2E fixture: `ShellFixture` accepts `?theme=glass|material|studio|smrt` and `?scheme=dark` (all presets are imported) for per-preset screenshots.
@@ -1049,26 +1049,26 @@ const EDGE_OF_REGION: Record<ShellRegion, PanelEdge> = {
1049
1049
  color: var(--smrt-color-primary);
1050
1050
  }
1051
1051
  .smrt-layout-toggle { display: inline-flex; align-items: center; gap: var(--smrt-spacing-1); }
1052
- .smrt-layout-toggle--floating { position: fixed; z-index: 45; inset-block-start: max(var(--smrt-spacing-3), env(safe-area-inset-top)); inset-inline-end: max(var(--smrt-spacing-3), env(safe-area-inset-right)); border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface-container-high); box-shadow: var(--smrt-elevation-2); }
1052
+ .smrt-layout-toggle--floating { position: fixed; z-index: 45; inset-block-start: max(var(--smrt-spacing-3), env(safe-area-inset-top)); inset-inline-end: max(var(--smrt-spacing-3), env(safe-area-inset-right)); border: var(--smrt-hairline); border-radius: var(--smrt-radius-full); background: var(--smrt-surface-raised); box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight); }
1053
1053
  .smrt-layout-toggle--floating :global(.smrt-shell-icon-button) { border-radius: var(--smrt-radius-full); }
1054
1054
  .smrt-layout-toggle :global(.smrt-shell-icon-button[aria-pressed='true']) { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
1055
1055
  .smrt-app-shell-color-scheme { display: inline-flex; align-items: center; }
1056
1056
  .smrt-app-shell-color-scheme :global(.smrt-color-scheme-toggle__switch) { min-block-size: var(--smrt-control-target-min); }
1057
1057
  .smrt-app-shell-palette { display: inline-flex; min-inline-size: 0; }
1058
- .smrt-app-shell-palette[data-search] :global(.smrt-command-palette-trigger) { inline-size: min(28rem, 40vw); justify-content: flex-start; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface-variant); }
1058
+ .smrt-app-shell-palette[data-search] :global(.smrt-command-palette-trigger) { inline-size: min(28rem, 40vw); justify-content: flex-start; border: var(--smrt-hairline-strong); border-radius: var(--smrt-radius-full); background: var(--smrt-surface-control); color: var(--smrt-color-on-surface-variant); }
1059
1059
  .smrt-app-shell-palette[data-search] :global(.smrt-command-palette-trigger__hint) { margin-inline-start: auto; }
1060
1060
  .smrt-layout-live { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
1061
1061
  .smrt-edit-zone__label { flex: 0 0 auto; color: var(--smrt-color-on-surface-variant); font: var(--smrt-typography-label-small-font); white-space: nowrap; }
1062
- .smrt-edit-item { display: inline-flex; align-items: center; min-inline-size: 0; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface); }
1063
- .smrt-edit-item--dragging { opacity: 0.55; }
1062
+ .smrt-edit-item { display: inline-flex; align-items: center; min-inline-size: 0; border: var(--smrt-hairline); border-radius: var(--smrt-control-radius); background: var(--smrt-surface-raised); }
1063
+ .smrt-edit-item--dragging { opacity: var(--smrt-state-disabled); }
1064
1064
  @media (prefers-reduced-motion: no-preference) {
1065
1065
  .smrt-edit-item { animation: smrt-edit-item-in var(--smrt-duration-short2) var(--smrt-easing-standard) backwards; }
1066
1066
  }
1067
1067
  @keyframes smrt-edit-item-in { from { opacity: 0; transform: scale(0.96); } }
1068
1068
  .smrt-edit-item__body { display: inline-flex; align-items: center; min-inline-size: 0; pointer-events: none; }
1069
1069
  .smrt-edit-item__grip { display: inline-grid; place-items: center; flex: 0 0 auto; inline-size: 1.5rem; block-size: 2rem; padding: 0; border: 0; border-radius: var(--smrt-radius-sm); background: transparent; color: var(--smrt-color-on-surface-variant); cursor: grab; touch-action: none; }
1070
- .smrt-edit-item__grip:hover { background: var(--smrt-color-surface-container-high); }
1071
- .smrt-edit-item__grip:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
1070
+ .smrt-edit-item__grip:hover { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
1071
+ .smrt-edit-item__grip:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
1072
1072
  .smrt-edit-item__grip[aria-pressed='true'] { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
1073
1073
  }
1074
1074
  </style>
@@ -89,11 +89,12 @@ function press(event: MouseEvent, toggle: DockToggle): void {
89
89
  .smrt-dock-toggles__button {
90
90
  display: inline-grid;
91
91
  place-items: center;
92
- inline-size: 2.25rem;
93
- block-size: 2.25rem;
92
+ position: relative;
93
+ inline-size: var(--smrt-control-height-small);
94
+ block-size: var(--smrt-control-height-small);
94
95
  padding: 0;
95
96
  border: 1px solid transparent;
96
- border-radius: var(--smrt-radius-md, 0.5rem);
97
+ border-radius: var(--smrt-control-radius);
97
98
  background: transparent;
98
99
  color: var(--smrt-color-on-surface);
99
100
  cursor: pointer;
@@ -106,22 +107,37 @@ function press(event: MouseEvent, toggle: DockToggle): void {
106
107
  }
107
108
  }
108
109
 
109
- .smrt-dock-toggles__button:hover {
110
- background: var(--smrt-color-surface-container-high);
110
+ /* State layer over the button; the active container fill sits under it. */
111
+ .smrt-dock-toggles__button::after {
112
+ content: '';
113
+ position: absolute;
114
+ inset: 0;
115
+ border-radius: inherit;
116
+ background: currentColor;
117
+ opacity: 0;
118
+ pointer-events: none;
119
+ }
120
+
121
+ .smrt-dock-toggles__button:hover::after {
122
+ opacity: var(--smrt-state-hover);
123
+ }
124
+
125
+ .smrt-dock-toggles__button:active::after {
126
+ opacity: var(--smrt-state-pressed);
111
127
  }
112
128
 
113
129
  .smrt-dock-toggles__button:focus-visible {
114
- outline: 2px solid var(--smrt-color-primary);
115
- outline-offset: 2px;
130
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
131
+ outline-offset: var(--smrt-focus-ring-offset);
116
132
  }
117
133
 
118
134
  .smrt-dock-toggles__button.active {
119
- background: var(--smrt-color-primary-container, var(--smrt-color-surface-container-high));
120
- color: var(--smrt-color-on-primary-container, var(--smrt-color-primary));
135
+ background: var(--smrt-color-primary-container);
136
+ color: var(--smrt-color-on-primary-container);
121
137
  }
122
138
 
123
139
  .smrt-dock-toggles__button[aria-disabled='true'] {
124
- opacity: 0.5;
140
+ opacity: var(--smrt-state-disabled);
125
141
  cursor: default;
126
142
  }
127
143
  }
@@ -98,12 +98,14 @@ onDestroy(() => {
98
98
  align-items: center;
99
99
  justify-content: space-between;
100
100
  gap: var(--smrt-spacing-3);
101
- border: 1px solid var(--smrt-color-outline-variant);
101
+ border: var(--smrt-hairline);
102
102
  border-radius: var(--smrt-radius-medium);
103
- background: var(--smrt-color-surface-container);
103
+ background: var(--smrt-glass-surface-strong);
104
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
105
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
104
106
  color: var(--smrt-color-on-surface);
105
107
  padding: var(--smrt-spacing-3);
106
- box-shadow: var(--smrt-elevation-2);
108
+ box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight);
107
109
  }
108
110
 
109
111
  .smrt-activity-toast div {
@@ -1735,7 +1735,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1735
1735
  block-size: 100svh;
1736
1736
  /* Themeable: an app sets --smrt-admin-shell-background on the shell or an
1737
1737
  ancestor (a tinted page behind cards, for instance). */
1738
- background: var(--smrt-admin-shell-background, var(--smrt-color-surface));
1738
+ background: var(--smrt-admin-shell-background, var(--smrt-surface-ground));
1739
1739
  color: var(--smrt-color-on-surface);
1740
1740
  /* `clip`, not `hidden`: a hidden box is still programmatically scrollable
1741
1741
  (focus / scrollIntoView on a grid-track child shifts the whole shell
@@ -1745,8 +1745,8 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1745
1745
  overflow: clip;
1746
1746
  /* Themed, thin scrollbars for every scroller inside the shell. Override
1747
1747
  --smrt-admin-shell-scrollbar-track / -thumb / -thumb-hover to retint. */
1748
- scrollbar-color: var(--smrt-admin-shell-scrollbar-thumb, color-mix(in srgb, var(--smrt-color-on-surface) 26%, transparent))
1749
- var(--smrt-admin-shell-scrollbar-track, color-mix(in srgb, var(--smrt-color-surface-container-low) 88%, transparent));
1748
+ scrollbar-color: var(--smrt-admin-shell-scrollbar-thumb, var(--smrt-scrollbar-thumb))
1749
+ var(--smrt-admin-shell-scrollbar-track, var(--smrt-scrollbar-track));
1750
1750
  }
1751
1751
 
1752
1752
  .smrt-admin-shell :global(*) {
@@ -1759,11 +1759,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1759
1759
  }
1760
1760
 
1761
1761
  .smrt-admin-shell :global(*)::-webkit-scrollbar-track {
1762
- background: var(--smrt-admin-shell-scrollbar-track, color-mix(in srgb, var(--smrt-color-surface-container-low) 88%, transparent));
1762
+ background: var(--smrt-admin-shell-scrollbar-track, var(--smrt-scrollbar-track));
1763
1763
  }
1764
1764
 
1765
1765
  .smrt-admin-shell :global(*)::-webkit-scrollbar-thumb {
1766
- background-color: var(--smrt-admin-shell-scrollbar-thumb, color-mix(in srgb, var(--smrt-color-on-surface) 26%, transparent));
1766
+ background-color: var(--smrt-admin-shell-scrollbar-thumb, var(--smrt-scrollbar-thumb));
1767
1767
  background-clip: padding-box;
1768
1768
  border: 2px solid transparent;
1769
1769
  border-radius: var(--smrt-radius-full);
@@ -1780,9 +1780,9 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1780
1780
  .smrt-admin-shell__edge {
1781
1781
  min-width: 0;
1782
1782
  min-height: 0;
1783
- background: var(--smrt-color-surface-container-low);
1783
+ background: var(--smrt-surface-panel);
1784
1784
  color: var(--smrt-color-on-surface);
1785
- border-color: var(--smrt-color-outline-variant);
1785
+ border-color: var(--smrt-hairline-color);
1786
1786
  }
1787
1787
 
1788
1788
  .smrt-admin-shell__header {
@@ -1800,8 +1800,12 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1800
1800
  to drop below it. `clip` (unlike `hidden`) allows a visible block axis. */
1801
1801
  overflow-x: clip;
1802
1802
  overflow-y: visible;
1803
- border-block-end: 1px solid var(--smrt-color-outline-variant);
1804
- background: var(--smrt-color-surface-container-low);
1803
+ border-block-end: var(--smrt-hairline);
1804
+ /* Glass chrome: translucent with blur in the Glass preset, the opaque
1805
+ panel surface (blur 0) everywhere else. */
1806
+ background: var(--smrt-glass-surface);
1807
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
1808
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
1805
1809
  color: var(--smrt-color-on-surface);
1806
1810
  z-index: 30;
1807
1811
  }
@@ -1815,7 +1819,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1815
1819
  var(--smrt-admin-shell-left-collapsed) minmax(0, 1fr)
1816
1820
  var(--smrt-admin-shell-right-collapsed)
1817
1821
  );
1818
- border-block-end: 1px solid var(--smrt-color-outline-variant);
1822
+ border-block-end: var(--smrt-hairline);
1819
1823
  z-index: 30;
1820
1824
  }
1821
1825
 
@@ -1823,7 +1827,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1823
1827
  position: relative;
1824
1828
  grid-column: 1;
1825
1829
  grid-row: 3;
1826
- border-inline-end: 1px solid var(--smrt-color-outline-variant);
1830
+ border-inline-end: var(--smrt-hairline);
1827
1831
  z-index: 20;
1828
1832
  }
1829
1833
 
@@ -1831,8 +1835,13 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1831
1835
  position: relative;
1832
1836
  grid-column: 3;
1833
1837
  grid-row: 3;
1834
- border-inline-start: 1px solid var(--smrt-color-outline-variant);
1838
+ border-inline-start: var(--smrt-hairline);
1835
1839
  z-index: 20;
1840
+ /* The dock is the raised glass region of the shell. */
1841
+ background: var(--smrt-glass-surface-strong);
1842
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
1843
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
1844
+ box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight);
1836
1845
  }
1837
1846
 
1838
1847
  .smrt-admin-shell__edge--right[data-state='expanded'] {
@@ -1851,7 +1860,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1851
1860
  var(--smrt-admin-shell-left-collapsed) minmax(0, 1fr)
1852
1861
  var(--smrt-admin-shell-right-collapsed)
1853
1862
  );
1854
- border-block-start: 1px solid var(--smrt-color-outline-variant);
1863
+ border-block-start: var(--smrt-hairline);
1855
1864
  z-index: 30;
1856
1865
  }
1857
1866
 
@@ -1862,7 +1871,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1862
1871
  min-height: 0;
1863
1872
  overflow: auto;
1864
1873
  padding-block-start: var(--smrt-shell-floating-reserve-main);
1865
- background: var(--smrt-color-surface);
1874
+ background: var(--smrt-surface-ground);
1866
1875
  }
1867
1876
 
1868
1877
  .smrt-admin-shell__band {
@@ -1921,21 +1930,59 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1921
1930
  position: relative;
1922
1931
  display: grid;
1923
1932
  place-items: center;
1924
- width: 2.35rem;
1925
- height: 2.35rem;
1933
+ width: var(--smrt-control-height-small);
1934
+ height: var(--smrt-control-height-small);
1926
1935
  border: 1px solid transparent;
1927
- border-radius: var(--smrt-radius-md);
1936
+ border-radius: var(--smrt-control-radius);
1928
1937
  background: transparent;
1929
1938
  color: var(--smrt-color-on-surface-variant);
1930
1939
  cursor: pointer;
1931
1940
  font: inherit;
1932
1941
  }
1933
1942
 
1934
- .smrt-admin-shell__focus-tool:hover,
1943
+ /* One state layer per control: a currentColor veil whose opacity is the
1944
+ theme's hover / pressed / selected token. */
1945
+ .smrt-admin-shell__focus-tool::after,
1946
+ .smrt-admin-shell__edit-indicator::after {
1947
+ content: '';
1948
+ position: absolute;
1949
+ inset: 0;
1950
+ border-radius: inherit;
1951
+ background: currentColor;
1952
+ opacity: 0;
1953
+ pointer-events: none;
1954
+ }
1955
+
1956
+ .smrt-admin-shell__focus-tool:hover::after,
1957
+ .smrt-admin-shell__edit-indicator:hover::after {
1958
+ opacity: var(--smrt-state-hover);
1959
+ }
1960
+
1961
+ .smrt-admin-shell__focus-tool:hover {
1962
+ color: var(--smrt-color-on-surface);
1963
+ }
1964
+
1935
1965
  .smrt-admin-shell__focus-tool.active {
1936
1966
  color: var(--smrt-color-primary);
1937
- border-color: var(--smrt-color-primary);
1938
- background: var(--smrt-color-surface-container-high);
1967
+ }
1968
+
1969
+ .smrt-admin-shell__focus-tool.active::after {
1970
+ opacity: var(--smrt-state-selected);
1971
+ }
1972
+
1973
+ .smrt-admin-shell__focus-tool:active::after,
1974
+ .smrt-admin-shell__edit-indicator:active::after {
1975
+ opacity: var(--smrt-state-pressed);
1976
+ }
1977
+
1978
+ .smrt-admin-shell__focus-tool:focus-visible {
1979
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
1980
+ outline-offset: var(--smrt-focus-ring-offset);
1981
+ }
1982
+
1983
+ .smrt-admin-shell__focus-tool:disabled {
1984
+ opacity: var(--smrt-state-disabled);
1985
+ cursor: default;
1939
1986
  }
1940
1987
 
1941
1988
  /* Edit-mode tab for a closed railless right edge: pinned to the shell's
@@ -1949,12 +1996,14 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1949
1996
  display: inline-flex;
1950
1997
  align-items: center;
1951
1998
  gap: var(--smrt-spacing-1, 0.25rem);
1999
+ position: relative;
1952
2000
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-2, 0.5rem);
1953
- border: 1px solid var(--smrt-color-outline-variant);
2001
+ border: var(--smrt-hairline);
1954
2002
  border-inline-end: 0;
1955
- border-start-start-radius: var(--smrt-radius-md);
1956
- border-end-start-radius: var(--smrt-radius-md);
1957
- background: var(--smrt-color-surface-container-high);
2003
+ border-start-start-radius: var(--smrt-control-radius);
2004
+ border-end-start-radius: var(--smrt-control-radius);
2005
+ background: var(--smrt-surface-raised);
2006
+ box-shadow: var(--smrt-elevation-2), var(--smrt-inset-highlight);
1958
2007
  color: var(--smrt-color-on-surface-variant);
1959
2008
  font: inherit;
1960
2009
  font-size: var(--smrt-typography-label-small-size, 0.75rem);
@@ -1963,7 +2012,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1963
2012
 
1964
2013
  .smrt-admin-shell__edit-indicator:hover {
1965
2014
  color: var(--smrt-color-primary);
1966
- border-color: var(--smrt-color-primary);
2015
+ }
2016
+
2017
+ .smrt-admin-shell__edit-indicator:focus-visible {
2018
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
2019
+ outline-offset: var(--smrt-focus-ring-offset);
1967
2020
  }
1968
2021
 
1969
2022
  .smrt-admin-shell__edit-indicator :global(svg) {
@@ -2005,22 +2058,29 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2005
2058
  display: inline-grid;
2006
2059
  place-items: center;
2007
2060
  box-sizing: border-box;
2008
- inline-size: 2.5rem;
2009
- block-size: 2.5rem;
2061
+ inline-size: var(--smrt-control-height);
2062
+ block-size: var(--smrt-control-height);
2010
2063
  padding: 0;
2011
2064
  border: 0;
2012
- border-radius: var(--smrt-radius-md);
2065
+ border-radius: var(--smrt-control-radius);
2013
2066
  background: transparent;
2014
2067
  color: var(--smrt-color-on-surface-variant);
2015
2068
  cursor: pointer;
2016
2069
  }
2017
2070
  .smrt-admin-shell__chrome-button:hover {
2018
- background: var(--smrt-color-surface-container-high);
2071
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
2019
2072
  color: var(--smrt-color-on-surface);
2020
2073
  }
2074
+ .smrt-admin-shell__chrome-button:active {
2075
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
2076
+ }
2021
2077
  .smrt-admin-shell__chrome-button:focus-visible {
2022
- outline: 0.125rem solid var(--smrt-color-primary);
2023
- outline-offset: 0.125rem;
2078
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
2079
+ outline-offset: var(--smrt-focus-ring-offset);
2080
+ }
2081
+ .smrt-admin-shell__chrome-button:disabled {
2082
+ opacity: var(--smrt-state-disabled);
2083
+ cursor: default;
2024
2084
  }
2025
2085
 
2026
2086
  .smrt-admin-shell__drawer-head {
@@ -2108,25 +2168,25 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2108
2168
  .smrt-admin-shell__slot--leftSidebar-header,
2109
2169
  .smrt-admin-shell__slot--rightSidebar-header {
2110
2170
  padding-block-end: var(--smrt-spacing-3);
2111
- border-block-end: 1px solid var(--smrt-color-outline-variant);
2171
+ border-block-end: var(--smrt-hairline);
2112
2172
  }
2113
2173
 
2114
2174
  .smrt-admin-shell__slot--leftSidebar-footer,
2115
2175
  .smrt-admin-shell__slot--rightSidebar-footer {
2116
2176
  padding-block-start: var(--smrt-spacing-3);
2117
- border-block-start: 1px solid var(--smrt-color-outline-variant);
2177
+ border-block-start: var(--smrt-hairline);
2118
2178
  }
2119
2179
 
2120
2180
  .smrt-admin-shell__slot--rightSidebar-header {
2121
2181
  position: sticky;
2122
2182
  inset-block-start: 0;
2123
- background: var(--smrt-color-surface);
2183
+ background: var(--smrt-surface-raised);
2124
2184
  }
2125
2185
 
2126
2186
  .smrt-admin-shell__slot--rightSidebar-footer {
2127
2187
  position: sticky;
2128
2188
  inset-block-end: 0;
2129
- background: var(--smrt-color-surface);
2189
+ background: var(--smrt-surface-raised);
2130
2190
  }
2131
2191
 
2132
2192
  /* Layout editing: slots as dashed drop zones, hidden regions as strips. */
@@ -2136,14 +2196,15 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2136
2196
  min-inline-size: 4rem;
2137
2197
  min-block-size: 2.25rem;
2138
2198
  padding: var(--smrt-spacing-1);
2139
- border: 1px dashed var(--smrt-color-outline);
2140
- border-radius: var(--smrt-radius-medium, 0.5rem);
2141
- background: color-mix(in srgb, var(--smrt-color-primary) 4%, transparent);
2199
+ border: var(--smrt-hairline);
2200
+ border-style: dashed;
2201
+ border-radius: var(--smrt-control-radius);
2202
+ background: color-mix(in srgb, var(--smrt-color-primary) calc(var(--smrt-state-hover) * 50%), transparent);
2142
2203
  }
2143
2204
  .smrt-admin-shell__slot--editing[data-drop-target] {
2144
2205
  border-style: solid;
2145
2206
  border-color: var(--smrt-color-primary);
2146
- background: color-mix(in srgb, var(--smrt-color-primary) 14%, transparent);
2207
+ background: color-mix(in srgb, var(--smrt-color-primary) calc(var(--smrt-state-dragged) * 100%), transparent);
2147
2208
  }
2148
2209
  .smrt-admin-shell__slot--editing.smrt-admin-shell__slot--header-center,
2149
2210
  .smrt-admin-shell__slot--editing.smrt-admin-shell__slot--footer-center {
@@ -2158,8 +2219,9 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2158
2219
  min-inline-size: 0;
2159
2220
  min-block-size: 0;
2160
2221
  overflow: hidden;
2161
- border: 1px dashed var(--smrt-color-outline);
2162
- background: var(--smrt-color-surface-container-low);
2222
+ border: var(--smrt-hairline);
2223
+ border-style: dashed;
2224
+ background: var(--smrt-surface-sunken);
2163
2225
  color: var(--smrt-color-on-surface-variant);
2164
2226
  font: var(--smrt-typography-label-small-font);
2165
2227
  z-index: 25;
@@ -2174,7 +2236,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2174
2236
  .smrt-admin-shell__tenant-footer {
2175
2237
  min-width: 0;
2176
2238
  padding-block-start: var(--smrt-spacing-3);
2177
- border-block-start: 1px solid var(--smrt-color-outline-variant);
2239
+ border-block-start: var(--smrt-hairline);
2178
2240
  }
2179
2241
 
2180
2242
  .smrt-admin-shell__tenant-rail-stack {
@@ -2197,14 +2259,14 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2197
2259
  grid-row: 3;
2198
2260
  min-width: 0;
2199
2261
  padding-block-start: var(--smrt-spacing-2);
2200
- border-block-start: 1px solid var(--smrt-color-outline-variant);
2262
+ border-block-start: var(--smrt-hairline);
2201
2263
  overflow: visible;
2202
2264
  }
2203
2265
 
2204
2266
  .smrt-admin-shell__edge--right[data-state='expanded']
2205
2267
  .smrt-admin-shell__rail {
2206
2268
  grid-column: 2;
2207
- border-inline-start: 1px solid var(--smrt-color-outline-variant);
2269
+ border-inline-start: var(--smrt-hairline);
2208
2270
  }
2209
2271
 
2210
2272
  .smrt-admin-shell__panel {
@@ -2234,6 +2296,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2234
2296
  inline-size: max(2rem, var(--smrt-control-target-min, 0px));
2235
2297
  block-size: max(2rem, var(--smrt-control-target-min, 0px));
2236
2298
  padding: 0;
2299
+ border-radius: var(--smrt-control-radius);
2237
2300
  color: var(--smrt-color-on-surface-variant);
2238
2301
  }
2239
2302
  .smrt-admin-shell__edge--left[data-state='collapsed'] :global(.smrt-admin-shell__edge-toggle--left) {
@@ -2249,7 +2312,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2249
2312
  .smrt-admin-shell__edge-toggle-kbd {
2250
2313
  padding: 0 var(--smrt-spacing-1);
2251
2314
  border-radius: var(--smrt-radius-small);
2252
- background: var(--smrt-color-surface-container-high);
2315
+ background: var(--smrt-surface-sunken);
2253
2316
  color: var(--smrt-color-on-surface-variant);
2254
2317
  font-size: var(--smrt-typography-body-small-size);
2255
2318
  }
@@ -2262,19 +2325,30 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2262
2325
  color: var(--smrt-color-on-surface-variant);
2263
2326
  }
2264
2327
 
2328
+ :global(.smrt-admin-shell__edge-toggle--left.button.ghost) {
2329
+ border-radius: var(--smrt-control-radius);
2330
+ }
2331
+
2265
2332
  :global(.smrt-admin-shell__edge-toggle--left.button.ghost:hover) {
2266
- background: var(--smrt-color-surface-container-high);
2333
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
2267
2334
  color: var(--smrt-color-on-surface);
2268
2335
  }
2269
2336
 
2337
+ :global(.smrt-admin-shell__edge-toggle--left.button.ghost:active) {
2338
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
2339
+ }
2340
+
2270
2341
  .smrt-admin-shell__drawer {
2271
2342
  position: absolute;
2272
2343
  z-index: 40;
2273
2344
  overflow: auto;
2274
2345
  padding: var(--smrt-spacing-5);
2275
- background: var(--smrt-color-surface-container);
2346
+ border: var(--smrt-hairline);
2347
+ background: var(--smrt-glass-surface-strong);
2348
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2349
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2276
2350
  color: var(--smrt-color-on-surface);
2277
- box-shadow: var(--smrt-elevation-3);
2351
+ box-shadow: var(--smrt-elevation-4), var(--smrt-inset-highlight);
2278
2352
  }
2279
2353
 
2280
2354
  .smrt-admin-shell__drawer--top {
@@ -2310,7 +2384,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2310
2384
  align-items: center;
2311
2385
  min-width: 0;
2312
2386
  padding: 0 var(--smrt-spacing-3);
2313
- background: var(--smrt-color-surface-container-low);
2387
+ background: var(--smrt-surface-panel);
2314
2388
  }
2315
2389
 
2316
2390
  .smrt-admin-shell__corner--top-left,
@@ -2330,17 +2404,20 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2330
2404
  display: grid;
2331
2405
  place-items: center;
2332
2406
  padding: var(--smrt-spacing-5);
2333
- background: var(--smrt-color-scrim);
2407
+ background: var(--smrt-surface-overlay);
2334
2408
  }
2335
2409
 
2336
2410
  .smrt-admin-shell__shortcuts-panel {
2337
2411
  inline-size: min(32rem, 100%);
2338
2412
  max-block-size: min(36rem, 100%);
2339
2413
  overflow: auto;
2414
+ border: var(--smrt-hairline);
2340
2415
  border-radius: var(--smrt-radius-large);
2341
- background: var(--smrt-color-surface-container);
2416
+ background: var(--smrt-glass-surface-strong);
2417
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2418
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2342
2419
  padding: var(--smrt-spacing-5);
2343
- box-shadow: var(--smrt-elevation-4);
2420
+ box-shadow: var(--smrt-elevation-4), var(--smrt-inset-highlight);
2344
2421
  }
2345
2422
 
2346
2423
  .smrt-admin-shell__shortcuts-panel header,
@@ -2421,7 +2498,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2421
2498
  align-self: start;
2422
2499
  z-index: 10;
2423
2500
  min-inline-size: 0;
2424
- background: var(--smrt-color-surface);
2501
+ background: var(--smrt-surface-ground);
2425
2502
  transition: transform var(--smrt-admin-shell-chrome-duration)
2426
2503
  var(--smrt-easing-standard, ease);
2427
2504
  }
@@ -2472,7 +2549,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2472
2549
  margin: 0;
2473
2550
  padding: 0;
2474
2551
  border: 0;
2475
- background: var(--smrt-color-scrim);
2552
+ background: var(--smrt-surface-overlay);
2476
2553
  opacity: 0.36;
2477
2554
  cursor: pointer;
2478
2555
  }
@@ -2483,10 +2560,10 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2483
2560
  .smrt-admin-shell__edge--right[data-presentation='overlay'][data-state='expanded'] {
2484
2561
  grid-column: 1 / -1;
2485
2562
  z-index: 25;
2486
- box-shadow: var(
2487
- --smrt-elevation-3,
2488
- 0 0.5rem 1.5rem color-mix(in srgb, var(--smrt-color-shadow) 24%, transparent)
2489
- );
2563
+ background: var(--smrt-glass-surface-strong);
2564
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2565
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2566
+ box-shadow: var(--smrt-elevation-4), var(--smrt-inset-highlight);
2490
2567
  outline: none;
2491
2568
  }
2492
2569
 
@@ -2511,7 +2588,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2511
2588
  margin: 0;
2512
2589
  padding: 0;
2513
2590
  border: 0;
2514
- background: var(--smrt-color-scrim);
2591
+ background: var(--smrt-surface-overlay);
2515
2592
  opacity: 0.24;
2516
2593
  cursor: pointer;
2517
2594
  animation: smrt-admin-shell-scrim-in var(--smrt-admin-shell-chrome-duration)
@@ -2590,7 +2667,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2590
2667
  inline-size: 2.5rem;
2591
2668
  block-size: 0.25rem;
2592
2669
  border-radius: var(--smrt-radius-full);
2593
- background: var(--smrt-color-outline-variant);
2670
+ background: var(--smrt-hairline-strong-color);
2594
2671
  }
2595
2672
 
2596
2673
  /* Phone page contracts: breadcrumbs give way to the top bar, and so does
@@ -2631,7 +2708,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2631
2708
  position: sticky;
2632
2709
  inset-block-start: var(--smrt-admin-shell-phone-top-size);
2633
2710
  z-index: 6;
2634
- background: var(--smrt-color-surface);
2711
+ background: var(--smrt-surface-ground);
2635
2712
  transition: transform var(--smrt-admin-shell-chrome-duration)
2636
2713
  var(--smrt-easing-standard, ease);
2637
2714
  }
@@ -2654,8 +2731,10 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2654
2731
  margin: 0;
2655
2732
  padding: var(--smrt-spacing-2) var(--smrt-spacing-4)
2656
2733
  calc(var(--smrt-spacing-2) + env(safe-area-inset-bottom));
2657
- border-block-start: 1px solid var(--smrt-color-outline-variant);
2658
- background: var(--smrt-color-surface);
2734
+ border-block-start: var(--smrt-hairline);
2735
+ background: var(--smrt-glass-surface);
2736
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2737
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2659
2738
  }
2660
2739
 
2661
2740
  .smrt-admin-shell[data-viewport='phone'] :global([data-form-action-bar] > *) {
@@ -2718,6 +2797,10 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2718
2797
  var(--smrt-admin-shell-phone-bar-track)
2719
2798
  );
2720
2799
  inline-size: min(22rem, 86vw);
2800
+ background: var(--smrt-glass-surface-strong);
2801
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2802
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2803
+ box-shadow: var(--smrt-elevation-4), var(--smrt-inset-highlight);
2721
2804
  transform: translateX(-100%);
2722
2805
  transition: transform var(--smrt-duration-short2)
2723
2806
  var(--smrt-easing-standard);
@@ -2751,8 +2834,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2751
2834
  border-inline-start: 0;
2752
2835
  border-start-start-radius: var(--smrt-radius-lg);
2753
2836
  border-start-end-radius: var(--smrt-radius-lg);
2754
- background: var(--smrt-color-surface);
2755
- box-shadow: var(--smrt-elevation-3);
2837
+ border-block-start: var(--smrt-hairline);
2838
+ background: var(--smrt-glass-surface-strong);
2839
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2840
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
2841
+ box-shadow: var(--smrt-elevation-4), var(--smrt-inset-highlight);
2756
2842
  transform: translateY(100%);
2757
2843
  visibility: hidden;
2758
2844
  transition:
@@ -104,8 +104,10 @@ function accessibleName(item: PhoneBottomBarEntry): string {
104
104
  box-sizing: content-box;
105
105
  block-size: 3.5rem;
106
106
  padding: 0 var(--smrt-spacing-2) env(safe-area-inset-bottom);
107
- border-block-start: 1px solid var(--smrt-color-outline-variant);
108
- background: var(--smrt-color-surface);
107
+ border-block-start: var(--smrt-hairline);
108
+ background: var(--smrt-glass-surface);
109
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
110
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
109
111
  }
110
112
 
111
113
  .smrt-phone-bottom-bar__item {
@@ -117,7 +119,7 @@ function accessibleName(item: PhoneBottomBarEntry): string {
117
119
  min-block-size: var(--smrt-touch-target-min);
118
120
  padding: var(--smrt-spacing-1) 0;
119
121
  border: 0;
120
- border-radius: var(--smrt-radius-lg);
122
+ border-radius: var(--smrt-control-radius);
121
123
  background: transparent;
122
124
  color: var(--smrt-color-on-surface-variant);
123
125
  font: inherit;
@@ -126,6 +128,35 @@ function accessibleName(item: PhoneBottomBarEntry): string {
126
128
  -webkit-tap-highlight-color: transparent;
127
129
  }
128
130
 
131
+ .smrt-phone-bottom-bar__item {
132
+ position: relative;
133
+ }
134
+
135
+ /* State layer over the whole tab; the selected indicator pill keeps its
136
+ container fill. */
137
+ .smrt-phone-bottom-bar__item::after {
138
+ content: '';
139
+ position: absolute;
140
+ inset: 0;
141
+ border-radius: inherit;
142
+ background: currentColor;
143
+ opacity: 0;
144
+ pointer-events: none;
145
+ }
146
+
147
+ .smrt-phone-bottom-bar__item:hover::after {
148
+ opacity: var(--smrt-state-hover);
149
+ }
150
+
151
+ .smrt-phone-bottom-bar__item:active::after {
152
+ opacity: var(--smrt-state-pressed);
153
+ }
154
+
155
+ .smrt-phone-bottom-bar__item:disabled,
156
+ .smrt-phone-bottom-bar__item[aria-disabled='true'] {
157
+ opacity: var(--smrt-state-disabled);
158
+ }
159
+
129
160
  .smrt-phone-bottom-bar__item.active {
130
161
  color: var(--smrt-color-primary);
131
162
  }
@@ -136,8 +167,8 @@ function accessibleName(item: PhoneBottomBarEntry): string {
136
167
  }
137
168
 
138
169
  .smrt-phone-bottom-bar__item:focus-visible {
139
- outline: 2px solid var(--smrt-color-primary);
140
- outline-offset: -2px;
170
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
171
+ outline-offset: calc(-1 * var(--smrt-focus-ring-width));
141
172
  }
142
173
 
143
174
  .smrt-phone-bottom-bar__icon {
@@ -175,7 +206,7 @@ function accessibleName(item: PhoneBottomBarEntry): string {
175
206
  inset-inline-end: 1rem;
176
207
  inline-size: 0.6rem;
177
208
  block-size: 0.6rem;
178
- border: 2px solid var(--smrt-color-surface);
209
+ border: var(--smrt-focus-ring-width) solid var(--smrt-surface-panel);
179
210
  border-radius: var(--smrt-radius-full);
180
211
  background: var(--smrt-color-primary);
181
212
  }
@@ -61,8 +61,10 @@ const { t } = useI18n();
61
61
  box-sizing: border-box;
62
62
  block-size: var(--smrt-admin-shell-phone-top-size, 3.5rem);
63
63
  padding: 0 var(--smrt-spacing-2);
64
- border-block-end: 1px solid var(--smrt-color-outline-variant);
65
- background: var(--smrt-color-surface);
64
+ border-block-end: var(--smrt-hairline);
65
+ background: var(--smrt-glass-surface);
66
+ -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
67
+ backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
66
68
  color: var(--smrt-color-on-surface);
67
69
  }
68
70
 
@@ -78,12 +80,16 @@ const { t } = useI18n();
78
80
 
79
81
  .smrt-phone-top-bar__back:hover,
80
82
  .smrt-phone-top-bar__back:focus-visible {
81
- background: var(--smrt-color-surface-container-high);
83
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
84
+ }
85
+
86
+ .smrt-phone-top-bar__back:active {
87
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
82
88
  }
83
89
 
84
90
  .smrt-phone-top-bar__back:focus-visible {
85
- outline: 2px solid var(--smrt-color-primary);
86
- outline-offset: -2px;
91
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
92
+ outline-offset: calc(-1 * var(--smrt-focus-ring-width));
87
93
  }
88
94
 
89
95
  .smrt-phone-top-bar__title {
@@ -63,18 +63,19 @@ let {
63
63
  display: inline-grid;
64
64
  place-items: center;
65
65
  box-sizing: border-box;
66
- inline-size: max(2rem, var(--smrt-control-target-min, 0px));
67
- block-size: max(2rem, var(--smrt-control-target-min, 0px));
66
+ inline-size: max(var(--smrt-control-height-small), var(--smrt-control-target-min, 0px));
67
+ block-size: max(var(--smrt-control-height-small), var(--smrt-control-target-min, 0px));
68
68
  padding: 0;
69
69
  border: 0;
70
- border-radius: var(--smrt-radius-medium, 0.5rem);
70
+ border-radius: var(--smrt-control-radius);
71
71
  background: transparent;
72
72
  color: var(--smrt-color-on-surface-variant);
73
73
  cursor: pointer;
74
74
  }
75
- .smrt-shell-icon-button:hover { background: var(--smrt-color-surface-container-high); color: var(--smrt-color-on-surface); }
75
+ .smrt-shell-icon-button:hover { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); color: var(--smrt-color-on-surface); }
76
+ .smrt-shell-icon-button:active { background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent); }
76
77
  .smrt-shell-icon-button[aria-pressed='true'] { color: var(--smrt-color-on-surface); }
77
- .smrt-shell-icon-button:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
78
- .smrt-shell-icon-button:disabled { opacity: 0.5; cursor: not-allowed; }
78
+ .smrt-shell-icon-button:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
79
+ .smrt-shell-icon-button:disabled { opacity: var(--smrt-state-disabled); cursor: not-allowed; }
79
80
  }
80
81
  </style>
@@ -253,7 +253,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
253
253
  .smrt-shell-layout-editor h2, .smrt-shell-layout-editor h3, .smrt-shell-layout-editor p { margin: 0; }
254
254
  .smrt-shell-layout-editor p, .smrt-shell-layout-editor__muted { color: var(--smrt-color-on-surface-variant); }
255
255
  .smrt-shell-layout-editor h3 { font: var(--smrt-typography-title-small-font); margin-block-end: var(--smrt-spacing-2); }
256
- .smrt-shell-layout-editor__panels { display: grid; gap: var(--smrt-spacing-2); margin: 0; padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-md); }
256
+ .smrt-shell-layout-editor__panels { display: grid; gap: var(--smrt-spacing-2); margin: 0; padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-md); }
257
257
  .smrt-shell-layout-editor__panels legend { padding-inline: var(--smrt-spacing-1); font: var(--smrt-typography-title-small-font); }
258
258
  .smrt-shell-layout-editor__row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-4); }
259
259
  .smrt-shell-layout-editor__body { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--smrt-spacing-4); align-items: start; }
@@ -261,7 +261,7 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
261
261
  .smrt-shell-layout-editor__nav-head h3 { margin-block-end: 0; }
262
262
  :global(.smrt-shell-layout-editor__name) { flex: 1 1 8rem; min-inline-size: 0; }
263
263
  .smrt-shell-layout-editor__label { flex: 1 1 auto; min-inline-size: 0; }
264
- .smrt-shell-layout-editor__preview-frame { padding: var(--smrt-spacing-3); border: 1px dashed var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container-low, var(--smrt-color-surface)); }
264
+ .smrt-shell-layout-editor__preview-frame { padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-style: dashed; border-radius: var(--smrt-radius-md); background: var(--smrt-surface-sunken); }
265
265
  /* Label on its own line (never broken mid-word); the select and Reset share the next line. */
266
266
  @media (max-width: 48rem) {
267
267
  .smrt-shell-layout-editor header { flex-direction: column; }
@@ -496,8 +496,8 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
496
496
  .smrt-nav-editor :global(.smrt-sortable) { gap: var(--smrt-spacing-1); }
497
497
  .smrt-nav-editor :global(.smrt-sortable__containers) { gap: var(--smrt-spacing-1); }
498
498
  .smrt-nav-editor :global(.smrt-sortable__container) { padding: 0; border: 0; background: transparent; gap: var(--smrt-spacing-1); }
499
- .smrt-nav-editor :global(.smrt-sortable__item) { padding: 0; border: 0; border-radius: var(--smrt-radius-medium); background: transparent; }
500
- .smrt-nav-editor :global(.smrt-sortable__item:hover) { background: var(--smrt-color-surface-container-high); }
499
+ .smrt-nav-editor :global(.smrt-sortable__item) { padding: 0; border: 0; border-radius: var(--smrt-control-radius); background: transparent; }
500
+ .smrt-nav-editor :global(.smrt-sortable__item:hover) { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
501
501
  .smrt-nav-editor :global(.smrt-sortable__items) { padding-inline-start: var(--smrt-spacing-3); min-block-size: 0; }
502
502
  .smrt-nav-editor :global(.smrt-sortable__header) { min-block-size: 0; }
503
503
  .smrt-nav-editor :global(.smrt-sortable__empty) { padding-block: 0; }
@@ -505,13 +505,13 @@ function oncontainermove(move: SortableContainerMove<NavContainer>): void {
505
505
 
506
506
  .smrt-nav-editor__top { color: var(--smrt-color-on-surface-variant); font: var(--smrt-typography-label-small-font); text-transform: uppercase; letter-spacing: 0.04em; }
507
507
  .smrt-nav-editor__head { position: relative; flex: 1 1 auto; display: flex; align-items: center; gap: var(--smrt-spacing-1); min-inline-size: 0; }
508
- .smrt-nav-editor__title { flex: 1 1 auto; min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 0; border-radius: var(--smrt-radius-medium); background: transparent; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size); font-weight: var(--smrt-typography-weight-semibold); text-align: start; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
509
- .smrt-nav-editor__title:hover, .smrt-nav-editor__head[data-toolbar-open] .smrt-nav-editor__title { background: var(--smrt-color-surface-container-high); }
510
- .smrt-nav-editor__title:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
508
+ .smrt-nav-editor__title { flex: 1 1 auto; min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 0; border-radius: var(--smrt-control-radius); background: transparent; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size); font-weight: var(--smrt-typography-weight-semibold); text-align: start; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
509
+ .smrt-nav-editor__title:hover, .smrt-nav-editor__head[data-toolbar-open] .smrt-nav-editor__title { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
510
+ .smrt-nav-editor__title:focus-visible { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
511
511
  .smrt-nav-editor__title--off { font-style: italic; font-weight: var(--smrt-typography-weight-normal, normal); }
512
512
  .smrt-nav-editor__title--hidden { opacity: 0.55; }
513
513
  .smrt-nav-editor__overlay { display: inline-flex; align-items: center; flex: 0 0 auto; }
514
- .smrt-nav-editor__toolbar { position: absolute; inset-block-start: 100%; inset-inline: 0; z-index: 40; display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-1); padding: var(--smrt-spacing-2); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface-container-high); box-shadow: var(--smrt-elevation-2, 0 4px 12px rgb(0 0 0 / 0.2)); }
514
+ .smrt-nav-editor__toolbar { position: absolute; inset-block-start: 100%; inset-inline: 0; z-index: 40; display: flex; flex-wrap: wrap; align-items: center; gap: var(--smrt-spacing-1); padding: var(--smrt-spacing-2); border: var(--smrt-hairline); border-radius: var(--smrt-radius-medium); background: var(--smrt-glass-surface-strong); -webkit-backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation)); backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation)); box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight); }
515
515
  :global(.smrt-nav-editor__name) { flex: 1 1 100%; min-inline-size: 0; }
516
516
  .smrt-nav-editor__row { flex: 1 1 auto; min-inline-size: 0; display: flex; align-items: center; gap: var(--smrt-spacing-2); box-sizing: border-box; min-block-size: var(--smrt-control-target-min); padding: var(--smrt-spacing-2) var(--smrt-spacing-1); color: var(--smrt-color-on-surface); }
517
517
  @media (max-width: 48rem) {
@@ -72,20 +72,20 @@ const name = $derived(label ?? t(M['ui.shell_nav_toggle.navigation']));
72
72
  inline-size: 2.75rem;
73
73
  block-size: 2.75rem;
74
74
  border: 0;
75
- border-radius: var(--smrt-radius-md);
75
+ border-radius: var(--smrt-control-radius);
76
76
  background: transparent;
77
77
  color: var(--smrt-color-on-surface-variant);
78
78
  cursor: pointer;
79
79
  }
80
80
 
81
81
  .smrt-shell-nav-toggle:hover {
82
- background: var(--smrt-color-surface-container-high);
82
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
83
83
  color: var(--smrt-color-on-surface);
84
84
  }
85
85
 
86
86
  .smrt-shell-nav-toggle:focus-visible {
87
- outline: 2px solid var(--smrt-color-primary);
88
- outline-offset: 2px;
87
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
88
+ outline-offset: var(--smrt-focus-ring-offset);
89
89
  }
90
90
  }
91
91
  </style>
@@ -249,13 +249,14 @@ function onmove(move: SortableItemMove<SortableItem>): void {
249
249
  @layer smrt.theme {
250
250
  .smrt-section-menu { min-inline-size: 0; }
251
251
  .smrt-section-menu__list { display: grid; gap: var(--smrt-spacing-1); margin: 0; padding: 0; list-style: none; }
252
- .smrt-section-menu__item { position: relative; display: flex; align-items: center; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); }
253
- .smrt-section-menu__item:hover { background: var(--smrt-color-surface-container-high); }
252
+ .smrt-section-menu__item { position: relative; display: flex; align-items: center; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-2) var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-control-radius); background: var(--smrt-surface-panel); color: var(--smrt-color-on-surface); }
253
+ .smrt-section-menu__item:hover { background: color-mix(in srgb, var(--smrt-surface-panel), currentColor calc(var(--smrt-state-hover) * 100%)); }
254
+ .smrt-section-menu__item:active { background: color-mix(in srgb, var(--smrt-surface-panel), currentColor calc(var(--smrt-state-pressed) * 100%)); }
254
255
  .smrt-section-menu__link { flex: 1 1 auto; display: flex; align-items: center; gap: var(--smrt-spacing-3); min-inline-size: 0; min-block-size: var(--smrt-control-target-min, 2rem); color: inherit; text-decoration: none; }
255
256
  /* The whole row follows the link; actions sit above the stretched target. */
256
257
  .smrt-section-menu__link::after { content: ''; position: absolute; inset: 0; border-radius: inherit; }
257
258
  .smrt-section-menu__link:focus-visible { outline: none; }
258
- .smrt-section-menu__link:focus-visible::after { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
259
+ .smrt-section-menu__link:focus-visible::after { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
259
260
  .smrt-section-menu__label { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--smrt-typography-weight-medium, 500); }
260
261
  .smrt-section-menu__meta { flex: 0 0 auto; color: var(--smrt-color-on-surface-variant); font-size: var(--smrt-typography-label-large-size); }
261
262
  .smrt-section-menu__actions { position: relative; z-index: 1; flex: 0 0 auto; display: inline-flex; align-items: center; gap: var(--smrt-spacing-1); }
@@ -265,12 +266,13 @@ function onmove(move: SortableItemMove<SortableItem>): void {
265
266
  .smrt-section-menu__card-icon :global(.smrt-shell-section-icon) { inline-size: 28px; block-size: 28px; }
266
267
  /* Cards: a responsive grid; the whole card is one stretched link. */
267
268
  .smrt-section-menu__cards, .smrt-section-menu--cards :global(.smrt-sortable__items) { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(16rem, 100%), 1fr)); gap: var(--smrt-spacing-3); margin: 0; padding: 0; list-style: none; }
268
- .smrt-section-menu__card { position: relative; display: flex; flex-direction: column; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-4); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); transition: background-color 120ms, border-color 120ms, transform 120ms; }
269
- .smrt-section-menu__card:hover { background: var(--smrt-color-surface-container-high); border-color: var(--smrt-color-outline); transform: translateY(-2px); }
269
+ .smrt-section-menu__card { position: relative; display: flex; flex-direction: column; gap: var(--smrt-spacing-3); min-inline-size: 0; padding: var(--smrt-spacing-4); border: var(--smrt-hairline); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-surface-panel); color: var(--smrt-color-on-surface); transition: background-color var(--smrt-duration-short2), border-color var(--smrt-duration-short2), transform var(--smrt-duration-short2); }
270
+ .smrt-section-menu__card:hover { background: color-mix(in srgb, var(--smrt-surface-panel), currentColor calc(var(--smrt-state-hover) * 100%)); border-color: var(--smrt-hairline-strong-color); }
271
+ .smrt-section-menu__card:active { background: color-mix(in srgb, var(--smrt-surface-panel), currentColor calc(var(--smrt-state-pressed) * 100%)); }
270
272
  .smrt-section-menu__card-link { flex: 1 1 auto; display: flex; flex-direction: column; gap: var(--smrt-spacing-2); color: inherit; text-decoration: none; }
271
273
  .smrt-section-menu__card-link::after { content: ''; position: absolute; inset: 0; border-radius: inherit; }
272
274
  .smrt-section-menu__card-link:focus-visible { outline: none; }
273
- .smrt-section-menu__card-link:focus-visible::after { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
275
+ .smrt-section-menu__card-link:focus-visible::after { outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color); outline-offset: var(--smrt-focus-ring-offset); }
274
276
  .smrt-section-menu__card-heading { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-inline-size: 0; }
275
277
  .smrt-section-menu__card-icon { display: inline-grid; place-items: center; flex: 0 0 28px; inline-size: 28px; block-size: 28px; color: var(--smrt-color-primary); }
276
278
  .smrt-section-menu__card-title { font-size: var(--smrt-typography-title-medium-size, 1rem); font-weight: var(--smrt-typography-weight-medium, 500); overflow-wrap: anywhere; }
@@ -285,7 +287,7 @@ function onmove(move: SortableItemMove<SortableItem>): void {
285
287
  .smrt-section-menu :global(.smrt-sortable__container) { padding: 0; border: 0; background: transparent; gap: var(--smrt-spacing-1); }
286
288
  .smrt-section-menu :global(.smrt-sortable__header) { display: none; }
287
289
  .smrt-section-menu :global(.smrt-sortable__items) { gap: var(--smrt-spacing-1); }
288
- .smrt-section-menu :global(.smrt-sortable__item) { border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-medium); background: var(--smrt-color-surface); }
290
+ .smrt-section-menu :global(.smrt-sortable__item) { border: var(--smrt-hairline); border-radius: var(--smrt-control-radius); background: var(--smrt-surface-panel); }
289
291
  .smrt-section-menu :global(.smrt-sortable__handle) { inline-size: 1.5rem; block-size: 2rem; }
290
292
  .smrt-section-menu__row { flex: 1 1 auto; min-inline-size: 0; display: flex; align-items: center; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-2) var(--smrt-spacing-1); }
291
293
  .smrt-section-menu__row--muted { opacity: 0.55; }
@@ -315,8 +315,8 @@ function fallbackIcon(label: string): string {
315
315
  color: var(--smrt-color-on-surface-variant);
316
316
  }
317
317
  .smrt-tenant-nav a.smrt-tenant-nav__action:focus-visible {
318
- outline: 2px solid var(--smrt-color-primary);
319
- outline-offset: 2px;
318
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
319
+ outline-offset: var(--smrt-focus-ring-offset);
320
320
  }
321
321
 
322
322
  .smrt-tenant-nav__heading {
@@ -326,12 +326,12 @@ function fallbackIcon(label: string): string {
326
326
  color: var(--smrt-color-on-surface-variant);
327
327
  font-size: var(--smrt-typography-label-large-size);
328
328
  font-weight: var(--smrt-typography-weight-semibold);
329
- border-radius: var(--smrt-radius-medium);
329
+ border-radius: var(--smrt-control-radius);
330
330
  cursor: pointer;
331
331
  }
332
332
  .smrt-tenant-nav__heading:focus-visible {
333
- outline: 2px solid var(--smrt-color-primary);
334
- outline-offset: 2px;
333
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
334
+ outline-offset: var(--smrt-focus-ring-offset);
335
335
  }
336
336
  .smrt-tenant-nav__group-items { margin-block-start: var(--smrt-spacing-1); }
337
337
  .smrt-tenant-nav__subnav {
@@ -367,7 +367,7 @@ function fallbackIcon(label: string): string {
367
367
  gap: var(--smrt-spacing-2);
368
368
  min-inline-size: 0;
369
369
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
370
- border-radius: var(--smrt-radius-medium);
370
+ border-radius: var(--smrt-control-radius);
371
371
  color: var(--smrt-color-on-surface);
372
372
  text-decoration: none;
373
373
  }
@@ -385,8 +385,32 @@ function fallbackIcon(label: string): string {
385
385
  padding: 0;
386
386
  }
387
387
 
388
- .smrt-tenant-nav a:hover {
389
- background: var(--smrt-color-surface-container-high);
388
+ /* One state layer for every row: a currentColor veil driven by the
389
+ theme's hover / pressed tokens. The selected container fill and the
390
+ start indicator below sit under it, so hover still reads on a selected
391
+ row. */
392
+ .smrt-tenant-nav a::after,
393
+ .smrt-tenant-nav__heading::after {
394
+ content: '';
395
+ position: absolute;
396
+ inset: 0;
397
+ border-radius: inherit;
398
+ background: currentColor;
399
+ opacity: 0;
400
+ pointer-events: none;
401
+ }
402
+ .smrt-tenant-nav__heading { position: relative; }
403
+ .smrt-tenant-nav a:hover::after,
404
+ .smrt-tenant-nav__heading:hover::after {
405
+ opacity: var(--smrt-state-hover);
406
+ }
407
+ .smrt-tenant-nav a:active::after,
408
+ .smrt-tenant-nav__heading:active::after {
409
+ opacity: var(--smrt-state-pressed);
410
+ }
411
+ .smrt-tenant-nav a[aria-disabled='true'] {
412
+ opacity: var(--smrt-state-disabled);
413
+ pointer-events: none;
390
414
  }
391
415
  /* Selected: container fill plus a start indicator bar, not just weight. */
392
416
  .smrt-tenant-nav a[aria-current='page'],
@@ -453,7 +477,7 @@ function fallbackIcon(label: string): string {
453
477
  position: absolute;
454
478
  inset-block-start: 0.125rem;
455
479
  inset-inline-end: 0.125rem;
456
- box-shadow: 0 0 0 2px var(--smrt-color-surface);
480
+ box-shadow: 0 0 0 var(--smrt-focus-ring-width) var(--smrt-surface-panel);
457
481
  }
458
482
 
459
483
  .smrt-tenant-nav__sr-only {
@@ -317,23 +317,40 @@ $effect(() => {
317
317
  min-width: 0;
318
318
  min-height: max(2.75rem, var(--smrt-control-target-min, 0px));
319
319
  padding: var(--smrt-spacing-2);
320
- border: 1px solid var(--smrt-color-outline);
321
- border-radius: var(--smrt-radius-large);
322
- background: var(--smrt-color-surface);
320
+ position: relative;
321
+ border: var(--smrt-hairline);
322
+ border-radius: var(--smrt-control-radius);
323
+ background: var(--smrt-surface-control);
323
324
  color: var(--smrt-color-on-surface);
324
325
  font: inherit;
325
326
  text-align: start;
326
327
  cursor: pointer;
327
328
  }
328
- .smrt-workspace-account-menu__trigger:hover:not(:disabled),
329
- .smrt-workspace-account-menu__trigger[aria-expanded='true'] {
330
- background: var(--smrt-color-surface-container-high);
329
+ /* State layer: a currentColor veil over the trigger. */
330
+ .smrt-workspace-account-menu__trigger::after {
331
+ content: '';
332
+ position: absolute;
333
+ inset: 0;
334
+ border-radius: inherit;
335
+ background: currentColor;
336
+ opacity: 0;
337
+ pointer-events: none;
338
+ }
339
+ .smrt-workspace-account-menu__trigger:hover:not(:disabled)::after {
340
+ opacity: var(--smrt-state-hover);
341
+ }
342
+ .smrt-workspace-account-menu__trigger[aria-expanded='true']::after {
343
+ opacity: var(--smrt-state-selected);
344
+ }
345
+ .smrt-workspace-account-menu__trigger:active:not(:disabled)::after {
346
+ opacity: var(--smrt-state-pressed);
331
347
  }
332
348
  .smrt-workspace-account-menu__trigger:focus-visible {
333
- outline: var(--smrt-spacing-0_5) solid var(--smrt-color-primary);
334
- outline-offset: var(--smrt-spacing-0_5);
349
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
350
+ outline-offset: var(--smrt-focus-ring-offset);
335
351
  }
336
352
  .smrt-workspace-account-menu__trigger:disabled {
353
+ opacity: var(--smrt-state-disabled);
337
354
  cursor: default;
338
355
  }
339
356
 
@@ -350,11 +367,6 @@ $effect(() => {
350
367
  border-radius: var(--smrt-radius-full);
351
368
  background: transparent;
352
369
  }
353
- .smrt-workspace-account-menu[data-compact] .smrt-workspace-account-menu__trigger:hover:not(:disabled),
354
- .smrt-workspace-account-menu[data-compact] .smrt-workspace-account-menu__trigger[aria-expanded='true'] {
355
- background: var(--smrt-color-surface-container-high);
356
- }
357
-
358
370
  .smrt-workspace-account-menu[data-compact] .smrt-workspace-account-menu__identity,
359
371
  .smrt-workspace-account-menu[data-compact] .smrt-workspace-account-menu__indicator {
360
372
  display: none;
@@ -369,10 +381,10 @@ $effect(() => {
369
381
  overflow-y: auto;
370
382
  margin: var(--smrt-spacing-1) 0;
371
383
  padding: var(--smrt-spacing-1);
372
- border: 1px solid var(--smrt-color-outline-variant);
384
+ border: var(--smrt-hairline);
373
385
  border-radius: var(--smrt-radius-medium);
374
- background: var(--smrt-color-surface-container);
375
- box-shadow: var(--smrt-elevation-2);
386
+ background: var(--smrt-surface-raised);
387
+ box-shadow: var(--smrt-elevation-3), var(--smrt-inset-highlight);
376
388
  }
377
389
  .smrt-workspace-account-menu__popover--bottom-start { inset-block-start: 100%; inset-inline-start: 0; }
378
390
  .smrt-workspace-account-menu__popover--bottom-end { inset-block-start: 100%; inset-inline-end: 0; }
@@ -388,7 +400,7 @@ $effect(() => {
388
400
  display: grid;
389
401
  gap: var(--smrt-spacing-1);
390
402
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
391
- border-block-end: 1px solid var(--smrt-color-outline-variant);
403
+ border-block-end: var(--smrt-hairline);
392
404
  margin-block-end: var(--smrt-spacing-1);
393
405
  }
394
406
  .smrt-workspace-account-menu__name {
@@ -416,7 +428,7 @@ $effect(() => {
416
428
  min-block-size: max(2.75rem, var(--smrt-control-target-min, 0px));
417
429
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
418
430
  border: none;
419
- border-radius: var(--smrt-radius-small);
431
+ border-radius: var(--smrt-control-radius-small);
420
432
  background: none;
421
433
  color: var(--smrt-color-on-surface);
422
434
  font: inherit;
@@ -426,14 +438,17 @@ $effect(() => {
426
438
  cursor: pointer;
427
439
  }
428
440
  .smrt-workspace-account-menu__item:hover:not(:disabled) {
429
- background: var(--smrt-color-surface-container-high);
441
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
442
+ }
443
+ .smrt-workspace-account-menu__item:active:not(:disabled) {
444
+ background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
430
445
  }
431
446
  .smrt-workspace-account-menu__item:focus-visible {
432
- outline: var(--smrt-spacing-0_5) solid var(--smrt-color-primary);
433
- outline-offset: calc(-1 * var(--smrt-spacing-0_5));
447
+ outline: var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);
448
+ outline-offset: calc(-1 * var(--smrt-focus-ring-width));
434
449
  }
435
450
  .smrt-workspace-account-menu__item:disabled {
436
- color: var(--smrt-color-on-surface-variant);
451
+ opacity: var(--smrt-state-disabled);
437
452
  cursor: default;
438
453
  }
439
454
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.55.17",
3
+ "version": "0.55.18",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Svelte 5 components for SMRT user management - auth, users, tenants, roles, permissions, groups",
6
6
  "type": "module",
@@ -205,11 +205,11 @@
205
205
  },
206
206
  "dependencies": {
207
207
  "@happyvertical/logger": "^0.103.4",
208
- "@happyvertical/smrt-languages": "0.55.17",
209
- "@happyvertical/smrt-mcp-apps": "0.55.17",
210
- "@happyvertical/smrt-types": "0.55.17",
211
- "@happyvertical/smrt-ui": "0.55.17",
212
- "@happyvertical/smrt-web": "0.55.17",
208
+ "@happyvertical/smrt-languages": "0.55.18",
209
+ "@happyvertical/smrt-mcp-apps": "0.55.18",
210
+ "@happyvertical/smrt-types": "0.55.18",
211
+ "@happyvertical/smrt-ui": "0.55.18",
212
+ "@happyvertical/smrt-web": "0.55.18",
213
213
  "@tanstack/db": "^0.6.14",
214
214
  "@tanstack/svelte-db": "^0.1.91",
215
215
  "esm-env": "^1.2.2"
@@ -244,14 +244,14 @@
244
244
  }
245
245
  },
246
246
  "devDependencies": {
247
- "@happyvertical/smrt-agents": "0.55.17",
248
- "@happyvertical/smrt-chat": "0.55.17",
249
- "@happyvertical/smrt-content": "0.55.17",
250
- "@happyvertical/smrt-core": "0.55.17",
251
- "@happyvertical/smrt-reports": "0.55.17",
252
- "@happyvertical/smrt-scanner": "0.55.17",
253
- "@happyvertical/smrt-tenancy": "0.55.17",
254
- "@happyvertical/smrt-users": "0.55.17",
247
+ "@happyvertical/smrt-agents": "0.55.18",
248
+ "@happyvertical/smrt-chat": "0.55.18",
249
+ "@happyvertical/smrt-content": "0.55.18",
250
+ "@happyvertical/smrt-core": "0.55.18",
251
+ "@happyvertical/smrt-reports": "0.55.18",
252
+ "@happyvertical/smrt-scanner": "0.55.18",
253
+ "@happyvertical/smrt-tenancy": "0.55.18",
254
+ "@happyvertical/smrt-users": "0.55.18",
255
255
  "@happyvertical/speech": "^0.103.4",
256
256
  "@sveltejs/package": "^2.5.8",
257
257
  "@sveltejs/vite-plugin-svelte": "^7.3.0",