@happyvertical/smrt-svelte 0.55.20 → 0.55.22

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.
Files changed (47) hide show
  1. package/agents/cookbook-shell.md +6 -0
  2. package/agents/workspace.md +4 -0
  3. package/dist/browser-ai/svelte/components/STTTest.svelte +2 -2
  4. package/dist/components/app/AppShell.svelte +24 -1
  5. package/dist/components/app/AppShell.svelte.d.ts +7 -1
  6. package/dist/components/app/AppShell.svelte.d.ts.map +1 -1
  7. package/dist/components/app/DockToggles.svelte +5 -0
  8. package/dist/components/audit/RecordHistory.svelte +1 -1
  9. package/dist/components/board/Board.svelte +3 -3
  10. package/dist/components/command-palette/CommandPaletteDialog.svelte +1 -1
  11. package/dist/components/command-palette/CommandPaletteTrigger.svelte +1 -1
  12. package/dist/components/cookbook/CookbookApp.svelte +3 -0
  13. package/dist/components/cookbook/theme.d.ts.map +1 -1
  14. package/dist/components/cookbook/theme.js +17 -0
  15. package/dist/components/cookbook/types.d.ts +7 -1
  16. package/dist/components/cookbook/types.d.ts.map +1 -1
  17. package/dist/components/forms/AddressInput.svelte +2 -2
  18. package/dist/components/forms/DateRangeInput.svelte +1 -1
  19. package/dist/components/forms/DateTimeInput.svelte +1 -1
  20. package/dist/components/forms/FileUpload.svelte +2 -2
  21. package/dist/components/forms/MeasurementInput.svelte +2 -2
  22. package/dist/components/forms/MoneyInput.svelte +1 -1
  23. package/dist/components/forms/NumberInput.svelte +1 -1
  24. package/dist/components/forms/PhoneInput.svelte +1 -1
  25. package/dist/components/forms/SearchInput.svelte +1 -1
  26. package/dist/components/forms/SelectInput.svelte +1 -1
  27. package/dist/components/forms/TextInput.svelte +1 -1
  28. package/dist/components/forms/TextareaInput.svelte +1 -1
  29. package/dist/components/import-export/ImportExport.svelte +1 -1
  30. package/dist/components/notifications/NotificationBell.svelte +2 -2
  31. package/dist/components/overview/OverviewGrid.svelte +2 -2
  32. package/dist/components/overview/widgets/ChartWidget.svelte +18 -0
  33. package/dist/components/overview/widgets/RecordListWidget.svelte +1 -1
  34. package/dist/components/overview/widgets/ShortcutsWidget.svelte +2 -2
  35. package/dist/components/settings/SettingsCatalog.svelte +3 -3
  36. package/dist/components/sortable/Sortable.svelte +2 -2
  37. package/dist/components/workspace/WorkspaceShell.svelte +9 -9
  38. package/dist/components/workspace/admin-shell/ActivityItem.svelte +1 -1
  39. package/dist/components/workspace/admin-shell/AdminShell.svelte +9 -4
  40. package/dist/components/workspace/admin-shell/PhoneBottomBar.svelte +9 -0
  41. package/dist/components/workspace/admin-shell/ShellIconButton.svelte +5 -0
  42. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte +1 -1
  43. package/dist/components/workspace/admin-shell/SystemScopePanel.svelte +1 -1
  44. package/dist/components/workspace/admin-shell/TenantNav.svelte +8 -0
  45. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +5 -0
  46. package/dist/components/workspace/tools-dock/ToolsDock.svelte +5 -5
  47. package/package.json +14 -14
@@ -69,6 +69,12 @@ sample data source are not part of it.
69
69
  `validateCookbook` is where it is rejected). A brand colour becomes the preset
70
70
  id `cookbook-brand-<hex>[-<font>]`; the colour/font pair is encoded in the id
71
71
  because `ThemeProvider` looks a registered theme up once per id.
72
+ `borderRadius`, `density` and `contrast` pass through (also leniently: an
73
+ unknown value is dropped) to `AppShell`'s props of the same names, which hand
74
+ them to `ThemeProvider`. As with `preset` and `colorScheme`, a user's persisted
75
+ `ThemeProvider` preference wins after mount. The brand colour is
76
+ `createThemeFromColor` and replaces the preset; it is not `ThemeProvider`'s
77
+ `primaryColor`, which tints the current preset and which the cookbook never sets.
72
78
  A top-level `fontFamily` keeps the built-in preset's palette, spacing and
73
79
  shape while replacing its typography. It takes precedence over the legacy
74
80
  `custom.fontFamily` when both are present.
@@ -678,3 +678,7 @@ The shell only consumes theme tokens; CSS and tokens changed, DOM and behaviour
678
678
  - 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.
679
679
  - 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-*`.
680
680
  - E2E fixture: `ShellFixture` accepts `?theme=glass|material|studio|smrt` and `?scheme=dark` (all presets are imported) for per-preset screenshots.
681
+
682
+ ## Forced colors
683
+
684
+ Under `forced-colors: active` the shell follows the smrt-ui token layer (CanvasText hairlines, no shadows or blur, Highlight focus ring; see `packages/smrt-ui/src/themes/README.md#forced-colors`). Style blocks add `@media (forced-colors: active)` rules only where selection carried meaning by colour alone: the tenant nav start bar (Highlight) and bold row, phone tab bar current tab, dock toggles, focus tools, pressed shell icon buttons and the open account trigger. Chart series cycle system colours. Verified by `e2e/forced-colors.spec.ts`; the fixture (`forced-colors.html`) imports `base.css`, which carries the token layer.
@@ -207,7 +207,7 @@ function clearLogs() {
207
207
  @layer smrt.theme {
208
208
  .stt-test {
209
209
  padding: var(--smrt-spacing-md);
210
- border: 1px solid var(--smrt-color-outline-variant);
210
+ border: var(--smrt-hairline);
211
211
  border-radius: var(--smrt-radius-medium);
212
212
  background: var(--smrt-color-surface-container-low);
213
213
  max-width: 500px;
@@ -306,7 +306,7 @@ function clearLogs() {
306
306
  margin-top: var(--smrt-spacing-sm);
307
307
  padding: var(--smrt-spacing-md);
308
308
  background: var(--smrt-color-surface, white);
309
- border: 1px solid var(--smrt-color-outline-variant);
309
+ border: var(--smrt-hairline);
310
310
  border-radius: var(--smrt-radius-small);
311
311
  min-height: 60px;
312
312
  font: var(--smrt-typography-body-large-font, 1rem / 1.5 sans-serif);
@@ -2,6 +2,8 @@
2
2
  import {
3
3
  type ColorScheme,
4
4
  ColorSchemeToggle,
5
+ type ContrastPreference,
6
+ type ThemeConfig,
5
7
  type ThemePreset,
6
8
  ThemeProvider,
7
9
  } from '@happyvertical/smrt-ui/themes';
@@ -168,6 +170,12 @@ interface Props {
168
170
  preset?: ThemePreset;
169
171
  /** Light, dark or system color scheme; the user's persisted choice wins. */
170
172
  colorScheme?: ColorScheme;
173
+ /** Corner radius scale passed to the ThemeProvider; the user's persisted choice wins. */
174
+ borderRadius?: ThemeConfig['borderRadius'];
175
+ /** Control target density passed to the ThemeProvider; the user's persisted choice wins. */
176
+ density?: ThemeConfig['density'];
177
+ /** Contrast preference passed to the ThemeProvider (`auto` follows the OS); the user's persisted choice wins. */
178
+ contrast?: ContrastPreference;
171
179
  /** Extra app-panel content (e.g. selected-tenant notes). */
172
180
  appPanelDocs?: Snippet;
173
181
  /**
@@ -301,6 +309,9 @@ let {
301
309
  onlayoutchange,
302
310
  preset = 'smrt',
303
311
  colorScheme = 'system',
312
+ borderRadius,
313
+ density,
314
+ contrast,
304
315
  appPanelDocs,
305
316
  dock,
306
317
  dockToggles = [],
@@ -973,7 +984,14 @@ const EDGE_OF_REGION: Record<ShellRegion, PanelEdge> = {
973
984
 
974
985
  <Provider {webmcp} user={providerUser} {permissions}>
975
986
  <RuntimeDiagnosticsWebMcp enabled={runtimeDiagnostics} />
976
- <ThemeProvider {preset} {colorScheme} persist={true}>
987
+ <ThemeProvider
988
+ {preset}
989
+ {colorScheme}
990
+ {borderRadius}
991
+ {density}
992
+ {contrast}
993
+ persist={true}
994
+ >
977
995
  {#if !chrome}
978
996
  {@render children()}
979
997
  {:else}
@@ -1092,5 +1110,10 @@ const EDGE_OF_REGION: Record<ShellRegion, PanelEdge> = {
1092
1110
  .smrt-edit-item__grip:hover { background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent); }
1093
1111
  .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); }
1094
1112
  .smrt-edit-item__grip[aria-pressed='true'] { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
1113
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
1114
+ @media (forced-colors: active) {
1115
+ .smrt-layout-toggle :global(.smrt-shell-icon-button[aria-pressed='true']) { background: Highlight; color: HighlightText; }
1116
+ .smrt-edit-item__grip[aria-pressed='true'] { background: Highlight; color: HighlightText; }
1117
+ }
1095
1118
  }
1096
1119
  </style>
@@ -1,4 +1,4 @@
1
- import { type ColorScheme, type ThemePreset } from '@happyvertical/smrt-ui/themes';
1
+ import { type ColorScheme, type ContrastPreference, type ThemeConfig, type ThemePreset } from '@happyvertical/smrt-ui/themes';
2
2
  import '@happyvertical/smrt-ui/themes/styles/all.css';
3
3
  import '@happyvertical/smrt-ui/themes/styles/base.css';
4
4
  import '@happyvertical/smrt-ui/themes/styles/fonts.css';
@@ -104,6 +104,12 @@ interface Props {
104
104
  preset?: ThemePreset;
105
105
  /** Light, dark or system color scheme; the user's persisted choice wins. */
106
106
  colorScheme?: ColorScheme;
107
+ /** Corner radius scale passed to the ThemeProvider; the user's persisted choice wins. */
108
+ borderRadius?: ThemeConfig['borderRadius'];
109
+ /** Control target density passed to the ThemeProvider; the user's persisted choice wins. */
110
+ density?: ThemeConfig['density'];
111
+ /** Contrast preference passed to the ThemeProvider (`auto` follows the OS); the user's persisted choice wins. */
112
+ contrast?: ContrastPreference;
107
113
  /** Extra app-panel content (e.g. selected-tenant notes). */
108
114
  appPanelDocs?: Snippet;
109
115
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/app/AppShell.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AppShell.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/app/AppShell.svelte.ts"],"names":[],"mappings":"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"}
@@ -182,5 +182,10 @@ function press(event: MouseEvent, toggle: DockToggle): void {
182
182
  opacity: var(--smrt-state-disabled);
183
183
  cursor: default;
184
184
  }
185
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
186
+ @media (forced-colors: active) {
187
+ .smrt-dock-toggles__button.active { background: Highlight; color: HighlightText; border-color: Highlight; }
188
+ .smrt-dock-toggles__button[aria-disabled='true'] { opacity: 1; color: GrayText; }
189
+ }
185
190
  }
186
191
  </style>
@@ -192,7 +192,7 @@ function date(value: string): string {
192
192
  .smrt-record-history > ol > li {
193
193
  min-inline-size: 0;
194
194
  padding-block: var(--smrt-spacing-3);
195
- border-block-end: 1px solid var(--smrt-color-outline-variant);
195
+ border-block-end: var(--smrt-hairline);
196
196
  overflow-wrap: anywhere;
197
197
  }
198
198
 
@@ -295,14 +295,14 @@ function toggleColumn(columnId: string): void {
295
295
  @layer smrt.theme {
296
296
  .smrt-board { min-width: 0; }
297
297
  .smrt-board__lanes { display: flex; gap: var(--smrt-spacing-4); overflow-x: auto; overscroll-behavior-x: contain; padding-block-end: var(--smrt-spacing-2); }
298
- .smrt-board__lane { display: grid; grid-template-rows: auto minmax(0, 1fr); flex: 0 0 min(18rem, 82vw); min-block-size: 12rem; max-block-size: min(42rem, 70vh); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container); overflow: hidden; }
298
+ .smrt-board__lane { display: grid; grid-template-rows: auto minmax(0, 1fr); flex: 0 0 min(18rem, 82vw); min-block-size: 12rem; max-block-size: min(42rem, 70vh); border: var(--smrt-hairline); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container); overflow: hidden; }
299
299
  .smrt-board__lane--disabled { opacity: 0.6; }
300
- .smrt-board__header { display: flex; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-2); min-block-size: 2.75rem; padding: 0 var(--smrt-spacing-3); border-block-end: 1px solid var(--smrt-color-outline-variant); }
300
+ .smrt-board__header { display: flex; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-2); min-block-size: 2.75rem; padding: 0 var(--smrt-spacing-3); border-block-end: var(--smrt-hairline); }
301
301
  .smrt-board__title, .smrt-board__collapse { display: flex; align-items: center; justify-content: space-between; gap: var(--smrt-spacing-2); inline-size: 100%; color: inherit; font: var(--smrt-typography-label-large-font); }
302
302
  .smrt-board__collapse { padding: 0; border: 0; background: transparent; cursor: pointer; text-align: start; }
303
303
  .smrt-board__collapse:focus-visible, .smrt-board__card:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
304
304
  .smrt-board__cards { display: grid; align-content: start; gap: var(--smrt-spacing-2); min-block-size: 0; overflow-y: auto; overscroll-behavior-y: contain; padding: var(--smrt-spacing-3); }
305
- .smrt-board__card { display: block; inline-size: 100%; padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); color: inherit; cursor: grab; text-align: start; }
305
+ .smrt-board__card { display: block; inline-size: 100%; padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); color: inherit; cursor: grab; text-align: start; }
306
306
  .smrt-board__card--touch-drag { touch-action: none; }
307
307
  .smrt-board__card:active { cursor: grabbing; }
308
308
  .smrt-board__card--dragging { opacity: 0.55; }
@@ -366,7 +366,7 @@ const inputLabel = $derived(label ?? t(M['ui.command_palette.input_label']));
366
366
  font: inherit;
367
367
  font-size: var(--smrt-typography-label-small-size, 0.75rem);
368
368
  padding: 0.0625rem 0.375rem;
369
- border: 1px solid var(--smrt-color-outline-variant, var(--smrt-color-outline));
369
+ border: var(--smrt-hairline);
370
370
  border-radius: var(--smrt-radius-small, 0.375rem);
371
371
  color: var(--smrt-color-on-surface-variant);
372
372
  background: var(--smrt-color-surface-container);
@@ -79,7 +79,7 @@ const hint = $derived(hotkeys[0] ? formatPaletteHotkey(hotkeys[0], apple) : '');
79
79
  font: inherit;
80
80
  font-size: var(--smrt-typography-label-small-size, 0.75rem);
81
81
  padding: 0.0625rem 0.375rem;
82
- border: 1px solid var(--smrt-color-outline-variant, var(--smrt-color-outline));
82
+ border: var(--smrt-hairline);
83
83
  border-radius: var(--smrt-radius-small, 0.375rem);
84
84
  color: var(--smrt-color-on-surface-variant);
85
85
  }
@@ -230,6 +230,9 @@ setCookbookContext({
230
230
  }}
231
231
  {preset}
232
232
  colorScheme={shell.theme.colorScheme}
233
+ borderRadius={shell.theme.borderRadius}
234
+ density={shell.theme.density}
235
+ contrast={shell.theme.contrast}
233
236
  sectionHref={(id) => shell.sectionPath(id)}
234
237
  slotItems={[...slotItems, ...recipeSlotItems]}
235
238
  >
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/components/cookbook/theme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,oBAAoB,EAAG,QAAiB,CAAC;AAEtD,gGAAgG;AAChG,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxD,CAAC;AAIF,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GAAG,SAAS,GAC/B,qBAAqB,CAuBvB"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/components/cookbook/theme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,oBAAoB,EAAG,QAAiB,CAAC;AAEtD,gGAAgG;AAChG,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxD,CAAC;AAiBF,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GAAG,SAAS,GAC/B,qBAAqB,CAkCvB"}
@@ -8,6 +8,12 @@ export const THEME_FONTS = {
8
8
  'ui-rounded': 'ui-rounded, "SF Pro Rounded", system-ui, sans-serif',
9
9
  'ui-monospace': 'ui-monospace, "SF Mono", Menlo, monospace',
10
10
  };
11
+ const RADII = ['none', 'sm', 'md', 'lg', 'xl', 'full'];
12
+ const DENSITIES = ['comfortable', 'touch'];
13
+ const CONTRASTS = ['auto', 'standard', 'more'];
14
+ function isOneOf(allowed, value) {
15
+ return (typeof value === 'string' && allowed.includes(value));
16
+ }
11
17
  const HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
12
18
  /** `#rgb` or `#rrggbb` (with or without `#`) as lowercase `#rrggbb`; else null. */
13
19
  export function normalizeHex(value) {
@@ -37,6 +43,15 @@ export function resolveCookbookTheme(theme) {
37
43
  const colorScheme = theme?.colorScheme === 'light' || theme?.colorScheme === 'dark'
38
44
  ? theme.colorScheme
39
45
  : DEFAULT_COLOR_SCHEME;
46
+ const shape = {
47
+ ...(isOneOf(RADII, theme?.borderRadius)
48
+ ? { borderRadius: theme.borderRadius }
49
+ : {}),
50
+ ...(isOneOf(DENSITIES, theme?.density) ? { density: theme.density } : {}),
51
+ ...(isOneOf(CONTRASTS, theme?.contrast)
52
+ ? { contrast: theme.contrast }
53
+ : {}),
54
+ };
40
55
  const primary = theme?.custom ? normalizeHex(theme.custom.primary) : null;
41
56
  const font = theme?.fontFamily ?? theme?.custom?.fontFamily;
42
57
  const fontFamily = typeof font === 'string' && Object.hasOwn(THEME_FONTS, font)
@@ -46,12 +61,14 @@ export function resolveCookbookTheme(theme) {
46
61
  return {
47
62
  preset: brandThemeId(primary, fontFamily),
48
63
  colorScheme,
64
+ ...shape,
49
65
  brand: { primary, ...(fontFamily ? { fontFamily } : {}) },
50
66
  };
51
67
  }
52
68
  return {
53
69
  preset: theme?.preset || DEFAULT_THEME_PRESET,
54
70
  colorScheme,
71
+ ...shape,
55
72
  ...(fontFamily ? { fontFamily } : {}),
56
73
  };
57
74
  }
@@ -97,6 +97,12 @@ export interface ResolvedCookbookTheme {
97
97
  /** Preset id: a built-in smrt-ui preset, or the brand theme's id. */
98
98
  preset: string;
99
99
  colorScheme: 'light' | 'dark' | 'system';
100
+ /** Corner radius scale; absent keeps the preset's own. */
101
+ borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
102
+ /** Control target density; absent keeps the preset's own. */
103
+ density?: 'comfortable' | 'touch';
104
+ /** Contrast preference; absent means `auto`. */
105
+ contrast?: 'auto' | 'standard' | 'more';
100
106
  /** Known font key applied without changing a built-in preset's palette. */
101
107
  fontFamily?: string;
102
108
  /** Present when the cookbook names a brand colour (it wins over `preset`). */
@@ -206,7 +212,7 @@ export interface CookbookSectionPageProps extends CookbookSectionPresentationPro
206
212
  children?: import('svelte').Snippet;
207
213
  }
208
214
  /** Props of `CookbookApp`; anything else is passed to `AppShell` unchanged. */
209
- export interface CookbookAppProps extends Omit<ComponentProps<typeof AppShell>, 'navGroups' | 'nav' | 'navMode' | 'layout' | 'onlayoutchange' | 'preset' | 'colorScheme' | 'sectionHref' | 'title' | 'children'>, Pick<BuildCookbookShellOptions, 'recipeOrder' | 'entryPath' | 'sectionPath' | 'href' | 'title'> {
215
+ export interface CookbookAppProps extends Omit<ComponentProps<typeof AppShell>, 'navGroups' | 'nav' | 'navMode' | 'layout' | 'onlayoutchange' | 'preset' | 'colorScheme' | 'borderRadius' | 'density' | 'contrast' | 'sectionHref' | 'title' | 'children'>, Pick<BuildCookbookShellOptions, 'recipeOrder' | 'entryPath' | 'sectionPath' | 'href' | 'title'> {
210
216
  cookbook: Cookbook;
211
217
  catalog: CookbookCatalog;
212
218
  /** Expanded section entries are the default; use `sections` for headings only. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/cookbook/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/cookbook/types.ts"],"names":[],"mappings":"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"}
@@ -531,7 +531,7 @@ function handleCountryChange(e: Event) {
531
531
  gap: var(--smrt-spacing-3);
532
532
  padding: var(--smrt-spacing-4);
533
533
  background: var(--smrt-color-surface-container-low);
534
- border: 1px solid var(--smrt-color-outline-variant);
534
+ border: var(--smrt-hairline);
535
535
  border-radius: var(--smrt-radius-medium);
536
536
  }
537
537
 
@@ -574,7 +574,7 @@ function handleCountryChange(e: Event) {
574
574
  .smrt-input {
575
575
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
576
576
  font-size: var(--smrt-typography-body-large-size, 1rem);
577
- border: 1px solid var(--smrt-color-outline-variant);
577
+ border: var(--smrt-hairline);
578
578
  border-radius: var(--smrt-radius-small);
579
579
  background: var(--smrt-color-surface);
580
580
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -649,7 +649,7 @@ const primaryControlId = $derived(isSmrt ? `${name}_voice` : `${name}_start`);
649
649
  .smrt-input {
650
650
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
651
651
  font-size: var(--smrt-typography-body-large-size, 1rem);
652
- border: 1px solid var(--smrt-color-outline-variant);
652
+ border: var(--smrt-hairline);
653
653
  border-radius: var(--smrt-radius-small);
654
654
  background: var(--smrt-color-surface);
655
655
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -473,7 +473,7 @@ function handleNativeChange(e: Event) {
473
473
  width: 100%;
474
474
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
475
475
  font-size: var(--smrt-typography-body-large-size, 1rem);
476
- border: 1px solid var(--smrt-color-outline-variant);
476
+ border: var(--smrt-hairline);
477
477
  border-radius: var(--smrt-radius-small);
478
478
  background: var(--smrt-color-surface);
479
479
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -412,7 +412,7 @@ function formatFileSize(bytes: number): string {
412
412
  list-style: none;
413
413
  margin: 0;
414
414
  padding: 0;
415
- border: 1px solid var(--smrt-color-outline-variant);
415
+ border: var(--smrt-hairline);
416
416
  border-radius: var(--smrt-radius-md, 0.5rem);
417
417
  overflow: hidden;
418
418
  }
@@ -422,7 +422,7 @@ function formatFileSize(bytes: number): string {
422
422
  align-items: center;
423
423
  gap: var(--smrt-spacing-3, 0.75rem);
424
424
  padding: var(--smrt-spacing-2, 0.5rem) var(--smrt-spacing-3, 0.75rem);
425
- border-bottom: 1px solid var(--smrt-color-outline-variant);
425
+ border-bottom: var(--smrt-hairline);
426
426
  }
427
427
 
428
428
  .file-list__item:last-child {
@@ -521,7 +521,7 @@ function handleUnitChange(e: Event) {
521
521
  flex: 1;
522
522
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
523
523
  font-size: var(--smrt-typography-body-large-size, 1rem);
524
- border: 1px solid var(--smrt-color-outline-variant);
524
+ border: var(--smrt-hairline);
525
525
  border-radius: var(--smrt-radius-small);
526
526
  background: var(--smrt-color-surface);
527
527
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -567,7 +567,7 @@ function handleUnitChange(e: Event) {
567
567
  .unit-select {
568
568
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
569
569
  font-size: var(--smrt-typography-body-medium-size, 0.875rem);
570
- border: 1px solid var(--smrt-color-outline-variant);
570
+ border: var(--smrt-hairline);
571
571
  border-radius: var(--smrt-radius-small);
572
572
  background: var(--smrt-color-surface);
573
573
  cursor: pointer;
@@ -380,7 +380,7 @@ function handleBlur() {
380
380
  flex: 1;
381
381
  padding: var(--smrt-spacing-2) var(--smrt-spacing-12) var(--smrt-spacing-2) var(--smrt-spacing-3);
382
382
  font-size: var(--smrt-typography-body-large-size, 1rem);
383
- border: 1px solid var(--smrt-color-outline-variant);
383
+ border: var(--smrt-hairline);
384
384
  border-radius: var(--smrt-radius-small);
385
385
  background: var(--smrt-color-surface);
386
386
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -294,7 +294,7 @@ function handleInput(e: Event) {
294
294
  width: 100%;
295
295
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
296
296
  font-size: var(--smrt-typography-body-large-size, 1rem);
297
- border: 1px solid var(--smrt-color-outline-variant);
297
+ border: var(--smrt-hairline);
298
298
  border-radius: var(--smrt-radius-small);
299
299
  background: var(--smrt-color-surface);
300
300
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -409,7 +409,7 @@ function handleInput(e: Event) {
409
409
  flex: 1;
410
410
  padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
411
411
  font-size: var(--smrt-typography-body-large-size, 1rem);
412
- border: 1px solid var(--smrt-color-outline-variant);
412
+ border: var(--smrt-hairline);
413
413
  border-radius: var(--smrt-radius-small);
414
414
  background: var(--smrt-color-surface);
415
415
  transition: all var(--smrt-duration-short2, 150ms) var(--smrt-easing-standard, ease);
@@ -221,7 +221,7 @@ const sizeClasses = {
221
221
  align-items: center;
222
222
  width: 100%;
223
223
  background: var(--smrt-color-surface-container-low);
224
- border: 1px solid var(--smrt-color-outline-variant);
224
+ border: var(--smrt-hairline);
225
225
  border-radius: var(--smrt-radius-md, 0.5rem);
226
226
  transition: all var(--smrt-duration-fast, 150ms) var(--smrt-easing-standard, ease);
227
227
  }
@@ -198,7 +198,7 @@ function handleChange(e: Event) {
198
198
  display: flex;
199
199
  align-items: center;
200
200
  background-color: var(--smrt-color-surface);
201
- border: 1px solid var(--smrt-color-outline-variant);
201
+ border: var(--smrt-hairline);
202
202
  border-radius: var(--smrt-radius-small);
203
203
  min-height: 40px;
204
204
  padding: 0 var(--smrt-spacing-3);
@@ -355,7 +355,7 @@ function handleInput(e: Event) {
355
355
  display: flex;
356
356
  align-items: center;
357
357
  background-color: var(--smrt-color-surface);
358
- border: 1px solid var(--smrt-color-outline-variant);
358
+ border: var(--smrt-hairline);
359
359
  border-radius: var(--smrt-radius-small);
360
360
  min-height: 40px;
361
361
  padding: 0 var(--smrt-spacing-3);
@@ -315,7 +315,7 @@ function handleInput(e: Event) {
315
315
  display: flex;
316
316
  align-items: flex-start;
317
317
  background-color: var(--smrt-color-surface);
318
- border: 1px solid var(--smrt-color-outline-variant);
318
+ border: var(--smrt-hairline);
319
319
  border-radius: var(--smrt-radius-small);
320
320
  min-height: 40px;
321
321
  padding: 0 var(--smrt-spacing-3);
@@ -661,7 +661,7 @@ async function startExport() {
661
661
  padding: var(--smrt-spacing-2);
662
662
  text-align: start;
663
663
  vertical-align: top;
664
- border-block-end: 1px solid var(--smrt-color-outline-variant, currentColor);
664
+ border-block-end: var(--smrt-hairline);
665
665
  }
666
666
  .smrt-import-export__actions {
667
667
  display: flex;
@@ -129,10 +129,10 @@ $effect(() => {
129
129
  @layer smrt.reset, smrt.structure, smrt.theme;
130
130
  @layer smrt.theme {
131
131
  .smrt-notification-bell { position: relative; }
132
- .smrt-notification-bell__panel { position: absolute; z-index: 1; inset-block-start: 100%; inset-inline-end: 0; inline-size: min(24rem, 90vw); padding: var(--smrt-spacing-3); background: var(--smrt-color-surface); border: 1px solid var(--smrt-color-outline); border-radius: var(--smrt-radius-medium); }
132
+ .smrt-notification-bell__panel { position: absolute; z-index: 1; inset-block-start: 100%; inset-inline-end: 0; inline-size: min(24rem, 90vw); padding: var(--smrt-spacing-3); background: var(--smrt-color-surface); border: var(--smrt-hairline-strong); border-radius: var(--smrt-radius-medium); }
133
133
  header { display: flex; justify-content: space-between; gap: var(--smrt-spacing-2); }
134
134
  ol { display: grid; gap: var(--smrt-spacing-2); padding: 0; list-style: none; }
135
- li { padding-block: var(--smrt-spacing-2); border-block-end: 1px solid var(--smrt-color-outline-variant); }
135
+ li { padding-block: var(--smrt-spacing-2); border-block-end: var(--smrt-hairline); }
136
136
  li[data-read='false'] { border-inline-start: 3px solid var(--smrt-color-primary); padding-inline-start: var(--smrt-spacing-2); }
137
137
  p { overflow-wrap: anywhere; }
138
138
  }
@@ -553,7 +553,7 @@ const headingTag = $derived(`h${headingLevel}`);
553
553
  .smrt-overview__item[data-drop]::before { content: ''; position: absolute; inset-block: var(--smrt-overview-grid-pad); inline-size: 0.1875rem; border-radius: var(--smrt-radius-full); background: var(--smrt-color-primary); }
554
554
  .smrt-overview__item[data-drop='before']::before { inset-inline-start: 0; }
555
555
  .smrt-overview__item[data-drop='after']::before { inset-inline-end: 0; }
556
- .smrt-overview__tile { position: relative; block-size: 100%; box-sizing: border-box; padding: var(--smrt-spacing-3); 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); }
556
+ .smrt-overview__tile { position: relative; block-size: 100%; box-sizing: border-box; padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); color: var(--smrt-color-on-surface); }
557
557
  [data-presentation='plain']:not([data-editing]) .smrt-overview__tile { padding: 0; border: 0; border-radius: 0; background: transparent; }
558
558
  [data-editing] .smrt-overview__tile { border-style: dashed; }
559
559
  .smrt-overview__widget { display: grid; gap: var(--smrt-spacing-2); align-content: start; min-inline-size: 0; }
@@ -566,7 +566,7 @@ const headingTag = $derived(`h${headingLevel}`);
566
566
  .smrt-overview__handle:hover { background: var(--smrt-color-surface-container-high); }
567
567
  .smrt-overview__handle:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
568
568
  .smrt-overview__handle[aria-pressed='true'] { background: var(--smrt-color-primary-container); color: var(--smrt-color-on-primary-container); }
569
- .smrt-overview__resize { position: absolute; inset-block-start: 50%; inset-inline-end: -0.4375rem; inline-size: 0.875rem; block-size: 2.75rem; transform: translateY(-50%); border: 1px solid var(--smrt-color-outline); border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface-container-high); cursor: ew-resize; touch-action: none; }
569
+ .smrt-overview__resize { position: absolute; inset-block-start: 50%; inset-inline-end: -0.4375rem; inline-size: 0.875rem; block-size: 2.75rem; transform: translateY(-50%); border: var(--smrt-hairline-strong); border-radius: var(--smrt-radius-full); background: var(--smrt-color-surface-container-high); cursor: ew-resize; touch-action: none; }
570
570
  .smrt-overview__resize:hover { background: var(--smrt-color-primary-container); }
571
571
  .smrt-overview__resize:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
572
572
  .smrt-overview__choices { display: grid; gap: var(--smrt-spacing-1); margin: 0; padding: 0; list-style: none; }
@@ -250,5 +250,23 @@ const summary = $derived(
250
250
  .smrt-chart__bar { transition: inline-size var(--smrt-duration-normal) var(--smrt-easing-standard); }
251
251
  }
252
252
  .smrt-chart__table { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
253
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
254
+ @media (forced-colors: active) {
255
+ /* Series keys: system colours cycle by slot (the user's own palette), so
256
+ slices and legend swatches stay distinguishable without author colours.
257
+ The legend always carries label, value and share as text. */
258
+ .smrt-chart__slice[data-slot='0'], .smrt-chart__swatch[data-slot='0'] { stroke: CanvasText; background: CanvasText; }
259
+ .smrt-chart__slice[data-slot='1'], .smrt-chart__swatch[data-slot='1'] { stroke: Highlight; background: Highlight; }
260
+ .smrt-chart__slice[data-slot='2'], .smrt-chart__swatch[data-slot='2'] { stroke: LinkText; background: LinkText; }
261
+ .smrt-chart__slice[data-slot='3'], .smrt-chart__swatch[data-slot='3'] { stroke: VisitedText; background: VisitedText; }
262
+ .smrt-chart__slice[data-slot='4'], .smrt-chart__swatch[data-slot='4'] { stroke: ActiveText; background: ActiveText; }
263
+ .smrt-chart__slice[data-slot='5'], .smrt-chart__swatch[data-slot='5'] { stroke: GrayText; background: GrayText; }
264
+ .smrt-chart__slice[data-slot='6'], .smrt-chart__swatch[data-slot='6'] { stroke: ButtonText; background: ButtonText; }
265
+ .smrt-chart__slice[data-slot='7'], .smrt-chart__swatch[data-slot='7'] { stroke: MarkText; background: MarkText; }
266
+ .smrt-chart__swatch { border: var(--smrt-hairline-strong); }
267
+ .smrt-chart__slice { stroke-linecap: butt; }
268
+ .smrt-chart__track { background: Canvas; border: var(--smrt-hairline-strong); }
269
+ .smrt-chart__bar { background: Highlight; }
270
+ }
253
271
  }
254
272
  </style>
@@ -80,7 +80,7 @@ const viewAll = $derived(
80
80
  @layer smrt.reset, smrt.structure, smrt.theme;
81
81
  @layer smrt.theme {
82
82
  .smrt-records { display: grid; margin: 0; padding: 0; list-style: none; }
83
- .smrt-records__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-2) 0; border-block-end: 1px solid var(--smrt-color-outline-variant); }
83
+ .smrt-records__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--smrt-spacing-3); padding: var(--smrt-spacing-2) 0; border-block-end: var(--smrt-hairline); }
84
84
  .smrt-records__row:last-child { border-block-end: 0; }
85
85
  .smrt-records__main { display: grid; min-inline-size: 0; }
86
86
  .smrt-records__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--smrt-color-on-surface); font-weight: var(--smrt-typography-weight-medium, 500); text-decoration: none; }
@@ -96,8 +96,8 @@ const cards = $derived.by((): Card[] => {
96
96
  @layer smrt.reset, smrt.structure, smrt.theme;
97
97
  @layer smrt.theme {
98
98
  .smrt-shortcuts { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(12rem, 100%), 1fr)); gap: var(--smrt-spacing-3); margin: 0; padding: 0; list-style: none; }
99
- .smrt-shortcuts__card { position: relative; display: flex; min-inline-size: 0; border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); transition: background-color 120ms, border-color 120ms; }
100
- .smrt-shortcuts__card:hover { background: var(--smrt-color-surface-container-high); border-color: var(--smrt-color-outline); }
99
+ .smrt-shortcuts__card { position: relative; display: flex; min-inline-size: 0; border: var(--smrt-hairline); border-radius: var(--smrt-radius-large, var(--smrt-radius-medium)); background: var(--smrt-color-surface); transition: background-color 120ms, border-color 120ms; }
100
+ .smrt-shortcuts__card:hover { background: var(--smrt-color-surface-container-high); border-color: var(--smrt-hairline-strong-color); }
101
101
  .smrt-shortcuts__link { flex: 1 1 auto; display: flex; flex-direction: column; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); color: var(--smrt-color-on-surface); text-decoration: none; }
102
102
  .smrt-shortcuts__link:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; border-radius: inherit; }
103
103
  .smrt-shortcuts__heading { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-inline-size: 0; }
@@ -187,7 +187,7 @@ function catalogHref(targetPage: number, selectedId?: string): string {
187
187
  display: grid;
188
188
  max-block-size: min(42rem, calc(100vh - 19rem));
189
189
  overflow-y: auto;
190
- border-block: 1px solid var(--smrt-color-outline-variant);
190
+ border-block: var(--smrt-hairline);
191
191
  }
192
192
 
193
193
  .smrt-settings-catalog__results a {
@@ -196,7 +196,7 @@ function catalogHref(targetPage: number, selectedId?: string): string {
196
196
  gap: var(--smrt-spacing-1);
197
197
  min-width: 0;
198
198
  padding: var(--smrt-spacing-3);
199
- border-bottom: 1px solid var(--smrt-color-outline-variant);
199
+ border-bottom: var(--smrt-hairline);
200
200
  color: inherit;
201
201
  text-decoration: none;
202
202
  }
@@ -260,7 +260,7 @@ function catalogHref(targetPage: number, selectedId?: string): string {
260
260
  }
261
261
 
262
262
  .smrt-settings-catalog__detail {
263
- border: 1px solid var(--smrt-color-outline);
263
+ border: var(--smrt-hairline-strong);
264
264
  border-radius: var(--smrt-radius-medium);
265
265
  background: var(--smrt-color-surface);
266
266
  padding: var(--smrt-spacing-4);
@@ -317,13 +317,13 @@ function containerRank(id: string): number {
317
317
  @layer smrt.theme {
318
318
  .smrt-sortable { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-3); min-width: 0; position: relative; }
319
319
  .smrt-sortable__containers { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-3); min-width: 0; }
320
- .smrt-sortable__container { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container); min-width: 0; }
320
+ .smrt-sortable__container { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-3); border: var(--smrt-hairline); border-radius: var(--smrt-radius-md); background: var(--smrt-color-surface-container); min-width: 0; }
321
321
  .smrt-sortable__container--disabled { opacity: 0.6; }
322
322
  .smrt-sortable__container--dragging { opacity: 0.55; }
323
323
  .smrt-sortable__header { display: flex; align-items: center; gap: var(--smrt-spacing-2); min-block-size: 2.25rem; }
324
324
  .smrt-sortable__content { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: var(--smrt-spacing-2); }
325
325
  .smrt-sortable__items { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--smrt-spacing-1); min-block-size: 2.25rem; min-width: 0; }
326
- .smrt-sortable__item { display: flex; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-1) var(--smrt-spacing-2); border: 1px solid var(--smrt-color-outline-variant); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); min-width: 0; position: relative; }
326
+ .smrt-sortable__item { display: flex; align-items: center; gap: var(--smrt-spacing-2); padding: var(--smrt-spacing-1) var(--smrt-spacing-2); border: var(--smrt-hairline); border-radius: var(--smrt-radius-sm); background: var(--smrt-color-surface); min-width: 0; position: relative; }
327
327
  .smrt-sortable__item--dragging { opacity: 0.55; }
328
328
  .smrt-sortable__handle { display: inline-grid; place-items: center; flex: 0 0 auto; inline-size: 2rem; 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; }
329
329
  .smrt-sortable__handle:active { cursor: grabbing; }
@@ -482,7 +482,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
482
482
  height: 100dvh;
483
483
  box-sizing: border-box;
484
484
  background: var(--smrt-color-surface);
485
- border-right: 1px solid var(--smrt-color-outline-variant);
485
+ border-right: var(--smrt-hairline);
486
486
  min-width: 0;
487
487
  overflow: hidden;
488
488
  overscroll-behavior: contain;
@@ -531,7 +531,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
531
531
  :global(.class)` (#1589). Button owns focus-visible, so those rules are
532
532
  dropped. The responsive `display` toggles below are preserved. */
533
533
  .smrt-workspace-shell :global(.shell-toggle) {
534
- border: 1px solid var(--smrt-color-outline-variant);
534
+ border: var(--smrt-hairline);
535
535
  background: var(--smrt-color-surface-container);
536
536
  color: var(--smrt-color-on-surface);
537
537
  border-radius: var(--smrt-radius-medium, 0.65rem);
@@ -573,7 +573,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
573
573
  gap: 0.75rem;
574
574
  padding-top: 0.75rem;
575
575
  background: var(--smrt-color-surface);
576
- border-top: 1px solid var(--smrt-color-outline-variant);
576
+ border-top: var(--smrt-hairline);
577
577
  z-index: 1;
578
578
  }
579
579
 
@@ -597,7 +597,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
597
597
  padding: 0.75rem var(--smrt-ws-page-pad);
598
598
  min-height: var(--smrt-ws-topbar-height);
599
599
  background: var(--smrt-color-surface);
600
- border-bottom: 1px solid var(--smrt-color-outline-variant);
600
+ border-bottom: var(--smrt-hairline);
601
601
  box-shadow: var(--smrt-elevation-1, 0 1px 2px rgb(0 0 0 / 0.05));
602
602
  }
603
603
 
@@ -655,7 +655,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
655
655
  gap: 0.4rem;
656
656
  padding: 0.25rem 0.65rem;
657
657
  border-radius: var(--smrt-radius-full);
658
- border: 1px solid var(--smrt-color-outline-variant);
658
+ border: var(--smrt-hairline);
659
659
  background: var(--smrt-color-surface-container);
660
660
  color: var(--smrt-color-on-surface);
661
661
  font-size: var(--smrt-typography-label-medium-size, 0.78rem);
@@ -687,7 +687,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
687
687
 
688
688
  .smrt-workspace-shell :global(.mobile-menu) {
689
689
  display: none;
690
- border: 1px solid var(--smrt-color-outline-variant);
690
+ border: var(--smrt-hairline);
691
691
  background: var(--smrt-color-surface);
692
692
  color: var(--smrt-color-on-surface);
693
693
  border-radius: var(--smrt-radius-medium, 0.65rem);
@@ -721,7 +721,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
721
721
  display: flex;
722
722
  flex-direction: column;
723
723
  background: var(--smrt-color-surface);
724
- border-left: 1px solid var(--smrt-color-outline-variant);
724
+ border-left: var(--smrt-hairline);
725
725
  box-shadow: var(--smrt-elevation-2, 0 4px 6px -1px rgb(0 0 0 / 0.1));
726
726
  z-index: 22;
727
727
  }
@@ -731,7 +731,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
731
731
  align-items: center;
732
732
  justify-content: space-between;
733
733
  padding: 0.85rem 1rem;
734
- border-bottom: 1px solid var(--smrt-color-outline-variant);
734
+ border-bottom: var(--smrt-hairline);
735
735
  }
736
736
 
737
737
  .inspector-title {
@@ -781,7 +781,7 @@ const sidebarInert = $derived(isMobileViewport && !mobileNavOpen);
781
781
  gap: 0.4rem;
782
782
  padding: 0.75rem 0.25rem;
783
783
  background: var(--smrt-color-surface);
784
- border-left: 1px solid var(--smrt-color-outline-variant);
784
+ border-left: var(--smrt-hairline);
785
785
  z-index: 18;
786
786
  }
787
787
 
@@ -49,7 +49,7 @@ const { t } = useI18n();
49
49
  justify-content: space-between;
50
50
  gap: var(--smrt-spacing-3);
51
51
  padding: var(--smrt-spacing-3) 0;
52
- border-block-end: 1px solid var(--smrt-color-outline-variant);
52
+ border-block-end: var(--smrt-hairline);
53
53
  }
54
54
 
55
55
  .smrt-activity-item__main {
@@ -2330,7 +2330,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2330
2330
  font-size: var(--smrt-typography-body-small-size);
2331
2331
  }
2332
2332
 
2333
- :global(.smrt-admin-shell__edge-toggle--left.button.ghost) {
2333
+ :global(.smrt-admin-shell__edge-toggle--left[data-smrt-component="Button"]) {
2334
2334
  flex: 0 0 auto;
2335
2335
  inline-size: max(2.75rem, var(--smrt-control-target-min, 0px));
2336
2336
  block-size: max(2.75rem, var(--smrt-control-target-min, 0px));
@@ -2338,16 +2338,16 @@ function buildLayoutStyle(shell: ModuleShellState): string {
2338
2338
  color: var(--smrt-color-on-surface-variant);
2339
2339
  }
2340
2340
 
2341
- :global(.smrt-admin-shell__edge-toggle--left.button.ghost) {
2341
+ :global(.smrt-admin-shell__edge-toggle--left[data-smrt-component="Button"]) {
2342
2342
  border-radius: var(--smrt-control-radius);
2343
2343
  }
2344
2344
 
2345
- :global(.smrt-admin-shell__edge-toggle--left.button.ghost:hover) {
2345
+ :global(.smrt-admin-shell__edge-toggle--left[data-smrt-component="Button"]:hover) {
2346
2346
  background: color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent);
2347
2347
  color: var(--smrt-color-on-surface);
2348
2348
  }
2349
2349
 
2350
- :global(.smrt-admin-shell__edge-toggle--left.button.ghost:active) {
2350
+ :global(.smrt-admin-shell__edge-toggle--left[data-smrt-component="Button"]:active) {
2351
2351
  background: color-mix(in srgb, currentColor calc(var(--smrt-state-pressed) * 100%), transparent);
2352
2352
  }
2353
2353
 
@@ -3003,5 +3003,10 @@ function buildLayoutStyle(shell: ModuleShellState): string {
3003
3003
  animation: none;
3004
3004
  }
3005
3005
  }
3006
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
3007
+ @media (forced-colors: active) {
3008
+ .smrt-admin-shell__focus-tool.active { background: Highlight; color: HighlightText; border-color: Highlight; }
3009
+ .smrt-admin-shell__focus-tool:disabled, .smrt-admin-shell__focus-tool.active:disabled { opacity: 1; background: Canvas; color: GrayText; border-color: GrayText; }
3010
+ }
3006
3011
  }
3007
3012
  </style>
@@ -210,5 +210,14 @@ function accessibleName(item: PhoneBottomBarEntry): string {
210
210
  border-radius: var(--smrt-radius-full);
211
211
  background: var(--smrt-color-primary);
212
212
  }
213
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
214
+ @media (forced-colors: active) {
215
+ .smrt-phone-bottom-bar__item.active { color: CanvasText; font-weight: var(--smrt-typography-weight-bold); }
216
+ .smrt-phone-bottom-bar__item.active .smrt-phone-bottom-bar__icon { background: Highlight; color: HighlightText; }
217
+ .smrt-phone-bottom-bar__badge { background: CanvasText; color: Canvas; }
218
+ .smrt-phone-bottom-bar__dot { background: Highlight; border-color: Canvas; }
219
+ .smrt-phone-bottom-bar__item:disabled, .smrt-phone-bottom-bar__item.active:disabled { opacity: 1; color: GrayText; font-weight: inherit; }
220
+ .smrt-phone-bottom-bar__item.active:disabled .smrt-phone-bottom-bar__icon { background: Canvas; color: GrayText; }
221
+ }
213
222
  }
214
223
  </style>
@@ -77,5 +77,10 @@ let {
77
77
  .smrt-shell-icon-button[aria-pressed='true'] { color: var(--smrt-color-on-surface); }
78
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
79
  .smrt-shell-icon-button:disabled { opacity: var(--smrt-state-disabled); cursor: not-allowed; }
80
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
81
+ @media (forced-colors: active) {
82
+ .smrt-shell-icon-button[aria-pressed='true'] { background: Highlight; color: HighlightText; }
83
+ .smrt-shell-icon-button:disabled, .smrt-shell-icon-button[aria-pressed='true']:disabled { opacity: 1; background: Canvas; color: GrayText; }
84
+ }
80
85
  }
81
86
  </style>
@@ -362,7 +362,7 @@ function conflictFor(edge: PanelEdge): string | null {
362
362
 
363
363
  .smrt-shell-settings-panel__row {
364
364
  padding-block: var(--smrt-spacing-3);
365
- border-block-start: 1px solid var(--smrt-color-outline-variant);
365
+ border-block-start: var(--smrt-hairline);
366
366
  }
367
367
 
368
368
  .smrt-shell-settings-panel__row > div:first-child {
@@ -101,7 +101,7 @@ const { t } = useI18n();
101
101
  grid-template-columns: minmax(0, 1fr) auto;
102
102
  gap: var(--smrt-spacing-1) var(--smrt-spacing-3);
103
103
  padding: var(--smrt-spacing-3) 0;
104
- border-block-start: 1px solid var(--smrt-color-outline-variant);
104
+ border-block-start: var(--smrt-hairline);
105
105
  color: var(--smrt-color-on-surface);
106
106
  text-decoration: none;
107
107
  }
@@ -491,5 +491,13 @@ function fallbackIcon(label: string): string {
491
491
  white-space: nowrap;
492
492
  border: 0;
493
493
  }
494
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
495
+ @media (forced-colors: active) {
496
+ .smrt-tenant-nav a[aria-current='page'],
497
+ .smrt-tenant-nav a.smrt-tenant-nav__link--visible-active { background: Canvas; color: CanvasText; font-weight: var(--smrt-typography-weight-bold); }
498
+ .smrt-tenant-nav a[aria-current='page']::before,
499
+ .smrt-tenant-nav a.smrt-tenant-nav__link--visible-active::before { background: Highlight; }
500
+ .smrt-tenant-nav a[aria-disabled='true'] { opacity: 1; color: GrayText; }
501
+ }
494
502
  }
495
503
  </style>
@@ -542,5 +542,10 @@ $effect(() => {
542
542
  white-space: nowrap;
543
543
  border: 0;
544
544
  }
545
+ /* Forced colors (#3908): selected and open states keep a non-colour indicator. */
546
+ @media (forced-colors: active) {
547
+ .smrt-workspace-account-menu__trigger[aria-expanded='true']:not(:focus-visible) { outline: var(--smrt-focus-ring-width) solid Highlight; outline-offset: calc(-1 * var(--smrt-focus-ring-width)); }
548
+ .smrt-workspace-account-menu__trigger:disabled { opacity: 1; color: GrayText; }
549
+ }
545
550
  }
546
551
  </style>
@@ -308,7 +308,7 @@
308
308
  gap: 0.35rem;
309
309
  padding: 0.6rem 0.45rem;
310
310
  background: var(--smrt-color-surface-container-low);
311
- border-left: 1px solid var(--smrt-color-outline-variant);
311
+ border-left: var(--smrt-hairline);
312
312
  }
313
313
 
314
314
  .tools-dock__rail-button {
@@ -376,8 +376,8 @@
376
376
  background: var(--smrt-color-surface);
377
377
  color: var(--smrt-color-on-surface);
378
378
  overflow: hidden;
379
- border-left: 1px solid var(--smrt-color-outline-variant);
380
- border-right: 1px solid var(--smrt-color-outline-variant);
379
+ border-left: var(--smrt-hairline);
380
+ border-right: var(--smrt-hairline);
381
381
  box-shadow: -24px 0 40px
382
382
  color-mix(in srgb, var(--smrt-color-shadow) 18%, transparent);
383
383
  transform: translateX(calc(100% + var(--smrt-tools-dock-rail-width)));
@@ -423,7 +423,7 @@
423
423
  height: 2rem;
424
424
  display: inline-grid;
425
425
  place-items: center;
426
- border: 1px solid var(--smrt-color-outline-variant);
426
+ border: var(--smrt-hairline);
427
427
  border-radius: 0.5rem;
428
428
  background: var(--smrt-color-surface-container-high);
429
429
  color: inherit;
@@ -471,7 +471,7 @@
471
471
  display: inline-flex;
472
472
  align-items: center;
473
473
  gap: 0.4rem;
474
- border: 1px solid var(--smrt-color-outline-variant);
474
+ border: var(--smrt-hairline);
475
475
  background: var(--smrt-color-surface-container-low);
476
476
  color: var(--smrt-color-on-surface-variant);
477
477
  border-radius: 0.6rem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.55.20",
3
+ "version": "0.55.22",
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.5",
208
- "@happyvertical/smrt-languages": "0.55.20",
209
- "@happyvertical/smrt-mcp-apps": "0.55.20",
210
- "@happyvertical/smrt-types": "0.55.20",
211
- "@happyvertical/smrt-ui": "0.55.20",
212
- "@happyvertical/smrt-web": "0.55.20",
208
+ "@happyvertical/smrt-languages": "0.55.22",
209
+ "@happyvertical/smrt-mcp-apps": "0.55.22",
210
+ "@happyvertical/smrt-types": "0.55.22",
211
+ "@happyvertical/smrt-ui": "0.55.22",
212
+ "@happyvertical/smrt-web": "0.55.22",
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.20",
248
- "@happyvertical/smrt-chat": "0.55.20",
249
- "@happyvertical/smrt-content": "0.55.20",
250
- "@happyvertical/smrt-core": "0.55.20",
251
- "@happyvertical/smrt-reports": "0.55.20",
252
- "@happyvertical/smrt-scanner": "0.55.20",
253
- "@happyvertical/smrt-tenancy": "0.55.20",
254
- "@happyvertical/smrt-users": "0.55.20",
247
+ "@happyvertical/smrt-agents": "0.55.22",
248
+ "@happyvertical/smrt-chat": "0.55.22",
249
+ "@happyvertical/smrt-content": "0.55.22",
250
+ "@happyvertical/smrt-core": "0.55.22",
251
+ "@happyvertical/smrt-reports": "0.55.22",
252
+ "@happyvertical/smrt-scanner": "0.55.22",
253
+ "@happyvertical/smrt-tenancy": "0.55.22",
254
+ "@happyvertical/smrt-users": "0.55.22",
255
255
  "@happyvertical/speech": "^0.103.5",
256
256
  "@sveltejs/package": "^2.5.8",
257
257
  "@sveltejs/vite-plugin-svelte": "^7.3.0",