@trading-game/design-intelligence-layer 0.8.8 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -53,10 +53,11 @@ cp node_modules/@trading-game/design-intelligence-layer/guides/rules/design-syst
53
53
  ## Step 3 — Core rules summary
54
54
 
55
55
  1. **Check before building** — if a component exists in `@trading-game/design-intelligence-layer`, import it. Never re-implement it.
56
- 2. **Tokens only** — use semantic token classes (`bg-background`, `text-on-prominent`, `border-border`, etc.). Never hardcode hex values, raw Tailwind palette colors, or CSS variables.
56
+ 2. **Tokens only** — use semantic token classes (`bg-prominent`, `text-on-prominent`, `border-border`, etc.). Never hardcode hex values, raw Tailwind palette colors, or CSS variables.
57
57
  3. **Design principles and accessibility first** — every screen must reflect the 8 design principles and meet the accessibility standards (WCAG 2.1 AA). Run both checklists before shipping.
58
58
  4. **No separate installs** — do not install `lucide-react`, `tailwindcss`, or other bundled dependencies separately.
59
59
  5. **After a version bump** — re-copy the rules file into `.cursor/rules/`, check for stale local component copies, and align them with the package.
60
+ 6. **Blocks are playground-only** — Blocks (e.g. NavBar) appear in the playground's Blocks tab but are **not** exported from the package. Do not try to import them. To build a block pattern in a consuming project, compose it manually using package components and design tokens. See `guides/design-system-guide/trading-game-ds-guide.md` Section 8.5.
60
61
 
61
62
  ---
62
63
 
package/README.md CHANGED
@@ -155,6 +155,17 @@ npm install react react-dom tailwindcss
155
155
 
156
156
  ---
157
157
 
158
+ ## Blocks
159
+
160
+ Blocks are pre-composed UI patterns built from design system primitives. They are demonstrated in the **Blocks** tab of the development playground and are **not** exported from the npm package — import the underlying components directly if you need to use them.
161
+
162
+ | Block | Variants | Description |
163
+ |---|---|---|
164
+ | NavBar | Desktop, Mobile (closed), Mobile (open) | Landing page top navigation bar. Logo + ghost nav links (Products, Use Cases, Docs, Blog, FAQ) + Sign in / Sign up CTAs. |
165
+ | Hero | Type 1 (Desktop + Mobile), Type 2 | Landing page hero sections. Type 1: tagline pill + heading + body + CTAs left, image right (responsive). Type 2: centred single-column, tagline pill + heading + body + primary CTA with arrow icon, no image. |
166
+
167
+ ---
168
+
158
169
  ## Button variants and sizes
159
170
 
160
171
  ```tsx
@@ -242,7 +253,7 @@ All tokens are CSS custom properties, loaded automatically via `@trading-game/de
242
253
 
243
254
  | Tailwind class | CSS variable | Value | Usage |
244
255
  |---|---|---|---|
245
- | `bg-background` | `--background` | `#FFFFFF` | Page background |
256
+ | `bg-prominent` | `--prominent` | `#FFFFFF` | Page background |
246
257
  | `bg-card` | `--card` | `#FFFFFF` | Card/panel surface |
247
258
  | `bg-popover` | `--popover` | `#FFFFFF` | Popover/dropdown surface |
248
259
  | `bg-subtle` | `--subtle` | `#F5F5F5` | Subtle tinted surface |
@@ -319,7 +330,7 @@ Opacity on tokens is allowed and encouraged:
319
330
  ✅ ring-ring/10 → ring at 10% opacity
320
331
 
321
332
  ❌ bg-black/50 → NOT a token, use bg-overlay instead
322
- ❌ bg-white → NOT a token, use bg-background or bg-card
333
+ ❌ bg-white → NOT a token, use bg-prominent or bg-card
323
334
  ```
324
335
 
325
336
  ### Primitive alpha scales
@@ -449,7 +460,7 @@ This project uses @trading-game/design-intelligence-layer. Before writing any UI
449
460
  3. Read node_modules/@trading-game/design-intelligence-layer/guides/personas/trading-game-player-field-guide.md — understand the 3 player modes (Edge Seeker, System Runner, Public Predictor) that shape all copy and UX
450
461
  4. Read node_modules/@trading-game/design-intelligence-layer/guides/tone-of-voice/trading-game-tone-of-voice-and-campaign-brief.md — apply the voice, campaign territories, and mirror test for all player-facing copy
451
462
  5. Check if the component exists in the package — import it, don't re-implement
452
- 6. Use only design token classes (bg-background, text-on-prominent, border-border-subtle, etc.) — no hardcoded hex or raw Tailwind palette colors
463
+ 6. Use only design token classes (bg-prominent, text-on-prominent, border-border-subtle, etc.) — no hardcoded hex or raw Tailwind palette colors
453
464
  7. Do not install lucide-react, tailwindcss, or other bundled dependencies separately
454
465
  8. If no token exists for a value, ask before using a hardcoded value
455
466
  9. After upgrading the package: prefer package imports over local copies of components; if replacing local UI code with the package version, tell the user what was overwritten; re-copy guides/rules/design-system-consuming-project.mdc into .cursor/rules if using Cursor
@@ -465,7 +476,7 @@ See node_modules/@trading-game/design-intelligence-layer/README.md for complete
465
476
  | Wrong | Right | Why |
466
477
  |---|---|---|
467
478
  | `bg-gray-100` | `bg-subtle` | Raw Tailwind palette — use tokens |
468
- | `bg-white` | `bg-background` or `bg-card` | Not a semantic token |
479
+ | `bg-white` | `bg-prominent` or `bg-card` | Not a semantic token |
469
480
  | `text-white` | `text-on-prominent-static-inverse` | Use the semantic inverse token |
470
481
  | `text-black` | `text-on-prominent` | Not a semantic token |
471
482
  | `bg-black/50` | `bg-overlay` | Overlay has its own token |
package/dist/index.cjs CHANGED
@@ -524,7 +524,7 @@ var import_class_variance_authority2 = require("class-variance-authority");
524
524
  var import_radix_ui2 = require("radix-ui");
525
525
  var import_jsx_runtime3 = require("react/jsx-runtime");
526
526
  var buttonVariants = (0, import_class_variance_authority2.cva)(
527
- "inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 font-display font-bold",
527
+ "inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:opacity-60 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 font-display font-bold",
528
528
  {
529
529
  variants: {
530
530
  variant: {
@@ -626,7 +626,7 @@ function AlertDialogContent(_a) {
626
626
  "data-slot": "alert-dialog-content",
627
627
  "data-size": size,
628
628
  className: cn(
629
- "group/alert-dialog-content fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-sm border border-border-subtle bg-background p-6 shadow-lg duration-base data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg",
629
+ "group/alert-dialog-content fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-sm border border-border-subtle bg-prominent p-6 shadow-lg duration-base data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg",
630
630
  className
631
631
  )
632
632
  }, props)
@@ -819,7 +819,7 @@ function AvatarBadge(_a) {
819
819
  __spreadValues({
820
820
  "data-slot": "avatar-badge",
821
821
  className: cn(
822
- "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-on-prominent-static-inverse ring-2 ring-background select-none",
822
+ "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-on-prominent-static-inverse ring-2 ring-prominent select-none",
823
823
  "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
824
824
  "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
825
825
  "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
@@ -836,7 +836,7 @@ function AvatarGroup(_a) {
836
836
  __spreadValues({
837
837
  "data-slot": "avatar-group",
838
838
  className: cn(
839
- "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
839
+ "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-prominent",
840
840
  className
841
841
  )
842
842
  }, props)
@@ -853,7 +853,7 @@ function AvatarGroupCount(_a) {
853
853
  __spreadValues({
854
854
  "data-slot": "avatar-group-count",
855
855
  className: cn(
856
- "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-subtle text-sm text-on-subtle ring-2 ring-background group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:[width:var(--avatar-size-xl)] group-has-data-[size=xl]/avatar-group:[height:var(--avatar-size-xl)] [&>svg]:size-4 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6",
856
+ "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-subtle text-sm text-on-subtle ring-2 ring-prominent group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:[width:var(--avatar-size-xl)] group-has-data-[size=xl]/avatar-group:[height:var(--avatar-size-xl)] [&>svg]:size-4 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6",
857
857
  className
858
858
  )
859
859
  }, props)
@@ -1052,7 +1052,7 @@ function Calendar(_a) {
1052
1052
  __spreadValues({
1053
1053
  showOutsideDays,
1054
1054
  className: cn(
1055
- "group/calendar bg-background p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
1055
+ "group/calendar bg-prominent p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
1056
1056
  String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
1057
1057
  String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
1058
1058
  className
@@ -1507,7 +1507,7 @@ function CarouselNext(_a) {
1507
1507
  var React3 = __toESM(require("react"), 1);
1508
1508
  var RechartsPrimitive = __toESM(require("recharts"), 1);
1509
1509
  var import_jsx_runtime12 = require("react/jsx-runtime");
1510
- var THEMES = { light: "", dark: ".dark" };
1510
+ var THEMES = { light: "" };
1511
1511
  var ChartContext = React3.createContext(null);
1512
1512
  function useChart() {
1513
1513
  const context = React3.useContext(ChartContext);
@@ -1623,7 +1623,7 @@ function ChartTooltipContent({
1623
1623
  "div",
1624
1624
  {
1625
1625
  className: cn(
1626
- "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border-subtle/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
1626
+ "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border-subtle/50 bg-prominent px-2.5 py-1.5 text-xs shadow-xl",
1627
1627
  className
1628
1628
  ),
1629
1629
  children: [
@@ -1760,7 +1760,7 @@ function Checkbox(_a) {
1760
1760
  __spreadProps(__spreadValues({
1761
1761
  "data-slot": "checkbox",
1762
1762
  className: cn(
1763
- "peer size-4 shrink-0 rounded-[2px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-on-prominent-static-inverse dark:bg-input/30 dark:data-[state=checked]:bg-primary",
1763
+ "peer size-4 shrink-0 rounded-[2px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-on-prominent-static-inverse",
1764
1764
  className
1765
1765
  )
1766
1766
  }, props), {
@@ -1837,7 +1837,7 @@ function Textarea(_a) {
1837
1837
  __spreadValues({
1838
1838
  "data-slot": "textarea",
1839
1839
  className: cn(
1840
- "flex field-sizing-content min-h-16 w-full rounded-sm border border-border-subtle bg-white/5 px-3 py-2 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none placeholder:text-on-muted focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/[0.08] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:ring-destructive/40",
1840
+ "flex field-sizing-content min-h-16 w-full rounded-sm border border-border-subtle bg-white/5 px-3 py-2 text-base text-on-prominent font-body shadow-xs transition-[color,box-shadow] outline-none placeholder:text-on-muted focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/[0.08] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm",
1841
1841
  className
1842
1842
  )
1843
1843
  }, props)
@@ -1864,7 +1864,7 @@ function InputGroup(_a) {
1864
1864
  // Focus state.
1865
1865
  "has-[[data-slot=input-group-control]:focus-visible]:border-primary has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-primary/[0.08]",
1866
1866
  // Error state.
1867
- "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
1867
+ "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20",
1868
1868
  className
1869
1869
  )
1870
1870
  }, props)
@@ -1972,7 +1972,7 @@ function InputGroupInput(_a) {
1972
1972
  __spreadValues({
1973
1973
  "data-slot": "input-group-control",
1974
1974
  className: cn(
1975
- "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
1975
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0",
1976
1976
  className
1977
1977
  )
1978
1978
  }, props)
@@ -1989,7 +1989,7 @@ function InputGroupTextarea(_a) {
1989
1989
  __spreadValues({
1990
1990
  "data-slot": "input-group-control",
1991
1991
  className: cn(
1992
- "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
1992
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0",
1993
1993
  className
1994
1994
  )
1995
1995
  }, props)
@@ -2234,7 +2234,7 @@ function ComboboxChips(_a) {
2234
2234
  __spreadValues({
2235
2235
  "data-slot": "combobox-chips",
2236
2236
  className: cn(
2237
- "flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1.5 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40",
2237
+ "flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1.5",
2238
2238
  className
2239
2239
  )
2240
2240
  }, props)
@@ -2352,7 +2352,7 @@ function DialogContent(_a) {
2352
2352
  __spreadProps(__spreadValues({
2353
2353
  "data-slot": "dialog-content",
2354
2354
  className: cn(
2355
- "fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-sm border border-border-subtle bg-background p-6 shadow-lg duration-base outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",
2355
+ "fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-sm border border-border-subtle bg-prominent p-6 shadow-lg duration-base outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",
2356
2356
  className
2357
2357
  )
2358
2358
  }, props), {
@@ -2362,7 +2362,7 @@ function DialogContent(_a) {
2362
2362
  import_radix_ui10.Dialog.Close,
2363
2363
  {
2364
2364
  "data-slot": "dialog-close",
2365
- className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-on-subtle [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2365
+ className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-prominent transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-on-subtle [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2366
2366
  children: [
2367
2367
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react7.XIcon, {}),
2368
2368
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "sr-only", children: "Close" })
@@ -2718,7 +2718,7 @@ function ContextMenuItem(_a) {
2718
2718
  "data-inset": inset,
2719
2719
  "data-variant": variant,
2720
2720
  className: cn(
2721
- "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-secondary-hover focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
2721
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-secondary-hover focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
2722
2722
  className
2723
2723
  )
2724
2724
  }, props)
@@ -2890,7 +2890,7 @@ function DrawerContent(_a) {
2890
2890
  __spreadProps(__spreadValues({
2891
2891
  "data-slot": "drawer-content",
2892
2892
  className: cn(
2893
- "group/drawer-content fixed z-50 flex h-auto flex-col bg-background",
2893
+ "group/drawer-content fixed z-50 flex h-auto flex-col bg-prominent",
2894
2894
  "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-border-subtle",
2895
2895
  "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-border-subtle",
2896
2896
  "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-border-subtle data-[vaul-drawer-direction=right]:sm:max-w-sm",
@@ -3020,7 +3020,7 @@ function DropdownMenuItem(_a) {
3020
3020
  "data-inset": inset,
3021
3021
  "data-variant": variant,
3022
3022
  className: cn(
3023
- "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-secondary-hover focus:text-on-prominent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
3023
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-secondary-hover focus:text-on-prominent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
3024
3024
  className
3025
3025
  )
3026
3026
  }, props)
@@ -3453,7 +3453,7 @@ function FieldLabel(_a) {
3453
3453
  className: cn(
3454
3454
  "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
3455
3455
  "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
3456
- "has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5 dark:has-data-[state=checked]:bg-primary/10",
3456
+ "has-data-[state=checked]:border-primary has-data-[state=checked]:bg-primary/5",
3457
3457
  className
3458
3458
  )
3459
3459
  }, props)
@@ -3510,7 +3510,7 @@ function FieldSeparator(_a) {
3510
3510
  children && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3511
3511
  "span",
3512
3512
  {
3513
- className: "relative mx-auto block w-fit bg-background px-2 text-on-subtle",
3513
+ className: "relative mx-auto block w-fit bg-prominent px-2 text-on-subtle",
3514
3514
  "data-slot": "field-separator-content",
3515
3515
  children
3516
3516
  }
@@ -3756,7 +3756,7 @@ function InputOTPSlot(_a) {
3756
3756
  "data-slot": "input-otp-slot",
3757
3757
  "data-active": isActive,
3758
3758
  className: cn(
3759
- "relative flex h-9 w-9 items-center justify-center border border-border-subtle bg-white/5 text-sm font-body text-on-prominent shadow-xs transition-[color,box-shadow] outline-none first:rounded-l-sm last:rounded-r-sm aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 data-[active=true]:z-10 data-[active=true]:border-primary data-[active=true]:ring-[3px] data-[active=true]:ring-primary/[0.08] data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40",
3759
+ "relative flex h-9 w-9 items-center justify-center border border-border-subtle bg-white/5 text-sm font-body text-on-prominent shadow-xs transition-[color,box-shadow] outline-none first:rounded-l-sm last:rounded-r-sm aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[active=true]:z-10 data-[active=true]:border-primary data-[active=true]:ring-[3px] data-[active=true]:ring-primary/[0.08] data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20",
3760
3760
  className
3761
3761
  )
3762
3762
  }, props), {
@@ -4037,7 +4037,7 @@ function Menubar(_a) {
4037
4037
  __spreadValues({
4038
4038
  "data-slot": "menubar",
4039
4039
  className: cn(
4040
- "flex h-9 items-center gap-1 rounded-md border border-border-subtle bg-background p-1 shadow-xs",
4040
+ "flex h-9 items-center gap-1 rounded-md border border-border-subtle bg-prominent p-1 shadow-xs",
4041
4041
  className
4042
4042
  )
4043
4043
  }, props)
@@ -4119,7 +4119,7 @@ function MenubarItem(_a) {
4119
4119
  "data-inset": inset,
4120
4120
  "data-variant": variant,
4121
4121
  className: cn(
4122
- "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none hover:bg-secondary-hover hover:text-on-prominent focus:bg-secondary-hover focus:text-on-prominent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
4122
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none hover:bg-secondary-hover hover:text-on-prominent focus:bg-secondary-hover focus:text-on-prominent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[variant=destructive]:*:[svg]:text-destructive!",
4123
4123
  className
4124
4124
  )
4125
4125
  }, props)
@@ -4299,7 +4299,7 @@ function NativeSelect(_a) {
4299
4299
  "data-slot": "native-select",
4300
4300
  "data-size": size,
4301
4301
  className: cn(
4302
- "h-9 w-full min-w-0 appearance-none rounded-md border border-input bg-transparent px-3 py-2 pr-9 text-sm shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-on-prominent-static-inverse placeholder:text-on-subtle disabled:pointer-events-none disabled:cursor-not-allowed data-[size=sm]:h-8 data-[size=sm]:py-1 dark:bg-input/30 dark:hover:bg-input/50",
4302
+ "h-9 w-full min-w-0 appearance-none rounded-md border border-input bg-transparent px-3 py-2 pr-9 text-sm shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-on-prominent-static-inverse placeholder:text-on-subtle disabled:pointer-events-none disabled:cursor-not-allowed data-[size=sm]:h-8 data-[size=sm]:py-1",
4303
4303
  "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
4304
4304
  className
4305
4305
  )
@@ -4400,7 +4400,7 @@ function NavigationMenuItem(_a) {
4400
4400
  );
4401
4401
  }
4402
4402
  var navigationMenuTriggerStyle = (0, import_class_variance_authority9.cva)(
4403
- "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-[color,box-shadow] outline-none hover:bg-secondary-hover hover:text-on-prominent focus:bg-secondary-hover focus:text-on-prominent focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-secondary-hover data-[state=open]:text-on-prominent data-[state=open]:hover:bg-secondary-hover data-[state=open]:focus:bg-secondary-hover"
4403
+ "group inline-flex h-9 w-max items-center justify-center rounded-md bg-prominent px-4 py-2 text-sm font-medium transition-[color,box-shadow] outline-none hover:bg-secondary-hover hover:text-on-prominent focus:bg-secondary-hover focus:text-on-prominent focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-secondary-hover data-[state=open]:text-on-prominent data-[state=open]:hover:bg-secondary-hover data-[state=open]:focus:bg-secondary-hover"
4404
4404
  );
4405
4405
  function NavigationMenuTrigger(_a) {
4406
4406
  var _b = _a, {
@@ -4738,7 +4738,7 @@ function RadioGroupItem(_a) {
4738
4738
  __spreadProps(__spreadValues({
4739
4739
  "data-slot": "radio-group-item",
4740
4740
  className: cn(
4741
- "aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
4741
+ "aspect-square size-4 shrink-0 rounded-full border border-input text-primary shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20",
4742
4742
  className
4743
4743
  )
4744
4744
  }, props), {
@@ -4900,7 +4900,7 @@ function SelectTrigger(_a) {
4900
4900
  "data-readonly": readOnly ? "" : void 0,
4901
4901
  disabled: readOnly || props.disabled,
4902
4902
  className: cn(
4903
- "flex w-fit items-center justify-between gap-2 rounded-sm border border-input bg-background appearance-none px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-on-subtle data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[readonly]:cursor-default data-[readonly]:opacity-100",
4903
+ "flex w-fit items-center justify-between gap-2 rounded-sm border border-input bg-prominent appearance-none px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-on-subtle data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-on-subtle data-[readonly]:cursor-default data-[readonly]:opacity-100",
4904
4904
  className
4905
4905
  )
4906
4906
  }, props), {
@@ -5106,7 +5106,7 @@ function SheetContent(_a) {
5106
5106
  __spreadProps(__spreadValues({
5107
5107
  "data-slot": "sheet-content",
5108
5108
  className: cn(
5109
- "fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-standard data-[state=closed]:animate-out data-[state=closed]:duration-slow data-[state=open]:animate-in data-[state=open]:duration-open",
5109
+ "fixed z-50 flex flex-col gap-4 bg-prominent shadow-lg transition ease-standard data-[state=closed]:animate-out data-[state=closed]:duration-slow data-[state=open]:animate-in data-[state=open]:duration-open",
5110
5110
  side === "right" && "inset-y-0 right-0 h-full w-3/4 border-l border-border-subtle data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
5111
5111
  side === "left" && "inset-y-0 left-0 h-full w-3/4 border-r border-border-subtle data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
5112
5112
  side === "top" && "inset-x-0 top-0 h-auto border-b border-border-subtle data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
@@ -5116,7 +5116,7 @@ function SheetContent(_a) {
5116
5116
  }, props), {
5117
5117
  children: [
5118
5118
  children,
5119
- showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_radix_ui27.Dialog.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
5119
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_radix_ui27.Dialog.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-prominent transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
5120
5120
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react19.XIcon, { className: "size-4" }),
5121
5121
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "sr-only", children: "Close" })
5122
5122
  ] })
@@ -5514,7 +5514,7 @@ function SidebarInset(_a) {
5514
5514
  __spreadValues({
5515
5515
  "data-slot": "sidebar-inset",
5516
5516
  className: cn(
5517
- "relative flex w-full flex-1 flex-col bg-background",
5517
+ "relative flex w-full flex-1 flex-col bg-prominent",
5518
5518
  "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
5519
5519
  className
5520
5520
  )
@@ -5532,7 +5532,7 @@ function SidebarInput(_a) {
5532
5532
  __spreadValues({
5533
5533
  "data-slot": "sidebar-input",
5534
5534
  "data-sidebar": "input",
5535
- className: cn("h-8 w-full bg-background shadow-none", className)
5535
+ className: cn("h-8 w-full bg-prominent shadow-none", className)
5536
5536
  }, props)
5537
5537
  );
5538
5538
  }
@@ -5687,7 +5687,7 @@ var sidebarMenuButtonVariants = (0, import_class_variance_authority10.cva)(
5687
5687
  variants: {
5688
5688
  variant: {
5689
5689
  default: "",
5690
- outline: "bg-background ring-1 ring-sidebar-border hover:ring-primary/40 data-[active=true]:ring-primary/40"
5690
+ outline: "bg-prominent ring-1 ring-sidebar-border hover:ring-primary/40 data-[active=true]:ring-primary/40"
5691
5691
  },
5692
5692
  size: {
5693
5693
  default: "h-8 text-sm",
@@ -6058,7 +6058,7 @@ function Switch(_a) {
6058
6058
  "data-slot": "switch",
6059
6059
  "data-size": size,
6060
6060
  className: cn(
6061
- "peer group/switch inline-flex shrink-0 items-center rounded-[6px] border border-transparent p-[3px] shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-6 data-[size=default]:w-11 data-[size=sm]:h-5 data-[size=sm]:w-9 data-[state=checked]:bg-slider-range data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80",
6061
+ "peer group/switch inline-flex shrink-0 items-center rounded-[6px] border border-transparent p-[3px] shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-6 data-[size=default]:w-11 data-[size=sm]:h-5 data-[size=sm]:w-9 data-[state=checked]:bg-slider-range data-[state=unchecked]:bg-input",
6062
6062
  className
6063
6063
  )
6064
6064
  }, props), {
@@ -6322,14 +6322,14 @@ function TicketCard({
6322
6322
  "div",
6323
6323
  {
6324
6324
  "aria-hidden": true,
6325
- className: "pointer-events-none absolute right-0 top-0 z-10 size-5 -translate-y-1/2 translate-x-1/2 rounded-full bg-background"
6325
+ className: "pointer-events-none absolute right-0 top-0 z-10 size-5 -translate-y-1/2 translate-x-1/2 rounded-full bg-prominent"
6326
6326
  }
6327
6327
  ),
6328
6328
  /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6329
6329
  "div",
6330
6330
  {
6331
6331
  "aria-hidden": true,
6332
- className: "pointer-events-none absolute bottom-0 right-0 z-10 size-5 translate-x-1/2 translate-y-1/2 rounded-full bg-background"
6332
+ className: "pointer-events-none absolute bottom-0 right-0 z-10 size-5 translate-x-1/2 translate-y-1/2 rounded-full bg-prominent"
6333
6333
  }
6334
6334
  ),
6335
6335
  /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
@@ -6385,7 +6385,7 @@ var import_class_variance_authority12 = require("class-variance-authority");
6385
6385
  var import_radix_ui33 = require("radix-ui");
6386
6386
  var import_jsx_runtime56 = require("react/jsx-runtime");
6387
6387
  var toggleVariants = (0, import_class_variance_authority12.cva)(
6388
- "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-secondary-hover hover:text-on-prominent focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-secondary-hover data-[state=on]:border-transparent data-[state=on]:text-primary dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
6388
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-secondary-hover hover:text-on-prominent focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-secondary-hover data-[state=on]:border-transparent data-[state=on]:text-primary [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
6389
6389
  {
6390
6390
  variants: {
6391
6391
  variant: {