@livenetworks/ashlar 2.1.13 → 2.2.1

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 (437) hide show
  1. package/assets/brand/android-chrome-192x192.png +0 -0
  2. package/assets/brand/android-chrome-512x512.png +0 -0
  3. package/assets/brand/apple-touch-icon.png +0 -0
  4. package/assets/brand/favicon-16x16.png +0 -0
  5. package/assets/brand/favicon-32x32.png +0 -0
  6. package/assets/brand/favicon-48x48.png +0 -0
  7. package/assets/brand/favicon-dark-128x128.png +0 -0
  8. package/assets/brand/favicon-dark-16x16.png +0 -0
  9. package/assets/brand/favicon-dark-180x180.png +0 -0
  10. package/assets/brand/favicon-dark-192x192.png +0 -0
  11. package/assets/brand/favicon-dark-256x256.png +0 -0
  12. package/assets/brand/favicon-dark-32x32.png +0 -0
  13. package/assets/brand/favicon-dark-48x48.png +0 -0
  14. package/assets/brand/favicon-dark-512x512.png +0 -0
  15. package/assets/brand/favicon-dark-64x64.png +0 -0
  16. package/assets/brand/favicon-dark.ico +0 -0
  17. package/assets/brand/favicon-dark.png +0 -0
  18. package/assets/brand/favicon-light-128x128.png +0 -0
  19. package/assets/brand/favicon-light-16x16.png +0 -0
  20. package/assets/brand/favicon-light-180x180.png +0 -0
  21. package/assets/brand/favicon-light-192x192.png +0 -0
  22. package/assets/brand/favicon-light-256x256.png +0 -0
  23. package/assets/brand/favicon-light-32x32.png +0 -0
  24. package/assets/brand/favicon-light-48x48.png +0 -0
  25. package/assets/brand/favicon-light-512x512.png +0 -0
  26. package/assets/brand/favicon-light-64x64.png +0 -0
  27. package/assets/brand/favicon-light.ico +0 -0
  28. package/assets/brand/favicon-light.png +0 -0
  29. package/assets/brand/favicon.ico +0 -0
  30. package/assets/brand/favicon.png +0 -0
  31. package/assets/brand/favicon.svg +12 -0
  32. package/assets/brand/ln-ashlar-emblem-dark-128.png +0 -0
  33. package/assets/brand/ln-ashlar-emblem-dark-16.png +0 -0
  34. package/assets/brand/ln-ashlar-emblem-dark-256.png +0 -0
  35. package/assets/brand/ln-ashlar-emblem-dark-32.png +0 -0
  36. package/assets/brand/ln-ashlar-emblem-dark-64.png +0 -0
  37. package/assets/brand/ln-ashlar-emblem-dark.png +0 -0
  38. package/assets/brand/ln-ashlar-emblem-light-128.png +0 -0
  39. package/assets/brand/ln-ashlar-emblem-light-16.png +0 -0
  40. package/assets/brand/ln-ashlar-emblem-light-256.png +0 -0
  41. package/assets/brand/ln-ashlar-emblem-light-32.png +0 -0
  42. package/assets/brand/ln-ashlar-emblem-light-64.png +0 -0
  43. package/assets/brand/ln-ashlar-emblem-light.png +0 -0
  44. package/assets/brand/ln-ashlar-logo-dark-128.png +0 -0
  45. package/assets/brand/ln-ashlar-logo-dark-256.png +0 -0
  46. package/assets/brand/ln-ashlar-logo-dark-512.png +0 -0
  47. package/assets/brand/ln-ashlar-logo-dark.png +0 -0
  48. package/assets/brand/ln-ashlar-logo-light-128.png +0 -0
  49. package/assets/brand/ln-ashlar-logo-light-256.png +0 -0
  50. package/assets/brand/ln-ashlar-logo-light-512.png +0 -0
  51. package/assets/brand/ln-ashlar-logo-light.png +0 -0
  52. package/assets/brand/site.webmanifest +41 -0
  53. package/assets/brand/source/ln-ashlar-icon-dark-1024.png +0 -0
  54. package/assets/brand/source/ln-ashlar-icon-dark-uncropped-1024.png +0 -0
  55. package/assets/brand/source/ln-ashlar-icon-light-1024.png +0 -0
  56. package/assets/brand/source/ln-ashlar-icon-light-uncropped-1024.png +0 -0
  57. package/assets/flags/ad.svg +150 -0
  58. package/assets/flags/ae.svg +6 -0
  59. package/assets/flags/af.svg +81 -0
  60. package/assets/flags/ag.svg +14 -0
  61. package/assets/flags/ai.svg +29 -0
  62. package/assets/flags/al.svg +5 -0
  63. package/assets/flags/am.svg +5 -0
  64. package/assets/flags/ao.svg +13 -0
  65. package/assets/flags/aq.svg +5 -0
  66. package/assets/flags/ar.svg +32 -0
  67. package/assets/flags/arab.svg +109 -0
  68. package/assets/flags/as.svg +72 -0
  69. package/assets/flags/asean.svg +13 -0
  70. package/assets/flags/at.svg +4 -0
  71. package/assets/flags/au.svg +8 -0
  72. package/assets/flags/aw.svg +186 -0
  73. package/assets/flags/ax.svg +18 -0
  74. package/assets/flags/az.svg +8 -0
  75. package/assets/flags/ba.svg +12 -0
  76. package/assets/flags/bb.svg +6 -0
  77. package/assets/flags/bd.svg +4 -0
  78. package/assets/flags/be.svg +7 -0
  79. package/assets/flags/bf.svg +7 -0
  80. package/assets/flags/bg.svg +5 -0
  81. package/assets/flags/bh.svg +4 -0
  82. package/assets/flags/bi.svg +15 -0
  83. package/assets/flags/bj.svg +14 -0
  84. package/assets/flags/bl.svg +5 -0
  85. package/assets/flags/bm.svg +97 -0
  86. package/assets/flags/bn.svg +36 -0
  87. package/assets/flags/bo.svg +673 -0
  88. package/assets/flags/bq.svg +5 -0
  89. package/assets/flags/br.svg +45 -0
  90. package/assets/flags/bs.svg +13 -0
  91. package/assets/flags/bt.svg +89 -0
  92. package/assets/flags/bv.svg +13 -0
  93. package/assets/flags/bw.svg +7 -0
  94. package/assets/flags/by.svg +18 -0
  95. package/assets/flags/bz.svg +145 -0
  96. package/assets/flags/ca.svg +4 -0
  97. package/assets/flags/cc.svg +19 -0
  98. package/assets/flags/cd.svg +5 -0
  99. package/assets/flags/cefta.svg +13 -0
  100. package/assets/flags/cf.svg +15 -0
  101. package/assets/flags/cg.svg +12 -0
  102. package/assets/flags/ch.svg +9 -0
  103. package/assets/flags/ci.svg +7 -0
  104. package/assets/flags/ck.svg +9 -0
  105. package/assets/flags/cl.svg +13 -0
  106. package/assets/flags/cm.svg +15 -0
  107. package/assets/flags/cn.svg +11 -0
  108. package/assets/flags/co.svg +7 -0
  109. package/assets/flags/cp.svg +7 -0
  110. package/assets/flags/cr.svg +7 -0
  111. package/assets/flags/cu.svg +13 -0
  112. package/assets/flags/cv.svg +13 -0
  113. package/assets/flags/cw.svg +14 -0
  114. package/assets/flags/cx.svg +15 -0
  115. package/assets/flags/cy.svg +6 -0
  116. package/assets/flags/cz.svg +5 -0
  117. package/assets/flags/de.svg +5 -0
  118. package/assets/flags/dg.svg +130 -0
  119. package/assets/flags/dj.svg +13 -0
  120. package/assets/flags/dk.svg +5 -0
  121. package/assets/flags/dm.svg +152 -0
  122. package/assets/flags/do.svg +121 -0
  123. package/assets/flags/dz.svg +5 -0
  124. package/assets/flags/eac.svg +48 -0
  125. package/assets/flags/ec.svg +138 -0
  126. package/assets/flags/ee.svg +5 -0
  127. package/assets/flags/eg.svg +38 -0
  128. package/assets/flags/eh.svg +16 -0
  129. package/assets/flags/er.svg +8 -0
  130. package/assets/flags/es-ct.svg +4 -0
  131. package/assets/flags/es-ga.svg +187 -0
  132. package/assets/flags/es-pv.svg +5 -0
  133. package/assets/flags/es.svg +544 -0
  134. package/assets/flags/et.svg +14 -0
  135. package/assets/flags/eu.svg +28 -0
  136. package/assets/flags/fi.svg +5 -0
  137. package/assets/flags/fj.svg +120 -0
  138. package/assets/flags/fk.svg +90 -0
  139. package/assets/flags/fm.svg +11 -0
  140. package/assets/flags/fo.svg +12 -0
  141. package/assets/flags/fr.svg +5 -0
  142. package/assets/flags/ga.svg +7 -0
  143. package/assets/flags/gb-eng.svg +5 -0
  144. package/assets/flags/gb-nir.svg +132 -0
  145. package/assets/flags/gb-sct.svg +4 -0
  146. package/assets/flags/gb-wls.svg +9 -0
  147. package/assets/flags/gb.svg +7 -0
  148. package/assets/flags/gd.svg +27 -0
  149. package/assets/flags/ge.svg +6 -0
  150. package/assets/flags/gf.svg +5 -0
  151. package/assets/flags/gg.svg +9 -0
  152. package/assets/flags/gh.svg +6 -0
  153. package/assets/flags/gi.svg +32 -0
  154. package/assets/flags/gl.svg +4 -0
  155. package/assets/flags/gm.svg +14 -0
  156. package/assets/flags/gn.svg +7 -0
  157. package/assets/flags/gp.svg +5 -0
  158. package/assets/flags/gq.svg +23 -0
  159. package/assets/flags/gr.svg +16 -0
  160. package/assets/flags/gs.svg +133 -0
  161. package/assets/flags/gt.svg +204 -0
  162. package/assets/flags/gu.svg +19 -0
  163. package/assets/flags/gw.svg +13 -0
  164. package/assets/flags/gy.svg +9 -0
  165. package/assets/flags/hk.svg +8 -0
  166. package/assets/flags/hm.svg +8 -0
  167. package/assets/flags/hn.svg +18 -0
  168. package/assets/flags/hr.svg +58 -0
  169. package/assets/flags/ht.svg +116 -0
  170. package/assets/flags/hu.svg +7 -0
  171. package/assets/flags/ic.svg +7 -0
  172. package/assets/flags/id.svg +4 -0
  173. package/assets/flags/ie.svg +7 -0
  174. package/assets/flags/il.svg +14 -0
  175. package/assets/flags/im.svg +36 -0
  176. package/assets/flags/in.svg +25 -0
  177. package/assets/flags/io.svg +130 -0
  178. package/assets/flags/iq.svg +10 -0
  179. package/assets/flags/ir.svg +219 -0
  180. package/assets/flags/is.svg +12 -0
  181. package/assets/flags/it.svg +7 -0
  182. package/assets/flags/je.svg +62 -0
  183. package/assets/flags/jm.svg +8 -0
  184. package/assets/flags/jo.svg +16 -0
  185. package/assets/flags/jp.svg +11 -0
  186. package/assets/flags/ke.svg +23 -0
  187. package/assets/flags/kg.svg +4 -0
  188. package/assets/flags/kh.svg +61 -0
  189. package/assets/flags/ki.svg +36 -0
  190. package/assets/flags/km.svg +16 -0
  191. package/assets/flags/kn.svg +14 -0
  192. package/assets/flags/kp.svg +15 -0
  193. package/assets/flags/kr.svg +24 -0
  194. package/assets/flags/kw.svg +13 -0
  195. package/assets/flags/ky.svg +103 -0
  196. package/assets/flags/kz.svg +36 -0
  197. package/assets/flags/la.svg +12 -0
  198. package/assets/flags/lb.svg +15 -0
  199. package/assets/flags/lc.svg +8 -0
  200. package/assets/flags/li.svg +43 -0
  201. package/assets/flags/lk.svg +22 -0
  202. package/assets/flags/lr.svg +14 -0
  203. package/assets/flags/ls.svg +8 -0
  204. package/assets/flags/lt.svg +7 -0
  205. package/assets/flags/lu.svg +5 -0
  206. package/assets/flags/lv.svg +6 -0
  207. package/assets/flags/ly.svg +13 -0
  208. package/assets/flags/ma.svg +4 -0
  209. package/assets/flags/mc.svg +6 -0
  210. package/assets/flags/md.svg +70 -0
  211. package/assets/flags/me.svg +116 -0
  212. package/assets/flags/mf.svg +5 -0
  213. package/assets/flags/mg.svg +7 -0
  214. package/assets/flags/mh.svg +7 -0
  215. package/assets/flags/mk.svg +5 -0
  216. package/assets/flags/ml.svg +7 -0
  217. package/assets/flags/mm.svg +12 -0
  218. package/assets/flags/mn.svg +14 -0
  219. package/assets/flags/mo.svg +9 -0
  220. package/assets/flags/mp.svg +86 -0
  221. package/assets/flags/mq.svg +5 -0
  222. package/assets/flags/mr.svg +6 -0
  223. package/assets/flags/ms.svg +29 -0
  224. package/assets/flags/mt.svg +58 -0
  225. package/assets/flags/mu.svg +8 -0
  226. package/assets/flags/mv.svg +6 -0
  227. package/assets/flags/mw.svg +10 -0
  228. package/assets/flags/mx.svg +382 -0
  229. package/assets/flags/my.svg +26 -0
  230. package/assets/flags/mz.svg +21 -0
  231. package/assets/flags/na.svg +16 -0
  232. package/assets/flags/nc.svg +13 -0
  233. package/assets/flags/ne.svg +6 -0
  234. package/assets/flags/nf.svg +9 -0
  235. package/assets/flags/ng.svg +6 -0
  236. package/assets/flags/ni.svg +129 -0
  237. package/assets/flags/nl.svg +5 -0
  238. package/assets/flags/no.svg +7 -0
  239. package/assets/flags/np.svg +13 -0
  240. package/assets/flags/nr.svg +12 -0
  241. package/assets/flags/nu.svg +10 -0
  242. package/assets/flags/nz.svg +36 -0
  243. package/assets/flags/om.svg +115 -0
  244. package/assets/flags/pa.svg +14 -0
  245. package/assets/flags/pc.svg +33 -0
  246. package/assets/flags/pe.svg +4 -0
  247. package/assets/flags/pf.svg +19 -0
  248. package/assets/flags/pg.svg +9 -0
  249. package/assets/flags/ph.svg +6 -0
  250. package/assets/flags/pk.svg +15 -0
  251. package/assets/flags/pl.svg +6 -0
  252. package/assets/flags/pm.svg +5 -0
  253. package/assets/flags/pn.svg +53 -0
  254. package/assets/flags/pr.svg +13 -0
  255. package/assets/flags/ps.svg +6 -0
  256. package/assets/flags/pt.svg +57 -0
  257. package/assets/flags/pw.svg +11 -0
  258. package/assets/flags/py.svg +157 -0
  259. package/assets/flags/qa.svg +4 -0
  260. package/assets/flags/re.svg +5 -0
  261. package/assets/flags/ro.svg +7 -0
  262. package/assets/flags/rs.svg +292 -0
  263. package/assets/flags/ru.svg +5 -0
  264. package/assets/flags/rw.svg +13 -0
  265. package/assets/flags/sa.svg +25 -0
  266. package/assets/flags/sb.svg +13 -0
  267. package/assets/flags/sc.svg +7 -0
  268. package/assets/flags/sd.svg +13 -0
  269. package/assets/flags/se.svg +4 -0
  270. package/assets/flags/sg.svg +13 -0
  271. package/assets/flags/sh-ac.svg +689 -0
  272. package/assets/flags/sh-hl.svg +164 -0
  273. package/assets/flags/sh-ta.svg +76 -0
  274. package/assets/flags/sh.svg +7 -0
  275. package/assets/flags/si.svg +18 -0
  276. package/assets/flags/sj.svg +7 -0
  277. package/assets/flags/sk.svg +9 -0
  278. package/assets/flags/sl.svg +7 -0
  279. package/assets/flags/sm.svg +75 -0
  280. package/assets/flags/sn.svg +8 -0
  281. package/assets/flags/so.svg +11 -0
  282. package/assets/flags/sr.svg +6 -0
  283. package/assets/flags/ss.svg +8 -0
  284. package/assets/flags/st.svg +16 -0
  285. package/assets/flags/sv.svg +593 -0
  286. package/assets/flags/sx.svg +56 -0
  287. package/assets/flags/sy.svg +6 -0
  288. package/assets/flags/sz.svg +34 -0
  289. package/assets/flags/tc.svg +50 -0
  290. package/assets/flags/td.svg +7 -0
  291. package/assets/flags/tf.svg +15 -0
  292. package/assets/flags/tg.svg +14 -0
  293. package/assets/flags/th.svg +7 -0
  294. package/assets/flags/tj.svg +22 -0
  295. package/assets/flags/tk.svg +5 -0
  296. package/assets/flags/tl.svg +13 -0
  297. package/assets/flags/tm.svg +204 -0
  298. package/assets/flags/tn.svg +4 -0
  299. package/assets/flags/to.svg +10 -0
  300. package/assets/flags/tr.svg +8 -0
  301. package/assets/flags/tt.svg +5 -0
  302. package/assets/flags/tv.svg +9 -0
  303. package/assets/flags/tw.svg +34 -0
  304. package/assets/flags/tz.svg +13 -0
  305. package/assets/flags/ua.svg +6 -0
  306. package/assets/flags/ug.svg +30 -0
  307. package/assets/flags/um.svg +9 -0
  308. package/assets/flags/un.svg +16 -0
  309. package/assets/flags/us.svg +9 -0
  310. package/assets/flags/uy.svg +28 -0
  311. package/assets/flags/uz.svg +30 -0
  312. package/assets/flags/va.svg +190 -0
  313. package/assets/flags/vc.svg +8 -0
  314. package/assets/flags/ve.svg +26 -0
  315. package/assets/flags/vg.svg +59 -0
  316. package/assets/flags/vi.svg +28 -0
  317. package/assets/flags/vn.svg +11 -0
  318. package/assets/flags/vu.svg +21 -0
  319. package/assets/flags/wf.svg +5 -0
  320. package/assets/flags/ws.svg +7 -0
  321. package/assets/flags/xk.svg +5 -0
  322. package/assets/flags/xx.svg +4 -0
  323. package/assets/flags/ye.svg +7 -0
  324. package/assets/flags/yt.svg +5 -0
  325. package/assets/flags/za.svg +17 -0
  326. package/assets/flags/zm.svg +27 -0
  327. package/assets/flags/zw.svg +21 -0
  328. package/components/COMPONENTS.md +80 -80
  329. package/components/ln-api-connector/ln-api-connector.schema.json +105 -105
  330. package/components/ln-chart/ln-chart-dev.scss +0 -4
  331. package/components/ln-core/README.md +21 -21
  332. package/components/ln-core/ln-core.schema.json +120 -120
  333. package/components/ln-core/query.js +113 -113
  334. package/components/ln-data-coordinator/README.md +2 -0
  335. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  336. package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -196
  337. package/components/ln-data-coordinator/src/ln-data-coordinator.js +457 -432
  338. package/components/ln-data-store/ln-data-store.schema.json +92 -92
  339. package/components/ln-date/ln-date.js +1 -1
  340. package/components/ln-date/src/ln-date.js +1 -1
  341. package/components/ln-debug/ln-debug.js +1 -1
  342. package/components/ln-debug/ln-debug.schema.json +28 -28
  343. package/components/ln-debug/src/generated-attributes.js +4 -0
  344. package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
  345. package/components/ln-external-links/README.md +19 -19
  346. package/components/ln-external-links/ln-external-links.js +1 -1
  347. package/components/ln-external-links/ln-external-links.schema.json +9 -0
  348. package/components/ln-external-links/ln-external-links.scss +12 -0
  349. package/components/ln-external-links/src/ln-external-links.js +3 -2
  350. package/components/ln-filter/README.md +2 -1
  351. package/components/ln-filter/ln-filter.js +1 -1
  352. package/components/ln-filter/ln-filter.schema.json +157 -169
  353. package/components/ln-filter/src/ln-filter.js +1 -3
  354. package/components/ln-form/ln-form.schema.json +57 -57
  355. package/components/ln-key/ln-key.js +1 -1
  356. package/components/ln-key/ln-key.schema.json +8 -0
  357. package/components/ln-key/src/ln-key.js +8 -5
  358. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  359. package/components/ln-obfuscator/ln-obfuscator.schema.json +6 -0
  360. package/components/ln-obfuscator/src/ln-obfuscator.js +2 -2
  361. package/components/ln-options/ln-options.schema.json +47 -47
  362. package/components/ln-popover/ln-popover.schema.json +82 -82
  363. package/components/ln-progress/ln-progress.schema.json +0 -13
  364. package/components/ln-search/ln-search.schema.json +111 -111
  365. package/components/ln-sort/README.md +1 -0
  366. package/components/ln-sort/ln-sort.js +1 -1
  367. package/components/ln-sort/ln-sort.schema.json +100 -112
  368. package/components/ln-sort/src/sort-model.js +1 -6
  369. package/components/ln-sortable/ln-sortable.schema.json +38 -38
  370. package/components/ln-sortable/ln-sortable.scss +25 -25
  371. package/components/ln-table/README.md +8 -1
  372. package/components/ln-table/ln-table.js +1 -1
  373. package/components/ln-table/ln-table.schema.json +195 -195
  374. package/components/ln-table/src/ln-table.js +43 -7
  375. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  376. package/components/ln-table-coordinator/ln-table-coordinator.schema.json +18 -0
  377. package/components/ln-table-coordinator/src/ln-table-coordinator.js +104 -2
  378. package/components/ln-toast/README.md +1 -1
  379. package/components/ln-toast/ln-toast.js +1 -1
  380. package/components/ln-toast/ln-toast.schema.json +6 -0
  381. package/components/ln-toast/src/ln-toast.js +1 -1
  382. package/components/ln-translations/README.md +202 -120
  383. package/components/ln-translations/ln-translations.js +1 -1
  384. package/components/ln-translations/ln-translations.schema.json +136 -120
  385. package/components/ln-translations/src/ln-translations.js +354 -295
  386. package/components/ln-translations/src/translations-model.js +221 -0
  387. package/components/ln-validate/README.md +6 -6
  388. package/components/ln-validate/ln-validate-dev.scss +0 -5
  389. package/components/ln-validate/ln-validate.js +1 -1
  390. package/components/ln-validate/ln-validate.schema.json +0 -6
  391. package/components/ln-validate/src/ln-validate.js +48 -29
  392. package/ln-ashlar.html-data.json +26 -8
  393. package/package.json +3 -2
  394. package/theme/README.md +7 -6
  395. package/theme/base/_global.scss +2 -2
  396. package/theme/base/_reset.scss +11 -0
  397. package/theme/components/_app-shell.scss +0 -8
  398. package/theme/components/_form.scss +6 -6
  399. package/theme/components/_ln-table.scss +6 -3
  400. package/theme/components/_scrollbar.scss +5 -4
  401. package/theme/components/_sortable.scss +19 -19
  402. package/theme/components/_stat-card.scss +1 -0
  403. package/theme/components/_table.scss +10 -33
  404. package/theme/components/_translations.scss +118 -111
  405. package/theme/config/_density.scss +236 -104
  406. package/theme/config/_palette.scss +71 -49
  407. package/theme/config/_theme.scss +27 -31
  408. package/theme/config/_tokens.scss +28 -26
  409. package/theme/config/mixins/_app-shell.scss +31 -21
  410. package/theme/config/mixins/_btn.scss +4 -2
  411. package/theme/config/mixins/_card.scss +87 -67
  412. package/theme/config/mixins/_colors.scss +2 -1
  413. package/theme/config/mixins/_count.scss +48 -0
  414. package/theme/config/mixins/_display.scss +12 -0
  415. package/theme/config/mixins/_footer.scss +3 -1
  416. package/theme/config/mixins/_form.scss +48 -16
  417. package/theme/config/mixins/_index.scss +1 -0
  418. package/theme/config/mixins/_layout.scss +9 -0
  419. package/theme/config/mixins/_ln-table.scss +22 -15
  420. package/theme/config/mixins/_modal.scss +3 -0
  421. package/theme/config/mixins/_nav.scss +19 -4
  422. package/theme/config/mixins/_sidebar.scss +2 -1
  423. package/theme/config/mixins/_stat-card.scss +33 -2
  424. package/theme/config/mixins/_status-badge.scss +1 -0
  425. package/theme/config/mixins/_table.scss +81 -39
  426. package/theme/config/mixins/_tabs.scss +31 -0
  427. package/theme/config/mixins/_toast.scss +0 -1
  428. package/theme/config/mixins/_translations.scss +126 -124
  429. package/theme/designs/relaxed/_card.scss +12 -0
  430. package/theme/designs/relaxed/_layout.scss +24 -0
  431. package/theme/ln-ashlar-core.scss +1 -0
  432. package/theme/ln-ashlar-dev.scss +0 -1
  433. package/theme/ln-ashlar-relaxed.scss +67 -0
  434. package/theme/tailwind/components.css +561 -24
  435. package/theme/utilities/_utilities.scss +1 -11
  436. package/web-types.json +38 -10
  437. package/components/ln-progress/ln-progress-dev.scss +0 -8
@@ -1,104 +1,236 @@
1
- // ==========================================================================
2
- // Density — ln-ashlar
3
- // ==========================================================================
4
- // Information density scaling via spatial compression.
5
- //
6
- // The :root default is dense base (DocuFlow scale: 36px row height floor,
7
- // 6px padding-y, 52px header, 232px sidebar). Density scales spacing upward
8
- // via the [data-density] attribute, mirroring how [data-mode] / [data-theme] works.
9
- //
10
- // Activation:
11
- // <html> ← default: compact base
12
- // <html data-density="compact"> ← explicit compact handle (same as base)
13
- // <html data-density="comfortable"> ← roomy default (44px row floor, 8px padding)
14
- // <html data-density="spacious"> ← generous touch/kiosk density (48px row floor, 16px padding)
15
- // <main data-density="compact"> ← scope dense within comfortable page
16
- //
17
- // Density is an explicit user choice (settings toggle).
18
- // It is NEVER auto-switched by viewport — viewport breakpoints handle
19
- // layout, density handles information density inside that layout.
20
- //
21
- // What reacts: spatial rhythm and layout geometry:
22
- // --padding-y, --gap, --app-header-height, --app-sidebar-width,
23
- // --density-row-h, --btn-padding-y, --btn-padding-x, --input-padding-y.
24
- //
25
- // Typography (font-size, line-height) remains stable across density modes:
26
- // (1) Prevents text disappearing/reappearing (glyph cache drop on variable fonts)
27
- // (2) Eliminates layout thrashing during CSS transitions
28
- // (3) Enables smooth, gentle CSS transitions on padding and row height
29
- // ==========================================================================
30
-
31
- :root {
32
-
33
- // -----------------------------------------------------------------------
34
- // Density — Row height
35
- // Minimum row height for table rows and data lists. Kept density-named
36
- // because it has no analogue in the base token scale.
37
- // -----------------------------------------------------------------------
38
- --density-row-h: 2.25rem; // 36px — dense base
39
- }
40
-
41
- // ---------------------------------------------------------------------------
42
- // [data-density="compact"] — explicit handle for the dense base.
43
- //
44
- // Identical to :root. Exists so:
45
- // (a) a switcher can write a single attribute across all tiers including
46
- // returning to base (rather than removing the attribute)
47
- // (b) a region inside a comfortable page can be scoped dense:
48
- // <table data-density="compact">
49
- // ---------------------------------------------------------------------------
50
- [data-density="compact"] {
51
- --density-row-h: 2.25rem; // 36px — restore dense base in scoped context
52
- --input-padding-y: var(--size-xs-up); // 6px — compact input padding
53
- }
54
-
55
- // ---------------------------------------------------------------------------
56
- // [data-density="comfortable"] — roomy spacing opt-in.
57
- //
58
- // WCAG 2.5.5 AAA: buttons 38-44px, inputs/pills ≥44px, table rows 44px.
59
- //
60
- // <html data-density="comfortable"> ← global comfortable
61
- // <aside data-density="comfortable"> ← scoped comfortable sidebar
62
- // ---------------------------------------------------------------------------
63
- [data-density="comfortable"] {
64
-
65
- // -- Logical rhythm --------------------------------------------------
66
- --padding-y: var(--size-sm); // 8px (was dense 6px)
67
- --gap: var(--size-sm); // 8px (was dense 6px)
68
-
69
- // -- App shell -------------------------------------------------------
70
- --app-header-height: 3.5rem; // 56px (was dense 3.25rem)
71
- --app-sidebar-width: 16rem; // 256px (was dense 14.5rem)
72
-
73
- // -- Row height ------------------------------------------------------
74
- --density-row-h: 2.75rem; // 44px (was dense 2.25rem)
75
-
76
- // -- Interactive controls — roomy 44px inputs ------------------------
77
- --input-padding-y: var(--size-sm-up); // 12px → inputs/selects roomy
78
- }
79
-
80
- // ---------------------------------------------------------------------------
81
- // [data-density="spacious"] — generous spacing tier above comfortable.
82
- //
83
- // For low-vision, touch-primary, or presentation contexts.
84
- // Generous padding, larger shell. WCAG 2.5.5 AAA:
85
- // inputs/pills ≥48px, table rows 48px.
86
- //
87
- // <html data-density="spacious">
88
- // ---------------------------------------------------------------------------
89
- [data-density="spacious"] {
90
-
91
- // -- Logical rhythm --------------------------------------------------
92
- --padding-y: var(--size-md); // 16px
93
- --gap: var(--size-md); // 16px
94
-
95
- // -- App shell -------------------------------------------------------
96
- --app-header-height: 4rem; // 64px
97
- --app-sidebar-width: 17.5rem; // 280px
98
-
99
- // -- Row height ------------------------------------------------------
100
- --density-row-h: 3rem; // 48px
101
-
102
- // -- Interactive controls — generous touch targets -------------------
103
- --input-padding-y: var(--size-md); // 16px → inputs/pills ≥48px
104
- }
1
+ @use 'mixins/breakpoints' as *;
2
+
3
+ // ==========================================================================
4
+ // Density — ln-ashlar
5
+ // ==========================================================================
6
+ // The :root default is COMFORTABLE (16px body, 44px controls, 56px header,
7
+ // 256px sidebar). Density goes down or up via [data-density]:
8
+ //
9
+ // <html> ← default: comfortable
10
+ // <html data-density="compact"> ← dense DocuFlow scale (14px / 36px)
11
+ // <html data-density="comfortable"> ← explicit handle (same as default)
12
+ // <html data-density="spacious"> ← large type, generous padding
13
+ // <table data-density="compact"> ← scope dense within a page
14
+ //
15
+ // _tokens.scss declares the dense values as the raw base; the comfortable
16
+ // block re-binds them at :root, so they surface through
17
+ // [data-density="compact"].
18
+ //
19
+ // Density is an explicit user choice (settings toggle). It is NEVER
20
+ // auto-switched by viewport; the mobile rhythm block at the end of this
21
+ // file tightens padding/gap at narrow widths independently.
22
+ //
23
+ // What reacts: the type roles, spatial rhythm, shell geometry, control
24
+ // sizing, and card/table padding. Each tier owns its own type scale.
25
+ //
26
+ // Interactive controls: compact 36px = WCAG AA; comfortable 44px and
27
+ // spacious 54px = AAA. All controls share --control-line-height.
28
+ // ==========================================================================
29
+
30
+ :root {
31
+
32
+ // -----------------------------------------------------------------------
33
+ // Density — Row height
34
+ // Minimum row height for table rows and data lists. Kept density-named
35
+ // because it has no analogue in the base token scale.
36
+ // -----------------------------------------------------------------------
37
+ --density-row-h: 2.25rem; // 36px — dense base
38
+ }
39
+
40
+ // ---------------------------------------------------------------------------
41
+ // :root / [data-density="comfortable"] — the default.
42
+ //
43
+ // WCAG 2.5.5 AAA: buttons, inputs and pills 44px.
44
+ // ---------------------------------------------------------------------------
45
+ :root,
46
+ [data-density="comfortable"] {
47
+
48
+ // -- Logical rhythm --------------------------------------------------
49
+ --padding-y: var(--size-sm); // 8px
50
+ --gap: var(--size-sm); // 8px
51
+
52
+ // -- Body text -------------------------------------------------------
53
+ --text-body-md: 1rem;
54
+ --lh-body-md: 1.6;
55
+
56
+ --text-body-sm: 0.875rem;
57
+ --lh-body-sm: 1.5;
58
+
59
+ // Explicit rebind — form inputs consume --font-size and don't always
60
+ // cascade lazy var(--text-body-md) resolutions under a scope.
61
+ --font-size: var(--text-body-md);
62
+ --line-height: var(--lh-body-md);
63
+
64
+ // -- Labels ----------------------------------------------------------
65
+ --text-label-md: 0.875rem;
66
+ --lh-label-md: 1.4;
67
+
68
+ --text-label-sm: 0.8125rem; // 13px — form-label, table th
69
+ --lh-label-sm: 1.4;
70
+
71
+ // -- Caption ---------------------------------------------------------
72
+ --text-caption: 0.8125rem; // 13px — modal subtitle, validation errors
73
+ --lh-caption: 1.4;
74
+
75
+ // -- Titles ----------------------------------------------------------
76
+ --text-title-md: 1.125rem;
77
+ --lh-title-md: 1.4;
78
+
79
+ --text-title-sm: 1rem;
80
+ --lh-title-sm: 1.4;
81
+
82
+ // -- Headings --------------------------------------------------------
83
+ --text-heading-sm: 1.25rem; --lh-heading-sm: 1.3;
84
+ --text-heading-md: 1.5rem; --lh-heading-md: 1.25;
85
+ --text-heading-lg: 1.875rem; --lh-heading-lg: 1.2;
86
+
87
+ // -- Display ---------------------------------------------------------
88
+ --text-display-sm: 2.25rem; --lh-display-sm: 1.15;
89
+
90
+ // -- App shell -------------------------------------------------------
91
+ --app-header-height: 3.5rem; // 56px
92
+ --app-sidebar-width: 16rem; // 256px
93
+
94
+ // -- Row height ------------------------------------------------------
95
+ --density-row-h: 2.75rem; // 44px
96
+
97
+ // -- Interactive controls — WCAG 2.5.5 AAA ≥44px --------------------
98
+ // Shared control contract: 26px line box + 2×8px + 2px borders = 44px
99
+ // for buttons, inputs, selects and pills alike.
100
+ --control-line-height: 1.625rem; // 26px
101
+ --btn-padding-y: var(--size-sm); // 8px → buttons 44px
102
+ --btn-padding-x: var(--size-md); // 16px
103
+ --input-padding-y: var(--size-sm); // 8px → inputs/pills 44px
104
+
105
+ // -- Card and table padding ------------------------------------------
106
+ --card-padding-y: var(--size-md); // 16px
107
+ --card-padding-x: var(--size-lg); // 24px
108
+ --table-cell-padding-y: var(--size-sm-up); // 12px
109
+ --table-cell-padding-x: var(--size-lg); // 24px
110
+ }
111
+
112
+ // ---------------------------------------------------------------------------
113
+ // [data-density="compact"] — the dense DocuFlow scale.
114
+ //
115
+ // Declared after the :root default so it wins on <html>; also scopes a
116
+ // dense region inside a comfortable/spacious page.
117
+ // ---------------------------------------------------------------------------
118
+ [data-density="compact"] {
119
+ --padding-y: var(--size-xs-up); // 6px
120
+ --gap: var(--size-xs-up); // 6px
121
+
122
+ --text-body-md: 0.875rem; --lh-body-md: 1.5;
123
+ --text-body-sm: 0.8125rem; --lh-body-sm: 1.45;
124
+ --font-size: var(--text-body-md);
125
+ --line-height: var(--lh-body-md);
126
+
127
+ --text-label-md: 0.8125rem; --lh-label-md: 1.4;
128
+ --text-label-sm: 0.75rem; --lh-label-sm: 1.4;
129
+ --text-caption: 0.75rem; --lh-caption: 1.4;
130
+
131
+ --text-title-md: 1rem; --lh-title-md: 1.3;
132
+ --text-title-sm: 0.875rem; --lh-title-sm: 1.3;
133
+
134
+ --text-heading-sm: 1.125rem; --lh-heading-sm: 1.25;
135
+ --text-heading-md: 1.25rem; --lh-heading-md: 1.2;
136
+ --text-heading-lg: 1.75rem; --lh-heading-lg: 1.15;
137
+ --text-display-sm: 1.875rem; --lh-display-sm: 1.1;
138
+
139
+ --app-header-height: 3.25rem; // 52px
140
+ --app-sidebar-width: 14.5rem; // 232px
141
+ --density-row-h: 2.25rem; // 36px
142
+
143
+ // Control contract — 22px line box + 2×6px + 2px = 36px
144
+ --control-line-height: 1.375rem;
145
+ --btn-padding-y: var(--size-xs-up);
146
+ --btn-padding-x: var(--size-sm-up);
147
+ --input-padding-y: var(--size-xs-up);
148
+
149
+ --card-padding-y: var(--size-sm-up); // 12px
150
+ --card-padding-x: var(--size-md); // 16px
151
+ --table-cell-padding-y: var(--size-sm); // 8px
152
+ --table-cell-padding-x: var(--size-md); // 16px
153
+ }
154
+
155
+ // ---------------------------------------------------------------------------
156
+ // [data-density="spacious"] — the tier above comfortable.
157
+ //
158
+ // For low-vision, touch-primary, or presentation contexts.
159
+ // Body 18px, generous padding, larger shell. WCAG 2.5.5 AAA:
160
+ // buttons 54px, inputs/pills 54px.
161
+ //
162
+ // <html data-density="spacious">
163
+ // ---------------------------------------------------------------------------
164
+ [data-density="spacious"] {
165
+
166
+ // -- Logical rhythm --------------------------------------------------
167
+ --padding-y: var(--size-md); // 16px
168
+ --gap: var(--size-md); // 16px
169
+
170
+ // -- Body text -------------------------------------------------------
171
+ --text-body-md: 1.125rem; // 18px
172
+ --lh-body-md: 1.75;
173
+
174
+ --text-body-sm: 1rem;
175
+ --lh-body-sm: 1.6;
176
+
177
+ --font-size: var(--text-body-md);
178
+ --line-height: var(--lh-body-md);
179
+
180
+ // -- Labels ----------------------------------------------------------
181
+ --text-label-md: 1rem;
182
+ --lh-label-md: 1.5;
183
+
184
+ --text-label-sm: 0.9375rem; // 15px — form-label, table th
185
+ --lh-label-sm: 1.45;
186
+
187
+ // -- Caption ---------------------------------------------------------
188
+ --text-caption: 0.9375rem; // 15px — modal subtitle, validation errors
189
+ --lh-caption: 1.45;
190
+
191
+ // -- Titles ----------------------------------------------------------
192
+ --text-title-md: 1.25rem;
193
+ --lh-title-md: 1.5;
194
+
195
+ --text-title-sm: 1.125rem;
196
+ --lh-title-sm: 1.45;
197
+
198
+ // -- Headings --------------------------------------------------------
199
+ --text-heading-sm: 1.5rem; --lh-heading-sm: 1.35;
200
+ --text-heading-md: 1.875rem; --lh-heading-md: 1.3;
201
+ --text-heading-lg: 2.25rem; --lh-heading-lg: 1.25;
202
+
203
+ // -- Display ---------------------------------------------------------
204
+ --text-display-sm: 2.75rem; --lh-display-sm: 1.2;
205
+
206
+ // -- App shell -------------------------------------------------------
207
+ --app-header-height: 4rem; // 64px
208
+ --app-sidebar-width: 17.5rem; // 280px
209
+
210
+ // -- Row height ------------------------------------------------------
211
+ --density-row-h: 3rem; // 48px
212
+
213
+ // -- Interactive controls --------------------------------------------
214
+ // Shared control contract: 28px line box + 2×12px + 2px borders = 54px
215
+ --control-line-height: 1.75rem; // 28px
216
+ --btn-padding-y: var(--size-sm-up); // 12px → buttons 54px
217
+ --btn-padding-x: var(--size-lg); // 24px
218
+ --input-padding-y: var(--size-sm-up); // 12px → inputs/pills 54px
219
+
220
+ // -- Card and table padding ------------------------------------------
221
+ --card-padding-y: var(--size-lg); // 24px
222
+ --card-padding-x: var(--size-xl); // 32px
223
+ --table-cell-padding-y: var(--size-md); // 16px
224
+ --table-cell-padding-x: var(--size-xl); // 32px
225
+ }
226
+
227
+ // ---------------------------------------------------------------------------
228
+ // Mobile rhythm — logical tokens tighten at ≤ md viewport, whatever the
229
+ // density tier (declared last so it stacks on top of every tier).
230
+ // ---------------------------------------------------------------------------
231
+ @include mq-down(md) {
232
+ :root {
233
+ --padding-y: var(--size-xs);
234
+ --gap: var(--size-xs-up);
235
+ }
236
+ }
@@ -11,64 +11,51 @@
11
11
  --color-secondary-light: 160 84% 94%;
12
12
  --color-secondary-lighter: 160 84% 97%;
13
13
 
14
- // Status colors
15
- --color-success: 142 76% 36%;
14
+ // Status colors — solid tones sit below the 7:1 text/fill target;
15
+ // ratios are against white (D2: design values kept exact).
16
+ --color-success: 142 72% 29%; // 5.07:1
16
17
  --color-success-light: 142 71% 94%;
17
18
  --color-success-lighter: 142 71% 97%;
18
19
 
19
- --color-error: 0 84% 48%;
20
+ --color-error: 0 72% 51%; // 4.80:1
20
21
  --color-error-light: 0 84% 94%;
21
22
  --color-error-lighter: 0 84% 97%;
22
23
 
23
- --color-warning: 32 95% 38%;
24
+ --color-warning: 26 90% 37%; // 5.04:1
24
25
  --color-warning-light: 38 92% 94%;
25
26
  --color-warning-lighter: 38 92% 97%;
26
27
 
27
- --color-info: 200 95% 38%;
28
+ --color-info: 221 83% 53%; // 5.20:1
28
29
  --color-info-light: 199 89% 94%;
29
30
  --color-info-lighter: 199 89% 97%;
30
31
 
31
- // Neutral scale (canonical greys)
32
- --color-neutral-50: 210 20% 98%;
33
- --color-neutral-100: 220 14% 96%;
34
- --color-neutral-150: 220 13% 93%;
35
- --color-neutral-175: 220 13% 91%;
36
- --color-neutral-200: 220 13% 90%;
37
- --color-neutral-300: 216 12% 84%;
38
- --color-neutral-400: 218 11% 58%;
39
- --color-neutral-500: 220 10% 40%;
40
- --color-neutral-600: 215 14% 34%;
41
- --color-neutral-700: 217 19% 27%;
42
- --color-neutral-800: 215 28% 17%;
32
+ // Neutral scale — cool slate greys
33
+ --color-neutral-50: 210 40% 98%;
34
+ --color-neutral-100: 210 40% 96%;
35
+ --color-neutral-150: 214 35% 93%;
36
+ --color-neutral-175: 214 33% 92%;
37
+ --color-neutral-200: 214 32% 91%;
38
+ --color-neutral-300: 213 27% 84%;
39
+ --color-neutral-400: 215 20% 65%;
40
+ --color-neutral-500: 215 16% 47%;
41
+ --color-neutral-600: 215 19% 35%;
42
+ --color-neutral-700: 215 25% 27%;
43
+ --color-neutral-800: 217 33% 17%;
43
44
  --color-neutral-900: 222 47% 11%;
44
45
 
45
46
  // Base canvas background
46
47
  --color-white: 0 0% 100%;
47
48
 
48
- // Shadows — cool-tinted, dual-layer (ambient + key light)
49
+ // Shadows — soft, diffuse, single layer. Resting surfaces are defined by
50
+ // their border; depth is reserved for floating layers.
49
51
  --shadow-none: none;
50
52
 
51
- --shadow-xs:
52
- 0 1px 2px 0 hsl(220 40% 10% / 0.05);
53
-
54
- --shadow-sm:
55
- 0 1px 3px 0 hsl(220 40% 10% / 0.07),
56
- 0 1px 2px -1px hsl(220 40% 10% / 0.05);
57
-
58
- --shadow-md:
59
- 0 4px 6px -1px hsl(220 40% 10% / 0.08),
60
- 0 2px 4px -2px hsl(220 40% 10% / 0.05);
61
-
62
- --shadow-lg:
63
- 0 10px 15px -3px hsl(220 40% 10% / 0.08),
64
- 0 4px 6px -4px hsl(220 40% 10% / 0.04);
65
-
66
- --shadow-xl:
67
- 0 20px 25px -5px hsl(220 40% 10% / 0.09),
68
- 0 8px 10px -6px hsl(220 40% 10% / 0.04);
69
-
70
- --shadow-2xl:
71
- 0 25px 50px -12px hsl(220 40% 10% / 0.18);
53
+ --shadow-xs: 0 1px 2px hsl(215 40% 20% / 0.04);
54
+ --shadow-sm: 0 2px 6px hsl(215 40% 20% / 0.05);
55
+ --shadow-md: 0 4px 16px -4px hsl(215 40% 20% / 0.10);
56
+ --shadow-lg: 0 12px 32px -8px hsl(215 40% 20% / 0.14);
57
+ --shadow-xl: 0 24px 48px -12px hsl(215 40% 20% / 0.18);
58
+ --shadow-2xl: 0 32px 64px -16px hsl(215 40% 20% / 0.22);
72
59
 
73
60
  --shadow-inner:
74
61
  inset 0 2px 4px 0 hsl(220 40% 15% / 0.06);
@@ -79,24 +66,29 @@
79
66
  // Value vocabulary — what bg/fg/border/shadow values exist
80
67
  --bg-base: hsl(var(--color-white));
81
68
  --bg-elevated: var(--bg-base);
82
- --bg-sunken: hsl(var(--color-neutral-100));
83
- --bg-recessed: hsl(var(--color-neutral-50));
69
+ --bg-sunken: hsl(var(--color-neutral-50)); // quiet chrome (thead, tracks)
70
+ --bg-recessed: hsl(var(--color-neutral-100)); // page canvas
84
71
 
85
72
  --bg-hover: hsl(var(--color-neutral-100));
86
73
  --bg-active: hsl(var(--color-neutral-150));
87
74
 
88
- // Bound low on the ramp so every tier clears 7:1 against --bg-active,
89
- // the lightest surface any of them lands on (8.02 / 11.52 / 14.11).
90
- --fg-default: hsl(var(--color-neutral-900));
91
- --fg-muted: hsl(var(--color-neutral-800));
92
- --fg-subtle: hsl(var(--color-neutral-700));
75
+ // fg-muted and fg-subtle are below the 7:1 target (D2: design values kept).
76
+ --fg-default: hsl(var(--color-neutral-800));
77
+ --fg-muted: hsl(213 20% 40%); // 6.07:1 on white
78
+ --fg-subtle: hsl(var(--color-neutral-500)); // 4.72:1 on white, 4.30:1 on the canvas
93
79
 
94
80
  --border-subtle: hsl(var(--color-neutral-200));
95
81
  --border-strong: hsl(var(--color-neutral-300));
82
+ --border-strong-hover: hsl(var(--color-neutral-500)); // 4.72:1 on white; one ramp step darker than --border-ui
96
83
 
97
84
  // Interactive boundaries only (input/select/checkbox). 1.4.11 wants 3:1
98
85
  // for these; --border-subtle/-strong stay decorative and exempt.
99
- --border-ui: hsl(var(--color-neutral-400));
86
+ // Solved literal: slate-300 is 1.48:1, slate-400 is 2.57:1.
87
+ --border-ui: hsl(215 20% 58%); // 3.24:1 on white
88
+
89
+ // Lightness step for accent hover/active (relative colour syntax,
90
+ // unitless). Light surfaces darken; dark values flip the sign.
91
+ --accent-hover-shift: -8;
100
92
 
101
93
  --color-scrim: hsl(var(--color-neutral-900) / 0.5);
102
94
 
@@ -143,14 +135,23 @@
143
135
 
144
136
  --border-subtle: hsl(var(--color-neutral-175));
145
137
  --border-strong: hsl(var(--color-neutral-300));
138
+ --border-strong-hover: hsl(var(--color-neutral-400));
146
139
 
147
140
  --border-ui: hsl(var(--color-neutral-400));
148
141
 
142
+ // Dark surfaces lighten on hover.
143
+ --accent-hover-shift: 8;
144
+
149
145
  // Scrims — anchored to black, not the ramp: dark --color-neutral-900 is
150
146
  // near-white, so binding either to it would need an index flip.
151
147
  --color-scrim: hsl(0 0% 0% / 0.6);
152
148
  --app-scrim-bg: hsl(0 0% 0% / 0.4);
153
149
 
150
+ // Status tones — brighter on dark surfaces
151
+ --color-success: 142 69% 48%;
152
+ --color-warning: 38 92% 55%;
153
+ --color-info: 213 94% 68%;
154
+
154
155
  // Status tint layers — re-tuned for dark surfaces
155
156
  --color-success-light: 142 50% 18%;
156
157
  --color-success-lighter: 142 40% 13%;
@@ -159,7 +160,7 @@
159
160
  --color-info-light: 217 55% 22%;
160
161
  --color-info-lighter: 217 45% 15%;
161
162
 
162
- --color-error: 0 84% 65%; // Lighter red for text contrast in dark mode
163
+ --color-error: 0 91% 71%; // Lighter red for text contrast in dark mode
163
164
  --color-error-light: 0 50% 20%;
164
165
  --color-error-lighter: 0 40% 14%;
165
166
 
@@ -215,7 +216,7 @@
215
216
  // stylesheet load order, which is brand.css's whole guarantee.
216
217
  // ---------------------------------------------------------------------------
217
218
  :where(:root) {
218
- --brand-primary: 221 83% 43%;
219
+ --brand-primary: 201 96% 32%; // 5.94:1 on white (D2: design value kept)
219
220
  --brand-secondary: 160 84% 36%;
220
221
  }
221
222
 
@@ -239,6 +240,8 @@
239
240
  --color-border: var(--border-subtle);
240
241
  --shadow: var(--shadow-resting);
241
242
  --radius: var(--radius-md);
243
+ // Indirection so a skin that zeroes --radius-lg (glass) reaches panels.
244
+ --panel-radius: var(--radius-lg);
242
245
 
243
246
  // accent — tints computed against the LOCAL --bg-base, so one
244
247
  // formula serves both themes. The two override slots are
@@ -272,3 +275,22 @@
272
275
  --btn-fg-hover: var(--color-fg);
273
276
  --btn-border-hover: var(--border-strong);
274
277
  }
278
+
279
+ // ---------------------------------------------------------------------------
280
+ // Default dark lift — brighter accent with an ink label on dark surfaces.
281
+ // Zero specificity; [data-theme] subtrees are excluded so an ancestor theme's
282
+ // declaration is not clobbered (Declaration-Site Invariant).
283
+ // ---------------------------------------------------------------------------
284
+ :where([data-mode="dark"]:not([data-theme], [data-theme] *)) {
285
+ --brand-primary: 199 89% 64%; // 8.79:1 vs ink
286
+ --color-accent-fg: hsl(var(--color-ink));
287
+ --check-mark: var(--check-mark-on-dark);
288
+ }
289
+
290
+ @media (prefers-color-scheme: dark) {
291
+ :where(:root:not([data-mode="light"]):not([data-theme])) {
292
+ --brand-primary: 199 89% 64%;
293
+ --color-accent-fg: hsl(var(--color-ink));
294
+ --check-mark: var(--check-mark-on-dark);
295
+ }
296
+ }
@@ -16,6 +16,7 @@
16
16
  // :root:not([data-mode="light"]) ← opt-out of auto
17
17
  // <html data-skin="glass"> ← structural preset (flat, borderless)
18
18
  // <html data-theme="ocean"> ← brand palette preset
19
+ // <aside data-mode="dark" data-theme="navy"> ← dark navy brand region
19
20
  //
20
21
  // See docs-mcp/css/theming.md for the full guide.
21
22
  // ==========================================================================
@@ -153,6 +154,28 @@
153
154
  }
154
155
  }
155
156
 
157
+ // Brand region — a dark-navy surface island, e.g. a sidebar. Always paired
158
+ // with data-mode="dark": the ramp re-seats the dark vocabulary on navy.
159
+ // <aside data-mode="dark" data-theme="navy">
160
+ [data-theme="navy"] {
161
+ &[data-mode="dark"],
162
+ :where([data-mode="dark"]) & {
163
+ --color-neutral-50: 213 74% 8%;
164
+ --color-neutral-100: 213 74% 11%;
165
+ --color-neutral-150: 213 55% 15%;
166
+ --color-neutral-175: 213 50% 17%;
167
+ --color-neutral-200: 213 45% 20%;
168
+ --color-neutral-300: 213 35% 28%;
169
+ --color-neutral-400: 213 30% 40%; // 2.82:1 on navy-100, under the 3:1 ui target
170
+ --color-neutral-600: 215 20% 65%; // 6.80:1 on navy-100 (fg-subtle)
171
+ --color-neutral-700: 213 27% 84%; // 11.79:1
172
+ --color-neutral-900: 210 40% 98%; // 16.70:1
173
+ --brand-primary: 199 89% 64%; // 8.59:1 on navy-100
174
+ --color-accent-fg: hsl(var(--color-ink));
175
+ --check-mark: var(--check-mark-on-dark);
176
+ }
177
+ }
178
+
156
179
  // ---------------------------------------------------------------------------
157
180
  // Named skins — structural/physics presets. Polarity-agnostic. Activation:
158
181
  // <html data-skin="glass">
@@ -185,9 +208,10 @@
185
208
  --btn-bg-hover: var(--bg-hover);
186
209
  --btn-border: var(--color-accent);
187
210
  // --color-accent-hover is declared only below <html> (a, mixin bodies);
188
- // invalid at computed-value time here — derive locally. l - 6 matches
189
- // @mixin btn's own accent-hover so neutral and accent buttons agree.
190
- --btn-border-hover: hsl(from var(--color-accent) h s calc(l - 6));
211
+ // invalid at computed-value time here — derive locally. Follows
212
+ // --accent-hover-shift like @mixin btn's own accent-hover, so neutral
213
+ // and accent buttons agree.
214
+ --btn-border-hover: hsl(from var(--color-accent) h s calc(l + var(--accent-hover-shift)));
191
215
 
192
216
  // ── Accent buttons — translucent fill via consumer-scope rebind
193
217
  // Rebind --btn-* on the button itself (not at skin :root) so
@@ -263,31 +287,3 @@
263
287
  --btn-border-hover: hsl(var(--color-primary));
264
288
  }
265
289
  }
266
-
267
- [data-skin="soft"] {
268
- // Soft — playful, maximum radius, heavily shadow-based, no borders.
269
- --radius-xs: 0.5rem;
270
- --radius-sm: 0.75rem;
271
- --radius-md: 1rem;
272
- --radius-lg: 1.5rem;
273
- --radius-xl: 2rem;
274
- --radius-2xl: 2.5rem;
275
-
276
- // Override shadows to be much larger and softer (volumetric look)
277
- --shadow-sm: 0 8px 16px -2px rgba(0, 0, 0, 0.08);
278
- --shadow-md: 0 12px 24px -4px rgba(0, 0, 0, 0.12);
279
- --shadow-lg: 0 24px 48px -4px rgba(0, 0, 0, 0.16);
280
-
281
- // Floating elements are more pronounced
282
- --shadow-resting: var(--shadow-sm);
283
- --shadow-floating: var(--shadow-lg);
284
-
285
- // Remove default subtle borders (cards, panels) so they rely solely on shadows
286
- --border-subtle: transparent;
287
-
288
- // ── Buttons — pill shapes, floating, no borders
289
- --btn-border: transparent;
290
- --btn-border-hover: transparent;
291
- --btn-bg: var(--bg-elevated);
292
- --btn-bg-hover: var(--bg-hover);
293
- }