@crisp-ui-kit/crisp 0.31.6 → 0.32.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 (389) hide show
  1. package/NOTICE +88 -0
  2. package/README.md +22 -0
  3. package/dist/accordion.css +13 -13
  4. package/dist/accordion.layered.css +23 -0
  5. package/dist/appshell.css +11 -11
  6. package/dist/appshell.layered.css +25 -0
  7. package/dist/authshell.css +23 -23
  8. package/dist/authshell.layered.css +59 -0
  9. package/dist/avatar.css +23 -23
  10. package/dist/avatar.layered.css +41 -0
  11. package/dist/avatargroup.css +2 -2
  12. package/dist/avatargroup.layered.css +7 -0
  13. package/dist/badge.css +31 -31
  14. package/dist/badge.layered.css +51 -0
  15. package/dist/barchart.css +15 -15
  16. package/dist/barchart.layered.css +25 -0
  17. package/dist/base.css +4 -4
  18. package/dist/board.css +20 -20
  19. package/dist/board.layered.css +34 -0
  20. package/dist/breadcrumb.css +8 -8
  21. package/dist/breadcrumb.layered.css +13 -0
  22. package/dist/bulkbar.css +13 -13
  23. package/dist/bulkbar.layered.css +23 -0
  24. package/dist/button.css +21 -21
  25. package/dist/button.layered.css +46 -0
  26. package/dist/callout.css +15 -15
  27. package/dist/callout.layered.css +18 -0
  28. package/dist/card.css +14 -14
  29. package/dist/card.layered.css +30 -0
  30. package/dist/checkbox.css +9 -9
  31. package/dist/checkbox.layered.css +21 -0
  32. package/dist/cjs/components/accordion/accordion.js +1 -1
  33. package/dist/cjs/components/accordion/accordion.recipe.js +10 -10
  34. package/dist/cjs/components/badge/badge.js +1 -1
  35. package/dist/cjs/components/badge/badge.recipe.js +1 -1
  36. package/dist/cjs/components/barchart/barchart.js +3 -3
  37. package/dist/cjs/components/barchart/barchart.recipe.js +14 -14
  38. package/dist/cjs/components/breadcrumb/breadcrumb.js +1 -1
  39. package/dist/cjs/components/breadcrumb/breadcrumb.recipe.js +6 -6
  40. package/dist/cjs/components/bulkbar/bulkbar.js +2 -2
  41. package/dist/cjs/components/bulkbar/bulkbar.recipe.js +10 -10
  42. package/dist/cjs/components/callout/callout.js +1 -1
  43. package/dist/cjs/components/callout/callout.recipe.js +9 -9
  44. package/dist/cjs/components/card/card.js +3 -3
  45. package/dist/cjs/components/card/card.recipe.js +5 -5
  46. package/dist/cjs/components/columncalc/columncalc.js +1 -1
  47. package/dist/cjs/components/columncalc/columncalc.recipe.js +16 -9
  48. package/dist/cjs/components/contextmenu/contextmenu.js +4 -4
  49. package/dist/cjs/components/contextmenu/contextmenu.recipe.js +9 -9
  50. package/dist/cjs/components/datatable/datatable.js +32 -22
  51. package/dist/cjs/components/datatable/datatable.recipe.js +57 -57
  52. package/dist/cjs/components/datepicker/datepicker.js +12 -12
  53. package/dist/cjs/components/datepicker/datepicker.recipe.js +45 -45
  54. package/dist/cjs/components/datepickerfield/datepickerfield.js +2 -2
  55. package/dist/cjs/components/datepickerfield/datepickerfield.recipe.js +9 -9
  56. package/dist/cjs/components/dialog/dialog.js +5 -5
  57. package/dist/cjs/components/dialog/dialog.recipe.js +16 -16
  58. package/dist/cjs/components/donutchart/donutchart.js +1 -1
  59. package/dist/cjs/components/donutchart/donutchart.recipe.js +12 -12
  60. package/dist/cjs/components/drawer/drawer.js +3 -3
  61. package/dist/cjs/components/drawer/drawer.recipe.js +14 -14
  62. package/dist/cjs/components/emptystate/emptystate.js +1 -1
  63. package/dist/cjs/components/emptystate/emptystate.recipe.js +9 -9
  64. package/dist/cjs/components/fileupload/fileupload.js +3 -3
  65. package/dist/cjs/components/fileupload/fileupload.recipe.js +23 -23
  66. package/dist/cjs/components/formfield/formfield.js +1 -1
  67. package/dist/cjs/components/formfield/formfield.recipe.js +5 -5
  68. package/dist/cjs/components/input/input.js +1 -1
  69. package/dist/cjs/components/input/input.recipe.js +6 -6
  70. package/dist/cjs/components/linechart/linechart.js +4 -4
  71. package/dist/cjs/components/linechart/linechart.recipe.js +14 -14
  72. package/dist/cjs/components/menu/menu.js +6 -6
  73. package/dist/cjs/components/menu/menu.recipe.js +19 -19
  74. package/dist/cjs/components/multiselect/multiselect.js +5 -5
  75. package/dist/cjs/components/multiselect/multiselect.recipe.js +29 -29
  76. package/dist/cjs/components/popover/popover.js +1 -1
  77. package/dist/cjs/components/popover/popover.recipe.js +3 -3
  78. package/dist/cjs/components/progress/progress.js +2 -2
  79. package/dist/cjs/components/progress/progress.recipe.js +3 -3
  80. package/dist/cjs/components/quantitypicker/quantitypicker.js +2 -2
  81. package/dist/cjs/components/quantitypicker/quantitypicker.recipe.js +16 -16
  82. package/dist/cjs/components/radiogroup/radiogroup.js +1 -1
  83. package/dist/cjs/components/radiogroup/radiogroup.recipe.js +14 -14
  84. package/dist/cjs/components/resizablepanel/resizablepanel.js +3 -3
  85. package/dist/cjs/components/resizablepanel/resizablepanel.recipe.js +24 -24
  86. package/dist/cjs/components/segmented/segmented.js +4 -4
  87. package/dist/cjs/components/segmented/segmented.recipe.js +7 -7
  88. package/dist/cjs/components/select/select.js +3 -3
  89. package/dist/cjs/components/select/select.recipe.js +25 -25
  90. package/dist/cjs/components/slider/slider.js +2 -2
  91. package/dist/cjs/components/slider/slider.recipe.js +15 -15
  92. package/dist/cjs/components/stagebar/stagebar.js +1 -1
  93. package/dist/cjs/components/stagebar/stagebar.recipe.js +1 -1
  94. package/dist/cjs/components/statcard/statcard.js +1 -1
  95. package/dist/cjs/components/statcard/statcard.recipe.js +9 -9
  96. package/dist/cjs/components/switch/switch.js +1 -1
  97. package/dist/cjs/components/switch/switch.recipe.js +2 -2
  98. package/dist/cjs/components/table/table.js +1 -1
  99. package/dist/cjs/components/table/table.recipe.js +1 -1
  100. package/dist/cjs/components/tabletoolbar/tabletoolbar.chrome.js +65 -64
  101. package/dist/cjs/components/tabletoolbar/tabletoolbar.js +13 -13
  102. package/dist/cjs/components/tabs/tabs.js +4 -4
  103. package/dist/cjs/components/tabs/tabs.recipe.js +12 -12
  104. package/dist/cjs/components/textarea/textarea.js +2 -2
  105. package/dist/cjs/components/textarea/textarea.recipe.js +11 -11
  106. package/dist/cjs/components/toast/toast.js +4 -4
  107. package/dist/cjs/components/toast/toast.recipe.js +14 -14
  108. package/dist/cjs/components/wheelpicker/wheelpicker.js +2 -2
  109. package/dist/cjs/components/wheelpicker/wheelpicker.recipe.js +19 -19
  110. package/dist/cjs/core/namespace.js +17 -0
  111. package/dist/cjs/core/resolve.js +5 -3
  112. package/dist/cjs/product/appshell/appshell.js +2 -2
  113. package/dist/cjs/product/appshell/appshell.recipe.js +8 -8
  114. package/dist/cjs/product/authshell/authshell.js +1 -1
  115. package/dist/cjs/product/authshell/authshell.recipe.js +20 -20
  116. package/dist/cjs/product/board/board.js +3 -3
  117. package/dist/cjs/product/board/board.recipe.js +17 -17
  118. package/dist/cjs/product/command/command.js +3 -3
  119. package/dist/cjs/product/command/command.recipe.js +25 -25
  120. package/dist/cjs/product/entitycard/entitycard.js +1 -1
  121. package/dist/cjs/product/entitycard/entitycard.recipe.js +7 -7
  122. package/dist/cjs/product/flowcanvas/flowcanvas.js +5 -5
  123. package/dist/cjs/product/flowcanvas/flowcanvas.recipe.js +11 -11
  124. package/dist/cjs/product/inbox/inbox.js +1 -1
  125. package/dist/cjs/product/inbox/inbox.recipe.js +22 -22
  126. package/dist/cjs/product/listpage/listpage.js +3 -3
  127. package/dist/cjs/product/listpage/listpage.recipe.js +18 -18
  128. package/dist/cjs/product/navitem/navitem.js +1 -1
  129. package/dist/cjs/product/navitem/navitem.recipe.js +2 -2
  130. package/dist/cjs/product/onboarding/onboarding.js +1 -1
  131. package/dist/cjs/product/onboarding/onboarding.recipe.js +19 -19
  132. package/dist/cjs/product/recordpage/recordpage.js +24 -24
  133. package/dist/cjs/product/recordpage/recordpage.recipe.js +117 -117
  134. package/dist/cjs/product/recordpanel/recordpanel.js +4 -4
  135. package/dist/cjs/product/recordpanel/recordpanel.recipe.js +15 -15
  136. package/dist/cjs/product/recordstable/recordstable.js +48 -48
  137. package/dist/cjs/product/recordstable/recordstable.recipe.js +87 -87
  138. package/dist/cjs/product/recordstable/recordstable.tag.js +8 -8
  139. package/dist/cjs/product/richtext/richtext.js +4 -4
  140. package/dist/cjs/product/richtext/richtext.recipe.js +21 -21
  141. package/dist/cjs/product/settingssection/settingssection.js +1 -1
  142. package/dist/cjs/product/settingssection/settingssection.recipe.js +6 -6
  143. package/dist/cjs/product/settingsshell/settingsshell.js +1 -1
  144. package/dist/cjs/product/settingsshell/settingsshell.recipe.js +20 -20
  145. package/dist/cjs/product/sidebar/sidebar.js +2 -2
  146. package/dist/cjs/product/sidebar/sidebar.recipe.js +21 -21
  147. package/dist/cjs/product/tasklist/tasklist.js +2 -2
  148. package/dist/cjs/product/tasklist/tasklist.recipe.js +14 -14
  149. package/dist/cjs/product/trialbanner/trialbanner.js +1 -1
  150. package/dist/cjs/product/trialbanner/trialbanner.recipe.js +6 -6
  151. package/dist/cjs/product/viewtoggle/viewtoggle.js +1 -1
  152. package/dist/cjs/product/viewtoggle/viewtoggle.recipe.js +4 -4
  153. package/dist/cjs/tokens/contract.js +3 -2
  154. package/dist/columncalc.css +19 -12
  155. package/dist/columncalc.layered.css +35 -0
  156. package/dist/command.css +28 -28
  157. package/dist/command.layered.css +44 -0
  158. package/dist/contextmenu.css +12 -12
  159. package/dist/contextmenu.layered.css +22 -0
  160. package/dist/datatable.css +66 -66
  161. package/dist/datatable.layered.css +108 -0
  162. package/dist/datepicker.css +86 -86
  163. package/dist/datepicker.layered.css +179 -0
  164. package/dist/datepickerfield.css +19 -19
  165. package/dist/datepickerfield.layered.css +29 -0
  166. package/dist/dialog.css +19 -19
  167. package/dist/dialog.layered.css +29 -0
  168. package/dist/divider.css +2 -2
  169. package/dist/divider.layered.css +7 -0
  170. package/dist/donutchart.css +15 -15
  171. package/dist/donutchart.layered.css +26 -0
  172. package/dist/drawer.css +17 -17
  173. package/dist/drawer.layered.css +27 -0
  174. package/dist/emptystate.css +15 -15
  175. package/dist/emptystate.layered.css +22 -0
  176. package/dist/entitycard.css +14 -14
  177. package/dist/entitycard.layered.css +28 -0
  178. package/dist/esm/components/accordion/accordion.js +1 -1
  179. package/dist/esm/components/accordion/accordion.recipe.js +10 -10
  180. package/dist/esm/components/badge/badge.js +1 -1
  181. package/dist/esm/components/badge/badge.recipe.js +1 -1
  182. package/dist/esm/components/barchart/barchart.js +3 -3
  183. package/dist/esm/components/barchart/barchart.recipe.js +14 -14
  184. package/dist/esm/components/breadcrumb/breadcrumb.js +1 -1
  185. package/dist/esm/components/breadcrumb/breadcrumb.recipe.js +6 -6
  186. package/dist/esm/components/bulkbar/bulkbar.js +2 -2
  187. package/dist/esm/components/bulkbar/bulkbar.recipe.js +10 -10
  188. package/dist/esm/components/callout/callout.js +1 -1
  189. package/dist/esm/components/callout/callout.recipe.js +9 -9
  190. package/dist/esm/components/card/card.js +3 -3
  191. package/dist/esm/components/card/card.recipe.js +5 -5
  192. package/dist/esm/components/columncalc/columncalc.js +1 -1
  193. package/dist/esm/components/columncalc/columncalc.recipe.js +16 -9
  194. package/dist/esm/components/contextmenu/contextmenu.js +4 -4
  195. package/dist/esm/components/contextmenu/contextmenu.recipe.js +9 -9
  196. package/dist/esm/components/datatable/datatable.js +32 -22
  197. package/dist/esm/components/datatable/datatable.recipe.js +57 -57
  198. package/dist/esm/components/datepicker/datepicker.js +12 -12
  199. package/dist/esm/components/datepicker/datepicker.recipe.js +45 -45
  200. package/dist/esm/components/datepickerfield/datepickerfield.js +2 -2
  201. package/dist/esm/components/datepickerfield/datepickerfield.recipe.js +9 -9
  202. package/dist/esm/components/dialog/dialog.js +5 -5
  203. package/dist/esm/components/dialog/dialog.recipe.js +16 -16
  204. package/dist/esm/components/donutchart/donutchart.js +1 -1
  205. package/dist/esm/components/donutchart/donutchart.recipe.js +12 -12
  206. package/dist/esm/components/drawer/drawer.js +3 -3
  207. package/dist/esm/components/drawer/drawer.recipe.js +14 -14
  208. package/dist/esm/components/emptystate/emptystate.js +1 -1
  209. package/dist/esm/components/emptystate/emptystate.recipe.js +9 -9
  210. package/dist/esm/components/fileupload/fileupload.js +3 -3
  211. package/dist/esm/components/fileupload/fileupload.recipe.js +23 -23
  212. package/dist/esm/components/formfield/formfield.js +1 -1
  213. package/dist/esm/components/formfield/formfield.recipe.js +5 -5
  214. package/dist/esm/components/input/input.js +1 -1
  215. package/dist/esm/components/input/input.recipe.js +6 -6
  216. package/dist/esm/components/linechart/linechart.js +4 -4
  217. package/dist/esm/components/linechart/linechart.recipe.js +14 -14
  218. package/dist/esm/components/menu/menu.js +6 -6
  219. package/dist/esm/components/menu/menu.recipe.js +19 -19
  220. package/dist/esm/components/multiselect/multiselect.js +5 -5
  221. package/dist/esm/components/multiselect/multiselect.recipe.js +29 -29
  222. package/dist/esm/components/popover/popover.js +1 -1
  223. package/dist/esm/components/popover/popover.recipe.js +3 -3
  224. package/dist/esm/components/progress/progress.js +2 -2
  225. package/dist/esm/components/progress/progress.recipe.js +3 -3
  226. package/dist/esm/components/quantitypicker/quantitypicker.js +2 -2
  227. package/dist/esm/components/quantitypicker/quantitypicker.recipe.js +16 -16
  228. package/dist/esm/components/radiogroup/radiogroup.js +1 -1
  229. package/dist/esm/components/radiogroup/radiogroup.recipe.js +14 -14
  230. package/dist/esm/components/resizablepanel/resizablepanel.js +3 -3
  231. package/dist/esm/components/resizablepanel/resizablepanel.recipe.js +24 -24
  232. package/dist/esm/components/segmented/segmented.js +4 -4
  233. package/dist/esm/components/segmented/segmented.recipe.js +7 -7
  234. package/dist/esm/components/select/select.js +3 -3
  235. package/dist/esm/components/select/select.recipe.js +25 -25
  236. package/dist/esm/components/slider/slider.js +2 -2
  237. package/dist/esm/components/slider/slider.recipe.js +15 -15
  238. package/dist/esm/components/stagebar/stagebar.js +1 -1
  239. package/dist/esm/components/stagebar/stagebar.recipe.js +1 -1
  240. package/dist/esm/components/statcard/statcard.js +1 -1
  241. package/dist/esm/components/statcard/statcard.recipe.js +9 -9
  242. package/dist/esm/components/switch/switch.js +1 -1
  243. package/dist/esm/components/switch/switch.recipe.js +2 -2
  244. package/dist/esm/components/table/table.js +1 -1
  245. package/dist/esm/components/table/table.recipe.js +1 -1
  246. package/dist/esm/components/tabletoolbar/tabletoolbar.chrome.js +65 -64
  247. package/dist/esm/components/tabletoolbar/tabletoolbar.js +13 -13
  248. package/dist/esm/components/tabs/tabs.js +4 -4
  249. package/dist/esm/components/tabs/tabs.recipe.js +12 -12
  250. package/dist/esm/components/textarea/textarea.js +2 -2
  251. package/dist/esm/components/textarea/textarea.recipe.js +11 -11
  252. package/dist/esm/components/toast/toast.js +4 -4
  253. package/dist/esm/components/toast/toast.recipe.js +14 -14
  254. package/dist/esm/components/wheelpicker/wheelpicker.js +2 -2
  255. package/dist/esm/components/wheelpicker/wheelpicker.recipe.js +19 -19
  256. package/dist/esm/core/namespace.js +14 -0
  257. package/dist/esm/core/resolve.js +5 -3
  258. package/dist/esm/product/appshell/appshell.js +2 -2
  259. package/dist/esm/product/appshell/appshell.recipe.js +8 -8
  260. package/dist/esm/product/authshell/authshell.js +1 -1
  261. package/dist/esm/product/authshell/authshell.recipe.js +20 -20
  262. package/dist/esm/product/board/board.js +3 -3
  263. package/dist/esm/product/board/board.recipe.js +17 -17
  264. package/dist/esm/product/command/command.js +3 -3
  265. package/dist/esm/product/command/command.recipe.js +25 -25
  266. package/dist/esm/product/entitycard/entitycard.js +1 -1
  267. package/dist/esm/product/entitycard/entitycard.recipe.js +7 -7
  268. package/dist/esm/product/flowcanvas/flowcanvas.js +5 -5
  269. package/dist/esm/product/flowcanvas/flowcanvas.recipe.js +11 -11
  270. package/dist/esm/product/inbox/inbox.js +1 -1
  271. package/dist/esm/product/inbox/inbox.recipe.js +22 -22
  272. package/dist/esm/product/listpage/listpage.js +3 -3
  273. package/dist/esm/product/listpage/listpage.recipe.js +18 -18
  274. package/dist/esm/product/navitem/navitem.js +1 -1
  275. package/dist/esm/product/navitem/navitem.recipe.js +2 -2
  276. package/dist/esm/product/onboarding/onboarding.js +1 -1
  277. package/dist/esm/product/onboarding/onboarding.recipe.js +19 -19
  278. package/dist/esm/product/recordpage/recordpage.js +24 -24
  279. package/dist/esm/product/recordpage/recordpage.recipe.js +117 -117
  280. package/dist/esm/product/recordpanel/recordpanel.js +4 -4
  281. package/dist/esm/product/recordpanel/recordpanel.recipe.js +15 -15
  282. package/dist/esm/product/recordstable/recordstable.js +48 -48
  283. package/dist/esm/product/recordstable/recordstable.recipe.js +87 -87
  284. package/dist/esm/product/recordstable/recordstable.tag.js +8 -8
  285. package/dist/esm/product/richtext/richtext.js +4 -4
  286. package/dist/esm/product/richtext/richtext.recipe.js +21 -21
  287. package/dist/esm/product/settingssection/settingssection.js +1 -1
  288. package/dist/esm/product/settingssection/settingssection.recipe.js +6 -6
  289. package/dist/esm/product/settingsshell/settingsshell.js +1 -1
  290. package/dist/esm/product/settingsshell/settingsshell.recipe.js +20 -20
  291. package/dist/esm/product/sidebar/sidebar.js +2 -2
  292. package/dist/esm/product/sidebar/sidebar.recipe.js +21 -21
  293. package/dist/esm/product/tasklist/tasklist.js +2 -2
  294. package/dist/esm/product/tasklist/tasklist.recipe.js +14 -14
  295. package/dist/esm/product/trialbanner/trialbanner.js +1 -1
  296. package/dist/esm/product/trialbanner/trialbanner.recipe.js +6 -6
  297. package/dist/esm/product/viewtoggle/viewtoggle.js +1 -1
  298. package/dist/esm/product/viewtoggle/viewtoggle.recipe.js +4 -4
  299. package/dist/esm/tokens/contract.js +3 -2
  300. package/dist/fileupload.css +46 -46
  301. package/dist/fileupload.layered.css +91 -0
  302. package/dist/flowcanvas.css +13 -13
  303. package/dist/flowcanvas.layered.css +17 -0
  304. package/dist/formfield.css +7 -7
  305. package/dist/formfield.layered.css +10 -0
  306. package/dist/inbox.css +26 -26
  307. package/dist/inbox.layered.css +41 -0
  308. package/dist/input.css +17 -17
  309. package/dist/input.layered.css +45 -0
  310. package/dist/kbd.css +2 -2
  311. package/dist/kbd.layered.css +5 -0
  312. package/dist/linechart.css +14 -14
  313. package/dist/linechart.layered.css +17 -0
  314. package/dist/listpage.css +22 -22
  315. package/dist/listpage.layered.css +41 -0
  316. package/dist/menu.css +29 -29
  317. package/dist/menu.layered.css +48 -0
  318. package/dist/multiselect.css +42 -42
  319. package/dist/multiselect.layered.css +63 -0
  320. package/dist/navitem.css +14 -14
  321. package/dist/navitem.layered.css +25 -0
  322. package/dist/onboarding.css +24 -24
  323. package/dist/onboarding.layered.css +39 -0
  324. package/dist/popover.css +6 -6
  325. package/dist/popover.layered.css +16 -0
  326. package/dist/progress.css +7 -7
  327. package/dist/progress.layered.css +17 -0
  328. package/dist/quantitypicker.css +34 -34
  329. package/dist/quantitypicker.layered.css +80 -0
  330. package/dist/radiogroup.css +18 -18
  331. package/dist/radiogroup.layered.css +33 -0
  332. package/dist/recordpage.css +122 -122
  333. package/dist/recordpage.layered.css +153 -0
  334. package/dist/recordpanel.css +31 -31
  335. package/dist/recordpanel.layered.css +50 -0
  336. package/dist/recordstable.css +162 -162
  337. package/dist/recordstable.layered.css +222 -0
  338. package/dist/resizablepanel.css +26 -26
  339. package/dist/resizablepanel.layered.css +55 -0
  340. package/dist/richtext.css +24 -24
  341. package/dist/richtext.layered.css +38 -0
  342. package/dist/segmented.css +10 -10
  343. package/dist/segmented.layered.css +20 -0
  344. package/dist/select.css +43 -43
  345. package/dist/select.layered.css +72 -0
  346. package/dist/settingssection.css +8 -8
  347. package/dist/settingssection.layered.css +11 -0
  348. package/dist/settingsshell.css +23 -23
  349. package/dist/settingsshell.layered.css +44 -0
  350. package/dist/sidebar.css +27 -27
  351. package/dist/sidebar.layered.css +40 -0
  352. package/dist/skeleton.css +4 -4
  353. package/dist/skeleton.layered.css +15 -0
  354. package/dist/slider.css +23 -23
  355. package/dist/slider.layered.css +58 -0
  356. package/dist/spinner.css +3 -3
  357. package/dist/spinner.layered.css +14 -0
  358. package/dist/stagebar.css +4 -4
  359. package/dist/stagebar.layered.css +14 -0
  360. package/dist/statcard.css +14 -14
  361. package/dist/statcard.layered.css +21 -0
  362. package/dist/styles.css +1816 -1725
  363. package/dist/styles.layered.css +2932 -0
  364. package/dist/switch.css +7 -7
  365. package/dist/switch.layered.css +22 -0
  366. package/dist/table.css +16 -16
  367. package/dist/table.layered.css +36 -0
  368. package/dist/tabletoolbar.css +67 -67
  369. package/dist/tabletoolbar.layered.css +80 -0
  370. package/dist/tabs.css +15 -15
  371. package/dist/tabs.layered.css +29 -0
  372. package/dist/tasklist.css +17 -17
  373. package/dist/tasklist.layered.css +34 -0
  374. package/dist/textarea.css +18 -18
  375. package/dist/textarea.layered.css +42 -0
  376. package/dist/toast.css +17 -17
  377. package/dist/toast.layered.css +27 -0
  378. package/dist/tokens.css +199 -115
  379. package/dist/tooltip.css +3 -3
  380. package/dist/tooltip.layered.css +13 -0
  381. package/dist/trialbanner.css +13 -13
  382. package/dist/trialbanner.layered.css +28 -0
  383. package/dist/types/core/namespace.d.ts +2 -0
  384. package/dist/viewtoggle.css +10 -10
  385. package/dist/viewtoggle.layered.css +23 -0
  386. package/dist/wheelpicker.css +29 -29
  387. package/dist/wheelpicker.layered.css +70 -0
  388. package/licenses/Apache-2.0.txt +201 -0
  389. package/package.json +5 -2
@@ -0,0 +1,2932 @@
1
+ :root {
2
+ --crisp-bg-brand-solid: #266df0;
3
+ --crisp-bg-brand-solid-pressed: #1f5fd6;
4
+ --crisp-fg-on-brand: #ffffff;
5
+ --crisp-fg-on-tone: #101112;
6
+ --crisp-bg-surface: #ffffff;
7
+ --crisp-bg-raised: #f4f4f5;
8
+ --crisp-border-default: #e4e4e7;
9
+ --crisp-border-subtle: #eeeff1;
10
+ --crisp-ring-neutral: transparent;
11
+ --crisp-bg-tile-active: #ffffff;
12
+ --crisp-shadow-tile-active: rgba(0,0,0,0.04);
13
+ --crisp-bg-overlay-frost: #ffffff;
14
+ --crisp-shadow-overlay1: rgba(28,40,64,0.12);
15
+ --crisp-shadow-overlay2: rgba(28,40,64,0.16);
16
+ --crisp-shadow-overlay3: rgba(28,40,64,0.16);
17
+ --crisp-bg-popover: #ffffff;
18
+ --crisp-ring-popover: rgba(0,0,0,0);
19
+ --crisp-shadow-popover1: rgba(28,40,64,0.04);
20
+ --crisp-shadow-popover2: rgba(28,40,64,0.12);
21
+ --crisp-shadow-popover3: rgba(24,41,75,0.16);
22
+ --crisp-fg-primary: #101112;
23
+ --crisp-fg-muted: #71717a;
24
+ --crisp-bg-danger: #e5484d;
25
+ --crisp-bg-danger-solid: #ba2525;
26
+ --crisp-stroke-field-focus: #1a1c20;
27
+ --crisp-fg-disabled: #d1d3d8;
28
+ --crisp-bg-neutral-weak: #f3f4f5;
29
+ --crisp-bg-neutral-inverted: #2a3038;
30
+ --crisp-fg-on-neutral-inverted: #ffffff;
31
+ --crisp-fg-neutral-subtle: #868b94;
32
+ --crisp-fg-neutral-muted: #555d6d;
33
+ --crisp-stroke-focus-ring: #1e82eb;
34
+ --crisp-bg-success: #1f9d57;
35
+ --crisp-bg-warning: #b5730f;
36
+ --crisp-bg-orange: #f97514;
37
+ --crisp-bg-cyan: #00b9eb;
38
+ --crisp-bg-purple: #9b69ff;
39
+ --crisp-bg-sidebar: #fbfbfb;
40
+ --crisp-bg-subtle: #fbfbfb;
41
+ }
42
+
43
+ [data-theme="dark"] {
44
+ --crisp-bg-brand-solid: #266df0;
45
+ --crisp-bg-brand-solid-pressed: #1f5fd6;
46
+ --crisp-fg-on-brand: #ffffff;
47
+ --crisp-fg-on-tone: #101112;
48
+ --crisp-bg-surface: #0a0a0a;
49
+ --crisp-bg-raised: #101112;
50
+ --crisp-border-default: #212224;
51
+ --crisp-border-subtle: #1c1d1f;
52
+ --crisp-ring-neutral: #212224;
53
+ --crisp-bg-tile-active: #101112;
54
+ --crisp-shadow-tile-active: rgba(0,0,0,0);
55
+ --crisp-bg-overlay-frost: #1c1d1f;
56
+ --crisp-shadow-overlay1: rgba(0,0,0,0.48);
57
+ --crisp-shadow-overlay2: rgba(0,0,0,0.64);
58
+ --crisp-shadow-overlay3: rgba(0,0,0,0);
59
+ --crisp-bg-popover: #17181a;
60
+ --crisp-ring-popover: #212224;
61
+ --crisp-shadow-popover1: rgba(0,0,0,0.16);
62
+ --crisp-shadow-popover2: rgba(0,0,0,0.24);
63
+ --crisp-shadow-popover3: rgba(0,0,0,0.32);
64
+ --crisp-fg-primary: #f5f5f5;
65
+ --crisp-fg-muted: #9a9aa2;
66
+ --crisp-bg-danger: #ff5a5f;
67
+ --crisp-bg-danger-solid: #ba2525;
68
+ --crisp-stroke-field-focus: #f3f4f5;
69
+ --crisp-fg-disabled: #5b606a;
70
+ --crisp-bg-neutral-weak: #1d2025;
71
+ --crisp-bg-neutral-inverted: #f3f4f5;
72
+ --crisp-fg-on-neutral-inverted: #16171b;
73
+ --crisp-fg-neutral-subtle: #b0b3ba;
74
+ --crisp-fg-neutral-muted: #dcdee3;
75
+ --crisp-stroke-focus-ring: #5e98fe;
76
+ --crisp-bg-success: #2ea968;
77
+ --crisp-bg-warning: #e0982a;
78
+ --crisp-bg-orange: #f97514;
79
+ --crisp-bg-cyan: #00b9eb;
80
+ --crisp-bg-purple: #9b69ff;
81
+ --crisp-bg-sidebar: #0e0f10;
82
+ --crisp-bg-subtle: #0e0f10;
83
+ }
84
+
85
+ :root {
86
+ --crisp-space-1: 4px;
87
+ --crisp-space-2: 8px;
88
+ --crisp-space-3: 12px;
89
+ --crisp-space-4: 16px;
90
+ --crisp-space-5: 20px;
91
+ --crisp-space-6: 24px;
92
+ --crisp-space-8: 32px;
93
+ --crisp-space-px: 1px;
94
+ --crisp-space-0-5: 2px;
95
+ --crisp-space-1-5: 6px;
96
+ --crisp-space-2-5: 10px;
97
+ --crisp-radius-chip: 7px;
98
+ --crisp-radius-sm: 6px;
99
+ --crisp-radius-md: 8px;
100
+ --crisp-radius-lg: 9px;
101
+ --crisp-radius-xl: 12px;
102
+ --crisp-radius-2xl: 16px;
103
+ --crisp-radius-full: 999px;
104
+ --crisp-size-icon: 16px;
105
+ --crisp-size-chip: 22px;
106
+ --crisp-size-row: 28px;
107
+ --crisp-size-menuRow: 32px;
108
+ --crisp-size-tableRow: 36px;
109
+ --crisp-size-tableHeader: 40px;
110
+ --crisp-size-header: 48px;
111
+ --crisp-size-calendarCell: 34px;
112
+ --crisp-size-calendarPill: 32px;
113
+ --crisp-text-xs: 11px;
114
+ --crisp-text-sm: 12px;
115
+ --crisp-text-md: 13px;
116
+ --crisp-text-lg: 14px;
117
+ --crisp-text-xl: 16px;
118
+ --crisp-weight-regular: 400;
119
+ --crisp-weight-medium: 500;
120
+ --crisp-weight-semibold: 600;
121
+ --crisp-weight-bold: 700;
122
+ --crisp-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
123
+ }
124
+
125
+ /* -----------------------------------------------------------------
126
+ * Deprecated unprefixed aliases (issue #276) — SCHEDULED FOR REMOVAL in
127
+ * the next major version. Prefer the --crisp-* custom property
128
+ * above; these only forward to it so an existing override keeps working.
129
+ * ----------------------------------------------------------------- */
130
+ :root {
131
+ --bg-brand-solid: var(--crisp-bg-brand-solid);
132
+ --bg-brand-solid-pressed: var(--crisp-bg-brand-solid-pressed);
133
+ --fg-on-brand: var(--crisp-fg-on-brand);
134
+ --fg-on-tone: var(--crisp-fg-on-tone);
135
+ --bg-surface: var(--crisp-bg-surface);
136
+ --bg-raised: var(--crisp-bg-raised);
137
+ --border-default: var(--crisp-border-default);
138
+ --border-subtle: var(--crisp-border-subtle);
139
+ --ring-neutral: var(--crisp-ring-neutral);
140
+ --bg-tile-active: var(--crisp-bg-tile-active);
141
+ --shadow-tile-active: var(--crisp-shadow-tile-active);
142
+ --bg-overlay-frost: var(--crisp-bg-overlay-frost);
143
+ --shadow-overlay1: var(--crisp-shadow-overlay1);
144
+ --shadow-overlay2: var(--crisp-shadow-overlay2);
145
+ --shadow-overlay3: var(--crisp-shadow-overlay3);
146
+ --bg-popover: var(--crisp-bg-popover);
147
+ --ring-popover: var(--crisp-ring-popover);
148
+ --shadow-popover1: var(--crisp-shadow-popover1);
149
+ --shadow-popover2: var(--crisp-shadow-popover2);
150
+ --shadow-popover3: var(--crisp-shadow-popover3);
151
+ --fg-primary: var(--crisp-fg-primary);
152
+ --fg-muted: var(--crisp-fg-muted);
153
+ --bg-danger: var(--crisp-bg-danger);
154
+ --bg-danger-solid: var(--crisp-bg-danger-solid);
155
+ --stroke-field-focus: var(--crisp-stroke-field-focus);
156
+ --fg-disabled: var(--crisp-fg-disabled);
157
+ --bg-neutral-weak: var(--crisp-bg-neutral-weak);
158
+ --bg-neutral-inverted: var(--crisp-bg-neutral-inverted);
159
+ --fg-on-neutral-inverted: var(--crisp-fg-on-neutral-inverted);
160
+ --fg-neutral-subtle: var(--crisp-fg-neutral-subtle);
161
+ --fg-neutral-muted: var(--crisp-fg-neutral-muted);
162
+ --stroke-focus-ring: var(--crisp-stroke-focus-ring);
163
+ --bg-success: var(--crisp-bg-success);
164
+ --bg-warning: var(--crisp-bg-warning);
165
+ --bg-orange: var(--crisp-bg-orange);
166
+ --bg-cyan: var(--crisp-bg-cyan);
167
+ --bg-purple: var(--crisp-bg-purple);
168
+ --bg-sidebar: var(--crisp-bg-sidebar);
169
+ --bg-subtle: var(--crisp-bg-subtle);
170
+ --space-1: var(--crisp-space-1);
171
+ --space-2: var(--crisp-space-2);
172
+ --space-3: var(--crisp-space-3);
173
+ --space-4: var(--crisp-space-4);
174
+ --space-5: var(--crisp-space-5);
175
+ --space-6: var(--crisp-space-6);
176
+ --space-8: var(--crisp-space-8);
177
+ --space-px: var(--crisp-space-px);
178
+ --space-0-5: var(--crisp-space-0-5);
179
+ --space-1-5: var(--crisp-space-1-5);
180
+ --space-2-5: var(--crisp-space-2-5);
181
+ --radius-chip: var(--crisp-radius-chip);
182
+ --radius-sm: var(--crisp-radius-sm);
183
+ --radius-md: var(--crisp-radius-md);
184
+ --radius-lg: var(--crisp-radius-lg);
185
+ --radius-xl: var(--crisp-radius-xl);
186
+ --radius-2xl: var(--crisp-radius-2xl);
187
+ --radius-full: var(--crisp-radius-full);
188
+ --size-icon: var(--crisp-size-icon);
189
+ --size-chip: var(--crisp-size-chip);
190
+ --size-row: var(--crisp-size-row);
191
+ --size-menuRow: var(--crisp-size-menuRow);
192
+ --size-tableRow: var(--crisp-size-tableRow);
193
+ --size-tableHeader: var(--crisp-size-tableHeader);
194
+ --size-header: var(--crisp-size-header);
195
+ --size-calendarCell: var(--crisp-size-calendarCell);
196
+ --size-calendarPill: var(--crisp-size-calendarPill);
197
+ --text-xs: var(--crisp-text-xs);
198
+ --text-sm: var(--crisp-text-sm);
199
+ --text-md: var(--crisp-text-md);
200
+ --text-lg: var(--crisp-text-lg);
201
+ --text-xl: var(--crisp-text-xl);
202
+ --weight-regular: var(--crisp-weight-regular);
203
+ --weight-medium: var(--crisp-weight-medium);
204
+ --weight-semibold: var(--crisp-weight-semibold);
205
+ --weight-bold: var(--crisp-weight-bold);
206
+ --font-sans: var(--crisp-font-sans);
207
+ }
208
+
209
+ @layer crisp-components {
210
+ .crisp-accordion {
211
+ display: flex; flex-direction: column; font-family: var(--crisp-font-sans);
212
+ & .crisp-accordion-item { border-bottom: 1px solid var(--crisp-border-subtle); }
213
+ & .crisp-accordion-trigger { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: 44px; padding: 0 var(--crisp-space-1); margin: 0; border: none; background: none; color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); text-align: start; cursor: pointer; }
214
+ & .crisp-accordion-trigger:hover { color: var(--crisp-fg-primary); }
215
+ & .crisp-accordion-title { flex: 1; min-width: 0; }
216
+ & .crisp-accordion-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .2s ease; }
217
+ & .crisp-accordion-trigger[aria-expanded="true"] .crisp-accordion-chevron { transform: rotate(180deg); }
218
+ & .crisp-accordion-panel { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .2s ease; }
219
+ & .crisp-accordion-panel[data-open] { grid-template-rows: 1fr; }
220
+ & .crisp-accordion-panel-inner { overflow: hidden; }
221
+ & .crisp-accordion-content { padding: 0 var(--crisp-space-1) var(--crisp-space-3); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
222
+ }
223
+
224
+ @media (prefers-reduced-motion: reduce) {
225
+ .crisp-accordion, .crisp-accordion * {
226
+ animation-duration: 0.01ms !important;
227
+ animation-iteration-count: 1 !important;
228
+ transition-duration: 0.01ms !important;
229
+ }
230
+ }
231
+
232
+ .crisp-avatar {
233
+ display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-semibold); overflow: hidden; user-select: none; & img { width: 100%; height: 100%; object-fit: cover; }
234
+ }
235
+ .crisp-avatar--size_sm {
236
+ height: 16px; width: 16px; font-size: 9px;
237
+ }
238
+ .crisp-avatar--size_md {
239
+ height: 20px; width: 20px; font-size: 10px;
240
+ }
241
+ .crisp-avatar--size_lg {
242
+ height: 24px; width: 24px; font-size: var(--crisp-text-sm);
243
+ }
244
+ .crisp-avatar--size_xl {
245
+ height: 32px; width: 32px; font-size: var(--crisp-text-lg);
246
+ }
247
+ .crisp-avatar--shape_circle {
248
+ border-radius: var(--crisp-radius-full);
249
+ }
250
+ .crisp-avatar--shape_rounded {
251
+ border-radius: 30%;
252
+ }
253
+ .crisp-avatar--tone_neutral {
254
+ background: var(--crisp-bg-raised); color: var(--crisp-fg-muted); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
255
+ }
256
+ .crisp-avatar--tone_brand {
257
+ background: var(--crisp-bg-brand-solid); color: #fff;
258
+ }
259
+ .crisp-avatar--tone_orange {
260
+ background: var(--crisp-bg-orange); color: #fff;
261
+ }
262
+ .crisp-avatar--tone_cyan {
263
+ background: var(--crisp-bg-cyan); color: #fff;
264
+ }
265
+ .crisp-avatar--tone_purple {
266
+ background: var(--crisp-bg-purple); color: #fff;
267
+ }
268
+ .crisp-avatar--tone_green {
269
+ background: var(--crisp-bg-success); color: #fff;
270
+ }
271
+
272
+ .crisp-avatargroup {
273
+ display: inline-flex; align-items: center;
274
+ & > * { margin-inline-start: -var(--crisp-space-2); box-shadow: 0 0 0 2px var(--crisp-bg-surface); position: relative; }
275
+ & > *:first-child { margin-inline-start: 0; }
276
+ }
277
+
278
+ .crisp-badge {
279
+ display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1); font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-medium); letter-spacing: -0.1px; white-space: nowrap;
280
+ & .crisp-badge-dot { width: 6px; height: 6px; flex-shrink: 0; border-radius: var(--crisp-radius-full); background: currentColor; }
281
+ }
282
+ .crisp-badge--tone_neutral {
283
+ background: var(--crisp-bg-raised); color: var(--crisp-fg-muted); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
284
+ }
285
+ .crisp-badge--tone_brand {
286
+ background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: var(--crisp-bg-brand-solid); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent);
287
+ }
288
+ .crisp-badge--tone_success {
289
+ background: color-mix(in srgb, var(--crisp-bg-success) 14%, transparent); color: var(--crisp-bg-success); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-success) 30%, transparent);
290
+ }
291
+ .crisp-badge--tone_warning {
292
+ background: color-mix(in srgb, var(--crisp-bg-warning) 16%, transparent); color: var(--crisp-bg-warning); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-warning) 32%, transparent);
293
+ }
294
+ .crisp-badge--tone_danger {
295
+ background: color-mix(in srgb, var(--crisp-bg-danger) 14%, transparent); color: var(--crisp-bg-danger); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-danger) 30%, transparent);
296
+ }
297
+ .crisp-badge--size_small {
298
+ height: 16px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-xs); border-radius: var(--crisp-radius-sm);
299
+ }
300
+ .crisp-badge--size_medium {
301
+ height: 20px; padding-inline: var(--crisp-space-2); font-size: var(--crisp-text-sm); border-radius: var(--crisp-radius-sm);
302
+ }
303
+ .crisp-badge--size_large {
304
+ height: var(--crisp-size-chip); padding-inline: 9px; font-size: var(--crisp-text-lg); border-radius: var(--crisp-radius-chip);
305
+ }
306
+ .crisp-badge--variant_soft {
307
+
308
+ }
309
+ .crisp-badge--variant_solid {
310
+
311
+ }
312
+ .crisp-badge--compound_0 {
313
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); box-shadow: none;
314
+ }
315
+ .crisp-badge--compound_1 {
316
+ background: var(--crisp-bg-success); color: var(--crisp-fg-on-tone); box-shadow: none;
317
+ }
318
+ .crisp-badge--compound_2 {
319
+ background: var(--crisp-bg-warning); color: var(--crisp-fg-on-tone); box-shadow: none;
320
+ }
321
+ .crisp-badge--compound_3 {
322
+ background: var(--crisp-bg-danger); color: var(--crisp-fg-on-tone); box-shadow: none;
323
+ }
324
+ .crisp-badge--compound_4 {
325
+ background: var(--crisp-fg-muted); color: var(--crisp-bg-surface); box-shadow: none;
326
+ }
327
+
328
+ .crisp-barchart {
329
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); --crisp-barchart-yaxis-width: 34px;
330
+ & .crisp-barchart-body { display: flex; flex: 1; min-height: 0; }
331
+ & .crisp-barchart-yaxis { position: relative; flex-shrink: 0; width: var(--crisp-barchart-yaxis-width); }
332
+ & .crisp-barchart-ytick { position: absolute; inset-inline-end: var(--crisp-space-2); transform: translateY(50%); font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); white-space: nowrap; }
333
+ & .crisp-barchart-plot { position: relative; flex: 1; min-width: 0; display: flex; align-items: flex-end; gap: var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-default); }
334
+ & .crisp-barchart-grid { position: absolute; left: 0; right: 0; border-top: 1px dashed var(--crisp-border-subtle); pointer-events: none; }
335
+ & .crisp-barchart-col { position: relative; flex: 1; min-width: 0; height: 100%; display: flex; align-items: flex-end; justify-content: center; }
336
+ & .crisp-barchart-bar { width: 100%; max-width: 96px; border-radius: var(--crisp-radius-sm) var(--crisp-radius-sm) 0 0; background: var(--crisp-bg-brand-solid); transition: height 0.3s ease; }
337
+ & .crisp-barchart-bar[data-empty] { min-height: 2px; opacity: 0.35; }
338
+ & .crisp-barchart-xaxis { display: flex; gap: var(--crisp-space-3); margin-top: var(--crisp-space-1-5); }
339
+ & .crisp-barchart-xaxis[data-inset] { padding-inline-start: var(--crisp-barchart-yaxis-width); }
340
+ & .crisp-barchart-xlabel { flex: 1; min-width: 0; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
341
+ & .crisp-barchart-axis-title { margin-top: var(--crisp-space-1); padding-inline-start: var(--crisp-barchart-yaxis-width); text-align: center; font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
342
+ }
343
+
344
+ @media (prefers-reduced-motion: reduce) {
345
+ .crisp-barchart, .crisp-barchart * {
346
+ animation-duration: 0.01ms !important;
347
+ animation-iteration-count: 1 !important;
348
+ transition-duration: 0.01ms !important;
349
+ }
350
+ }
351
+
352
+ .crisp-breadcrumb {
353
+ display: flex; align-items: center; gap: var(--crisp-space-0-5); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg);
354
+ & .crisp-breadcrumb-item { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); box-sizing: border-box; height: 24px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-md); color: var(--crisp-fg-muted); text-decoration: none; white-space: nowrap; }
355
+ & .crisp-breadcrumb-item svg { flex-shrink: 0; }
356
+ & a.crisp-breadcrumb-item:hover, & button.crisp-breadcrumb-item:hover { color: var(--crisp-fg-primary); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); }
357
+ & button.crisp-breadcrumb-item { border: none; background: none; font: inherit; cursor: pointer; }
358
+ & .crisp-breadcrumb-item[aria-current] { color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
359
+ & .crisp-breadcrumb-sep { flex-shrink: 0; color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); }
360
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
361
+
362
+ }
363
+
364
+ .crisp-bulkbar {
365
+ position: absolute; left: 0; right: 0; bottom: var(--crisp-space-4); display: flex; justify-content: center; pointer-events: none; z-index: 10;
366
+ & .crisp-bulkbar-bar { pointer-events: auto; display: flex; align-items: center; gap: var(--crisp-space-0-5); height: 48px; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-1-5); border-radius: 14px; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); color: var(--crisp-fg-primary); transition: opacity .16s ease, transform .16s ease; }
367
+ & .crisp-bulkbar-bar { @starting-style { opacity: 0; transform: translateY(10px); } }
368
+ & .crisp-bulkbar-count { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-menuRow); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); white-space: nowrap; cursor: pointer; transition: background-color .12s; }
369
+ & .crisp-bulkbar-count:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); color: var(--crisp-fg-primary); }
370
+ & .crisp-bulkbar-count svg { flex-shrink: 0; }
371
+ & .crisp-bulkbar-btn { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-menuRow); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s; }
372
+ & .crisp-bulkbar-btn:hover { background: var(--crisp-bg-raised); }
373
+ & .crisp-bulkbar-btn--danger { color: var(--crisp-bg-danger); }
374
+ & .crisp-bulkbar-btn--danger:hover { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
375
+ & .crisp-bulkbar-btn svg { flex-shrink: 0; }
376
+ }
377
+
378
+ @media (prefers-reduced-motion: reduce) {
379
+ .crisp-bulkbar, .crisp-bulkbar * {
380
+ animation-duration: 0.01ms !important;
381
+ animation-iteration-count: 1 !important;
382
+ transition-duration: 0.01ms !important;
383
+ }
384
+ }
385
+
386
+ .crisp-button {
387
+ display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); font-family: var(--crisp-font-sans); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; line-height: 20px; white-space: nowrap; border: none; cursor: pointer; transition: background-color .2s, box-shadow .2s, color .2s; &:disabled { opacity: 0.5; cursor: not-allowed; }
388
+ }
389
+ .crisp-button--intent_primary {
390
+ background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); &:hover { background: var(--crisp-bg-brand-solid-pressed); } &:active { background: var(--crisp-bg-brand-solid-pressed); }
391
+ }
392
+ .crisp-button--intent_neutral {
393
+ background: var(--crisp-bg-surface); color: var(--crisp-fg-primary); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); &:hover { background: var(--crisp-bg-raised); }
394
+ }
395
+ .crisp-button--intent_danger {
396
+ background: var(--crisp-bg-danger-solid); color: var(--crisp-fg-on-brand); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.07), 0 2px 4px -2px rgba(186,37,37,0.20), 0 3px 6px -2px rgba(186,37,37,0.12); &:hover { filter: brightness(0.96); } &:active { filter: brightness(0.92); }
397
+ }
398
+ .crisp-button--intent_ghost {
399
+ background: transparent; color: var(--crisp-fg-muted); box-shadow: none; &:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
400
+ }
401
+ .crisp-button--size_sm {
402
+ height: 24px; padding-inline: var(--crisp-space-1-5); font-size: var(--crisp-text-md); border-radius: var(--crisp-radius-md);
403
+ }
404
+ .crisp-button--size_md {
405
+ height: 28px; padding-inline: var(--crisp-space-2); font-size: var(--crisp-text-lg); border-radius: var(--crisp-radius-md);
406
+ }
407
+ .crisp-button--size_lg {
408
+ height: 40px; padding-inline: 14px; font-size: var(--crisp-text-lg); border-radius: 10px;
409
+ }
410
+ .crisp-button--shape_text {
411
+
412
+ }
413
+ .crisp-button--shape_icon {
414
+ padding-inline: 0; aspect-ratio: 1 / 1;
415
+ }
416
+ .crisp-button--touchTarget_true {
417
+ position: relative; &::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; min-width: 44px; min-height: 44px; }
418
+ }
419
+ .crisp-button--touchTarget_false {
420
+
421
+ }
422
+
423
+ @media (prefers-reduced-motion: reduce) {
424
+ .crisp-button, .crisp-button * {
425
+ animation-duration: 0.01ms !important;
426
+ animation-iteration-count: 1 !important;
427
+ transition-duration: 0.01ms !important;
428
+ }
429
+ }
430
+
431
+ .crisp-callout {
432
+ display: flex; align-items: flex-start; gap: var(--crisp-space-2-5); box-sizing: border-box; padding: var(--crisp-space-3) var(--crisp-space-4); border-radius: var(--crisp-radius-lg); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-md); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary);
433
+ & .crisp-callout-icon { flex-shrink: 0; margin-top: 1px; display: inline-flex; color: var(--crisp-fg-muted); }
434
+ & .crisp-callout-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
435
+ & .crisp-callout-title { font-weight: var(--crisp-weight-semibold); }
436
+ & .crisp-callout-desc { color: var(--crisp-fg-muted); }
437
+ & .crisp-callout-action { flex-shrink: 0; }
438
+ &[data-tone="info"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 8%, transparent); }
439
+ &[data-tone="info"] .crisp-callout-icon { color: var(--crisp-bg-brand-solid); }
440
+ &[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 10%, transparent); }
441
+ &[data-tone="success"] .crisp-callout-icon { color: var(--crisp-bg-success); }
442
+ &[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 12%, transparent); }
443
+ &[data-tone="warning"] .crisp-callout-icon { color: var(--crisp-bg-warning); }
444
+ &[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
445
+ &[data-tone="danger"] .crisp-callout-icon { color: var(--crisp-bg-danger); }
446
+ }
447
+
448
+ .crisp-card {
449
+ display: flex; flex-direction: column; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
450
+ & .crisp-card-header { display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0; padding: var(--crisp-space-3) var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); }
451
+ & .crisp-card-header svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
452
+ & .crisp-card-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
453
+ & .crisp-card-body { flex: 1; min-height: 0; padding: var(--crisp-space-4); }
454
+ & .crisp-card-footer { display: flex; align-items: center; justify-content: flex-end; gap: var(--crisp-space-2); flex-shrink: 0; padding: var(--crisp-space-3) var(--crisp-space-4); border-top: 1px solid var(--crisp-border-subtle); }
455
+ }
456
+ .crisp-card--raised_true {
457
+ box-shadow: inset 0 0 0 1px var(--crisp-border-subtle), 0 1px 2px rgba(0,0,0,0.04), 0 4px 12px -4px rgba(28,40,64,0.08);
458
+ }
459
+ .crisp-card--raised_false {
460
+
461
+ }
462
+ .crisp-card--interactive_true {
463
+ cursor: pointer; transition: box-shadow 0.12s ease; &:hover { box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 1px 2px rgba(0,0,0,0.04), 0 6px 16px -6px rgba(28,40,64,0.12); }
464
+ }
465
+ .crisp-card--interactive_false {
466
+
467
+ }
468
+
469
+ @media (prefers-reduced-motion: reduce) {
470
+ .crisp-card, .crisp-card * {
471
+ animation-duration: 0.01ms !important;
472
+ animation-iteration-count: 1 !important;
473
+ transition-duration: 0.01ms !important;
474
+ }
475
+ }
476
+
477
+ .crisp-checkbox {
478
+ appearance: none; -webkit-appearance: none; box-sizing: border-box; flex-shrink: 0; margin: 0; width: 16px; height: 16px; border: none; border-radius: var(--crisp-radius-sm)
479
+ ; background: var(--crisp-bg-surface)
480
+ ; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary)
481
+ 9%, transparent); cursor: pointer; transition: background-color .12s, box-shadow .12s; &:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
482
+ &:checked, &:indeterminate { background: var(--crisp-bg-brand-solid) center / 10px no-repeat; box-shadow: none; }
483
+ &:checked { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 6.5 5 9l4.5-5'/%3E%3C/svg%3E"); }
484
+ &:indeterminate { background-image: linear-gradient(var(--crisp-fg-on-brand), var(--crisp-fg-on-brand)); background-size: 8px 2px; }
485
+ &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
486
+
487
+ }
488
+
489
+ @media (prefers-reduced-motion: reduce) {
490
+ .crisp-checkbox, .crisp-checkbox * {
491
+ animation-duration: 0.01ms !important;
492
+ animation-iteration-count: 1 !important;
493
+ transition-duration: 0.01ms !important;
494
+ }
495
+ }
496
+
497
+ .crisp-columncalc {
498
+ display: flex; align-items: stretch; width: 100%; height: 100%; font-family: var(--crisp-font-sans);
499
+ /* Menu wraps its trigger in a flex div that sizes to content, which would
500
+ shrink the button back to its text. Make the wrapper fill too, so the
501
+ whole cell stays clickable. */
502
+ & .crisp-menu { width: 100%; height: 100%; }
503
+ /* No radius: the trigger fills the cell, so rounding its own corners
504
+ leaves the cell's background showing through at the four corners as
505
+ soon as the hover tint paints. Everything else that fills a grid cell
506
+ agrees -- recordstable-sum-btn, the same summary trigger, declares no
507
+ radius, and datatable-grip and the embedded pickers zero theirs. An 8px
508
+ radius survived the chip-to-full-cell conversion and shipped rounded
509
+ until #282, so the spec check now guards it. */
510
+ /* The hit target is the WHOLE summary cell -- measured 246x37 with
511
+ padding 0 12px, not a content-sized chip. Clicking anywhere in the cell
512
+ opens the aggregation menu. */
513
+ & .crisp-columncalc-trigger { display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; height: 100%; min-height: var(--crisp-size-tableRow); margin: 0; padding: 0 var(--crisp-space-3); border: none; background: transparent; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
514
+ & .crisp-columncalc-trigger:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary); }
515
+ & .crisp-columncalc-trigger svg { flex-shrink: 0; opacity: 0.7; }
516
+ & .crisp-columncalc-trigger[data-align="right"] { justify-content: flex-end; }
517
+ & .crisp-columncalc-placeholder { overflow: hidden; text-overflow: ellipsis; }
518
+ & .crisp-columncalc-value { color: var(--crisp-fg-primary); font-variant-numeric: tabular-nums; }
519
+ & .crisp-columncalc-op { color: var(--crisp-fg-muted); }
520
+ & .crisp-columncalc-section { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
521
+ }
522
+
523
+ @media (prefers-reduced-motion: reduce) {
524
+ .crisp-columncalc, .crisp-columncalc * {
525
+ animation-duration: 0.01ms !important;
526
+ animation-iteration-count: 1 !important;
527
+ transition-duration: 0.01ms !important;
528
+ }
529
+ }
530
+
531
+ .crisp-contextmenu {
532
+ display: contents; font-family: var(--crisp-font-sans);
533
+ & .crisp-contextmenu-content { position: fixed; z-index: 60; min-width: 200px; box-sizing: border-box; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease; transform-origin: top left; @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
534
+ & .crisp-contextmenu-item { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: var(--crisp-size-menuRow); box-sizing: border-box; padding: 0 var(--crisp-space-2); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg); text-align: start; white-space: nowrap; cursor: pointer; }
535
+ & .crisp-contextmenu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
536
+ & .crisp-contextmenu-item:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
537
+ & .crisp-contextmenu-item--danger { color: var(--crisp-bg-danger); }
538
+ & .crisp-contextmenu-item--danger svg { color: var(--crisp-bg-danger); }
539
+ & .crisp-contextmenu-item--danger:hover { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
540
+ & .crisp-contextmenu-shortcut { margin-inline-start: auto; padding-inline-start: var(--crisp-space-3); color: var(--crisp-fg-muted); font-size: var(--crisp-text-sm); }
541
+ & .crisp-contextmenu-sep { height: 1px; margin: var(--crisp-space-1) 0; border: none; background: var(--crisp-border-subtle); }
542
+ }
543
+
544
+ @media (prefers-reduced-motion: reduce) {
545
+ .crisp-contextmenu, .crisp-contextmenu * {
546
+ animation-duration: 0.01ms !important;
547
+ animation-iteration-count: 1 !important;
548
+ transition-duration: 0.01ms !important;
549
+ }
550
+ }
551
+
552
+ .crisp-datatable {
553
+ display: flex; flex-direction: column; gap: var(--crisp-space-2-5); font-family: var(--crisp-font-sans);
554
+ & .crisp-datatable-toolbar { display: flex; align-items: center; gap: var(--crisp-space-2); }
555
+ & .crisp-datatable-search { position: relative; flex: 1; max-width: 280px; display: inline-flex; align-items: center; }
556
+ & .crisp-datatable-search svg { position: absolute; inset-inline-start: var(--crisp-space-2); color: var(--crisp-fg-muted); pointer-events: none; }
557
+ & .crisp-datatable-search input { width: 100%; height: 32px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-6); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); outline: none; transition: box-shadow .15s; }
558
+ & .crisp-datatable-search input::placeholder { color: var(--crisp-fg-muted); }
559
+ & .crisp-datatable-search input:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
560
+ & .crisp-datatable-count { margin-inline-start: auto; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
561
+ /* The header cell has no padding of its own -- the button owns the
562
+ full cell so the whole header is clickable (its own inset is 12px).
563
+ Mirrors the summary-row fix. */
564
+ & th { padding: 0; }
565
+ /* Same wrapper trap as AUTHORING.md Lesson 40 (ColumnCalc's summary trigger):
566
+ Menu wraps its trigger in a flex div that sizes to its content, so a
567
+ long header grew past the column instead of filling it -- with nothing
568
+ left to squeeze, the label's own ellipsis CSS (below) had no properly
569
+ -sized box to truncate against, and the th's own overflow hard-clipped
570
+ it with no "...". Fill the wrapper, scoped to th so Menu's default
571
+ (correct everywhere else) is untouched. */
572
+ & th .crisp-menu { width: 100%; height: 100%; }
573
+ & .crisp-datatable-th-inner { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; min-width: 0; height: 100%; }
574
+ & .crisp-datatable-th-inner > svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
575
+ /* The summary cell has NO padding of its own -- the calculation trigger
576
+ owns the whole 246x37 area so a click anywhere in the cell opens the
577
+ menu. Zero the cell's inset and let ColumnCalc supply the 12px. */
578
+ & tfoot td { padding: 0; }
579
+ /* Group heading row -- a view is grouped under a subtle label with the
580
+ bucket's count beside it. */
581
+ & .crisp-datatable-viewsettings { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: background-color .12s, color .12s; }
582
+ & .crisp-datatable-viewsettings:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary); }
583
+ & .crisp-datatable-group-label { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
584
+ & .crisp-datatable-group { height: var(--crisp-size-menuRow); padding: 0 var(--crisp-space-3); background: var(--crisp-bg-subtle); border-bottom: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
585
+ & .crisp-datatable-group-count { margin-inline-start: var(--crisp-space-1-5); color: var(--crisp-fg-muted); font-variant-numeric: tabular-nums; }
586
+ & .crisp-datatable-th-rename { width: 100%; min-width: 0; height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); outline: none; }
587
+ & .crisp-datatable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
588
+ & .crisp-datatable-th-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
589
+ & .crisp-datatable-sort { display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; min-width: 0; height: 100%; margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; font: inherit; letter-spacing: inherit; color: inherit; text-align: start; cursor: pointer; }
590
+ & th[data-align="right"] .crisp-datatable-sort { justify-content: flex-end; }
591
+ & .crisp-datatable-chevron { margin-inline-start: auto; flex-shrink: 0; color: var(--crisp-fg-muted); opacity: 0; transition: opacity .12s; }
592
+ & th[data-align="right"] .crisp-datatable-chevron { margin-inline-start: 0; }
593
+ & .crisp-datatable-sort:hover .crisp-datatable-chevron { opacity: 0.6; }
594
+ & .crisp-datatable-sort[data-sorted] .crisp-datatable-chevron { opacity: 1; color: var(--crisp-fg-primary); }
595
+ /* sticky first column(s) + horizontal scroll shadow — RecordsTable's feel */
596
+ & th[data-sticky], & td[data-sticky] { position: sticky; z-index: 1; background: var(--crisp-bg-surface); }
597
+ & th[data-sticky] { z-index: 3; }
598
+ & tbody tr[data-selected] td[data-sticky] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 10%, var(--crisp-bg-surface)); }
599
+ & tbody tr:hover td[data-sticky] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
600
+ & .crisp-table-scroll[data-scrolled-x] [data-sticky-edge] { clip-path: inset(0 -38px 0 0); box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
601
+ /* add-row + summary footer */
602
+ & .crisp-datatable-addcell { padding: 0; border-top: none; }
603
+ & .crisp-datatable-addrow { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); border: none; border-top: 1px solid var(--crisp-border-subtle); background: var(--crisp-bg-surface); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-lg); cursor: pointer; transition: background-color .12s; }
604
+ & .crisp-datatable-addrow:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
605
+ & .crisp-datatable-addrow svg { flex-shrink: 0; }
606
+ & .crisp-datatable-check { display: flex; align-items: center; justify-content: center; }
607
+ & .crisp-datatable-col-check { width: 40px; padding: 0; text-align: center; }
608
+ & tbody tr[data-selected] td { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 10%, var(--crisp-bg-surface)); }
609
+ & tbody tr[data-selected]:hover td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, color-mix(in srgb, var(--crisp-bg-brand-solid) 10%, var(--crisp-bg-surface))); }
610
+ & .crisp-datatable-editable:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); cursor: text; }
611
+ & .crisp-datatable-edit { width: 100%; height: 28px; margin: 0; padding: 0 var(--crisp-space-1-5); border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); outline: none; vertical-align: middle; }
612
+ & .crisp-datatable-edit:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
613
+ & .crisp-datatable-empty { padding: var(--crisp-space-8) var(--crisp-space-3); text-align: center; color: var(--crisp-fg-muted); font-size: var(--crisp-text-lg); }
614
+ /* fixed layout so column widths (and resize) are exact — like RecordsTable */
615
+ & table { table-layout: fixed; }
616
+ /* column resize grip */
617
+ & .crisp-datatable-resize { position: absolute; top: 0; inset-inline-end: -3px; width: 9px; height: 100%; cursor: col-resize; z-index: 6; touch-action: none; }
618
+ & .crisp-datatable-resize::after { content: ""; position: absolute; top: 0; inset-inline-start: 3px; width: 2px; height: 100%; background: var(--crisp-bg-brand-solid); opacity: 0; transition: opacity .12s; }
619
+ & .crisp-datatable-resize:hover::after, & .crisp-datatable-resize[data-resizing]::after { opacity: 1; }
620
+ /* typed cells — entity (avatar + name), colour-coded tags, numbers, dates */
621
+ & .crisp-datatable-entity { display: flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
622
+ & .crisp-datatable-entity-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
623
+ & .crisp-datatable-avatar { width: var(--crisp-size-icon); height: var(--crisp-size-icon); border-radius: var(--crisp-radius-sm); flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; line-height: 1; font-weight: var(--crisp-weight-semibold); text-transform: uppercase; color: var(--crisp-fg-on-brand); background: var(--crisp-bg-brand-solid); }
624
+ & .crisp-datatable-avatar[data-tone="success"] { background: var(--crisp-bg-success); } & .crisp-datatable-avatar[data-tone="warning"] { background: var(--crisp-bg-warning); } & .crisp-datatable-avatar[data-tone="danger"] { background: var(--crisp-bg-danger); } & .crisp-datatable-avatar[data-tone="purple"] { background: var(--crisp-bg-purple); } & .crisp-datatable-avatar[data-tone="cyan"] { background: var(--crisp-bg-cyan); } & .crisp-datatable-avatar[data-tone="orange"] { background: var(--crisp-bg-orange); }
625
+ & .crisp-datatable-avatar img { width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
626
+ & .crisp-datatable-tags { display: flex; align-items: center; gap: var(--crisp-space-1); overflow: hidden; }
627
+ & .crisp-datatable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
628
+ & .crisp-datatable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); }
629
+ & .crisp-datatable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); }
630
+ & .crisp-datatable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-warning) 82%, var(--crisp-fg-primary)); }
631
+ & .crisp-datatable-tag[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); }
632
+ & .crisp-datatable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); }
633
+ & .crisp-datatable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); }
634
+ & .crisp-datatable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
635
+ & .crisp-datatable-num { font-variant-numeric: tabular-nums; }
636
+ & .crisp-datatable-muted { color: var(--crisp-fg-muted); }
637
+ /* row drag-to-reorder -- a Settings > Objects > Attributes screen measures
638
+ a leading 20px grip column, a 16px grip icon, and the row's own
639
+ hairline doubling as the drop indicator (it tints toward the brand
640
+ colour as the active drop target). The affordance + geometry are
641
+ measured; the drag MECHANISM is crisp's existing house idiom -- HTML5
642
+ draggable + dataTransfer, the same one column reorder already uses
643
+ (RecordsTable's reorderColumn) -- not a proprietary
644
+ pointer-events implementation. */
645
+ & .crisp-datatable-col-grip { width: 20px; padding: 0; text-align: center; }
646
+ & .crisp-datatable-grip { display: inline-flex; align-items: center; justify-content: center; width: 100%; height: 100%; margin: 0; border: none; border-radius: 0; background: none; font-family: inherit; color: var(--crisp-fg-muted); cursor: grab; }
647
+ & .crisp-datatable-grip:active { cursor: grabbing; }
648
+ & tbody tr[data-drop-target] td, & tbody tr[data-drop-target] th { box-shadow: inset 0 2px 0 0 var(--crisp-bg-brand-solid); transition: box-shadow .12s; }
649
+ }
650
+
651
+ @media (prefers-reduced-motion: reduce) {
652
+ .crisp-datatable, .crisp-datatable * {
653
+ animation-duration: 0.01ms !important;
654
+ animation-iteration-count: 1 !important;
655
+ transition-duration: 0.01ms !important;
656
+ }
657
+ }
658
+
659
+ .crisp-datepicker {
660
+
661
+ position: relative; box-sizing: border-box; width: 100%; min-width: 0;
662
+ font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary); background: var(--crisp-bg-surface);
663
+
664
+ & .crisp-datepicker-header {
665
+ display: flex; align-items: center; justify-content: space-between;
666
+ height: var(--crisp-size-menuRow);
667
+ }
668
+ & .crisp-datepicker-header-label {
669
+ display: inline-flex; align-items: center; gap: var(--crisp-space-1);
670
+ height: 100%; min-width: 0; border: 0; padding: 0 var(--crisp-space-1);
671
+ border-radius: var(--crisp-radius-md); background: transparent; cursor: pointer;
672
+ color: var(--crisp-fg-primary); font-family: inherit;
673
+ font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium);
674
+ white-space: nowrap;
675
+ outline: 2px solid transparent; outline-offset: -2px;
676
+ transition: outline-color .2s ease;
677
+ }
678
+ & .crisp-datepicker-header-label:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
679
+ & .crisp-datepicker-header-chevron { display: inline-flex; transition: transform .2s ease; }
680
+ & .crisp-datepicker-header-chevron[data-open] { transform: rotate(180deg); }
681
+
682
+ & .crisp-datepicker-nav { display: flex; align-items: center; }
683
+ & .crisp-datepicker-nav-button {
684
+ display: inline-flex; align-items: center; justify-content: center;
685
+ width: var(--crisp-size-menuRow); height: var(--crisp-size-menuRow); padding: 0;
686
+ border: none; border-radius: var(--crisp-radius-md); background: none;
687
+ color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer;
688
+ outline: 2px solid transparent; outline-offset: -2px;
689
+ transition: background-color .12s, outline-color .2s ease;
690
+ }
691
+ & .crisp-datepicker-nav-button:hover { background: var(--crisp-bg-raised); }
692
+ & .crisp-datepicker-nav-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
693
+ & .crisp-datepicker-nav-button:disabled { opacity: .4; cursor: not-allowed; }
694
+
695
+ & .crisp-datepicker-weekday-row {
696
+ display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
697
+ position: relative; z-index: 2; background: var(--crisp-bg-surface);
698
+ }
699
+ & .crisp-datepicker-weekday {
700
+ display: flex; align-items: center; justify-content: center;
701
+ height: var(--crisp-size-calendarCell); color: var(--crisp-fg-neutral-subtle);
702
+ font-size: var(--crisp-text-sm); line-height: 16px; font-weight: var(--crisp-weight-medium);
703
+ }
704
+
705
+ & .crisp-datepicker-months { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; min-width: 0; }
706
+ & .crisp-datepicker-months[data-wheel-open] { visibility: hidden; }
707
+ & .crisp-datepicker-month { min-width: 0; }
708
+ & .crisp-datepicker-month-label {
709
+ display: flex; align-items: center; height: 24px;
710
+ color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px;
711
+ font-weight: var(--crisp-weight-medium);
712
+ }
713
+
714
+ & .crisp-datepicker-grid { display: grid; min-width: 0; }
715
+ & .crisp-datepicker-week-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
716
+
717
+ & .crisp-datepicker-cell {
718
+ position: relative; min-width: 0; min-height: var(--crisp-size-calendarCell);
719
+ isolation: isolate;
720
+ }
721
+ & .crisp-datepicker-empty-cell { min-height: var(--crisp-size-calendarCell); }
722
+
723
+ /* The bridge joining days inside a completed range.
724
+ The endpoints do NOT carry data-in-range -- only the interior days do --
725
+ so these are three independent rules, not a base plus two modifiers. A
726
+ modifier that sets only inset-inline-start never generates a pseudo
727
+ element on an endpoint, which leaves a half-cell of white between the
728
+ endpoint's pill and the run of grey beside it. Each rule declares its
729
+ own content. */
730
+ & .crisp-datepicker-cell[data-range-complete][data-in-range]::before {
731
+ content: ""; position: absolute; z-index: -1; inset-inline: 0;
732
+ top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); height: var(--crisp-size-calendarPill); background: var(--crisp-bg-neutral-weak);
733
+ }
734
+ & .crisp-datepicker-cell[data-range-complete][data-range-start]:not([data-range-end])::before {
735
+ content: ""; position: absolute; z-index: -1;
736
+ inset-inline-start: 50%; inset-inline-end: 0;
737
+ top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); height: var(--crisp-size-calendarPill); background: var(--crisp-bg-neutral-weak);
738
+ }
739
+ & .crisp-datepicker-cell[data-range-complete][data-range-end]:not([data-range-start])::before {
740
+ content: ""; position: absolute; z-index: -1;
741
+ inset-inline-start: 0; inset-inline-end: 50%;
742
+ top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); height: var(--crisp-size-calendarPill); background: var(--crisp-bg-neutral-weak);
743
+ }
744
+
745
+ & .crisp-datepicker-date {
746
+ position: relative; display: flex; width: 100%; height: 100%;
747
+ min-height: var(--crisp-size-calendarCell); min-width: 0;
748
+ align-items: flex-start; justify-content: center;
749
+ border: 0; padding: 0; background: transparent; cursor: pointer;
750
+ color: var(--crisp-fg-primary); font: inherit; outline: none;
751
+ isolation: isolate;
752
+ }
753
+ /* the round day highlight, behind the numeral */
754
+ & .crisp-datepicker-date::before {
755
+ content: ""; position: absolute; z-index: -1; top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); left: 50%;
756
+ width: var(--crisp-size-calendarPill); height: var(--crisp-size-calendarPill);
757
+ border-radius: var(--crisp-radius-md);
758
+ background: transparent; transform: translateX(-50%);
759
+ }
760
+ & .crisp-datepicker-date[data-today]::before { background: var(--crisp-bg-neutral-weak); }
761
+ & .crisp-datepicker-date[data-selected]::before { background: var(--crisp-bg-brand-solid); }
762
+ & .crisp-datepicker-date[data-selected] { color: var(--crisp-fg-on-brand); }
763
+ & .crisp-datepicker-date[data-in-range] { color: var(--crisp-fg-primary); }
764
+ & .crisp-datepicker-date[data-in-range]::before { background: transparent; }
765
+ & .crisp-datepicker-date[data-unavailable] { color: var(--crisp-fg-disabled); }
766
+ & .crisp-datepicker-date:disabled { color: var(--crisp-fg-disabled); cursor: not-allowed; }
767
+ & .crisp-datepicker-date:focus-visible::after {
768
+ content: ""; position: absolute; top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); left: 50%;
769
+ width: var(--crisp-size-calendarPill); height: var(--crisp-size-calendarPill);
770
+ transform: translateX(-50%); border-radius: var(--crisp-radius-md);
771
+ outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px;
772
+ }
773
+
774
+ & .crisp-datepicker-date-content {
775
+ position: relative; z-index: 1; display: flex; width: 100%;
776
+ min-height: var(--crisp-size-calendarCell); min-width: 0; box-sizing: border-box;
777
+ flex-direction: column; align-items: center; gap: 3px;
778
+ padding-top: calc((var(--crisp-size-calendarCell) - var(--crisp-size-calendarPill)) / 2); color: inherit;
779
+ font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium);
780
+ font-variant-numeric: tabular-nums;
781
+ }
782
+ /* The numeral is its own 42px flex box so it centres on the 42px pill.
783
+ Without this the content column top-aligns the glyph and the pill reads
784
+ as offset — the cell is 48px, the pill 42px inset 3px, and only a
785
+ 42px-tall numeral box shares the pill's centre line. */
786
+ & .crisp-datepicker-date-content > [data-date-picker-day] {
787
+ display: flex; min-height: var(--crisp-size-calendarPill); flex-shrink: 0;
788
+ align-items: center; justify-content: center;
789
+ }
790
+
791
+ /* the year/month wheel, laid over the grid it replaces */
792
+ & .crisp-datepicker-wheel-container {
793
+ position: absolute; z-index: 1; inset-inline: 0;
794
+ top: var(--crisp-size-menuRow); bottom: 0;
795
+ display: flex; align-items: center; overflow: hidden;
796
+ background: var(--crisp-bg-surface);
797
+ }
798
+ & .crisp-datepicker-wheel { width: 100%; }
799
+
800
+ & .crisp-datepicker-continuous-scroll {
801
+ height: 100%; min-height: 0; overflow-y: auto;
802
+ overscroll-behavior: contain; scrollbar-width: none;
803
+ }
804
+ & .crisp-datepicker-continuous-scroll::-webkit-scrollbar { display: none; }
805
+ & .crisp-datepicker-continuous-content { display: flex; flex-direction: column; }
806
+
807
+ /* announced, never drawn */
808
+ & .crisp-datepicker-live-region {
809
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
810
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
811
+ }
812
+
813
+ }
814
+ .crisp-datepicker--visibleRange_month {
815
+
816
+ }
817
+ .crisp-datepicker--visibleRange_twoMonths {
818
+ & .crisp-datepicker-months { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--crisp-space-6); }
819
+ & .crisp-datepicker-two-month-header { display: flex; align-items: center; justify-content: space-between; height: var(--crisp-size-menuRow); }
820
+ & .crisp-datepicker-two-month-label { color: var(--crisp-fg-primary); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); }
821
+ }
822
+ .crisp-datepicker--visibleRange_week {
823
+
824
+ }
825
+ .crisp-datepicker--visibleRange_continuous {
826
+ & .crisp-datepicker-weekday-row { position: sticky; top: 0; }
827
+ }
828
+
829
+ @media (prefers-reduced-motion: reduce) {
830
+ .crisp-datepicker, .crisp-datepicker * {
831
+ animation-duration: 0.01ms !important;
832
+ animation-iteration-count: 1 !important;
833
+ transition-duration: 0.01ms !important;
834
+ }
835
+ }
836
+
837
+ .crisp-datepickerfield {
838
+
839
+ display: inline-flex; font-family: var(--crisp-font-sans);
840
+
841
+ & .crisp-datepickerfield-trigger {
842
+ display: inline-flex; align-items: center; gap: var(--crisp-space-2);
843
+ box-sizing: border-box; height: 32px; padding: 0 var(--crisp-space-2-5); margin: 0;
844
+ border: none; border-radius: var(--crisp-radius-md); background: transparent;
845
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
846
+ color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-lg);
847
+ white-space: nowrap; cursor: pointer;
848
+ }
849
+ & .crisp-datepickerfield-trigger[data-ghost] { background: transparent; box-shadow: none; }
850
+ & .crisp-datepickerfield-trigger[data-ghost]:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
851
+ & .crisp-datepickerfield-trigger[data-placeholder] { color: var(--crisp-fg-muted); }
852
+ & .crisp-datepickerfield-trigger svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
853
+
854
+ & .crisp-datepickerfield-panel { padding: var(--crisp-space-2); width: 300px; }
855
+ & .crisp-datepickerfield-presets { display: flex; flex-wrap: wrap; gap: var(--crisp-space-1); margin-top: var(--crisp-space-2); }
856
+ & .crisp-datepickerfield-preset {
857
+ height: var(--crisp-size-chip); padding: 0 var(--crisp-space-2); border: none;
858
+ border-radius: var(--crisp-radius-chip); background: var(--crisp-bg-raised); color: var(--crisp-fg-primary);
859
+ font-family: inherit; font-size: var(--crisp-text-sm); cursor: pointer;
860
+ }
861
+ & .crisp-datepickerfield-preset:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
862
+
863
+ }
864
+
865
+ .crisp-dialog {
866
+ display: contents; font-family: var(--crisp-font-sans);
867
+ & .crisp-dialog-backdrop { position: fixed; inset: 0; z-index: 60; background: transparent; }
868
+ & .crisp-dialog-positioner { position: fixed; inset: 0; z-index: 61; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--crisp-space-4) var(--crisp-space-4); }
869
+ & .crisp-dialog-content { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-height: 74vh; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-2xl); background: color-mix(in srgb, var(--crisp-bg-overlay-frost) 60%, transparent); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); box-shadow: 0 8px 28px -6px var(--crisp-shadow-overlay1), 0 18px 88px -4px var(--crisp-shadow-overlay2), 0 0 1px var(--crisp-shadow-overlay3); opacity: 1; transform: scale(1); transition: opacity 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
870
+ & .crisp-dialog-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); overflow: hidden; }
871
+ & .crisp-dialog-header { display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0; height: 52px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); }
872
+ & .crisp-dialog-header svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
873
+ & .crisp-dialog-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
874
+ & .crisp-dialog-close { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; margin: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
875
+ & .crisp-dialog-close:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
876
+ & .crisp-dialog-body { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--crisp-space-4); padding: var(--crisp-space-5) var(--crisp-space-4); }
877
+ & .crisp-dialog-footer { display: flex; align-items: center; justify-content: flex-end; gap: var(--crisp-space-3); flex-shrink: 0; min-height: 56px; padding: 0 var(--crisp-space-4); border-top: 1px solid var(--crisp-border-subtle); }
878
+ & .crisp-dialog-field { display: flex; flex-direction: column; gap: var(--crisp-space-1-5); }
879
+ & .crisp-dialog-field-label { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); }
880
+ & .crisp-dialog-more { display: inline-flex; align-items: center; gap: var(--crisp-space-2); margin-inline-end: auto; border: none; background: none; padding: 0; font-family: inherit; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); cursor: pointer; }
881
+ & .crisp-dialog-submit { display: inline-flex; align-items: center; gap: var(--crisp-space-2); height: 28px; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
882
+ & .crisp-dialog-submit-key { display: inline-flex; align-items: center; justify-content: center; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: rgba(255,255,255,0.22); font-size: var(--crisp-text-xs); }
883
+ }
884
+
885
+ @media (prefers-reduced-motion: reduce) {
886
+ .crisp-dialog, .crisp-dialog * {
887
+ animation-duration: 0.01ms !important;
888
+ animation-iteration-count: 1 !important;
889
+ transition-duration: 0.01ms !important;
890
+ }
891
+ }
892
+
893
+ .crisp-divider {
894
+ flex-shrink: 0; border: none; margin: 0; background: var(--crisp-border-subtle);
895
+ &[data-orientation="horizontal"] { width: 100%; height: 1px; }
896
+ &[data-orientation="vertical"] { width: 1px; align-self: stretch; min-height: 1em; }
897
+ }
898
+
899
+ .crisp-donutchart {
900
+ display: inline-flex; align-items: center; gap: var(--crisp-space-4); box-sizing: border-box; font-family: var(--crisp-font-sans);
901
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
902
+ & .crisp-donutchart-ring { position: relative; flex-shrink: 0; }
903
+ & .crisp-donutchart-svg { display: block; }
904
+ & .crisp-donutchart-seg { fill: none; transition: stroke-dasharray 0.3s ease; }
905
+ & .crisp-donutchart-track { fill: none; stroke: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
906
+ & .crisp-donutchart-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
907
+ & .crisp-donutchart-total { font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; color: var(--crisp-fg-primary); }
908
+ & .crisp-donutchart-caption { font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); }
909
+ & .crisp-donutchart-legend { display: flex; flex-direction: column; gap: var(--crisp-space-1-5); min-width: 0; }
910
+ & .crisp-donutchart-item { display: inline-flex; align-items: center; gap: var(--crisp-space-2); font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); }
911
+ & .crisp-donutchart-swatch { width: 10px; height: 10px; flex-shrink: 0; border-radius: 3px; }
912
+ & .crisp-donutchart-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--crisp-fg-muted); }
913
+ & .crisp-donutchart-val { flex-shrink: 0; font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
914
+ }
915
+
916
+ @media (prefers-reduced-motion: reduce) {
917
+ .crisp-donutchart, .crisp-donutchart * {
918
+ animation-duration: 0.01ms !important;
919
+ animation-iteration-count: 1 !important;
920
+ transition-duration: 0.01ms !important;
921
+ }
922
+ }
923
+
924
+ .crisp-drawer {
925
+ display: contents; font-family: var(--crisp-font-sans);
926
+ & .crisp-drawer-backdrop { position: fixed; inset: 0; z-index: 60; background: color-mix(in srgb, var(--crisp-fg-primary) 18%, transparent); opacity: 1; transition: opacity 0.2s ease; @starting-style { opacity: 0; } }
927
+ & .crisp-drawer-positioner { position: fixed; inset: 0; z-index: 61; display: flex; box-sizing: border-box; padding: var(--crisp-space-2); }
928
+ & .crisp-drawer-positioner[data-side="right"] { justify-content: flex-end; }
929
+ & .crisp-drawer-positioner[data-side="left"] { justify-content: flex-start; }
930
+ & .crisp-drawer-content { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: relative; display: flex; flex-direction: column; box-sizing: border-box; overflow: hidden; width: 420px; max-width: 100%; height: 100%; background: var(--crisp-bg-surface); border-radius: var(--crisp-radius-xl); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); transform: none; transition: transform 0.24s cubic-bezier(.32,.72,0,1); }
931
+ & .crisp-drawer-positioner[data-side="right"] .crisp-drawer-content { @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); } }
932
+ & .crisp-drawer-positioner[data-side="left"] .crisp-drawer-content { @starting-style { transform: translateX(calc(-100% - var(--crisp-space-2))); } }
933
+ & .crisp-drawer-header { display: flex; align-items: center; gap: var(--crisp-space-2); flex-shrink: 0; height: 52px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); }
934
+ & .crisp-drawer-header svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
935
+ & .crisp-drawer-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
936
+ & .crisp-drawer-close { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 28px; height: 28px; margin: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
937
+ & .crisp-drawer-close:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
938
+ & .crisp-drawer-body { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-4); }
939
+ & .crisp-drawer-footer { display: flex; align-items: center; justify-content: flex-end; gap: var(--crisp-space-3); flex-shrink: 0; min-height: 56px; padding: 0 var(--crisp-space-4); border-top: 1px solid var(--crisp-border-subtle); }
940
+ }
941
+
942
+ @media (prefers-reduced-motion: reduce) {
943
+ .crisp-drawer, .crisp-drawer * {
944
+ animation-duration: 0.01ms !important;
945
+ animation-iteration-count: 1 !important;
946
+ transition-duration: 0.01ms !important;
947
+ }
948
+ }
949
+
950
+ .crisp-emptystate {
951
+ display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); box-sizing: border-box; padding: var(--crisp-space-8) var(--crisp-space-4); text-align: center; font-family: var(--crisp-font-sans);
952
+ & .crisp-emptystate-icon { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; margin-bottom: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); color: var(--crisp-fg-muted); }
953
+ & .crisp-emptystate-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
954
+ & .crisp-emptystate-desc { max-width: 320px; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
955
+ & .crisp-emptystate-action { margin-top: var(--crisp-space-2); }
956
+ }
957
+ .crisp-emptystate--variant_default {
958
+
959
+ }
960
+ .crisp-emptystate--variant_illustrated {
961
+ & .crisp-emptystate-icon { width: 132px; height: 96px; margin-bottom: var(--crisp-space-2); border-radius: 0; color: color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); background: radial-gradient(circle, color-mix(in srgb, var(--crisp-fg-primary) 12%, transparent) 1.2px, transparent 1.2px) 0 0 / 16px 16px; }
962
+ }
963
+ .crisp-emptystate--variant_page {
964
+ gap: var(--crisp-space-2);
965
+ & .crisp-emptystate-icon { width: 45px; height: 45px; margin-bottom: var(--crisp-space-2); border-radius: var(--crisp-radius-full); border: 1px solid var(--crisp-border-subtle); background: none; color: var(--crisp-fg-muted); }
966
+ & .crisp-emptystate-title { font-size: 20px; line-height: 24px; }
967
+ & .crisp-emptystate-desc { max-width: 266px; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); line-height: 20px; }
968
+ & .crisp-emptystate-action { margin-top: var(--crisp-space-2); }
969
+ }
970
+
971
+ .crisp-fileupload {
972
+
973
+ display: flex; flex-direction: column; gap: var(--crisp-space-2);
974
+ font-family: var(--crisp-font-sans); min-width: 0;
975
+
976
+ & .crisp-fileupload-zone {
977
+ box-sizing: border-box; position: relative;
978
+ display: flex; flex-direction: column; align-items: center;
979
+ justify-content: center; gap: var(--crisp-space-1);
980
+ width: 100%; padding: var(--crisp-space-6) var(--crisp-space-4);
981
+ border: 1px dashed var(--crisp-border-default); border-radius: var(--crisp-radius-md);
982
+ background: transparent; cursor: pointer; text-align: center;
983
+ font-family: inherit;
984
+ transition: background-color .12s, border-color .12s;
985
+ outline: 2px solid transparent; outline-offset: -2px;
986
+ }
987
+ & .crisp-fileupload-zone:hover { background: var(--crisp-bg-raised); }
988
+ & .crisp-fileupload-zone:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
989
+ & .crisp-fileupload-zone[data-dragging] {
990
+ border-color: var(--crisp-bg-brand-solid);
991
+ background: color-mix(in srgb, var(--crisp-bg-brand-solid) 6%, transparent);
992
+ }
993
+ & .crisp-fileupload-zone[data-disabled] { opacity: .5; cursor: not-allowed; }
994
+ & .crisp-fileupload-zone[data-invalid] { border-color: var(--crisp-bg-danger); }
995
+
996
+ /* "No files" 16/20 weight 600 */
997
+ & .crisp-fileupload-title {
998
+ color: var(--crisp-fg-primary); font-size: var(--crisp-text-xl); line-height: 20px;
999
+ font-weight: var(--crisp-weight-semibold);
1000
+ }
1001
+ /* The hint line, 14/20 weight 500 at 63% of the foreground */
1002
+ & .crisp-fileupload-hint {
1003
+ color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent);
1004
+ font-size: var(--crisp-text-lg); line-height: 20px;
1005
+ font-weight: var(--crisp-weight-medium);
1006
+ }
1007
+
1008
+ & .crisp-fileupload-input {
1009
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1010
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
1011
+ }
1012
+
1013
+ & .crisp-fileupload-list { display: flex; flex-direction: column; gap: var(--crisp-space-1); margin: 0; padding: 0; list-style: none; }
1014
+ /* the row height crisp measured for a data-grid row */
1015
+ & .crisp-fileupload-item {
1016
+ display: flex; align-items: center; gap: var(--crisp-space-2);
1017
+ min-height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2);
1018
+ border-radius: var(--crisp-radius-md); background: var(--crisp-bg-raised);
1019
+ font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary);
1020
+ }
1021
+ & .crisp-fileupload-item-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1022
+ & .crisp-fileupload-item-size { flex-shrink: 0; color: var(--crisp-fg-muted); font-size: var(--crisp-text-sm); font-variant-numeric: tabular-nums; }
1023
+ & .crisp-fileupload-item[data-status="error"] { color: var(--crisp-bg-danger); }
1024
+ & .crisp-fileupload-item[data-status="error"] .crisp-fileupload-item-size { color: var(--crisp-bg-danger); }
1025
+
1026
+ /* progress track, reusing the measured Progress geometry */
1027
+ & .crisp-fileupload-progress {
1028
+ flex-shrink: 0; width: 64px; height: 4px; border-radius: var(--crisp-radius-full);
1029
+ background: var(--crisp-bg-neutral-weak); overflow: hidden;
1030
+ }
1031
+ & .crisp-fileupload-progress-fill { height: 100%; background: var(--crisp-bg-brand-solid); transition: width .2s ease; }
1032
+
1033
+ & .crisp-fileupload-remove {
1034
+ display: inline-flex; align-items: center; justify-content: center;
1035
+ flex-shrink: 0; width: var(--crisp-size-icon); height: var(--crisp-size-icon);
1036
+ padding: 0; border: none; border-radius: var(--crisp-radius-sm);
1037
+ background: transparent; color: var(--crisp-fg-muted); cursor: pointer;
1038
+ font-family: inherit;
1039
+ outline: 2px solid transparent; outline-offset: -2px;
1040
+ }
1041
+ & .crisp-fileupload-remove:hover { color: var(--crisp-fg-primary); }
1042
+ & .crisp-fileupload-remove:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1043
+
1044
+ & .crisp-fileupload-errors { display: flex; flex-direction: column; gap: var(--crisp-space-0-5); margin: 0; padding: 0; list-style: none; }
1045
+ /* out of flow while empty, so the always-mounted live region costs no
1046
+ layout: display:none would take it out of the accessibility tree, which
1047
+ is the one thing it exists to be in */
1048
+ & .crisp-fileupload-errors:empty { position: absolute; }
1049
+ & .crisp-fileupload-error { color: var(--crisp-bg-danger); font-size: var(--crisp-text-md); line-height: 18px; }
1050
+
1051
+ }
1052
+
1053
+ @media (prefers-reduced-motion: reduce) {
1054
+ .crisp-fileupload, .crisp-fileupload * {
1055
+ animation-duration: 0.01ms !important;
1056
+ animation-iteration-count: 1 !important;
1057
+ transition-duration: 0.01ms !important;
1058
+ }
1059
+ }
1060
+
1061
+ .crisp-formfield {
1062
+ display: flex; flex-direction: column; gap: var(--crisp-space-1-5); box-sizing: border-box; font-family: var(--crisp-font-sans);
1063
+ & .crisp-formfield-label { display: inline-flex; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1064
+ & .crisp-formfield-required { color: var(--crisp-bg-danger); }
1065
+ & .crisp-formfield-optional { color: color-mix(in srgb, var(--crisp-fg-primary) 40%, transparent); font-weight: var(--crisp-weight-regular); }
1066
+ & .crisp-formfield-desc { font-size: var(--crisp-text-sm); line-height: 16px; color: var(--crisp-fg-muted); }
1067
+ & .crisp-formfield-error { font-size: var(--crisp-text-sm); line-height: 16px; color: var(--crisp-bg-danger); }
1068
+ }
1069
+
1070
+ .crisp-input {
1071
+
1072
+ position: relative; box-sizing: border-box; display: inline-flex; align-items: center;
1073
+ width: 100%; background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
1074
+ font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px;
1075
+
1076
+ &::after {
1077
+ content: ""; position: absolute; inset: 0; border-radius: inherit;
1078
+ border: 2px solid transparent; transition: border-color .1s ease;
1079
+ pointer-events: none;
1080
+ }
1081
+ &:focus-within::after { border-color: var(--crisp-stroke-field-focus); }
1082
+
1083
+ & .crisp-input-value {
1084
+ box-sizing: border-box; flex: 1 1 auto; min-width: 0; width: 100%;
1085
+ align-self: stretch; margin: 0; border: none; background: none; outline: none;
1086
+ font: inherit; color: var(--crisp-fg-primary);
1087
+ }
1088
+ & .crisp-input-value::placeholder { color: var(--crisp-fg-muted); }
1089
+ & .crisp-input-value:disabled { opacity: 0.5; cursor: not-allowed; }
1090
+ &:has(.crisp-input-value:disabled) { opacity: 1; }
1091
+
1092
+ }
1093
+ .crisp-input--size_medium {
1094
+ height: 32px; border-radius: var(--crisp-radius-md); & .crisp-input-value { padding-inline: var(--crisp-space-2-5); }
1095
+ }
1096
+ .crisp-input--size_large {
1097
+ height: 36px; border-radius: 10px; & .crisp-input-value { padding-inline: var(--crisp-space-3); }
1098
+ }
1099
+ .crisp-input--invalid_true {
1100
+ &::after { border-color: var(--crisp-bg-danger); } &:focus-within::after { border-color: var(--crisp-bg-danger); }
1101
+ }
1102
+ .crisp-input--invalid_false {
1103
+
1104
+ }
1105
+
1106
+ @media (prefers-reduced-motion: reduce) {
1107
+ .crisp-input, .crisp-input * {
1108
+ animation-duration: 0.01ms !important;
1109
+ animation-iteration-count: 1 !important;
1110
+ transition-duration: 0.01ms !important;
1111
+ }
1112
+ }
1113
+
1114
+ .crisp-kbd {
1115
+ box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-0-5); min-width: 20px; height: 20px; padding-inline: var(--crisp-space-1); border-radius: var(--crisp-radius-sm); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-regular); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent);
1116
+ }
1117
+
1118
+ .crisp-linechart {
1119
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); --crisp-linechart-yaxis-width: 34px;
1120
+ & .crisp-linechart-body { display: flex; flex: 1; min-height: 0; }
1121
+ & .crisp-linechart-yaxis { position: relative; flex-shrink: 0; width: var(--crisp-linechart-yaxis-width); }
1122
+ & .crisp-linechart-ytick { position: absolute; inset-inline-end: var(--crisp-space-2); transform: translateY(50%); font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); white-space: nowrap; }
1123
+ & .crisp-linechart-plot { position: relative; flex: 1; min-width: 0; border-bottom: 1px solid var(--crisp-border-default); }
1124
+ & .crisp-linechart-grid { position: absolute; left: 0; right: 0; border-top: 1px dashed var(--crisp-border-subtle); pointer-events: none; }
1125
+ & .crisp-linechart-svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
1126
+ & .crisp-linechart-area { fill: color-mix(in srgb, var(--crisp-bg-brand-solid) 12%, transparent); stroke: none; }
1127
+ & .crisp-linechart-line { fill: none; stroke: var(--crisp-bg-brand-solid); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
1128
+ & .crisp-linechart-dot-html { position: absolute; width: 8px; height: 8px; box-sizing: border-box; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-surface); border: 2px solid var(--crisp-bg-brand-solid); transform: translate(-50%, 50%); pointer-events: auto; }
1129
+ & .crisp-linechart-xaxis { display: flex; margin-top: var(--crisp-space-1-5); padding-inline-start: var(--crisp-linechart-yaxis-width); }
1130
+ & .crisp-linechart-xlabel { flex: 1; min-width: 0; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
1131
+ & .crisp-linechart-axis-title { margin-top: var(--crisp-space-1); padding-inline-start: var(--crisp-linechart-yaxis-width); text-align: center; font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
1132
+ }
1133
+
1134
+ .crisp-menu {
1135
+
1136
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans);
1137
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1138
+
1139
+ & .crisp-menu-content {
1140
+ position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1141
+ min-width: 200px; max-height: 360px; overflow-y: auto; padding: var(--crisp-space-1);
1142
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1143
+ box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3);
1144
+ transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1145
+ }
1146
+ & .crisp-menu-content[data-align="end"] { transform-origin: top right; }
1147
+ & .crisp-menu-content[data-up] { transform-origin: bottom left; }
1148
+ & .crisp-menu-content[data-up][data-align="end"] { transform-origin: bottom right; }
1149
+ & .crisp-menu-content { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1150
+
1151
+ & .crisp-menu-item {
1152
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; height: var(--crisp-size-menuRow); flex-shrink: 0;
1153
+ margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; border-radius: var(--crisp-radius-md);
1154
+ font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap;
1155
+ }
1156
+ & .crisp-menu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1157
+ & .crisp-menu-item:focus { outline: none; }
1158
+ & .crisp-menu-item:hover:not([data-disabled]), & .crisp-menu-item:focus-visible:not([data-disabled]), & .crisp-menu-item[data-highlighted]:not([data-disabled]) { background: var(--crisp-bg-raised); }
1159
+ & .crisp-menu-item[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1160
+ & .crisp-menu-item--danger { color: var(--crisp-bg-danger); }
1161
+ & .crisp-menu-item--danger svg { color: var(--crisp-bg-danger); }
1162
+ & .crisp-menu-item--danger:hover, & .crisp-menu-item--danger:focus-visible, & .crisp-menu-item--danger[data-highlighted] { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
1163
+ & .crisp-menu-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1164
+ & .crisp-menu-item-shortcut { flex-shrink: 0; margin-inline-start: var(--crisp-space-3); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); letter-spacing: 0.02em; }
1165
+ & .crisp-menu-item-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1166
+ & .crisp-menu-item-check--placeholder { width: 15px; }
1167
+
1168
+ & .crisp-menu-sep { height: 1px; flex-shrink: 0; border: none; margin: var(--crisp-space-1) calc(-1 * var(--crisp-space-1)); background: var(--crisp-border-subtle); }
1169
+ & .crisp-menu-label { padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1170
+
1171
+ }
1172
+
1173
+ @media (prefers-reduced-motion: reduce) {
1174
+ .crisp-menu, .crisp-menu * {
1175
+ animation-duration: 0.01ms !important;
1176
+ animation-iteration-count: 1 !important;
1177
+ transition-duration: 0.01ms !important;
1178
+ }
1179
+ }
1180
+
1181
+ .crisp-multiselect {
1182
+
1183
+ position: relative; display: inline-flex; width: 100%; font-family: var(--crisp-font-sans);
1184
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1185
+
1186
+ & .crisp-multiselect-trigger {
1187
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; min-width: 0; min-height: var(--crisp-size-menuRow);
1188
+ margin: 0; padding: var(--crisp-space-0-5) var(--crisp-space-1-5) var(--crisp-space-0-5) var(--crisp-space-2);
1189
+ border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
1190
+ font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer; text-align: start;
1191
+ transition: background-color .12s ease, box-shadow .12s ease;
1192
+ }
1193
+ & .crisp-multiselect-trigger:hover { background: var(--crisp-bg-raised); }
1194
+ & .crisp-multiselect-trigger[data-open], & .crisp-multiselect-trigger:focus-visible { outline: none; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); background: var(--crisp-bg-surface); }
1195
+ & .crisp-multiselect-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
1196
+ & .crisp-multiselect-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); }
1197
+ & .crisp-multiselect-placeholder { color: var(--crisp-fg-muted); }
1198
+ & .crisp-multiselect-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1199
+ & .crisp-multiselect-trigger[data-open] .crisp-multiselect-chevron { transform: rotate(180deg); }
1200
+
1201
+ & .crisp-multiselect-listbox {
1202
+ position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1203
+ max-height: 300px; overflow-y: auto; padding: var(--crisp-space-1);
1204
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1205
+ box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3);
1206
+ transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1207
+ }
1208
+ & .crisp-multiselect-listbox[data-up] { transform-origin: bottom left; }
1209
+ & .crisp-multiselect-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1210
+ & .crisp-multiselect-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-1)) calc(-1 * var(--crisp-space-1)) var(--crisp-space-1); padding: 0 var(--crisp-space-2-5); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
1211
+ & .crisp-multiselect-search svg { flex-shrink: 0; }
1212
+ & .crisp-multiselect-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
1213
+ & .crisp-multiselect-search input::placeholder { color: var(--crisp-fg-muted); }
1214
+ & .crisp-multiselect-option {
1215
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0;
1216
+ padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; cursor: pointer; text-align: start;
1217
+ }
1218
+ & .crisp-multiselect-option[data-highlighted] { background: var(--crisp-bg-raised); }
1219
+ & .crisp-multiselect-option-chip { flex: 0 1 auto; min-width: 0; overflow: hidden; }
1220
+ & .crisp-multiselect-check { flex-shrink: 0; margin-inline-start: auto; display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1.5px var(--crisp-border-default); color: transparent; }
1221
+ & .crisp-multiselect-option[aria-selected="true"] .crisp-multiselect-check { background: var(--crisp-bg-brand-solid); box-shadow: none; color: #fff; }
1222
+ & .crisp-multiselect-empty { padding: var(--crisp-space-3) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1223
+
1224
+ & .crisp-recordstable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
1225
+ & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); }
1226
+ & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); }
1227
+ & .crisp-recordstable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-warning) 82%, var(--crisp-fg-primary)); }
1228
+ & .crisp-recordstable-tag[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); }
1229
+ & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); }
1230
+ & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); }
1231
+ & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
1232
+
1233
+ }
1234
+
1235
+ @media (prefers-reduced-motion: reduce) {
1236
+ .crisp-multiselect, .crisp-multiselect * {
1237
+ animation-duration: 0.01ms !important;
1238
+ animation-iteration-count: 1 !important;
1239
+ transition-duration: 0.01ms !important;
1240
+ }
1241
+ }
1242
+
1243
+ .crisp-popover {
1244
+ display: contents; font-family: var(--crisp-font-sans);
1245
+ & .crisp-popover-content { position: fixed; z-index: 60; box-sizing: border-box; min-width: 200px; max-width: min(360px, 92vw); padding: var(--crisp-space-1); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover); color: var(--crisp-fg-primary); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); opacity: 1; transform: none; transition: opacity 0.08s ease, transform 0.08s ease; transform-origin: top left; @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1246
+ & .crisp-popover-content[data-align="end"] { transform-origin: top right; }
1247
+ & .crisp-popover-content[data-up] { transform-origin: bottom left; }
1248
+ }
1249
+
1250
+ @media (prefers-reduced-motion: reduce) {
1251
+ .crisp-popover, .crisp-popover * {
1252
+ animation-duration: 0.01ms !important;
1253
+ animation-iteration-count: 1 !important;
1254
+ transition-duration: 0.01ms !important;
1255
+ }
1256
+ }
1257
+
1258
+ .crisp-progress {
1259
+ display: block; box-sizing: border-box; height: 6px; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); overflow: hidden;
1260
+ & .crisp-progress-fill { display: block; height: 100%; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-brand-solid); transition: width 0.25s ease; }
1261
+ &[data-segmented] { display: flex; gap: var(--crisp-space-1); background: transparent; overflow: visible; }
1262
+ &[data-segmented] .crisp-progress-seg { flex: 1; height: 100%; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); transition: background 0.2s; }
1263
+ &[data-segmented] .crisp-progress-seg[data-filled] { background: var(--crisp-bg-brand-solid); }
1264
+ }
1265
+
1266
+ @media (prefers-reduced-motion: reduce) {
1267
+ .crisp-progress, .crisp-progress * {
1268
+ animation-duration: 0.01ms !important;
1269
+ animation-iteration-count: 1 !important;
1270
+ transition-duration: 0.01ms !important;
1271
+ }
1272
+ }
1273
+
1274
+ .crisp-quantitypicker {
1275
+
1276
+ display: inline-flex; box-sizing: border-box; width: fit-content;
1277
+ align-items: center; font-family: var(--crisp-font-sans);
1278
+ background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default);
1279
+
1280
+ &[data-invalid] { box-shadow: inset 0 0 0 2px var(--crisp-bg-danger); }
1281
+
1282
+ & .crisp-quantitypicker-button {
1283
+ display: inline-flex; flex-shrink: 0; box-sizing: border-box;
1284
+ align-items: center; justify-content: center;
1285
+ border: none; padding: 0; cursor: pointer;
1286
+ background: transparent; color: var(--crisp-fg-primary);
1287
+ transition: background-color .15s ease, outline-color .15s ease;
1288
+ outline: 2px solid transparent; outline-offset: 2px;
1289
+ }
1290
+ & .crisp-quantitypicker-button:focus-visible { outline-color: var(--crisp-stroke-focus-ring); }
1291
+ & .crisp-quantitypicker-button:not([data-disabled]):hover { background: var(--crisp-bg-raised); }
1292
+ & .crisp-quantitypicker-button[data-loading] { background: var(--crisp-bg-raised); }
1293
+ & .crisp-quantitypicker-button[data-disabled] { cursor: not-allowed; color: var(--crisp-fg-disabled); }
1294
+
1295
+ & .crisp-quantitypicker-value {
1296
+ display: grid; flex-grow: 1; flex-shrink: 0; box-sizing: border-box;
1297
+ align-items: center; justify-content: center;
1298
+ padding-inline: var(--crisp-space-2);
1299
+ font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary);
1300
+ }
1301
+ & .crisp-quantitypicker-value[data-disabled] { color: var(--crisp-fg-disabled); }
1302
+ & .crisp-quantitypicker-placeholder {
1303
+ grid-column: 1; grid-row: 1; visibility: hidden;
1304
+ font-variant-numeric: tabular-nums;
1305
+ }
1306
+ & .crisp-quantitypicker-text {
1307
+ grid-column: 1; grid-row: 1; text-align: center;
1308
+ font-variant-numeric: tabular-nums;
1309
+ }
1310
+
1311
+ & .crisp-quantitypicker-divider {
1312
+ flex-shrink: 0; width: 1px; height: var(--crisp-space-4);
1313
+ background: var(--crisp-border-subtle);
1314
+ }
1315
+
1316
+ }
1317
+ .crisp-quantitypicker--size_small {
1318
+
1319
+ height: 36px; border-radius: var(--crisp-radius-md);
1320
+ & .crisp-quantitypicker-button { width: 36px; height: 36px; border-radius: var(--crisp-radius-md); }
1321
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1322
+
1323
+ }
1324
+ .crisp-quantitypicker--size_medium {
1325
+
1326
+ height: 40px; border-radius: var(--crisp-radius-md);
1327
+ & .crisp-quantitypicker-button { width: 40px; height: 40px; border-radius: var(--crisp-radius-md); }
1328
+ & .crisp-quantitypicker-value { font-size: var(--crisp-text-xl); line-height: 22px; }
1329
+
1330
+ }
1331
+ .crisp-quantitypicker--size_large {
1332
+
1333
+ height: 52px; border-radius: var(--crisp-radius-xl);
1334
+ & .crisp-quantitypicker-button { width: 52px; height: 52px; border-radius: var(--crisp-radius-xl); }
1335
+ & .crisp-quantitypicker-value { font-size: 18px; line-height: 24px; }
1336
+
1337
+ }
1338
+ .crisp-quantitypicker--fill_true {
1339
+ width: auto; flex-grow: 1;
1340
+ }
1341
+ .crisp-quantitypicker--fill_false {
1342
+
1343
+ }
1344
+
1345
+ @media (prefers-reduced-motion: reduce) {
1346
+ .crisp-quantitypicker, .crisp-quantitypicker * {
1347
+ animation-duration: 0.01ms !important;
1348
+ animation-iteration-count: 1 !important;
1349
+ transition-duration: 0.01ms !important;
1350
+ }
1351
+ }
1352
+
1353
+ .crisp-radiogroup {
1354
+
1355
+ display: flex; flex-direction: column; gap: var(--crisp-space-1); font-family: var(--crisp-font-sans);
1356
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1357
+
1358
+ & .crisp-radio { display: flex; align-items: center; gap: var(--crisp-space-2); margin: 0; padding: var(--crisp-space-1) var(--crisp-space-1); border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; }
1359
+ & .crisp-radio:disabled { opacity: 0.5; cursor: not-allowed; }
1360
+ & .crisp-radio:focus-visible { outline: none; }
1361
+ & .crisp-radio-dot { position: relative; flex-shrink: 0; width: 16px; height: 16px; border-radius: var(--crisp-radius-full); box-shadow: inset 0 0 0 1.5px var(--crisp-border-default); transition: box-shadow .12s ease; }
1362
+ & .crisp-radio:hover .crisp-radio-dot { box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--crisp-fg-primary) 40%, transparent); }
1363
+ & .crisp-radio[data-checked] .crisp-radio-dot { box-shadow: inset 0 0 0 1.5px var(--crisp-bg-brand-solid); }
1364
+ & .crisp-radio[data-checked] .crisp-radio-dot::after { content: ""; position: absolute; inset: 0; margin: auto; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-brand-solid); }
1365
+ & .crisp-radio:focus-visible .crisp-radio-dot { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1366
+ & .crisp-radio-label { min-width: 0; }
1367
+
1368
+ &[data-variant="card"] { flex-direction: row; flex-wrap: wrap; gap: var(--crisp-space-3); }
1369
+ &[data-variant="card"] .crisp-radio { flex: 1 1 150px; min-width: 150px; flex-direction: column; align-items: stretch; gap: 0; padding: 0; border-radius: var(--crisp-radius-2xl); box-shadow: inset 0 0 0 1px var(--crisp-border-default); overflow: hidden; transition: box-shadow .12s ease; }
1370
+ &[data-variant="card"] .crisp-radio:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); }
1371
+ &[data-variant="card"] .crisp-radio[data-checked] { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1372
+ &[data-variant="card"] .crisp-radio-preview { flex: 1; min-height: 0; background: var(--crisp-bg-raised); }
1373
+ &[data-variant="card"] .crisp-radio-cardfoot { display: flex; align-items: center; gap: var(--crisp-space-2); padding: var(--crisp-space-2) var(--crisp-space-2-5); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); }
1374
+
1375
+ }
1376
+
1377
+ @media (prefers-reduced-motion: reduce) {
1378
+ .crisp-radiogroup, .crisp-radiogroup * {
1379
+ animation-duration: 0.01ms !important;
1380
+ animation-iteration-count: 1 !important;
1381
+ transition-duration: 0.01ms !important;
1382
+ }
1383
+ }
1384
+
1385
+ .crisp-resizablepanel {
1386
+
1387
+ position: relative; display: flex; height: 100%;
1388
+ & .crisp-resizablepanel-spacer { flex: 0 0 auto; height: 100%; transition: width 0.14s; }
1389
+ & .crisp-resizablepanel-panel { position: absolute; top: 0; bottom: 0; box-sizing: border-box; overflow: hidden; background: var(--crisp-bg-surface); }
1390
+ & .crisp-resizablepanel-panel[data-side="left"] { left: 0; }
1391
+ & .crisp-resizablepanel-panel[data-side="right"] { right: 0; }
1392
+
1393
+ /* docked */
1394
+ & .crisp-resizablepanel-panel[data-floating="false"] { border-radius: 0; box-shadow: none; }
1395
+ & .crisp-resizablepanel-panel[data-floating="false"][data-side="left"] { border-inline-end: 1px solid var(--crisp-border-subtle); }
1396
+ & .crisp-resizablepanel-panel[data-floating="false"][data-side="right"] { border-inline-start: 1px solid var(--crisp-border-subtle); }
1397
+
1398
+ /* floating — position: fixed, 8px gutter, r10, the measured floating elevation.
1399
+ Rest is transform: none (Lesson 27); the off-canvas value is the @starting-style enter only. */
1400
+ & .crisp-resizablepanel-panel[data-floating="true"] { position: fixed; top: var(--crisp-space-2); bottom: var(--crisp-space-2); border-inline-end: none; border-inline-start: none; border-radius: 10px; box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); transform: none; transition: transform 0.14s, padding 0.14s; }
1401
+ & .crisp-resizablepanel-panel[data-floating="true"][data-side="left"] { padding: var(--crisp-space-2) 0 var(--crisp-space-2) var(--crisp-space-2); @starting-style { transform: translateX(calc(-100% - var(--crisp-space-2))); } }
1402
+ & .crisp-resizablepanel-panel[data-floating="true"][data-side="right"] { padding: var(--crisp-space-2) var(--crisp-space-2) var(--crisp-space-2) 0; @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); } }
1403
+
1404
+ & .crisp-resizablepanel-inner { height: 100%; opacity: 1; }
1405
+ & .crisp-resizablepanel-panel[data-floating="true"] .crisp-resizablepanel-inner { opacity: 1; transition: opacity 0.14s; @starting-style { opacity: 0; } }
1406
+
1407
+ /* handle — variant "panel" (default): a 10px hit target, its ::before the
1408
+ only visible divider (1px rest -> 2px on hover/drag, brand-solid). */
1409
+ & .crisp-resizablepanel-handle { position: absolute; top: 0; width: 10px; height: 100%; z-index: 2; cursor: col-resize; background: transparent; touch-action: none; }
1410
+ & .crisp-resizablepanel-handle[data-side="left"] { right: 0; }
1411
+ & .crisp-resizablepanel-handle[data-side="right"] { left: 0; }
1412
+ & .crisp-resizablepanel-handle::before { content: ""; position: absolute; top: 0; width: 1px; height: 100%; background: var(--crisp-border-subtle); transition: background-color 0.16s, height 0.16s; }
1413
+ & .crisp-resizablepanel-handle[data-side="left"]::before { right: 0; }
1414
+ & .crisp-resizablepanel-handle[data-side="right"]::before { left: 0; }
1415
+ & .crisp-resizablepanel-handle:hover::before, & .crisp-resizablepanel-handle[data-dragging="true"]::before { width: 2px; background: var(--crisp-bg-brand-solid); }
1416
+
1417
+ /* handle — variant "column": a wider 7px hit target straddling a 1px
1418
+ divider (table column edges), with a real 3px inner bar whose opacity
1419
+ comes in on a 100ms DELAY — distinct from the panel variant's instant
1420
+ ::before swap. */
1421
+ /* .crisp-resizablepanel-handle.crisp-resizablepanel-handle--column (both classes) to
1422
+ out-specificity the base [data-side] left/right rules above, which
1423
+ otherwise tie-break by source order alone and would win. */
1424
+ & .crisp-resizablepanel-handle.crisp-resizablepanel-handle--column { display: flex; align-items: center; justify-content: center; width: 7px; left: -3px; right: -3px; z-index: 1; cursor: col-resize; }
1425
+ & .crisp-resizablepanel-handle--column::before { content: none; }
1426
+ & .crisp-resizablepanel-handle-inner { width: 3px; height: 100%; border-radius: 3px; background: var(--crisp-bg-brand-solid); opacity: 0; transition: opacity 0.1s 0.1s; }
1427
+ & .crisp-resizablepanel-handle--column:hover .crisp-resizablepanel-handle-inner, & .crisp-resizablepanel-handle--column[data-dragging="true"] .crisp-resizablepanel-handle-inner { opacity: 1; }
1428
+
1429
+ }
1430
+
1431
+ @media (prefers-reduced-motion: reduce) {
1432
+ .crisp-resizablepanel, .crisp-resizablepanel * {
1433
+ animation-duration: 0.01ms !important;
1434
+ animation-iteration-count: 1 !important;
1435
+ transition-duration: 0.01ms !important;
1436
+ }
1437
+ }
1438
+
1439
+ .crisp-segmented {
1440
+ position: relative; display: inline-flex; align-items: center; gap: var(--crisp-space-0-5); box-sizing: border-box; padding: var(--crisp-space-0-5); border-radius: var(--crisp-radius-lg); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); font-family: var(--crisp-font-sans);
1441
+ & .crisp-segmented-thumb { position: absolute; top: var(--crisp-space-0-5); left: 0; height: 26px; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle), 0 1px 2px rgba(0,0,0,0.06); pointer-events: none; z-index: 0; transition: transform .2s cubic-bezier(.4,0,.2,1), width .2s cubic-bezier(.4,0,.2,1); }
1442
+ & .crisp-segmented-item { position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); height: 26px; padding: 0 var(--crisp-space-2-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); white-space: nowrap; cursor: pointer; transition: color 0.15s ease; }
1443
+ & .crisp-segmented-item svg { flex-shrink: 0; }
1444
+ & .crisp-segmented-item:hover { color: var(--crisp-fg-primary); }
1445
+ & .crisp-segmented-item[data-selected] { color: var(--crisp-fg-primary); }
1446
+ & .crisp-segmented-item[disabled] { opacity: 0.4; cursor: default; }
1447
+ & .crisp-segmented-item--icon { width: 26px; padding: 0; }
1448
+ }
1449
+
1450
+ @media (prefers-reduced-motion: reduce) {
1451
+ .crisp-segmented, .crisp-segmented * {
1452
+ animation-duration: 0.01ms !important;
1453
+ animation-iteration-count: 1 !important;
1454
+ transition-duration: 0.01ms !important;
1455
+ }
1456
+ }
1457
+
1458
+ .crisp-select {
1459
+
1460
+ position: relative; display: inline-flex; font-family: var(--crisp-font-sans);
1461
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1462
+
1463
+ & .crisp-select-trigger {
1464
+ box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5);
1465
+ height: var(--crisp-size-menuRow); width: 100%; min-width: 0; margin: 0; padding: 0 var(--crisp-space-1-5) 0 var(--crisp-space-2);
1466
+ border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent);
1467
+ font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer;
1468
+ transition: background-color .12s ease, box-shadow .12s ease;
1469
+ }
1470
+ & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); }
1471
+ & .crisp-select-trigger[data-open], & .crisp-select-trigger:focus-visible { outline: none; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); background: var(--crisp-bg-surface); }
1472
+ & .crisp-select-trigger:disabled { opacity: 0.5; cursor: not-allowed; }
1473
+ & .crisp-select-value { flex: 1; min-width: 0; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: start; }
1474
+ & .crisp-select-placeholder { color: var(--crisp-fg-muted); }
1475
+ & .crisp-select-chevron { flex-shrink: 0; color: var(--crisp-fg-muted); transition: transform .15s ease; }
1476
+ & .crisp-select-trigger[data-open] .crisp-select-chevron { transform: rotate(180deg); }
1477
+
1478
+ & .crisp-select-listbox {
1479
+ position: fixed; z-index: 60; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--crisp-space-px);
1480
+ max-height: 280px; overflow-y: auto; padding: var(--crisp-space-1);
1481
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-popover);
1482
+ box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3);
1483
+ transform-origin: top left; opacity: 1; transform: none; transition: opacity .08s ease, transform .08s ease;
1484
+ }
1485
+ & .crisp-select-listbox[data-up] { transform-origin: bottom; }
1486
+ & .crisp-select-listbox { @starting-style { opacity: 0; transform: scale(0.97) translateY(-1px); } }
1487
+ & .crisp-select-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 34px; flex-shrink: 0; margin: calc(-1 * var(--crisp-space-1)) calc(-1 * var(--crisp-space-1)) var(--crisp-space-1); padding: 0 var(--crisp-space-2-5); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
1488
+ & .crisp-select-search svg { flex-shrink: 0; }
1489
+ & .crisp-select-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
1490
+ & .crisp-select-search input::placeholder { color: var(--crisp-fg-muted); }
1491
+ & .crisp-select-empty { padding: var(--crisp-space-3) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1492
+ & .crisp-select-option {
1493
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-menuRow); flex-shrink: 0;
1494
+ padding: 0 var(--crisp-space-2); margin: 0; border: none; background: none; border-radius: var(--crisp-radius-md);
1495
+ font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; white-space: nowrap;
1496
+ }
1497
+ & .crisp-select-option[data-highlighted] { background: var(--crisp-bg-raised); }
1498
+ & .crisp-select-option[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1499
+ & .crisp-select-option-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); }
1500
+ & .crisp-select-option-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1501
+ & .crisp-select-option-check { flex-shrink: 0; color: var(--crisp-bg-brand-solid); }
1502
+
1503
+ }
1504
+ .crisp-select--variant_default {
1505
+
1506
+ }
1507
+ .crisp-select--variant_ghost {
1508
+
1509
+ & .crisp-select-trigger { background: transparent; box-shadow: none; }
1510
+ & .crisp-select-trigger:hover { background: var(--crisp-bg-raised); box-shadow: none; }
1511
+ & .crisp-select-trigger[data-open], & .crisp-select-trigger:focus-visible { background: transparent; box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
1512
+
1513
+ }
1514
+ .crisp-select--width_full {
1515
+ width: 100%;
1516
+ }
1517
+ .crisp-select--width_auto {
1518
+ width: auto;
1519
+ }
1520
+
1521
+ @media (prefers-reduced-motion: reduce) {
1522
+ .crisp-select, .crisp-select * {
1523
+ animation-duration: 0.01ms !important;
1524
+ animation-iteration-count: 1 !important;
1525
+ transition-duration: 0.01ms !important;
1526
+ }
1527
+ }
1528
+
1529
+ @keyframes crisp-skeleton { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
1530
+ .crisp-skeleton {
1531
+ display: block; background: color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); border-radius: var(--crisp-radius-md); animation: crisp-skeleton 1.4s ease-in-out infinite;
1532
+ &[data-circle] { border-radius: var(--crisp-radius-full); }
1533
+ }
1534
+
1535
+ @media (prefers-reduced-motion: reduce) {
1536
+ .crisp-skeleton, .crisp-skeleton * {
1537
+ animation-duration: 0.01ms !important;
1538
+ animation-iteration-count: 1 !important;
1539
+ transition-duration: 0.01ms !important;
1540
+ }
1541
+ }
1542
+
1543
+ .crisp-slider {
1544
+
1545
+ display: flex; flex-direction: column; align-items: stretch;
1546
+ width: 100%; min-width: 0; gap: var(--crisp-space-0-5);
1547
+ font-family: var(--crisp-font-sans); user-select: none; touch-action: none;
1548
+
1549
+ /* the position words ("minimum"/"maximum") that ARIA concatenates onto a
1550
+ thumb's name — read, never drawn */
1551
+ & .crisp-slider-thumblabel {
1552
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
1553
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
1554
+ }
1555
+ & .crisp-slider-control { position: relative; height: 26px; display: flex; align-items: center; }
1556
+
1557
+ & .crisp-slider-track {
1558
+ position: relative; flex-grow: 1; height: var(--crisp-space-1);
1559
+ border-radius: var(--crisp-radius-full); background: var(--crisp-bg-neutral-weak);
1560
+ overflow: hidden;
1561
+ }
1562
+
1563
+ & .crisp-slider-range { position: absolute; height: 100%; background: var(--crisp-bg-brand-solid); }
1564
+ & .crisp-slider-range[data-dir="ltr"] { left: var(--range-start); right: var(--range-end); }
1565
+ & .crisp-slider-range[data-dir="rtl"] { right: var(--range-start); left: var(--range-end); }
1566
+
1567
+ & .crisp-slider-thumb {
1568
+ position: absolute; top: 50%;
1569
+ width: var(--crisp-space-5); height: var(--crisp-space-5);
1570
+ transform: translate(-50%, -50%);
1571
+ border: none; background: none; padding: 0;
1572
+ }
1573
+ & .crisp-slider-thumb[data-dir="ltr"] { left: calc(var(--thumb-position) * 1% + var(--thumb-offset)); }
1574
+ & .crisp-slider-thumb[data-dir="rtl"] { right: calc(var(--thumb-position) * 1% + var(--thumb-offset)); }
1575
+ & .crisp-slider-thumb::after {
1576
+ content: ""; position: absolute; inset: 0;
1577
+ border-radius: var(--crisp-radius-full); background: #fff; box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
1578
+ outline: 2px solid transparent; outline-offset: 2px;
1579
+ transition: transform .2s ease, outline-color .2s ease;
1580
+ cursor: grab;
1581
+ }
1582
+ & .crisp-slider-thumb[data-thumb-dragging]::after { transform: scale(1.2); cursor: grabbing; }
1583
+ & .crisp-slider-thumb:focus { outline: none; }
1584
+ & .crisp-slider-thumb:focus-visible::after { outline-color: var(--crisp-stroke-focus-ring); }
1585
+
1586
+ &[data-disabled] { cursor: not-allowed; }
1587
+ &[data-disabled] .crisp-slider-range { background: var(--crisp-fg-disabled); }
1588
+ &[data-disabled] .crisp-slider-thumb::after { cursor: not-allowed; }
1589
+
1590
+ }
1591
+
1592
+ @media (prefers-reduced-motion: reduce) {
1593
+ .crisp-slider, .crisp-slider * {
1594
+ animation-duration: 0.01ms !important;
1595
+ animation-iteration-count: 1 !important;
1596
+ transition-duration: 0.01ms !important;
1597
+ }
1598
+ }
1599
+
1600
+ @keyframes crisp-spin { to { transform: rotate(360deg); } }
1601
+ .crisp-spinner {
1602
+ display: inline-block; box-sizing: border-box; width: 16px; height: 16px; border-radius: var(--crisp-radius-full); border: 2px solid color-mix(in srgb, var(--crisp-fg-primary) 15%, transparent); border-top-color: var(--crisp-fg-muted); animation: crisp-spin 0.6s linear infinite;
1603
+ }
1604
+
1605
+ @media (prefers-reduced-motion: reduce) {
1606
+ .crisp-spinner, .crisp-spinner * {
1607
+ animation-duration: 0.01ms !important;
1608
+ animation-iteration-count: 1 !important;
1609
+ transition-duration: 0.01ms !important;
1610
+ }
1611
+ }
1612
+
1613
+ .crisp-stagebar {
1614
+ display: flex; align-items: center; gap: var(--crisp-space-0-5); width: 100%; height: 6px; font-family: var(--crisp-font-sans);
1615
+ & .crisp-stagebar-seg { flex: 1; height: 100%; border-radius: var(--crisp-radius-full); transition: background 0.2s ease; }
1616
+ }
1617
+
1618
+ @media (prefers-reduced-motion: reduce) {
1619
+ .crisp-stagebar, .crisp-stagebar * {
1620
+ animation-duration: 0.01ms !important;
1621
+ animation-iteration-count: 1 !important;
1622
+ transition-duration: 0.01ms !important;
1623
+ }
1624
+ }
1625
+
1626
+ .crisp-statcard {
1627
+ display: flex; flex-direction: column; gap: var(--crisp-space-1-5); box-sizing: border-box; font-family: var(--crisp-font-sans);
1628
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1629
+ & .crisp-statcard-label { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1630
+ & .crisp-statcard-label svg { color: var(--crisp-fg-muted); }
1631
+ & .crisp-statcard-value { font-size: 28px; line-height: 32px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.4px; color: var(--crisp-fg-primary); }
1632
+ & .crisp-statcard-foot { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
1633
+ & .crisp-statcard-delta { display: inline-flex; align-items: center; gap: 2px; height: 20px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); }
1634
+ & .crisp-statcard-delta svg { flex-shrink: 0; }
1635
+ & .crisp-statcard-delta[data-trend="up"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 80%, var(--crisp-fg-primary)); }
1636
+ & .crisp-statcard-delta[data-trend="down"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); }
1637
+ & .crisp-statcard-delta[data-trend="flat"] { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-muted); }
1638
+ }
1639
+ .crisp-statcard--card_true {
1640
+ padding: var(--crisp-space-4); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle);
1641
+ }
1642
+ .crisp-statcard--card_false {
1643
+
1644
+ }
1645
+
1646
+ .crisp-switch {
1647
+
1648
+ display: inline-flex; align-items: center; flex-shrink: 0; width: 24px; height: 16px; padding: 0; margin: 0;
1649
+ border: none; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent);
1650
+ cursor: pointer; transition: background-color .2s ease; -webkit-tap-highlight-color: transparent;
1651
+ & .crisp-switch-thumb { width: 12px; height: 12px; margin: 0 2px; border-radius: var(--crisp-radius-full); background: #fff; transition: transform .2s ease; }
1652
+ &[data-checked] { background: var(--crisp-bg-brand-solid); }
1653
+ &[data-checked] .crisp-switch-thumb { transform: translateX(8px); }
1654
+ &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
1655
+ &:disabled { opacity: 0.5; cursor: not-allowed; }
1656
+
1657
+ }
1658
+
1659
+ @media (prefers-reduced-motion: reduce) {
1660
+ .crisp-switch, .crisp-switch * {
1661
+ animation-duration: 0.01ms !important;
1662
+ animation-iteration-count: 1 !important;
1663
+ transition-duration: 0.01ms !important;
1664
+ }
1665
+ }
1666
+
1667
+ .crisp-table {
1668
+ display: block; box-sizing: border-box; background: var(--crisp-bg-surface);
1669
+ & .crisp-table-scroll { overflow-x: auto; }
1670
+ & table { width: 100%; border-collapse: separate; border-spacing: 0; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
1671
+ & th, & td { position: relative; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); border-bottom: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); text-align: start; vertical-align: middle; white-space: nowrap; overflow: hidden; }
1672
+ & th { height: var(--crisp-size-tableHeader); background: var(--crisp-bg-surface); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); user-select: none; }
1673
+ & td { color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); }
1674
+ & th:last-child, & td:last-child { border-inline-end: none; }
1675
+ & tbody tr:last-child td { border-bottom: none; }
1676
+ & tfoot td { border-top: 1px solid var(--crisp-border-subtle); border-bottom: none; font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1677
+ & caption { padding: var(--crisp-space-2) var(--crisp-space-2); text-align: start; font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); caption-side: bottom; }
1678
+ & td[data-align="right"], & th[data-align="right"] { text-align: end; }
1679
+ & td[data-align="center"], & th[data-align="center"] { text-align: center; }
1680
+ }
1681
+ .crisp-table--interactive_true {
1682
+ & tbody tr { transition: background-color .12s; } & tbody tr:hover td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
1683
+ }
1684
+ .crisp-table--interactive_false {
1685
+
1686
+ }
1687
+ .crisp-table--surface_card {
1688
+ border: 1px solid var(--crisp-border-subtle); border-radius: var(--crisp-radius-xl); overflow: hidden;
1689
+ }
1690
+ .crisp-table--surface_bleed {
1691
+ border: none; border-radius: 0;
1692
+ }
1693
+
1694
+ @media (prefers-reduced-motion: reduce) {
1695
+ .crisp-table, .crisp-table * {
1696
+ animation-duration: 0.01ms !important;
1697
+ animation-iteration-count: 1 !important;
1698
+ transition-duration: 0.01ms !important;
1699
+ }
1700
+ }
1701
+
1702
+ .crisp-tabletoolbar {
1703
+
1704
+ display: contents; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1705
+ & * { box-sizing: border-box; }
1706
+ & .crisp-tabletoolbar-toolbar { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding: 0 var(--crisp-space-3) var(--crisp-space-2); }
1707
+ & .crisp-tabletoolbar-search { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
1708
+ & .crisp-tabletoolbar-search svg { flex-shrink: 0; }
1709
+ & .crisp-tabletoolbar-search input { border: none; outline: none; background: transparent; font-family: inherit; font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); width: 180px; }
1710
+ & .crisp-tabletoolbar-search input::placeholder { color: var(--crisp-fg-muted); }
1711
+ & .crisp-tabletoolbar-tool { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
1712
+ & .crisp-tabletoolbar-tool:hover { background: var(--crisp-bg-raised); }
1713
+ & .crisp-tabletoolbar-tool svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1714
+ & .crisp-tabletoolbar-tool--active { background: var(--crisp-bg-raised); }
1715
+ & .crisp-tabletoolbar-tool--ghost { box-shadow: none; background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); color: var(--crisp-fg-muted); }
1716
+ & .crisp-tabletoolbar-tool--ghost:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
1717
+ & .crisp-tabletoolbar-toolgroup { position: relative; display: inline-flex; }
1718
+ & .crisp-tabletoolbar-menu { position: absolute; top: calc(100% + var(--crisp-space-1)); left: 0; z-index: 30; min-width: 232px; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-lg); background: var(--crisp-bg-popover); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); display: flex; flex-direction: column; gap: var(--crisp-space-px); transform-origin: top; opacity: 1; transform: none; transition: opacity .13s ease, transform .13s ease; }
1719
+ & .crisp-tabletoolbar-menu { @starting-style { opacity: 0; transform: scale(0.96); } }
1720
+ & .crisp-tabletoolbar-menu-head { padding: var(--crisp-space-1) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1721
+ & .crisp-tabletoolbar-sortpop { min-width: 460px; overflow: visible; padding: var(--crisp-space-1-5); gap: var(--crisp-space-1); }
1722
+ & .crisp-tabletoolbar-sort-empty { padding: var(--crisp-space-1) var(--crisp-space-1) var(--crisp-space-2); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1723
+ & .crisp-tabletoolbar-sort-row { display: flex; align-items: center; gap: var(--crisp-space-1-5); }
1724
+ & .crisp-tabletoolbar-sort-grip { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 28px; flex-shrink: 0; margin-right: calc(-1 * var(--crisp-space-1)); padding: 0; border: none; background: none; color: var(--crisp-fg-muted); cursor: grab; }
1725
+ & .crisp-tabletoolbar-sort-grip:active { cursor: grabbing; }
1726
+ & .crisp-tabletoolbar-sort-grip:hover { color: var(--crisp-fg-primary); }
1727
+ & .crisp-tabletoolbar-sort-optlabel { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
1728
+ & .crisp-tabletoolbar-sort-optlabel svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1729
+ & .crisp-tabletoolbar-sort-field { flex: 1; min-width: 0; }
1730
+ & .crisp-tabletoolbar-sort-dir { width: 136px; flex-shrink: 0; }
1731
+ & .crisp-tabletoolbar-sort-field .crisp-select-trigger, & .crisp-tabletoolbar-sort-dir .crisp-select-trigger { height: 28px; padding-right: var(--crisp-space-1); }
1732
+ & .crisp-tabletoolbar-sort-remove { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); cursor: pointer; transition: background-color .12s, color .12s; }
1733
+ & .crisp-tabletoolbar-sort-remove:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
1734
+ & .crisp-tabletoolbar-sort-addrow { display: flex; padding: var(--crisp-space-0-5) 0; }
1735
+ & .crisp-tabletoolbar-sort-add { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-primary); cursor: pointer; transition: background-color .12s; }
1736
+ & .crisp-tabletoolbar-sort-add:hover { background: var(--crisp-bg-raised); }
1737
+ & .crisp-tabletoolbar-sort-add svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1738
+ & .crisp-tabletoolbar-sort-foot { display: flex; padding: var(--crisp-space-1-5) var(--crisp-space-1) var(--crisp-space-0-5); }
1739
+ & .crisp-tabletoolbar-sort-learn { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-lg); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); text-decoration: none; }
1740
+ & .crisp-tabletoolbar-sort-learn svg { flex-shrink: 0; }
1741
+ & .crisp-tabletoolbar-sort-learn:hover { color: var(--crisp-fg-primary); }
1742
+ & .crisp-tabletoolbar-menu-item { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: left; cursor: pointer; }
1743
+ & .crisp-tabletoolbar-menu-item:hover { background: var(--crisp-bg-raised); }
1744
+ & .crisp-tabletoolbar-menu-item:disabled { opacity: 0.4; cursor: default; }
1745
+ & .crisp-tabletoolbar-menu-item:disabled:hover { background: none; }
1746
+ & .crisp-tabletoolbar-menu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
1747
+ & .crisp-tabletoolbar-menu-item[data-on] svg { color: var(--crisp-bg-brand-solid); }
1748
+ & .crisp-tabletoolbar-menu-item .crisp-tabletoolbar-menu-check { margin-left: auto; }
1749
+ & .crisp-tabletoolbar-menu-input { height: var(--crisp-size-row); margin: var(--crisp-space-0-5); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); background: var(--crisp-bg-surface); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); outline: none; }
1750
+ & .crisp-tabletoolbar-menu-sep { height: 1px; background: var(--crisp-border-subtle); margin: var(--crisp-space-0-5) 0; }
1751
+ & .crisp-tabletoolbar-menu--up { top: auto; bottom: calc(100% + var(--crisp-space-1)); transform-origin: bottom; }
1752
+ & .crisp-tabletoolbar-menu--right { left: auto; right: 0; }
1753
+ & .crisp-tabletoolbar-menu--fixed { position: fixed; top: auto; left: auto; z-index: 40; }
1754
+ & .crisp-tabletoolbar-menu--hdr { min-width: 200px; }
1755
+ & .crisp-tabletoolbar-menu-item--danger { color: var(--crisp-bg-danger); }
1756
+ & .crisp-tabletoolbar-menu-item--danger svg { color: var(--crisp-bg-danger); }
1757
+ & .crisp-tabletoolbar-menu-item--danger:hover { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
1758
+ & .crisp-tabletoolbar-menu-check { margin-left: auto; color: var(--crisp-bg-brand-solid); }
1759
+ & .crisp-tabletoolbar-fchip { display: inline-flex; align-items: center; height: var(--crisp-size-row); padding-right: var(--crisp-space-1); border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-default); background: var(--crisp-bg-surface); font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); white-space: nowrap; }
1760
+ & .crisp-tabletoolbar-fchip-main { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 100%; margin: 0; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-2); border: none; background: none; font-family: inherit; font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); cursor: pointer; }
1761
+ & .crisp-tabletoolbar-fchip-field { font-weight: var(--crisp-weight-medium); }
1762
+ & .crisp-tabletoolbar-fchip-op { color: var(--crisp-fg-muted); }
1763
+ & .crisp-tabletoolbar-fchip-val { font-weight: var(--crisp-weight-medium); max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
1764
+ & .crisp-tabletoolbar-fchip-x { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); cursor: pointer; }
1765
+ & .crisp-tabletoolbar-fchip-x:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 10%, transparent); color: var(--crisp-fg-primary); }
1766
+ & .crisp-tabletoolbar-spacer { flex: 1; }
1767
+ & .crisp-tabletoolbar-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1768
+ & .crisp-tabletoolbar-new { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
1769
+ & .crisp-tabletoolbar-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
1770
+
1771
+ }
1772
+
1773
+ @media (prefers-reduced-motion: reduce) {
1774
+ .crisp-tabletoolbar, .crisp-tabletoolbar * {
1775
+ animation-duration: 0.01ms !important;
1776
+ animation-iteration-count: 1 !important;
1777
+ transition-duration: 0.01ms !important;
1778
+ }
1779
+ }
1780
+
1781
+ .crisp-tabs {
1782
+
1783
+ display: flex; flex-direction: column; min-height: 0; font-family: var(--crisp-font-sans);
1784
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1785
+
1786
+ & .crisp-tabs-list { position: relative; display: flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); flex-shrink: 0; }
1787
+ & .crisp-tabs-leading { display: inline-flex; align-items: center; margin-inline-end: var(--crisp-space-1); }
1788
+ & .crisp-tabs-tab { position: relative; display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; box-shadow: inset 0 0 0 1px transparent; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: var(--crisp-fg-muted); cursor: pointer; white-space: nowrap; transition: color .12s ease, background-color .12s ease, box-shadow .12s ease; }
1789
+ & .crisp-tabs-tab svg { flex-shrink: 0; opacity: 0.85; }
1790
+ & .crisp-tabs-tab:hover:not([data-selected]) { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-primary); }
1791
+ & .crisp-tabs-tab[data-selected] { color: var(--crisp-fg-primary); background: var(--crisp-bg-subtle); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
1792
+ & .crisp-tabs-tab:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
1793
+ & .crisp-tabs-tab-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
1794
+ & .crisp-tabs-tab[data-selected] .crisp-tabs-tab-badge { color: var(--crisp-fg-primary); }
1795
+ & .crisp-tabs-indicator { position: absolute; bottom: calc(-1 * var(--crisp-space-2)); left: 0; height: 1px; background: var(--crisp-fg-primary); border-radius: 2px 2px 0 0; transition: transform .2s cubic-bezier(.4,0,.2,1), width .2s cubic-bezier(.4,0,.2,1); pointer-events: none; }
1796
+ & .crisp-tabs-panel { flex: 1; min-height: 0; }
1797
+ & .crisp-tabs-panel:focus-visible { outline: none; }
1798
+
1799
+ }
1800
+
1801
+ @media (prefers-reduced-motion: reduce) {
1802
+ .crisp-tabs, .crisp-tabs * {
1803
+ animation-duration: 0.01ms !important;
1804
+ animation-iteration-count: 1 !important;
1805
+ transition-duration: 0.01ms !important;
1806
+ }
1807
+ }
1808
+
1809
+ .crisp-textarea {
1810
+
1811
+ position: relative; display: block; width: 100%; font-family: var(--crisp-font-sans);
1812
+
1813
+ & .crisp-textarea-field {
1814
+ box-sizing: border-box; display: block; width: 100%; min-height: 80px; resize: vertical;
1815
+ margin: 0; padding: var(--crisp-space-1-5) var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md);
1816
+ background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
1817
+ font-family: inherit; font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary);
1818
+ outline: none; transition: box-shadow .15s ease;
1819
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1820
+ }
1821
+ & .crisp-textarea-field::placeholder { color: var(--crisp-fg-muted); }
1822
+ & .crisp-textarea-field:disabled { opacity: 0.5; cursor: not-allowed; }
1823
+
1824
+ /* seed-design's focus treatment, same as Input: a 2px ring on an ::after
1825
+ overlay that is present-but-transparent at rest, so focusing never
1826
+ shifts the box, animating only its colour. */
1827
+ & .crisp-textarea-wrap { position: relative; display: block; }
1828
+ & .crisp-textarea-wrap::after {
1829
+ content: ""; position: absolute; inset: 0; border-radius: var(--crisp-radius-md);
1830
+ border: 2px solid transparent; transition: border-color .1s ease;
1831
+ pointer-events: none;
1832
+ }
1833
+ & .crisp-textarea-wrap:focus-within::after { border-color: var(--crisp-stroke-field-focus); }
1834
+ &[data-invalid] .crisp-textarea-wrap::after { border-color: var(--crisp-bg-danger); }
1835
+ &[data-invalid] .crisp-textarea-wrap:focus-within::after { border-color: var(--crisp-bg-danger); }
1836
+ &[data-counted] .crisp-textarea-field { padding-bottom: var(--crisp-space-5); }
1837
+ & .crisp-textarea-count { position: absolute; inset-inline-end: var(--crisp-space-2-5); bottom: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); pointer-events: none; }
1838
+ & .crisp-textarea-count[data-over] { color: var(--crisp-bg-danger); }
1839
+
1840
+ }
1841
+
1842
+ @media (prefers-reduced-motion: reduce) {
1843
+ .crisp-textarea, .crisp-textarea * {
1844
+ animation-duration: 0.01ms !important;
1845
+ animation-iteration-count: 1 !important;
1846
+ transition-duration: 0.01ms !important;
1847
+ }
1848
+ }
1849
+
1850
+ .crisp-toast {
1851
+ display: contents; font-family: var(--crisp-font-sans);
1852
+ & .crisp-toast-viewport { position: fixed; z-index: 80; inset-inline-end: var(--crisp-space-4); bottom: var(--crisp-space-4); display: flex; flex-direction: column; gap: var(--crisp-space-2); width: 360px; max-width: calc(100vw - var(--crisp-space-8)); pointer-events: none; }
1853
+ & .crisp-toast { pointer-events: auto; display: flex; align-items: flex-start; gap: var(--crisp-space-2-5); box-sizing: border-box; padding: var(--crisp-space-3); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-raised); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10); opacity: 1; transform: translateY(0); transition: opacity 0.15s ease, transform 0.15s ease; @starting-style { opacity: 0; transform: translateY(8px); } }
1854
+ & .crisp-toast-icon { flex-shrink: 0; margin-top: 1px; display: inline-flex; color: var(--crisp-fg-muted); }
1855
+ & .crisp-toast[data-tone="info"] .crisp-toast-icon { color: var(--crisp-bg-brand-solid); }
1856
+ & .crisp-toast[data-tone="success"] .crisp-toast-icon { color: var(--crisp-bg-success); }
1857
+ & .crisp-toast[data-tone="warning"] .crisp-toast-icon { color: var(--crisp-bg-warning); }
1858
+ & .crisp-toast[data-tone="danger"] .crisp-toast-icon { color: var(--crisp-bg-danger); }
1859
+ & .crisp-toast-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
1860
+ & .crisp-toast-title { font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
1861
+ & .crisp-toast-desc { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
1862
+ & .crisp-toast-action { align-self: flex-start; margin-top: var(--crisp-space-1-5); height: 24px; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); cursor: pointer; }
1863
+ & .crisp-toast-action:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 10%, transparent); }
1864
+ & .crisp-toast-close { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin: -2px -2px 0 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
1865
+ & .crisp-toast-close:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
1866
+ }
1867
+
1868
+ @media (prefers-reduced-motion: reduce) {
1869
+ .crisp-toast, .crisp-toast * {
1870
+ animation-duration: 0.01ms !important;
1871
+ animation-iteration-count: 1 !important;
1872
+ transition-duration: 0.01ms !important;
1873
+ }
1874
+ }
1875
+
1876
+ .crisp-tooltip {
1877
+ position: fixed; z-index: 70; box-sizing: border-box; pointer-events: none; max-width: 260px; padding: var(--crisp-space-1) var(--crisp-space-2); border-radius: var(--crisp-radius-sm); background: #20242c; color: #fff; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); line-height: 1.45; box-shadow: 0 4px 14px -2px rgba(28,40,64,0.28), 0 0 0 1px rgba(255,255,255,0.04); opacity: 1; transition: opacity 0.12s ease; @starting-style { opacity: 0; }
1878
+ }
1879
+
1880
+ @media (prefers-reduced-motion: reduce) {
1881
+ .crisp-tooltip, .crisp-tooltip * {
1882
+ animation-duration: 0.01ms !important;
1883
+ animation-iteration-count: 1 !important;
1884
+ transition-duration: 0.01ms !important;
1885
+ }
1886
+ }
1887
+
1888
+ .crisp-wheelpicker {
1889
+
1890
+ position: relative; box-sizing: border-box; width: 100%; overflow: hidden;
1891
+ background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans);
1892
+
1893
+ /* the band the selected row sits in; behind the items, never hit-tested */
1894
+ & .crisp-wheelpicker-indicator {
1895
+ position: absolute; z-index: 0; inset-inline: var(--crisp-space-4); top: 50%;
1896
+ transform: translateY(-50%); border-radius: var(--crisp-radius-md);
1897
+ background: var(--crisp-bg-neutral-weak); pointer-events: none;
1898
+ }
1899
+
1900
+ /* fades the rows furthest from the centre, so the column reads as a wheel
1901
+ rather than a list. 40% of the viewport, capped, top and bottom. */
1902
+ & .crisp-wheelpicker-fog {
1903
+ position: relative; z-index: 1; height: 100%; overflow: hidden;
1904
+ mask-image: linear-gradient(
1905
+ to bottom,
1906
+ transparent 0,
1907
+ #000 var(--crisp-wheelpicker-fog),
1908
+ #000 calc(100% - var(--crisp-wheelpicker-fog)),
1909
+ transparent 100%
1910
+ );
1911
+ }
1912
+ & .crisp-wheelpicker-columns { display: flex; width: 100%; height: 100%; justify-content: center; }
1913
+
1914
+ & .crisp-wheelpicker-column {
1915
+ box-sizing: border-box; flex: 0 0 auto; width: max-content; height: 100%;
1916
+ overflow-x: hidden; overflow-y: auto;
1917
+ overscroll-behavior-y: contain; overscroll-behavior-x: none;
1918
+ scroll-snap-type: y mandatory; touch-action: pan-y;
1919
+ scrollbar-width: none; -ms-overflow-style: none; outline: none;
1920
+ padding-block: var(--crisp-wheelpicker-offset);
1921
+ }
1922
+ & .crisp-wheelpicker-column::-webkit-scrollbar { display: none; }
1923
+
1924
+ & .crisp-wheelpicker-item {
1925
+ display: flex; align-items: center; justify-content: center;
1926
+ scroll-snap-align: center; user-select: none; white-space: nowrap;
1927
+ padding-inline: var(--crisp-space-4); color: var(--crisp-fg-disabled);
1928
+ background: none; border: none; font: inherit; cursor: pointer;
1929
+ }
1930
+ & .crisp-wheelpicker-item[data-selected] { color: var(--crisp-fg-primary); }
1931
+
1932
+ /* the ring is drawn on the SELECTED row, and only for keyboard focus:
1933
+ a pointer user has just tapped the row they meant and does not need it */
1934
+ & .crisp-wheelpicker-column:focus-visible .crisp-wheelpicker-item[data-selected] {
1935
+ outline: 2px solid var(--crisp-stroke-focus-ring); outline-offset: -2px;
1936
+ border-radius: var(--crisp-radius-md);
1937
+ }
1938
+
1939
+ }
1940
+ .crisp-wheelpicker--size_small {
1941
+
1942
+ height: 180px; --crisp-wheelpicker-offset: 72px;
1943
+ --crisp-wheelpicker-fog: min(40%, 108px);
1944
+ & .crisp-wheelpicker-indicator { height: 36px; }
1945
+ & .crisp-wheelpicker-item { height: 36px; min-height: 36px; font-size: 20px; line-height: 27px; }
1946
+
1947
+ }
1948
+ .crisp-wheelpicker--size_medium {
1949
+
1950
+ height: 220px; --crisp-wheelpicker-offset: 88px;
1951
+ --crisp-wheelpicker-fog: min(40%, 132px);
1952
+ & .crisp-wheelpicker-indicator { height: 44px; }
1953
+ & .crisp-wheelpicker-item { height: 44px; min-height: 44px; font-size: 26px; line-height: 35px; }
1954
+
1955
+ }
1956
+
1957
+ .crisp-appshell {
1958
+
1959
+ display: flex; height: 100%; width: 100%; overflow: hidden; background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1960
+ & .crisp-appshell-side { position: relative; flex-shrink: 0; overflow: hidden; }
1961
+ & .crisp-appshell-side-inner { height: 100%; }
1962
+ & .crisp-appshell-resize { position: absolute; top: 0; inset-inline-end: 0; width: 10px; height: 100%; cursor: col-resize; z-index: 5; touch-action: none; }
1963
+ & .crisp-appshell-resize::after { content: ""; position: absolute; top: 0; inset-inline-end: 0; width: 1px; height: 100%; background: var(--crisp-border-subtle); transition: background-color .16s, height .16s; }
1964
+ & .crisp-appshell-resize:hover::after, & .crisp-appshell-resize[data-dragging]::after { width: 2px; background: var(--crisp-bg-brand-solid); }
1965
+ & .crisp-appshell-main { position: relative; flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
1966
+ & .crisp-appshell-expand { position: absolute; top: var(--crisp-space-2); inset-inline-start: var(--crisp-space-2); z-index: 6; display: inline-flex; align-items: center; justify-content: center; width: var(--crisp-size-row); height: var(--crisp-size-row); padding: 0; border: none; border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); background: var(--crisp-bg-surface); color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s; }
1967
+ & .crisp-appshell-expand:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
1968
+
1969
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
1970
+
1971
+ }
1972
+
1973
+ @media (prefers-reduced-motion: reduce) {
1974
+ .crisp-appshell, .crisp-appshell * {
1975
+ animation-duration: 0.01ms !important;
1976
+ animation-iteration-count: 1 !important;
1977
+ transition-duration: 0.01ms !important;
1978
+ }
1979
+ }
1980
+
1981
+ .crisp-authshell {
1982
+ min-height: 100%; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; position: relative;
1983
+ background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary);
1984
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
1985
+
1986
+ & .crisp-authshell-progress { position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: var(--crisp-border-default); }
1987
+ & .crisp-authshell-progress-fill { height: 2px; background: var(--crisp-fg-primary); border-radius: 4px; transition: width .2s; }
1988
+
1989
+ & .crisp-authshell-logo { margin-top: var(--crisp-space-8); height: 24px; display: flex; align-items: center; }
1990
+
1991
+ & .crisp-authshell-card { margin-top: var(--crisp-space-6); display: flex; height: 692px; border-radius: 20px; border: 1px solid var(--crisp-border-subtle); overflow: hidden; }
1992
+
1993
+ & .crisp-authshell-pane { flex: 0 0 564px; padding: 72px; display: flex; flex-direction: column; box-sizing: border-box; }
1994
+
1995
+ & .crisp-authshell-preview { flex: 0 0 564px; padding: 96px 64px; background: var(--crisp-bg-subtle); border-inline-start: 1px solid color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); position: relative; overflow: hidden; box-sizing: border-box; }
1996
+ & .crisp-authshell-preview::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 120px; background: linear-gradient(color-mix(in srgb, var(--crisp-bg-subtle) 0%, transparent) 0%, var(--crisp-bg-subtle) 100%); pointer-events: none; }
1997
+
1998
+ & .crisp-authshell-body { width: 420px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--crisp-space-8); align-items: center; }
1999
+
2000
+ & .crisp-authshell-title { font-size: 20px; line-height: 24px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.4px; color: var(--crisp-fg-primary); align-self: stretch; }
2001
+
2002
+ & .crisp-authshell-form { align-self: stretch; display: flex; flex-direction: column; gap: 28px; }
2003
+
2004
+ & .crisp-authshell-footer { margin-top: var(--crisp-space-6); display: flex; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-sm); line-height: 16px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
2005
+ & .crisp-authshell-footer a { color: inherit; font-weight: var(--crisp-weight-medium); text-decoration: underline; }
2006
+
2007
+ /* Auth-surface control treatment: flatter than the in-app chrome — a plain
2008
+ hairline ring instead of elevation.field's soft glow, and a 36px (not
2009
+ 40px) submit. Scoped to .crisp-authshell-body so a consumer keeps using
2010
+ crisp's Input / FormField / Button and gets the auth treatment for free. */
2011
+ & .crisp-authshell-body .crisp-formfield-label { font-size: var(--crisp-text-sm); line-height: 16px; font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); padding-inline-start: var(--crisp-space-1); }
2012
+ & .crisp-authshell-body .crisp-formfield { gap: var(--crisp-space-1); }
2013
+ & .crisp-authshell-body .crisp-input { height: 34px; padding-inline: var(--crisp-space-2-5); border-radius: 10px; background: transparent; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; transition: box-shadow .14s, background-color .14s; }
2014
+ & .crisp-authshell-body .crisp-input:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
2015
+ /* Same three-layer brand shadow as Button's primary intent, but the auth
2016
+ button's inset ring is measured at rgba(0,0,0,0.06) — a hairline, not
2017
+ the in-app button's rgba(255,255,255,0.07) highlight. */
2018
+ & .crisp-authshell-body .crisp-button { height: 36px; padding-inline: var(--crisp-space-3); border-radius: 10px; }
2019
+ & .crisp-authshell-body .crisp-button--intent_primary { box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(38,109,240,0.12), 0 3px 6px -2px rgba(38,109,240,0.08); }
2020
+
2021
+ /* The preview pane drops out in JS on narrow viewports (measured: two
2022
+ panes at 1393px, one at 954px), so 1200px is a chosen threshold inside
2023
+ that bracket, not a measured value. A CONTAINER query, not a media
2024
+ query: the shell is embedded in the docs inside an ~800px column, where
2025
+ a viewport query would keep the 1130px card and overflow it. Asking the
2026
+ shell's own width is what "there isn't room for the preview" means. */
2027
+ container-type: inline-size;
2028
+ @container (max-width: 1200px) { & .crisp-authshell-preview { display: none; } }
2029
+ }
2030
+
2031
+ @media (prefers-reduced-motion: reduce) {
2032
+ .crisp-authshell, .crisp-authshell * {
2033
+ animation-duration: 0.01ms !important;
2034
+ animation-iteration-count: 1 !important;
2035
+ transition-duration: 0.01ms !important;
2036
+ }
2037
+ }
2038
+
2039
+ .crisp-board {
2040
+ display: flex; gap: var(--crisp-space-3); height: 100%; box-sizing: border-box; padding: var(--crisp-space-3); overflow-x: auto; align-items: flex-start; font-family: var(--crisp-font-sans);
2041
+ & .crisp-board-col { display: flex; flex-direction: column; width: 280px; flex-shrink: 0; max-height: 100%; box-sizing: border-box; }
2042
+ & .crisp-board-col-header { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-1); flex-shrink: 0; }
2043
+ & .crisp-board-col-dot { width: 9px; height: 9px; border-radius: var(--crisp-radius-full); flex-shrink: 0; }
2044
+ & .crisp-board-col-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
2045
+ & .crisp-board-col-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2046
+ & .crisp-board-col-add { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin-inline-start: auto; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; }
2047
+ & .crisp-board-col-add:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
2048
+ & .crisp-board-col-body { display: flex; flex-direction: column; gap: var(--crisp-space-2); flex: 1; min-height: 48px; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-lg); overflow-y: auto; transition: background 0.12s; }
2049
+ & .crisp-board-col[data-over] .crisp-board-col-body { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 7%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
2050
+ & .crisp-board-newcard { display: flex; align-items: center; justify-content: center; gap: var(--crisp-space-1-5); height: 32px; flex-shrink: 0; border: none; border-radius: var(--crisp-radius-md); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2051
+ & .crisp-board-newcard:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 7%, transparent); color: var(--crisp-fg-primary); }
2052
+ & .crisp-board-card { display: flex; flex-direction: column; gap: var(--crisp-space-2); box-sizing: border-box; padding: var(--crisp-space-2-5) var(--crisp-space-3); border-radius: var(--crisp-radius-lg); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle), 0 1px 2px rgba(0,0,0,0.04); cursor: grab; }
2053
+ & .crisp-board-card:active { cursor: grabbing; }
2054
+ & .crisp-board-card[data-dragging] { opacity: 0.4; }
2055
+ & .crisp-board-card:focus { outline: none; }
2056
+ & .crisp-board-card:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2057
+ /* announced, never drawn */
2058
+ & .crisp-board-live {
2059
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
2060
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
2061
+ }
2062
+ }
2063
+
2064
+ @media (prefers-reduced-motion: reduce) {
2065
+ .crisp-board, .crisp-board * {
2066
+ animation-duration: 0.01ms !important;
2067
+ animation-iteration-count: 1 !important;
2068
+ transition-duration: 0.01ms !important;
2069
+ }
2070
+ }
2071
+
2072
+ .crisp-command {
2073
+ display: contents; font-family: var(--crisp-font-sans)
2074
+ ; & .crisp-command-content, & .crisp-command-card { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
2075
+ & .crisp-command-backdrop { position: fixed; inset: 0; z-index: 50; background: transparent; }
2076
+ & .crisp-command-positioner { position: fixed; inset: 0; z-index: 51; display: flex; align-items: flex-start; justify-content: center; padding: 15vh var(--crisp-space-4) var(--crisp-space-4); }
2077
+ & .crisp-command-content { position: relative; display: flex; flex-direction: column; box-sizing: border-box; width: 90vw; max-width: 748px; max-height: 70vh; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-2xl); background: color-mix(in srgb, var(--crisp-bg-overlay-frost) 60%, transparent); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); box-shadow: 0 8px 28px -6px var(--crisp-shadow-overlay1), 0 18px 88px -4px var(--crisp-shadow-overlay2), 0 0 1px var(--crisp-shadow-overlay3); opacity: 1; transform: scale(1); transition: opacity 0.2s ease, transform 0.2s ease; @starting-style { opacity: 0; transform: scale(0.97); } }
2078
+ & .crisp-command-card { display: flex; flex-direction: column; flex: 1; min-height: 0; box-sizing: border-box; border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); box-shadow: 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); overflow: hidden; }
2079
+ & .crisp-command-control { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-4); border-bottom: 1px solid var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
2080
+ & .crisp-command-control svg { flex-shrink: 0; }
2081
+ /* The palette's label element. It exists for the assistive tree only: zag's
2082
+ combobox names the input through it and points the listbox's
2083
+ aria-labelledby at it, and without it both were unnamed and the reference
2084
+ resolved to nothing (#225). Clipped rather than display:none, which would
2085
+ take it out of the tree it exists for. */
2086
+ & .crisp-command-srlabel { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
2087
+ & .crisp-command-input { flex: 1; min-width: 0; border: none; outline: none; background: transparent; font-family: var(--crisp-font-sans); font-size: var(--crisp-text-xl); color: var(--crisp-fg-primary); }
2088
+ & .crisp-command-input::placeholder { color: var(--crisp-fg-muted); }
2089
+ & .crisp-command-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-1) var(--crisp-space-2-5); display: flex; flex-direction: column; gap: var(--crisp-space-px); }
2090
+ & .crisp-command-empty { padding: var(--crisp-space-8) var(--crisp-space-3); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2091
+ & .crisp-command-item { box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding-inline: var(--crisp-space-2-5); border-radius: var(--crisp-radius-xl); font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); cursor: pointer; }
2092
+ & .crisp-command-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2093
+ & .crisp-command-item[data-highlighted] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
2094
+ & .crisp-command-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2095
+ & .crisp-command-item-shortcut { margin-inline-start: auto; flex-shrink: 0; display: flex; align-items: center; gap: var(--crisp-space-0-5); }
2096
+ & .crisp-command-group-label { padding: var(--crisp-space-2) var(--crisp-space-2-5) var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); }
2097
+ & .crisp-command-list > .crisp-command-group-label:first-child { padding-top: var(--crisp-space-1); }
2098
+ & .crisp-command-footer { display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; height: 44px; padding: 0 var(--crisp-space-2-5); border-top: 1px solid var(--crisp-border-subtle); }
2099
+ & .crisp-command-footer-nav { display: flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2100
+ & .crisp-command-footer-action { display: flex; align-items: center; gap: var(--crisp-space-2); height: 28px; max-width: 60%; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2101
+ & .crisp-command-footer-action:disabled { opacity: 0.5; cursor: default; }
2102
+ & .crisp-command-footer-action-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2103
+ & .crisp-command-footer-key { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: rgba(255,255,255,0.22); font-size: var(--crisp-text-xs); }
2104
+
2105
+ }
2106
+
2107
+ @media (prefers-reduced-motion: reduce) {
2108
+ .crisp-command, .crisp-command * {
2109
+ animation-duration: 0.01ms !important;
2110
+ animation-iteration-count: 1 !important;
2111
+ transition-duration: 0.01ms !important;
2112
+ }
2113
+ }
2114
+
2115
+ .crisp-entitycard {
2116
+ display: flex; flex-direction: column; box-sizing: border-box; width: 100%; min-width: 0; text-align: start;
2117
+ padding: var(--crisp-space-3) var(--crisp-space-4); margin: 0; border: none; border-radius: var(--crisp-radius-xl);
2118
+ background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-primary);
2119
+ font-family: var(--crisp-font-sans); cursor: pointer; transition: box-shadow .12s ease, background-color .12s ease;
2120
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2121
+
2122
+ &:hover { box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 1px 2px rgba(0,0,0,0.04), 0 6px 16px -6px rgba(28,40,64,0.12); }
2123
+ &:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 2px; }
2124
+
2125
+ & .crisp-entitycard-author { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2126
+ & .crisp-entitycard-title { margin-top: var(--crisp-space-2); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.1px; color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2127
+ & .crisp-entitycard-excerpt { margin-top: var(--crisp-space-1); font-size: var(--crisp-text-md); line-height: 18px; color: var(--crisp-fg-muted); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
2128
+ & .crisp-entitycard-spacer { flex: 1; min-height: var(--crisp-space-3); }
2129
+ & .crisp-entitycard-foot { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding-top: var(--crisp-space-2-5); margin-top: var(--crisp-space-1); border-top: 1px solid var(--crisp-border-subtle); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2130
+ & .crisp-entitycard-foot-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--crisp-fg-primary); }
2131
+ & .crisp-entitycard-date { margin-inline-start: auto; flex-shrink: 0; white-space: nowrap; }
2132
+ }
2133
+
2134
+ @media (prefers-reduced-motion: reduce) {
2135
+ .crisp-entitycard, .crisp-entitycard * {
2136
+ animation-duration: 0.01ms !important;
2137
+ animation-iteration-count: 1 !important;
2138
+ transition-duration: 0.01ms !important;
2139
+ }
2140
+ }
2141
+
2142
+ .crisp-flowcanvas {
2143
+ position: relative; overflow: hidden; box-sizing: border-box; width: 100%; height: 100%; background-color: var(--crisp-bg-surface); background-image: radial-gradient(circle, color-mix(in srgb, var(--crisp-fg-primary) 14%, transparent) 1px, transparent 1px); font-family: var(--crisp-font-sans); cursor: grab; touch-action: none; user-select: none;
2144
+ &[data-panning] { cursor: grabbing; }
2145
+ & .crisp-flowcanvas-viewport { position: absolute; top: 0; left: 0; transform-origin: 0 0; }
2146
+ & .crisp-flowcanvas-edges { position: absolute; top: 0; left: 0; width: 1px; height: 1px; overflow: visible; pointer-events: none; }
2147
+ & .crisp-flowcanvas-edge { fill: none; stroke: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); stroke-width: 1.5; }
2148
+ & .crisp-flowcanvas-edge-dot { fill: var(--crisp-bg-brand-solid); }
2149
+ & .crisp-flowcanvas-node { position: absolute; cursor: grab; }
2150
+ & .crisp-flowcanvas-node[data-dragging] { cursor: grabbing; z-index: 10; }
2151
+ & .crisp-flowcanvas-toolbar { position: absolute; bottom: var(--crisp-space-4); left: 50%; transform: translateX(-50%); display: inline-flex; align-items: center; gap: var(--crisp-space-1); padding: var(--crisp-space-1); border-radius: var(--crisp-radius-lg); background: var(--crisp-bg-raised); box-shadow: inset 0 0 0 1px var(--crisp-border-default), 0 4px 14px -4px rgba(28,40,64,0.16); }
2152
+ & .crisp-flowcanvas-tool { display: inline-flex; align-items: center; justify-content: center; gap: var(--crisp-space-1); height: 30px; min-width: 30px; padding: 0 var(--crisp-space-2); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2153
+ & .crisp-flowcanvas-tool:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: var(--crisp-fg-primary); }
2154
+ & .crisp-flowcanvas-tool-zoom { min-width: 48px; }
2155
+ & .crisp-flowcanvas-tool-sep { width: 1px; height: 18px; background: var(--crisp-border-subtle); }
2156
+ }
2157
+
2158
+ .crisp-inbox {
2159
+ display: flex; flex-direction: column; box-sizing: border-box; width: 380px; max-height: 588px;
2160
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans); overflow: hidden;
2161
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10);
2162
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2163
+
2164
+ & .crisp-inbox-head { padding: var(--crisp-space-3) var(--crisp-space-3) 0; }
2165
+ & .crisp-inbox-title { font-size: var(--crisp-text-xl); line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; color: var(--crisp-fg-primary); }
2166
+ & .crisp-inbox-tabs { display: flex; gap: var(--crisp-space-3); margin-top: var(--crisp-space-2); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); }
2167
+ & .crisp-inbox-tab { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 32px; padding: 0 2px; margin: 0; border: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; box-shadow: inset 0 -2px 0 transparent; transition: color .12s, box-shadow .12s; }
2168
+ & .crisp-inbox-tab:hover { color: var(--crisp-fg-primary); }
2169
+ & .crisp-inbox-tab[data-active] { color: var(--crisp-bg-brand-solid); box-shadow: inset 0 -2px 0 var(--crisp-bg-brand-solid); }
2170
+ & .crisp-inbox-tab-count { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2171
+ & .crisp-inbox-tab[data-active] .crisp-inbox-tab-count { color: var(--crisp-bg-brand-solid); }
2172
+
2173
+ & .crisp-inbox-list { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-1); display: flex; flex-direction: column; gap: 1px; }
2174
+ & .crisp-inbox-row { display: flex; align-items: flex-start; gap: var(--crisp-space-2-5); padding: var(--crisp-space-2) var(--crisp-space-2); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; text-align: start; cursor: pointer; transition: background-color .12s; }
2175
+ & .crisp-inbox-row:hover { background: var(--crisp-bg-raised); }
2176
+ & .crisp-inbox-row-avatar { flex-shrink: 0; margin-top: 1px; }
2177
+ & .crisp-inbox-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
2178
+ & .crisp-inbox-row-msg { font-size: var(--crisp-text-lg); line-height: 18px; color: var(--crisp-fg-primary); }
2179
+ & .crisp-inbox-row-msg b { font-weight: var(--crisp-weight-semibold); }
2180
+ & .crisp-inbox-row-time { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2181
+ & .crisp-inbox-row-unread { flex-shrink: 0; width: 8px; height: 8px; margin-top: var(--crisp-space-1); border-radius: var(--crisp-radius-full); background: var(--crisp-bg-brand-solid); }
2182
+
2183
+ & .crisp-inbox-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--crisp-space-1); padding: var(--crisp-space-6) var(--crisp-space-4); text-align: center; }
2184
+ & .crisp-inbox-empty-icon { display: inline-flex; margin-bottom: var(--crisp-space-2); color: color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent); }
2185
+ & .crisp-inbox-empty-title { font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); }
2186
+ & .crisp-inbox-empty-sub { font-size: var(--crisp-text-md); line-height: 18px; color: var(--crisp-fg-muted); max-width: 260px; }
2187
+ & .crisp-inbox-empty-action { margin-top: var(--crisp-space-2); }
2188
+ }
2189
+
2190
+ @media (prefers-reduced-motion: reduce) {
2191
+ .crisp-inbox, .crisp-inbox * {
2192
+ animation-duration: 0.01ms !important;
2193
+ animation-iteration-count: 1 !important;
2194
+ transition-duration: 0.01ms !important;
2195
+ }
2196
+ }
2197
+
2198
+ .crisp-listpage {
2199
+ display: flex; flex-direction: column; min-height: 0; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2200
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2201
+
2202
+ & .crisp-listpage-toolbar { display: flex; align-items: center; gap: var(--crisp-space-2); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-3); }
2203
+ & .crisp-listpage-toolbar-lead { display: flex; align-items: center; gap: var(--crisp-space-2); }
2204
+ & .crisp-listpage-count { margin-inline-start: auto; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); white-space: nowrap; }
2205
+ & .crisp-listpage-toolbar-trail { display: flex; align-items: center; gap: var(--crisp-space-2); }
2206
+ & .crisp-listpage-count + .crisp-listpage-toolbar-trail { margin-inline-start: var(--crisp-space-3); }
2207
+
2208
+ & .crisp-listpage-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 var(--crisp-space-3) var(--crisp-space-3); }
2209
+
2210
+ & .crisp-listpage-section-label { padding: var(--crisp-space-2) var(--crisp-space-1); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2211
+ & .crisp-listpage-favorites { display: flex; align-items: center; justify-content: center; min-height: 200px; padding: var(--crisp-space-6); border-radius: var(--crisp-radius-xl);
2212
+ background: repeating-linear-gradient(0deg, transparent, transparent) padding-box,
2213
+ border-box; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); }
2214
+ & .crisp-listpage-favorites[data-dashed] { box-shadow: none; border: 1px dashed color-mix(in srgb, var(--crisp-fg-primary) 14%, transparent); }
2215
+
2216
+ & .crisp-listpage-colhead { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 40px; padding: 0 var(--crisp-space-2); box-shadow: inset 0 -1px 0 var(--crisp-border-subtle); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2217
+ & .crisp-listpage-colhead-cell { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); }
2218
+
2219
+ & .crisp-listpage-group { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: 36px; padding: 0 var(--crisp-space-2); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2220
+ & .crisp-listpage-group-count { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); }
2221
+
2222
+ & .crisp-listpage-row { display: flex; align-items: center; gap: var(--crisp-space-2-5); width: 100%; height: 52px; padding: 0 var(--crisp-space-2); margin: 0; border: none; border-top: 1px solid var(--crisp-border-subtle); background: none; font-family: inherit; color: inherit; text-align: start; cursor: pointer; transition: background-color .12s; }
2223
+ & .crisp-listpage-row:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: -2px; }
2224
+ & .crisp-listpage-row:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); }
2225
+ & .crisp-listpage-row-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2226
+
2227
+ & .crisp-listpage-empty { padding: var(--crisp-space-8) var(--crisp-space-4); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2228
+ }
2229
+
2230
+ @media (prefers-reduced-motion: reduce) {
2231
+ .crisp-listpage, .crisp-listpage * {
2232
+ animation-duration: 0.01ms !important;
2233
+ animation-iteration-count: 1 !important;
2234
+ transition-duration: 0.01ms !important;
2235
+ }
2236
+ }
2237
+
2238
+ .crisp-navitem {
2239
+ box-sizing: border-box; display: flex; align-items: center; gap: var(--crisp-space-1-5)
2240
+ ; height: 28px; padding-inline: var(--crisp-space-2)
2241
+ ; padding-inline-end: var(--crisp-space-1)
2242
+ ; border-radius: var(--crisp-radius-lg)
2243
+ ; font-family: var(--crisp-font-sans)
2244
+ ; font-size: var(--crisp-text-lg)
2245
+ ; font-weight: var(--crisp-weight-medium)
2246
+ ; letter-spacing: -0.14px; line-height: 20px; color: var(--crisp-fg-primary)
2247
+ ; text-decoration: none; cursor: pointer; user-select: none; width: 100%; transition: background-color 0.16s; & .crisp-navitem-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2248
+ & .crisp-navitem-trailing { margin-inline-start: auto; display: inline-flex; align-items: center; flex-shrink: 0; }
2249
+ &:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 2%, transparent); }
2250
+ &[data-active] { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); }
2251
+
2252
+ }
2253
+
2254
+ @media (prefers-reduced-motion: reduce) {
2255
+ .crisp-navitem, .crisp-navitem * {
2256
+ animation-duration: 0.01ms !important;
2257
+ animation-iteration-count: 1 !important;
2258
+ transition-duration: 0.01ms !important;
2259
+ }
2260
+ }
2261
+
2262
+ .crisp-onboarding {
2263
+ display: flex; flex-direction: column; box-sizing: border-box; width: 272px; padding: var(--crisp-space-3); gap: var(--crisp-space-2);
2264
+ border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); font-family: var(--crisp-font-sans);
2265
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2266
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent), 0 8px 28px -6px rgba(28,40,64,0.16), 0 2px 6px -2px rgba(28,40,64,0.10);
2267
+
2268
+ & .crisp-onboarding-head { display: flex; align-items: center; gap: var(--crisp-space-1); }
2269
+ & .crisp-onboarding-title { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2270
+ & .crisp-onboarding-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: var(--crisp-size-chip); flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
2271
+ & .crisp-onboarding-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2272
+
2273
+ & .crisp-onboarding-sub { font-size: var(--crisp-text-sm); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); }
2274
+ & .crisp-onboarding-sub b { font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2275
+
2276
+ & .crisp-onboarding-progress { display: flex; gap: var(--crisp-space-1); margin: var(--crisp-space-0-5) 0 var(--crisp-space-1); }
2277
+ & .crisp-onboarding-seg { flex: 1; height: 4px; border-radius: var(--crisp-radius-full); background: color-mix(in srgb, var(--crisp-fg-primary) 4%, transparent); transition: background-color .2s ease; }
2278
+ & .crisp-onboarding-seg[data-done] { background: var(--crisp-bg-brand-solid); }
2279
+
2280
+ & .crisp-onboarding-steps { display: flex; flex-direction: column; }
2281
+ & .crisp-onboarding-step { display: flex; align-items: center; gap: var(--crisp-space-2); height: 36px; padding: 0 var(--crisp-space-1); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; transition: background-color .12s; }
2282
+ & .crisp-onboarding-step:hover { background: var(--crisp-bg-raised); }
2283
+ & .crisp-onboarding-step-icon { display: inline-flex; flex-shrink: 0; color: var(--crisp-fg-muted); }
2284
+ & .crisp-onboarding-step-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2285
+ & .crisp-onboarding-step-check { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; flex-shrink: 0; border-radius: var(--crisp-radius-full); color: transparent; }
2286
+ & .crisp-onboarding-step[data-done] { cursor: default; }
2287
+ & .crisp-onboarding-step[data-done] .crisp-onboarding-step-icon, & .crisp-onboarding-step[data-done] .crisp-onboarding-step-label { color: var(--crisp-fg-muted); text-decoration: line-through; }
2288
+ & .crisp-onboarding-step[data-done]:hover { background: none; }
2289
+ & .crisp-onboarding-step[data-done] .crisp-onboarding-step-check { background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); }
2290
+ }
2291
+
2292
+ @media (prefers-reduced-motion: reduce) {
2293
+ .crisp-onboarding, .crisp-onboarding * {
2294
+ animation-duration: 0.01ms !important;
2295
+ animation-iteration-count: 1 !important;
2296
+ transition-duration: 0.01ms !important;
2297
+ }
2298
+ }
2299
+
2300
+ .crisp-recordpage {
2301
+
2302
+ display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--crisp-bg-surface);
2303
+ font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2304
+ color: var(--crisp-fg-primary);
2305
+ & * { box-sizing: border-box; }
2306
+
2307
+ & .crisp-recordpage-topbar { display: flex; align-items: center; gap: var(--crisp-space-2); height: 44px; flex-shrink: 0; padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); }
2308
+ & .crisp-recordpage-crumbs { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
2309
+ & .crisp-recordpage-crumb { display: inline-flex; align-items: center; height: 26px; padding: 0 var(--crisp-space-1-5); margin: 0 calc(-1 * var(--crisp-space-1-5)) 0 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; }
2310
+ & .crisp-recordpage-crumb:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2311
+ & .crisp-recordpage-crumb-sep { color: var(--crisp-fg-muted); font-size: var(--crisp-text-lg); }
2312
+ & .crisp-recordpage-crumb-name { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2313
+ & .crisp-recordpage-actions { margin-inline-start: auto; display: flex; align-items: center; gap: var(--crisp-space-1); }
2314
+ & .crisp-recordpage-action { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); cursor: pointer; white-space: nowrap; }
2315
+ & .crisp-recordpage-action:hover { background: var(--crisp-bg-raised); }
2316
+ & .crisp-recordpage-action--ghost { box-shadow: none; color: var(--crisp-fg-muted); }
2317
+ & .crisp-recordpage-action--icon { width: 28px; padding: 0; justify-content: center; box-shadow: none; color: var(--crisp-fg-muted); }
2318
+ & .crisp-recordpage-action svg { flex-shrink: 0; }
2319
+
2320
+ & .crisp-recordpage-body { flex: 1; min-height: 0; display: flex; }
2321
+
2322
+ & .crisp-recordpage-details { width: 320px; flex-shrink: 0; overflow-y: auto; border-inline-end: 1px solid var(--crisp-border-subtle); padding: var(--crisp-space-3); }
2323
+ & .crisp-recordpage-resizer { position: relative; flex: 0 0 auto; width: 0; align-self: stretch; cursor: col-resize; z-index: 5; touch-action: none; }
2324
+ & .crisp-recordpage-resizer::before { content: ""; position: absolute; top: 0; bottom: 0; inset-inline-start: -4px; width: 9px; }
2325
+ & .crisp-recordpage-resizer::after { content: ""; position: absolute; top: 0; bottom: 0; inset-inline-start: -1px; width: 2px; background: transparent; transition: background-color .12s ease; }
2326
+ & .crisp-recordpage-resizer:hover::after, & .crisp-recordpage-resizer[data-active]::after { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 55%, transparent); }
2327
+ & .crisp-recordpage-entity { display: flex; align-items: center; gap: var(--crisp-space-2); padding: var(--crisp-space-1) var(--crisp-space-1) var(--crisp-space-2); }
2328
+ & .crisp-recordpage-entity-logo { width: 32px; height: 32px; border-radius: 30%; flex-shrink: 0; object-fit: cover; background: var(--crisp-bg-raised); }
2329
+ & .crisp-recordpage-entity-name { flex: 0 1 auto; min-width: 0; font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2330
+ & .crisp-recordpage-entity-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
2331
+ & .crisp-recordpage-entity-iconbtn:first-of-type { margin-inline-start: calc(-1 * var(--crisp-space-1)); }
2332
+ & .crisp-recordpage-entity-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2333
+ & .crisp-recordpage-entity-iconbtn[data-active] svg { color: #f5b83d; fill: #f5b83d; }
2334
+ & .crisp-recordpage-quickactions { display: flex; align-items: center; gap: var(--crisp-space-2); padding: 0 var(--crisp-space-1) var(--crisp-space-3); }
2335
+ & .crisp-recordpage-compose { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-4) 0 var(--crisp-space-3); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); white-space: nowrap; cursor: pointer; transition: background-color .12s; }
2336
+ & .crisp-recordpage-compose:hover { background: var(--crisp-bg-raised); }
2337
+ & .crisp-recordpage-compose svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2338
+ & .crisp-recordpage-quickbtn { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
2339
+ & .crisp-recordpage-quickbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2340
+ & .crisp-recordpage-section { padding-top: var(--crisp-space-2); }
2341
+ & .crisp-recordpage-section-title { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); padding: var(--crisp-space-1); }
2342
+ /* main-area section headers (Highlights / Activity / Emails / Notes / Tasks)
2343
+ are 14px; the left column's (Record Details / Lists) stay 12px. */
2344
+ & .crisp-recordpage-main .crisp-recordpage-section-title { font-size: var(--crisp-text-lg); }
2345
+ & .crisp-recordpage-detailhead { display: flex; align-items: center; gap: var(--crisp-space-0-5); margin-bottom: var(--crisp-space-3); padding-inline-end: var(--crisp-space-0-5); }
2346
+ & .crisp-recordpage-collapse { display: inline-flex; align-items: center; gap: 2px; flex: 1; min-width: 0; margin: 0; border: none; background: none; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: var(--crisp-fg-muted); cursor: pointer; text-align: start; }
2347
+ & .crisp-recordpage-collapse:hover { color: var(--crisp-fg-primary); }
2348
+ & .crisp-recordpage-collapse .crisp-recordpage-chev { flex-shrink: 0; transition: transform .15s ease; }
2349
+ & .crisp-recordpage-collapse[data-collapsed] .crisp-recordpage-chev { transform: rotate(-90deg); }
2350
+ & .crisp-recordpage-fieldsearch { flex: 1; min-width: 0; border: none; outline: none; background: none; padding: var(--crisp-space-1); font-family: inherit; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); letter-spacing: -0.12px; color: var(--crisp-fg-primary); }
2351
+ & .crisp-recordpage-fieldsearch:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); border-radius: var(--crisp-radius-md); }
2352
+ & .crisp-recordpage-fieldsearch::placeholder { color: var(--crisp-fg-muted); font-weight: var(--crisp-weight-regular); }
2353
+ & .crisp-recordpage-detailsearch { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: var(--crisp-size-chip); flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s; }
2354
+ & .crisp-recordpage-detailsearch:hover, & .crisp-recordpage-detailsearch[data-active] { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2355
+ & .crisp-recordpage-noresults { padding: var(--crisp-space-1-5) var(--crisp-space-1); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2356
+ & .crisp-recordpage-morevalues { display: inline-flex; align-items: center; padding: 0; margin: 0; border: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-muted); cursor: pointer; }
2357
+ & .crisp-recordpage-morevalues:hover { color: var(--crisp-fg-primary); }
2358
+ & .crisp-recordpage-viewall { flex-basis: 100%; margin-top: var(--crisp-space-0-5); border: none; background: none; padding: 0; color: color-mix(in srgb, var(--crisp-fg-primary) 55%, transparent); font-family: inherit; font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-regular); cursor: pointer; text-align: start; }
2359
+ & .crisp-recordpage-viewall:hover { color: var(--crisp-fg-primary); }
2360
+ & .crisp-recordpage-viewall--inline { flex-basis: auto; margin-top: 0; }
2361
+ & .crisp-recordpage-viewall--section { display: block; flex-basis: auto; margin-top: 0; padding: var(--crisp-space-1) var(--crisp-space-1); }
2362
+ & .crisp-recordpage-field { display: grid; grid-template-columns: 30% 1fr; align-items: start; column-gap: var(--crisp-space-2); min-height: 32px; padding: var(--crisp-space-0-5) var(--crisp-space-1); border-radius: var(--crisp-radius-md); }
2363
+ & .crisp-recordpage-field + .crisp-recordpage-field { margin-top: var(--crisp-space-0-5); }
2364
+ & .crisp-recordpage-field:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); }
2365
+ & .crisp-recordpage-field-label { display: flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; overflow: hidden; padding-top: 2px; line-height: 20px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); }
2366
+ & .crisp-recordpage-field-label svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2367
+ & .crisp-recordpage-field-label-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2368
+ & .crisp-recordpage-field-value { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); padding-top: 2px; line-height: 20px; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2369
+ & .crisp-recordpage-empty { color: var(--crisp-fg-muted); }
2370
+ & .crisp-recordpage-link { color: var(--crisp-fg-primary); text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
2371
+ & .crisp-recordpage-link:hover { text-decoration: underline; }
2372
+ & .crisp-recordpage-emptystate { padding: var(--crisp-space-2) var(--crisp-space-1); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2373
+
2374
+ & .crisp-recordpage-main { flex: 1; min-width: 0; display: flex; flex-direction: column; min-height: 0; overflow-y: auto; padding: var(--crisp-space-3) var(--crisp-space-5); }
2375
+
2376
+ & .crisp-recordpage-panel { padding-top: var(--crisp-space-4); display: flex; flex-direction: column; gap: var(--crisp-space-4); }
2377
+ & .crisp-recordpage-card { border: 1px solid var(--crisp-border-subtle); border-radius: var(--crisp-radius-2xl); background: var(--crisp-bg-surface); overflow: hidden; }
2378
+ & .crisp-recordpage-card-title { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.14px; color: var(--crisp-fg-primary); padding: var(--crisp-space-3) var(--crisp-space-3) var(--crisp-space-2); }
2379
+ & .crisp-recordpage-hl-card { border: 1px solid var(--crisp-border-subtle); border-radius: var(--crisp-radius-2xl); overflow: hidden; }
2380
+ /* gap-as-gridlines: a 1px gap over the border colour draws dividers at any
2381
+ column count, so the grid stays responsive (auto-fit) without per-cell
2382
+ nth-child border hacks that break when the column count changes. */
2383
+ & .crisp-recordpage-hl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1px; background: var(--crisp-border-subtle); }
2384
+ & .crisp-recordpage-hl-cell { position: relative; min-height: 84px; padding: var(--crisp-space-2-5) var(--crisp-space-3); background: var(--crisp-bg-surface); }
2385
+ & .crisp-recordpage-hl-icon { position: absolute; top: var(--crisp-space-2-5); inset-inline-end: var(--crisp-space-3); color: var(--crisp-fg-muted); }
2386
+ & .crisp-recordpage-hl-label { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); margin-bottom: var(--crisp-space-2-5); padding-inline-end: var(--crisp-space-4); }
2387
+ & .crisp-recordpage-hl-value { display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2388
+ & .crisp-recordpage-hl-value--empty { color: var(--crisp-fg-muted); font-weight: var(--crisp-weight-regular); }
2389
+
2390
+ & .crisp-recordpage-feed { display: flex; flex-direction: column; }
2391
+ & .crisp-recordpage-feed-item { display: flex; align-items: flex-start; gap: var(--crisp-space-2-5); padding: var(--crisp-space-2) 0; }
2392
+ & .crisp-recordpage-feed-dot { position: relative; display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; flex-shrink: 0; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-raised); color: var(--crisp-fg-muted); }
2393
+ & .crisp-recordpage-feed-body { flex: 1; min-width: 0; font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); }
2394
+ & .crisp-recordpage-feed-body b { font-weight: var(--crisp-weight-medium); }
2395
+ & .crisp-recordpage-feed-time { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); margin-top: 2px; }
2396
+ & .crisp-recordpage-feed-more { align-self: flex-start; margin-top: var(--crisp-space-1); border: none; background: none; padding: var(--crisp-space-1) 0; color: var(--crisp-bg-brand-solid); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2397
+ & .crisp-recordpage-feed-more:hover { text-decoration: underline; }
2398
+
2399
+ & .crisp-recordpage-section-head { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding: var(--crisp-space-1); }
2400
+ & .crisp-recordpage-section-head .crisp-recordpage-section-title { padding: 0; }
2401
+ & .crisp-recordpage-section-count { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-xs); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2402
+ & .crisp-recordpage-section-spacer { flex: 1; }
2403
+ & .crisp-recordpage-addbtn { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: 26px; padding: 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2404
+ & .crisp-recordpage-addbtn:hover { background: var(--crisp-bg-raised); }
2405
+ & .crisp-recordpage-addbtn svg { flex-shrink: 0; }
2406
+
2407
+ & .crisp-recordpage-composer { display: flex; flex-direction: column; gap: var(--crisp-space-2); padding: var(--crisp-space-2); border: 1px solid var(--crisp-border-default); border-radius: var(--crisp-radius-xl); background: var(--crisp-bg-surface); margin-bottom: var(--crisp-space-2); }
2408
+ & .crisp-recordpage-composer textarea { width: 100%; min-height: 56px; resize: vertical; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
2409
+ & .crisp-recordpage-composer textarea:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); border-radius: var(--crisp-radius-md); }
2410
+ & .crisp-recordpage-composer textarea::placeholder { color: var(--crisp-fg-muted); }
2411
+ & .crisp-recordpage-composer-actions { display: flex; justify-content: flex-end; align-items: center; gap: var(--crisp-space-1-5); }
2412
+ & .crisp-recordpage-btn { display: inline-flex; align-items: center; height: 28px; padding: 0 var(--crisp-space-2-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); background: var(--crisp-bg-surface); color: var(--crisp-fg-primary); }
2413
+ & .crisp-recordpage-btn:hover { background: var(--crisp-bg-raised); }
2414
+ & .crisp-recordpage-btn--primary { box-shadow: none; background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); }
2415
+ & .crisp-recordpage-btn--primary:disabled { opacity: 0.5; cursor: not-allowed; }
2416
+
2417
+ & .crisp-recordpage-note { display: flex; gap: var(--crisp-space-2-5); padding: var(--crisp-space-2-5) 0; border-top: 1px solid var(--crisp-border-subtle); }
2418
+ & .crisp-recordpage-note-body { flex: 1; min-width: 0; }
2419
+ & .crisp-recordpage-note-head { display: flex; align-items: center; gap: var(--crisp-space-1-5); margin-bottom: var(--crisp-space-0-5); }
2420
+ & .crisp-recordpage-note-author { font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2421
+ & .crisp-recordpage-note-time { font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2422
+ & .crisp-recordpage-note-text { font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); white-space: pre-wrap; word-break: break-word; }
2423
+
2424
+ & .crisp-recordpage-task { display: flex; align-items: flex-start; gap: var(--crisp-space-2); padding: var(--crisp-space-1-5) 0; border-top: 1px solid var(--crisp-border-subtle); }
2425
+ & .crisp-recordpage-task-text { flex: 1; min-width: 0; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); padding-top: 1px; }
2426
+ & .crisp-recordpage-task[data-done] .crisp-recordpage-task-text { text-decoration: line-through; color: var(--crisp-fg-muted); }
2427
+
2428
+ & .crisp-recordpage-emptycard { display: flex; flex-direction: column; align-items: center; gap: var(--crisp-space-1-5); padding: var(--crisp-space-6) var(--crisp-space-3); border: 1px dashed var(--crisp-border-default); border-radius: var(--crisp-radius-xl); color: var(--crisp-fg-muted); font-size: var(--crisp-text-md); text-align: center; }
2429
+ & .crisp-recordpage-emptycard svg { color: var(--crisp-fg-muted); opacity: 0.7; }
2430
+
2431
+ & .crisp-recordpage-action[data-active] svg { color: #f5b83d; fill: #f5b83d; }
2432
+
2433
+ & .crisp-recordstable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); }
2434
+ & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); }
2435
+ & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); }
2436
+ & .crisp-recordstable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-warning) 82%, var(--crisp-fg-primary)); }
2437
+ & .crisp-recordstable-tag[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); }
2438
+ & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); }
2439
+ & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); }
2440
+ & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); }
2441
+
2442
+ }
2443
+
2444
+ @media (prefers-reduced-motion: reduce) {
2445
+ .crisp-recordpage, .crisp-recordpage * {
2446
+ animation-duration: 0.01ms !important;
2447
+ animation-iteration-count: 1 !important;
2448
+ transition-duration: 0.01ms !important;
2449
+ }
2450
+ }
2451
+
2452
+ .crisp-recordpanel {
2453
+
2454
+ position: absolute; top: var(--crisp-space-2); inset-inline-end: var(--crisp-space-2); bottom: var(--crisp-space-2);
2455
+ z-index: 20; display: flex; flex-direction: column; overflow: hidden;
2456
+ width: 420px; max-width: calc(92% - var(--crisp-space-2));
2457
+ background: var(--crisp-bg-surface); border-radius: var(--crisp-radius-xl);
2458
+ box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3);
2459
+ font-family: var(--crisp-font-sans);
2460
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2461
+ transform: translateX(0); transition: transform .2s ease;
2462
+ @starting-style { transform: translateX(calc(100% + var(--crisp-space-2))); }
2463
+ & * { box-sizing: border-box; }
2464
+
2465
+ & .crisp-recordpanel-header { display: flex; align-items: center; gap: var(--crisp-space-2); height: 52px; flex-shrink: 0; padding: 0 var(--crisp-space-3); border-bottom: 1px solid var(--crisp-border-subtle); }
2466
+ & .crisp-recordpanel-fav { width: 22px; height: var(--crisp-size-chip); border-radius: var(--crisp-radius-sm); flex-shrink: 0; object-fit: cover; background: var(--crisp-bg-raised); }
2467
+ & .crisp-recordpanel-title { flex: 1; min-width: 0; font-size: var(--crisp-text-xl); font-weight: var(--crisp-weight-semibold); letter-spacing: -0.2px; color: var(--crisp-fg-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2468
+ & .crisp-recordpanel-iconbtn { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; transition: background-color .12s; }
2469
+ & .crisp-recordpanel-iconbtn:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2470
+
2471
+ & .crisp-recordpanel-body { flex: 1; min-height: 0; overflow-y: auto; padding: var(--crisp-space-2) var(--crisp-space-3); }
2472
+ & .crisp-recordpanel-sectionlabel { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); padding: var(--crisp-space-2) var(--crisp-space-1) var(--crisp-space-1); }
2473
+ & .crisp-recordpanel-field { display: flex; align-items: flex-start; gap: var(--crisp-space-2); min-height: 32px; padding: var(--crisp-space-1) var(--crisp-space-1); border-radius: var(--crisp-radius-md); }
2474
+ & .crisp-recordpanel-field:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); }
2475
+ & .crisp-recordpanel-field-label { display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 132px; flex-shrink: 0; padding-top: 3px; color: var(--crisp-fg-muted); font-size: var(--crisp-text-md); }
2476
+ & .crisp-recordpanel-field-label svg { flex-shrink: 0; }
2477
+ & .crisp-recordpanel-field-value { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--crisp-space-1); padding-top: 3px; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
2478
+ & .crisp-recordpanel-empty { color: var(--crisp-fg-muted); }
2479
+
2480
+ & .crisp-recordstable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
2481
+ & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
2482
+ & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-success) 30%, transparent); }
2483
+ & .crisp-recordstable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-warning) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-warning) 30%, transparent); }
2484
+ & .crisp-recordstable-tag[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-danger) 30%, transparent); }
2485
+ & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-purple) 30%, transparent); }
2486
+ & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-cyan) 30%, transparent); }
2487
+ & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-orange) 30%, transparent); }
2488
+ & .crisp-recordpanel-link { color: var(--crisp-bg-brand-solid); text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
2489
+ & .crisp-recordpanel-link:hover { text-decoration: underline; }
2490
+
2491
+ }
2492
+
2493
+ @media (prefers-reduced-motion: reduce) {
2494
+ .crisp-recordpanel, .crisp-recordpanel * {
2495
+ animation-duration: 0.01ms !important;
2496
+ animation-iteration-count: 1 !important;
2497
+ transition-duration: 0.01ms !important;
2498
+ }
2499
+ }
2500
+
2501
+ .crisp-recordstable {
2502
+
2503
+ box-sizing: border-box; position: relative; display: flex; flex-direction: column; min-height: 0; height: 100%; width: 100%; font-family: var(--crisp-font-sans); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2504
+ & * { box-sizing: border-box; }
2505
+
2506
+ /* toolbar */
2507
+ & .crisp-recordstable-toolbar { display: flex; align-items: center; gap: var(--crisp-space-1-5); padding: 0 var(--crisp-space-3) var(--crisp-space-2); }
2508
+ & .crisp-recordstable-search { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); color: var(--crisp-fg-muted); }
2509
+ & .crisp-recordstable-search svg { flex-shrink: 0; }
2510
+ & .crisp-recordstable-search input { border: none; outline: none; background: transparent; font-family: inherit; font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); width: 180px; }
2511
+ & .crisp-recordstable-search input::placeholder { color: var(--crisp-fg-muted); }
2512
+ & .crisp-recordstable-tool { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: transparent; box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-primary); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
2513
+ & .crisp-recordstable-tool:hover { background: var(--crisp-bg-raised); }
2514
+ & .crisp-recordstable-tool svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2515
+ & .crisp-recordstable-tool--active { background: var(--crisp-bg-raised); }
2516
+ & .crisp-recordstable-tool--ghost { box-shadow: none; background: color-mix(in srgb, var(--crisp-fg-primary) 3%, transparent); color: var(--crisp-fg-muted); }
2517
+ & .crisp-recordstable-tool--ghost:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
2518
+ & .crisp-recordstable-toolgroup { position: relative; display: inline-flex; }
2519
+ & .crisp-recordstable-menu { position: absolute; top: calc(100% + var(--crisp-space-1)); left: 0; z-index: 30; min-width: 232px; padding: var(--crisp-space-1); border-radius: var(--crisp-radius-lg); background: var(--crisp-bg-popover); box-shadow: inset 0 0 0 1px var(--crisp-ring-popover), 0 0 0 1px var(--crisp-shadow-popover1), 0 4px 8px -4px var(--crisp-shadow-popover2), 0 4px 12px -2px var(--crisp-shadow-popover3); display: flex; flex-direction: column; gap: var(--crisp-space-px); transform-origin: top; opacity: 1; transform: none; transition: opacity .13s ease, transform .13s ease; }
2520
+ & .crisp-recordstable-menu { @starting-style { opacity: 0; transform: scale(0.96); } }
2521
+ & .crisp-recordstable-ctx { z-index: 60; }
2522
+ & .crisp-recordstable-th[data-drop] { box-shadow: inset 2px 0 0 var(--crisp-bg-brand-solid); }
2523
+ & .crisp-recordstable-th-inner[draggable="true"]:active { cursor: grabbing; }
2524
+ & .crisp-recordstable-menu-head { padding: var(--crisp-space-1) var(--crisp-space-2) var(--crisp-space-0-5); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2525
+ & .crisp-recordstable-sortpop { min-width: 460px; overflow: visible; padding: var(--crisp-space-1-5); gap: var(--crisp-space-1); }
2526
+ & .crisp-recordstable-sort-empty { padding: var(--crisp-space-1) var(--crisp-space-1) var(--crisp-space-2); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2527
+ & .crisp-recordstable-sort-row { display: flex; align-items: center; gap: var(--crisp-space-1-5); }
2528
+ & .crisp-recordstable-sort-grip { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 28px; flex-shrink: 0; margin-right: calc(-1 * var(--crisp-space-1)); padding: 0; border: none; background: none; color: var(--crisp-fg-muted); cursor: grab; }
2529
+ & .crisp-recordstable-sort-grip:active { cursor: grabbing; }
2530
+ & .crisp-recordstable-sort-grip:hover { color: var(--crisp-fg-primary); }
2531
+ & .crisp-recordstable-sort-optlabel { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
2532
+ & .crisp-recordstable-sort-optlabel svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2533
+ & .crisp-recordstable-sort-field { flex: 1; min-width: 0; }
2534
+ & .crisp-recordstable-sort-dir { width: 136px; flex-shrink: 0; }
2535
+ & .crisp-recordstable-sort-field .crisp-select-trigger, & .crisp-recordstable-sort-dir .crisp-select-trigger { height: 28px; padding-right: var(--crisp-space-1); }
2536
+ & .crisp-recordstable-sort-remove { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; flex-shrink: 0; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted); cursor: pointer; transition: background-color .12s, color .12s; }
2537
+ & .crisp-recordstable-sort-remove:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2538
+ & .crisp-recordstable-sort-addrow { display: flex; padding: var(--crisp-space-0-5) 0; }
2539
+ & .crisp-recordstable-sort-add { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-2) 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-primary); cursor: pointer; transition: background-color .12s; }
2540
+ & .crisp-recordstable-sort-add:hover { background: var(--crisp-bg-raised); }
2541
+ & .crisp-recordstable-sort-add svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2542
+ & .crisp-recordstable-sort-foot { display: flex; padding: var(--crisp-space-1-5) var(--crisp-space-1) var(--crisp-space-0-5); }
2543
+ & .crisp-recordstable-sort-learn { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); font-size: var(--crisp-text-lg); color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); text-decoration: none; }
2544
+ & .crisp-recordstable-sort-learn svg { flex-shrink: 0; }
2545
+ & .crisp-recordstable-sort-learn:hover { color: var(--crisp-fg-primary); }
2546
+ & .crisp-recordstable-menu-item { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; border-radius: var(--crisp-radius-md); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: left; cursor: pointer; }
2547
+ & .crisp-recordstable-menu-item:hover { background: var(--crisp-bg-raised); }
2548
+ & .crisp-recordstable-menu-item:disabled { opacity: 0.4; cursor: default; }
2549
+ & .crisp-recordstable-menu-item:disabled:hover { background: none; }
2550
+ & .crisp-recordstable-menu-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2551
+ & .crisp-recordstable-menu-item[data-on] svg { color: var(--crisp-bg-brand-solid); }
2552
+ & .crisp-recordstable-menu-item .crisp-recordstable-menu-check { margin-left: auto; }
2553
+ & .crisp-recordstable-menu-input { height: var(--crisp-size-row); margin: var(--crisp-space-0-5); padding: 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); background: var(--crisp-bg-surface); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); outline: none; }
2554
+ & .crisp-recordstable-menu-sep { height: 1px; background: var(--crisp-border-subtle); margin: var(--crisp-space-0-5) 0; }
2555
+ & .crisp-recordstable-menu--up { top: auto; bottom: calc(100% + var(--crisp-space-1)); transform-origin: bottom; }
2556
+ & .crisp-recordstable-menu--right { left: auto; right: 0; }
2557
+ & .crisp-recordstable-menu--fixed { position: fixed; top: auto; left: auto; z-index: 40; }
2558
+ & .crisp-recordstable-menu--hdr { min-width: 200px; }
2559
+ & .crisp-recordstable-menu-item--danger { color: var(--crisp-bg-danger); }
2560
+ & .crisp-recordstable-menu-item--danger svg { color: var(--crisp-bg-danger); }
2561
+ & .crisp-recordstable-menu-item--danger:hover { background: color-mix(in srgb, var(--crisp-bg-danger) 10%, transparent); }
2562
+ & .crisp-recordstable-menu-check { margin-left: auto; color: var(--crisp-bg-brand-solid); }
2563
+ & .crisp-recordstable-fchip { display: inline-flex; align-items: center; height: var(--crisp-size-row); padding-right: var(--crisp-space-1); border-radius: var(--crisp-radius-md); box-shadow: inset 0 0 0 1px var(--crisp-border-default); background: var(--crisp-bg-surface); font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); white-space: nowrap; }
2564
+ & .crisp-recordstable-fchip-main { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 100%; margin: 0; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-2); border: none; background: none; font-family: inherit; font-size: var(--crisp-text-md); color: var(--crisp-fg-primary); cursor: pointer; }
2565
+ & .crisp-recordstable-fchip-field { font-weight: var(--crisp-weight-medium); }
2566
+ & .crisp-recordstable-fchip-op { color: var(--crisp-fg-muted); }
2567
+ & .crisp-recordstable-fchip-val { font-weight: var(--crisp-weight-medium); max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
2568
+ & .crisp-recordstable-fchip-x { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: var(--crisp-fg-muted); cursor: pointer; }
2569
+ & .crisp-recordstable-fchip-x:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 10%, transparent); color: var(--crisp-fg-primary); }
2570
+ & .crisp-recordstable-spacer { flex: 1; }
2571
+ & .crisp-recordstable-count { font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2572
+ & .crisp-recordstable-new { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: var(--crisp-size-row); padding: 0 var(--crisp-space-2-5); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-brand-solid); color: var(--crisp-fg-on-brand); font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; transition: background-color .12s; }
2573
+ & .crisp-recordstable-new:hover { background: var(--crisp-bg-brand-solid-pressed); }
2574
+
2575
+ /* scroll frame + table */
2576
+ & .crisp-recordstable-scroll { flex: 1; min-height: 0; overflow: auto; background: var(--crisp-bg-surface); border-top: 1px solid var(--crisp-border-subtle); scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--crisp-fg-primary) 22%, transparent) transparent; }
2577
+ & .crisp-recordstable-scroll::-webkit-scrollbar { width: 10px; height: 10px; }
2578
+ & .crisp-recordstable-scroll::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--crisp-fg-primary) 20%, transparent); border-radius: var(--crisp-radius-full); border: 2px solid var(--crisp-bg-surface); background-clip: padding-box; }
2579
+ & .crisp-recordstable-scroll::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 34%, transparent); background-clip: padding-box; }
2580
+ & .crisp-recordstable-scroll::-webkit-scrollbar-corner { background: transparent; }
2581
+ & .crisp-recordstable-table { table-layout: fixed; border-collapse: separate; border-spacing: 0; }
2582
+ & .crisp-recordstable-th, & .crisp-recordstable-td { position: relative; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); border-bottom: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); text-align: start; white-space: nowrap; overflow: hidden; }
2583
+ & .crisp-recordstable-th { position: sticky; top: 0; z-index: 2; padding: 0; height: var(--crisp-size-tableHeader); background: var(--crisp-bg-surface); font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); letter-spacing: -0.14px; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); user-select: none; }
2584
+ & .crisp-recordstable-th-inner { display: flex; align-items: center; gap: var(--crisp-space-1-5); width: 100%; height: 100%; margin: 0; padding: 0 var(--crisp-space-2); border: none; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-align: start; cursor: pointer; }
2585
+ & .crisp-recordstable-th-inner svg { flex-shrink: 0; color: color-mix(in srgb, var(--crisp-fg-primary) 45%, transparent); }
2586
+ & .crisp-recordstable-th-label { flex: 1; overflow: hidden; text-overflow: ellipsis; }
2587
+ & .crisp-recordstable-th-rename { width: 100%; min-width: 0; height: 100%; margin: 0; padding: 0; border: none; outline: none; background: none; color: inherit; font: inherit; letter-spacing: inherit; }
2588
+ & .crisp-recordstable-th-rename:focus { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
2589
+ & .crisp-recordstable-sort { flex-shrink: 0; opacity: 0.4; transition: opacity .12s; color: color-mix(in srgb, var(--crisp-fg-primary) 45%, transparent); }
2590
+ & .crisp-recordstable-th:hover .crisp-recordstable-sort, & .crisp-recordstable-th[data-sorted] .crisp-recordstable-sort { opacity: 1; }
2591
+ & .crisp-recordstable-th[data-sorted="desc"] .crisp-recordstable-sort svg { transform: rotate(180deg); }
2592
+
2593
+ /* column resize handle */
2594
+ & .crisp-recordstable-resize { position: absolute; top: 0; inset-inline-end: -3px; width: 9px; height: 100%; cursor: col-resize; z-index: 6; touch-action: none; }
2595
+ & .crisp-recordstable-resize::after { content: ""; position: absolute; top: 0; inset-inline-start: 3px; width: 2px; height: 100%; background: var(--crisp-bg-brand-solid); opacity: 0; transition: opacity .12s; }
2596
+ & .crisp-recordstable-resize:hover::after, & .crisp-recordstable-resize[data-resizing]::after { opacity: 1; }
2597
+
2598
+ /* add-column header */
2599
+ & .crisp-recordstable-addcol { min-width: 44px; }
2600
+ & .crisp-recordstable-addcol button { display: flex; align-items: center; justify-content: center; width: 44px; height: 100%; border: none; background: none; color: var(--crisp-fg-muted); cursor: pointer; }
2601
+ & .crisp-recordstable-addcol button:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2602
+
2603
+ /* cells */
2604
+ /* font-weight is explicit because the first cell of each row is a
2605
+ th[scope=row] — the record's name is what the row IS — and a th
2606
+ defaults to bold. Measured before the change and unchanged after: 400. */
2607
+ & .crisp-recordstable-td { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-regular); color: var(--crisp-fg-primary); background: var(--crisp-bg-surface); cursor: default; }
2608
+ & .crisp-recordstable-td--editable { cursor: text; }
2609
+ /* keyboard/click cell selection (spreadsheet-style) */
2610
+ & .crisp-recordstable-td[data-selected] { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: -2px; border-radius: var(--crisp-radius-sm); z-index: 3; }
2611
+ & .crisp-recordstable-scroll:focus { outline: none; }
2612
+ /* picker cells (status / date / reference) host a ghost control edge-to-edge */
2613
+ & .crisp-recordstable-td--picker { padding: 0; }
2614
+ & .crisp-recordstable-td--picker .crisp-select-trigger, & .crisp-recordstable-td--picker .crisp-datepicker-trigger, & .crisp-recordstable-td--picker .crisp-multiselect-trigger { width: 100%; height: 100%; min-height: 0; border-radius: 0; box-shadow: none; padding: 0 var(--crisp-space-2); }
2615
+ & .crisp-recordstable-td--picker .crisp-multiselect-trigger:hover { background: none; }
2616
+ & .crisp-recordstable-td--picker .crisp-multiselect-trigger[data-open] { box-shadow: inset 0 0 0 1.5px var(--crisp-bg-brand-solid); }
2617
+ /* tag cell: one compact clipped line of full chips, no chevron (opens the picker on click) */
2618
+ & .crisp-recordstable-td--picker .crisp-multiselect-chips { flex-wrap: nowrap; overflow: hidden; }
2619
+ & .crisp-recordstable-td--picker .crisp-multiselect-chips .crisp-recordstable-tag { flex-shrink: 0; max-width: none; }
2620
+ & .crisp-recordstable-td--picker .crisp-multiselect-chevron { display: none; }
2621
+ & .crisp-recordstable-td--picker .crisp-multiselect-placeholder { color: var(--crisp-fg-muted); }
2622
+ & .crisp-recordstable-status { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; }
2623
+ & .crisp-recordstable-status-dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--crisp-radius-full); }
2624
+ & .crisp-recordstable-cell { display: flex; align-items: center; gap: var(--crisp-space-2); height: 100%; min-width: 0; }
2625
+ & .crisp-recordstable-cell--num { justify-content: flex-end; font-variant-numeric: tabular-nums; }
2626
+ & .crisp-recordstable-cell--tags { gap: var(--crisp-space-1); }
2627
+ & .crisp-recordstable-tag { display: inline-flex; align-items: center; height: var(--crisp-size-chip); padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-chip); font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-medium); white-space: nowrap; background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 82%, transparent); box-shadow: inset 0 0 0 1px var(--crisp-border-subtle); }
2628
+ & .crisp-recordstable-tag[data-tone="brand"] { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 14%, transparent); color: color-mix(in srgb, var(--crisp-bg-brand-solid) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-brand-solid) 30%, transparent); }
2629
+ & .crisp-recordstable-tag[data-tone="success"] { background: color-mix(in srgb, var(--crisp-bg-success) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-success) 78%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-success) 30%, transparent); }
2630
+ & .crisp-recordstable-tag[data-tone="warning"] { background: color-mix(in srgb, var(--crisp-bg-warning) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-warning) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-warning) 30%, transparent); }
2631
+ & .crisp-recordstable-tag[data-tone="danger"] { background: color-mix(in srgb, var(--crisp-bg-danger) 15%, transparent); color: color-mix(in srgb, var(--crisp-bg-danger) 80%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-danger) 30%, transparent); }
2632
+ & .crisp-recordstable-tag[data-tone="purple"] { background: color-mix(in srgb, var(--crisp-bg-purple) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-purple) 80%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-purple) 30%, transparent); }
2633
+ & .crisp-recordstable-tag[data-tone="cyan"] { background: color-mix(in srgb, var(--crisp-bg-cyan) 18%, transparent); color: color-mix(in srgb, var(--crisp-bg-cyan) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-cyan) 30%, transparent); }
2634
+ & .crisp-recordstable-tag[data-tone="orange"] { background: color-mix(in srgb, var(--crisp-bg-orange) 16%, transparent); color: color-mix(in srgb, var(--crisp-bg-orange) 82%, var(--crisp-fg-primary)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-bg-orange) 30%, transparent); }
2635
+ & .crisp-recordstable-muted { color: var(--crisp-fg-muted); }
2636
+ & .crisp-recordstable-entity { display: flex; align-items: center; gap: var(--crisp-space-1-5); min-width: 0; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); text-decoration: none; }
2637
+ & .crisp-recordstable-entity:hover .crisp-recordstable-entity-name { text-decoration: underline; }
2638
+ & .crisp-recordstable-entity-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2639
+ & button.crisp-recordstable-entity-name--link { margin: 0; padding: 0; border: none; background: none; font: inherit; color: inherit; letter-spacing: inherit; text-align: start; cursor: pointer; max-width: 100%; }
2640
+ & .crisp-recordstable-fav { width: var(--crisp-size-icon); height: var(--crisp-size-icon); border-radius: var(--crisp-radius-sm); flex-shrink: 0; object-fit: cover; background: var(--crisp-bg-raised); }
2641
+ & .crisp-recordstable-open { position: absolute; inset-inline-end: var(--crisp-space-1); top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-muted); font-family: inherit; cursor: pointer; opacity: 0; transition: opacity .12s, background-color .12s; z-index: 3; }
2642
+ & .crisp-recordstable-open:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2643
+ & tbody tr:hover .crisp-recordstable-open { opacity: 1; }
2644
+ & .crisp-recordstable-link { color: var(--crisp-fg-primary); text-decoration: none; overflow: hidden; text-overflow: ellipsis; }
2645
+ & .crisp-recordstable-link:hover { text-decoration: underline; }
2646
+
2647
+ /* inline edit input */
2648
+ & .crisp-recordstable-edit { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0 var(--crisp-space-2); border: none; outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: -2px; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface); font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); z-index: 5; }
2649
+ & .crisp-recordstable-edit--num { text-align: end; font-variant-numeric: tabular-nums; }
2650
+
2651
+ /* selection / hover / sticky */
2652
+ & .crisp-recordstable-col-check { width: 40px; min-width: 40px; padding: 0; }
2653
+ & .crisp-recordstable-check-inner { display: flex; align-items: center; justify-content: center; height: 100%; }
2654
+ & .crisp-recordstable-col-check, & .crisp-recordstable-col-entity { position: sticky; z-index: 3; background: var(--crisp-bg-surface); }
2655
+ /* The sticky pin is a LOGICAL offset: with physical `left` these columns
2656
+ were not pinned at all under RTL -- scrolled, they left the viewport
2657
+ entirely (measured: viewport 13..773, check column at x=1333). Nothing in
2658
+ JS measures these, so converting them is safe; the two properties below
2659
+ that have no logical form get an explicit RTL rule rather than being
2660
+ left to point the wrong way. */
2661
+ & .crisp-recordstable-col-check { inset-inline-start: 0; }
2662
+ & .crisp-recordstable-col-entity { inset-inline-start: 40px; clip-path: inset(0 -38px 0 0); transition: box-shadow .2s ease; }
2663
+ [dir="rtl"] & .crisp-recordstable-col-entity { clip-path: inset(0 0 0 -38px); }
2664
+ & thead .crisp-recordstable-col-check, & thead .crisp-recordstable-col-entity { z-index: 4; }
2665
+ /* soft shadow on the sticky column edge once the grid is scrolled horizontally */
2666
+ & .crisp-recordstable-scroll[data-scrolled] .crisp-recordstable-col-entity { box-shadow: 6px 0 16px 4px rgba(0,0,0,0.12); }
2667
+ /* box-shadow has no logical form either: the bleed follows the scrolled
2668
+ content, which is the opposite side under RTL. */
2669
+ [dir="rtl"] & .crisp-recordstable-scroll[data-scrolled] .crisp-recordstable-col-entity { box-shadow: -6px 0 16px 4px rgba(0,0,0,0.12); }
2670
+ /* AI-enriched values carry a purple wash. Measured live:
2671
+ a full-bleed overlay at #9b69ff 4% (== bgPurple), composited OVER
2672
+ whatever row-state background the cell already has, which is why it
2673
+ is an ::after and not a background. */
2674
+ & .crisp-recordstable-td[data-enriched]::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: color-mix(in srgb, var(--crisp-bg-purple) 4%, transparent); }
2675
+ & tbody tr:hover .crisp-recordstable-td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, var(--crisp-bg-surface)); }
2676
+ & tbody tr[data-selected] .crisp-recordstable-td { background: color-mix(in srgb, var(--crisp-bg-brand-solid) 10%, var(--crisp-bg-surface)); }
2677
+ & tbody tr[data-selected]:hover .crisp-recordstable-td { background: color-mix(in srgb, var(--crisp-fg-primary) 4%, color-mix(in srgb, var(--crisp-bg-brand-solid) 10%, var(--crisp-bg-surface))); }
2678
+ & .crisp-recordstable-th:last-child, & .crisp-recordstable-td:last-child { border-inline-end: none; }
2679
+
2680
+ /* add-row footer */
2681
+ & .crisp-recordstable-addrow { display: flex; align-items: center; gap: var(--crisp-space-2); width: 100%; height: var(--crisp-size-tableRow); padding: 0 var(--crisp-space-2); border: none; border-top: 1px solid var(--crisp-border-subtle); background: var(--crisp-bg-surface); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-lg); cursor: pointer; }
2682
+ & .crisp-recordstable-addrow:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2683
+ /* zero-row empty state — centred in the body region (headers + summary stay) */
2684
+ & .crisp-recordstable-empty { display: flex; align-items: center; justify-content: center; min-height: 320px; padding: var(--crisp-space-8) var(--crisp-space-4); }
2685
+
2686
+ /* summary footer — per-column aggregation, sticky to the bottom */
2687
+ & .crisp-recordstable-sum { position: sticky; bottom: 0; z-index: 2; height: var(--crisp-size-tableRow); padding: 0; border-top: 1px solid var(--crisp-border-subtle); border-inline-end: 1px solid var(--crisp-border-subtle); background: var(--crisp-bg-surface); }
2688
+ & tfoot .crisp-recordstable-col-check, & tfoot .crisp-recordstable-col-entity { position: sticky; bottom: 0; z-index: 3; }
2689
+ & .crisp-recordstable-sum:last-child { border-inline-end: none; }
2690
+ & .crisp-recordstable-sum-btn { display: flex; align-items: center; justify-content: flex-end; gap: var(--crisp-space-1-5); width: 100%; height: 100%; margin: 0; padding: 0 var(--crisp-space-3); border: none; background: none; color: color-mix(in srgb, var(--crisp-fg-primary) 63%, transparent); font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); cursor: pointer; white-space: nowrap; overflow: hidden; }
2691
+ & .crisp-recordstable-sum-btn:hover { background: var(--crisp-bg-raised); }
2692
+ & .crisp-recordstable-sum-label { color: color-mix(in srgb, var(--crisp-fg-primary) 45%, transparent); text-transform: capitalize; }
2693
+ & .crisp-recordstable-sum-value { color: var(--crisp-fg-primary); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; }
2694
+ & .crisp-recordstable-sumgroup { width: 100%; height: 100%; }
2695
+ & .crisp-recordstable-pin { flex-shrink: 0; margin-inline-start: var(--crisp-space-1); color: var(--crisp-bg-warning); fill: color-mix(in srgb, var(--crisp-bg-warning) 35%, transparent); }
2696
+ & .crisp-recordstable-sum-btn[data-empty] { opacity: 0; justify-content: flex-start; }
2697
+ & .crisp-recordstable-sum-btn[data-empty]:hover { opacity: 1; }
2698
+
2699
+ /* bulk action bar lives in its own component now — see components/bulkbar */
2700
+ & .crisp-recordstable-bulk-sep { width: 1px; height: 20px; margin: 0 var(--crisp-space-0-5); background: var(--crisp-border-subtle); }
2701
+ & .crisp-recordstable-bulk-close { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; border: none; border-radius: var(--crisp-radius-md); background: transparent; color: var(--crisp-fg-muted); cursor: pointer; }
2702
+ & .crisp-recordstable-bulk-close:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2703
+
2704
+ /* announced, never drawn */
2705
+ & .crisp-recordstable-live {
2706
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
2707
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
2708
+ }
2709
+
2710
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2711
+
2712
+ }
2713
+
2714
+ @media (prefers-reduced-motion: reduce) {
2715
+ .crisp-recordstable, .crisp-recordstable * {
2716
+ animation-duration: 0.01ms !important;
2717
+ animation-iteration-count: 1 !important;
2718
+ transition-duration: 0.01ms !important;
2719
+ }
2720
+ }
2721
+
2722
+ .crisp-richtext {
2723
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2724
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2725
+
2726
+ & .crisp-rte-title { font-size: 32px; line-height: 36px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.6px; color: var(--crisp-fg-primary); outline: none; }
2727
+ & .crisp-rte-title[data-empty]::before { content: attr(data-placeholder); color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); pointer-events: none; }
2728
+
2729
+ & .crisp-rte-body { margin-top: var(--crisp-space-3); font-size: var(--crisp-text-lg); line-height: 20px; color: var(--crisp-fg-primary); outline: none; }
2730
+ & .crisp-rte-body[data-empty]::before { content: attr(data-placeholder); color: color-mix(in srgb, var(--crisp-fg-primary) 28%, transparent); pointer-events: none; }
2731
+ & .crisp-rte-body > * { margin: 0; }
2732
+ & .crisp-rte-body > * + * { margin-top: var(--crisp-space-2); }
2733
+ & .crisp-rte-body h1 { font-size: var(--crisp-text-xl); line-height: 28px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.3px; margin-top: var(--crisp-space-4); }
2734
+ & .crisp-rte-body h2 { font-size: 17px; line-height: 24px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.2px; margin-top: var(--crisp-space-3); }
2735
+ & .crisp-rte-body h3 { font-size: var(--crisp-text-lg); line-height: 20px; font-weight: var(--crisp-weight-semibold); margin-top: var(--crisp-space-2-5); }
2736
+ & .crisp-rte-body ul, & .crisp-rte-body ol { padding-inline-start: var(--crisp-space-5); }
2737
+ & .crisp-rte-body li { margin-top: var(--crisp-space-1); }
2738
+ & .crisp-rte-body blockquote { padding-inline-start: var(--crisp-space-3); border-inline-start: 2px solid var(--crisp-border-default); color: var(--crisp-fg-muted); }
2739
+ & .crisp-rte-body code { font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; font-size: var(--crisp-text-md); padding: 1px var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); }
2740
+ & .crisp-rte-body a { color: var(--crisp-bg-brand-solid); text-decoration: underline; text-underline-offset: 2px; }
2741
+ & .crisp-rte-body strong { font-weight: var(--crisp-weight-semibold); }
2742
+
2743
+ & .crisp-rte-toolbar { position: fixed; z-index: 70; display: inline-flex; align-items: center; gap: 2px; padding: var(--crisp-space-0-5); border-radius: var(--crisp-radius-md); background: #20242c; box-shadow: 0 8px 28px -6px rgba(0,0,0,0.36), 0 2px 6px -2px rgba(0,0,0,0.24); transform: translate(-50%, -100%); opacity: 1; transition: opacity 0.1s ease; }
2744
+ & .crisp-rte-toolbar { @starting-style { opacity: 0; } }
2745
+ & .crisp-rte-tool { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: none; color: rgba(255,255,255,0.86); font-family: inherit; cursor: pointer; transition: background-color .1s; }
2746
+ & .crisp-rte-tool:hover { background: rgba(255,255,255,0.12); color: #fff; }
2747
+ & .crisp-rte-tool[data-active] { color: var(--crisp-bg-brand-solid); }
2748
+ & .crisp-rte-tool-sep { width: 1px; height: 16px; margin: 0 2px; background: rgba(255,255,255,0.16); }
2749
+ }
2750
+
2751
+ @media (prefers-reduced-motion: reduce) {
2752
+ .crisp-richtext, .crisp-richtext * {
2753
+ animation-duration: 0.01ms !important;
2754
+ animation-iteration-count: 1 !important;
2755
+ transition-duration: 0.01ms !important;
2756
+ }
2757
+ }
2758
+
2759
+ .crisp-settingssection {
2760
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans);
2761
+ & .crisp-settingssection-head { display: flex; align-items: flex-start; gap: var(--crisp-space-2); }
2762
+ & .crisp-settingssection-heading { flex: 1; min-width: 0; }
2763
+ & .crisp-settingssection-title { font-size: var(--crisp-text-xl); line-height: 24px; font-weight: var(--crisp-weight-semibold); letter-spacing: -0.2px; color: var(--crisp-fg-primary); }
2764
+ & .crisp-settingssection-sub { margin-top: var(--crisp-space-0-5); font-size: var(--crisp-text-md); line-height: 18px; color: var(--crisp-fg-muted); }
2765
+ & .crisp-settingssection-action { flex-shrink: 0; }
2766
+ & .crisp-settingssection-body { display: flex; flex-direction: column; gap: var(--crisp-space-4); margin-top: var(--crisp-space-3); }
2767
+ }
2768
+
2769
+ .crisp-settingsshell {
2770
+ display: flex; min-height: 0; box-sizing: border-box; font-family: var(--crisp-font-sans); color: var(--crisp-fg-primary);
2771
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2772
+
2773
+ & .crisp-settingsshell-nav { display: flex; flex-direction: column; width: 256px; flex-shrink: 0; min-height: 0; padding: var(--crisp-space-3); border-inline-end: 1px solid var(--crisp-border-subtle); }
2774
+ & .crisp-settingsshell-back { display: inline-flex; align-items: center; gap: var(--crisp-space-1-5); height: 28px; padding: 0 var(--crisp-space-1); margin: 0 0 var(--crisp-space-2); border: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); color: var(--crisp-fg-primary); cursor: pointer; border-radius: var(--crisp-radius-md); }
2775
+ & .crisp-settingsshell-back svg { color: var(--crisp-fg-muted); }
2776
+ & .crisp-settingsshell-back:hover svg { color: var(--crisp-fg-primary); }
2777
+
2778
+ & .crisp-settingsshell-search { display: flex; align-items: center; gap: var(--crisp-space-2); height: 32px; margin-bottom: var(--crisp-space-2); padding: 0 var(--crisp-space-2-5); border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-border-default); color: var(--crisp-fg-muted); }
2779
+ /* The field box owns the ring, so focus has to move it -- the inner
2780
+ input kills its own outline. Measured live: a focused field's
2781
+ input carries box-shadow: none while its wrapper carries
2782
+ inset 0 0 0 1px #266df0. */
2783
+ & .crisp-settingsshell-search:focus-within { box-shadow: inset 0 0 0 1px var(--crisp-bg-brand-solid); }
2784
+ & .crisp-settingsshell-search svg { flex-shrink: 0; }
2785
+ & .crisp-settingsshell-search input { flex: 1; min-width: 0; border: none; outline: none; background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); }
2786
+ & .crisp-settingsshell-search input::placeholder { color: var(--crisp-fg-muted); }
2787
+
2788
+ & .crisp-settingsshell-groups { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: var(--crisp-space-2-5); }
2789
+ & .crisp-settingsshell-group { display: flex; flex-direction: column; gap: 1px; }
2790
+ & .crisp-settingsshell-group-label { padding: var(--crisp-space-1) var(--crisp-space-2); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2791
+ & .crisp-settingsshell-item { display: flex; align-items: center; gap: var(--crisp-space-2); height: 30px; padding: 0 var(--crisp-space-2); margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; font-family: inherit; font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary); text-align: start; cursor: pointer; transition: background-color .12s; }
2792
+ & .crisp-settingsshell-item svg { flex-shrink: 0; color: var(--crisp-fg-muted); }
2793
+ & .crisp-settingsshell-item-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2794
+ & .crisp-settingsshell-item:hover { background: var(--crisp-bg-raised); }
2795
+ & .crisp-settingsshell-item[data-active] { background: var(--crisp-bg-raised); font-weight: var(--crisp-weight-medium); }
2796
+ & .crisp-settingsshell-item[data-active] svg { color: var(--crisp-fg-primary); }
2797
+ & .crisp-settingsshell-empty { padding: var(--crisp-space-3) var(--crisp-space-2); font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2798
+
2799
+ & .crisp-settingsshell-content { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; padding: var(--crisp-space-6) var(--crisp-space-8); }
2800
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2801
+
2802
+ }
2803
+
2804
+ @media (prefers-reduced-motion: reduce) {
2805
+ .crisp-settingsshell, .crisp-settingsshell * {
2806
+ animation-duration: 0.01ms !important;
2807
+ animation-iteration-count: 1 !important;
2808
+ transition-duration: 0.01ms !important;
2809
+ }
2810
+ }
2811
+
2812
+ .crisp-sidebar {
2813
+ box-sizing: border-box; display: flex; flex-direction: column; width: 275px; height: 100%; background: var(--crisp-bg-sidebar)
2814
+ ; border-inline-end: 1px solid var(--crisp-border-subtle)
2815
+ ; padding: var(--crisp-space-2)
2816
+ ; font-family: var(--crisp-font-sans)
2817
+ ; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-y: auto; & .crisp-sidebar-section { display: flex; flex-direction: column; gap: var(--crisp-space-px); margin-top: var(--crisp-space-2); }
2818
+ & .crisp-sidebar-section[data-collapsed] { display: none; }
2819
+ & .crisp-sidebar-label { font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); }
2820
+ & .crisp-sidebar-section-header { display: flex; align-items: center; gap: var(--crisp-space-1); width: 100%; margin: 0; border: none; background: none; padding: var(--crisp-space-1-5) var(--crisp-space-2) var(--crisp-space-0-5); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-sm); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); cursor: pointer; }
2821
+ & .crisp-sidebar-section-header svg { flex-shrink: 0; transition: transform .15s ease; }
2822
+ & .crisp-sidebar-section-header[data-collapsed] svg { transform: rotate(-90deg); }
2823
+ & .crisp-sidebar-ws { display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-header); padding: 0 var(--crisp-space-2); border-radius: var(--crisp-radius-lg); cursor: pointer; transition: background-color 0.16s; }
2824
+ & .crisp-sidebar-ws:hover { background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent); }
2825
+ & .crisp-sidebar-ws-name { font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-semibold); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2826
+ & .crisp-sidebar-ws-collapse { margin-inline-start: auto; }
2827
+ & .crisp-sidebar-searchrow { display: flex; align-items: center; gap: var(--crisp-space-1-5); margin-top: var(--crisp-space-2-5); padding-inline-end: var(--crisp-space-2); }
2828
+ & .crisp-sidebar-footer { margin-top: auto; display: flex; flex-direction: column; gap: var(--crisp-space-0-5); }
2829
+ & .crisp-sidebar-trial { display: flex; align-items: center; justify-content: space-between; gap: var(--crisp-space-2); padding: var(--crisp-space-1-5) var(--crisp-space-2); font-size: var(--crisp-text-sm); color: var(--crisp-fg-muted); }
2830
+ & .crisp-sidebar-search { box-sizing: border-box; flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--crisp-space-2); height: var(--crisp-size-row); margin: 0; padding: 0 var(--crisp-space-1) 0 var(--crisp-space-2); border: none; border-radius: var(--crisp-radius-md); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px var(--crisp-ring-neutral), 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04); color: var(--crisp-fg-muted); font-family: inherit; font-size: var(--crisp-text-lg); text-align: start; cursor: pointer; transition: background-color 0.14s; }
2831
+ & .crisp-sidebar-search:hover { background: var(--crisp-bg-raised); }
2832
+ & .crisp-sidebar-search-label { flex: 1; color: var(--crisp-fg-primary); font-weight: var(--crisp-weight-medium); }
2833
+ & .crisp-sidebar-search-kbd { margin-inline-start: auto; display: inline-flex; align-items: center; height: 18px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 8%, transparent); color: color-mix(in srgb, var(--crisp-fg-primary) 50%, transparent); font-size: var(--crisp-text-xs); }
2834
+ & .crisp-sidebar-pill { border-radius: var(--crisp-radius-full); align-self: center; width: auto; height: 32px; padding-inline: var(--crisp-space-4); }
2835
+ & .crisp-sidebar-divider { height: 0; border: none; border-top: 1px solid var(--crisp-border-subtle); margin: var(--crisp-space-2) calc(-1 * var(--crisp-space-2)) 0; }
2836
+ & .crisp-sidebar-newlist { box-sizing: border-box; display: flex; align-items: center; justify-content: center; width: 100%; height: var(--crisp-size-row); border-radius: var(--crisp-radius-md); border: 1px dashed var(--crisp-border-default); background: transparent; color: var(--crisp-fg-muted); font-family: var(--crisp-font-sans); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); cursor: pointer; }
2837
+ & .crisp-sidebar-newlist:hover { background: var(--crisp-bg-raised); color: var(--crisp-fg-primary); }
2838
+
2839
+ [dir="rtl"] & [data-rtl-flip] { transform: scaleX(-1); }
2840
+
2841
+ }
2842
+
2843
+ @media (prefers-reduced-motion: reduce) {
2844
+ .crisp-sidebar, .crisp-sidebar * {
2845
+ animation-duration: 0.01ms !important;
2846
+ animation-iteration-count: 1 !important;
2847
+ transition-duration: 0.01ms !important;
2848
+ }
2849
+ }
2850
+
2851
+ .crisp-tasklist {
2852
+ display: flex; flex-direction: column; box-sizing: border-box; font-family: var(--crisp-font-sans);
2853
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2854
+
2855
+ & .crisp-tasklist-group { display: flex; align-items: center; gap: var(--crisp-space-1-5); height: 36px; padding: 0 var(--crisp-space-2); font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-muted); }
2856
+ & .crisp-tasklist-group-count { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-sm); background: color-mix(in srgb, var(--crisp-fg-primary) 6%, transparent); font-size: var(--crisp-text-xs); color: var(--crisp-fg-muted); }
2857
+
2858
+ & .crisp-tasklist-row { display: flex; align-items: center; gap: var(--crisp-space-2-5); height: 52px; padding: 0 var(--crisp-space-2); border-top: 1px solid var(--crisp-border-subtle); }
2859
+ & .crisp-tasklist-row:first-child { border-top: none; }
2860
+
2861
+ & .crisp-tasklist-check { appearance: none; -webkit-appearance: none; box-sizing: border-box; flex-shrink: 0; margin: 0; width: 16px; height: 16px; border: none; border-radius: var(--crisp-radius-full); background: var(--crisp-bg-surface); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 9%, transparent); cursor: pointer; transition: background-color .12s, box-shadow .12s; }
2862
+ & .crisp-tasklist-check:hover { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--crisp-fg-primary) 30%, transparent); }
2863
+ & .crisp-tasklist-check:checked { background: var(--crisp-bg-brand-solid) center / 10px no-repeat; box-shadow: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 6.5 5 9l4.5-5'/%3E%3C/svg%3E"); }
2864
+ & .crisp-tasklist-check:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2865
+
2866
+ & .crisp-tasklist-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--crisp-text-lg); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary); }
2867
+ & .crisp-tasklist-row[data-done] .crisp-tasklist-title { color: var(--crisp-fg-muted); text-decoration: line-through; }
2868
+
2869
+ & .crisp-tasklist-meta { display: inline-flex; align-items: center; gap: var(--crisp-space-3); flex-shrink: 0; }
2870
+ & .crisp-tasklist-due { font-size: var(--crisp-text-lg); color: var(--crisp-fg-muted); white-space: nowrap; }
2871
+ & .crisp-tasklist-due[data-overdue] { color: var(--crisp-bg-danger); }
2872
+
2873
+ & .crisp-tasklist-empty { padding: var(--crisp-space-4) var(--crisp-space-2); text-align: center; font-size: var(--crisp-text-md); color: var(--crisp-fg-muted); }
2874
+ }
2875
+
2876
+ @media (prefers-reduced-motion: reduce) {
2877
+ .crisp-tasklist, .crisp-tasklist * {
2878
+ animation-duration: 0.01ms !important;
2879
+ animation-iteration-count: 1 !important;
2880
+ transition-duration: 0.01ms !important;
2881
+ }
2882
+ }
2883
+
2884
+ .crisp-trialbanner {
2885
+ display: flex; align-items: center; gap: var(--crisp-space-1-5); box-sizing: border-box; min-height: 28px;
2886
+ padding: 0 var(--crisp-space-1); border-radius: var(--crisp-radius-lg); font-family: var(--crisp-font-sans);
2887
+ font-size: var(--crisp-text-lg); color: var(--crisp-fg-primary);
2888
+ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
2889
+
2890
+ & .crisp-trialbanner-icon { display: inline-flex; flex-shrink: 0; color: var(--crisp-fg-muted); }
2891
+ & .crisp-trialbanner-msg { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2892
+ & .crisp-trialbanner-action { display: inline-flex; align-items: center; gap: var(--crisp-space-1); height: 20px; flex-shrink: 0;
2893
+ padding: 0 var(--crisp-space-1-5); margin: 0; border: none; border-radius: var(--crisp-radius-sm); background: var(--crisp-bg-surface);
2894
+ box-shadow: 0 0 2px rgba(28,40,64,0.18), 0 1px 3px rgba(0,0,0,0.04);
2895
+ font-family: inherit; font-size: var(--crisp-text-md); font-weight: var(--crisp-weight-medium); color: var(--crisp-fg-primary);
2896
+ white-space: nowrap; cursor: pointer; transition: background-color .12s; }
2897
+ & .crisp-trialbanner-action:hover { background: var(--crisp-bg-raised); }
2898
+
2899
+ &[data-tone="warning"] .crisp-trialbanner-icon { color: var(--crisp-bg-warning); }
2900
+ &[data-tone="danger"] .crisp-trialbanner-icon { color: var(--crisp-bg-danger); }
2901
+ }
2902
+
2903
+ @media (prefers-reduced-motion: reduce) {
2904
+ .crisp-trialbanner, .crisp-trialbanner * {
2905
+ animation-duration: 0.01ms !important;
2906
+ animation-iteration-count: 1 !important;
2907
+ transition-duration: 0.01ms !important;
2908
+ }
2909
+ }
2910
+
2911
+ .crisp-viewtoggle {
2912
+ display: inline-flex; align-items: center; gap: 2px; box-sizing: border-box; padding: 2px;
2913
+ border-radius: var(--crisp-radius-lg); background: color-mix(in srgb, var(--crisp-fg-primary) 5%, transparent);
2914
+ font-family: var(--crisp-font-sans);
2915
+
2916
+ & .crisp-viewtoggle-tile { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px;
2917
+ padding: 0; margin: 0; border: none; border-radius: var(--crisp-radius-md); background: none; color: var(--crisp-fg-muted);
2918
+ font-family: inherit; cursor: pointer; transition: background-color .12s, color .12s, box-shadow .12s; }
2919
+ & .crisp-viewtoggle-tile:hover { color: var(--crisp-fg-primary); }
2920
+ & .crisp-viewtoggle-tile[data-active] { background: var(--crisp-bg-tile-active); color: var(--crisp-fg-primary);
2921
+ box-shadow: 0 1px 2px -1px var(--crisp-shadow-tile-active); }
2922
+ & .crisp-viewtoggle-tile:focus-visible { outline: 2px solid var(--crisp-bg-brand-solid); outline-offset: 1px; }
2923
+ }
2924
+
2925
+ @media (prefers-reduced-motion: reduce) {
2926
+ .crisp-viewtoggle, .crisp-viewtoggle * {
2927
+ animation-duration: 0.01ms !important;
2928
+ animation-iteration-count: 1 !important;
2929
+ transition-duration: 0.01ms !important;
2930
+ }
2931
+ }
2932
+ }