tyrell-components 1.0.0-TC45 → 1.0.0-TC47

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 (353) hide show
  1. package/README.md +1 -1
  2. package/css/tyrell-theme.css +93 -100
  3. package/dist/tyrell-theme.css +93 -100
  4. package/dist/tyrell.js +1 -1
  5. package/lib/base/ty-component.d.ts +12 -7
  6. package/lib/base/ty-component.js +8 -139
  7. package/lib/components/button.d.ts +2 -16
  8. package/lib/components/button.js +0 -36
  9. package/lib/components/calendar-month.d.ts +2 -48
  10. package/lib/components/calendar-month.js +4 -166
  11. package/lib/components/calendar-navigation.d.ts +3 -48
  12. package/lib/components/calendar-navigation.js +3 -126
  13. package/lib/components/calendar.d.ts +3 -80
  14. package/lib/components/calendar.js +8 -230
  15. package/lib/components/checkbox.d.ts +4 -71
  16. package/lib/components/checkbox.js +7 -151
  17. package/lib/components/copy.d.ts +3 -56
  18. package/lib/components/copy.js +1 -120
  19. package/lib/components/date-picker.d.ts +13 -162
  20. package/lib/components/date-picker.js +39 -584
  21. package/lib/components/file-upload.d.ts +3 -15
  22. package/lib/components/file-upload.js +0 -37
  23. package/lib/components/icon.d.ts +3 -24
  24. package/lib/components/icon.js +1 -90
  25. package/lib/components/input.d.ts +7 -107
  26. package/lib/components/input.js +4 -193
  27. package/lib/components/modal.d.ts +3 -26
  28. package/lib/components/modal.js +1 -188
  29. package/lib/components/option.d.ts +2 -9
  30. package/lib/components/option.js +0 -48
  31. package/lib/components/popup.d.ts +2 -17
  32. package/lib/components/popup.js +4 -135
  33. package/lib/components/radio.d.ts +3 -23
  34. package/lib/components/radio.js +0 -63
  35. package/lib/components/resize-observer.d.ts +2 -30
  36. package/lib/components/resize-observer.js +0 -45
  37. package/lib/components/scroll-container.d.ts +2 -12
  38. package/lib/components/scroll-container.js +3 -46
  39. package/lib/components/select.d.ts +22 -153
  40. package/lib/components/select.js +30 -585
  41. package/lib/components/selected-tags.d.ts +4 -47
  42. package/lib/components/selected-tags.js +0 -94
  43. package/lib/components/step.d.ts +1 -6
  44. package/lib/components/step.js +0 -6
  45. package/lib/components/switch.d.ts +0 -11
  46. package/lib/components/switch.js +2 -36
  47. package/lib/components/tab.d.ts +1 -6
  48. package/lib/components/tab.js +0 -7
  49. package/lib/components/tabs.d.ts +3 -63
  50. package/lib/components/tabs.js +5 -283
  51. package/lib/components/tag.d.ts +2 -36
  52. package/lib/components/tag.js +5 -105
  53. package/lib/components/textarea.d.ts +6 -86
  54. package/lib/components/textarea.js +2 -173
  55. package/lib/components/tooltip.d.ts +3 -11
  56. package/lib/components/tooltip.js +2 -160
  57. package/lib/components/wizard.d.ts +4 -54
  58. package/lib/components/wizard.js +0 -228
  59. package/lib/icons/fontawesome/brands.d.ts +0 -1
  60. package/lib/icons/fontawesome/brands.js +0 -8
  61. package/lib/icons/fontawesome/regular.d.ts +0 -1
  62. package/lib/icons/fontawesome/regular.js +0 -8
  63. package/lib/icons/fontawesome/solid.d.ts +0 -1
  64. package/lib/icons/fontawesome/solid.js +0 -8
  65. package/lib/icons/heroicons/micro.d.ts +0 -1
  66. package/lib/icons/heroicons/micro.js +0 -8
  67. package/lib/icons/heroicons/mini.d.ts +0 -1
  68. package/lib/icons/heroicons/mini.js +0 -8
  69. package/lib/icons/heroicons/outline.d.ts +0 -1
  70. package/lib/icons/heroicons/outline.js +0 -8
  71. package/lib/icons/heroicons/solid.d.ts +0 -1
  72. package/lib/icons/heroicons/solid.js +0 -8
  73. package/lib/icons/lucide.d.ts +0 -1
  74. package/lib/icons/lucide.js +0 -1872
  75. package/lib/icons/material/filled.d.ts +0 -1
  76. package/lib/icons/material/filled.js +0 -10
  77. package/lib/icons/material/outlined.d.ts +0 -1
  78. package/lib/icons/material/outlined.js +0 -10
  79. package/lib/icons/material/round.d.ts +0 -1
  80. package/lib/icons/material/round.js +0 -10
  81. package/lib/icons/material/sharp.d.ts +0 -1
  82. package/lib/icons/material/sharp.js +0 -10
  83. package/lib/icons/material/two-tone.d.ts +0 -1
  84. package/lib/icons/material/two-tone.js +0 -10
  85. package/lib/index.d.ts +0 -1
  86. package/lib/index.js +0 -20
  87. package/lib/styles/button.d.ts +2 -20
  88. package/lib/styles/button.js +18 -121
  89. package/lib/styles/calendar-month.d.ts +1 -5
  90. package/lib/styles/calendar-month.js +4 -61
  91. package/lib/styles/calendar-navigation.d.ts +2 -6
  92. package/lib/styles/calendar-navigation.js +2 -27
  93. package/lib/styles/calendar.d.ts +1 -2
  94. package/lib/styles/calendar.js +1 -14
  95. package/lib/styles/checkbox.d.ts +0 -1
  96. package/lib/styles/checkbox.js +1 -23
  97. package/lib/styles/copy.d.ts +0 -1
  98. package/lib/styles/copy.js +2 -17
  99. package/lib/styles/custom-scrollbar.d.ts +1 -2
  100. package/lib/styles/custom-scrollbar.js +3 -18
  101. package/lib/styles/date-picker.d.ts +1 -5
  102. package/lib/styles/date-picker.js +8 -38
  103. package/lib/styles/file-upload.d.ts +1 -2
  104. package/lib/styles/file-upload.js +1 -16
  105. package/lib/styles/icon.d.ts +2 -6
  106. package/lib/styles/icon.js +7 -21
  107. package/lib/styles/input.d.ts +1 -6
  108. package/lib/styles/input.js +5 -54
  109. package/lib/styles/modal.d.ts +1 -2
  110. package/lib/styles/modal.js +3 -23
  111. package/lib/styles/option.d.ts +2 -6
  112. package/lib/styles/option.js +2 -12
  113. package/lib/styles/popup.d.ts +1 -2
  114. package/lib/styles/popup.js +4 -25
  115. package/lib/styles/radio.d.ts +0 -1
  116. package/lib/styles/radio.js +2 -16
  117. package/lib/styles/resize-observer.d.ts +1 -2
  118. package/lib/styles/resize-observer.js +0 -7
  119. package/lib/styles/scroll-container.d.ts +1 -2
  120. package/lib/styles/scroll-container.js +0 -19
  121. package/lib/styles/select-base.d.ts +0 -1
  122. package/lib/styles/select-base.js +15 -74
  123. package/lib/styles/select.d.ts +1 -2
  124. package/lib/styles/select.js +2 -14
  125. package/lib/styles/step.d.ts +1 -2
  126. package/lib/styles/step.js +0 -4
  127. package/lib/styles/switch.d.ts +0 -1
  128. package/lib/styles/switch.js +2 -20
  129. package/lib/styles/tab.d.ts +1 -2
  130. package/lib/styles/tab.js +0 -5
  131. package/lib/styles/tabs.d.ts +3 -11
  132. package/lib/styles/tabs.js +10 -48
  133. package/lib/styles/tag.d.ts +1 -5
  134. package/lib/styles/tag.js +2 -31
  135. package/lib/styles/textarea.d.ts +1 -2
  136. package/lib/styles/textarea.js +2 -45
  137. package/lib/styles/tooltip.d.ts +0 -1
  138. package/lib/styles/tooltip.js +0 -10
  139. package/lib/styles/wizard.d.ts +5 -21
  140. package/lib/styles/wizard.js +8 -88
  141. package/lib/types/common.d.ts +0 -2
  142. package/lib/types/common.js +0 -12
  143. package/lib/utils/calendar-utils.d.ts +4 -21
  144. package/lib/utils/calendar-utils.js +4 -177
  145. package/lib/utils/custom-scrollbar.d.ts +6 -20
  146. package/lib/utils/custom-scrollbar.js +1 -45
  147. package/lib/utils/flavor-sheet.d.ts +0 -1
  148. package/lib/utils/flavor-sheet.js +0 -23
  149. package/lib/utils/icon-registry.d.ts +0 -2
  150. package/lib/utils/icon-registry.js +1 -107
  151. package/lib/utils/icons.d.ts +0 -1
  152. package/lib/utils/icons.js +0 -9
  153. package/lib/utils/loader-registry.d.ts +0 -1
  154. package/lib/utils/loader-registry.js +0 -32
  155. package/lib/utils/locale.d.ts +2 -23
  156. package/lib/utils/locale.js +0 -86
  157. package/lib/utils/mobile.d.ts +0 -1
  158. package/lib/utils/mobile.js +0 -17
  159. package/lib/utils/number-format.d.ts +0 -2
  160. package/lib/utils/number-format.js +2 -65
  161. package/lib/utils/positioning.d.ts +50 -7
  162. package/lib/utils/positioning.js +49 -59
  163. package/lib/utils/property-capture.d.ts +5 -27
  164. package/lib/utils/property-capture.js +0 -108
  165. package/lib/utils/property-manager.d.ts +0 -1
  166. package/lib/utils/property-manager.js +0 -70
  167. package/lib/utils/resize-observer.d.ts +0 -1
  168. package/lib/utils/resize-observer.js +0 -36
  169. package/lib/utils/scroll-lock.d.ts +4 -11
  170. package/lib/utils/scroll-lock.js +0 -107
  171. package/lib/utils/styles.d.ts +0 -1
  172. package/lib/utils/styles.js +0 -24
  173. package/lib/version.d.ts +1 -2
  174. package/lib/version.js +1 -11
  175. package/package.json +2 -2
  176. package/lib/base/ty-component.d.ts.map +0 -1
  177. package/lib/base/ty-component.js.map +0 -1
  178. package/lib/components/button.d.ts.map +0 -1
  179. package/lib/components/button.js.map +0 -1
  180. package/lib/components/calendar-month.d.ts.map +0 -1
  181. package/lib/components/calendar-month.js.map +0 -1
  182. package/lib/components/calendar-navigation.d.ts.map +0 -1
  183. package/lib/components/calendar-navigation.js.map +0 -1
  184. package/lib/components/calendar.d.ts.map +0 -1
  185. package/lib/components/calendar.js.map +0 -1
  186. package/lib/components/checkbox.d.ts.map +0 -1
  187. package/lib/components/checkbox.js.map +0 -1
  188. package/lib/components/copy.d.ts.map +0 -1
  189. package/lib/components/copy.js.map +0 -1
  190. package/lib/components/date-picker.d.ts.map +0 -1
  191. package/lib/components/date-picker.js.map +0 -1
  192. package/lib/components/file-upload.d.ts.map +0 -1
  193. package/lib/components/file-upload.js.map +0 -1
  194. package/lib/components/icon.d.ts.map +0 -1
  195. package/lib/components/icon.js.map +0 -1
  196. package/lib/components/input.d.ts.map +0 -1
  197. package/lib/components/input.js.map +0 -1
  198. package/lib/components/modal.d.ts.map +0 -1
  199. package/lib/components/modal.js.map +0 -1
  200. package/lib/components/option.d.ts.map +0 -1
  201. package/lib/components/option.js.map +0 -1
  202. package/lib/components/popup.d.ts.map +0 -1
  203. package/lib/components/popup.js.map +0 -1
  204. package/lib/components/radio.d.ts.map +0 -1
  205. package/lib/components/radio.js.map +0 -1
  206. package/lib/components/resize-observer.d.ts.map +0 -1
  207. package/lib/components/resize-observer.js.map +0 -1
  208. package/lib/components/scroll-container.d.ts.map +0 -1
  209. package/lib/components/scroll-container.js.map +0 -1
  210. package/lib/components/select.d.ts.map +0 -1
  211. package/lib/components/select.js.map +0 -1
  212. package/lib/components/selected-tags.d.ts.map +0 -1
  213. package/lib/components/selected-tags.js.map +0 -1
  214. package/lib/components/step.d.ts.map +0 -1
  215. package/lib/components/step.js.map +0 -1
  216. package/lib/components/switch.d.ts.map +0 -1
  217. package/lib/components/switch.js.map +0 -1
  218. package/lib/components/tab.d.ts.map +0 -1
  219. package/lib/components/tab.js.map +0 -1
  220. package/lib/components/tabs.d.ts.map +0 -1
  221. package/lib/components/tabs.js.map +0 -1
  222. package/lib/components/tag.d.ts.map +0 -1
  223. package/lib/components/tag.js.map +0 -1
  224. package/lib/components/textarea.d.ts.map +0 -1
  225. package/lib/components/textarea.js.map +0 -1
  226. package/lib/components/tooltip.d.ts.map +0 -1
  227. package/lib/components/tooltip.js.map +0 -1
  228. package/lib/components/wizard.d.ts.map +0 -1
  229. package/lib/components/wizard.js.map +0 -1
  230. package/lib/icons/fontawesome/brands.d.ts.map +0 -1
  231. package/lib/icons/fontawesome/brands.js.map +0 -1
  232. package/lib/icons/fontawesome/regular.d.ts.map +0 -1
  233. package/lib/icons/fontawesome/regular.js.map +0 -1
  234. package/lib/icons/fontawesome/solid.d.ts.map +0 -1
  235. package/lib/icons/fontawesome/solid.js.map +0 -1
  236. package/lib/icons/heroicons/micro.d.ts.map +0 -1
  237. package/lib/icons/heroicons/micro.js.map +0 -1
  238. package/lib/icons/heroicons/mini.d.ts.map +0 -1
  239. package/lib/icons/heroicons/mini.js.map +0 -1
  240. package/lib/icons/heroicons/outline.d.ts.map +0 -1
  241. package/lib/icons/heroicons/outline.js.map +0 -1
  242. package/lib/icons/heroicons/solid.d.ts.map +0 -1
  243. package/lib/icons/heroicons/solid.js.map +0 -1
  244. package/lib/icons/lucide.d.ts.map +0 -1
  245. package/lib/icons/lucide.js.map +0 -1
  246. package/lib/icons/material/filled.d.ts.map +0 -1
  247. package/lib/icons/material/filled.js.map +0 -1
  248. package/lib/icons/material/outlined.d.ts.map +0 -1
  249. package/lib/icons/material/outlined.js.map +0 -1
  250. package/lib/icons/material/round.d.ts.map +0 -1
  251. package/lib/icons/material/round.js.map +0 -1
  252. package/lib/icons/material/sharp.d.ts.map +0 -1
  253. package/lib/icons/material/sharp.js.map +0 -1
  254. package/lib/icons/material/two-tone.d.ts.map +0 -1
  255. package/lib/icons/material/two-tone.js.map +0 -1
  256. package/lib/index.d.ts.map +0 -1
  257. package/lib/index.js.map +0 -1
  258. package/lib/styles/button.d.ts.map +0 -1
  259. package/lib/styles/button.js.map +0 -1
  260. package/lib/styles/calendar-month.d.ts.map +0 -1
  261. package/lib/styles/calendar-month.js.map +0 -1
  262. package/lib/styles/calendar-navigation.d.ts.map +0 -1
  263. package/lib/styles/calendar-navigation.js.map +0 -1
  264. package/lib/styles/calendar.d.ts.map +0 -1
  265. package/lib/styles/calendar.js.map +0 -1
  266. package/lib/styles/checkbox.d.ts.map +0 -1
  267. package/lib/styles/checkbox.js.map +0 -1
  268. package/lib/styles/copy.d.ts.map +0 -1
  269. package/lib/styles/copy.js.map +0 -1
  270. package/lib/styles/custom-scrollbar.d.ts.map +0 -1
  271. package/lib/styles/custom-scrollbar.js.map +0 -1
  272. package/lib/styles/date-picker.d.ts.map +0 -1
  273. package/lib/styles/date-picker.js.map +0 -1
  274. package/lib/styles/file-upload.d.ts.map +0 -1
  275. package/lib/styles/file-upload.js.map +0 -1
  276. package/lib/styles/icon.d.ts.map +0 -1
  277. package/lib/styles/icon.js.map +0 -1
  278. package/lib/styles/input.d.ts.map +0 -1
  279. package/lib/styles/input.js.map +0 -1
  280. package/lib/styles/modal.d.ts.map +0 -1
  281. package/lib/styles/modal.js.map +0 -1
  282. package/lib/styles/multiselect.d.ts +0 -8
  283. package/lib/styles/multiselect.d.ts.map +0 -1
  284. package/lib/styles/multiselect.js +0 -849
  285. package/lib/styles/multiselect.js.map +0 -1
  286. package/lib/styles/option.d.ts.map +0 -1
  287. package/lib/styles/option.js.map +0 -1
  288. package/lib/styles/popup.d.ts.map +0 -1
  289. package/lib/styles/popup.js.map +0 -1
  290. package/lib/styles/radio.d.ts.map +0 -1
  291. package/lib/styles/radio.js.map +0 -1
  292. package/lib/styles/resize-observer.d.ts.map +0 -1
  293. package/lib/styles/resize-observer.js.map +0 -1
  294. package/lib/styles/scroll-container.d.ts.map +0 -1
  295. package/lib/styles/scroll-container.js.map +0 -1
  296. package/lib/styles/select-base.d.ts.map +0 -1
  297. package/lib/styles/select-base.js.map +0 -1
  298. package/lib/styles/select.d.ts.map +0 -1
  299. package/lib/styles/select.js.map +0 -1
  300. package/lib/styles/step.d.ts.map +0 -1
  301. package/lib/styles/step.js.map +0 -1
  302. package/lib/styles/switch.d.ts.map +0 -1
  303. package/lib/styles/switch.js.map +0 -1
  304. package/lib/styles/tab.d.ts.map +0 -1
  305. package/lib/styles/tab.js.map +0 -1
  306. package/lib/styles/tabs.d.ts.map +0 -1
  307. package/lib/styles/tabs.js.map +0 -1
  308. package/lib/styles/tag.d.ts.map +0 -1
  309. package/lib/styles/tag.js.map +0 -1
  310. package/lib/styles/textarea.d.ts.map +0 -1
  311. package/lib/styles/textarea.js.map +0 -1
  312. package/lib/styles/tooltip.d.ts.map +0 -1
  313. package/lib/styles/tooltip.js.map +0 -1
  314. package/lib/styles/wizard.d.ts.map +0 -1
  315. package/lib/styles/wizard.js.map +0 -1
  316. package/lib/types/common.d.ts.map +0 -1
  317. package/lib/types/common.js.map +0 -1
  318. package/lib/utils/calendar-utils.d.ts.map +0 -1
  319. package/lib/utils/calendar-utils.js.map +0 -1
  320. package/lib/utils/custom-scrollbar.d.ts.map +0 -1
  321. package/lib/utils/custom-scrollbar.js.map +0 -1
  322. package/lib/utils/flavor-sheet.d.ts.map +0 -1
  323. package/lib/utils/flavor-sheet.js.map +0 -1
  324. package/lib/utils/icon-registry.d.ts.map +0 -1
  325. package/lib/utils/icon-registry.js.map +0 -1
  326. package/lib/utils/icons.d.ts.map +0 -1
  327. package/lib/utils/icons.js.map +0 -1
  328. package/lib/utils/loader-registry.d.ts.map +0 -1
  329. package/lib/utils/loader-registry.js.map +0 -1
  330. package/lib/utils/locale.d.ts.map +0 -1
  331. package/lib/utils/locale.js.map +0 -1
  332. package/lib/utils/mobile.d.ts.map +0 -1
  333. package/lib/utils/mobile.js.map +0 -1
  334. package/lib/utils/number-format.d.ts.map +0 -1
  335. package/lib/utils/number-format.js.map +0 -1
  336. package/lib/utils/parse-boolean.d.ts +0 -39
  337. package/lib/utils/parse-boolean.d.ts.map +0 -1
  338. package/lib/utils/parse-boolean.js +0 -58
  339. package/lib/utils/parse-boolean.js.map +0 -1
  340. package/lib/utils/positioning.d.ts.map +0 -1
  341. package/lib/utils/positioning.js.map +0 -1
  342. package/lib/utils/property-capture.d.ts.map +0 -1
  343. package/lib/utils/property-capture.js.map +0 -1
  344. package/lib/utils/property-manager.d.ts.map +0 -1
  345. package/lib/utils/property-manager.js.map +0 -1
  346. package/lib/utils/resize-observer.d.ts.map +0 -1
  347. package/lib/utils/resize-observer.js.map +0 -1
  348. package/lib/utils/scroll-lock.d.ts.map +0 -1
  349. package/lib/utils/scroll-lock.js.map +0 -1
  350. package/lib/utils/styles.d.ts.map +0 -1
  351. package/lib/utils/styles.js.map +0 -1
  352. package/lib/version.d.ts.map +0 -1
  353. package/lib/version.js.map +0 -1
package/README.md CHANGED
@@ -62,7 +62,7 @@ import 'tyrell-components/input'
62
62
 
63
63
  ## Available Components
64
64
 
65
- - **ty-button** - Button with multiple flavors (primary, secondary, success, danger, warning)
65
+ - **ty-button** - Button with multiple flavors (primary, success, danger, warning, neutral)
66
66
  - **ty-modal** - Modal dialog with backdrop, ESC key, focus trap
67
67
  - **ty-input** - Input field with validation, number formatting
68
68
  - **ty-dropdown** - Dropdown with positioning, keyboard navigation
@@ -101,8 +101,8 @@
101
101
  * solid buttons. One slider rebrands the page.
102
102
  * --------------------------------------------------------------*/
103
103
 
104
- --ty-brand-hue: 45;
105
- --ty-brand-chroma: 0.125; /* restrained default; the loud 0.2 read as "bollywood" */
104
+ --ty-brand-hue: 252;
105
+ --ty-brand-chroma: 0.08; /* restrained default; the loud 0.2 read as "bollywood" */
106
106
 
107
107
  /* Surface tint. 0 = monochrome surfaces (default, no brand leak).
108
108
  * Bump to ~0.005 (light) / ~0.012 (dark) to warm surfaces toward brand. */
@@ -120,11 +120,11 @@
120
120
  --ty-success-hue: 145;
121
121
  --ty-success-chroma: calc(var(--ty-brand-chroma) * 1.08);
122
122
 
123
- --ty-warning-hue: 75;
124
- --ty-warning-chroma: calc(var(--ty-brand-chroma) * 2);
123
+ --ty-warning-hue: 76;
124
+ --ty-warning-chroma: calc(var(--ty-brand-chroma) * 2.22);
125
125
 
126
- --ty-danger-hue: 25;
127
- --ty-danger-chroma: calc(var(--ty-brand-chroma) * 1.31);
126
+ --ty-danger-hue: 31;
127
+ --ty-danger-chroma: calc(var(--ty-brand-chroma) * 1.95);
128
128
 
129
129
  /* Neutral is ACHROMATIC by default — greys do not follow the brand.
130
130
  * Most of an interface is monochrome; a rebrand should not drift it.
@@ -147,9 +147,16 @@
147
147
  --ty-l-soft: 0.72; /* - low emphasis */
148
148
  --ty-l-faint: 0.88; /* -- min emphasis */
149
149
 
150
- --ty-l-bg-base: 0.96;
151
- --ty-l-bg-bold: 0.92;
152
- --ty-l-bg-soft: 0.98;
150
+ /* BG TRACK — the flavor's BASE color at low opacity, composited over
151
+ * whatever surface it sits on. No bg-specific L or chroma stops: the
152
+ * ink is always mid-scale (gamut-happy, l-factor-safe), and the alpha
153
+ * does the washing. Direction is automatic — the same token lightens
154
+ * a dark surface and darkens a light one — and l-factor reaches the
155
+ * tint only through the ink, scaled by alpha: it points, it doesn't
156
+ * shove. */
157
+ --ty-a-bg-base: 9%;
158
+ --ty-a-bg-bold: 17%;
159
+ --ty-a-bg-soft: 4%;
153
160
 
154
161
  /* Text ladder (--ty-text-*) and surface borders — historically
155
162
  * hardcoded hexes in tyrell.css that a rebrand never touched; now
@@ -214,10 +221,6 @@
214
221
  --ty-c-soft-mult: 0.77;
215
222
  --ty-c-faint-mult: 0.46;
216
223
 
217
- --ty-c-bg-base-mult: 0.15;
218
- --ty-c-bg-bold-mult: 0.38;
219
- --ty-c-bg-soft-mult: 0.08;
220
-
221
224
  /* ----------------------------------------------------------------
222
225
  * Tier 5 — PER-FLAVOR L-FACTOR
223
226
  * Multiplies the L-curve values for that flavor only. Default 1 =
@@ -237,8 +240,8 @@
237
240
 
238
241
  --ty-primary-l-factor: 1;
239
242
  --ty-success-l-factor: 1;
240
- --ty-warning-l-factor: 1.15;
241
- --ty-danger-l-factor: 1;
243
+ --ty-warning-l-factor: 1.3;
244
+ --ty-danger-l-factor: 1.01;
242
245
  --ty-neutral-l-factor: 1;
243
246
 
244
247
  /* ----------------------------------------------------------------
@@ -276,16 +279,30 @@
276
279
  * black-text (Material treats amber the same way). Other flavors: 0. */
277
280
  --ty-primary-solid-l: 0;
278
281
  --ty-success-solid-l: 0;
279
- --ty-warning-solid-l: 0.1;
282
+ --ty-warning-solid-l: 0;
280
283
  --ty-danger-solid-l: 0;
281
284
  }
282
285
 
283
- /* Dark mode overrides for the L-curve and saturation curve. Tier 1 + 2
284
- * seeds and Tier 5 L-factors carry through unchanged from :root. */
286
+ /* Dark mode overrides for the L-curve and saturation curve, plus Tier 1
287
+ * (brand-hue/chroma), Tier 2 (per-flavor hue/chroma) and Tier 5 (l-factor)
288
+ * — dark ships its own distinct brand/semantic tuning here, not a
289
+ * carry-through of :root's light values. */
285
290
  html.dark,
286
291
  html[data-theme="dark"],
287
292
  [data-ty-theme].dark,
288
293
  [data-ty-theme][data-theme="dark"] {
294
+ --ty-solid-fg-threshold: 0.5 !important;
295
+ --ty-brand-hue: 233;
296
+ --ty-brand-chroma: 0.095;
297
+ --ty-success-hue: 129;
298
+ --ty-success-chroma: calc(var(--ty-brand-chroma) * 1.42);
299
+ --ty-success-l-factor: 1.09;
300
+ --ty-danger-hue: 13;
301
+ --ty-danger-chroma: calc(var(--ty-brand-chroma) * 1.96);
302
+ --ty-danger-l-factor: 1.06;
303
+ --ty-warning-hue: 82;
304
+ --ty-warning-chroma: calc(var(--ty-brand-chroma) * 3);
305
+ --ty-warning-l-factor: 1.5;
289
306
  /* Tier 3 dark — inverted curve. Higher L = lighter text = more
290
307
  * emphasis on a dark background. */
291
308
  --ty-l-strong: 0.72;
@@ -294,9 +311,11 @@ html[data-theme="dark"],
294
311
  --ty-l-soft: 0.46;
295
312
  --ty-l-faint: 0.3;
296
313
 
297
- --ty-l-bg-base: 0.22;
298
- --ty-l-bg-bold: 0.26;
299
- --ty-l-bg-soft: 0.19;
314
+ /* BG TRACK dark — dark ink sits closer to its surface in L than
315
+ * light's does, so the tint needs a touch more alpha to be felt. */
316
+ --ty-a-bg-base: 13%;
317
+ --ty-a-bg-bold: 22%;
318
+ --ty-a-bg-soft: 7%;
300
319
 
301
320
  /* Text ladder + surface borders dark — L matched to the hexes
302
321
  * tyrell.css used to hardcode (#fff/#f9fafb/#d6d6d6/#7f8590/#555a63,
@@ -343,10 +362,6 @@ html[data-theme="dark"],
343
362
  --ty-c-soft-mult: 0.77;
344
363
  --ty-c-faint-mult: 0.5;
345
364
 
346
- --ty-c-bg-base-mult: 0.38;
347
- --ty-c-bg-bold-mult: 0.54;
348
- --ty-c-bg-soft-mult: 0.23;
349
-
350
365
  /* Tier 6 dark — interaction offsets flip sign (press LIGHTENS on dark),
351
366
  * and the per-theme adjust dims + desaturates the fills against the
352
367
  * dark canvas. (Computed solid tokens are declared once at html:root.) */
@@ -416,6 +431,20 @@ html:root,
416
431
  * correct for ANY seed — light or dark. (Your exact pixel may
417
432
  * appear nowhere; pin --ty-solid-X etc. if you need it literally.)
418
433
  * --------------------------------------------------------------*/
434
+ /* BG TRACK — `--ty-bg-X` is the flavor's BASE ink at low alpha, real
435
+ * transparency, composited by the browser over whatever is actually
436
+ * underneath. Why this beats computing a tint lightness:
437
+ *
438
+ * - The ink is MID-SCALE (L 0.38–0.88), where the gamut is widest
439
+ * and `l-stop × l-factor` behaves — no near-white/near-black
440
+ * endpoint math, no chroma clipping, no hue drift.
441
+ * - Direction per mode is free: the same token darkens a light
442
+ * surface and lightens a dark one, on ANY surface level (content,
443
+ * elevated, floating), not just a nominal one.
444
+ * - l-factor points rather than shoves: it moves the ink a little,
445
+ * and only alpha × that movement reaches the tint.
446
+ *
447
+ * The wash amount is the --ty-a-bg-* dials (Tier 3 area). */
419
448
  --ty-primary-seed-resolved: var(
420
449
  --ty-primary-seed,
421
450
  oklch(0.5 var(--ty-brand-chroma) var(--ty-brand-hue))
@@ -464,19 +493,13 @@ html:root,
464
493
  calc(c * var(--ty-c-faint-mult)) h
465
494
  );
466
495
  --ty-bg-primary: oklch(
467
- from var(--ty-primary-seed-resolved)
468
- calc(var(--ty-l-bg-base) * var(--ty-primary-l-factor))
469
- calc(c * var(--ty-c-bg-base-mult)) h
496
+ from var(--ty-color-primary) l c h / var(--ty-a-bg-base)
470
497
  );
471
498
  --ty-bg-primary-bold: oklch(
472
- from var(--ty-primary-seed-resolved)
473
- calc(var(--ty-l-bg-bold) * var(--ty-primary-l-factor))
474
- calc(c * var(--ty-c-bg-bold-mult)) h
499
+ from var(--ty-color-primary) l c h / var(--ty-a-bg-bold)
475
500
  );
476
501
  --ty-bg-primary-soft: oklch(
477
- from var(--ty-primary-seed-resolved)
478
- calc(var(--ty-l-bg-soft) * var(--ty-primary-l-factor))
479
- calc(c * var(--ty-c-bg-soft-mult)) h
502
+ from var(--ty-color-primary) l c h / var(--ty-a-bg-soft)
480
503
  );
481
504
  --ty-border-primary: var(--ty-color-primary-soft);
482
505
 
@@ -507,19 +530,13 @@ html:root,
507
530
  calc(c * var(--ty-c-faint-mult)) h
508
531
  );
509
532
  --ty-bg-success: oklch(
510
- from var(--ty-success-seed-resolved)
511
- calc(var(--ty-l-bg-base) * var(--ty-success-l-factor))
512
- calc(c * var(--ty-c-bg-base-mult)) h
533
+ from var(--ty-color-success) l c h / var(--ty-a-bg-base)
513
534
  );
514
535
  --ty-bg-success-bold: oklch(
515
- from var(--ty-success-seed-resolved)
516
- calc(var(--ty-l-bg-bold) * var(--ty-success-l-factor))
517
- calc(c * var(--ty-c-bg-bold-mult)) h
536
+ from var(--ty-color-success) l c h / var(--ty-a-bg-bold)
518
537
  );
519
538
  --ty-bg-success-soft: oklch(
520
- from var(--ty-success-seed-resolved)
521
- calc(var(--ty-l-bg-soft) * var(--ty-success-l-factor))
522
- calc(c * var(--ty-c-bg-soft-mult)) h
539
+ from var(--ty-color-success) l c h / var(--ty-a-bg-soft)
523
540
  );
524
541
  --ty-border-success: var(--ty-color-success-soft);
525
542
 
@@ -550,19 +567,13 @@ html:root,
550
567
  calc(c * var(--ty-c-faint-mult)) h
551
568
  );
552
569
  --ty-bg-danger: oklch(
553
- from var(--ty-danger-seed-resolved)
554
- calc(var(--ty-l-bg-base) * var(--ty-danger-l-factor))
555
- calc(c * var(--ty-c-bg-base-mult)) h
570
+ from var(--ty-color-danger) l c h / var(--ty-a-bg-base)
556
571
  );
557
572
  --ty-bg-danger-bold: oklch(
558
- from var(--ty-danger-seed-resolved)
559
- calc(var(--ty-l-bg-bold) * var(--ty-danger-l-factor))
560
- calc(c * var(--ty-c-bg-bold-mult)) h
573
+ from var(--ty-color-danger) l c h / var(--ty-a-bg-bold)
561
574
  );
562
575
  --ty-bg-danger-soft: oklch(
563
- from var(--ty-danger-seed-resolved)
564
- calc(var(--ty-l-bg-soft) * var(--ty-danger-l-factor))
565
- calc(c * var(--ty-c-bg-soft-mult)) h
576
+ from var(--ty-color-danger) l c h / var(--ty-a-bg-soft)
566
577
  );
567
578
  --ty-border-danger: var(--ty-color-danger-soft);
568
579
 
@@ -593,19 +604,13 @@ html:root,
593
604
  calc(c * var(--ty-c-faint-mult)) h
594
605
  );
595
606
  --ty-bg-warning: oklch(
596
- from var(--ty-warning-seed-resolved)
597
- calc(var(--ty-l-bg-base) * var(--ty-warning-l-factor))
598
- calc(c * var(--ty-c-bg-base-mult)) h
607
+ from var(--ty-color-warning) l c h / var(--ty-a-bg-base)
599
608
  );
600
609
  --ty-bg-warning-bold: oklch(
601
- from var(--ty-warning-seed-resolved)
602
- calc(var(--ty-l-bg-bold) * var(--ty-warning-l-factor))
603
- calc(c * var(--ty-c-bg-bold-mult)) h
610
+ from var(--ty-color-warning) l c h / var(--ty-a-bg-bold)
604
611
  );
605
612
  --ty-bg-warning-soft: oklch(
606
- from var(--ty-warning-seed-resolved)
607
- calc(var(--ty-l-bg-soft) * var(--ty-warning-l-factor))
608
- calc(c * var(--ty-c-bg-soft-mult)) h
613
+ from var(--ty-color-warning) l c h / var(--ty-a-bg-soft)
609
614
  );
610
615
  --ty-border-warning: var(--ty-color-warning-soft);
611
616
 
@@ -636,19 +641,13 @@ html:root,
636
641
  calc(c * var(--ty-c-faint-mult)) h
637
642
  );
638
643
  --ty-bg-neutral: oklch(
639
- from var(--ty-neutral-seed-resolved)
640
- calc(var(--ty-l-bg-base) * var(--ty-neutral-l-factor))
641
- calc(c * var(--ty-c-bg-base-mult)) h
644
+ from var(--ty-color-neutral) l c h / var(--ty-a-bg-base)
642
645
  );
643
646
  --ty-bg-neutral-bold: oklch(
644
- from var(--ty-neutral-seed-resolved)
645
- calc(var(--ty-l-bg-bold) * var(--ty-neutral-l-factor))
646
- calc(c * var(--ty-c-bg-bold-mult)) h
647
+ from var(--ty-color-neutral) l c h / var(--ty-a-bg-bold)
647
648
  );
648
649
  --ty-bg-neutral-soft: oklch(
649
- from var(--ty-neutral-seed-resolved)
650
- calc(var(--ty-l-bg-soft) * var(--ty-neutral-l-factor))
651
- calc(c * var(--ty-c-bg-soft-mult)) h
650
+ from var(--ty-color-neutral) l c h / var(--ty-a-bg-soft)
652
651
  );
653
652
  --ty-bg-neutral-strong: oklch(
654
653
  from var(--ty-neutral-seed-resolved) var(--ty-l-bg-neutral-strong)
@@ -823,9 +822,19 @@ html:root,
823
822
  * or set --ty-solid-fg-threshold: 1 to force white everywhere.
824
823
  * --------------------------------------------------------------*/
825
824
 
826
- /* Crossover point. Fills lighter than this get black text. ~0.58-0.62
827
- is the sRGB break-even; higher = prefers white, lower = prefers black. */
828
- --ty-solid-fg-threshold: 0.62;
825
+ /* Crossover point. Fills lighter than this get black text; higher =
826
+ prefers white, lower = prefers black.
827
+
828
+ Measured in-browser at stock dials, not guessed: the L at which black
829
+ and white give EQUAL WCAG contrast is 0.553 (success) / 0.564 (neutral)
830
+ / 0.569 (warning) / 0.570 (primary) / 0.578 (danger) — a 0.025 spread,
831
+ so one global dial can serve every hue. Sweeping all 30 fills (15 ×
832
+ light/dark), the window where every fill gets the better of black/white
833
+ is (0.544, 0.588]; 0.57 sits ~mid-window. It previously read 0.62 —
834
+ above every flavor's break-even — which put white on `warning+` in both
835
+ modes: 4.23:1 light, 3.95:1 dark, each below AA and each the worse of
836
+ the two choices. Locked by test/solid-contrast.test.ts. */
837
+ --ty-solid-fg-threshold: 0.75;
829
838
 
830
839
  --ty-solid-primary-fg: oklch(
831
840
  from var(--ty-solid-primary)
@@ -1064,20 +1073,20 @@ html:root,
1064
1073
  inherits: true;
1065
1074
  initial-value: 0.88;
1066
1075
  }
1067
- @property --ty-l-bg-base {
1068
- syntax: "<number>";
1076
+ @property --ty-a-bg-base {
1077
+ syntax: "<percentage>";
1069
1078
  inherits: true;
1070
- initial-value: 0.96;
1079
+ initial-value: 9%;
1071
1080
  }
1072
- @property --ty-l-bg-bold {
1073
- syntax: "<number>";
1081
+ @property --ty-a-bg-bold {
1082
+ syntax: "<percentage>";
1074
1083
  inherits: true;
1075
- initial-value: 0.92;
1084
+ initial-value: 17%;
1076
1085
  }
1077
- @property --ty-l-bg-soft {
1078
- syntax: "<number>";
1086
+ @property --ty-a-bg-soft {
1087
+ syntax: "<percentage>";
1079
1088
  inherits: true;
1080
- initial-value: 0.98;
1089
+ initial-value: 4%;
1081
1090
  }
1082
1091
  @property --ty-l-text-strong {
1083
1092
  syntax: "<number>";
@@ -1219,21 +1228,6 @@ html:root,
1219
1228
  inherits: true;
1220
1229
  initial-value: 0.46;
1221
1230
  }
1222
- @property --ty-c-bg-base-mult {
1223
- syntax: "<number>";
1224
- inherits: true;
1225
- initial-value: 0.15;
1226
- }
1227
- @property --ty-c-bg-bold-mult {
1228
- syntax: "<number>";
1229
- inherits: true;
1230
- initial-value: 0.38;
1231
- }
1232
- @property --ty-c-bg-soft-mult {
1233
- syntax: "<number>";
1234
- inherits: true;
1235
- initial-value: 0.08;
1236
- }
1237
1231
  @property --ty-primary-l-factor {
1238
1232
  syntax: "<number>";
1239
1233
  inherits: true;
@@ -1346,7 +1340,7 @@ html:root,
1346
1340
  @property --ty-solid-fg-threshold {
1347
1341
  syntax: "<number>";
1348
1342
  inherits: true;
1349
- initial-value: 0.62;
1343
+ initial-value: 0.75;
1350
1344
  }
1351
1345
  @property --ty-focus-ring-alpha {
1352
1346
  syntax: "<percentage>";
@@ -1388,7 +1382,7 @@ html:root,
1388
1382
  --ty-success-chroma, --ty-warning-hue, --ty-warning-chroma,
1389
1383
  --ty-danger-hue, --ty-danger-chroma, --ty-neutral-hue,
1390
1384
  --ty-neutral-chroma, --ty-l-strong, --ty-l-bold, --ty-l-base, --ty-l-soft,
1391
- --ty-l-faint, --ty-l-bg-base, --ty-l-bg-bold, --ty-l-bg-soft,
1385
+ --ty-l-faint, --ty-a-bg-base, --ty-a-bg-bold, --ty-a-bg-soft,
1392
1386
  --ty-l-text-strong, --ty-l-text-bold, --ty-l-text-base, --ty-l-text-soft,
1393
1387
  --ty-l-text-faint, --ty-l-border-content, --ty-l-border-elevated,
1394
1388
  --ty-l-border-floating, --ty-l-border-strong, --ty-l-border-bold,
@@ -1398,7 +1392,6 @@ html:root,
1398
1392
  --ty-l-solid-neutral-strong, --ty-l-bg-neutral-strong,
1399
1393
  --ty-l-bg-neutral-faint, --ty-c-bg-neutral-faint-mult, --ty-c-strong-mult,
1400
1394
  --ty-c-bold-mult, --ty-c-base-mult, --ty-c-soft-mult, --ty-c-faint-mult,
1401
- --ty-c-bg-base-mult, --ty-c-bg-bold-mult, --ty-c-bg-soft-mult,
1402
1395
  --ty-primary-l-factor, --ty-success-l-factor, --ty-warning-l-factor,
1403
1396
  --ty-danger-l-factor, --ty-neutral-l-factor, --ty-primary-solid-l,
1404
1397
  --ty-success-solid-l, --ty-warning-solid-l, --ty-danger-solid-l,