@photon-ai/pho-ui 0.1.1 → 0.2.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 (90) hide show
  1. package/dist/chunks/button-GQALfaly.js +325 -0
  2. package/dist/chunks/button-GQALfaly.js.map +1 -0
  3. package/dist/chunks/{close-button-CbQNfpxU.js → close-button-DKaNIndU.js} +6 -6
  4. package/dist/chunks/{close-button-CbQNfpxU.js.map → close-button-DKaNIndU.js.map} +1 -1
  5. package/dist/chunks/{cn-D6jQqeRj.js → cn-7uGUzCOM.js} +2 -3
  6. package/dist/chunks/{cn-D6jQqeRj.js.map → cn-7uGUzCOM.js.map} +1 -1
  7. package/dist/chunks/{dialog-BSBF1Wyq.js → dialog-CyyL5VCc.js} +13 -13
  8. package/dist/chunks/dialog-CyyL5VCc.js.map +1 -0
  9. package/dist/chunks/{input-aZqjjV_m.js → input-DX7d5MlS.js} +3 -3
  10. package/dist/chunks/input-DX7d5MlS.js.map +1 -0
  11. package/dist/chunks/menu-BfaNHnOp.js +101 -0
  12. package/dist/chunks/menu-BfaNHnOp.js.map +1 -0
  13. package/dist/components/accordion.js +1 -1
  14. package/dist/components/alert-dialog.js +5 -5
  15. package/dist/components/alert-dialog.js.map +1 -1
  16. package/dist/components/autocomplete.js +7 -7
  17. package/dist/components/autocomplete.js.map +1 -1
  18. package/dist/components/avatar.js +1 -1
  19. package/dist/components/badge.js +2 -2
  20. package/dist/components/badge.js.map +1 -1
  21. package/dist/components/button.js +10 -11
  22. package/dist/components/checkbox.js +2 -2
  23. package/dist/components/checkbox.js.map +1 -1
  24. package/dist/components/collapsible.js +1 -1
  25. package/dist/components/combobox.js +53 -53
  26. package/dist/components/combobox.js.map +1 -1
  27. package/dist/components/context-menu.js +11 -11
  28. package/dist/components/context-menu.js.map +1 -1
  29. package/dist/components/dialog.js +1 -1
  30. package/dist/components/drawer.js +2 -2
  31. package/dist/components/drawer.js.map +1 -1
  32. package/dist/components/field.js +26 -26
  33. package/dist/components/field.js.map +1 -1
  34. package/dist/components/fieldset.js +1 -1
  35. package/dist/components/form.js +1 -1
  36. package/dist/components/input.js +1 -1
  37. package/dist/components/kbd.js +8 -8
  38. package/dist/components/kbd.js.map +1 -1
  39. package/dist/components/menu.js +1 -1
  40. package/dist/components/menubar.js +5 -5
  41. package/dist/components/menubar.js.map +1 -1
  42. package/dist/components/meter.js +1 -1
  43. package/dist/components/navigation-menu.js +34 -34
  44. package/dist/components/navigation-menu.js.map +1 -1
  45. package/dist/components/notification.js +16 -16
  46. package/dist/components/notification.js.map +1 -1
  47. package/dist/components/number-field.js +18 -18
  48. package/dist/components/number-field.js.map +1 -1
  49. package/dist/components/otp-field.js +6 -6
  50. package/dist/components/otp-field.js.map +1 -1
  51. package/dist/components/popover.js +9 -9
  52. package/dist/components/popover.js.map +1 -1
  53. package/dist/components/preview-card.js +12 -12
  54. package/dist/components/preview-card.js.map +1 -1
  55. package/dist/components/progress.js +1 -1
  56. package/dist/components/radio-group.js +9 -9
  57. package/dist/components/radio-group.js.map +1 -1
  58. package/dist/components/scroll-area.js +1 -1
  59. package/dist/components/select.js +10 -10
  60. package/dist/components/select.js.map +1 -1
  61. package/dist/components/separator.js +1 -1
  62. package/dist/components/slider.js +16 -16
  63. package/dist/components/slider.js.map +1 -1
  64. package/dist/components/switch.js +11 -11
  65. package/dist/components/switch.js.map +1 -1
  66. package/dist/components/tabs.js +15 -15
  67. package/dist/components/tabs.js.map +1 -1
  68. package/dist/components/toast.js +6 -6
  69. package/dist/components/toast.js.map +1 -1
  70. package/dist/components/toggle-group.js +1 -1
  71. package/dist/components/toggle.js +6 -6
  72. package/dist/components/toggle.js.map +1 -1
  73. package/dist/components/toolbar.js +7 -7
  74. package/dist/components/toolbar.js.map +1 -1
  75. package/dist/components/tooltip.js +14 -14
  76. package/dist/components/tooltip.js.map +1 -1
  77. package/dist/index.js +17 -18
  78. package/dist/src/components/button/button.d.ts +12 -35
  79. package/dist/src/components/button/index.d.ts +1 -1
  80. package/dist/src/components/menu/menu.d.ts +2 -2
  81. package/dist/utils.js +1 -1
  82. package/package.json +1 -1
  83. package/src/styles/fonts.css +22 -0
  84. package/src/styles/theme.css +166 -169
  85. package/dist/chunks/button-DjjSiLYz.js +0 -334
  86. package/dist/chunks/button-DjjSiLYz.js.map +0 -1
  87. package/dist/chunks/dialog-BSBF1Wyq.js.map +0 -1
  88. package/dist/chunks/input-aZqjjV_m.js.map +0 -1
  89. package/dist/chunks/menu-BkzDbNuX.js +0 -101
  90. package/dist/chunks/menu-BkzDbNuX.js.map +0 -1
@@ -9,40 +9,53 @@
9
9
  * function, resolved by the `color-scheme` set in pho.css (`:root` = light,
10
10
  * `[data-mode="dark"]` = dark). No duplicated dark-mode override block.
11
11
  *
12
- * Values are ported from Photon's dashboard-v2 token system (Untitled-UI
13
- * derived) and re-namespaced. The neutral/red/green/yellow ramps come from
14
- * Tailwind v4's default theme; the brand ramp (Photon spectrum-blue) is below.
12
+ * Values are extracted from photon.codes (Framer "Landing V1" color styles +
13
+ * published CSS) — the single source of truth. The system is monochrome:
14
+ * black/white surfaces with an alpha-based text hierarchy. "Brand" is the
15
+ * high-contrast action color (black in light, white in dark — the site's
16
+ * button fill), not a hue. Functional reds/greens and the categorical accent
17
+ * set below are the only chromatic tokens.
15
18
  *
16
- * NOTE: brand ramp steps 50/100/200/300/800/900/950 and a few dark brand-text
17
- * choices are design judgement — flagged for review (see plan).
19
+ * `static` so every token is emitted as a CSS variable even when no utility
20
+ * references it — consumers (and the docs) address tokens directly with
21
+ * var(--color-pho-*) for charts, code themes, and inline swatches.
18
22
  */
19
23
 
20
- @theme {
24
+ @theme static {
21
25
  /* ============================== Fonts ============================== */
22
26
  --font-sans:
23
27
  "PolySans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
24
28
  Arial, sans-serif;
25
29
  --font-display: var(--font-sans);
30
+ /* Serif accent — the site's italicized editorial voice. */
31
+ --font-serif: "Instrument Serif", ui-serif, Georgia, serif;
26
32
  --font-mono:
27
33
  "Azeret Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
28
34
  "Liberation Mono", "Courier New", monospace;
29
35
 
30
- /* ===================== Brand ramp (spectrum blue) ===================== */
31
- --color-brand-50: #eef8fd;
32
- --color-brand-100: #d4ecfa;
33
- --color-brand-200: #aedcf4;
34
- --color-brand-300: #7bc6ec;
35
- --color-brand-400: #4eb0e8;
36
- --color-brand-500: #2998d9;
37
- --color-brand-600: #2486c4;
38
- --color-brand-700: #1f6fa3;
39
- --color-brand-800: #1d5c85;
40
- --color-brand-900: #1c4d6e;
41
- --color-brand-950: #123249;
36
+ /* ================ Accent set (photon.codes palette) ================ */
37
+ /* The site's categorical colors — code syntax highlighting, charts,
38
+ avatars. Not for interactive states. */
39
+ --color-pho-yellow: #c3bb26;
40
+ --color-pho-blue: #365eb3;
41
+ --color-pho-sky: #3f88b6;
42
+ --color-pho-indigo: #6985e4;
43
+ --color-pho-purple: #bf6eff;
44
+ --color-pho-green: #36b35b;
45
+ --color-pho-orange: #e78016;
46
+ --color-pho-amber: #ffab2a;
47
+ --color-pho-navy: #1d2650;
48
+
49
+ /* ================== Functional anchors (site-exact) ================== */
50
+ --color-pho-red: #ff2244; /* site Button error state */
42
51
 
43
52
  /* =========================== Type scale =========================== */
44
- --text-2xs: 0.625rem;
45
- --text-2xs--line-height: 0.875rem;
53
+ /* CLOSED scale — the reset removes Tailwind's default sizes (text-base,
54
+ text-2xl, …) so only these steps generate utilities. Body: 12/14/16/18/20.
55
+ Display: 24/32/40/48/60, the heading steps measured on photon.codes.
56
+ NOTE: the reset wipes the whole --text-* prefix; every --text-color-pho-*
57
+ token is declared AFTER this point in the file, so it survives. */
58
+ --text-*: initial;
46
59
  --text-xs: 0.75rem;
47
60
  --text-xs--line-height: 1.125rem;
48
61
  --text-sm: 0.875rem;
@@ -54,22 +67,33 @@
54
67
  --text-xl: 1.25rem;
55
68
  --text-xl--line-height: 1.875rem;
56
69
 
70
+ /* Display sizes — site headings run tight (lh 1.05–1.3) with -0.02em
71
+ tracking, -0.04em at hero sizes. */
57
72
  --text-display-xs: 1.5rem;
58
- --text-display-xs--line-height: 2rem;
59
- --text-display-sm: 1.875rem;
60
- --text-display-sm--line-height: 2.375rem;
61
- --text-display-md: 2.25rem;
73
+ --text-display-xs--line-height: 1.95rem;
74
+ --text-display-xs--letter-spacing: -0.02em;
75
+ --text-display-sm: 2rem;
76
+ --text-display-sm--line-height: 2.4rem;
77
+ --text-display-sm--letter-spacing: -0.02em;
78
+ --text-display-md: 2.5rem;
62
79
  --text-display-md--line-height: 2.75rem;
63
- --text-display-md--letter-spacing: -0.72px;
80
+ --text-display-md--letter-spacing: -0.02em;
64
81
  --text-display-lg: 3rem;
65
- --text-display-lg--line-height: 3.75rem;
66
- --text-display-lg--letter-spacing: -0.96px;
82
+ --text-display-lg--line-height: 3.15rem;
83
+ --text-display-lg--letter-spacing: -0.02em;
67
84
  --text-display-xl: 3.75rem;
68
- --text-display-xl--line-height: 4.5rem;
69
- --text-display-xl--letter-spacing: -1.2px;
70
- --text-display-2xl: 4.5rem;
71
- --text-display-2xl--line-height: 5.625rem;
72
- --text-display-2xl--letter-spacing: -1.44px;
85
+ --text-display-xl--line-height: 3.9375rem;
86
+ --text-display-xl--letter-spacing: -0.04em;
87
+
88
+ /* ========================== Font weights ========================== */
89
+ /* CLOSED set — Pho ships four weights; nothing else generates a utility:
90
+ font-light (300) display/marketing lines · font-normal (400) body ·
91
+ font-medium (500) UI controls · font-semibold (600) headings. */
92
+ --font-weight-*: initial;
93
+ --font-weight-light: 300;
94
+ --font-weight-normal: 400;
95
+ --font-weight-medium: 500;
96
+ --font-weight-semibold: 600;
73
97
 
74
98
  /* ============================= Radius ============================= */
75
99
  --radius-xs: 0.125rem;
@@ -81,209 +105,182 @@
81
105
  --radius-3xl: 1.5rem;
82
106
 
83
107
  /* ============================= Shadows ============================= */
84
- --shadow-pho-xs: 0 1px 2px rgba(10, 13, 18, 0.05);
108
+ /* Floating layers only (menus, popovers, dialogs). Cards and buttons are
109
+ flat on photon.codes — hairline borders carry the separation. */
110
+ --shadow-pho-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
85
111
  --shadow-pho-sm:
86
- 0 1px 3px rgba(10, 13, 18, 0.1), 0 1px 2px -1px rgba(10, 13, 18, 0.1);
112
+ 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
87
113
  --shadow-pho-md:
88
- 0 4px 6px -1px rgba(10, 13, 18, 0.1), 0 2px 4px -2px rgba(10, 13, 18, 0.06);
114
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.06);
89
115
  --shadow-pho-lg:
90
- 0 12px 16px -4px rgba(10, 13, 18, 0.08),
91
- 0 4px 6px -2px rgba(10, 13, 18, 0.03);
116
+ 0 12px 16px -4px rgba(0, 0, 0, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.03);
92
117
  --shadow-pho-xl:
93
- 0 20px 24px -4px rgba(10, 13, 18, 0.08),
94
- 0 8px 8px -4px rgba(10, 13, 18, 0.03);
95
- /* Skeuomorphic inset edge used on solid buttons. */
96
- --shadow-pho-skeuomorphic:
97
- inset 0 0 0 1px rgba(10, 13, 18, 0.18),
98
- inset 0 -2px 0 0 rgba(10, 13, 18, 0.05);
99
- --shadow-pho-skeuo-xs: var(--shadow-pho-skeuomorphic), var(--shadow-pho-xs);
118
+ 0 20px 24px -4px rgba(0, 0, 0, 0.08), 0 8px 8px -4px rgba(0, 0, 0, 0.03);
100
119
 
101
120
  /* =================== Semantic: text (text-pho-*) =================== */
102
- --text-color-pho-primary: light-dark(
103
- var(--color-neutral-900),
104
- var(--color-neutral-50)
105
- );
121
+ /* The site's "Font/*" styles: pure black/white stepped by alpha. */
122
+ --text-color-pho-primary: light-dark(#000, #fff);
106
123
  --text-color-pho-secondary: light-dark(
107
- var(--color-neutral-700),
108
- var(--color-neutral-300)
124
+ rgba(0, 0, 0, 0.75),
125
+ rgba(255, 255, 255, 0.75)
109
126
  );
110
127
  --text-color-pho-secondary-hover: light-dark(
111
- var(--color-neutral-800),
112
- var(--color-neutral-200)
128
+ rgba(0, 0, 0, 0.85),
129
+ rgba(255, 255, 255, 0.85)
113
130
  );
114
131
  --text-color-pho-tertiary: light-dark(
115
- var(--color-neutral-600),
116
- var(--color-neutral-400)
132
+ rgba(0, 0, 0, 0.5),
133
+ rgba(255, 255, 255, 0.5)
117
134
  );
118
135
  --text-color-pho-tertiary-hover: light-dark(
119
- var(--color-neutral-700),
120
- var(--color-neutral-300)
136
+ rgba(0, 0, 0, 0.65),
137
+ rgba(255, 255, 255, 0.65)
121
138
  );
122
139
  --text-color-pho-quaternary: light-dark(
123
- var(--color-neutral-500),
124
- var(--color-neutral-400)
140
+ rgba(0, 0, 0, 0.4),
141
+ rgba(255, 255, 255, 0.4)
142
+ );
143
+ --text-color-pho-placeholder: light-dark(
144
+ rgba(0, 0, 0, 0.4),
145
+ rgba(255, 255, 255, 0.4)
125
146
  );
126
- --text-color-pho-placeholder: var(--color-neutral-500);
127
147
  --text-color-pho-disabled: light-dark(
128
- var(--color-neutral-400),
129
- var(--color-neutral-600)
148
+ rgba(0, 0, 0, 0.25),
149
+ rgba(255, 255, 255, 0.25)
130
150
  );
131
151
  --text-color-pho-white: #fff;
132
- --text-color-pho-brand: light-dark(
133
- var(--color-brand-700),
134
- var(--color-brand-400)
135
- );
136
- --text-color-pho-brand-hover: light-dark(
137
- var(--color-brand-800),
138
- var(--color-brand-300)
139
- );
140
- --text-color-pho-error: light-dark(
141
- var(--color-red-600),
142
- var(--color-red-400)
143
- );
144
- --text-color-pho-error-hover: light-dark(
145
- var(--color-red-700),
146
- var(--color-red-300)
147
- );
148
- --text-color-pho-success: light-dark(
149
- var(--color-green-600),
150
- var(--color-green-400)
151
- );
152
- --text-color-pho-warning: light-dark(
153
- var(--color-yellow-600),
154
- var(--color-yellow-400)
155
- );
152
+ /* Content sitting on bg-pho-brand-solid (button labels, check marks…). */
153
+ --text-color-pho-on-brand: light-dark(#fff, #000);
154
+ /* Content sitting on bg-pho-inverse. */
155
+ --text-color-pho-inverse: light-dark(#fff, #101010);
156
+ --text-color-pho-brand: light-dark(#000, #fff);
157
+ --text-color-pho-brand-hover: light-dark(#000, #fff);
158
+ --text-color-pho-error: light-dark(#d61f3d, #ff5c75);
159
+ --text-color-pho-error-hover: light-dark(#b81a34, #ff8095);
160
+ --text-color-pho-success: light-dark(#2a8a46, #4cc571);
161
+ --text-color-pho-warning: light-dark(#a86a00, #ffab2a);
156
162
 
157
163
  /* ============ Semantic: foreground/icons (text-fg-pho-*) ============ */
158
- --text-color-fg-pho-primary: light-dark(
159
- var(--color-neutral-900),
160
- var(--color-white)
161
- );
164
+ --text-color-fg-pho-primary: light-dark(#000, #fff);
162
165
  --text-color-fg-pho-secondary: light-dark(
163
- var(--color-neutral-700),
164
- var(--color-neutral-300)
166
+ rgba(0, 0, 0, 0.75),
167
+ rgba(255, 255, 255, 0.75)
165
168
  );
166
169
  --text-color-fg-pho-quaternary: light-dark(
167
- var(--color-neutral-400),
168
- var(--color-neutral-600)
170
+ rgba(0, 0, 0, 0.3),
171
+ rgba(255, 255, 255, 0.3)
169
172
  );
170
173
  --text-color-fg-pho-quaternary-hover: light-dark(
171
- var(--color-neutral-500),
172
- var(--color-neutral-500)
173
- );
174
- --text-color-fg-pho-brand: light-dark(
175
- var(--color-brand-600),
176
- var(--color-brand-500)
177
- );
178
- --text-color-fg-pho-error: light-dark(
179
- var(--color-red-500),
180
- var(--color-red-400)
174
+ rgba(0, 0, 0, 0.45),
175
+ rgba(255, 255, 255, 0.45)
181
176
  );
177
+ --text-color-fg-pho-brand: light-dark(#000, #fff);
178
+ --text-color-fg-pho-error: light-dark(#e01e3d, #ff5c75);
182
179
 
183
180
  /* =============== Semantic: background (bg-pho-*) =============== */
184
- --background-color-pho-primary: light-dark(#fff, var(--color-neutral-950));
185
- --background-color-pho-primary-hover: light-dark(
186
- var(--color-neutral-50),
187
- var(--color-neutral-900)
188
- );
189
- --background-color-pho-secondary: light-dark(
190
- var(--color-neutral-50),
191
- var(--color-neutral-900)
192
- );
193
- --background-color-pho-secondary-hover: light-dark(
194
- var(--color-neutral-100),
195
- var(--color-neutral-800)
196
- );
197
- --background-color-pho-tertiary: light-dark(
198
- var(--color-neutral-100),
199
- var(--color-neutral-800)
200
- );
201
- --background-color-pho-quaternary: light-dark(
202
- var(--color-neutral-200),
203
- var(--color-neutral-700)
204
- );
181
+ /* App/page canvas — the site's "Primary BG". */
182
+ --background-color-pho-page: light-dark(#f5f5f7, #000);
183
+ /* Main surface: cards, inputs, panels — the site's "BG/Card". */
184
+ --background-color-pho-primary: light-dark(#fff, #101010);
185
+ --background-color-pho-primary-hover: light-dark(#f5f5f7, #1a1a1a);
186
+ --background-color-pho-secondary: light-dark(#f5f5f7, #0b0b0b);
187
+ --background-color-pho-secondary-hover: light-dark(#eee, #161616);
188
+ --background-color-pho-tertiary: light-dark(#eee, #202020);
189
+ --background-color-pho-quaternary: light-dark(#e2e2e4, #2e2e2e);
190
+ /* Inverted chip surface — the site's "msgbbl" (dark chip in light mode,
191
+ light chip in dark mode). Pair with text-pho-inverse. */
192
+ --background-color-pho-inverse: light-dark(#202020, #eee);
205
193
  --background-color-pho-disabled: light-dark(
206
- var(--color-neutral-100),
207
- var(--color-neutral-800)
194
+ rgba(0, 0, 0, 0.05),
195
+ rgba(255, 255, 255, 0.05)
208
196
  );
209
- --background-color-pho-brand-solid: var(--color-brand-600);
197
+ /* High-contrast action fill — the site's button. Pair with
198
+ text-pho-on-brand, never text-white. */
199
+ --background-color-pho-brand-solid: light-dark(#000, #fff);
210
200
  --background-color-pho-brand-solid-hover: light-dark(
211
- var(--color-brand-700),
212
- var(--color-brand-500)
201
+ rgba(16, 16, 16, 0.85),
202
+ #eee
213
203
  );
214
204
  --background-color-pho-brand-secondary: light-dark(
215
- var(--color-brand-50),
216
- var(--color-brand-900)
217
- );
218
- --background-color-pho-error-solid: var(--color-red-600);
219
- --background-color-pho-error-solid-hover: light-dark(
220
- var(--color-red-700),
221
- var(--color-red-500)
205
+ rgba(0, 0, 0, 0.05),
206
+ rgba(255, 255, 255, 0.05)
222
207
  );
208
+ /* Knob/dot sitting on brand-solid (switch thumb, radio indicator). */
209
+ --background-color-pho-on-brand: light-dark(#fff, #000);
210
+ --background-color-pho-error-solid: #ff2244;
211
+ --background-color-pho-error-solid-hover: light-dark(#e01e3d, #ff4761);
223
212
  --background-color-pho-error-primary: light-dark(
224
- var(--color-red-50),
225
- var(--color-red-950)
213
+ rgba(255, 34, 68, 0.08),
214
+ rgba(255, 34, 68, 0.15)
226
215
  );
227
- /* Quiet hover wash for ghost surfaces (pre-blended, so no /opacity needed). */
216
+ /* Quiet hover wash for ghost surfaces — the site's "Font/5%". */
228
217
  --background-color-pho-ghost-hover: light-dark(
229
- rgba(10, 13, 18, 0.05),
230
- rgba(255, 255, 255, 0.06)
218
+ rgba(0, 0, 0, 0.05),
219
+ rgba(255, 255, 255, 0.05)
231
220
  );
232
- /* Modal/scrim backdrop base (used with an /opacity utility is avoided —
233
- callers layer their own alpha). */
221
+ /* Modal/scrim backdrop. */
234
222
  --background-color-pho-overlay: light-dark(
235
- rgba(10, 13, 18, 0.7),
223
+ rgba(0, 0, 0, 0.5),
236
224
  rgba(0, 0, 0, 0.6)
237
225
  );
238
226
 
239
227
  /* ================ Semantic: border (border-pho-*) ================ */
228
+ /* Strong edge — inputs, interactive outlines. */
240
229
  --border-color-pho-primary: light-dark(
241
- var(--color-neutral-300),
242
- var(--color-neutral-700)
243
- );
244
- --border-color-pho-secondary: light-dark(
245
- var(--color-neutral-200),
246
- var(--color-neutral-800)
230
+ rgba(0, 0, 0, 0.15),
231
+ rgba(255, 255, 255, 0.15)
247
232
  );
233
+ /* Hairline card stroke — the site's "BG/Card Stroke". */
234
+ --border-color-pho-secondary: light-dark(#eee, #202020);
248
235
  --border-color-pho-tertiary: light-dark(
249
- var(--color-neutral-100),
250
- var(--color-neutral-800)
236
+ rgba(0, 0, 0, 0.05),
237
+ rgba(255, 255, 255, 0.05)
251
238
  );
239
+ /* Selected/focus edge — monochrome at 40%, matching ring/outline-pho-brand. */
252
240
  --border-color-pho-brand: light-dark(
253
- var(--color-brand-500),
254
- var(--color-brand-400)
241
+ rgba(0, 0, 0, 0.4),
242
+ rgba(255, 255, 255, 0.4)
255
243
  );
256
- --border-color-pho-error: light-dark(
257
- var(--color-red-500),
258
- var(--color-red-400)
244
+ /* Hairline edge for elements ON a brand-solid fill (EffectButton pill). */
245
+ --border-color-pho-on-brand: light-dark(
246
+ rgba(255, 255, 255, 0.15),
247
+ rgba(0, 0, 0, 0.08)
259
248
  );
249
+ --border-color-pho-error: #ff2244;
260
250
  --border-color-pho-error-subtle: light-dark(
261
- var(--color-red-300),
262
- var(--color-red-500)
251
+ rgba(255, 34, 68, 0.3),
252
+ rgba(255, 34, 68, 0.4)
263
253
  );
264
254
  /* Hairline interactive edge shared by hover/selected surfaces. */
265
255
  --border-color-pho-interactive: light-dark(
266
- rgba(10, 13, 18, 0.1),
256
+ rgba(0, 0, 0, 0.1),
267
257
  rgba(255, 255, 255, 0.1)
268
258
  );
269
259
 
270
260
  /* ================== Semantic: ring (ring-pho-*) ================== */
271
261
  --ring-color-pho-primary: light-dark(
272
- var(--color-neutral-300),
273
- var(--color-neutral-700)
262
+ rgba(0, 0, 0, 0.15),
263
+ rgba(255, 255, 255, 0.15)
274
264
  );
275
- --ring-color-pho-brand: var(--color-brand-500);
276
- --ring-color-pho-error: var(--color-red-500);
265
+ --ring-color-pho-secondary: light-dark(#eee, #202020);
266
+ --ring-color-pho-brand: light-dark(
267
+ rgba(0, 0, 0, 0.4),
268
+ rgba(255, 255, 255, 0.4)
269
+ );
270
+ --ring-color-pho-error: #ff2244;
277
271
  --ring-color-pho-error-subtle: light-dark(
278
- var(--color-red-300),
279
- var(--color-red-500)
272
+ rgba(255, 34, 68, 0.3),
273
+ rgba(255, 34, 68, 0.4)
280
274
  );
281
275
  --ring-color-pho-interactive: light-dark(
282
- rgba(10, 13, 18, 0.1),
276
+ rgba(0, 0, 0, 0.1),
283
277
  rgba(255, 255, 255, 0.1)
284
278
  );
285
279
 
286
280
  /* ============== Semantic: outline (focus rings) ============== */
287
- --outline-color-pho-brand: var(--color-brand-500);
288
- --outline-color-pho-error: var(--color-red-500);
281
+ --outline-color-pho-brand: light-dark(
282
+ rgba(0, 0, 0, 0.4),
283
+ rgba(255, 255, 255, 0.4)
284
+ );
285
+ --outline-color-pho-error: #ff2244;
289
286
  }