@photon-ai/pho-ui 0.1.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 (281) hide show
  1. package/README.md +49 -0
  2. package/dist/chunks/button-9pp4g7en.js +334 -0
  3. package/dist/chunks/button-9pp4g7en.js.map +1 -0
  4. package/dist/chunks/close-button-CbQNfpxU.js +30 -0
  5. package/dist/chunks/close-button-CbQNfpxU.js.map +1 -0
  6. package/dist/chunks/cn-D6jQqeRj.js +1762 -0
  7. package/dist/chunks/cn-D6jQqeRj.js.map +1 -0
  8. package/dist/chunks/dialog-BSBF1Wyq.js +63 -0
  9. package/dist/chunks/dialog-BSBF1Wyq.js.map +1 -0
  10. package/dist/chunks/input-aZqjjV_m.js +75 -0
  11. package/dist/chunks/input-aZqjjV_m.js.map +1 -0
  12. package/dist/chunks/link-provider-9TFNyDqO.js +28 -0
  13. package/dist/chunks/link-provider-9TFNyDqO.js.map +1 -0
  14. package/dist/chunks/menu-BkzDbNuX.js +101 -0
  15. package/dist/chunks/menu-BkzDbNuX.js.map +1 -0
  16. package/dist/chunks/resolve-variant-CcD8iG5l.js +9 -0
  17. package/dist/chunks/resolve-variant-CcD8iG5l.js.map +1 -0
  18. package/dist/chunks/rolldown-runtime-wKSmTnsc.js +22 -0
  19. package/dist/components/accordion.js +42 -0
  20. package/dist/components/accordion.js.map +1 -0
  21. package/dist/components/alert-dialog.js +59 -0
  22. package/dist/components/alert-dialog.js.map +1 -0
  23. package/dist/components/autocomplete.js +82 -0
  24. package/dist/components/autocomplete.js.map +1 -0
  25. package/dist/components/avatar.js +49 -0
  26. package/dist/components/avatar.js.map +1 -0
  27. package/dist/components/badge.js +59 -0
  28. package/dist/components/badge.js.map +1 -0
  29. package/dist/components/button.js +17 -0
  30. package/dist/components/checkbox.js +51 -0
  31. package/dist/components/checkbox.js.map +1 -0
  32. package/dist/components/collapsible.js +28 -0
  33. package/dist/components/collapsible.js.map +1 -0
  34. package/dist/components/combobox.js +117 -0
  35. package/dist/components/combobox.js.map +1 -0
  36. package/dist/components/context-menu.js +63 -0
  37. package/dist/components/context-menu.js.map +1 -0
  38. package/dist/components/dialog.js +5 -0
  39. package/dist/components/drawer.js +59 -0
  40. package/dist/components/drawer.js.map +1 -0
  41. package/dist/components/field.js +49 -0
  42. package/dist/components/field.js.map +1 -0
  43. package/dist/components/fieldset.js +26 -0
  44. package/dist/components/fieldset.js.map +1 -0
  45. package/dist/components/form.js +17 -0
  46. package/dist/components/form.js.map +1 -0
  47. package/dist/components/input.js +5 -0
  48. package/dist/components/kbd.js +18 -0
  49. package/dist/components/kbd.js.map +1 -0
  50. package/dist/components/menu.js +7 -0
  51. package/dist/components/menubar.js +17 -0
  52. package/dist/components/menubar.js.map +1 -0
  53. package/dist/components/meter.js +47 -0
  54. package/dist/components/meter.js.map +1 -0
  55. package/dist/components/navigation-menu.js +74 -0
  56. package/dist/components/navigation-menu.js.map +1 -0
  57. package/dist/components/notification.js +91 -0
  58. package/dist/components/notification.js.map +1 -0
  59. package/dist/components/number-field.js +56 -0
  60. package/dist/components/number-field.js.map +1 -0
  61. package/dist/components/otp-field.js +19 -0
  62. package/dist/components/otp-field.js.map +1 -0
  63. package/dist/components/popover.js +46 -0
  64. package/dist/components/popover.js.map +1 -0
  65. package/dist/components/preview-card.js +31 -0
  66. package/dist/components/preview-card.js.map +1 -0
  67. package/dist/components/progress.js +47 -0
  68. package/dist/components/progress.js.map +1 -0
  69. package/dist/components/radio-group.js +34 -0
  70. package/dist/components/radio-group.js.map +1 -0
  71. package/dist/components/scroll-area.js +43 -0
  72. package/dist/components/scroll-area.js.map +1 -0
  73. package/dist/components/select.js +69 -0
  74. package/dist/components/select.js.map +1 -0
  75. package/dist/components/separator.js +17 -0
  76. package/dist/components/separator.js.map +1 -0
  77. package/dist/components/slider.js +61 -0
  78. package/dist/components/slider.js.map +1 -0
  79. package/dist/components/switch.js +28 -0
  80. package/dist/components/switch.js.map +1 -0
  81. package/dist/components/tabs.js +42 -0
  82. package/dist/components/tabs.js.map +1 -0
  83. package/dist/components/toast.js +60 -0
  84. package/dist/components/toast.js.map +1 -0
  85. package/dist/components/toggle-group.js +17 -0
  86. package/dist/components/toggle-group.js.map +1 -0
  87. package/dist/components/toggle.js +33 -0
  88. package/dist/components/toggle.js.map +1 -0
  89. package/dist/components/toolbar.js +55 -0
  90. package/dist/components/toolbar.js.map +1 -0
  91. package/dist/components/tooltip.js +32 -0
  92. package/dist/components/tooltip.js.map +1 -0
  93. package/dist/icons.js +192 -0
  94. package/dist/icons.js.map +1 -0
  95. package/dist/index.js +30 -0
  96. package/dist/primitives/accordion.js +3 -0
  97. package/dist/primitives/alert-dialog.js +3 -0
  98. package/dist/primitives/autocomplete.js +3 -0
  99. package/dist/primitives/avatar.js +3 -0
  100. package/dist/primitives/button.js +3 -0
  101. package/dist/primitives/checkbox-group.js +3 -0
  102. package/dist/primitives/checkbox.js +3 -0
  103. package/dist/primitives/collapsible.js +3 -0
  104. package/dist/primitives/combobox.js +3 -0
  105. package/dist/primitives/context-menu.js +3 -0
  106. package/dist/primitives/csp-provider.js +3 -0
  107. package/dist/primitives/dialog.js +3 -0
  108. package/dist/primitives/direction-provider.js +3 -0
  109. package/dist/primitives/drawer.js +3 -0
  110. package/dist/primitives/field.js +3 -0
  111. package/dist/primitives/fieldset.js +3 -0
  112. package/dist/primitives/form.js +3 -0
  113. package/dist/primitives/input.js +3 -0
  114. package/dist/primitives/menu.js +3 -0
  115. package/dist/primitives/menubar.js +3 -0
  116. package/dist/primitives/meter.js +3 -0
  117. package/dist/primitives/navigation-menu.js +3 -0
  118. package/dist/primitives/number-field.js +3 -0
  119. package/dist/primitives/otp-field.js +3 -0
  120. package/dist/primitives/popover.js +3 -0
  121. package/dist/primitives/preview-card.js +3 -0
  122. package/dist/primitives/progress.js +3 -0
  123. package/dist/primitives/radio-group.js +3 -0
  124. package/dist/primitives/radio.js +3 -0
  125. package/dist/primitives/scroll-area.js +3 -0
  126. package/dist/primitives/select.js +3 -0
  127. package/dist/primitives/separator.js +3 -0
  128. package/dist/primitives/slider.js +3 -0
  129. package/dist/primitives/switch.js +3 -0
  130. package/dist/primitives/tabs.js +3 -0
  131. package/dist/primitives/toast.js +3 -0
  132. package/dist/primitives/toggle-group.js +3 -0
  133. package/dist/primitives/toggle.js +3 -0
  134. package/dist/primitives/toolbar.js +3 -0
  135. package/dist/primitives/tooltip.js +3 -0
  136. package/dist/primitives.js +84 -0
  137. package/dist/primitives.js.map +1 -0
  138. package/dist/src/components/accordion/accordion.d.ts +24 -0
  139. package/dist/src/components/accordion/index.d.ts +1 -0
  140. package/dist/src/components/alert-dialog/alert-dialog.d.ts +41 -0
  141. package/dist/src/components/alert-dialog/index.d.ts +1 -0
  142. package/dist/src/components/autocomplete/autocomplete.d.ts +38 -0
  143. package/dist/src/components/autocomplete/index.d.ts +1 -0
  144. package/dist/src/components/avatar/avatar.d.ts +40 -0
  145. package/dist/src/components/avatar/index.d.ts +1 -0
  146. package/dist/src/components/badge/badge.d.ts +63 -0
  147. package/dist/src/components/badge/index.d.ts +1 -0
  148. package/dist/src/components/button/button.d.ts +196 -0
  149. package/dist/src/components/button/close-button.d.ts +28 -0
  150. package/dist/src/components/button/index.d.ts +2 -0
  151. package/dist/src/components/checkbox/checkbox-group.d.ts +15 -0
  152. package/dist/src/components/checkbox/checkbox.d.ts +20 -0
  153. package/dist/src/components/checkbox/index.d.ts +2 -0
  154. package/dist/src/components/collapsible/collapsible.d.ts +20 -0
  155. package/dist/src/components/collapsible/index.d.ts +1 -0
  156. package/dist/src/components/combobox/combobox.d.ts +49 -0
  157. package/dist/src/components/combobox/index.d.ts +1 -0
  158. package/dist/src/components/context-menu/context-menu.d.ts +34 -0
  159. package/dist/src/components/context-menu/index.d.ts +1 -0
  160. package/dist/src/components/dialog/dialog.d.ts +41 -0
  161. package/dist/src/components/dialog/index.d.ts +1 -0
  162. package/dist/src/components/drawer/drawer.d.ts +32 -0
  163. package/dist/src/components/drawer/index.d.ts +1 -0
  164. package/dist/src/components/field/field.d.ts +27 -0
  165. package/dist/src/components/field/index.d.ts +1 -0
  166. package/dist/src/components/fieldset/fieldset.d.ts +18 -0
  167. package/dist/src/components/fieldset/index.d.ts +1 -0
  168. package/dist/src/components/form/form.d.ts +14 -0
  169. package/dist/src/components/form/index.d.ts +1 -0
  170. package/dist/src/components/input/index.d.ts +1 -0
  171. package/dist/src/components/input/input.d.ts +30 -0
  172. package/dist/src/components/kbd/index.d.ts +1 -0
  173. package/dist/src/components/kbd/kbd.d.ts +18 -0
  174. package/dist/src/components/menu/index.d.ts +1 -0
  175. package/dist/src/components/menu/menu.d.ts +47 -0
  176. package/dist/src/components/menubar/index.d.ts +1 -0
  177. package/dist/src/components/menubar/menubar.d.ts +14 -0
  178. package/dist/src/components/meter/index.d.ts +1 -0
  179. package/dist/src/components/meter/meter.d.ts +24 -0
  180. package/dist/src/components/navigation-menu/index.d.ts +1 -0
  181. package/dist/src/components/navigation-menu/navigation-menu.d.ts +35 -0
  182. package/dist/src/components/notification/index.d.ts +1 -0
  183. package/dist/src/components/notification/notification.d.ts +73 -0
  184. package/dist/src/components/number-field/index.d.ts +1 -0
  185. package/dist/src/components/number-field/number-field.d.ts +28 -0
  186. package/dist/src/components/otp-field/index.d.ts +1 -0
  187. package/dist/src/components/otp-field/otp-field.d.ts +17 -0
  188. package/dist/src/components/popover/index.d.ts +1 -0
  189. package/dist/src/components/popover/popover.d.ts +27 -0
  190. package/dist/src/components/preview-card/index.d.ts +1 -0
  191. package/dist/src/components/preview-card/preview-card.d.ts +22 -0
  192. package/dist/src/components/progress/index.d.ts +1 -0
  193. package/dist/src/components/progress/progress.d.ts +24 -0
  194. package/dist/src/components/radio-group/index.d.ts +1 -0
  195. package/dist/src/components/radio-group/radio-group.d.ts +28 -0
  196. package/dist/src/components/scroll-area/index.d.ts +1 -0
  197. package/dist/src/components/scroll-area/scroll-area.d.ts +25 -0
  198. package/dist/src/components/select/index.d.ts +1 -0
  199. package/dist/src/components/select/select.d.ts +36 -0
  200. package/dist/src/components/separator/index.d.ts +1 -0
  201. package/dist/src/components/separator/separator.d.ts +14 -0
  202. package/dist/src/components/slider/index.d.ts +1 -0
  203. package/dist/src/components/slider/slider.d.ts +30 -0
  204. package/dist/src/components/switch/index.d.ts +1 -0
  205. package/dist/src/components/switch/switch.d.ts +18 -0
  206. package/dist/src/components/tabs/index.d.ts +1 -0
  207. package/dist/src/components/tabs/tabs.d.ts +24 -0
  208. package/dist/src/components/toast/index.d.ts +1 -0
  209. package/dist/src/components/toast/toast.d.ts +34 -0
  210. package/dist/src/components/toggle/index.d.ts +1 -0
  211. package/dist/src/components/toggle/toggle.d.ts +33 -0
  212. package/dist/src/components/toggle-group/index.d.ts +1 -0
  213. package/dist/src/components/toggle-group/toggle-group.d.ts +15 -0
  214. package/dist/src/components/toolbar/index.d.ts +1 -0
  215. package/dist/src/components/toolbar/toolbar.d.ts +28 -0
  216. package/dist/src/components/tooltip/index.d.ts +1 -0
  217. package/dist/src/components/tooltip/tooltip.d.ts +23 -0
  218. package/dist/src/icons/discord.d.ts +3 -0
  219. package/dist/src/icons/github.d.ts +3 -0
  220. package/dist/src/icons/google.d.ts +3 -0
  221. package/dist/src/icons/imessage.d.ts +3 -0
  222. package/dist/src/icons/index.d.ts +18 -0
  223. package/dist/src/icons/photon-mark.d.ts +3 -0
  224. package/dist/src/icons/reddit.d.ts +3 -0
  225. package/dist/src/icons/slack.d.ts +3 -0
  226. package/dist/src/icons/telegram.d.ts +3 -0
  227. package/dist/src/icons/whatsapp.d.ts +3 -0
  228. package/dist/src/icons/x.d.ts +3 -0
  229. package/dist/src/icons/youtube.d.ts +3 -0
  230. package/dist/src/index.d.ts +11 -0
  231. package/dist/src/primitives/accordion.d.ts +5 -0
  232. package/dist/src/primitives/alert-dialog.d.ts +5 -0
  233. package/dist/src/primitives/autocomplete.d.ts +5 -0
  234. package/dist/src/primitives/avatar.d.ts +5 -0
  235. package/dist/src/primitives/button.d.ts +5 -0
  236. package/dist/src/primitives/checkbox-group.d.ts +5 -0
  237. package/dist/src/primitives/checkbox.d.ts +5 -0
  238. package/dist/src/primitives/collapsible.d.ts +5 -0
  239. package/dist/src/primitives/combobox.d.ts +5 -0
  240. package/dist/src/primitives/context-menu.d.ts +5 -0
  241. package/dist/src/primitives/csp-provider.d.ts +5 -0
  242. package/dist/src/primitives/dialog.d.ts +5 -0
  243. package/dist/src/primitives/direction-provider.d.ts +5 -0
  244. package/dist/src/primitives/drawer.d.ts +5 -0
  245. package/dist/src/primitives/field.d.ts +5 -0
  246. package/dist/src/primitives/fieldset.d.ts +5 -0
  247. package/dist/src/primitives/form.d.ts +5 -0
  248. package/dist/src/primitives/index.d.ts +44 -0
  249. package/dist/src/primitives/input.d.ts +5 -0
  250. package/dist/src/primitives/menu.d.ts +5 -0
  251. package/dist/src/primitives/menubar.d.ts +5 -0
  252. package/dist/src/primitives/meter.d.ts +5 -0
  253. package/dist/src/primitives/navigation-menu.d.ts +5 -0
  254. package/dist/src/primitives/number-field.d.ts +5 -0
  255. package/dist/src/primitives/otp-field.d.ts +5 -0
  256. package/dist/src/primitives/popover.d.ts +5 -0
  257. package/dist/src/primitives/preview-card.d.ts +5 -0
  258. package/dist/src/primitives/progress.d.ts +5 -0
  259. package/dist/src/primitives/radio-group.d.ts +5 -0
  260. package/dist/src/primitives/radio.d.ts +5 -0
  261. package/dist/src/primitives/scroll-area.d.ts +5 -0
  262. package/dist/src/primitives/select.d.ts +5 -0
  263. package/dist/src/primitives/separator.d.ts +5 -0
  264. package/dist/src/primitives/slider.d.ts +5 -0
  265. package/dist/src/primitives/switch.d.ts +5 -0
  266. package/dist/src/primitives/tabs.d.ts +5 -0
  267. package/dist/src/primitives/toast.d.ts +5 -0
  268. package/dist/src/primitives/toggle-group.d.ts +5 -0
  269. package/dist/src/primitives/toggle.d.ts +5 -0
  270. package/dist/src/primitives/toolbar.d.ts +5 -0
  271. package/dist/src/primitives/tooltip.d.ts +5 -0
  272. package/dist/src/utils/cn.d.ts +3 -0
  273. package/dist/src/utils/index.d.ts +4 -0
  274. package/dist/src/utils/is-react-component.d.ts +9 -0
  275. package/dist/src/utils/link-provider.d.ts +17 -0
  276. package/dist/src/utils/resolve-variant.d.ts +19 -0
  277. package/dist/utils.js +11 -0
  278. package/package.json +406 -0
  279. package/src/styles/fonts.css +20 -0
  280. package/src/styles/pho.css +50 -0
  281. package/src/styles/theme.css +289 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Pho Design System — design tokens.
3
+ *
4
+ * Naming: every semantic token lives under the `pho-*` namespace so the
5
+ * generated utilities (text-pho-*, bg-pho-*, border-pho-*, ring-pho-*) never
6
+ * collide with a consumer's own Tailwind theme.
7
+ *
8
+ * Theming: light/dark values are expressed once with the CSS `light-dark()`
9
+ * function, resolved by the `color-scheme` set in pho.css (`:root` = light,
10
+ * `[data-mode="dark"]` = dark). No duplicated dark-mode override block.
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.
15
+ *
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).
18
+ */
19
+
20
+ @theme {
21
+ /* ============================== Fonts ============================== */
22
+ --font-sans:
23
+ "PolySans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
24
+ Arial, sans-serif;
25
+ --font-display: var(--font-sans);
26
+ --font-mono:
27
+ "Azeret Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
28
+ "Liberation Mono", "Courier New", monospace;
29
+
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;
42
+
43
+ /* =========================== Type scale =========================== */
44
+ --text-2xs: 0.625rem;
45
+ --text-2xs--line-height: 0.875rem;
46
+ --text-xs: 0.75rem;
47
+ --text-xs--line-height: 1.125rem;
48
+ --text-sm: 0.875rem;
49
+ --text-sm--line-height: 1.25rem;
50
+ --text-md: 1rem;
51
+ --text-md--line-height: 1.5rem;
52
+ --text-lg: 1.125rem;
53
+ --text-lg--line-height: 1.75rem;
54
+ --text-xl: 1.25rem;
55
+ --text-xl--line-height: 1.875rem;
56
+
57
+ --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;
62
+ --text-display-md--line-height: 2.75rem;
63
+ --text-display-md--letter-spacing: -0.72px;
64
+ --text-display-lg: 3rem;
65
+ --text-display-lg--line-height: 3.75rem;
66
+ --text-display-lg--letter-spacing: -0.96px;
67
+ --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;
73
+
74
+ /* ============================= Radius ============================= */
75
+ --radius-xs: 0.125rem;
76
+ --radius-sm: 0.25rem;
77
+ --radius-md: 0.375rem;
78
+ --radius-lg: 0.5rem;
79
+ --radius-xl: 0.75rem;
80
+ --radius-2xl: 1rem;
81
+ --radius-3xl: 1.5rem;
82
+
83
+ /* ============================= Shadows ============================= */
84
+ --shadow-pho-xs: 0 1px 2px rgba(10, 13, 18, 0.05);
85
+ --shadow-pho-sm:
86
+ 0 1px 3px rgba(10, 13, 18, 0.1), 0 1px 2px -1px rgba(10, 13, 18, 0.1);
87
+ --shadow-pho-md:
88
+ 0 4px 6px -1px rgba(10, 13, 18, 0.1), 0 2px 4px -2px rgba(10, 13, 18, 0.06);
89
+ --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);
92
+ --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);
100
+
101
+ /* =================== Semantic: text (text-pho-*) =================== */
102
+ --text-color-pho-primary: light-dark(
103
+ var(--color-neutral-900),
104
+ var(--color-neutral-50)
105
+ );
106
+ --text-color-pho-secondary: light-dark(
107
+ var(--color-neutral-700),
108
+ var(--color-neutral-300)
109
+ );
110
+ --text-color-pho-secondary-hover: light-dark(
111
+ var(--color-neutral-800),
112
+ var(--color-neutral-200)
113
+ );
114
+ --text-color-pho-tertiary: light-dark(
115
+ var(--color-neutral-600),
116
+ var(--color-neutral-400)
117
+ );
118
+ --text-color-pho-tertiary-hover: light-dark(
119
+ var(--color-neutral-700),
120
+ var(--color-neutral-300)
121
+ );
122
+ --text-color-pho-quaternary: light-dark(
123
+ var(--color-neutral-500),
124
+ var(--color-neutral-400)
125
+ );
126
+ --text-color-pho-placeholder: var(--color-neutral-500);
127
+ --text-color-pho-disabled: light-dark(
128
+ var(--color-neutral-400),
129
+ var(--color-neutral-600)
130
+ );
131
+ --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
+ );
156
+
157
+ /* ============ Semantic: foreground/icons (text-fg-pho-*) ============ */
158
+ --text-color-fg-pho-primary: light-dark(
159
+ var(--color-neutral-900),
160
+ var(--color-white)
161
+ );
162
+ --text-color-fg-pho-secondary: light-dark(
163
+ var(--color-neutral-700),
164
+ var(--color-neutral-300)
165
+ );
166
+ --text-color-fg-pho-quaternary: light-dark(
167
+ var(--color-neutral-400),
168
+ var(--color-neutral-600)
169
+ );
170
+ --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)
181
+ );
182
+
183
+ /* =============== 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
+ );
205
+ --background-color-pho-disabled: light-dark(
206
+ var(--color-neutral-100),
207
+ var(--color-neutral-800)
208
+ );
209
+ --background-color-pho-brand-solid: var(--color-brand-600);
210
+ --background-color-pho-brand-solid-hover: light-dark(
211
+ var(--color-brand-700),
212
+ var(--color-brand-500)
213
+ );
214
+ --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)
222
+ );
223
+ --background-color-pho-error-primary: light-dark(
224
+ var(--color-red-50),
225
+ var(--color-red-950)
226
+ );
227
+ /* Quiet hover wash for ghost surfaces (pre-blended, so no /opacity needed). */
228
+ --background-color-pho-ghost-hover: light-dark(
229
+ rgba(10, 13, 18, 0.05),
230
+ rgba(255, 255, 255, 0.06)
231
+ );
232
+ /* Modal/scrim backdrop base (used with an /opacity utility is avoided —
233
+ callers layer their own alpha). */
234
+ --background-color-pho-overlay: light-dark(
235
+ rgba(10, 13, 18, 0.7),
236
+ rgba(0, 0, 0, 0.6)
237
+ );
238
+
239
+ /* ================ Semantic: border (border-pho-*) ================ */
240
+ --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)
247
+ );
248
+ --border-color-pho-tertiary: light-dark(
249
+ var(--color-neutral-100),
250
+ var(--color-neutral-800)
251
+ );
252
+ --border-color-pho-brand: light-dark(
253
+ var(--color-brand-500),
254
+ var(--color-brand-400)
255
+ );
256
+ --border-color-pho-error: light-dark(
257
+ var(--color-red-500),
258
+ var(--color-red-400)
259
+ );
260
+ --border-color-pho-error-subtle: light-dark(
261
+ var(--color-red-300),
262
+ var(--color-red-500)
263
+ );
264
+ /* Hairline interactive edge shared by hover/selected surfaces. */
265
+ --border-color-pho-interactive: light-dark(
266
+ rgba(10, 13, 18, 0.1),
267
+ rgba(255, 255, 255, 0.1)
268
+ );
269
+
270
+ /* ================== Semantic: ring (ring-pho-*) ================== */
271
+ --ring-color-pho-primary: light-dark(
272
+ var(--color-neutral-300),
273
+ var(--color-neutral-700)
274
+ );
275
+ --ring-color-pho-brand: var(--color-brand-500);
276
+ --ring-color-pho-error: var(--color-red-500);
277
+ --ring-color-pho-error-subtle: light-dark(
278
+ var(--color-red-300),
279
+ var(--color-red-500)
280
+ );
281
+ --ring-color-pho-interactive: light-dark(
282
+ rgba(10, 13, 18, 0.1),
283
+ rgba(255, 255, 255, 0.1)
284
+ );
285
+
286
+ /* ============== Semantic: outline (focus rings) ============== */
287
+ --outline-color-pho-brand: var(--color-brand-500);
288
+ --outline-color-pho-error: var(--color-red-500);
289
+ }