@brijbyte/agentic-ui 0.0.1 → 0.0.3

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 (173) hide show
  1. package/README.md +183 -111
  2. package/dist/accordion/accordion.css +6 -10
  3. package/dist/accordion/accordion.d.ts +1 -1
  4. package/dist/accordion/accordion.js +1 -1
  5. package/dist/accordion/accordion.module.js.map +1 -1
  6. package/dist/accordion/parts.d.ts +1 -1
  7. package/dist/accordion/parts.js +2 -2
  8. package/dist/alert-dialog/alert-dialog.css +84 -0
  9. package/dist/alert-dialog/alert-dialog.d.ts +44 -0
  10. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -0
  11. package/dist/alert-dialog/alert-dialog.js +46 -0
  12. package/dist/alert-dialog/alert-dialog.js.map +1 -0
  13. package/dist/alert-dialog/alert-dialog.module.css.d.ts +2 -0
  14. package/dist/alert-dialog/alert-dialog.module.js +14 -0
  15. package/dist/alert-dialog/alert-dialog.module.js.map +1 -0
  16. package/dist/alert-dialog/index.d.ts +3 -0
  17. package/dist/alert-dialog/index.js +4 -0
  18. package/dist/alert-dialog/parts.d.ts +28 -0
  19. package/dist/alert-dialog/parts.d.ts.map +1 -0
  20. package/dist/alert-dialog/parts.js +62 -0
  21. package/dist/alert-dialog/parts.js.map +1 -0
  22. package/dist/badge/badge.css +3 -7
  23. package/dist/badge/badge.d.ts +1 -1
  24. package/dist/badge/badge.module.js.map +1 -1
  25. package/dist/button/button.css +36 -22
  26. package/dist/button/button.d.ts +7 -7
  27. package/dist/button/button.js +1 -1
  28. package/dist/button/button.js.map +1 -1
  29. package/dist/button/button.module.js.map +1 -1
  30. package/dist/card/card.css +5 -9
  31. package/dist/card/card.d.ts +1 -1
  32. package/dist/card/card.module.js.map +1 -1
  33. package/dist/checkbox/checkbox.css +3 -7
  34. package/dist/checkbox/checkbox.d.ts +1 -1
  35. package/dist/checkbox/checkbox.js +1 -1
  36. package/dist/checkbox/checkbox.module.js.map +1 -1
  37. package/dist/checkbox/parts.js +1 -1
  38. package/dist/collapsible/collapsible.css +7 -11
  39. package/dist/collapsible/collapsible.d.ts +1 -1
  40. package/dist/collapsible/collapsible.module.js.map +1 -1
  41. package/dist/collapsible/parts.js +1 -1
  42. package/dist/context-menu/context-menu.css +151 -0
  43. package/dist/context-menu/context-menu.d.ts +36 -0
  44. package/dist/context-menu/context-menu.d.ts.map +1 -0
  45. package/dist/context-menu/context-menu.js +54 -0
  46. package/dist/context-menu/context-menu.js.map +1 -0
  47. package/dist/context-menu/context-menu.module.css.d.ts +2 -0
  48. package/dist/context-menu/context-menu.module.js +18 -0
  49. package/dist/context-menu/context-menu.module.js.map +1 -0
  50. package/dist/context-menu/index.d.ts +3 -0
  51. package/dist/context-menu/index.js +4 -0
  52. package/dist/context-menu/parts.d.ts +38 -0
  53. package/dist/context-menu/parts.d.ts.map +1 -0
  54. package/dist/context-menu/parts.js +91 -0
  55. package/dist/context-menu/parts.js.map +1 -0
  56. package/dist/dialog/dialog.css +27 -22
  57. package/dist/dialog/dialog.d.ts +9 -1
  58. package/dist/dialog/dialog.d.ts.map +1 -1
  59. package/dist/dialog/dialog.js +7 -4
  60. package/dist/dialog/dialog.js.map +1 -1
  61. package/dist/dialog/dialog.module.js +2 -0
  62. package/dist/dialog/dialog.module.js.map +1 -1
  63. package/dist/dialog/parts.js +1 -1
  64. package/dist/drawer/drawer.css +9 -13
  65. package/dist/drawer/drawer.d.ts +1 -1
  66. package/dist/drawer/drawer.module.js.map +1 -1
  67. package/dist/drawer/parts.d.ts +1 -1
  68. package/dist/drawer/parts.js +1 -1
  69. package/dist/index.css +1603 -1299
  70. package/dist/index.d.ts +30 -24
  71. package/dist/index.js +41 -32
  72. package/dist/input/input.css +5 -9
  73. package/dist/input/input.js +1 -1
  74. package/dist/input/input.module.js.map +1 -1
  75. package/dist/layer-order.css +22 -0
  76. package/dist/menu/menu.css +13 -17
  77. package/dist/menu/menu.d.ts +1 -1
  78. package/dist/menu/menu.module.js.map +1 -1
  79. package/dist/menu/menuitemshortcut.js +1 -1
  80. package/dist/menu/parts.js +1 -1
  81. package/dist/number-field/number-field.css +12 -16
  82. package/dist/number-field/number-field.d.ts +1 -1
  83. package/dist/number-field/number-field.js +1 -1
  84. package/dist/number-field/number-field.module.js.map +1 -1
  85. package/dist/number-field/parts.js +1 -1
  86. package/dist/progress/parts.js +1 -1
  87. package/dist/progress/progress.css +1 -5
  88. package/dist/progress/progress.module.js.map +1 -1
  89. package/dist/reset.css +6 -6
  90. package/dist/select/parts.js +1 -1
  91. package/dist/select/select.css +14 -16
  92. package/dist/select/select.d.ts +5 -2
  93. package/dist/select/select.d.ts.map +1 -1
  94. package/dist/select/select.js +11 -2
  95. package/dist/select/select.js.map +1 -1
  96. package/dist/select/select.module.js.map +1 -1
  97. package/dist/separator/separator.css +1 -5
  98. package/dist/separator/separator.js +1 -1
  99. package/dist/separator/separator.module.js.map +1 -1
  100. package/dist/slider/index.d.ts +3 -0
  101. package/dist/slider/index.js +4 -0
  102. package/dist/slider/parts.d.ts +38 -0
  103. package/dist/slider/parts.d.ts.map +1 -0
  104. package/dist/slider/parts.js +69 -0
  105. package/dist/slider/parts.js.map +1 -0
  106. package/dist/slider/slider.css +97 -0
  107. package/dist/slider/slider.d.ts +38 -0
  108. package/dist/slider/slider.d.ts.map +1 -0
  109. package/dist/slider/slider.js +41 -0
  110. package/dist/slider/slider.js.map +1 -0
  111. package/dist/slider/slider.module.css.d.ts +2 -0
  112. package/dist/slider/slider.module.js +15 -0
  113. package/dist/slider/slider.module.js.map +1 -0
  114. package/dist/styles/reset.css +6 -6
  115. package/dist/styles/tokens.css +91 -76
  116. package/dist/switch/parts.js +1 -1
  117. package/dist/switch/switch.css +2 -6
  118. package/dist/switch/switch.d.ts +1 -1
  119. package/dist/switch/switch.js +1 -1
  120. package/dist/switch/switch.module.js.map +1 -1
  121. package/dist/tabs/parts.js +1 -1
  122. package/dist/tabs/tabs.css +5 -9
  123. package/dist/tabs/tabs.d.ts +1 -1
  124. package/dist/tabs/tabs.module.js.map +1 -1
  125. package/dist/tailwind-theme.css +23 -23
  126. package/dist/toast/parts.js +1 -1
  127. package/dist/toast/toast.css +11 -15
  128. package/dist/toast/toast.d.ts +1 -1
  129. package/dist/toast/toast.module.js.map +1 -1
  130. package/dist/tokens.css +98 -82
  131. package/dist/tooltip/parts.js +1 -1
  132. package/dist/tooltip/tooltip.css +7 -11
  133. package/dist/tooltip/tooltip.d.ts +1 -1
  134. package/dist/tooltip/tooltip.module.js.map +1 -1
  135. package/package.json +18 -1
  136. package/src/accordion/accordion.module.css +6 -20
  137. package/src/alert-dialog/alert-dialog.module.css +91 -0
  138. package/src/alert-dialog/alert-dialog.tsx +69 -0
  139. package/src/alert-dialog/index.ts +7 -0
  140. package/src/alert-dialog/parts.tsx +73 -0
  141. package/src/badge/badge.module.css +3 -13
  142. package/src/button/button.module.css +44 -64
  143. package/src/button/button.tsx +7 -7
  144. package/src/card/card.module.css +5 -16
  145. package/src/checkbox/checkbox.module.css +3 -14
  146. package/src/collapsible/collapsible.module.css +7 -20
  147. package/src/context-menu/context-menu.module.css +168 -0
  148. package/src/context-menu/context-menu.tsx +75 -0
  149. package/src/context-menu/index.ts +21 -0
  150. package/src/context-menu/parts.tsx +99 -0
  151. package/src/dialog/dialog.module.css +26 -33
  152. package/src/dialog/dialog.tsx +14 -1
  153. package/src/drawer/drawer.module.css +9 -58
  154. package/src/index.ts +21 -185
  155. package/src/input/input.module.css +5 -21
  156. package/src/menu/menu.module.css +13 -43
  157. package/src/number-field/number-field.module.css +12 -28
  158. package/src/progress/progress.module.css +1 -10
  159. package/src/select/select.module.css +14 -35
  160. package/src/select/select.tsx +14 -5
  161. package/src/separator/separator.module.css +1 -5
  162. package/src/slider/index.ts +14 -0
  163. package/src/slider/parts.tsx +90 -0
  164. package/src/slider/slider.module.css +110 -0
  165. package/src/slider/slider.tsx +68 -0
  166. package/src/styles/layer-order.css +22 -0
  167. package/src/styles/reset.css +6 -6
  168. package/src/styles/tailwind-theme.css +23 -23
  169. package/src/styles/tokens.css +98 -82
  170. package/src/switch/switch.module.css +2 -12
  171. package/src/tabs/tabs.module.css +5 -18
  172. package/src/toast/toast.module.css +11 -51
  173. package/src/tooltip/tooltip.module.css +7 -18
@@ -0,0 +1,110 @@
1
+ @layer components {
2
+ .root {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--space-2);
6
+ width: 100%;
7
+ }
8
+
9
+ /* ─── Label + Value row ──────────────────────────────────────── */
10
+
11
+ .header {
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: space-between;
15
+ gap: var(--space-2);
16
+ }
17
+
18
+ .label {
19
+ font-family: var(--font-mono);
20
+ font-size: var(--font-size-xs);
21
+ font-weight: var(--font-weight-medium);
22
+ color: var(--color-secondary);
23
+ letter-spacing: var(--letter-spacing-wide);
24
+ text-transform: uppercase;
25
+ user-select: none;
26
+ }
27
+
28
+ .value {
29
+ font-family: var(--font-mono);
30
+ font-size: var(--font-size-xs);
31
+ color: var(--color-tertiary);
32
+ font-variant-numeric: tabular-nums;
33
+ }
34
+
35
+ /* ─── Control (hit area) ─────────────────────────────────────── */
36
+
37
+ .control {
38
+ display: flex;
39
+ align-items: center;
40
+ width: 100%;
41
+ padding-block: var(--space-2);
42
+ touch-action: none;
43
+ user-select: none;
44
+ cursor: pointer;
45
+ }
46
+
47
+ .control[data-disabled] {
48
+ opacity: 0.44;
49
+ cursor: not-allowed;
50
+ }
51
+
52
+ /* ─── Track ──────────────────────────────────────────────────── */
53
+
54
+ .track {
55
+ position: relative;
56
+ width: 100%;
57
+ height: 4px;
58
+ border-radius: var(--radius-full);
59
+ background-color: var(--color-surface-3);
60
+ border: var(--border-width-base) solid var(--color-line-subtle);
61
+ user-select: none;
62
+ }
63
+
64
+ /* ─── Indicator (filled portion) ────────────────────────────── */
65
+
66
+ .indicator {
67
+ border-radius: var(--radius-full);
68
+ background-color: var(--color-accent);
69
+ user-select: none;
70
+ transition: background-color var(--duration-fast) var(--easing-standard);
71
+ }
72
+
73
+ .root[data-disabled] .indicator {
74
+ background-color: var(--color-tertiary);
75
+ }
76
+
77
+ /* ─── Thumb ──────────────────────────────────────────────────── */
78
+
79
+ .thumb {
80
+ width: 16px;
81
+ height: 16px;
82
+ border-radius: var(--radius-full);
83
+ background-color: var(--color-elevated);
84
+ border: var(--border-width-base) solid var(--color-line);
85
+ box-shadow: var(--shadow-sm);
86
+ user-select: none;
87
+ transition:
88
+ transform var(--duration-fast) var(--easing-spring),
89
+ box-shadow var(--duration-fast) var(--easing-standard),
90
+ border-color var(--duration-fast) var(--easing-standard);
91
+ }
92
+
93
+ /* Grow on drag — gives tactile feedback */
94
+ .thumb[data-dragging] {
95
+ transform: scale(1.2);
96
+ border-color: var(--color-accent);
97
+ box-shadow: var(--shadow-md);
98
+ }
99
+
100
+ /* Focus ring via the nested <input> */
101
+ .thumb:has(:focus-visible) {
102
+ border-color: var(--color-accent);
103
+ box-shadow: var(--shadow-focus);
104
+ }
105
+
106
+ .thumb[data-disabled] {
107
+ cursor: not-allowed;
108
+ background-color: var(--color-surface-3);
109
+ }
110
+ }
@@ -0,0 +1,68 @@
1
+ import type { ReactNode } from "react";
2
+ import { Slider as BaseSlider } from "@base-ui/react/slider";
3
+ import styles from "./slider.module.css";
4
+
5
+ export interface SliderProps {
6
+ value?: number | number[];
7
+ defaultValue?: number | number[];
8
+ onValueChange?: (value: number | number[], eventDetails: unknown) => void;
9
+ onValueCommitted?: (value: number | number[], eventDetails: unknown) => void;
10
+ min?: number;
11
+ max?: number;
12
+ step?: number;
13
+ largeStep?: number;
14
+ disabled?: boolean;
15
+ name?: string;
16
+ orientation?: "horizontal" | "vertical";
17
+ format?: Intl.NumberFormatOptions;
18
+ /** Visible label rendered above the track. */
19
+ label?: ReactNode;
20
+ /** Show the current value next to the label. */
21
+ showValue?: boolean;
22
+ /** Aria-label for single-thumb sliders without a visible label. */
23
+ "aria-label"?: string;
24
+ className?: string;
25
+ }
26
+
27
+ export function Slider({
28
+ label,
29
+ showValue = false,
30
+ className,
31
+ onValueChange,
32
+ onValueCommitted,
33
+ "aria-label": ariaLabel,
34
+ ...props
35
+ }: SliderProps) {
36
+ const isRange = Array.isArray(props.defaultValue ?? props.value);
37
+
38
+ return (
39
+ <BaseSlider.Root
40
+ className={`${styles.root} ${className ?? ""}`}
41
+ onValueChange={onValueChange as never}
42
+ onValueCommitted={onValueCommitted as never}
43
+ {...props}
44
+ >
45
+ {(label || showValue) && (
46
+ <div className={styles.header}>
47
+ {label && <BaseSlider.Label className={styles.label}>{label}</BaseSlider.Label>}
48
+ {showValue && <BaseSlider.Value className={styles.value} />}
49
+ </div>
50
+ )}
51
+ <BaseSlider.Control className={styles.control}>
52
+ <BaseSlider.Track className={styles.track}>
53
+ <BaseSlider.Indicator className={styles.indicator} />
54
+ {isRange ? (
55
+ <>
56
+ <BaseSlider.Thumb index={0} className={styles.thumb} aria-label="Minimum value" />
57
+ <BaseSlider.Thumb index={1} className={styles.thumb} aria-label="Maximum value" />
58
+ </>
59
+ ) : (
60
+ <BaseSlider.Thumb className={styles.thumb} aria-label={ariaLabel} />
61
+ )}
62
+ </BaseSlider.Track>
63
+ </BaseSlider.Control>
64
+ </BaseSlider.Root>
65
+ );
66
+ }
67
+
68
+ export { styles as SliderStyles };
@@ -0,0 +1,22 @@
1
+ /*
2
+ * @brijbyte/agentic-ui — CSS layer order declaration
3
+ *
4
+ * Import this ONCE, before any other stylesheet in your app entry.
5
+ * It establishes the cascade order so component styles always beat
6
+ * Tailwind preflight resets, and Tailwind utilities always beat components.
7
+ *
8
+ * If you use the full bundle (@brijbyte/agentic-ui/styles) or tokens.css,
9
+ * this is already included — you don't need to import it separately.
10
+ *
11
+ * Manual setup (without Tailwind):
12
+ * @import "@brijbyte/agentic-ui/layer-order";
13
+ * @import "@brijbyte/agentic-ui/tokens";
14
+ * @import "@brijbyte/agentic-ui/reset";
15
+ *
16
+ * With Tailwind v4:
17
+ * @import "tailwindcss";
18
+ * @import "@brijbyte/agentic-ui/layer-order"; ← before tokens
19
+ * @import "@brijbyte/agentic-ui/tokens";
20
+ */
21
+
22
+ @layer theme, base, components, utilities;
@@ -21,8 +21,8 @@
21
21
  font-family: var(--font-mono);
22
22
  font-size: var(--font-size-md);
23
23
  line-height: var(--line-height-normal);
24
- color: var(--color-text-primary);
25
- background-color: var(--color-bg-base);
24
+ color: var(--color-primary);
25
+ background-color: var(--color-canvas);
26
26
  }
27
27
 
28
28
  img,
@@ -66,13 +66,13 @@
66
66
  font-weight: var(--font-weight-semibold);
67
67
  line-height: var(--line-height-tight);
68
68
  letter-spacing: var(--letter-spacing-tight);
69
- color: var(--color-text-primary);
69
+ color: var(--color-primary);
70
70
  }
71
71
 
72
72
  /* Scrollbar styling */
73
73
  * {
74
74
  scrollbar-width: thin;
75
- scrollbar-color: var(--color-scrollbar-thumb) var(--color-scrollbar-track);
75
+ scrollbar-color: var(--color-thumb) var(--color-track);
76
76
  }
77
77
 
78
78
  *::-webkit-scrollbar {
@@ -81,11 +81,11 @@
81
81
  }
82
82
 
83
83
  *::-webkit-scrollbar-thumb {
84
- background: var(--color-scrollbar-thumb);
84
+ background: var(--color-thumb);
85
85
  border-radius: var(--radius-full);
86
86
  }
87
87
 
88
88
  *::-webkit-scrollbar-track {
89
- background: var(--color-scrollbar-track);
89
+ background: var(--color-track);
90
90
  }
91
91
  }
@@ -14,9 +14,9 @@
14
14
  * overrides work automatically without any Tailwind configuration.
15
15
  *
16
16
  * Generated utility examples:
17
- * bg-bg-base → background-color: var(--color-bg-base)
18
- * text-text-primary → color: var(--color-text-primary)
19
- * border-border-base→ border-color: var(--color-border-base)
17
+ * bg-canvas → background-color: var(--color-canvas)
18
+ * text-primary → color: var(--color-primary)
19
+ * border-line → border-color: var(--color-line)
20
20
  * font-mono → font-family: var(--font-mono)
21
21
  * rounded-md → border-radius: var(--radius-md)
22
22
  * shadow-sm → box-shadow: var(--shadow-sm)
@@ -24,34 +24,34 @@
24
24
 
25
25
  @theme inline {
26
26
  /* ── Backgrounds ────────────────────────────────────────────── */
27
- --color-bg-base: var(--color-bg-base);
28
- --color-bg-elevated: var(--color-bg-elevated);
29
- --color-bg-sunken: var(--color-bg-sunken);
30
- --color-bg-overlay: var(--color-bg-overlay);
31
- --color-bg-sidebar: var(--color-bg-sidebar);
27
+ --color-canvas: var(--color-canvas);
28
+ --color-elevated: var(--color-elevated);
29
+ --color-sunken: var(--color-sunken);
30
+ --color-overlay: var(--color-overlay);
31
+ --color-sidebar: var(--color-sidebar);
32
32
 
33
33
  /* ── Surfaces ───────────────────────────────────────────────── */
34
34
  --color-surface-1: var(--color-surface-1);
35
35
  --color-surface-2: var(--color-surface-2);
36
36
  --color-surface-3: var(--color-surface-3);
37
- --color-surface-hover: var(--color-surface-hover);
38
- --color-surface-active: var(--color-surface-active);
39
- --color-surface-selected: var(--color-surface-selected);
37
+ --color-hover: var(--color-hover);
38
+ --color-active: var(--color-active);
39
+ --color-selected: var(--color-selected);
40
40
 
41
41
  /* ── Text ───────────────────────────────────────────────────── */
42
- --color-text-primary: var(--color-text-primary);
43
- --color-text-secondary: var(--color-text-secondary);
44
- --color-text-tertiary: var(--color-text-tertiary);
45
- --color-text-disabled: var(--color-text-disabled);
46
- --color-text-inverse: var(--color-text-inverse);
47
- --color-text-on-accent: var(--color-text-on-accent);
48
- --color-text-code: var(--color-text-code);
42
+ --color-primary: var(--color-primary);
43
+ --color-secondary: var(--color-secondary);
44
+ --color-tertiary: var(--color-tertiary);
45
+ --color-disabled: var(--color-disabled);
46
+ --color-inverse: var(--color-inverse);
47
+ --color-on-accent: var(--color-on-accent);
48
+ --color-code: var(--color-code);
49
49
 
50
50
  /* ── Borders ────────────────────────────────────────────────── */
51
- --color-border-base: var(--color-border-base);
52
- --color-border-strong: var(--color-border-strong);
53
- --color-border-subtle: var(--color-border-subtle);
54
- --color-border-focus: var(--color-border-focus);
51
+ --color-line: var(--color-line);
52
+ --color-line-strong: var(--color-line-strong);
53
+ --color-line-subtle: var(--color-line-subtle);
54
+ --color-line-focus: var(--color-line-focus);
55
55
 
56
56
  /* ── Accent (macOS blue) ────────────────────────────────────── */
57
57
  --color-accent: var(--color-accent);
@@ -85,7 +85,7 @@
85
85
  --color-info-solid: var(--color-info-solid);
86
86
 
87
87
  /* ── Code syntax ────────────────────────────────────────────── */
88
- --color-code-bg: var(--color-code-bg);
88
+ --color-code-canvas: var(--color-code-canvas);
89
89
  --color-code-border: var(--color-code-border);
90
90
  --color-code-keyword: var(--color-code-keyword);
91
91
  --color-code-string: var(--color-code-string);
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * @brijbyte/agentic-ui — Design Tokens
3
3
  *
4
- * macOS/iOS-inspired developer-focused design system.
4
+ * developer-focused design system, loosely inspired by native desktop and mobile UI.
5
5
  * Monospace-first, semantic color tokens, supports light & dark modes.
6
6
  */
7
- @layer base {
7
+
8
+ @layer theme {
8
9
  :root {
9
10
  /* ─── Typography ──────────────────────────────────────────────── */
10
11
  /*
@@ -125,35 +126,35 @@
125
126
  [data-theme="light"] {
126
127
  color-scheme: light;
127
128
 
128
- /* Background layers (macOS vibrancy-inspired) */
129
- --color-bg-base: #f5f5f5;
130
- --color-bg-elevated: #ffffff;
131
- --color-bg-sunken: #ebebeb;
132
- --color-bg-overlay: rgba(255, 255, 255, 0.92);
133
- --color-bg-sidebar: rgba(246, 246, 246, 0.95);
129
+ /* Background layers (inspired by system vibrancy) */
130
+ --color-canvas: #f0eff0;
131
+ --color-elevated: #fafafa;
132
+ --color-sunken: #e8e7e8;
133
+ --color-overlay: rgba(250, 250, 250, 0.92);
134
+ --color-sidebar: rgba(244, 243, 244, 0.96);
134
135
 
135
136
  /* Surface (card/panel backgrounds) */
136
- --color-surface-1: #ffffff;
137
- --color-surface-2: #f9f9f9;
138
- --color-surface-3: #f4f4f4;
139
- --color-surface-hover: rgba(0, 0, 0, 0.04);
140
- --color-surface-active: rgba(0, 0, 0, 0.07);
141
- --color-surface-selected: rgba(0, 120, 212, 0.1);
137
+ --color-surface-1: #fafafa;
138
+ --color-surface-2: #f4f3f4;
139
+ --color-surface-3: #eeeded;
140
+ --color-hover: rgba(0, 0, 0, 0.04);
141
+ --color-active: rgba(0, 0, 0, 0.07);
142
+ --color-selected: rgba(0, 120, 212, 0.1);
142
143
 
143
144
  /* Text */
144
- --color-text-primary: rgba(0, 0, 0, 0.88);
145
- --color-text-secondary: rgba(0, 0, 0, 0.55);
146
- --color-text-tertiary: rgba(0, 0, 0, 0.36);
147
- --color-text-disabled: rgba(0, 0, 0, 0.24);
148
- --color-text-inverse: rgba(255, 255, 255, 0.95);
149
- --color-text-on-accent: #ffffff;
150
- --color-text-code: #0f766e;
145
+ --color-primary: rgba(0, 0, 0, 0.88);
146
+ --color-secondary: rgba(0, 0, 0, 0.6); /* raised from 0.55 — AA 5.01:1 on hover bg */
147
+ --color-tertiary: rgba(0, 0, 0, 0.36);
148
+ --color-disabled: rgba(0, 0, 0, 0.24);
149
+ --color-inverse: rgba(255, 255, 255, 0.95);
150
+ --color-on-accent: #ffffff;
151
+ --color-code: #0f766e;
151
152
 
152
153
  /* Borders */
153
- --color-border-base: rgba(0, 0, 0, 0.12);
154
- --color-border-strong: rgba(0, 0, 0, 0.22);
155
- --color-border-subtle: rgba(0, 0, 0, 0.06);
156
- --color-border-focus: var(--color-focus-ring);
154
+ --color-line: rgba(0, 0, 0, 0.12);
155
+ --color-line-strong: rgba(0, 0, 0, 0.22);
156
+ --color-line-subtle: rgba(0, 0, 0, 0.06);
157
+ --color-line-focus: var(--color-focus-ring);
157
158
 
158
159
  /* Accent — macOS blue
159
160
  * Semantic names instead of opaque Radix-style numbers:
@@ -166,6 +167,8 @@
166
167
  --color-accent: #0078d4;
167
168
  --color-accent-hover: #006bbf;
168
169
  --color-accent-pressed: #005ea8;
170
+ --color-accent-solid: #0078d4; /* solid button bg — same as accent in light (4.83:1 vs white) */
171
+ --color-accent-text: #005ea8; /* text/icon on tinted surfaces — AA 5.09:1 on accent-tint bg */
169
172
  --color-accent-tint: rgba(0, 120, 212, 0.1);
170
173
  --color-accent-tint-hover: rgba(0, 120, 212, 0.16);
171
174
 
@@ -181,25 +184,28 @@
181
184
  --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.16), 0 2px 6px -2px rgb(0 0 0 / 0.1);
182
185
  --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.12);
183
186
  --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.08);
184
- --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
187
+ --shadow-focus: 0 0 0 2px var(--color-canvas), 0 0 0 4px var(--color-focus-ring);
185
188
 
186
189
  /* Status — Success */
187
190
  --color-success-bg: #f0fdf4;
188
191
  --color-success-border: #bbf7d0;
189
- --color-success-text: #15803d;
190
- --color-success-solid: #16a34a;
192
+ --color-success-text: #147a39; /* darkened from #15803d — AA 4.73:1 on canvas */
193
+ --color-success-solid: #15803d; /* darkened from #16a34a — AA 5.02:1 vs white */
194
+ --color-success-on-solid: #ffffff;
191
195
 
192
196
  /* Status — Warning */
193
197
  --color-warning-bg: #fffbeb;
194
198
  --color-warning-border: #fde68a;
195
199
  --color-warning-text: #92400e;
196
- --color-warning-solid: #d97706;
200
+ --color-warning-solid: #b45309; /* darkened from #d97706 — AA 5.02:1 vs white */
201
+ --color-warning-on-solid: #ffffff;
197
202
 
198
203
  /* Status — Error */
199
204
  --color-error-bg: #fef2f2;
200
205
  --color-error-border: #fecaca;
201
206
  --color-error-text: #991b1b;
202
207
  --color-error-solid: #dc2626;
208
+ --color-error-on-solid: #ffffff;
203
209
 
204
210
  /* Status — Info */
205
211
  --color-info-bg: #eff6ff;
@@ -208,7 +214,7 @@
208
214
  --color-info-solid: #2563eb;
209
215
 
210
216
  /* Code / terminal palette */
211
- --color-code-bg: #f6f8fa;
217
+ --color-code-canvas: #f6f8fa;
212
218
  --color-code-border: #d0d7de;
213
219
  --color-code-comment: #6e7781;
214
220
  --color-code-keyword: #cf222e;
@@ -217,8 +223,8 @@
217
223
  --color-code-function: #8250df;
218
224
 
219
225
  /* Scrollbar */
220
- --color-scrollbar-thumb: rgba(0, 0, 0, 0.2);
221
- --color-scrollbar-track: transparent;
226
+ --color-thumb: rgba(0, 0, 0, 0.2);
227
+ --color-track: transparent;
222
228
  }
223
229
 
224
230
  /* ═══════════════════════════════════════════════════════════════════
@@ -232,38 +238,40 @@
232
238
  color-scheme: dark;
233
239
 
234
240
  /* Background */
235
- --color-bg-base: #1c1c1e;
236
- --color-bg-elevated: #2c2c2e;
237
- --color-bg-sunken: #141416;
238
- --color-bg-overlay: rgba(30, 30, 32, 0.92);
239
- --color-bg-sidebar: rgba(28, 28, 30, 0.95);
241
+ --color-canvas: #1c1c1e;
242
+ --color-elevated: #2c2c2e;
243
+ --color-sunken: #141416;
244
+ --color-overlay: rgba(30, 30, 32, 0.92);
245
+ --color-sidebar: rgba(28, 28, 30, 0.95);
240
246
 
241
247
  /* Surface */
242
248
  --color-surface-1: #2c2c2e;
243
249
  --color-surface-2: #3a3a3c;
244
250
  --color-surface-3: #48484a;
245
- --color-surface-hover: rgba(255, 255, 255, 0.06);
246
- --color-surface-active: rgba(255, 255, 255, 0.1);
247
- --color-surface-selected: rgba(10, 132, 255, 0.16);
251
+ --color-hover: rgba(255, 255, 255, 0.06);
252
+ --color-active: rgba(255, 255, 255, 0.1);
253
+ --color-selected: rgba(10, 132, 255, 0.16);
248
254
 
249
255
  /* Text */
250
- --color-text-primary: rgba(255, 255, 255, 0.92);
251
- --color-text-secondary: rgba(255, 255, 255, 0.55);
252
- --color-text-tertiary: rgba(255, 255, 255, 0.36);
253
- --color-text-disabled: rgba(255, 255, 255, 0.24);
254
- --color-text-inverse: rgba(0, 0, 0, 0.88);
255
- --color-text-on-accent: #ffffff;
256
- --color-text-code: #2dd4bf;
256
+ --color-primary: rgba(255, 255, 255, 0.92);
257
+ --color-secondary: rgba(255, 255, 255, 0.55);
258
+ --color-tertiary: rgba(255, 255, 255, 0.36);
259
+ --color-disabled: rgba(255, 255, 255, 0.24);
260
+ --color-inverse: rgba(0, 0, 0, 0.88);
261
+ --color-on-accent: #ffffff;
262
+ --color-code: #2dd4bf;
257
263
 
258
264
  /* Borders */
259
- --color-border-base: rgba(255, 255, 255, 0.12);
260
- --color-border-strong: rgba(255, 255, 255, 0.22);
261
- --color-border-subtle: rgba(255, 255, 255, 0.06);
265
+ --color-line: rgba(255, 255, 255, 0.12);
266
+ --color-line-strong: rgba(255, 255, 255, 0.22);
267
+ --color-line-subtle: rgba(255, 255, 255, 0.06);
262
268
 
263
269
  /* Accent — macOS blue dark */
264
270
  --color-accent: #0a84ff;
265
271
  --color-accent-hover: #0071e3;
266
272
  --color-accent-pressed: #005bb5;
273
+ --color-accent-solid: #0071e3; /* solid button bg — darkened from #0a84ff — AA 4.70:1 vs white */
274
+ --color-accent-text: #60a5fa; /* text/icon on tinted surfaces — AA 5.87:1 on accent-tint bg */
267
275
  --color-accent-tint: rgba(10, 132, 255, 0.12);
268
276
  --color-accent-tint-hover: rgba(10, 132, 255, 0.2);
269
277
 
@@ -279,25 +287,28 @@
279
287
  --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.5), 0 2px 6px -2px rgb(0 0 0 / 0.4);
280
288
  --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.4);
281
289
  --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.3);
282
- --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
290
+ --shadow-focus: 0 0 0 2px var(--color-canvas), 0 0 0 4px var(--color-focus-ring);
283
291
 
284
292
  /* Status — Success */
285
293
  --color-success-bg: rgba(22, 163, 74, 0.12);
286
294
  --color-success-border: rgba(22, 163, 74, 0.3);
287
295
  --color-success-text: #4ade80;
288
- --color-success-solid: #22c55e;
296
+ --color-success-solid: #22c55e; /* vivid — AA 9.22:1 vs black text */
297
+ --color-success-on-solid: #000000; /* dark text preserves vibrancy */
289
298
 
290
299
  /* Status — Warning */
291
300
  --color-warning-bg: rgba(217, 119, 6, 0.12);
292
301
  --color-warning-border: rgba(217, 119, 6, 0.3);
293
302
  --color-warning-text: #fbbf24;
294
- --color-warning-solid: #f59e0b;
303
+ --color-warning-solid: #f59e0b; /* vivid — AA 9.78:1 vs black text */
304
+ --color-warning-on-solid: #000000; /* dark text preserves vibrancy */
295
305
 
296
306
  /* Status — Error */
297
307
  --color-error-bg: rgba(220, 38, 38, 0.12);
298
308
  --color-error-border: rgba(220, 38, 38, 0.3);
299
309
  --color-error-text: #f87171;
300
- --color-error-solid: #ef4444;
310
+ --color-error-solid: #dc2626; /* darkened from #ef4444 — AA 4.83:1 vs white */
311
+ --color-error-on-solid: #ffffff;
301
312
 
302
313
  /* Status — Info */
303
314
  --color-info-bg: rgba(37, 99, 235, 0.12);
@@ -306,7 +317,7 @@
306
317
  --color-info-solid: #3b82f6;
307
318
 
308
319
  /* Code / terminal palette */
309
- --color-code-bg: #161b22;
320
+ --color-code-canvas: #161b22;
310
321
  --color-code-border: rgba(255, 255, 255, 0.1);
311
322
  --color-code-comment: #8b949e;
312
323
  --color-code-keyword: #ff7b72;
@@ -315,42 +326,44 @@
315
326
  --color-code-function: #d2a8ff;
316
327
 
317
328
  /* Scrollbar */
318
- --color-scrollbar-thumb: rgba(255, 255, 255, 0.2);
319
- --color-scrollbar-track: transparent;
329
+ --color-thumb: rgba(255, 255, 255, 0.2);
330
+ --color-track: transparent;
320
331
  }
321
332
  }
322
333
 
323
334
  [data-theme="dark"] {
324
335
  color-scheme: dark;
325
336
 
326
- --color-bg-base: #1c1c1e;
327
- --color-bg-elevated: #2c2c2e;
328
- --color-bg-sunken: #141416;
329
- --color-bg-overlay: rgba(30, 30, 32, 0.92);
330
- --color-bg-sidebar: rgba(28, 28, 30, 0.95);
337
+ --color-canvas: #1c1c1e;
338
+ --color-elevated: #2c2c2e;
339
+ --color-sunken: #141416;
340
+ --color-overlay: rgba(30, 30, 32, 0.92);
341
+ --color-sidebar: rgba(28, 28, 30, 0.95);
331
342
 
332
343
  --color-surface-1: #2c2c2e;
333
344
  --color-surface-2: #3a3a3c;
334
345
  --color-surface-3: #48484a;
335
- --color-surface-hover: rgba(255, 255, 255, 0.06);
336
- --color-surface-active: rgba(255, 255, 255, 0.1);
337
- --color-surface-selected: rgba(10, 132, 255, 0.16);
338
-
339
- --color-text-primary: rgba(255, 255, 255, 0.92);
340
- --color-text-secondary: rgba(255, 255, 255, 0.55);
341
- --color-text-tertiary: rgba(255, 255, 255, 0.36);
342
- --color-text-disabled: rgba(255, 255, 255, 0.24);
343
- --color-text-inverse: rgba(0, 0, 0, 0.88);
344
- --color-text-on-accent: #ffffff;
345
- --color-text-code: #2dd4bf;
346
-
347
- --color-border-base: rgba(255, 255, 255, 0.12);
348
- --color-border-strong: rgba(255, 255, 255, 0.22);
349
- --color-border-subtle: rgba(255, 255, 255, 0.06);
346
+ --color-hover: rgba(255, 255, 255, 0.06);
347
+ --color-active: rgba(255, 255, 255, 0.1);
348
+ --color-selected: rgba(10, 132, 255, 0.16);
349
+
350
+ --color-primary: rgba(255, 255, 255, 0.92);
351
+ --color-secondary: rgba(255, 255, 255, 0.55);
352
+ --color-tertiary: rgba(255, 255, 255, 0.36);
353
+ --color-disabled: rgba(255, 255, 255, 0.24);
354
+ --color-inverse: rgba(0, 0, 0, 0.88);
355
+ --color-on-accent: #ffffff;
356
+ --color-code: #2dd4bf;
357
+
358
+ --color-line: rgba(255, 255, 255, 0.12);
359
+ --color-line-strong: rgba(255, 255, 255, 0.22);
360
+ --color-line-subtle: rgba(255, 255, 255, 0.06);
350
361
 
351
362
  --color-accent: #0a84ff;
352
363
  --color-accent-hover: #0071e3;
353
364
  --color-accent-pressed: #005bb5;
365
+ --color-accent-solid: #0071e3;
366
+ --color-accent-text: #60a5fa;
354
367
  --color-accent-tint: rgba(10, 132, 255, 0.12);
355
368
  --color-accent-tint-hover: rgba(10, 132, 255, 0.2);
356
369
 
@@ -364,29 +377,32 @@
364
377
  --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.5), 0 2px 6px -2px rgb(0 0 0 / 0.4);
365
378
  --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.4);
366
379
  --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.3);
367
- --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
380
+ --shadow-focus: 0 0 0 2px var(--color-canvas), 0 0 0 4px var(--color-focus-ring);
368
381
 
369
382
  --color-success-bg: rgba(22, 163, 74, 0.12);
370
383
  --color-success-border: rgba(22, 163, 74, 0.3);
371
384
  --color-success-text: #4ade80;
372
385
  --color-success-solid: #22c55e;
386
+ --color-success-on-solid: #000000;
373
387
 
374
388
  --color-warning-bg: rgba(217, 119, 6, 0.12);
375
389
  --color-warning-border: rgba(217, 119, 6, 0.3);
376
390
  --color-warning-text: #fbbf24;
377
391
  --color-warning-solid: #f59e0b;
392
+ --color-warning-on-solid: #000000;
378
393
 
379
394
  --color-error-bg: rgba(220, 38, 38, 0.12);
380
395
  --color-error-border: rgba(220, 38, 38, 0.3);
381
396
  --color-error-text: #f87171;
382
- --color-error-solid: #ef4444;
397
+ --color-error-solid: #dc2626;
398
+ --color-error-on-solid: #ffffff;
383
399
 
384
400
  --color-info-bg: rgba(37, 99, 235, 0.12);
385
401
  --color-info-border: rgba(37, 99, 235, 0.3);
386
402
  --color-info-text: #60a5fa;
387
403
  --color-info-solid: #3b82f6;
388
404
 
389
- --color-code-bg: #161b22;
405
+ --color-code-canvas: #161b22;
390
406
  --color-code-border: rgba(255, 255, 255, 0.1);
391
407
  --color-code-comment: #8b949e;
392
408
  --color-code-keyword: #ff7b72;
@@ -394,7 +410,7 @@
394
410
  --color-code-number: #79c0ff;
395
411
  --color-code-function: #d2a8ff;
396
412
 
397
- --color-scrollbar-thumb: rgba(255, 255, 255, 0.2);
398
- --color-scrollbar-track: transparent;
413
+ --color-thumb: rgba(255, 255, 255, 0.2);
414
+ --color-track: transparent;
399
415
  }
400
416
  }