@pgcorp/ui-kit 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +198 -11
  2. package/dist/assets/src/components/shared/_internal/SDialogSurface.css_vue_type_style_index_0_src_d1b65adf_scoped_d1b65adf_lang.css +1 -1
  3. package/dist/assets/src/components/shared/_internal/SMenuItem.css_vue_type_style_index_0_src_af485607_scoped_af485607_lang.css +2 -0
  4. package/dist/assets/src/components/shared/containers/{SCollapsiblePanel.css_vue_type_style_index_0_src_4882f962_scoped_4882f962_lang.css → SCollapsiblePanel.css_vue_type_style_index_0_src_71824088_scoped_71824088_lang.css} +1 -1
  5. package/dist/assets/src/components/shared/containers/{SModal.css_vue_type_style_index_0_src_23373daf_scoped_23373daf_lang.css → SModal.css_vue_type_style_index_0_src_0dc51b74_scoped_0dc51b74_lang.css} +1 -1
  6. package/dist/assets/src/components/shared/controls/SButton.css_vue_type_style_index_0_src_a5d8f7e0_scoped_a5d8f7e0_lang.css +2 -0
  7. package/dist/assets/src/components/shared/controls/SChoiceCards.css_vue_type_style_index_0_src_af9fa9d1_scoped_af9fa9d1_lang.css +2 -0
  8. package/dist/assets/src/components/shared/controls/{SDropdownMenu.css_vue_type_style_index_0_src_b854a89e_scoped_b854a89e_lang.css → SDropdownMenu.css_vue_type_style_index_0_src_1ccb9efc_scoped_1ccb9efc_lang.css} +1 -1
  9. package/dist/assets/src/components/shared/controls/{SInputText.css_vue_type_style_index_0_src_a9c5f1aa_scoped_a9c5f1aa_lang.css → SInputText.css_vue_type_style_index_0_src_023c25d0_scoped_023c25d0_lang.css} +1 -1
  10. package/dist/assets/src/components/shared/controls/SMenuSurface.css_vue_type_style_index_0_src_ddcc5fbb_scoped_ddcc5fbb_lang.css +2 -0
  11. package/dist/assets/src/components/shared/data-display/{SCodeEditor.css_vue_type_style_index_0_src_124ca461_scoped_124ca461_lang.css → SCodeEditor.css_vue_type_style_index_0_src_3ad533d9_scoped_3ad533d9_lang.css} +1 -1
  12. package/dist/assets/src/components/shared/data-display/SStatus.css_vue_type_style_index_0_src_3ce41a12_scoped_3ce41a12_lang.css +2 -0
  13. package/dist/assets/src/components/shared/data-display/SVirtualList.css_vue_type_style_index_0_src_cee8c247_scoped_cee8c247_lang.css +2 -0
  14. package/dist/src/components/layout/SSideMenuButton.vue.d.ts +1 -1
  15. package/dist/src/components/shared/_internal/SMenuItem.vue.js +2 -2
  16. package/dist/src/components/shared/_internal/SMenuItem.vue_vue_type_script_setup_true_lang.js +88 -76
  17. package/dist/src/components/shared/_internal/dialogSurface.d.ts +1 -1
  18. package/dist/src/components/shared/_internal/dialogSurface.js +1 -0
  19. package/dist/src/components/shared/containers/SCollapsiblePanel.vue.d.ts +1 -1
  20. package/dist/src/components/shared/containers/SCollapsiblePanel.vue.js +2 -2
  21. package/dist/src/components/shared/containers/SCollapsiblePanel.vue_vue_type_script_setup_true_lang.js +60 -58
  22. package/dist/src/components/shared/containers/SModal.vue.js +2 -2
  23. package/dist/src/components/shared/containers/SModal.vue_vue_type_script_setup_true_lang.js +43 -37
  24. package/dist/src/components/shared/controls/SButton.vue.d.ts +3 -0
  25. package/dist/src/components/shared/controls/SButton.vue.js +2 -2
  26. package/dist/src/components/shared/controls/SButton.vue_vue_type_script_setup_true_lang.js +103 -99
  27. package/dist/src/components/shared/controls/SChoiceCards.vue.d.ts +1 -0
  28. package/dist/src/components/shared/controls/SChoiceCards.vue.js +2 -2
  29. package/dist/src/components/shared/controls/SChoiceCards.vue_vue_type_script_setup_true_lang.js +53 -49
  30. package/dist/src/components/shared/controls/SDropdownMenu.vue.d.ts +15 -4
  31. package/dist/src/components/shared/controls/SDropdownMenu.vue.js +2 -2
  32. package/dist/src/components/shared/controls/SDropdownMenu.vue_vue_type_script_setup_true_lang.js +98 -62
  33. package/dist/src/components/shared/controls/SInputText.vue.d.ts +2 -2
  34. package/dist/src/components/shared/controls/SInputText.vue.js +2 -2
  35. package/dist/src/components/shared/controls/SInputText.vue_vue_type_script_setup_true_lang.js +16 -25
  36. package/dist/src/components/shared/controls/SMenuSurface.vue.d.ts +2 -2
  37. package/dist/src/components/shared/controls/SMenuSurface.vue.js +2 -2
  38. package/dist/src/components/shared/controls/SMenuSurface.vue_vue_type_script_setup_true_lang.js +132 -110
  39. package/dist/src/components/shared/controls/STextarea.vue.d.ts +8 -0
  40. package/dist/src/components/shared/controls/STextarea.vue_vue_type_script_setup_true_lang.js +156 -145
  41. package/dist/src/components/shared/controls/menu.d.ts +9 -1
  42. package/dist/src/components/shared/controls/menu.js +43 -28
  43. package/dist/src/components/shared/data-display/SCodeEditor.vue.d.ts +90 -7
  44. package/dist/src/components/shared/data-display/SCodeEditor.vue.js +2 -2
  45. package/dist/src/components/shared/data-display/SStatus.vue.d.ts +7 -0
  46. package/dist/src/components/shared/data-display/SStatus.vue.js +2 -2
  47. package/dist/src/components/shared/data-display/SStatus.vue_vue_type_script_setup_true_lang.js +28 -21
  48. package/dist/src/components/shared/data-display/SVirtualList.vue.d.ts +2 -0
  49. package/dist/src/components/shared/data-display/SVirtualList.vue.js +2 -2
  50. package/dist/src/components/shared/data-display/SVirtualList.vue_vue_type_script_setup_true_lang.js +317 -210
  51. package/dist/src/composables/useDialogOverlay.d.ts +1 -0
  52. package/dist/src/composables/useDialogOverlay.js +5 -2
  53. package/dist/src/internal/textLengthConstraints.d.ts +9 -0
  54. package/dist/src/internal/textLengthConstraints.js +18 -0
  55. package/dist/src/internal/useBinaryInput.js +3 -2
  56. package/dist/src/internal/useMenuLayer.d.ts +2 -1
  57. package/dist/src/internal/useMenuLayer.js +20 -14
  58. package/docs/public-api.md +14 -2
  59. package/package.json +1 -1
  60. package/src/components/shared/_internal/SDialogSurface.css +4 -0
  61. package/src/components/shared/_internal/SMenuItem.css +22 -1
  62. package/src/components/shared/controls/SButton.css +28 -0
  63. package/src/components/shared/controls/SChoiceCards.css +10 -3
  64. package/src/components/shared/controls/SMenuSurface.css +20 -0
  65. package/src/components/shared/data-display/SStatus.css +4 -0
  66. package/src/components/shared/data-display/SVirtualList.css +12 -0
  67. package/dist/assets/src/components/shared/_internal/SMenuItem.css_vue_type_style_index_0_src_e5bd192e_scoped_e5bd192e_lang.css +0 -2
  68. package/dist/assets/src/components/shared/controls/SButton.css_vue_type_style_index_0_src_52ad38b1_scoped_52ad38b1_lang.css +0 -2
  69. package/dist/assets/src/components/shared/controls/SChoiceCards.css_vue_type_style_index_0_src_627a8628_scoped_627a8628_lang.css +0 -2
  70. package/dist/assets/src/components/shared/controls/SMenuSurface.css_vue_type_style_index_0_src_bc7c7be4_scoped_bc7c7be4_lang.css +0 -2
  71. package/dist/assets/src/components/shared/data-display/SStatus.css_vue_type_style_index_0_src_c76fa058_scoped_c76fa058_lang.css +0 -2
  72. package/dist/assets/src/components/shared/data-display/SVirtualList.css_vue_type_style_index_0_src_1717877d_scoped_1717877d_lang.css +0 -2
@@ -11,6 +11,7 @@ export interface DialogOverlayController {
11
11
  setPanelElement: (element: Element | ComponentPublicInstance | null) => void;
12
12
  backdropStyle: Readonly<Ref<Record<string, string>>>;
13
13
  surfaceStyle: Readonly<Ref<Record<string, string>>>;
14
+ dispose: () => void;
14
15
  }
15
16
  /**
16
17
  * Владеет modal-регистрацией, focus trap, body lock и восстановлением фокуса.
@@ -24,6 +24,8 @@ function o(o) {
24
24
  }), c.value = { zIndex: u.zIndex }, l.value = { zIndex: `calc(${u.zIndex} + var(--s-layer-overlay-surface-offset))` };
25
25
  }, m = (e = !0) => {
26
26
  u?.unregister({ restoreFocus: e }), u = null, c.value = {}, l.value = {};
27
+ }, h = () => {
28
+ d += 1, m(!1);
27
29
  };
28
30
  return a(o.open, async (e, t) => {
29
31
  d += 1;
@@ -37,12 +39,13 @@ function o(o) {
37
39
  }
38
40
  m(!!t);
39
41
  }, { immediate: !0 }), r(() => {
40
- d += 1, m(!1);
42
+ h();
41
43
  }), {
42
44
  panelRef: s,
43
45
  setPanelElement: f,
44
46
  backdropStyle: c,
45
- surfaceStyle: l
47
+ surfaceStyle: l,
48
+ dispose: h
46
49
  };
47
50
  }
48
51
  //#endregion
@@ -0,0 +1,9 @@
1
+ export interface TextLengthConstraints {
2
+ minLength?: number;
3
+ maxLength?: number;
4
+ }
5
+ /**
6
+ * Проверяет общий native text-length contract без coercion и усечения model.
7
+ * Validates the shared native text-length contract without coercing or truncating the model.
8
+ */
9
+ export declare function resolveTextLengthConstraints(owner: string, minLength: unknown, maxLength: unknown): TextLengthConstraints;
@@ -0,0 +1,18 @@
1
+ import { validateBoundedInteger as e } from "./runtimeContract.js";
2
+ //#region src/internal/textLengthConstraints.ts
3
+ function t(t, n, r) {
4
+ let i = n === void 0 ? void 0 : e(t, "minLength", n, {
5
+ minimum: 0,
6
+ maximum: 2 ** 53 - 1
7
+ }), a = r === void 0 ? void 0 : e(t, "maxLength", r, {
8
+ minimum: 0,
9
+ maximum: 2 ** 53 - 1
10
+ });
11
+ if (i !== void 0 && a !== void 0 && i > a) throw RangeError(`${t}: minLength (${i}) не может превышать maxLength (${a}). / ${t}: minLength (${i}) must not exceed maxLength (${a}).`);
12
+ return {
13
+ minLength: i,
14
+ maxLength: a
15
+ };
16
+ }
17
+ //#endregion
18
+ export { t as resolveTextLengthConstraints };
@@ -6,7 +6,7 @@ function o(o) {
6
6
  if (typeof o.props.modelValue != "boolean") throw TypeError(`${o.owner}: modelValue must be boolean`);
7
7
  return o.props.modelValue;
8
8
  }), d = () => {
9
- l.value && (l.value.indeterminate = (o.indeterminate?.() ?? !1) && !u.value);
9
+ l.value && (l.value.checked = u.value, l.value.indeterminate = (o.indeterminate?.() ?? !1) && !u.value);
10
10
  };
11
11
  return n(d), a([o.indeterminate ?? (() => !1), u], d), {
12
12
  checkedValue: u,
@@ -15,7 +15,8 @@ function o(o) {
15
15
  if (o.props.readonly) return;
16
16
  let t = e.currentTarget;
17
17
  if (!(t instanceof HTMLInputElement)) throw TypeError(`${o.owner}: change event owner must be the native ${o.inputName} input`);
18
- o.emitUpdate(t.checked);
18
+ let n = t.checked;
19
+ d(), o.emitUpdate(n);
19
20
  },
20
21
  onClick: (e) => {
21
22
  if (o.props.readonly) {
@@ -3,7 +3,7 @@ export type MenuAnchor = {
3
3
  type: 'element';
4
4
  element: HTMLElement;
5
5
  align: 'left' | 'right';
6
- placement?: 'bottom' | 'inline';
6
+ placement?: 'bottom' | 'top' | 'inline';
7
7
  } | {
8
8
  type: 'point';
9
9
  x: number;
@@ -13,6 +13,7 @@ export type MenuCloseReason = 'escape' | 'outside' | 'programmatic' | 'selection
13
13
  /** Управляет общей lifecycle/focus границей menu поверх canonical floating geometry. / Owns menu lifecycle and focus over canonical floating geometry. */
14
14
  export declare function useMenuLayer(layerRef: Ref<HTMLElement | null>, options?: {
15
15
  onDismiss?: (reason: 'escape' | 'outside') => void;
16
+ onRequestDismiss?: (reason: 'escape' | 'outside') => void;
16
17
  }): {
17
18
  isOpen: Ref<boolean, boolean>;
18
19
  position: Ref<import('../composables/useFloatingPosition').FloatingCoordinates, import('../composables/useFloatingPosition').FloatingCoordinates>;
@@ -23,17 +23,24 @@ function l(l, u = {}) {
23
23
  (d.value || h) && (d.value = !1, h?.unregister({ restoreFocus: e !== "outside" }), h = null, p = null, m = null, f.value = "var(--s-layer-root-floating)");
24
24
  }
25
25
  function _(e) {
26
+ if (u.onRequestDismiss) {
27
+ u.onRequestDismiss(e);
28
+ return;
29
+ }
30
+ g(e), u.onDismiss?.(e);
31
+ }
32
+ function v(e) {
26
33
  let n = m;
27
34
  if (!n) {
28
35
  g("outside");
29
36
  return;
30
37
  }
31
38
  let r = h?.focusScope() ?? document, a = t(n, r, l.value, e.shiftKey);
32
- e.preventDefault(), g("outside"), a && i(() => a.focus());
39
+ e.preventDefault(), _("outside"), a && i(() => a.focus());
33
40
  }
34
- let { coordinates: v, updatePosition: y } = r({
41
+ let { coordinates: y, updatePosition: b } = r({
35
42
  active: d,
36
- placement: () => p?.type === "element" && p.placement === "inline" ? p.align === "right" ? "left-start" : "right-start" : p?.type === "element" && p.align === "right" ? "bottom-end" : "bottom-start",
43
+ placement: () => p?.type === "element" && p.placement === "inline" ? p.align === "right" ? "left-start" : "right-start" : p?.type === "element" && p.placement === "top" ? p.align === "right" ? "top-end" : "top-start" : p?.type === "element" && p.align === "right" ? "bottom-end" : "bottom-start",
37
44
  anchorElement: () => p?.type === "element" ? p.element : null,
38
45
  anchorRect: () => p ? p.type === "point" ? c(p.x, p.y) : p.element.isConnected ? p.element.getBoundingClientRect() : (g("outside"), null) : null,
39
46
  panelRef: l,
@@ -45,7 +52,7 @@ function l(l, u = {}) {
45
52
  zIndex: () => f.value,
46
53
  scrollStrategy: "reposition"
47
54
  });
48
- async function b(t, r) {
55
+ async function x(t, r) {
49
56
  if (d.value && g("outside"), t.type === "element" && e(t.element) !== t.element) throw Error("useMenuLayer: element anchor must be the canonical focusable owner");
50
57
  p = t;
51
58
  let a = e(r ?? null) ?? e(document.activeElement);
@@ -55,26 +62,25 @@ function l(l, u = {}) {
55
62
  anchor: () => t.type === "element" ? t.element : a,
56
63
  restoreTarget: a,
57
64
  requestDismiss: (e) => {
58
- let t = e === "escape" ? "escape" : "outside";
59
- g(t), u.onDismiss?.(t);
65
+ _(e === "escape" ? "escape" : "outside");
60
66
  }
61
67
  }), f.value = h.zIndex, await i(), d.value) {
62
68
  if (!l.value) throw g("outside"), Error("useMenuLayer: layer element is unavailable after opening");
63
- y();
69
+ b();
64
70
  }
65
71
  }
66
- function x(e, t) {
67
- d.value ? g("trigger") : b(e, t);
72
+ function S(e, t) {
73
+ d.value ? g("trigger") : x(e, t);
68
74
  }
69
75
  return a(() => g("outside")), {
70
76
  isOpen: d,
71
- position: v,
77
+ position: y,
72
78
  zIndex: f,
73
- open: b,
79
+ open: x,
74
80
  close: g,
75
- closeForTab: _,
76
- toggle: x,
77
- positionLayer: y
81
+ closeForTab: v,
82
+ toggle: S,
83
+ positionLayer: b
78
84
  };
79
85
  }
80
86
  //#endregion
@@ -62,12 +62,18 @@ callbacks и trust flags не входят в API.
62
62
  `sm/md/lg = 32/36/40 px` и label typography `12/14/14 px`; тот же
63
63
  `density="compact"` у `SInputText` даёт совместимую геометрию поля без
64
64
  consumer CSS.
65
- `SInputText.minLength` и `SInputText.maxLength` передают строгие
65
+ `SInputText.minLength`/`maxLength` и `STextarea.minLength`/`maxLength` передают строгие
66
66
  неотрицательные safe integers нативному textual input; `minLength <= maxLength`
67
67
  проверяется до рендера, а numeric/temporal families отвергают этот контракт.
68
68
  `SModal.headingLevel` и `SDrawer.headingLevel` принимают только `1 | 2 | 3 | 4 |
69
69
  5 | 6`, используют `2` по умолчанию и сохраняют связь видимого заголовка с
70
70
  dialog surface через `aria-labelledby`.
71
+ `SModal.size="4xl"` задаёт responsive maximum `56rem`; при ошибке дочернего
72
+ mount modal освобождает body lock, layer registration и owned teleport nodes.
73
+ `SDropdownMenu` публикует controlled `open`, `defaultOpen`, размещение
74
+ `auto | bottom | top`, `closeOnSelect`, semantic group entries и доступные
75
+ описания пунктов. `SCollapsiblePanel` связывает compact/dense density с
76
+ 32-пиксельной disclosure geometry через публичный API `SButton`.
71
77
  `shared/data-display/SScrollViewport.vue` владеет accessible scroll region,
72
78
  разрешёнными осями, semantic block size, root-only keyboard navigation и
73
79
  ResizeObserver lifecycle. `shared/data-display/scrollViewport` экспортирует
@@ -138,12 +144,18 @@ and trust flags are not part of the API.
138
144
  `sm/md/lg = 32/36/40 px` with `12/14/14 px` label typography. The matching
139
145
  `SInputText.density="compact"` exposes the same field geometry without consumer
140
146
  CSS.
141
- `SInputText.minLength` and `SInputText.maxLength` pass strict non-negative safe
147
+ `SInputText.minLength`/`maxLength` and `STextarea.minLength`/`maxLength` pass strict non-negative safe
142
148
  integers to the native textual input. `minLength <= maxLength` is validated
143
149
  before rendering, and numeric/temporal families reject this contract.
144
150
  `SModal.headingLevel` and `SDrawer.headingLevel` accept `1 | 2 | 3 | 4 | 5 | 6`
145
151
  only, default to `2`, and preserve the visible-title relationship with the
146
152
  dialog surface through `aria-labelledby`.
153
+ `SModal.size="4xl"` provides a responsive `56rem` maximum; a failed child mount
154
+ releases body lock, layer registration, and owned teleport nodes.
155
+ `SDropdownMenu` exposes controlled `open`, `defaultOpen`,
156
+ `auto | bottom | top` placement, `closeOnSelect`, semantic group entries, and
157
+ accessible item descriptions. `SCollapsiblePanel` maps compact/dense density to
158
+ the 32px disclosure geometry through the public `SButton` API.
147
159
  `shared/data-display/SScrollViewport.vue` owns the accessible scroll region,
148
160
  enabled axes, semantic block size, root-only keyboard navigation, and
149
161
  ResizeObserver lifecycle. `shared/data-display/scrollViewport` exports
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pgcorp/ui-kit",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Typed Vue 3 design system with accessible components, semantic themes, and workbench patterns.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -56,6 +56,10 @@
56
56
  max-width: 48rem;
57
57
  }
58
58
 
59
+ .s-dialog-surface[data-presentation='modal'][data-size='4xl'] {
60
+ max-width: 56rem;
61
+ }
62
+
59
63
  .s-dialog-surface[data-presentation='modal'][data-size='wide'] {
60
64
  max-width: 72rem;
61
65
  }
@@ -80,13 +80,34 @@
80
80
  background: currentColor;
81
81
  }
82
82
 
83
- .s-menu-item__label {
83
+ .s-menu-item__text {
84
+ display: flex;
85
+ min-width: 0;
86
+ flex: 1 1 auto;
87
+ flex-direction: column;
88
+ }
89
+
90
+ .s-menu-item__label,
91
+ .s-menu-item__description {
84
92
  min-width: 0;
85
93
  overflow: hidden;
86
94
  text-overflow: ellipsis;
87
95
  white-space: nowrap;
88
96
  }
89
97
 
98
+ .s-menu-item__description {
99
+ color: var(--s-menu-item-secondary-foreground);
100
+ font-size: 0.75rem;
101
+ font-weight: 400;
102
+ line-height: 1rem;
103
+ }
104
+
105
+ .s-menu-item:hover:not([aria-disabled='true']) .s-menu-item__description,
106
+ .s-menu-item:focus-visible .s-menu-item__description,
107
+ .s-menu-item[data-current='true'] .s-menu-item__description {
108
+ color: var(--s-menu-item-state-foreground);
109
+ }
110
+
90
111
  .s-menu-item__meta {
91
112
  @apply ml-auto inline-flex shrink-0 items-center;
92
113
  gap: var(--s-space-control-gap);
@@ -88,6 +88,21 @@
88
88
  font-size: 1.125rem;
89
89
  }
90
90
 
91
+ .s-button[data-label-overflow='wrap']:not([data-icon-only='true']) {
92
+ block-size: auto;
93
+ max-inline-size: 100%;
94
+ padding-block: 0.375rem;
95
+ }
96
+
97
+ .s-button[data-label-overflow='wrap'][data-density='compact']:not([data-icon-only='true']) {
98
+ block-size: auto;
99
+ padding-block: 0.25rem;
100
+ }
101
+
102
+ .s-button[data-label-overflow='wrap'][data-size='lg']:not([data-icon-only='true']) {
103
+ padding-block: 0.5rem;
104
+ }
105
+
91
106
  .s-button[data-icon-only='true'] {
92
107
  flex: 0 0 auto;
93
108
  padding: 0;
@@ -299,6 +314,19 @@
299
314
  white-space: nowrap;
300
315
  }
301
316
 
317
+ .s-button[data-label-overflow='wrap'] .s-button__content {
318
+ max-inline-size: 100%;
319
+ flex: 1 1 auto;
320
+ }
321
+
322
+ .s-button[data-label-overflow='wrap'] .s-button__label {
323
+ flex: 1 1 auto;
324
+ overflow: visible;
325
+ overflow-wrap: anywhere;
326
+ text-overflow: clip;
327
+ white-space: normal;
328
+ }
329
+
302
330
  .s-button__badge-slot {
303
331
  @apply ml-auto inline-flex;
304
332
  }
@@ -17,13 +17,20 @@
17
17
  grid-template-columns: repeat(3, minmax(0, 1fr));
18
18
  }
19
19
 
20
+ .s-choice-cards[data-appearance='rows'] {
21
+ grid-template-columns: minmax(0, 1fr);
22
+ gap: 0.5rem;
23
+ }
24
+
20
25
  .s-choice-card { @apply relative flex min-h-28 min-w-0 flex-col items-start gap-2 overflow-hidden rounded-2xl border border-surface-300 bg-surface-0 p-4 text-left text-surface-800 hover:border-primary-300 hover:bg-primary-50/30 disabled:cursor-not-allowed disabled:opacity-50 dark:border-surface-700 dark:bg-surface-900 dark:text-surface-100; }
21
26
  .s-choice-card:focus-visible { outline: var(--s-focus-ring-width) solid var(--s-focus-ring-color); outline-offset: var(--s-focus-ring-offset); }
22
27
  .s-choice-card[aria-checked='true'] { @apply border-primary-500 ring-1 ring-primary-500/20; }
23
- .s-choice-card__kicker { @apply text-[0.7rem] font-semibold uppercase tracking-wide text-surface-500; }
28
+ .s-choice-card__kicker { @apply text-[0.7rem] font-semibold uppercase tracking-wide text-surface-500 dark:text-surface-400; }
24
29
  .s-choice-card__title { @apply text-sm font-semibold leading-5; }
25
- .s-choice-card__description { @apply text-xs leading-5 text-surface-500; }
26
- .s-choice-card__meta { @apply mt-auto text-xs leading-4 text-surface-500; }
30
+ .s-choice-card__description { @apply text-xs leading-5 text-surface-500 dark:text-surface-400; }
31
+ .s-choice-card__meta { @apply mt-auto text-xs leading-4 text-surface-500 dark:text-surface-400; }
27
32
  .s-choice-card__mark { @apply absolute right-4 top-4 inline-flex h-6 w-6 items-center justify-center rounded-full bg-primary-100 font-bold text-primary-600; }
28
33
  .s-choice-cards[data-density='compact'] .s-choice-card { @apply min-h-24 p-3; }
34
+ .s-choice-cards[data-appearance='rows'] .s-choice-card { @apply min-h-0 gap-0.5 rounded-xl px-3 py-2; }
35
+ .s-choice-cards[data-appearance='rows'] .s-choice-card__meta { @apply mt-1; }
29
36
  .s-choice-cards[aria-readonly='true'] .s-choice-card { @apply cursor-default; }
@@ -18,3 +18,23 @@
18
18
  .s-menu-surface[data-orientation='horizontal'] {
19
19
  @apply flex max-w-full gap-1 overflow-x-auto;
20
20
  }
21
+
22
+ .s-menu-group {
23
+ min-width: 0;
24
+ }
25
+
26
+ .s-menu-group + .s-menu-group {
27
+ margin-top: var(--s-space-control-gap);
28
+ padding-top: var(--s-space-control-gap);
29
+ border-top: 1px solid var(--s-floating-outline);
30
+ }
31
+
32
+ .s-menu-group__label {
33
+ padding: 0.25rem var(--s-menu-item-inline-padding);
34
+ color: var(--s-menu-item-secondary-foreground);
35
+ font-size: 0.6875rem;
36
+ font-weight: 700;
37
+ line-height: 1rem;
38
+ letter-spacing: 0.04em;
39
+ text-transform: uppercase;
40
+ }
@@ -4,6 +4,10 @@
4
4
  @apply inline-flex min-w-0 items-center font-medium;
5
5
  }
6
6
 
7
+ .s-status[data-visibility='assistive'] {
8
+ @apply sr-only;
9
+ }
10
+
7
11
  .s-status[data-size='xs'] {
8
12
  @apply gap-1 text-[10px] leading-4;
9
13
  }
@@ -14,6 +14,18 @@
14
14
  @apply pointer-events-none w-full;
15
15
  }
16
16
 
17
+ .s-virtual-list__header,
18
+ .s-virtual-list__footer {
19
+ @apply box-border w-full min-w-0;
20
+ position: absolute;
21
+ right: 0;
22
+ left: 0;
23
+ }
24
+
25
+ .s-virtual-list__header {
26
+ top: 0;
27
+ }
28
+
17
29
  .s-virtual-list__item {
18
30
  @apply box-border w-full min-w-0;
19
31
  }
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-e5bd192e],[data-v-e5bd192e]:before,[data-v-e5bd192e]:after,[data-v-e5bd192e]::backdrop{--tw-font-weight:initial;--tw-leading:initial}}}.s-menu-item[data-v-e5bd192e]{text-align:left;--tw-font-weight:var(--font-weight-medium,500);width:100%;min-width:0;font-weight:var(--font-weight-medium,500);min-height:var(--s-density-row-default);align-items:center;gap:var(--s-space-control-gap);padding:var(--s-menu-item-block-padding) var(--s-menu-item-inline-padding);border-radius:var(--radius-xs);color:var(--s-menu-item-foreground);appearance:none;cursor:pointer;transition:background-color var(--s-motion-fast) ease, color var(--s-motion-fast) ease;background:0 0;border:0;font-family:inherit;font-size:.875rem;line-height:1.25rem;display:flex}.s-menu-item[data-density=compact][data-v-e5bd192e]{min-height:var(--s-density-row-compact);padding:var(--s-menu-item-block-padding-compact) var(--s-menu-item-inline-padding-compact);font-size:.75rem;line-height:1rem}.s-menu-item[data-v-e5bd192e]:hover:not([aria-disabled=true]),.s-menu-item[data-v-e5bd192e]:focus-visible,.s-menu-item[data-current=true][data-v-e5bd192e]{background:var(--s-menu-item-state-background);color:var(--s-menu-item-state-foreground)}.s-menu-item[data-v-e5bd192e]:focus-visible{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-color);outline-offset:var(--s-focus-ring-inset-offset)}.s-menu-item[aria-disabled=true][data-v-e5bd192e]{color:var(--s-menu-item-disabled-foreground);cursor:not-allowed;opacity:.62}.s-menu-item__main[data-v-e5bd192e]{align-items:center;gap:var(--s-space-control-gap);min-width:0;display:flex}.s-menu-item__state[data-v-e5bd192e]{flex:0 0 var(--s-icon-size-xs);justify-content:center;align-items:center;display:inline-flex}.s-menu-item__state[data-v-e5bd192e]:empty{display:none}.s-menu-item__icon[data-v-e5bd192e],.s-menu-item__state-icon[data-v-e5bd192e],.s-menu-item__submenu-icon[data-v-e5bd192e]{width:var(--s-icon-size-xs);height:var(--s-icon-size-xs);flex:none}.s-menu-item__state-icon[data-v-e5bd192e],.s-menu-item__radio-dot[data-v-e5bd192e]{color:var(--s-menu-item-indicator-foreground)}.s-menu-item__radio-dot[data-v-e5bd192e]{width:calc(var(--s-icon-size-xs) / 2);height:calc(var(--s-icon-size-xs) / 2);border-radius:var(--s-radius-pill);background:currentColor}.s-menu-item__label[data-v-e5bd192e]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.s-menu-item__meta[data-v-e5bd192e]{align-items:center;gap:var(--s-space-control-gap);flex-shrink:0;margin-left:auto;display:inline-flex}.s-menu-item__badge[data-v-e5bd192e]{display:inline-flex}.s-menu-item__shortcut[data-v-e5bd192e]{text-align:right;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 4);line-height:calc(var(--spacing,.25rem) * 4);white-space:nowrap;color:var(--s-menu-item-secondary-foreground)}.s-menu-item:hover:not([aria-disabled=true]) .s-menu-item__shortcut[data-v-e5bd192e],.s-menu-item:focus-visible .s-menu-item__shortcut[data-v-e5bd192e],.s-menu-item[data-current=true] .s-menu-item__shortcut[data-v-e5bd192e]{color:var(--s-menu-item-state-foreground)}.s-menu-item[data-layout=tile][data-v-e5bd192e]{min-width:5rem}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-52ad38b1],[data-v-52ad38b1]:before,[data-v-52ad38b1]:after,[data-v-52ad38b1]::backdrop{--tw-font-weight:initial;--tw-leading:initial}}}.s-button[data-v-52ad38b1]{--s-button-accent:var(--s-button-primary-accent);--s-button-solid-background:var(--s-button-primary-solid-background);--s-button-solid-background-hover:var(--s-button-primary-solid-background-hover);--s-button-solid-background-active:var(--s-button-primary-solid-background-active);--s-button-on-solid:var(--s-button-primary-solid-foreground);--s-button-foreground:var(--s-button-primary-foreground);--s-button-outline:var(--s-button-accent)}@supports (color:color-mix(in lab, red, red)){.s-button[data-v-52ad38b1]{--s-button-outline:color-mix(in srgb, var(--s-button-accent) 45%, transparent)}}.s-button[data-v-52ad38b1]{--s-button-soft-background:var(--s-button-accent)}@supports (color:color-mix(in lab, red, red)){.s-button[data-v-52ad38b1]{--s-button-soft-background:color-mix(in srgb, var(--s-button-accent) 12%, transparent)}}.s-button[data-v-52ad38b1]{--s-button-hover-background:var(--s-button-accent)}@supports (color:color-mix(in lab, red, red)){.s-button[data-v-52ad38b1]{--s-button-hover-background:color-mix(in srgb, var(--s-button-accent) 10%, transparent)}}.s-button[data-v-52ad38b1]{--tw-font-weight:var(--font-weight-semibold,600);min-width:0;font-weight:var(--font-weight-semibold,600);border-radius:var(--radius-xs);appearance:none;touch-action:manipulation;transition:background-color var(--s-motion-standard) ease, border-color var(--s-motion-standard) ease, box-shadow var(--s-motion-standard) ease, color var(--s-motion-standard) ease, transform var(--s-motion-fast) ease;border:1px solid #0000;justify-content:center;align-items:center;font-family:inherit;line-height:1.25;text-decoration:none;display:inline-flex;position:relative}.s-button[data-size=xs][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-xs);min-block-size:var(--s-control-hitbox-xs);padding:0 .5rem;font-size:.75rem}.s-button[data-density=compact][data-size=xs][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-2xs);min-block-size:var(--s-control-hitbox-2xs);padding-block:0}.s-button[data-density=compact][data-size=sm][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-xs);min-block-size:var(--s-control-hitbox-xs)}.s-button[data-density=compact][data-size=md][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-sm);min-block-size:var(--s-control-hitbox-sm)}.s-button[data-density=compact][data-size=lg][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-md);min-block-size:var(--s-control-hitbox-md);font-size:.875rem}.s-button[data-size=sm][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-sm);min-block-size:var(--s-control-hitbox-sm);padding:0 .625rem;font-size:.75rem}.s-button[data-spacing=tight][data-size=sm][data-v-52ad38b1]:not([data-icon-only=true]){height:var(--s-control-hitbox-sm);min-height:var(--s-control-hitbox-sm);padding-block:0;padding-inline:.25rem}.s-button[data-spacing=tight] .s-button__content[data-v-52ad38b1]{gap:.25rem}.s-button[data-size=md][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-md);min-block-size:var(--s-control-hitbox-md);padding:0 1.25rem;font-size:.875rem}.s-button[data-size=lg][data-v-52ad38b1]:not([data-icon-only=true]){block-size:var(--s-control-hitbox-lg);min-block-size:var(--s-control-hitbox-lg);padding:0 1.75rem;font-size:1.125rem}.s-button[data-icon-only=true][data-v-52ad38b1]{flex:none;padding:0}.s-button[data-icon-only=true][data-size=xs][data-v-52ad38b1]{width:var(--s-control-hitbox-xs);height:var(--s-control-hitbox-xs)}.s-button[data-icon-only=true][data-size=sm][data-v-52ad38b1]{width:var(--s-control-hitbox-sm);height:var(--s-control-hitbox-sm)}.s-button[data-icon-only=true][data-size=md][data-v-52ad38b1]{width:var(--s-control-hitbox-md);height:var(--s-control-hitbox-md)}.s-button[data-icon-only=true][data-size=lg][data-v-52ad38b1]{width:var(--s-control-hitbox-lg);height:var(--s-control-hitbox-lg)}.s-button[data-density=compact][data-icon-only=true][data-size=xs][data-v-52ad38b1]{width:var(--s-control-hitbox-2xs);height:var(--s-control-hitbox-2xs)}.s-button[data-density=compact][data-icon-only=true][data-size=sm][data-v-52ad38b1]{width:var(--s-control-hitbox-xs);height:var(--s-control-hitbox-xs)}.s-button[data-density=compact][data-icon-only=true][data-size=md][data-v-52ad38b1]{width:var(--s-control-hitbox-sm);height:var(--s-control-hitbox-sm)}.s-button[data-density=compact][data-icon-only=true][data-size=lg][data-v-52ad38b1]{width:var(--s-control-hitbox-md);height:var(--s-control-hitbox-md)}.s-button[data-s-tone=secondary][data-v-52ad38b1]{--s-button-accent:var(--s-button-secondary-accent);--s-button-solid-background:var(--s-button-secondary-solid-background);--s-button-solid-background-hover:var(--s-button-secondary-solid-background-hover);--s-button-solid-background-active:var(--s-button-secondary-solid-background-active);--s-button-on-solid:var(--s-button-secondary-solid-foreground);--s-button-foreground:var(--s-button-secondary-foreground);--s-button-outline:var(--color-surface-300)}.s-button[data-s-tone=success][data-v-52ad38b1]{--s-button-accent:var(--s-button-success-accent);--s-button-solid-background:var(--s-button-success-solid-background);--s-button-solid-background-hover:var(--s-button-success-solid-background-hover);--s-button-solid-background-active:var(--s-button-success-solid-background-active);--s-button-on-solid:var(--s-button-success-solid-foreground);--s-button-foreground:var(--s-button-success-foreground)}.s-button[data-s-tone=info][data-v-52ad38b1]{--s-button-accent:var(--s-button-info-accent);--s-button-solid-background:var(--s-button-info-solid-background);--s-button-solid-background-hover:var(--s-button-info-solid-background-hover);--s-button-solid-background-active:var(--s-button-info-solid-background-active);--s-button-on-solid:var(--s-button-info-solid-foreground);--s-button-foreground:var(--s-button-info-foreground)}.s-button[data-s-tone=warn][data-v-52ad38b1]{--s-button-accent:var(--s-button-warn-accent);--s-button-solid-background:var(--s-button-warn-solid-background);--s-button-solid-background-hover:var(--s-button-warn-solid-background-hover);--s-button-solid-background-active:var(--s-button-warn-solid-background-active);--s-button-on-solid:var(--s-button-warn-solid-foreground);--s-button-foreground:var(--s-button-warn-foreground)}.s-button[data-s-tone=danger][data-v-52ad38b1]{--s-button-accent:var(--s-button-danger-accent);--s-button-solid-background:var(--s-button-danger-solid-background);--s-button-solid-background-hover:var(--s-button-danger-solid-background-hover);--s-button-solid-background-active:var(--s-button-danger-solid-background-active);--s-button-on-solid:var(--s-button-danger-solid-foreground);--s-button-foreground:var(--s-button-danger-foreground)}.s-button[data-s-tone=contrast][data-v-52ad38b1]{--s-button-accent:var(--s-button-contrast-accent);--s-button-solid-background:var(--s-button-contrast-solid-background);--s-button-solid-background-hover:var(--s-button-contrast-solid-background-hover);--s-button-solid-background-active:var(--s-button-contrast-solid-background-active);--s-button-on-solid:var(--s-button-contrast-solid-foreground);--s-button-foreground:var(--s-button-contrast-foreground);--s-button-outline:var(--color-surface-500)}.s-button[data-appearance=solid][data-v-52ad38b1]{border-color:var(--s-button-solid-background);background:var(--s-button-solid-background);box-shadow:var(--s-elevation-control);color:var(--s-button-on-solid)}.s-button[data-appearance=solid][data-v-52ad38b1]:hover:not(:disabled){border-color:var(--s-button-solid-background-hover);background:var(--s-button-solid-background-hover)}.s-button[aria-disabled=true][data-v-52ad38b1]{pointer-events:none}.s-button[data-appearance=solid][data-v-52ad38b1]:active:not(:disabled){border-color:var(--s-button-solid-background-active);background:var(--s-button-solid-background-active)}.s-button[data-appearance=soft][data-v-52ad38b1]{background:var(--s-button-soft-background);color:var(--s-button-foreground)}.s-button[data-appearance=soft][data-v-52ad38b1]:hover:not(:disabled){background:var(--s-button-accent)}@supports (color:color-mix(in lab, red, red)){.s-button[data-appearance=soft][data-v-52ad38b1]:hover:not(:disabled){background:color-mix(in srgb, var(--s-button-accent) 20%, transparent)}}.s-button[data-appearance=outline][data-v-52ad38b1]{border-color:var(--s-button-outline);color:var(--s-button-foreground);background:0 0}.s-button[data-appearance=outline][data-v-52ad38b1]:hover:not(:disabled),.s-button[data-appearance=ghost][data-v-52ad38b1]:hover:not(:disabled){background:var(--s-button-hover-background)}.s-button[data-hover-surface=parent][data-appearance=ghost][data-v-52ad38b1]:hover:not(:disabled){background:0 0}.s-button[data-appearance=ghost][data-v-52ad38b1],.s-button[data-appearance=text][data-v-52ad38b1]{box-shadow:none;color:var(--s-button-foreground);background:0 0}.s-button[data-appearance=text][data-v-52ad38b1]{padding-inline:.25rem}.s-button[data-appearance=text][data-v-52ad38b1]:hover:not(:disabled){text-decoration:underline}.s-button[data-v-52ad38b1]:focus-visible{z-index:var(--s-layer-focused-control);outline:var(--s-focus-ring-width) solid var(--s-button-accent);outline-offset:var(--s-focus-ring-offset)}.s-button[data-v-52ad38b1]:active:not(:disabled){transform:translateY(1px)}.s-button[aria-pressed=true][data-v-52ad38b1],.s-button[aria-pressed=mixed][data-v-52ad38b1]{box-shadow:0 0 0 2px var(--s-button-accent)}@supports (color:color-mix(in lab, red, red)){.s-button[aria-pressed=true][data-v-52ad38b1],.s-button[aria-pressed=mixed][data-v-52ad38b1]{box-shadow:0 0 0 2px color-mix(in srgb, var(--s-button-accent) 30%, transparent)}}.s-button[data-appearance=ghost][aria-current=page][data-v-52ad38b1],.s-button[data-appearance=soft][aria-current=page][data-v-52ad38b1]{background:var(--s-button-soft-background);color:var(--s-button-foreground)}.s-button[data-v-52ad38b1]:disabled,.s-button[aria-disabled=true][data-v-52ad38b1]{background:var(--s-button-disabled-background);box-shadow:none;color:var(--s-button-disabled-foreground);cursor:not-allowed;border-color:#0000}.s-button[data-appearance=ghost][data-v-52ad38b1]:disabled,.s-button[data-appearance=text][data-v-52ad38b1]:disabled{background:0 0}.s-button[data-loading=true][data-v-52ad38b1]{cursor:wait;opacity:.75}.s-button[data-loading=true] .s-button__content[data-v-52ad38b1]{opacity:0}.s-button__content[data-v-52ad38b1]{justify-content:center;align-items:center;gap:var(--s-space-control-gap);flex-shrink:0;min-width:0;display:inline-flex}.s-button[data-width=full][data-v-52ad38b1]{width:100%;display:flex}.s-button[data-width=fit][data-v-52ad38b1]{width:fit-content}.s-button[data-width=full] .s-button__content[data-v-52ad38b1]{width:100%}.s-button[data-content-align=start] .s-button__content[data-v-52ad38b1]{text-align:left;justify-content:flex-start}.s-button[data-content-align=end] .s-button__content[data-v-52ad38b1]{text-align:right;justify-content:flex-end}.s-button[data-content-align=between] .s-button__content[data-v-52ad38b1]{text-align:left;justify-content:space-between}.s-button[data-shape=pill][data-v-52ad38b1],.s-button[data-shape=circle][data-v-52ad38b1]{border-radius:var(--s-radius-pill)}.s-button[data-shape=square][data-v-52ad38b1],.s-button[data-shape=row][data-v-52ad38b1]{border-radius:var(--radius-xs)}.s-button[data-shape=row][data-v-52ad38b1]{width:100%}.s-button__label[data-v-52ad38b1]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.s-button__badge-slot[data-v-52ad38b1]{margin-left:auto;display:inline-flex}.s-button__shortcut[data-v-52ad38b1]{text-align:right;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 4);line-height:calc(var(--spacing,.25rem) * 4);white-space:nowrap;color:var(--color-surface-400);margin-left:auto}.dark{color:var(--color-surface-500)}.s-button__icon[data-v-52ad38b1]{width:var(--s-icon-size-xs);height:var(--s-icon-size-xs);flex:none}.s-button[data-size=lg] .s-button__icon[data-v-52ad38b1]{width:var(--s-icon-size-sm);height:var(--s-icon-size-sm)}.s-button[data-icon-size=large] .s-button__icon[data-v-52ad38b1]{width:var(--s-icon-size-md);height:var(--s-icon-size-md)}.s-button__loader[data-v-52ad38b1]{display:inline-flex;position:absolute}.s-button__disclosure-icon[data-v-52ad38b1]{transition:transform var(--s-motion-fast) ease}.s-button__disclosure-icon[data-expanded=true][data-v-52ad38b1]{transform:rotate(90deg)}.s-button__disclosure-icon>svg[data-v-52ad38b1]{width:100%;height:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-627a8628],[data-v-627a8628]:before,[data-v-627a8628]:after,[data-v-627a8628]::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-tracking:initial;--tw-leading:initial}}}.s-choice-cards[data-v-627a8628]{gap:.75rem;display:grid}.s-choice-cards[data-columns=auto][data-v-627a8628]{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.s-choice-cards[data-columns="2"][data-v-627a8628]{grid-template-columns:repeat(2,minmax(0,1fr))}.s-choice-cards[data-columns="3"][data-v-627a8628]{grid-template-columns:repeat(3,minmax(0,1fr))}.s-choice-card[data-v-627a8628]{min-height:calc(var(--spacing,.25rem) * 28);align-items:flex-start;gap:calc(var(--spacing,.25rem) * 2);border-radius:var(--radius-2xl,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-surface-300,#cbd5e1);background-color:var(--color-surface-0,#fff);min-width:0;padding:calc(var(--spacing,.25rem) * 4);text-align:left;color:var(--color-surface-800,#1e293b);flex-direction:column;display:flex;position:relative;overflow:hidden}@media (hover:hover){.s-choice-card[data-v-627a8628]:hover{border-color:var(--color-primary-300,#93c5fd);background-color:#eff6ff4d}@supports (color:color-mix(in lab, red, red)){.s-choice-card[data-v-627a8628]:hover{background-color:color-mix(in oklab, var(--color-primary-50,#eff6ff) 30%, transparent)}}}.s-choice-card[data-v-627a8628]:disabled{cursor:not-allowed;opacity:.5}.s-choice-card[data-v-627a8628]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155);background-color:var(--color-surface-900,#0f172a);color:var(--color-surface-100,#f1f5f9)}.s-choice-card[data-v-627a8628]:focus-visible{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-color);outline-offset:var(--s-focus-ring-offset)}.s-choice-card[aria-checked=true][data-v-627a8628]{border-color:var(--color-primary-500,#3b82f6);--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:#3b82f633}@supports (color:color-mix(in lab, red, red)){.s-choice-card[aria-checked=true][data-v-627a8628]{--tw-ring-color:color-mix(in oklab, var(--color-primary-500,#3b82f6) 20%, transparent)}}.s-choice-card__kicker[data-v-627a8628]{--tw-font-weight:var(--font-weight-semibold,600);font-size:.7rem;font-weight:var(--font-weight-semibold,600);--tw-tracking:var(--tracking-wide,.025em);letter-spacing:var(--tracking-wide,.025em);color:var(--color-surface-500,#64748b);text-transform:uppercase}.s-choice-card__title[data-v-627a8628]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600)}.s-choice-card__description[data-v-627a8628]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5);color:var(--color-surface-500,#64748b)}.s-choice-card__meta[data-v-627a8628]{font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 4);line-height:calc(var(--spacing,.25rem) * 4);color:var(--color-surface-500,#64748b);margin-top:auto}.s-choice-card__mark[data-v-627a8628]{top:calc(var(--spacing,.25rem) * 4);right:calc(var(--spacing,.25rem) * 4);height:calc(var(--spacing,.25rem) * 6);width:calc(var(--spacing,.25rem) * 6);background-color:var(--color-primary-100,#dbeafe);--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--color-primary-600,#2563eb);border-radius:2147483647px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.s-choice-cards[data-density=compact] .s-choice-card[data-v-627a8628]{min-height:calc(var(--spacing,.25rem) * 24);padding:calc(var(--spacing,.25rem) * 3)}.s-choice-cards[aria-readonly=true] .s-choice-card[data-v-627a8628]{cursor:default}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- .s-menu-surface[data-v-bc7c7be4]{border-radius:var(--radius-xl,1.5rem);padding:calc(var(--spacing,.25rem) * 1.5);margin:0}.s-menu-surface[data-v-bc7c7be4]:focus{--tw-outline-style:none;outline-style:none}.s-menu-surface[data-v-bc7c7be4]{background:var(--s-floating-surface);color:var(--s-floating-foreground);box-shadow:0 0 0 1px var(--s-floating-outline), var(--s-elevation-floating);width:var(--s-menu-surface-width);min-width:var(--s-menu-surface-min-width);max-width:var(--s-menu-surface-max-width)}.s-menu-surface[data-density=compact][data-v-bc7c7be4]{min-width:calc(var(--spacing,.25rem) * 40);border-radius:var(--radius-md,.75rem);padding:var(--spacing,.25rem)}.s-menu-surface[data-orientation=horizontal][data-v-bc7c7be4]{gap:var(--spacing,.25rem);max-width:100%;display:flex;overflow-x:auto}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-c76fa058],[data-v-c76fa058]:before,[data-v-c76fa058]:after,[data-v-c76fa058]::backdrop{--tw-font-weight:initial;--tw-leading:initial;--tw-border-style:solid}}}.s-status[data-v-c76fa058]{--tw-font-weight:var(--font-weight-medium,500);min-width:0;font-weight:var(--font-weight-medium,500);align-items:center;display:inline-flex}.s-status[data-size=xs][data-v-c76fa058]{gap:var(--spacing,.25rem);--tw-leading:calc(var(--spacing,.25rem) * 4);font-size:10px;line-height:calc(var(--spacing,.25rem) * 4)}.s-status[data-size=sm][data-v-c76fa058]{gap:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-leading:calc(var(--spacing,.25rem) * 4);line-height:calc(var(--spacing,.25rem) * 4)}.s-status[data-size=md][data-v-c76fa058]{gap:calc(var(--spacing,.25rem) * 1.5);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:calc(var(--spacing,.25rem) * 5);line-height:calc(var(--spacing,.25rem) * 5)}.s-status[data-appearance=soft][data-v-c76fa058]{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * .5);border-width:1px;border-radius:2147483647px}.s-status__icon[data-v-c76fa058]{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.s-status[data-size=xs] .s-status__icon[data-v-c76fa058]{height:calc(var(--spacing,.25rem) * 3);width:calc(var(--spacing,.25rem) * 3)}.s-status[data-size=sm] .s-status__icon[data-v-c76fa058]{height:calc(var(--spacing,.25rem) * 3.5);width:calc(var(--spacing,.25rem) * 3.5)}.s-status[data-size=md] .s-status__icon[data-v-c76fa058]{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4)}.s-status__icon-graphic[data-v-c76fa058]{width:100%;height:100%}.s-status__label[data-v-c76fa058]{overflow-wrap:anywhere;min-width:0}.s-status[data-label-visibility=sr-only] .s-status__label[data-v-c76fa058]{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.s-status[data-s-tone=neutral][data-v-c76fa058]{color:var(--color-surface-500,#64748b)}.s-status[data-s-tone=neutral][data-v-c76fa058]:where(.dark,.dark *){color:var(--color-surface-400,#94a3b8)}.s-status[data-s-tone=info][data-v-c76fa058]{color:var(--color-info-700,#1d4ed8)}.s-status[data-s-tone=info][data-v-c76fa058]:where(.dark,.dark *){color:var(--color-info-300,#93c5fd)}.s-status[data-s-tone=success][data-v-c76fa058]{color:var(--color-success-700,#15803d)}.s-status[data-s-tone=success][data-v-c76fa058]:where(.dark,.dark *){color:var(--color-success-300,#86efac)}.s-status[data-s-tone=warn][data-v-c76fa058]{color:var(--color-warn-700,#c2410c)}.s-status[data-s-tone=warn][data-v-c76fa058]:where(.dark,.dark *){color:var(--color-warn-300,#fdba74)}.s-status[data-s-tone=danger][data-v-c76fa058]{color:var(--color-danger-700,#b91c1c)}.s-status[data-s-tone=danger][data-v-c76fa058]:where(.dark,.dark *){color:var(--color-danger-300,#fca5a5)}.s-status[data-appearance=soft][data-s-tone=neutral][data-v-c76fa058]{border-color:var(--color-surface-200,#e2e8f0);background-color:var(--color-surface-100,#f1f5f9)}.s-status[data-appearance=soft][data-s-tone=neutral][data-v-c76fa058]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155);background-color:var(--color-surface-800,#1e293b)}.s-status[data-appearance=soft][data-s-tone=info][data-v-c76fa058]{border-color:var(--color-info-200,#bfdbfe);background-color:var(--color-info-50,#eff6ff)}.s-status[data-appearance=soft][data-s-tone=info][data-v-c76fa058]:where(.dark,.dark *){border-color:var(--color-info-800,#1e40af);background-color:var(--color-info-950,#172554)}.s-status[data-appearance=soft][data-s-tone=success][data-v-c76fa058]{border-color:var(--color-success-200,#bbf7d0);background-color:var(--color-success-50,#f0fdf4)}.s-status[data-appearance=soft][data-s-tone=success][data-v-c76fa058]:where(.dark,.dark *){border-color:var(--color-success-800,#166534);background-color:var(--color-success-950,#052e16)}.s-status[data-appearance=soft][data-s-tone=warn][data-v-c76fa058]{border-color:var(--color-warn-200,#fed7aa);background-color:var(--color-warn-50,#fff7ed)}.s-status[data-appearance=soft][data-s-tone=warn][data-v-c76fa058]:where(.dark,.dark *){border-color:var(--color-warn-800,#9a3412);background-color:var(--color-warn-950,#431407)}.s-status[data-appearance=soft][data-s-tone=danger][data-v-c76fa058]{border-color:var(--color-danger-200,#fecaca);background-color:var(--color-danger-50,#fef2f2)}.s-status[data-appearance=soft][data-s-tone=danger][data-v-c76fa058]:where(.dark,.dark *){border-color:var(--color-danger-800,#991b1b);background-color:var(--color-danger-950,#450a0a)}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- .s-virtual-list[data-v-1717877d]{overflow-anchor:none;width:100%;min-width:0}.s-virtual-list[data-v-1717877d]:focus-visible{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-strong-color);outline-offset:var(--s-focus-ring-inset-offset)}.s-virtual-list__spacer[data-v-1717877d]{pointer-events:none;width:100%}.s-virtual-list__item[data-v-1717877d]{box-sizing:border-box;width:100%;min-width:0}.s-virtual-list__item[data-v-1717877d]:focus-visible{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-strong-color);outline-offset:var(--s-focus-ring-inset-offset)}