@ketvietlab/ketsuite 0.1.3 → 0.1.6

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 (359) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/deployment.d.ts.map +1 -1
  3. package/dist/deployment.js +3 -0
  4. package/dist/deployment.js.map +1 -1
  5. package/dist/index.d.ts +8 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/modules/account_staff_channel/channel-routes.d.ts.map +1 -1
  10. package/dist/modules/account_staff_channel/channel-routes.js +1 -12
  11. package/dist/modules/account_staff_channel/channel-routes.js.map +1 -1
  12. package/dist/modules/attendance/channel-routes.d.ts.map +1 -1
  13. package/dist/modules/attendance/channel-routes.js +1 -12
  14. package/dist/modules/attendance/channel-routes.js.map +1 -1
  15. package/dist/modules/backend/design/HANDOFF.md +2 -2
  16. package/dist/modules/backend/design/auth.css +12 -0
  17. package/dist/modules/backend/design/client/table-selection.d.mts +3 -3
  18. package/dist/modules/backend/design/client/table-selection.d.mts.map +1 -1
  19. package/dist/modules/backend/design/client/table-selection.mjs +1 -1
  20. package/dist/modules/backend/design/client/table-selection.mjs.map +4 -4
  21. package/dist/modules/backend/design/content.css +43 -0
  22. package/dist/modules/backend/design/design-system.css +1 -1
  23. package/dist/modules/backend/design/forms.css +84 -1
  24. package/dist/modules/backend/design/lists.css +26 -18
  25. package/dist/modules/backend/design/record.css +5 -2
  26. package/dist/modules/backend/design/responsive.css +5 -6
  27. package/dist/modules/backend/design/user-workflow.css +257 -0
  28. package/dist/modules/backend/forms.d.ts +38 -1
  29. package/dist/modules/backend/forms.d.ts.map +1 -1
  30. package/dist/modules/backend/forms.js +29 -0
  31. package/dist/modules/backend/forms.js.map +1 -1
  32. package/dist/modules/backend/index.d.ts +3 -2
  33. package/dist/modules/backend/index.d.ts.map +1 -1
  34. package/dist/modules/backend/index.js +3 -2
  35. package/dist/modules/backend/index.js.map +1 -1
  36. package/dist/modules/backend/messages.d.ts.map +1 -1
  37. package/dist/modules/backend/messages.js +42 -2
  38. package/dist/modules/backend/messages.js.map +1 -1
  39. package/dist/modules/channel_api/core.d.ts +30 -0
  40. package/dist/modules/channel_api/core.d.ts.map +1 -1
  41. package/dist/modules/channel_api/core.js +28 -0
  42. package/dist/modules/channel_api/core.js.map +1 -1
  43. package/dist/modules/crm/functions.d.ts +5 -0
  44. package/dist/modules/crm/functions.d.ts.map +1 -1
  45. package/dist/modules/crm/functions.js +105 -10
  46. package/dist/modules/crm/functions.js.map +1 -1
  47. package/dist/modules/crm/jobs.d.ts.map +1 -1
  48. package/dist/modules/crm/jobs.js +1 -0
  49. package/dist/modules/crm/jobs.js.map +1 -1
  50. package/dist/modules/crm/operations.d.ts.map +1 -1
  51. package/dist/modules/crm/operations.js +2 -1
  52. package/dist/modules/crm/operations.js.map +1 -1
  53. package/dist/modules/crm_backend/index.d.ts.map +1 -1
  54. package/dist/modules/crm_backend/index.js +5 -2
  55. package/dist/modules/crm_backend/index.js.map +1 -1
  56. package/dist/modules/crm_backend/messages.d.ts +116 -0
  57. package/dist/modules/crm_backend/messages.d.ts.map +1 -1
  58. package/dist/modules/crm_backend/messages.js +122 -6
  59. package/dist/modules/crm_backend/messages.js.map +1 -1
  60. package/dist/modules/crm_backend/routes.d.ts.map +1 -1
  61. package/dist/modules/crm_backend/routes.js +434 -174
  62. package/dist/modules/crm_backend/routes.js.map +1 -1
  63. package/dist/modules/crm_backend/screens/case-create.d.ts +7 -0
  64. package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -1
  65. package/dist/modules/crm_backend/screens/case-create.js +13 -4
  66. package/dist/modules/crm_backend/screens/case-create.js.map +1 -1
  67. package/dist/modules/crm_backend/screens/case-detail.d.ts +6 -0
  68. package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -1
  69. package/dist/modules/crm_backend/screens/case-detail.js +73 -23
  70. package/dist/modules/crm_backend/screens/case-detail.js.map +1 -1
  71. package/dist/modules/crm_backend/screens/configuration.d.ts +21 -3
  72. package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
  73. package/dist/modules/crm_backend/screens/configuration.js +260 -55
  74. package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
  75. package/dist/modules/crm_backend/screens/index.d.ts +3 -3
  76. package/dist/modules/crm_backend/screens/index.d.ts.map +1 -1
  77. package/dist/modules/crm_backend/screens/index.js +2 -2
  78. package/dist/modules/crm_backend/screens/index.js.map +1 -1
  79. package/dist/modules/crm_staff_channel/channel-routes.d.ts.map +1 -1
  80. package/dist/modules/crm_staff_channel/channel-routes.js +1 -12
  81. package/dist/modules/crm_staff_channel/channel-routes.js.map +1 -1
  82. package/dist/modules/flow/membership.d.ts.map +1 -1
  83. package/dist/modules/flow/membership.js +7 -1
  84. package/dist/modules/flow/membership.js.map +1 -1
  85. package/dist/modules/flow/operations.d.ts +10 -4
  86. package/dist/modules/flow/operations.d.ts.map +1 -1
  87. package/dist/modules/flow/operations.js +10 -4
  88. package/dist/modules/flow/operations.js.map +1 -1
  89. package/dist/modules/flow_staff_channel/channel-routes.d.ts.map +1 -1
  90. package/dist/modules/flow_staff_channel/channel-routes.js +1 -20
  91. package/dist/modules/flow_staff_channel/channel-routes.js.map +1 -1
  92. package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
  93. package/dist/modules/hospitality_core/messages.js +44 -0
  94. package/dist/modules/hospitality_core/messages.js.map +1 -1
  95. package/dist/modules/hospitality_core/night-audit.d.ts.map +1 -1
  96. package/dist/modules/hospitality_core/night-audit.js +7 -0
  97. package/dist/modules/hospitality_core/night-audit.js.map +1 -1
  98. package/dist/modules/hospitality_core/operations.d.ts.map +1 -1
  99. package/dist/modules/hospitality_core/operations.js +150 -40
  100. package/dist/modules/hospitality_core/operations.js.map +1 -1
  101. package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
  102. package/dist/modules/hospitality_core/routes.js +24 -2
  103. package/dist/modules/hospitality_core/routes.js.map +1 -1
  104. package/dist/modules/hospitality_core/screens/check-out-prep.d.ts +46 -0
  105. package/dist/modules/hospitality_core/screens/check-out-prep.d.ts.map +1 -0
  106. package/dist/modules/hospitality_core/screens/check-out-prep.js +133 -0
  107. package/dist/modules/hospitality_core/screens/check-out-prep.js.map +1 -0
  108. package/dist/modules/hospitality_core/screens/folio-detail.d.ts.map +1 -1
  109. package/dist/modules/hospitality_core/screens/folio-detail.js +2 -4
  110. package/dist/modules/hospitality_core/screens/folio-detail.js.map +1 -1
  111. package/dist/modules/hospitality_core/screens/index.d.ts +2 -0
  112. package/dist/modules/hospitality_core/screens/index.d.ts.map +1 -1
  113. package/dist/modules/hospitality_core/screens/index.js +1 -0
  114. package/dist/modules/hospitality_core/screens/index.js.map +1 -1
  115. package/dist/modules/hospitality_core/screens/reservation-detail.d.ts.map +1 -1
  116. package/dist/modules/hospitality_core/screens/reservation-detail.js +8 -1
  117. package/dist/modules/hospitality_core/screens/reservation-detail.js.map +1 -1
  118. package/dist/modules/hospitality_core/screens/shared.d.ts +12 -0
  119. package/dist/modules/hospitality_core/screens/shared.d.ts.map +1 -1
  120. package/dist/modules/hospitality_core/screens/shared.js +25 -4
  121. package/dist/modules/hospitality_core/screens/shared.js.map +1 -1
  122. package/dist/modules/hospitality_core/services.d.ts +48 -0
  123. package/dist/modules/hospitality_core/services.d.ts.map +1 -1
  124. package/dist/modules/hospitality_core/services.js +70 -0
  125. package/dist/modules/hospitality_core/services.js.map +1 -1
  126. package/dist/modules/hospitality_staff_channel/channel-routes.d.ts.map +1 -1
  127. package/dist/modules/hospitality_staff_channel/channel-routes.js +1 -12
  128. package/dist/modules/hospitality_staff_channel/channel-routes.js.map +1 -1
  129. package/dist/modules/inventory_staff_channel/channel-routes.d.ts.map +1 -1
  130. package/dist/modules/inventory_staff_channel/channel-routes.js +1 -12
  131. package/dist/modules/inventory_staff_channel/channel-routes.js.map +1 -1
  132. package/dist/modules/loyalty/admin-functions.d.ts +2 -0
  133. package/dist/modules/loyalty/admin-functions.d.ts.map +1 -1
  134. package/dist/modules/loyalty/admin-functions.js +96 -20
  135. package/dist/modules/loyalty/admin-functions.js.map +1 -1
  136. package/dist/modules/loyalty/engine.d.ts +4 -1
  137. package/dist/modules/loyalty/engine.d.ts.map +1 -1
  138. package/dist/modules/loyalty/engine.js +125 -18
  139. package/dist/modules/loyalty/engine.js.map +1 -1
  140. package/dist/modules/loyalty/index.d.ts.map +1 -1
  141. package/dist/modules/loyalty/index.js +4 -3
  142. package/dist/modules/loyalty/index.js.map +1 -1
  143. package/dist/modules/loyalty/jobs.d.ts.map +1 -1
  144. package/dist/modules/loyalty/jobs.js +0 -1
  145. package/dist/modules/loyalty/jobs.js.map +1 -1
  146. package/dist/modules/loyalty/membership-functions.d.ts +5 -0
  147. package/dist/modules/loyalty/membership-functions.d.ts.map +1 -1
  148. package/dist/modules/loyalty/membership-functions.js +37 -23
  149. package/dist/modules/loyalty/membership-functions.js.map +1 -1
  150. package/dist/modules/loyalty/messages.d.ts +14 -0
  151. package/dist/modules/loyalty/messages.d.ts.map +1 -1
  152. package/dist/modules/loyalty/messages.js +14 -0
  153. package/dist/modules/loyalty/messages.js.map +1 -1
  154. package/dist/modules/loyalty/models.d.ts.map +1 -1
  155. package/dist/modules/loyalty/models.js +17 -0
  156. package/dist/modules/loyalty/models.js.map +1 -1
  157. package/dist/modules/loyalty/order-functions.d.ts.map +1 -1
  158. package/dist/modules/loyalty/order-functions.js +70 -17
  159. package/dist/modules/loyalty/order-functions.js.map +1 -1
  160. package/dist/modules/loyalty/program-design.d.ts +11 -0
  161. package/dist/modules/loyalty/program-design.d.ts.map +1 -0
  162. package/dist/modules/loyalty/program-design.js +356 -0
  163. package/dist/modules/loyalty/program-design.js.map +1 -0
  164. package/dist/modules/loyalty/stats.d.ts +0 -13
  165. package/dist/modules/loyalty/stats.d.ts.map +1 -1
  166. package/dist/modules/loyalty/stats.js +11 -6
  167. package/dist/modules/loyalty/stats.js.map +1 -1
  168. package/dist/modules/loyalty/stored-value.d.ts.map +1 -1
  169. package/dist/modules/loyalty/stored-value.js +7 -2
  170. package/dist/modules/loyalty/stored-value.js.map +1 -1
  171. package/dist/modules/loyalty/types.d.ts +1 -1
  172. package/dist/modules/loyalty/types.d.ts.map +1 -1
  173. package/dist/modules/loyalty_backend/design-messages.d.ts +221 -0
  174. package/dist/modules/loyalty_backend/design-messages.d.ts.map +1 -0
  175. package/dist/modules/loyalty_backend/design-messages.js +221 -0
  176. package/dist/modules/loyalty_backend/design-messages.js.map +1 -0
  177. package/dist/modules/loyalty_backend/index.js +224 -412
  178. package/dist/modules/loyalty_backend/index.js.map +1 -1
  179. package/dist/modules/loyalty_backend/messages.d.ts +642 -214
  180. package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
  181. package/dist/modules/loyalty_backend/messages.js +19 -13
  182. package/dist/modules/loyalty_backend/messages.js.map +1 -1
  183. package/dist/modules/loyalty_backend/program-workspace.d.ts +4 -0
  184. package/dist/modules/loyalty_backend/program-workspace.d.ts.map +1 -0
  185. package/dist/modules/loyalty_backend/program-workspace.js +600 -0
  186. package/dist/modules/loyalty_backend/program-workspace.js.map +1 -0
  187. package/dist/modules/loyalty_backend/screens/index.d.ts +12 -36
  188. package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
  189. package/dist/modules/loyalty_backend/screens/index.js +148 -292
  190. package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
  191. package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
  192. package/dist/modules/loyalty_backend/screens/page-frame.js +2 -2
  193. package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
  194. package/dist/modules/loyalty_pos/functions.d.ts.map +1 -1
  195. package/dist/modules/loyalty_pos/functions.js +1 -0
  196. package/dist/modules/loyalty_pos/functions.js.map +1 -1
  197. package/dist/modules/loyalty_pos/index.js +1 -1
  198. package/dist/modules/loyalty_pos/index.js.map +1 -1
  199. package/dist/modules/loyalty_sale/functions.d.ts +1 -0
  200. package/dist/modules/loyalty_sale/functions.d.ts.map +1 -1
  201. package/dist/modules/loyalty_sale/functions.js +1 -0
  202. package/dist/modules/loyalty_sale/functions.js.map +1 -1
  203. package/dist/modules/partner_backend/client/partner.css +3 -1
  204. package/dist/modules/partner_backend/index.d.ts.map +1 -1
  205. package/dist/modules/partner_backend/index.js +4 -0
  206. package/dist/modules/partner_backend/index.js.map +1 -1
  207. package/dist/modules/partner_backend/routes.d.ts.map +1 -1
  208. package/dist/modules/partner_backend/routes.js +6 -1
  209. package/dist/modules/partner_backend/routes.js.map +1 -1
  210. package/dist/modules/partner_backend/screens/form.d.ts +1 -0
  211. package/dist/modules/partner_backend/screens/form.d.ts.map +1 -1
  212. package/dist/modules/partner_backend/screens/form.js +1 -0
  213. package/dist/modules/partner_backend/screens/form.js.map +1 -1
  214. package/dist/modules/purchase_staff_channel/order-routes.d.ts.map +1 -1
  215. package/dist/modules/purchase_staff_channel/order-routes.js +1 -12
  216. package/dist/modules/purchase_staff_channel/order-routes.js.map +1 -1
  217. package/dist/modules/quality_staff_channel/channel-routes.d.ts.map +1 -1
  218. package/dist/modules/quality_staff_channel/channel-routes.js +1 -12
  219. package/dist/modules/quality_staff_channel/channel-routes.js.map +1 -1
  220. package/dist/modules/sale/functions.d.ts.map +1 -1
  221. package/dist/modules/sale/functions.js +27 -17
  222. package/dist/modules/sale/functions.js.map +1 -1
  223. package/dist/modules/sale_staff_channel/channel-routes.d.ts.map +1 -1
  224. package/dist/modules/sale_staff_channel/channel-routes.js +1 -12
  225. package/dist/modules/sale_staff_channel/channel-routes.js.map +1 -1
  226. package/dist/modules/sale_staff_channel/order-routes.d.ts.map +1 -1
  227. package/dist/modules/sale_staff_channel/order-routes.js +1 -12
  228. package/dist/modules/sale_staff_channel/order-routes.js.map +1 -1
  229. package/dist/modules/stock_staff_channel/operation-routes.d.ts.map +1 -1
  230. package/dist/modules/stock_staff_channel/operation-routes.js +1 -12
  231. package/dist/modules/stock_staff_channel/operation-routes.js.map +1 -1
  232. package/dist/modules/user/authorization.d.ts +64 -1
  233. package/dist/modules/user/authorization.d.ts.map +1 -1
  234. package/dist/modules/user/authorization.js +445 -53
  235. package/dist/modules/user/authorization.js.map +1 -1
  236. package/dist/modules/user/functions.d.ts.map +1 -1
  237. package/dist/modules/user/functions.js +45 -23
  238. package/dist/modules/user/functions.js.map +1 -1
  239. package/dist/modules/user/index.d.ts +2 -1
  240. package/dist/modules/user/index.d.ts.map +1 -1
  241. package/dist/modules/user/index.js +1 -1
  242. package/dist/modules/user/index.js.map +1 -1
  243. package/dist/modules/user/models.d.ts.map +1 -1
  244. package/dist/modules/user/models.js +5 -0
  245. package/dist/modules/user/models.js.map +1 -1
  246. package/dist/modules/user/roles.d.ts.map +1 -1
  247. package/dist/modules/user/roles.js +2 -1
  248. package/dist/modules/user/roles.js.map +1 -1
  249. package/dist/modules/user_backend/access-routes.d.ts +31 -0
  250. package/dist/modules/user_backend/access-routes.d.ts.map +1 -0
  251. package/dist/modules/user_backend/access-routes.js +447 -0
  252. package/dist/modules/user_backend/access-routes.js.map +1 -0
  253. package/dist/modules/user_backend/index.d.ts +1 -0
  254. package/dist/modules/user_backend/index.d.ts.map +1 -1
  255. package/dist/modules/user_backend/index.js +1 -0
  256. package/dist/modules/user_backend/index.js.map +1 -1
  257. package/dist/modules/user_backend/messages.d.ts +4 -0
  258. package/dist/modules/user_backend/messages.d.ts.map +1 -1
  259. package/dist/modules/user_backend/messages.js +4 -0
  260. package/dist/modules/user_backend/messages.js.map +1 -1
  261. package/dist/modules/user_backend/routes.d.ts.map +1 -1
  262. package/dist/modules/user_backend/routes.js +38 -3
  263. package/dist/modules/user_backend/routes.js.map +1 -1
  264. package/dist/modules/user_backend/screens/user-form.d.ts +1 -0
  265. package/dist/modules/user_backend/screens/user-form.d.ts.map +1 -1
  266. package/dist/modules/user_backend/screens/user-form.js +28 -0
  267. package/dist/modules/user_backend/screens/user-form.js.map +1 -1
  268. package/dist/modules/website/cms.d.ts.map +1 -1
  269. package/dist/modules/website/cms.js +283 -6
  270. package/dist/modules/website/cms.js.map +1 -1
  271. package/dist/modules/website/index.d.ts.map +1 -1
  272. package/dist/modules/website/index.js +12 -0
  273. package/dist/modules/website/index.js.map +1 -1
  274. package/dist/modules/website/media-usage.d.ts +38 -0
  275. package/dist/modules/website/media-usage.d.ts.map +1 -0
  276. package/dist/modules/website/media-usage.js +87 -0
  277. package/dist/modules/website/media-usage.js.map +1 -0
  278. package/dist/modules/website/paths.js +1 -1
  279. package/dist/modules/website/paths.js.map +1 -1
  280. package/dist/modules/website/sections.d.ts.map +1 -1
  281. package/dist/modules/website/sections.js +12 -1
  282. package/dist/modules/website/sections.js.map +1 -1
  283. package/dist/modules/website_backend/index.js +138 -0
  284. package/dist/modules/website_backend/index.js.map +1 -1
  285. package/dist/modules/website_backend/menus.d.ts.map +1 -1
  286. package/dist/modules/website_backend/menus.js +11 -0
  287. package/dist/modules/website_backend/menus.js.map +1 -1
  288. package/dist/modules/website_backend/routes.d.ts.map +1 -1
  289. package/dist/modules/website_backend/routes.js +414 -31
  290. package/dist/modules/website_backend/routes.js.map +1 -1
  291. package/dist/modules/website_backend/screens/index.d.ts +98 -6
  292. package/dist/modules/website_backend/screens/index.d.ts.map +1 -1
  293. package/dist/modules/website_backend/screens/index.js +600 -154
  294. package/dist/modules/website_backend/screens/index.js.map +1 -1
  295. package/dist/modules/website_backend/screens/page-frame.d.ts +3 -1
  296. package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
  297. package/dist/modules/website_backend/screens/page-frame.js +1 -1
  298. package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
  299. package/dist/modules/website_menu/functions.d.ts.map +1 -1
  300. package/dist/modules/website_menu/functions.js +51 -0
  301. package/dist/modules/website_menu/functions.js.map +1 -1
  302. package/dist/modules/website_menu/index.js +2 -0
  303. package/dist/modules/website_menu/index.js.map +1 -1
  304. package/dist/modules/website_search/functions.d.ts.map +1 -1
  305. package/dist/modules/website_search/functions.js +10 -120
  306. package/dist/modules/website_search/functions.js.map +1 -1
  307. package/dist/modules/website_search/index.js +2 -0
  308. package/dist/modules/website_search/index.js.map +1 -1
  309. package/dist/modules/website_search/jobs.d.ts +3 -0
  310. package/dist/modules/website_search/jobs.d.ts.map +1 -0
  311. package/dist/modules/website_search/jobs.js +101 -0
  312. package/dist/modules/website_search/jobs.js.map +1 -0
  313. package/dist/modules/website_search/rebuild.d.ts +33 -0
  314. package/dist/modules/website_search/rebuild.d.ts.map +1 -0
  315. package/dist/modules/website_search/rebuild.js +125 -0
  316. package/dist/modules/website_search/rebuild.js.map +1 -0
  317. package/dist/permission-catalogue.d.ts.map +1 -1
  318. package/dist/permission-catalogue.js +21 -1
  319. package/dist/permission-catalogue.js.map +1 -1
  320. package/dist/scaffold/index.js +1 -1
  321. package/dist/ui/chrome.d.ts +8 -0
  322. package/dist/ui/chrome.d.ts.map +1 -1
  323. package/dist/ui/chrome.js +9 -1
  324. package/dist/ui/chrome.js.map +1 -1
  325. package/dist/ui/client/table-selection-view.d.ts.map +1 -1
  326. package/dist/ui/client/table-selection-view.js +161 -5
  327. package/dist/ui/client/table-selection-view.js.map +1 -1
  328. package/dist/ui/client/user-workflow.d.ts +2 -0
  329. package/dist/ui/client/user-workflow.d.ts.map +1 -0
  330. package/dist/ui/client/user-workflow.js +141 -0
  331. package/dist/ui/client/user-workflow.js.map +1 -0
  332. package/dist/ui/form.d.ts +9 -0
  333. package/dist/ui/form.d.ts.map +1 -1
  334. package/dist/ui/form.js +29 -15
  335. package/dist/ui/form.js.map +1 -1
  336. package/dist/ui/icons.d.ts.map +1 -1
  337. package/dist/ui/icons.js +2 -0
  338. package/dist/ui/icons.js.map +1 -1
  339. package/dist/ui/index.d.ts +7 -3
  340. package/dist/ui/index.d.ts.map +1 -1
  341. package/dist/ui/index.js +6 -3
  342. package/dist/ui/index.js.map +1 -1
  343. package/dist/ui/layout.d.ts.map +1 -1
  344. package/dist/ui/layout.js +14 -4
  345. package/dist/ui/layout.js.map +1 -1
  346. package/dist/ui/nav.d.ts.map +1 -1
  347. package/dist/ui/nav.js +2 -1
  348. package/dist/ui/nav.js.map +1 -1
  349. package/dist/ui/state.d.ts +20 -1
  350. package/dist/ui/state.d.ts.map +1 -1
  351. package/dist/ui/state.js +17 -0
  352. package/dist/ui/state.js.map +1 -1
  353. package/dist/ui/table.js +1 -1
  354. package/dist/ui/table.js.map +1 -1
  355. package/dist/ui/user-workflow.d.ts +72 -0
  356. package/dist/ui/user-workflow.d.ts.map +1 -0
  357. package/dist/ui/user-workflow.js +144 -0
  358. package/dist/ui/user-workflow.js.map +1 -0
  359. package/package.json +8 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../ui/client/table-selection-view.tsx"],
4
- "sourcesContent": ["import type { IslandController, IslandProps } from '@ketvietlab/ketjs-view'\n\nconst tableSelectionMarker = Symbol.for('ket.backend.table-selection')\nconst dropdownDismissMarker = Symbol.for('ket.backend.dropdown-dismiss')\nconst globalFilterMarker = Symbol.for('ket.backend.global-filter')\nconst routeModalMarker = Symbol.for('ket.backend.route-modal')\nconst dismissibleDropdown = [\n '[data-ui=\"search-menu\"]',\n '[data-ui=\"col-config\"]',\n '[data-ui=\"bulk-actions\"]',\n '[data-ui=\"viewer\"]',\n '[data-ui=\"record-more\"]',\n].join(', ')\n\ntype KetBrowserGlobals = typeof globalThis & {\n [key: symbol]: unknown\n __ketNavigation?: { navigate?: (href: string) => unknown }\n confirm: (message?: string) => boolean\n}\n\nconst browserGlobals = globalThis as KetBrowserGlobals\nconst eventElement = (event: Event): Element | null => (event.target instanceof Element ? event.target : null)\n\nconst updateSelection = (table: Element): void => {\n const rows = [...table.querySelectorAll<HTMLInputElement>('[data-ui=\"row-select\"]:not(:disabled)')]\n const checked = rows.filter((input) => input.checked).length\n const all = table.querySelector<HTMLInputElement>('[data-ui=\"select-all\"]')\n if (all) {\n all.checked = rows.length > 0 && checked === rows.length\n all.indeterminate = checked > 0 && checked < rows.length\n }\n if (!checked) {\n const shell = table.closest('[data-ui=\"shell\"]')\n for (const menu of shell?.querySelectorAll<HTMLDetailsElement>('[data-ui=\"bulk-actions\"][open]') ?? [])\n menu.removeAttribute('open')\n }\n}\n\nconst installTableSelection = (): void => {\n if (browserGlobals[tableSelectionMarker]) return\n browserGlobals[tableSelectionMarker] = true\n\n document.addEventListener('change', (event) => {\n const target = eventElement(event)\n if (!(target instanceof HTMLInputElement)) return\n if (!target.matches('[data-ui=\"select-all\"], [data-ui=\"row-select\"]')) return\n const table = target.closest('[data-ui=\"table\"]')\n if (!table) return\n if (target.matches('[data-ui=\"select-all\"]'))\n for (const input of table.querySelectorAll<HTMLInputElement>('[data-ui=\"row-select\"]:not(:disabled)'))\n input.checked = target.checked\n updateSelection(table)\n })\n\n document.addEventListener('click', (event) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n )\n return\n const target = eventElement(event)\n if (\n target?.closest('a, button, input, select, textarea, label, summary, details, [data-ui=\"select-cell\"]')\n )\n return\n const row = target?.closest<HTMLElement>('[data-ui=\"row\"][data-row-href]')\n const href = row?.getAttribute('data-row-href')\n if (!href) return\n event.preventDefault()\n if (browserGlobals.__ketNavigation?.navigate) void browserGlobals.__ketNavigation.navigate(href)\n else browserGlobals.location.assign(href)\n })\n}\n\nconst openDropdowns = (): HTMLDetailsElement[] => [\n ...document.querySelectorAll<HTMLDetailsElement>(`${dismissibleDropdown}[open]`),\n]\n\nconst installDropdownDismiss = (): void => {\n if (browserGlobals[dropdownDismissMarker]) return\n browserGlobals[dropdownDismissMarker] = true\n\n document.addEventListener('click', (event) => {\n const current = eventElement(event)?.closest(dismissibleDropdown)\n for (const dropdown of openDropdowns()) {\n if (dropdown !== current && !dropdown.contains(current ?? null)) dropdown.removeAttribute('open')\n }\n })\n\n document.addEventListener('keydown', (event) => {\n if (event.key !== 'Escape') return\n const dropdowns = openDropdowns()\n if (!dropdowns.length) return\n const focused = document.activeElement?.closest<HTMLDetailsElement>(dismissibleDropdown)\n const current = focused?.open ? focused : dropdowns.at(-1)\n current?.removeAttribute('open')\n current?.querySelector<HTMLElement>('summary')?.focus()\n event.preventDefault()\n })\n}\n\nconst installGlobalFilter = (): void => {\n if (browserGlobals[globalFilterMarker]) return\n browserGlobals[globalFilterMarker] = true\n\n document.addEventListener('click', (event) => {\n const trigger = eventElement(event)?.closest<HTMLElement>('[data-ui=\"chrome-search-toggle\"]')\n const controls = trigger?.getAttribute('aria-controls')\n if (!trigger || !controls) return\n const dialog = document.getElementById(controls)\n if (!(dialog instanceof HTMLDialogElement) || dialog.open) return\n dialog.showModal()\n trigger.setAttribute('aria-expanded', 'true')\n requestAnimationFrame(() =>\n dialog\n .querySelector<HTMLElement>('[data-presentation=\"modal\"] [data-ui=\"chrome-search-input\"]')\n ?.focus(),\n )\n })\n\n document.addEventListener(\n 'cancel',\n (event) => {\n if (!eventElement(event)?.matches('[data-ui=\"chrome-search-modal\"]')) return\n event.preventDefault()\n },\n true,\n )\n\n document.addEventListener(\n 'close',\n (event) => {\n const dialog = eventElement(event)\n if (!(dialog instanceof HTMLDialogElement)) return\n if (!dialog.matches('[data-ui=\"chrome-search-modal\"]')) return\n const trigger = document.querySelector<HTMLElement>(\n `[data-ui=\"chrome-search-toggle\"][aria-controls=\"${CSS.escape(dialog.id)}\"]`,\n )\n trigger?.setAttribute('aria-expanded', 'false')\n trigger?.focus()\n },\n true,\n )\n}\n\nconst focusable = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled):not([type=\"hidden\"])',\n 'select:not(:disabled)',\n 'textarea:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nconst activeRouteModal = (): HTMLElement | null =>\n document.querySelector<HTMLElement>('[data-ui=\"modal-layer\"][data-route-modal=\"true\"]')\n\nconst modalFocusables = (modal: HTMLElement): HTMLElement[] =>\n [...modal.querySelectorAll<HTMLElement>(focusable)].filter(\n (item) =>\n !item.hidden &&\n item.getAttribute('aria-hidden') !== 'true' &&\n !item.matches('[data-ui=\"modal-backdrop\"]'),\n )\n\nconst navigateTo = (href: string): void => {\n if (browserGlobals.__ketNavigation?.navigate) void browserGlobals.__ketNavigation.navigate(href)\n else browserGlobals.location.assign(href)\n}\n\nconst eventStartedInNestedModal = (event: KeyboardEvent, routeModal: HTMLElement): boolean =>\n event\n .composedPath()\n .some(\n (target) =>\n target instanceof HTMLElement &&\n target !== routeModal &&\n target.matches('[data-ui=\"modal-layer\"][data-presentation=\"dialog\"]'),\n )\n\n/**\n * Whether anything in the modal has been typed into since the server rendered it.\n *\n * Comparing each control against its own default is what makes this work without\n * any bookkeeping: the page is server-rendered, so the default *is* the state the\n * reader was given. A modal with no form \u2014 a reader, an inspector \u2014 has nothing\n * to compare and is never dirty, so the guard costs those screens nothing.\n */\nconst modalHasDraft = (modal: HTMLElement): boolean => {\n for (const field of modal.querySelectorAll<HTMLInputElement>('input:not([type=\"hidden\"])')) {\n if (field.disabled) continue\n if (field.type === 'checkbox' || field.type === 'radio') {\n if (field.checked !== field.defaultChecked) return true\n } else if (field.value !== field.defaultValue) return true\n }\n for (const area of modal.querySelectorAll<HTMLTextAreaElement>('textarea'))\n if (!area.disabled && area.value !== area.defaultValue) return true\n for (const select of modal.querySelectorAll<HTMLSelectElement>('select')) {\n if (select.disabled) continue\n for (const option of select.options) if (option.selected !== option.defaultSelected) return true\n }\n return false\n}\n\n/**\n * The guard, and what it is not.\n *\n * Closing a modal is a link, and a link still works with scripting off \u2014 that is\n * the point of building it as one. So this catches the stray backdrop click and\n * the reflexive Escape; it is not a lock, and nothing here should be read as one.\n * The wording comes from the server because this file cannot translate.\n */\nconst mayLeaveModal = (modal: HTMLElement): boolean => {\n if (!modalHasDraft(modal)) return true\n const message = modal.getAttribute('data-unsaved-prompt')\n // No prompt declared means the screen did not ask to be guarded.\n if (!message) return true\n return browserGlobals.confirm(message)\n}\n\n/** Progressive keyboard behavior for URL-owned create/edit workspaces. */\nconst installRouteModal = (): void => {\n if (browserGlobals[routeModalMarker]) return\n browserGlobals[routeModalMarker] = true\n const focused = new WeakSet<HTMLElement>()\n const focusModal = (): void => {\n const modal = activeRouteModal()\n if (!modal || focused.has(modal)) return\n focused.add(modal)\n requestAnimationFrame(() => {\n const sheet = modal.querySelector<HTMLElement>('[data-ui=\"modal-sheet\"]')\n const target = modalFocusables(modal).find((item) => !item.matches('[data-ui=\"modal-close\"]'))\n ;(target ?? sheet)?.focus()\n })\n }\n focusModal()\n new MutationObserver(focusModal).observe(document.body, { childList: true, subtree: true })\n\n // The backdrop and the X are ordinary links, so the guard has to run before\n // the navigation layer sees the click rather than inside it.\n document.addEventListener(\n 'click',\n (event) => {\n const modal = activeRouteModal()\n if (!modal) return\n const leaving = event\n .composedPath()\n .find(\n (target) =>\n target instanceof HTMLElement &&\n target.matches('[data-ui=\"modal-close\"], [data-ui=\"modal-backdrop\"]'),\n )\n if (!leaving || !modal.contains(leaving as HTMLElement)) return\n if (!mayLeaveModal(modal)) {\n event.preventDefault()\n event.stopPropagation()\n }\n },\n true,\n )\n\n document.addEventListener('keydown', (event) => {\n const modal = activeRouteModal()\n if (!modal) return\n // Relation-select removes its dialog synchronously on Escape. The event's\n // composed path is stable even after that DOM subtree disappears, so the\n // route layer must use it instead of querying the now-removed target.\n if (eventStartedInNestedModal(event, modal)) return\n if (event.key === 'Escape') {\n const close = modal.querySelector<HTMLAnchorElement>('[data-ui=\"modal-close\"]')\n if (!close) return\n event.preventDefault()\n if (!mayLeaveModal(modal)) return\n navigateTo(close.getAttribute('href') ?? close.href)\n return\n }\n if (event.key !== 'Tab') return\n const items = modalFocusables(modal)\n if (!items.length) return\n const first = items[0]\n const last = items.at(-1)!\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n })\n}\n\nexport const createTableSelectionView = (): IslandController => ({\n view: () => <span data-ui=\"table-selection-runtime\" hidden />,\n})\n\nexport const tableSelection = (_props: IslandProps): IslandController => {\n installTableSelection()\n installDropdownDismiss()\n installGlobalFilter()\n installRouteModal()\n return createTableSelectionView()\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "tableSelectionMarker", "dropdownDismissMarker", "globalFilterMarker", "routeModalMarker", "dismissibleDropdown", "browserGlobals", "eventElement", "event", "updateSelection", "table", "rows", "checked", "input", "all", "shell", "menu", "installTableSelection", "target", "href", "openDropdowns", "installDropdownDismiss", "current", "dropdown", "dropdowns", "focused", "installGlobalFilter", "trigger", "controls", "dialog", "focusable", "activeRouteModal", "modalFocusables", "modal", "item", "navigateTo", "eventStartedInNestedModal", "routeModal", "modalHasDraft", "field", "area", "select", "option", "mayLeaveModal", "message", "installRouteModal", "focusModal", "sheet", "leaving", "close", "items", "first", "last", "createTableSelectionView", "tableSelection", "_props"]
3
+ "sources": ["../../../../ui/client/user-workflow.ts", "../../../../ui/client/table-selection-view.tsx"],
4
+ "sourcesContent": ["let installed = false\nexport function installUserWorkflow() {\n if (installed) return\n installed = true\n let abort: AbortController | undefined,\n timer: ReturnType<typeof setTimeout> | undefined,\n sequence = 0\n async function check(form: HTMLFormElement) {\n const input = form.querySelector<HTMLInputElement>('input[type=email]'),\n status = form.querySelector<HTMLElement>('[data-email-status]')\n if (!input || !status) return\n abort?.abort()\n clearTimeout(timer)\n const request = ++sequence\n const value = input.value.trim(),\n next = form.querySelector<HTMLButtonElement>('[data-email-next]'),\n retry = form.querySelector<HTMLButtonElement>('[data-email-retry]')\n const paint = (message: string, valid: boolean) => {\n status.textContent = message\n if (next) next.disabled = !valid\n input.setAttribute('aria-invalid', String(!valid))\n form.dataset.emailAvailable = valid ? 'true' : 'false'\n }\n if (retry) retry.hidden = true\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n paint(value ? 'Email ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng.' : 'Nh\u1EADp email \u0111\u1EC3 ki\u1EC3m tra.', false)\n return\n }\n paint('\u0110ang ki\u1EC3m tra email\u2026', false)\n timer = setTimeout(async () => {\n abort = new AbortController()\n try {\n const response = await fetch(form.dataset.emailCheck!, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ email: value }),\n signal: AbortSignal.any([abort.signal, AbortSignal.timeout(10000)]),\n })\n if (!response.ok) throw new Error('email-check-failed')\n const result = (await response.json()) as { available: boolean; ok: boolean }\n if (request !== sequence || !form.isConnected) return\n if (!result.ok) throw new Error('email-check-failed')\n paint(\n result.available ? 'Email c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng.' : 'Email \u0111\u00E3 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng. Nh\u1EADp email kh\u00E1c.',\n result.available,\n )\n } catch {\n if (request !== sequence || !form.isConnected) return\n paint('Ch\u01B0a ki\u1EC3m tra \u0111\u01B0\u1EE3c email. Vui l\u00F2ng th\u1EED l\u1EA1i.', false)\n if (retry) retry.hidden = false\n }\n }, 400)\n }\n function scope(form: HTMLFormElement, changed = false) {\n const company = form.querySelector<HTMLSelectElement>('select[name=\"companyId\"]'),\n branch = form.querySelector<HTMLSelectElement>('select[name=\"branchId\"]'),\n kind = form.querySelector<HTMLSelectElement>('select[name=\"scopeKind\"]')?.value\n if (branch && company) {\n if (changed) branch.value = ''\n for (const option of branch.options) {\n if (option.value) {\n option.hidden = option.dataset.companyId !== company.value\n option.disabled = option.hidden\n }\n }\n }\n const key =\n kind === 'tenant'\n ? 'tenant'\n : kind === 'branch'\n ? `branch:${company?.value}:${branch?.value}`\n : `company:${company?.value}`\n for (const input of form.querySelectorAll<HTMLInputElement>('[data-assigned-scopes]')) {\n const scopes = JSON.parse(input.dataset.assignedScopes ?? '[]') as string[]\n const assigned = scopes.includes(key)\n input.disabled = input.dataset.roleDisabled === 'true' || assigned\n const row = input.closest('[data-role-option]')\n const assignedLabel = row?.querySelector<HTMLElement>('[data-role-assigned]')\n const description = row?.querySelector<HTMLElement>('[data-role-description]')\n if (assignedLabel) assignedLabel.hidden = !assigned\n if (description) description.hidden = assigned\n if (input.disabled) input.checked = false\n }\n const companyField = company?.closest<HTMLElement>('[data-ui=\"form-field\"]')\n const branchField = branch?.closest<HTMLElement>('[data-ui=\"form-field\"]')\n if (companyField) companyField.hidden = kind === 'tenant'\n if (branchField) branchField.hidden = kind === 'tenant' || kind === 'company'\n }\n function scan() {\n for (const form of document.querySelectorAll<HTMLFormElement>('form[data-user-workflow]'))\n if (!form.dataset.initialized) {\n form.dataset.initialized = 'true'\n scope(form)\n void check(form)\n }\n }\n document.addEventListener('input', (event) => {\n const input = event.target as HTMLInputElement,\n form = input.closest<HTMLFormElement>('form[data-user-workflow]')\n if (!form) return\n if (input.type === 'email') void check(form)\n if (input.matches('[data-role-search]')) {\n let n = 0\n for (const row of form.querySelectorAll<HTMLElement>('[data-role-option]')) {\n row.hidden = !row.textContent?.toLocaleLowerCase('vi').includes(input.value.toLocaleLowerCase('vi'))\n if (!row.hidden) n++\n }\n const empty = form.querySelector<HTMLElement>('[data-role-empty]')\n if (empty) empty.hidden = n > 0\n }\n })\n document.addEventListener('change', (event) => {\n const input = event.target as HTMLElement,\n form = input.closest<HTMLFormElement>('form[data-user-workflow]')\n if (form && input.matches('select[name=\"companyId\"],select[name=\"branchId\"],select[name=\"scopeKind\"]'))\n scope(form, input.matches('select[name=\"companyId\"]'))\n })\n document.addEventListener('click', (event) => {\n const target = event.target as HTMLElement\n if (target.matches('[data-email-retry]')) void check(target.closest('form')!)\n })\n document.addEventListener('submit', (event) => {\n const form = event.target as HTMLFormElement\n if (\n form.matches('form[data-user-workflow]') &&\n form.querySelector('input[type=email]') &&\n form.dataset.emailAvailable !== 'true'\n )\n event.preventDefault()\n })\n new MutationObserver(scan).observe(document.documentElement, { childList: true, subtree: true })\n scan()\n}\n", "import { installUserWorkflow } from './user-workflow.ts'\nimport type { IslandController, IslandProps } from '@ketvietlab/ketjs-view'\n\nconst tableSelectionMarker = Symbol.for('ket.backend.table-selection')\nconst dropdownDismissMarker = Symbol.for('ket.backend.dropdown-dismiss')\nconst globalFilterMarker = Symbol.for('ket.backend.global-filter')\nconst routeModalMarker = Symbol.for('ket.backend.route-modal')\nconst liveRegionMarker = Symbol.for('ket.backend.live-region')\nconst themeToggleMarker = Symbol.for('ket.backend.theme-toggle')\nconst themeStorageKey = 'ket.backend.theme'\nconst dismissibleDropdown = [\n '[data-ui=\"search-menu\"]',\n '[data-ui=\"col-config\"]',\n '[data-ui=\"bulk-actions\"]',\n '[data-ui=\"viewer\"]',\n '[data-ui=\"record-more\"]',\n].join(', ')\n\ntype KetBrowserGlobals = typeof globalThis & {\n [key: symbol]: unknown\n __ketNavigation?: { navigate?: (href: string) => unknown }\n confirm: (message?: string) => boolean\n}\n\nconst browserGlobals = globalThis as KetBrowserGlobals\nconst eventElement = (event: Event): Element | null => (event.target instanceof Element ? event.target : null)\n\ntype ThemePreference = 'light' | 'dark'\n\nconst themePreference = (value: string | null | undefined): ThemePreference | null =>\n value === 'light' || value === 'dark' ? value : null\n\nconst storedTheme = (): ThemePreference | null => {\n try {\n return themePreference(localStorage.getItem(themeStorageKey))\n } catch {\n return null\n }\n}\n\nconst saveTheme = (theme: ThemePreference): void => {\n try {\n localStorage.setItem(themeStorageKey, theme)\n } catch {\n // Theme selection still works for this document when storage is unavailable.\n }\n}\n\nconst resolvedTheme = (): ThemePreference =>\n themePreference(document.documentElement.dataset.theme) ??\n (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n\nconst syncThemeToggle = (): void => {\n const pressed = String(resolvedTheme() === 'dark')\n for (const control of document.querySelectorAll<HTMLElement>(\n '[data-ui=\"sidebar-tools\"] [data-ui=\"action\"][name=\"theme\"]',\n ))\n control.setAttribute('aria-pressed', pressed)\n}\n\n/** Keep the shell preference explicit only after the reader chooses one. */\nconst installThemeToggle = (): void => {\n if (browserGlobals[themeToggleMarker]) return\n browserGlobals[themeToggleMarker] = true\n\n const preference = storedTheme()\n if (preference) document.documentElement.dataset.theme = preference\n syncThemeToggle()\n\n document.addEventListener('click', (event) => {\n const control = eventElement(event)?.closest<HTMLButtonElement>(\n '[data-ui=\"sidebar-tools\"] [data-ui=\"action\"][name=\"theme\"]',\n )\n if (!control || control.disabled) return\n const next = resolvedTheme() === 'dark' ? 'light' : 'dark'\n document.documentElement.dataset.theme = next\n saveTheme(next)\n syncThemeToggle()\n })\n\n matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (!themePreference(document.documentElement.dataset.theme)) syncThemeToggle()\n })\n\n addEventListener('storage', (event) => {\n if (event.key !== themeStorageKey) return\n const next = themePreference(event.newValue)\n if (next) document.documentElement.dataset.theme = next\n else delete document.documentElement.dataset.theme\n syncThemeToggle()\n })\n}\n\nconst updateSelection = (table: Element): void => {\n const rows = [...table.querySelectorAll<HTMLInputElement>('[data-ui=\"row-select\"]:not(:disabled)')]\n const checked = rows.filter((input) => input.checked).length\n const all = table.querySelector<HTMLInputElement>('[data-ui=\"select-all\"]')\n if (all) {\n all.checked = rows.length > 0 && checked === rows.length\n all.indeterminate = checked > 0 && checked < rows.length\n }\n if (!checked) {\n const shell = table.closest('[data-ui=\"shell\"]')\n for (const menu of shell?.querySelectorAll<HTMLDetailsElement>('[data-ui=\"bulk-actions\"][open]') ?? [])\n menu.removeAttribute('open')\n }\n}\n\nconst installTableSelection = (): void => {\n if (browserGlobals[tableSelectionMarker]) return\n browserGlobals[tableSelectionMarker] = true\n\n document.addEventListener('change', (event) => {\n const target = eventElement(event)\n if (!(target instanceof HTMLInputElement)) return\n if (!target.matches('[data-ui=\"select-all\"], [data-ui=\"row-select\"]')) return\n const table = target.closest('[data-ui=\"table\"]')\n if (!table) return\n if (target.matches('[data-ui=\"select-all\"]'))\n for (const input of table.querySelectorAll<HTMLInputElement>('[data-ui=\"row-select\"]:not(:disabled)'))\n input.checked = target.checked\n updateSelection(table)\n })\n\n document.addEventListener('click', (event) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n )\n return\n const target = eventElement(event)\n if (\n target?.closest('a, button, input, select, textarea, label, summary, details, [data-ui=\"select-cell\"]')\n )\n return\n const row = target?.closest<HTMLElement>('[data-ui=\"row\"][data-row-href]')\n const href = row?.getAttribute('data-row-href')\n if (!href) return\n event.preventDefault()\n if (browserGlobals.__ketNavigation?.navigate) void browserGlobals.__ketNavigation.navigate(href)\n else browserGlobals.location.assign(href)\n })\n document.addEventListener('keydown', (event) => {\n if (event.defaultPrevented || (event.key !== 'Enter' && event.key !== ' ')) return\n const target = eventElement(event)\n const row = target?.matches('[data-ui=\"row\"][data-row-href][tabindex=\"0\"]') ? target : null\n const href = row?.getAttribute('data-row-href')\n if (!href) return\n event.preventDefault()\n navigateTo(href)\n })\n}\n\nconst openDropdowns = (): HTMLDetailsElement[] => [\n ...document.querySelectorAll<HTMLDetailsElement>(`${dismissibleDropdown}[open]`),\n]\n\nconst installDropdownDismiss = (): void => {\n if (browserGlobals[dropdownDismissMarker]) return\n browserGlobals[dropdownDismissMarker] = true\n\n document.addEventListener('click', (event) => {\n const current = eventElement(event)?.closest(dismissibleDropdown)\n for (const dropdown of openDropdowns()) {\n if (dropdown !== current && !dropdown.contains(current ?? null)) dropdown.removeAttribute('open')\n }\n })\n\n document.addEventListener('keydown', (event) => {\n if (event.key !== 'Escape') return\n const dropdowns = openDropdowns()\n if (!dropdowns.length) return\n const focused = document.activeElement?.closest<HTMLDetailsElement>(dismissibleDropdown)\n const current = focused?.open ? focused : dropdowns.at(-1)\n current?.removeAttribute('open')\n current?.querySelector<HTMLElement>('summary')?.focus()\n event.preventDefault()\n })\n}\n\nconst installGlobalFilter = (): void => {\n if (browserGlobals[globalFilterMarker]) return\n browserGlobals[globalFilterMarker] = true\n\n document.addEventListener('click', (event) => {\n const trigger = eventElement(event)?.closest<HTMLElement>('[data-ui=\"chrome-search-toggle\"]')\n const controls = trigger?.getAttribute('aria-controls')\n if (!trigger || !controls) return\n const dialog = document.getElementById(controls)\n if (!(dialog instanceof HTMLDialogElement) || dialog.open) return\n dialog.showModal()\n trigger.setAttribute('aria-expanded', 'true')\n requestAnimationFrame(() =>\n dialog\n .querySelector<HTMLElement>('[data-presentation=\"modal\"] [data-ui=\"chrome-search-input\"]')\n ?.focus(),\n )\n })\n\n document.addEventListener(\n 'cancel',\n (event) => {\n if (!eventElement(event)?.matches('[data-ui=\"chrome-search-modal\"]')) return\n event.preventDefault()\n },\n true,\n )\n\n document.addEventListener(\n 'close',\n (event) => {\n const dialog = eventElement(event)\n if (!(dialog instanceof HTMLDialogElement)) return\n if (!dialog.matches('[data-ui=\"chrome-search-modal\"]')) return\n const trigger = document.querySelector<HTMLElement>(\n `[data-ui=\"chrome-search-toggle\"][aria-controls=\"${CSS.escape(dialog.id)}\"]`,\n )\n trigger?.setAttribute('aria-expanded', 'false')\n trigger?.focus()\n },\n true,\n )\n}\n\nconst focusable = [\n 'a[href]',\n 'button:not(:disabled)',\n 'input:not(:disabled):not([type=\"hidden\"])',\n 'select:not(:disabled)',\n 'textarea:not(:disabled)',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nconst activeRouteModal = (): HTMLElement | null =>\n document.querySelector<HTMLElement>('[data-ui=\"modal-layer\"][data-route-modal=\"true\"]')\n\nconst modalFocusables = (modal: HTMLElement): HTMLElement[] =>\n [...modal.querySelectorAll<HTMLElement>(focusable)].filter(\n (item) =>\n !item.hidden &&\n item.getAttribute('aria-hidden') !== 'true' &&\n !item.matches('[data-ui=\"modal-backdrop\"]'),\n )\n\nconst navigateTo = (href: string): void => {\n if (browserGlobals.__ketNavigation?.navigate) void browserGlobals.__ketNavigation.navigate(href)\n else browserGlobals.location.assign(href)\n}\n\nconst eventStartedInNestedModal = (event: KeyboardEvent, routeModal: HTMLElement): boolean =>\n event\n .composedPath()\n .some(\n (target) =>\n target instanceof HTMLElement &&\n target !== routeModal &&\n target.matches('[data-ui=\"modal-layer\"][data-presentation=\"dialog\"]'),\n )\n\n/**\n * Whether anything in the modal has been typed into since the server rendered it.\n *\n * Comparing each control against its own default is what makes this work without\n * any bookkeeping: the page is server-rendered, so the default *is* the state the\n * reader was given. A modal with no form \u2014 a reader, an inspector \u2014 has nothing\n * to compare and is never dirty, so the guard costs those screens nothing.\n */\nconst modalHasDraft = (modal: HTMLElement): boolean => {\n for (const field of modal.querySelectorAll<HTMLInputElement>('input:not([type=\"hidden\"])')) {\n if (field.disabled) continue\n if (field.type === 'checkbox' || field.type === 'radio') {\n if (field.checked !== field.defaultChecked) return true\n } else if (field.value !== field.defaultValue) return true\n }\n for (const area of modal.querySelectorAll<HTMLTextAreaElement>('textarea'))\n if (!area.disabled && area.value !== area.defaultValue) return true\n for (const select of modal.querySelectorAll<HTMLSelectElement>('select')) {\n if (select.disabled) continue\n for (const option of select.options) if (option.selected !== option.defaultSelected) return true\n }\n return false\n}\n\n/**\n * The guard, and what it is not.\n *\n * Leaving a modal is a link, and a link still works with scripting off \u2014 that is\n * the point of building it as one. So this catches the stray backdrop click, the\n * reflexive Escape and the tab clicked without thinking about the note already\n * typed; it is not a lock, and nothing here should be read as one. The wording\n * comes from the server because this file cannot translate.\n */\nconst mayLeaveModal = (modal: HTMLElement): boolean => {\n if (!modalHasDraft(modal)) return true\n const message = modal.getAttribute('data-unsaved-prompt')\n // No prompt declared means the screen did not ask to be guarded.\n if (!message) return true\n return browserGlobals.confirm(message)\n}\n\n/** Progressive keyboard behavior for URL-owned create/edit workspaces. */\n/**\n * Hear when the thing a screen is waiting for actually changed.\n *\n * The screens this replaces reloaded the whole document on a timer, which threw\n * away scroll, focus and anything typed, on a schedule unrelated to when the\n * work finished. Here the server says so, and the page asks for the fragment it\n * already knows how to swap \u2014 so the reader keeps their place.\n *\n * The connection belongs to the element. A fragment swap replaces it, and the\n * observer opens the new one and closes the old; a screen with nothing to wait\n * for renders no element and opens nothing.\n */\nconst installLiveRegion = (): void => {\n if (browserGlobals[liveRegionMarker]) return\n browserGlobals[liveRegionMarker] = true\n if (typeof EventSource !== 'function') return\n\n let watched: Element | null = null\n let source: EventSource | null = null\n const close = () => {\n source?.close()\n source = null\n watched = null\n }\n\n const sync = (): void => {\n const region = document.querySelector('[data-ui=\"live-region\"][data-stream]')\n if (region === watched) return\n close()\n const id = region instanceof HTMLElement ? (region.dataset.stream ?? '') : ''\n if (!id) return\n watched = region\n source = new EventSource(`/_ket/stream/${encodeURIComponent(id)}`)\n // What the chunk says is the deployment's business. That something was said\n // is the whole signal: the screen is server-rendered, so the way to find out\n // what changed is to ask for it.\n const refresh = () => navigateTo(location.href)\n source.onmessage = refresh\n source.addEventListener('done', () => {\n close()\n refresh()\n })\n // EventSource reconnects on its own, and a stream that has ended answers 404\n // rather than reopening. Leaving the error alone would retry that forever.\n source.onerror = () => {\n if (source?.readyState === EventSource.CLOSED) close()\n }\n }\n\n sync()\n new MutationObserver(sync).observe(document.body, { childList: true, subtree: true })\n addEventListener('pagehide', close)\n}\n\nconst installRouteModal = (): void => {\n if (browserGlobals[routeModalMarker]) return\n browserGlobals[routeModalMarker] = true\n const focused = new WeakSet<HTMLElement>()\n const focusModal = (): void => {\n const modal = activeRouteModal()\n if (!modal || focused.has(modal)) return\n focused.add(modal)\n requestAnimationFrame(() => {\n const sheet = modal.querySelector<HTMLElement>('[data-ui=\"modal-sheet\"]')\n const target = modalFocusables(modal).find((item) => !item.matches('[data-ui=\"modal-close\"]'))\n ;(target ?? sheet)?.focus()\n })\n }\n focusModal()\n new MutationObserver(focusModal).observe(document.body, { childList: true, subtree: true })\n\n // The backdrop and the X are ordinary links, so the guard has to run before\n // the navigation layer sees the click rather than inside it.\n document.addEventListener(\n 'click',\n (event) => {\n const modal = activeRouteModal()\n if (!modal) return\n // A tab inside a modal is a third way out of it. It looks like a control\n // that stays on the screen, which is exactly why losing a half-written\n // note to one went unnoticed: the reader never meant to leave. It is a\n // link like the other two, and it leaves the same way.\n const leaving = event\n .composedPath()\n .find(\n (target) =>\n target instanceof HTMLElement &&\n (target.matches('[data-ui=\"modal-close\"], [data-ui=\"modal-backdrop\"], a[data-ui=\"tab\"]') ||\n target.matches('a[data-ui=\"action\"][href]')),\n )\n if (!leaving || !modal.contains(leaving as HTMLElement)) return\n if (!mayLeaveModal(modal)) {\n event.preventDefault()\n event.stopPropagation()\n }\n },\n true,\n )\n\n document.addEventListener(\n 'click',\n (event) => {\n const container = document.querySelector<HTMLElement>('[data-save-before-navigation]')\n const form =\n container instanceof HTMLFormElement ? container : container?.querySelector<HTMLFormElement>('form')\n const anchor = eventElement(event)?.closest<HTMLAnchorElement>('a[href]')\n if (!container || !form || !anchor || activeRouteModal() || !modalHasDraft(container)) return\n event.preventDefault()\n event.stopPropagation()\n if (!browserGlobals.confirm(container.dataset.saveBeforeNavigation)) return\n let destination = form.querySelector<HTMLInputElement>('input[name=\"returnTo\"]')\n if (!destination) {\n destination = document.createElement('input')\n destination.type = 'hidden'\n destination.name = 'returnTo'\n form.append(destination)\n }\n destination.value = anchor.href\n form.requestSubmit()\n },\n true,\n )\n document.addEventListener('keydown', (event) => {\n const modal = activeRouteModal()\n if (!modal) return\n // Relation-select removes its dialog synchronously on Escape. The event's\n // composed path is stable even after that DOM subtree disappears, so the\n // route layer must use it instead of querying the now-removed target.\n if (eventStartedInNestedModal(event, modal)) return\n if (event.key === 'Escape') {\n const close = modal.querySelector<HTMLAnchorElement>('[data-ui=\"modal-close\"]')\n if (!close) return\n event.preventDefault()\n if (!mayLeaveModal(modal)) return\n navigateTo(close.getAttribute('href') ?? close.href)\n return\n }\n if (event.key !== 'Tab') return\n const items = modalFocusables(modal)\n if (!items.length) return\n const first = items[0]\n const last = items.at(-1)!\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n })\n}\n\nexport const createTableSelectionView = (): IslandController => ({\n view: () => <span data-ui=\"table-selection-runtime\" hidden />,\n})\n\nexport const tableSelection = (_props: IslandProps): IslandController => {\n installUserWorkflow()\n installThemeToggle()\n installTableSelection()\n installDropdownDismiss()\n installGlobalFilter()\n installRouteModal()\n installLiveRegion()\n return createTableSelectionView()\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["installed", "installUserWorkflow", "abort", "timer", "sequence", "check", "form", "input", "status", "request", "value", "next", "retry", "paint", "message", "valid", "response", "result", "scope", "changed", "company", "branch", "kind", "option", "key", "assigned", "row", "assignedLabel", "description", "companyField", "branchField", "scan", "event", "n", "empty", "target", "jsx", "tableSelectionMarker", "dropdownDismissMarker", "globalFilterMarker", "routeModalMarker", "liveRegionMarker", "themeToggleMarker", "themeStorageKey", "dismissibleDropdown", "browserGlobals", "eventElement", "event", "themePreference", "value", "storedTheme", "saveTheme", "theme", "resolvedTheme", "syncThemeToggle", "pressed", "control", "installThemeToggle", "preference", "next", "updateSelection", "table", "rows", "checked", "input", "all", "shell", "menu", "installTableSelection", "target", "href", "navigateTo", "openDropdowns", "installDropdownDismiss", "current", "dropdown", "dropdowns", "focused", "installGlobalFilter", "trigger", "controls", "dialog", "focusable", "activeRouteModal", "modalFocusables", "modal", "item", "eventStartedInNestedModal", "routeModal", "modalHasDraft", "field", "area", "select", "option", "mayLeaveModal", "message", "installLiveRegion", "watched", "source", "close", "sync", "region", "id", "refresh", "installRouteModal", "focusModal", "sheet", "leaving", "container", "form", "anchor", "destination", "items", "first", "last", "createTableSelectionView", "tableSelection", "_props", "installUserWorkflow"]
7
7
  }
@@ -545,6 +545,26 @@
545
545
  font-size: 0.8125rem;
546
546
  font-weight: 600;
547
547
  }
548
+ /* A line that says work is still going on. It reads as status rather than as
549
+ content, and it stays put — the whole point is that the page underneath it
550
+ is no longer being thrown away and rebuilt. */
551
+ [data-ui="live-region"] {
552
+ display: flex;
553
+ align-items: center;
554
+ gap: var(--admin-gap-xs);
555
+ margin: 0;
556
+ color: var(--admin-ink-secondary);
557
+ font-size: 0.8125rem;
558
+ font-weight: 600;
559
+ }
560
+ [data-ui="live-region"]::before {
561
+ inline-size: 0.5rem;
562
+ block-size: 0.5rem;
563
+ flex: 0 0 auto;
564
+ border-radius: 50%;
565
+ background: var(--admin-accent);
566
+ content: "";
567
+ }
548
568
  [data-ui="skeleton"] {
549
569
  display: grid;
550
570
  gap: var(--admin-gap-sm);
@@ -706,15 +726,38 @@
706
726
  [data-ui="sidebar-header"] {
707
727
  padding: 0;
708
728
  }
729
+ /* The grid above reserves `minmax(8rem, 1fr)` for this. It was reserving that
730
+ column for an element `responsive.css` had hidden, so the row carried a
731
+ gap where the only other way out of a screen should have been. */
709
732
  [data-ui="sidebar-search"] {
733
+ display: flex;
710
734
  margin: 0;
711
735
  }
736
+ /* The one definition of the mobile menu strip. `responsive.css` used to hide
737
+ it at this same breakpoint, in this same layer, at this same specificity —
738
+ so which rule won was decided by the order of the `styles` array and
739
+ nothing else. Swapping two lines in that array made the mobile menu
740
+ disappear entirely. */
712
741
  [data-ui="sidebar-nav"] {
713
742
  display: block;
714
743
  grid-column: 1 / -1;
715
744
  padding: 0;
716
745
  overflow-x: auto;
717
746
  overflow-y: hidden;
747
+ /* The desktop sidebar hides its scrollbar because it scrolls vertically
748
+ in a tall column where the cut edge is obvious. Lying on its side this
749
+ strip hides most of itself — two thirds of it on a phone — and without
750
+ a scrollbar there is nothing at all to say the rest exists. */
751
+ scrollbar-width: thin;
752
+ overscroll-behavior-inline: contain;
753
+ /* A second, quieter signal for the platforms that draw the scrollbar only
754
+ while it moves: the strip fades where it continues. */
755
+ mask-image: linear-gradient(to right, #000 calc(100% - 1.5rem), transparent);
756
+ }
757
+
758
+ [data-ui="sidebar-nav"]::-webkit-scrollbar {
759
+ display: block;
760
+ block-size: 0.25rem;
718
761
  }
719
762
  [data-ui="sidebar-section-label"],
720
763
  [data-ui="app-list"],
@@ -1,2 +1,2 @@
1
1
  /* Generated by tools/build-backend-design-system.mjs — do not edit. */
2
- @layer ket.theme{:root{color-scheme:light dark;--kv-ref-black: #000000;--kv-ref-white: #ffffff;--kv-ref-bg-app: #15181d;--kv-ref-bg-sidebar: #171b20;--kv-ref-bg-main: #1b1f24;--kv-ref-bg-rail: #181c21;--kv-ref-surface-0: #171b20;--kv-ref-surface-1: #1d2228;--kv-ref-surface-2: #23282f;--kv-ref-surface-3: #292f37;--kv-ref-surface-4: #30363f;--kv-ref-control: #20252c;--kv-ref-control-hover: #292f37;--kv-ref-control-active: #313844;--kv-ref-control-disabled: #1d2126;--kv-ref-border-subtle: rgb(255 255 255 / 5.5%);--kv-ref-border-default: rgb(255 255 255 / 8.5%);--kv-ref-border-strong: rgb(255 255 255 / 13%);--kv-ref-border-emphasis: rgb(255 255 255 / 18%);--kv-ref-border-solid: #30363d;--kv-ref-text-primary: #f2f4f7;--kv-ref-text-secondary: #b4bac4;--kv-ref-text-tertiary: #858d99;--kv-ref-text-muted: #68717d;--kv-ref-text-disabled: #505862;--kv-ref-text-inverse: #111318;--kv-ref-primary-50: #eef2ff;--kv-ref-primary-100: #e0e7ff;--kv-ref-primary-200: #c7d2fe;--kv-ref-primary-300: #a5b4fc;--kv-ref-primary-400: #818cf8;--kv-ref-primary-500: #6366f1;--kv-ref-primary-600: #5563df;--kv-ref-primary-700: #4753c7;--kv-ref-primary-800: #3944a5;--kv-ref-primary-900: #303a83;--kv-ref-primary: #5968df;--kv-ref-primary-hover: #6875ea;--kv-ref-primary-active: #4c59c9;--kv-ref-primary-subtle: rgb(89 104 223 / 14%);--kv-ref-primary-muted: rgb(89 104 223 / 22%);--kv-ref-primary-border: rgb(112 126 240 / 32%);--kv-ref-nav-selected: rgb(76 93 190 / 52%);--kv-ref-nav-selected-hover: rgb(83 101 204 / 62%);--kv-ref-success: #40c97b;--kv-ref-success-hover: #4dd487;--kv-ref-success-bg: rgb(64 201 123 / 13%);--kv-ref-success-border: rgb(64 201 123 / 22%);--kv-ref-warning: #e5a93c;--kv-ref-warning-hover: #efb74e;--kv-ref-warning-bg: rgb(229 169 60 / 14%);--kv-ref-warning-border: rgb(229 169 60 / 24%);--kv-ref-danger: #ef665c;--kv-ref-danger-hover: #f1766d;--kv-ref-danger-bg: rgb(239 102 92 / 13%);--kv-ref-danger-border: rgb(239 102 92 / 28%);--kv-ref-info: #5794f2;--kv-ref-info-bg: rgb(87 148 242 / 13%);--kv-ref-info-border: rgb(87 148 242 / 25%);--kv-ref-status-todo-text: #aab1bc;--kv-ref-status-todo-bg: rgb(170 177 188 / 10%);--kv-ref-status-progress-text: #6f9cf8;--kv-ref-status-progress-bg: rgb(79 126 233 / 14%);--kv-ref-status-done-text: #4fd184;--kv-ref-status-done-bg: rgb(54 190 113 / 14%);--kv-ref-status-paused-text: #e9ad3e;--kv-ref-status-paused-bg: rgb(233 173 62 / 14%);--kv-ref-status-overdue-text: #f0645c;--kv-ref-status-overdue-bg: rgb(240 100 92 / 14%);--kv-page-bg: light-dark(#f7f5f5, var(--kv-ref-bg-main));--kv-app-bg: light-dark(#f7f5f5, var(--kv-ref-bg-app));--kv-sidebar-bg: light-dark(#f7f5f5, var(--kv-ref-bg-sidebar));--kv-right-rail-bg: light-dark(#f7f5f5, var(--kv-ref-bg-rail));--kv-panel-bg: light-dark(#ffffff, var(--kv-ref-surface-1));--kv-panel-bg-subtle: light-dark(#f7f5f5, var(--kv-ref-surface-0));--kv-surface-raised: light-dark(#fbfafa, var(--kv-ref-surface-2));--kv-surface-hover: light-dark(#f1eff0, var(--kv-ref-surface-3));--kv-text-main: light-dark(#24262a, var(--kv-ref-text-primary));--kv-text-secondary: light-dark(#5a5c5e, var(--kv-ref-text-secondary));--kv-text-muted: light-dark(#717373, var(--kv-ref-text-tertiary));--kv-text-disabled: light-dark(#9a9ea2, var(--kv-ref-text-disabled));--kv-panel-border: light-dark(#e9e7e8, var(--kv-ref-border-subtle));--kv-panel-divider: var(--kv-panel-border);--kv-border-default: light-dark(#dddcde, var(--kv-ref-border-default));--kv-border-strong: light-dark(#cccccd, var(--kv-ref-border-strong));--kv-interactive-bg: light-dark(#ffffff, var(--kv-ref-control));--kv-interactive-hover: light-dark(#f7f5f5, var(--kv-ref-control-hover));--kv-interactive-active: light-dark(#efedee, var(--kv-ref-control-active));--kv-interactive-disabled: light-dark(#efedee, var(--kv-ref-control-disabled));--kv-accent: light-dark(#5167c4, var(--kv-ref-primary));--kv-accent-hover: light-dark(#45579f, var(--kv-ref-primary-hover));--kv-accent-active: light-dark(#394985, var(--kv-ref-primary-active));--kv-accent-subtle: light-dark(#eef0fb, var(--kv-ref-primary-subtle));--kv-accent-muted: light-dark(#dde2f7, var(--kv-ref-primary-muted));--kv-accent-border: light-dark(#c3cdf0, var(--kv-ref-primary-border));--kv-focus-border: light-dark(#637ad5, #6474e8);--kv-focus-ring: 0 0 0 3px light-dark(#dde2f7, rgb(89 104 223 / 16%));--kv-on-accent: var(--kv-ref-white);--kv-positive: light-dark(#1d5d3b, var(--kv-ref-success));--kv-positive-hover: light-dark(#174b30, var(--kv-ref-success-hover));--kv-positive-bg: light-dark(#ecf5ef, var(--kv-ref-success-bg));--kv-positive-border: light-dark(#c9e7d4, var(--kv-ref-success-border));--kv-success: var(--kv-positive);--kv-success-hover: var(--kv-positive-hover);--kv-success-bg: var(--kv-positive-bg);--kv-success-border: var(--kv-positive-border);--kv-warning: light-dark(#8b5c12, var(--kv-ref-warning));--kv-warning-hover: light-dark(#70490e, var(--kv-ref-warning-hover));--kv-warning-bg: light-dark(#fbf3e6, var(--kv-ref-warning-bg));--kv-warning-border: light-dark(#eed6ad, var(--kv-ref-warning-border));--kv-danger: light-dark(#b42318, var(--kv-ref-danger));--kv-danger-hover: light-dark(#912018, var(--kv-ref-danger-hover));--kv-danger-bg: light-dark(#fef3f2, var(--kv-ref-danger-bg));--kv-danger-border: light-dark(#fecdca, var(--kv-ref-danger-border));--kv-info: light-dark(#315f8e, var(--kv-ref-info));--kv-info-bg: light-dark(#eaf2fb, var(--kv-ref-info-bg));--kv-info-border: light-dark(#c7dcf0, var(--kv-ref-info-border));--kv-nav-selected: light-dark(#dde2f7, var(--kv-ref-nav-selected));--kv-nav-selected-hover: light-dark(#cfd6f5, var(--kv-ref-nav-selected-hover));--kv-nav-selected-text: light-dark(#394985, #dce2ff);--kv-tab-active-text: light-dark(#45579f, #8c9aff);--kv-color-canvas: var(--kv-page-bg);--kv-color-canvas-raised: var(--kv-panel-bg-subtle);--kv-color-surface: var(--kv-panel-bg);--kv-color-surface-subtle: var(--kv-surface-raised);--kv-color-surface-hover: var(--kv-surface-hover);--kv-color-ink: var(--kv-text-main);--kv-color-ink-secondary: var(--kv-text-secondary);--kv-color-ink-muted: var(--kv-text-muted);--kv-color-line: var(--kv-panel-border);--kv-color-line-strong: var(--kv-border-strong);--kv-color-focus: var(--kv-focus-border);--kv-color-focus-ring: light-dark(#dde2f7, rgb(89 104 223 / 16%));--kv-color-accent: var(--kv-accent);--kv-color-accent-hover: var(--kv-accent-hover);--kv-color-accent-soft: var(--kv-accent-subtle);--kv-color-on-accent: var(--kv-on-accent);--kv-color-positive: var(--kv-positive);--kv-color-positive-soft: var(--kv-positive-bg);--kv-color-warning: var(--kv-warning);--kv-color-warning-soft: var(--kv-warning-bg);--kv-color-danger: var(--kv-danger);--kv-color-danger-soft: var(--kv-danger-bg);--kv-color-info: var(--kv-info);--kv-color-info-soft: var(--kv-info-bg);--kv-font-sans: "Inter", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--kv-font-display: var(--kv-font-sans);--kv-font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;--kv-text-2xs: .625rem;--kv-text-xs: .6875rem;--kv-text-sm: .75rem;--kv-text-md: .8125rem;--kv-text-base: .875rem;--kv-text-lg: 1rem;--kv-text-xl: 1.125rem;--kv-text-2xl: 1.375rem;--kv-text-3xl: 1.75rem;--kv-leading-tight: 1.2;--kv-leading-normal: 1.45;--kv-leading-relaxed: 1.6;--kv-weight-normal: 400;--kv-weight-medium: 500;--kv-weight-semibold: 600;--kv-weight-bold: 700;--kv-space-0: 0;--kv-space-0-5: .125rem;--kv-space-1: .25rem;--kv-space-1-5: .375rem;--kv-space-2: .5rem;--kv-space-2-5: .625rem;--kv-space-3: .75rem;--kv-space-4: 1rem;--kv-space-5: 1.25rem;--kv-space-6: 1.5rem;--kv-space-7: 1.75rem;--kv-space-8: 2rem;--kv-space-10: 2.5rem;--kv-space-12: 3rem;--kv-space-16: 4rem;--kv-gap-control: var(--kv-space-2);--kv-gap-form-row: .875rem;--kv-gap-field-group: var(--kv-space-5);--kv-gap-section: var(--kv-space-7);--kv-page-padding-x: var(--kv-space-7);--kv-page-padding-y: var(--kv-space-6);--kv-control-height-xs: 1.625rem;--kv-control-height-sm: 1.875rem;--kv-control-height-md: 2.125rem;--kv-control-height-lg: 2.5rem;--kv-control-height: var(--kv-control-height-md);--kv-control-height-compact: var(--kv-control-height-sm);--kv-control-height-prominent: var(--kv-control-height-lg);--kv-sidebar-width: 13.5rem;--kv-right-rail-width: 21.25rem;--kv-sidebar-item-height: 1.875rem;--kv-table-row-height: 3.25rem;--kv-table-header-height: 2.625rem;--kv-row-height: var(--kv-table-row-height);--kv-radius-xs: .1875rem;--kv-radius-sm: .3125rem;--kv-radius-md: .4375rem;--kv-radius-lg: .5625rem;--kv-radius-xl: .75rem;--kv-radius-full: 9999px;--kv-radius-app-region: 0;--kv-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);--kv-shadow-sm: 0 2px 6px rgb(0 0 0 / 24%);--kv-shadow-md: 0 8px 20px rgb(0 0 0 / 28%);--kv-shadow-popover: 0 12px 32px rgb(0 0 0 / 42%);--kv-shadow-float: var(--kv-shadow-popover);--kv-duration-fast: .1s;--kv-duration-normal: .16s;--kv-duration-slow: .24s;--kv-ease-default: cubic-bezier(.2, 0, 0, 1);--kv-ease-out: cubic-bezier(0, 0, .2, 1);--kv-motion-fast: var(--kv-duration-fast) var(--kv-ease-default);--kv-motion-normal: var(--kv-duration-normal) var(--kv-ease-default);--kv-z-base: 0;--kv-z-sticky: 10;--kv-z-dropdown: 40;--kv-z-popover: 50;--kv-z-modal: 100;--kv-z-toast: 200;--kv-page-chrome-bg: light-dark(var(--kv-page-bg), var(--kv-panel-bg));--kv-page-content-bg: var(--kv-page-bg);--kv-action-primary-bg: var(--kv-accent);--kv-action-primary-hover: var(--kv-accent-hover);--kv-action-primary-active: var(--kv-accent-active);--kv-action-primary-ink: var(--kv-on-accent);--kv-input-bg: light-dark(#ffffff, #20252b);--kv-input-bg-hover: light-dark(#f7f5f5, #252b32);--kv-input-bg-focus: light-dark(#ffffff, #222831);--kv-input-border: light-dark(#dddcde, rgb(255 255 255 / 10%));--kv-input-border-hover: light-dark(#cccccd, rgb(255 255 255 / 17%));--kv-input-border-focus: var(--kv-focus-border);--kv-input-placeholder: light-dark(#717373, #707985);--kv-input-text: light-dark(#24262a, #e9ecf1);--kv-input-ring: var(--kv-focus-ring);--kv-field-bg: var(--kv-input-bg);--kv-field-border: var(--kv-input-border);--kv-table-bg: light-dark(var(--kv-panel-bg), transparent);--kv-table-header-bg: light-dark(#efedee, #282d34);--kv-table-header-text: light-dark(#5a5c5e, #9da4af);--kv-table-row-bg: transparent;--kv-table-row-hover: light-dark(#f7f5f5, rgb(255 255 255 / 2.7%));--kv-table-row-selected: light-dark(#eef0fb, rgb(89 104 223 / 9%));--kv-table-border: var(--kv-panel-border);--kv-sidebar-border: light-dark(#e9e7e8, rgb(255 255 255 / 7%));--kv-right-rail-border: var(--kv-sidebar-border)}:root[data-theme=light],[data-kv-design-system][data-theme=light]{color-scheme:light}:root[data-theme=dark],[data-kv-design-system][data-theme=dark]{color-scheme:dark}[data-kv-design-system][data-density=compact]{--kv-control-height: var(--kv-control-height-sm);--kv-row-height: 2.5rem}[data-kv-design-system][data-density=comfortable]{--kv-control-height: var(--kv-control-height-lg);--kv-row-height: 3.75rem}}@layer ket.reset{:where([data-kv-design-system]),:where([data-kv-design-system]) *,:where([data-kv-design-system]) *:before,:where([data-kv-design-system]) *:after{box-sizing:border-box}:where([data-kv-design-system]){min-width:0;color:var(--kv-color-ink);font-family:var(--kv-font-sans);font-size:var(--kv-text-base);line-height:var(--kv-leading-normal);text-rendering:optimizeLegibility}:where([data-kv-design-system]) :where(button,input,select,textarea){font:inherit}:where([data-kv-design-system]) :where(a,button,input,select,textarea,summary):focus-visible{outline:2px solid var(--kv-color-focus);outline-offset:2px;box-shadow:var(--kv-focus-ring)}:where([data-kv-design-system]) :where(h1,h2,h3,p){margin-block-start:0}@media(prefers-reduced-motion:reduce){:where([data-kv-design-system]) *,:where([data-kv-design-system]) *:before,:where([data-kv-design-system]) *:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=action]{display:inline-flex;min-height:var(--kv-control-height);align-items:center;justify-content:center;gap:.4375rem;padding-inline:var(--kv-space-3);border:1px solid var(--kv-border-default);border-radius:var(--kv-radius-sm);background:var(--kv-interactive-bg);color:var(--kv-text-secondary);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium);line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background var(--kv-motion-fast),border-color var(--kv-motion-fast),transform var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=action]:hover:not(:disabled){border-color:var(--kv-border-strong);background:var(--kv-interactive-hover);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=action]:active:not(:disabled){background:var(--kv-interactive-active);transform:translateY(1px)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]{border-color:var(--kv-action-primary-bg);background:var(--kv-action-primary-bg);color:var(--kv-action-primary-ink)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]:hover:not(:disabled){border-color:var(--kv-action-primary-hover);background:var(--kv-action-primary-hover)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]:active:not(:disabled){border-color:var(--kv-action-primary-active);background:var(--kv-action-primary-active)}:where([data-kv-design-system]) [data-ui=action][data-variant=tertiary]{border-color:transparent;background:transparent;color:var(--kv-text-secondary)}:where([data-kv-design-system]) [data-ui=action][data-variant=tertiary]:hover:not(:disabled){border-color:transparent;background:color-mix(in srgb,var(--kv-text-main) 5%,transparent)}:where([data-kv-design-system]) [data-ui=action][data-variant=destructive]{border-color:var(--kv-danger-border);background:transparent;color:var(--kv-danger)}:where([data-kv-design-system]) [data-ui=action][data-variant=destructive]:hover:not(:disabled){border-color:var(--kv-danger-border);background:var(--kv-danger-bg);color:var(--kv-danger-hover)}:where([data-kv-design-system]) [data-ui=action][data-size=compact]{min-height:var(--kv-control-height-compact);padding-inline:var(--kv-space-2);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=action][data-size=prominent]{min-height:var(--kv-control-height-prominent);padding-inline:var(--kv-space-5);font-size:var(--kv-text-base)}:where([data-kv-design-system]) [data-ui=action]:disabled{border-color:var(--kv-panel-border);background:var(--kv-interactive-disabled);color:var(--kv-text-disabled);cursor:not-allowed}:where([data-kv-design-system]) [data-ui=action-leading]{display:inline-grid;width:1rem;height:1rem;place-items:center;font-family:var(--kv-font-mono)}:where([data-kv-design-system]) [data-ui=action-label]{min-width:0;overflow:hidden;line-height:var(--kv-leading-normal);text-overflow:ellipsis}:where([data-kv-design-system]) [data-ui=action-spinner]{width:.8rem;height:.8rem;border:2px solid currentcolor;border-right-color:transparent;border-radius:50%;animation:kv-spin .7s linear infinite}:where([data-kv-design-system]) [data-ui=action-group]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=badge]{display:inline-flex;min-height:1.4rem;align-items:center;gap:.3125rem;padding:.125rem .4375rem;border:1px solid transparent;border-radius:var(--kv-radius-sm);background:color-mix(in srgb,var(--kv-text-main) 7%,transparent);color:var(--kv-text-secondary);font-size:var(--kv-text-xs);font-weight:var(--kv-weight-medium);white-space:nowrap}:where([data-kv-design-system]) [data-ui=badge][data-tone=info]{background:var(--kv-color-info-soft);color:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=badge][data-tone=positive]{background:var(--kv-color-positive-soft);color:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=badge][data-tone=warning]{background:var(--kv-color-warning-soft);color:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=badge][data-tone=danger]{background:var(--kv-color-danger-soft);color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=tag]{display:inline-flex;min-height:1.6rem;align-items:center;gap:var(--kv-space-1);padding-inline:var(--kv-space-2);border:1px solid var(--kv-color-line);border-radius:var(--kv-radius-sm);background:var(--kv-color-surface);font-size:var(--kv-text-xs);font-weight:650}:where([data-kv-design-system]) [data-ui=tag-remove]{display:grid;width:1rem;height:1rem;place-items:center;border-radius:var(--kv-radius-xs);color:var(--kv-color-ink-muted);text-decoration:none}:where([data-kv-design-system]) [data-ui=tag-remove]:hover{background:var(--kv-color-danger-soft);color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=count-badge]{display:inline-grid;min-width:1.4rem;height:1.4rem;place-items:center;padding-inline:var(--kv-space-1);border-radius:var(--kv-radius-full);background:var(--kv-color-accent-soft);color:var(--kv-color-accent);font-family:var(--kv-font-mono);font-size:var(--kv-text-xs);font-weight:800}:where([data-kv-design-system]) [data-ui=avatar]{display:inline-grid;width:2rem;height:2rem;place-items:center;border:1px solid var(--kv-color-line-strong);border-radius:50%;background:var(--kv-color-accent-soft);color:var(--kv-color-accent);font-size:var(--kv-text-xs);font-weight:800}:where([data-kv-design-system]) [data-ui=avatar][data-size=small]{width:1.5rem;height:1.5rem}:where([data-kv-design-system]) [data-ui=avatar][data-size=large]{width:3rem;height:3rem;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=code]{padding:.15rem .35rem;border-radius:var(--kv-radius-xs);background:var(--kv-color-surface-subtle);color:var(--kv-color-ink-secondary);font-family:var(--kv-font-mono);font-size:.85em;overflow-wrap:anywhere}:where([data-kv-design-system]) [data-ui=notice]{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--kv-space-3);align-items:start;padding:var(--kv-space-3) var(--kv-space-4);border:1px solid var(--kv-color-line);border-left:3px solid var(--kv-color-info);border-radius:var(--kv-radius-sm);background:var(--kv-color-info-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=positive]{border-left-color:var(--kv-color-positive);background:var(--kv-color-positive-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=warning]{border-left-color:var(--kv-color-warning);background:var(--kv-color-warning-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=danger]{border-left-color:var(--kv-color-danger);background:var(--kv-color-danger-soft)}:where([data-kv-design-system]) [data-ui=notice-mark]{width:.65rem;height:.65rem;margin-top:.35rem;border-radius:50%;background:currentcolor}:where([data-kv-design-system]) [data-ui=notice-copy]{min-width:0}:where([data-kv-design-system]) [data-ui=notice-title]{margin-bottom:var(--kv-space-1);font-weight:800}:where([data-kv-design-system]) [data-ui=notice-message]{margin-bottom:0;color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=notice-actions]{align-self:center}:where([data-kv-design-system]) [data-ui=empty]{display:grid;min-height:11rem;place-items:center;align-content:center;padding:var(--kv-space-8);color:var(--kv-color-ink-secondary);text-align:center}:where([data-kv-design-system]) [data-ui=empty-mark]{display:grid;width:2.5rem;height:2.5rem;margin-bottom:var(--kv-space-3);place-items:center;border:1px solid var(--kv-color-line-strong);border-radius:50%;color:var(--kv-color-accent);font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=empty-title]{margin-bottom:var(--kv-space-1);color:var(--kv-color-ink);font-weight:800}:where([data-kv-design-system]) [data-ui=empty-message]{max-width:34rem;margin-bottom:0;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=empty-actions]{margin-top:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=loading]{display:grid;gap:var(--kv-space-3);padding:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=loading-label]{color:var(--kv-color-ink-muted);font-size:var(--kv-text-xs);font-weight:750;letter-spacing:.08em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=skeleton]{display:grid;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=skeleton-line]{height:.7rem;border-radius:var(--kv-radius-xs);background:linear-gradient(90deg,var(--kv-color-surface-subtle),var(--kv-color-line),var(--kv-color-surface-subtle));background-size:200% 100%;animation:kv-shimmer 1.5s ease infinite}:where([data-kv-design-system]) [data-ui=skeleton-line][data-line="2"]{width:82%}:where([data-kv-design-system]) [data-ui=skeleton-line][data-line="3"]{width:58%}:where([data-kv-design-system]) [data-ui=field]{display:grid;min-width:0;gap:var(--kv-space-1);margin:0;padding:0;border:0}:where([data-kv-design-system]) [data-ui=field][data-kind=checkbox]{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=field-label]{color:var(--kv-text-secondary);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium)}:where([data-kv-design-system]) [data-ui=field-required]{color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=field-control]{width:100%;min-height:var(--kv-control-height);padding:0 var(--kv-space-2-5);border:1px solid var(--kv-field-border);border-radius:var(--kv-radius-sm);background:var(--kv-input-bg);color:var(--kv-input-text);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=field-control]::placeholder{color:var(--kv-input-placeholder)}:where([data-kv-design-system]) [data-ui=field-control]:hover:not(:focus-visible,:disabled){border-color:var(--kv-input-border-hover);background:var(--kv-input-bg-hover)}:where([data-kv-design-system]) [data-ui=field-control]:focus-visible{border-color:var(--kv-input-border-focus);background:var(--kv-input-bg-focus);box-shadow:var(--kv-input-ring);outline:none}:where([data-kv-design-system]) [data-ui=field-control]:disabled{border-color:var(--kv-panel-border);background:var(--kv-interactive-disabled);color:var(--kv-text-disabled);cursor:not-allowed}:where([data-kv-design-system]) textarea[data-ui=field-control]{min-height:6.875rem;padding:var(--kv-space-2-5) var(--kv-space-3);resize:vertical}:where([data-kv-design-system]) input[type=checkbox][data-ui=field-control]{width:1rem;min-height:1rem;accent-color:var(--kv-color-accent)}:where([data-kv-design-system]) [data-ui=field][data-invalid=true] [data-ui=field-control]{border-color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=field-options]{display:flex;flex-wrap:wrap;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=field-option]{display:inline-flex;align-items:center;gap:var(--kv-space-2);color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=field-help]{color:var(--kv-color-ink-muted);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=field-error]{color:var(--kv-color-danger);font-size:var(--kv-text-xs);font-weight:700}@keyframes kv-spin{to{transform:rotate(360deg)}}@keyframes kv-shimmer{to{background-position:-200% 0}}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=notice]{grid-template-columns:auto minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=notice-actions]{grid-column:1 / -1}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=nav-list]{display:grid;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=nav-item]{display:flex;height:var(--kv-sidebar-item-height);align-items:center;gap:.5625rem;padding-inline:var(--kv-space-2-5);border-radius:var(--kv-radius-sm);color:var(--kv-text-secondary);font-size:var(--kv-text-sm);text-decoration:none;transition:background var(--kv-duration-normal) var(--kv-ease-default),color var(--kv-duration-normal) var(--kv-ease-default)}:where([data-kv-design-system]) [data-ui=nav-item]:hover{background:color-mix(in srgb,var(--kv-text-main) 4.5%,transparent);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=nav-item][data-active=true]{background:var(--kv-nav-selected);color:var(--kv-nav-selected-text)}:where([data-kv-design-system]) [data-ui=nav-item][data-active=true]:hover{background:var(--kv-nav-selected-hover)}:where([data-kv-design-system]) [data-ui=nav-item-leading]{display:inline-grid;width:1rem;flex:none;place-items:center}:where([data-kv-design-system]) [data-ui=nav-item-label]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where([data-kv-design-system]) [data-ui=nav-item-count],:where([data-kv-design-system]) [data-ui=tab-count]{color:inherit;font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums;opacity:.72}:where([data-kv-design-system]) [data-ui=tabs]{display:flex;min-height:var(--kv-table-header-height);align-items:center;gap:1.625rem;border-bottom:1px solid var(--kv-border-subtle);overflow-x:auto}:where([data-kv-design-system]) [data-ui=tab]{position:relative;display:inline-flex;height:var(--kv-table-header-height);flex:none;align-items:center;gap:var(--kv-space-1-5);color:var(--kv-text-muted);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium);text-decoration:none}:where([data-kv-design-system]) [data-ui=tab]:hover{color:var(--kv-text-secondary)}:where([data-kv-design-system]) [data-ui=tab][data-active=true]{color:var(--kv-tab-active-text)}:where([data-kv-design-system]) [data-ui=tab][data-active=true]:after{position:absolute;right:0;bottom:-1px;left:0;height:2px;border-radius:2px 2px 0 0;background:var(--kv-accent);content:""}}@layer ket.app{:where([data-kv-design-system]) [data-ui=progress]{display:grid;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=progress-label]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-3);color:var(--kv-text-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=progress-value]{color:var(--kv-text-muted);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=progress-track]{height:4px;overflow:hidden;border-radius:var(--kv-radius-full);background:color-mix(in srgb,var(--kv-text-main) 9%,transparent)}:where([data-kv-design-system]) [data-ui=progress-bar]{display:block;height:100%;border-radius:inherit;background:var(--kv-accent)}:where([data-kv-design-system]) [data-ui=progress][data-tone=positive] [data-ui=progress-bar]{background:var(--kv-success)}:where([data-kv-design-system]) [data-ui=progress][data-tone=warning] [data-ui=progress-bar]{background:var(--kv-warning)}:where([data-kv-design-system]) [data-ui=progress][data-tone=danger] [data-ui=progress-bar]{background:var(--kv-danger)}}@layer ket.app{:where([data-kv-design-system]) [data-ui=stack]{display:grid;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=stack][data-gap=compact]{gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=stack][data-gap=loose]{gap:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=inline]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=grid]{display:grid;grid-template-columns:repeat(var(--kv-grid-columns, 3),minmax(0,1fr));gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=grid][data-columns="2"]{--kv-grid-columns: 2}:where([data-kv-design-system]) [data-ui=grid][data-columns="3"]{--kv-grid-columns: 3}:where([data-kv-design-system]) [data-ui=grid][data-columns="4"]{--kv-grid-columns: 4}:where([data-kv-design-system]) [data-ui=surface]{min-width:0;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg)}:where([data-kv-design-system]) [data-ui=surface][data-tone=subtle]{background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=surface][data-tone=raised]{background:var(--kv-surface-raised);box-shadow:var(--kv-shadow-md)}:where([data-kv-design-system]) [data-ui=surface][data-padding=compact]{padding:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=surface][data-padding=default]{padding:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=disclosure]{min-width:0;overflow:clip;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=disclosure-summary]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-3);padding:var(--kv-space-3) var(--kv-space-4);color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm);font-weight:700;cursor:pointer;list-style:none}:where([data-kv-design-system]) [data-ui=disclosure-summary]::-webkit-details-marker{display:none}:where([data-kv-design-system]) [data-ui=disclosure-summary]:after{content:"+";flex:0 0 auto;color:var(--kv-color-ink-muted);font-family:var(--kv-font-mono);font-weight:600;transition:transform var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=disclosure][open]>[data-ui=disclosure-summary]{border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=disclosure][open]>[data-ui=disclosure-summary]:after{transform:rotate(45deg)}:where([data-kv-design-system]) [data-ui=disclosure-body]{min-width:0;padding:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=section]{display:grid;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=section-head]{display:flex;align-items:end;justify-content:space-between;gap:var(--kv-space-4);padding-bottom:var(--kv-space-3);border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=section-eyebrow]{margin-bottom:var(--kv-space-1);color:var(--kv-color-accent);font-family:var(--kv-font-mono);font-size:var(--kv-text-xs);font-weight:800;letter-spacing:.1em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=section-title]{margin-bottom:0;font-size:var(--kv-text-md);line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=section-description]{max-width:52rem;margin:var(--kv-space-1) 0 0;color:var(--kv-color-ink-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=section-actions]{flex:0 0 auto}:where([data-kv-design-system]) [data-ui=section-body]{min-width:0}:where([data-kv-design-system]) [data-ui=content-card]{display:grid;min-width:0;gap:var(--kv-space-3);padding:var(--kv-space-4);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg);transition:border-color var(--kv-motion-fast),background var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=content-card][data-interactive=true]:hover{border-color:var(--kv-border-default);background:var(--kv-surface-raised)}:where([data-kv-design-system]) [data-ui=content-card][data-selected=true]{border-color:var(--kv-accent-border);background:var(--kv-accent-subtle)}:where([data-kv-design-system]) [data-ui=card-head]{min-width:0}:where([data-kv-design-system]) [data-ui=card-title]{margin-bottom:0;font-size:var(--kv-text-base)}:where([data-kv-design-system]) [data-ui=card-title] a{color:inherit;text-decoration:none}:where([data-kv-design-system]) [data-ui=card-summary]{margin:var(--kv-space-1) 0 0;color:var(--kv-color-ink-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=card-body]{color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=card-meta]{align-self:end}:where([data-kv-design-system]) [data-ui=card-actions]{padding-top:var(--kv-space-3);border-top:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=metric]{display:grid;min-width:0;min-height:6.75rem;align-content:start;gap:var(--kv-space-1);padding:var(--kv-space-4);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg)}:where([data-kv-design-system]) [data-ui=metric]:has(>[data-ui=metric-icon]){grid-template-columns:auto 1fr;column-gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=metric]:has(>[data-ui=metric-icon])>:not([data-ui=metric-icon]){grid-column:2}:where([data-kv-design-system]) [data-ui=metric-icon]{display:grid;grid-row:1 / 3;grid-column:1;align-self:center;place-items:center;inline-size:2.25rem;block-size:2.25rem;border-radius:var(--kv-radius-md);background:var(--kv-accent-subtle);color:var(--kv-accent)}:where([data-kv-design-system]) [data-ui=metric-icon] svg{inline-size:1.125rem;block-size:1.125rem}:where([data-kv-design-system]) a[data-ui=metric]{color:inherit;text-decoration:none}:where([data-kv-design-system]) a[data-ui=metric]:hover{border-color:var(--kv-color-line-strong);background:var(--kv-color-surface-hover)}:where([data-kv-design-system]) [data-ui=metric-label]{display:flex;align-items:center;margin-bottom:0;gap:var(--kv-space-2);color:var(--kv-text-secondary);font-size:var(--kv-text-xs);font-weight:var(--kv-weight-semibold);letter-spacing:.05em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=metric][data-dot=true] [data-ui=metric-label]:before{width:.5rem;height:.5rem;flex:none;border-radius:50%;background:var(--kv-text-muted);content:""}:where([data-kv-design-system]) [data-ui=metric][data-tone=info] [data-ui=metric-label]:before{background:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=metric][data-tone=positive] [data-ui=metric-label]:before{background:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=metric][data-tone=warning] [data-ui=metric-label]:before{background:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=metric][data-tone=danger] [data-ui=metric-label]:before{background:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=metric-value]{margin-bottom:0;font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-.025em}:where([data-kv-design-system]) [data-ui=metric-detail]{margin:0;color:var(--kv-text-secondary);font-size:var(--kv-text-sm)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=grid]{grid-template-columns:1fr}:where([data-kv-design-system]) [data-ui=section-head]{align-items:start;flex-direction:column}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=app-shell]{display:grid;min-width:0;min-height:100dvh;grid-template-columns:var(--kv-sidebar-width) minmax(0,1fr);background:var(--kv-page-bg);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=app-shell][data-has-right-rail=true]{grid-template-columns:var(--kv-sidebar-width) minmax(0,1fr) var(--kv-right-rail-width)}:where([data-kv-design-system]) [data-ui=app-sidebar]{position:sticky;top:0;height:100dvh;min-width:0;overflow:hidden;border-right:1px solid var(--kv-sidebar-border);border-radius:var(--kv-radius-app-region);background:var(--kv-sidebar-bg)}:where([data-kv-design-system]) [data-ui=app-main]{min-width:0;border-radius:var(--kv-radius-app-region);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=app-right-rail]{position:sticky;top:0;height:100dvh;min-width:0;overflow-y:auto;border-left:1px solid var(--kv-right-rail-border);border-radius:var(--kv-radius-app-region);background:var(--kv-right-rail-bg)}:where([data-kv-design-system]) [data-ui=app-shell][data-mode=embedded]{min-height:28rem;height:28rem;overflow:hidden}:where([data-kv-design-system]) [data-ui=app-shell][data-mode=embedded] :is([data-ui=app-sidebar],[data-ui=app-right-rail]){position:relative;height:100%}:where([data-kv-design-system]) [data-ui=page]{min-width:0;padding:var(--kv-page-padding-y) var(--kv-page-padding-x)}:where([data-kv-design-system]) [data-ui=page-header]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--kv-space-6);margin-bottom:var(--kv-space-6)}:where([data-kv-design-system]) [data-ui=page-heading]{min-width:0}:where([data-kv-design-system]) [data-ui=page-title]{margin:0;font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=page-description]{margin:var(--kv-space-1-5) 0 0;color:var(--kv-text-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=page-actions]{flex:0 0 auto}:where([data-kv-design-system]) [data-ui=page-body]{min-width:0}:where([data-kv-design-system]) [data-ui=record-canvas]{min-width:0;padding:1.375rem var(--kv-page-padding-x) var(--kv-space-12)}:where([data-kv-design-system]) [data-ui=record-content]{width:100%;min-width:0}:where([data-kv-design-system]) [data-ui=record-section]{min-width:0;padding:var(--kv-space-6) 0;border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=record-section]:last-child{border-bottom:0}:where([data-kv-design-system]) [data-ui=record-section-title]{margin:0 0 var(--kv-space-4);font-size:var(--kv-text-lg);font-weight:var(--kv-weight-semibold)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=app-shell],:where([data-kv-design-system]) [data-ui=app-shell][data-has-right-rail=true]{grid-template-columns:minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=app-sidebar],:where([data-kv-design-system]) [data-ui=app-right-rail]{position:relative;width:auto;height:auto}:where([data-kv-design-system]) [data-ui=app-sidebar]{border-right:0;border-bottom:1px solid var(--kv-sidebar-border)}:where([data-kv-design-system]) [data-ui=app-right-rail]{border-top:1px solid var(--kv-right-rail-border);border-left:0}:where([data-kv-design-system]) [data-ui=page],:where([data-kv-design-system]) [data-ui=record-canvas]{padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=page-header]{flex-direction:column;gap:var(--kv-space-4)}}}@layer ket.app{:where([data-kv-design-system]) :is([data-ui=list-page],[data-ui=form-page],[data-ui=dashboard-page],[data-ui=board-page]){--kv-page-title-size: 1.5rem}:where([data-kv-design-system]) [data-ui=list-page]{display:grid;min-width:0;gap:var(--kv-space-3);padding:var(--kv-space-6) var(--kv-page-padding-x) var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=list-page-header]{min-width:0;padding-bottom:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=list-page-title-row]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page-eyebrow]{margin:0;color:var(--kv-accent);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-bold);letter-spacing:.09em;line-height:var(--kv-leading-tight);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=list-page-title]{margin:0;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=list-page-description]{max-width:48rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=list-page-actions]{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-toolbar]{display:flex;width:100%;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2);padding:var(--kv-space-2);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=list-page-controls]{min-width:min(100%,24rem);flex:1 1 40rem}:where([data-kv-design-system]) [data-ui=list-page-status]{min-width:max-content;flex:0 0 auto;padding-inline:var(--kv-space-2);color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=list-page-body]{min-width:0}:where([data-kv-design-system]) [data-ui=list-page-footer]{min-width:0;padding-top:var(--kv-space-3);border-top:1px solid var(--kv-panel-divider);color:var(--kv-text-muted);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-header]{padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title-row]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]{justify-content:flex-end}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-toolbar]{padding:var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);border:0;border-radius:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-controls]{min-width:0;flex-basis:100%}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]{padding-top:var(--kv-space-2);padding-inline:var(--kv-page-padding-x);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-footer]{margin:var(--kv-space-3) var(--kv-page-padding-x) 0;padding:var(--kv-space-2-5) var(--kv-space-3);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]:has(>[data-ui=table-scroll])>[data-ui=table-scroll]{border-radius:var(--kv-radius-md) var(--kv-radius-md) 0 0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]:has(>[data-ui=table-scroll])+[data-ui=list-page-footer]{margin-top:-1px;border-radius:0 0 var(--kv-radius-md) var(--kv-radius-md)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=table-scroll]{margin:0;border-color:var(--kv-table-border);border-radius:var(--kv-radius-md);background:var(--kv-table-bg);box-shadow:none}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=table] th{background:var(--kv-table-header-bg);color:var(--kv-table-header-text)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=row] td{background:var(--kv-table-row-bg)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=row]:hover td{background:var(--kv-table-row-hover)}:where([data-kv-design-system]) [data-ui=table-scroll]{width:100%;overflow-x:auto;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-table-bg)}:where([data-kv-design-system]) [data-ui=table]{width:100%;min-width:38rem;border-collapse:separate;border-spacing:0;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=table-caption]{padding:var(--kv-space-3);color:var(--kv-text-muted);font-size:var(--kv-text-xs);text-align:left}:where([data-kv-design-system]) [data-ui=col]{height:var(--kv-table-header-height);padding:0 var(--kv-space-3);border-bottom:1px solid var(--kv-table-border);background:var(--kv-table-header-bg);color:var(--kv-table-header-text);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.035em;text-align:left;text-transform:uppercase;white-space:nowrap}:where([data-kv-design-system]) [data-ui=col][data-align=end],:where([data-kv-design-system]) [data-ui=cell][data-align=end]{font-variant-numeric:tabular-nums;text-align:right}:where([data-kv-design-system]) [data-ui=row]{height:var(--kv-row-height);transition:background var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=row]:hover{background:transparent}:where([data-kv-design-system]) [data-ui=row]:hover [data-ui=cell]{background:var(--kv-table-row-hover)}:where([data-kv-design-system]) [data-ui=row][data-selected=true] [data-ui=cell]{background:var(--kv-table-row-selected)}:where([data-kv-design-system]) [data-ui=cell]{max-width:24rem;height:var(--kv-row-height);padding:.4375rem var(--kv-space-3);border-bottom:1px solid var(--kv-table-border);background:var(--kv-table-row-bg);color:var(--kv-text-secondary);overflow-wrap:anywhere}:where([data-kv-design-system]) [data-ui=cell][data-priority=primary]{color:var(--kv-text-main);font-weight:var(--kv-weight-semibold)}:where([data-kv-design-system]) [data-ui=row-link]{color:inherit;text-decoration:none}:where([data-kv-design-system]) [data-ui=row-link]:hover{color:var(--kv-color-accent);text-decoration:underline;text-underline-offset:.15em}:where([data-kv-design-system]) [data-ui=record-form]{display:grid;gap:var(--kv-gap-field-group)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=table-scroll][data-responsive=stack]{overflow:hidden}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]{display:block;min-width:0}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]>thead{display:none}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]>tbody{display:block}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=row]{display:grid;grid-template-columns:minmax(0,1fr);height:auto;padding:var(--kv-space-3);border-bottom:1px solid var(--kv-table-border)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=row]:last-child{border-bottom:0}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--kv-space-2);width:100%;min-width:0;max-width:none;height:auto;padding:var(--kv-space-2) 0;border:0;white-space:normal}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:before{content:attr(data-label);color:var(--kv-text-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:first-child{display:block;font-weight:var(--kv-weight-semibold)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:first-child:before{display:none}}:where([data-kv-design-system]) [data-ui=form-errors]{display:grid;gap:var(--kv-space-1);margin:0;padding:var(--kv-space-3) var(--kv-space-3) var(--kv-space-3) 2rem;border:1px solid var(--kv-color-danger);border-radius:var(--kv-radius-sm);background:var(--kv-color-danger-soft);color:var(--kv-color-danger);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=form-grid]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--kv-gap-form-row) var(--kv-gap-field-group)}:where([data-kv-design-system]) [data-ui=form-grid] [data-ui=field][data-span=full]{grid-column:1 / -1}:where([data-kv-design-system]) [data-ui=form-actions]{display:flex;justify-content:flex-end;padding-top:var(--kv-space-4);border-top:1px solid var(--kv-panel-divider)}@media(max-width:47.9375rem){:where([data-kv-design-system]) [data-ui=form-grid]{grid-template-columns:minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=form-grid] [data-ui=field]{grid-column:1}}:where([data-kv-design-system]) [data-ui=modal-backdrop]{position:fixed;z-index:var(--kv-z-modal);inset:0;display:grid;place-items:center;padding:var(--kv-space-4);background:#0c0e1085;backdrop-filter:blur(3px)}:where([data-kv-design-system]) [data-ui=modal-backdrop][data-mode=embedded]{position:relative;min-height:20rem;inset:auto;border-radius:var(--kv-radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--kv-color-accent-soft) 60%,transparent),transparent),var(--kv-color-canvas);backdrop-filter:none}:where([data-kv-design-system]) [data-ui=modal-sheet]{width:min(34rem,100%);max-height:calc(100dvh - 2rem);overflow:auto;border:1px solid var(--kv-color-line-strong);border-radius:var(--kv-radius-lg);background:var(--kv-color-surface);box-shadow:var(--kv-shadow-popover)}:where([data-kv-design-system]) [data-ui=modal-head]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-4);padding:var(--kv-space-4) var(--kv-space-5);border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=modal-title]{margin-bottom:0;font-family:var(--kv-font-display);font-size:var(--kv-text-lg);font-weight:650}:where([data-kv-design-system]) [data-ui=modal-close]{display:grid;width:2rem;height:2rem;place-items:center;border-radius:50%;color:var(--kv-color-ink-muted);font-size:1.4rem;line-height:1;text-decoration:none}:where([data-kv-design-system]) [data-ui=modal-close]:hover{background:var(--kv-color-surface-hover);color:var(--kv-color-ink)}:where([data-kv-design-system]) [data-ui=modal-body]{padding:var(--kv-space-5)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=list-page]{gap:var(--kv-space-3);padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=list-page-header]{padding-bottom:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=list-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=list-page-toolbar]{gap:var(--kv-space-2);padding:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-controls]{min-width:0;flex-basis:15rem}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational]{padding:0 0 var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-heading]{display:flex;flex-direction:column}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title-row]{display:contents}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title]{order:1;font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-description]{order:2}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions],:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]>[data-ui=inline]{width:100%}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]{order:3;margin-top:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions] [data-ui=action][data-variant=primary]{min-height:2.75rem;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-toolbar]{padding:var(--kv-space-3) var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] :is([data-ui=list-page-body],[data-ui=list-page-footer]){margin-inline:var(--kv-space-4);padding-inline:0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-footer]{padding:var(--kv-space-2-5) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table]{min-width:0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table-scroll]:not([data-responsive=stack]) [data-ui=table] :is(th,td):is([data-priority=secondary],[data-priority=tertiary]){display:none}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table-scroll]:not([data-responsive=stack]) [data-ui=table] :is(th,td)[data-priority=primary][data-align=end]{width:7rem}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table] :is([data-ui=col],[data-ui=cell]){padding-inline:var(--kv-space-2)}}:where([data-kv-design-system]) [data-ui=pipeline]{display:grid;margin:0;padding:0;grid-auto-columns:1fr;grid-auto-flow:column;list-style:none}:where([data-kv-design-system]) [data-ui=pipeline-step]{position:relative;display:grid;padding-bottom:var(--kv-space-5);justify-items:center;gap:var(--kv-space-1);text-align:center}:where([data-kv-design-system]) [data-ui=pipeline-step]:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:after{position:absolute;bottom:.3125rem;height:1px;background:var(--kv-color-line-strong);content:""}:where([data-kv-design-system]) [data-ui=pipeline-step]:before{left:0;right:50%}:where([data-kv-design-system]) [data-ui=pipeline-step]:after{left:50%;right:0}:where([data-kv-design-system]) [data-ui=pipeline-step]:first-child:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:last-child:after{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-node]{position:absolute;bottom:0;left:50%;width:.625rem;height:.625rem;border-radius:50%;background:var(--kv-text-muted);translate:-50% 0}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=info] [data-ui=pipeline-step-node]{background:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=positive] [data-ui=pipeline-step-node]{background:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=warning] [data-ui=pipeline-step-node]{background:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=danger] [data-ui=pipeline-step-node]{background:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=pipeline-arrow]{position:absolute;top:.25rem;left:0;width:.375rem;height:.375rem;border-top:1.5px solid var(--kv-text-muted);border-right:1.5px solid var(--kv-text-muted);rotate:45deg;translate:-50% 0}:where([data-kv-design-system]) [data-ui=pipeline-step]:first-child [data-ui=pipeline-arrow]{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-label]{color:var(--kv-text-secondary);font-size:var(--kv-text-sm);text-decoration:none}:where([data-kv-design-system]) a[data-ui=pipeline-step-label]:hover{color:var(--kv-text-main);text-decoration:underline}:where([data-kv-design-system]) [data-ui=pipeline-step-value]{color:var(--kv-text-main);font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-.025em}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=pipeline]{grid-auto-columns:auto;grid-auto-flow:row}:where([data-kv-design-system]) [data-ui=pipeline-step]{padding-bottom:var(--kv-space-3);padding-left:var(--kv-space-6);grid-template-columns:1fr auto;align-items:center;justify-items:start;text-align:left}:where([data-kv-design-system]) [data-ui=pipeline-step]:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:after{left:.3125rem;right:auto;width:1px;height:50%}:where([data-kv-design-system]) [data-ui=pipeline-step]:before{top:0;bottom:auto}:where([data-kv-design-system]) [data-ui=pipeline-step]:after{top:50%;bottom:auto}:where([data-kv-design-system]) [data-ui=pipeline-step-node]{top:50%;bottom:auto;left:.3125rem;translate:-50% -50%}:where([data-kv-design-system]) [data-ui=pipeline-arrow]{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-value]{font-size:var(--kv-text-lg)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=board-page]{display:grid;min-width:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational]{gap:0;padding:0}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=board-page-header]{display:grid;min-width:0;padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=board-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=board-page-eyebrow]{margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.07em;line-height:var(--kv-leading-normal);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=board-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=board-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=board-page-description]{max-width:56rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=board-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=board-page-status],:where([data-kv-design-system]) [data-ui=board-page-meta]{color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=board-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=board-page-toolbar]{display:flex;min-width:0;align-items:center;padding:var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=board-page-controls]{min-width:0;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=board-page-body]{display:grid;min-width:0;gap:var(--kv-space-4);padding:var(--kv-space-4) var(--kv-page-padding-x) var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=board-page-body]>[data-ui=stack]{gap:var(--kv-space-4)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=board-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=board-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=board-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=board-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=board-page-toolbar],:where([data-kv-design-system]) [data-ui=board-page-body]{padding-inline:var(--kv-space-4)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=dashboard-page]{display:grid;min-width:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-header]{display:grid;min-width:0;padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=dashboard-page-eyebrow]{margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.07em;line-height:var(--kv-leading-normal);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=dashboard-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=dashboard-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=dashboard-page-description]{max-width:56rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=dashboard-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=dashboard-page-status],:where([data-kv-design-system]) [data-ui=dashboard-page-meta]{color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=dashboard-page-body]{display:grid;min-width:0;gap:var(--kv-space-6);padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-toolbar]{background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-body]>[data-ui=stack]{gap:var(--kv-space-6)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational]{padding-bottom:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=dashboard-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=dashboard-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=dashboard-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]>[data-ui=inline]{width:100%}:where([data-kv-design-system]) [data-ui=dashboard-page-actions] [data-ui=action][data-variant=primary]{min-height:2.75rem;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=dashboard-page-body]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-8)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=form-page]{display:grid;min-width:0;background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=form-page-header]{display:grid;min-width:0;gap:var(--kv-space-2);padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=form-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=form-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=form-page-status]{display:inline-flex;flex:0 0 auto;align-items:center}:where([data-kv-design-system]) [data-ui=form-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=form-page-description]{max-width:48rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=form-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=form-page-meta]{min-width:0}:where([data-kv-design-system]) [data-ui=form-page-controller]{min-width:0;padding-inline:var(--kv-page-padding-x);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=form-page-controller]:empty{display:none}:where([data-kv-design-system]) [data-ui=form-page-navigation]{min-width:0;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=form-page-layout]{display:grid;min-width:0;grid-template-columns:minmax(0,2fr) minmax(0,1fr);align-items:start}:where([data-kv-design-system]) [data-ui=form-page][data-has-aside=false] [data-ui=form-page-layout]{grid-template-columns:minmax(0,56rem)}:where([data-kv-design-system]) [data-ui=form-page-body]{display:grid;min-width:0;gap:var(--kv-space-6);padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]{gap:var(--kv-space-6)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=section]>[data-ui=section-head],:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]>[data-ui=section-head]{align-items:flex-start;padding-bottom:0;border-bottom:0}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]{padding-block:var(--kv-space-5);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]:first-child{padding-block-start:0}:where([data-kv-design-system]) [data-ui=form-page-aside]{position:sticky;top:0;display:grid;min-width:0;max-height:100dvh;align-content:start;padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10) var(--kv-space-5);overflow-y:auto;border-left:1px solid var(--kv-panel-divider);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(7rem,9rem) minmax(0,1fr);align-items:center;column-gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>[data-ui=field-label]{grid-column:1}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>:is([data-ui=field-control],[data-ui=field-options],[data-ui=field-help],[data-ui=field-error]){grid-column:2}@media(max-width:89.9375rem){:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(6.5rem,7.5rem) minmax(0,1fr);column-gap:var(--kv-space-2)}}@media(max-width:63.9375rem){:where([data-kv-design-system]) [data-ui=form-page-layout]{grid-template-columns:minmax(0,1fr);row-gap:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=form-page-aside]{position:static;max-height:none;padding-top:var(--kv-space-5);overflow:visible;border-top:1px solid var(--kv-panel-divider);border-left:0}}@media(max-width:47.9375rem){:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(0,1fr);align-items:stretch}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>:is([data-ui=field-label],[data-ui=field-control],[data-ui=field-options],[data-ui=field-help],[data-ui=field-error]){grid-column:1}}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational]{padding-bottom:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=form-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=form-page-actions]>:is([data-ui=action-group],[data-ui=form-cluster]){width:100%}:where([data-kv-design-system]) [data-ui=form-page-meta]{padding-left:0}:where([data-kv-design-system]) [data-ui=form-page-navigation]{padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-body],:where([data-kv-design-system]) [data-ui=form-page-aside],:where([data-kv-design-system]) [data-ui=form-page-controller]{padding-inline:var(--kv-space-4)}}}
2
+ @layer ket.theme{:root{color-scheme:light dark;--kv-ref-black: #000000;--kv-ref-white: #ffffff;--kv-ref-bg-app: #15181d;--kv-ref-bg-sidebar: #171b20;--kv-ref-bg-main: #1b1f24;--kv-ref-bg-rail: #181c21;--kv-ref-surface-0: #171b20;--kv-ref-surface-1: #1d2228;--kv-ref-surface-2: #23282f;--kv-ref-surface-3: #292f37;--kv-ref-surface-4: #30363f;--kv-ref-control: #20252c;--kv-ref-control-hover: #292f37;--kv-ref-control-active: #313844;--kv-ref-control-disabled: #1d2126;--kv-ref-border-subtle: rgb(255 255 255 / 5.5%);--kv-ref-border-default: rgb(255 255 255 / 8.5%);--kv-ref-border-strong: rgb(255 255 255 / 13%);--kv-ref-border-emphasis: rgb(255 255 255 / 18%);--kv-ref-border-solid: #30363d;--kv-ref-text-primary: #f2f4f7;--kv-ref-text-secondary: #b4bac4;--kv-ref-text-tertiary: #858d99;--kv-ref-text-muted: #68717d;--kv-ref-text-disabled: #505862;--kv-ref-text-inverse: #111318;--kv-ref-primary-50: #eef2ff;--kv-ref-primary-100: #e0e7ff;--kv-ref-primary-200: #c7d2fe;--kv-ref-primary-300: #a5b4fc;--kv-ref-primary-400: #818cf8;--kv-ref-primary-500: #6366f1;--kv-ref-primary-600: #5563df;--kv-ref-primary-700: #4753c7;--kv-ref-primary-800: #3944a5;--kv-ref-primary-900: #303a83;--kv-ref-primary: #5968df;--kv-ref-primary-hover: #6875ea;--kv-ref-primary-active: #4c59c9;--kv-ref-primary-subtle: rgb(89 104 223 / 14%);--kv-ref-primary-muted: rgb(89 104 223 / 22%);--kv-ref-primary-border: rgb(112 126 240 / 32%);--kv-ref-nav-selected: rgb(76 93 190 / 52%);--kv-ref-nav-selected-hover: rgb(83 101 204 / 62%);--kv-ref-success: #40c97b;--kv-ref-success-hover: #4dd487;--kv-ref-success-bg: rgb(64 201 123 / 13%);--kv-ref-success-border: rgb(64 201 123 / 22%);--kv-ref-warning: #e5a93c;--kv-ref-warning-hover: #efb74e;--kv-ref-warning-bg: rgb(229 169 60 / 14%);--kv-ref-warning-border: rgb(229 169 60 / 24%);--kv-ref-danger: #ef665c;--kv-ref-danger-hover: #f1766d;--kv-ref-danger-bg: rgb(239 102 92 / 13%);--kv-ref-danger-border: rgb(239 102 92 / 28%);--kv-ref-info: #5794f2;--kv-ref-info-bg: rgb(87 148 242 / 13%);--kv-ref-info-border: rgb(87 148 242 / 25%);--kv-ref-status-todo-text: #aab1bc;--kv-ref-status-todo-bg: rgb(170 177 188 / 10%);--kv-ref-status-progress-text: #6f9cf8;--kv-ref-status-progress-bg: rgb(79 126 233 / 14%);--kv-ref-status-done-text: #4fd184;--kv-ref-status-done-bg: rgb(54 190 113 / 14%);--kv-ref-status-paused-text: #e9ad3e;--kv-ref-status-paused-bg: rgb(233 173 62 / 14%);--kv-ref-status-overdue-text: #f0645c;--kv-ref-status-overdue-bg: rgb(240 100 92 / 14%);--kv-page-bg: light-dark(#f7f5f5, var(--kv-ref-bg-main));--kv-app-bg: light-dark(#f7f5f5, var(--kv-ref-bg-app));--kv-sidebar-bg: light-dark(#f7f5f5, var(--kv-ref-bg-sidebar));--kv-right-rail-bg: light-dark(#f7f5f5, var(--kv-ref-bg-rail));--kv-panel-bg: light-dark(#ffffff, var(--kv-ref-surface-1));--kv-panel-bg-subtle: light-dark(#f7f5f5, var(--kv-ref-surface-0));--kv-surface-raised: light-dark(#fbfafa, var(--kv-ref-surface-2));--kv-surface-hover: light-dark(#f1eff0, var(--kv-ref-surface-3));--kv-text-main: light-dark(#24262a, var(--kv-ref-text-primary));--kv-text-secondary: light-dark(#5a5c5e, var(--kv-ref-text-secondary));--kv-text-muted: light-dark(#717373, var(--kv-ref-text-tertiary));--kv-text-disabled: light-dark(#9a9ea2, var(--kv-ref-text-disabled));--kv-panel-border: light-dark(#e9e7e8, var(--kv-ref-border-subtle));--kv-panel-divider: var(--kv-panel-border);--kv-border-default: light-dark(#dddcde, var(--kv-ref-border-default));--kv-border-strong: light-dark(#cccccd, var(--kv-ref-border-strong));--kv-interactive-bg: light-dark(#ffffff, var(--kv-ref-control));--kv-interactive-hover: light-dark(#f7f5f5, var(--kv-ref-control-hover));--kv-interactive-active: light-dark(#efedee, var(--kv-ref-control-active));--kv-interactive-disabled: light-dark(#efedee, var(--kv-ref-control-disabled));--kv-accent: light-dark(#5167c4, var(--kv-ref-primary));--kv-accent-hover: light-dark(#45579f, var(--kv-ref-primary-hover));--kv-accent-active: light-dark(#394985, var(--kv-ref-primary-active));--kv-accent-subtle: light-dark(#eef0fb, var(--kv-ref-primary-subtle));--kv-accent-muted: light-dark(#dde2f7, var(--kv-ref-primary-muted));--kv-accent-border: light-dark(#c3cdf0, var(--kv-ref-primary-border));--kv-focus-border: light-dark(#637ad5, #6474e8);--kv-focus-ring: 0 0 0 3px light-dark(#dde2f7, rgb(89 104 223 / 16%));--kv-on-accent: var(--kv-ref-white);--kv-positive: light-dark(#1d5d3b, var(--kv-ref-success));--kv-positive-hover: light-dark(#174b30, var(--kv-ref-success-hover));--kv-positive-bg: light-dark(#ecf5ef, var(--kv-ref-success-bg));--kv-positive-border: light-dark(#c9e7d4, var(--kv-ref-success-border));--kv-success: var(--kv-positive);--kv-success-hover: var(--kv-positive-hover);--kv-success-bg: var(--kv-positive-bg);--kv-success-border: var(--kv-positive-border);--kv-warning: light-dark(#8b5c12, var(--kv-ref-warning));--kv-warning-hover: light-dark(#70490e, var(--kv-ref-warning-hover));--kv-warning-bg: light-dark(#fbf3e6, var(--kv-ref-warning-bg));--kv-warning-border: light-dark(#eed6ad, var(--kv-ref-warning-border));--kv-danger: light-dark(#b42318, var(--kv-ref-danger));--kv-danger-hover: light-dark(#912018, var(--kv-ref-danger-hover));--kv-danger-bg: light-dark(#fef3f2, var(--kv-ref-danger-bg));--kv-danger-border: light-dark(#fecdca, var(--kv-ref-danger-border));--kv-info: light-dark(#315f8e, var(--kv-ref-info));--kv-info-bg: light-dark(#eaf2fb, var(--kv-ref-info-bg));--kv-info-border: light-dark(#c7dcf0, var(--kv-ref-info-border));--kv-nav-selected: light-dark(#dde2f7, var(--kv-ref-nav-selected));--kv-nav-selected-hover: light-dark(#cfd6f5, var(--kv-ref-nav-selected-hover));--kv-nav-selected-text: light-dark(#394985, #dce2ff);--kv-tab-active-text: light-dark(#45579f, #8c9aff);--kv-color-canvas: var(--kv-page-bg);--kv-color-canvas-raised: var(--kv-panel-bg-subtle);--kv-color-surface: var(--kv-panel-bg);--kv-color-surface-subtle: var(--kv-surface-raised);--kv-color-surface-hover: var(--kv-surface-hover);--kv-color-ink: var(--kv-text-main);--kv-color-ink-secondary: var(--kv-text-secondary);--kv-color-ink-muted: var(--kv-text-muted);--kv-color-line: var(--kv-panel-border);--kv-color-line-strong: var(--kv-border-strong);--kv-color-focus: var(--kv-focus-border);--kv-color-focus-ring: light-dark(#dde2f7, rgb(89 104 223 / 16%));--kv-color-accent: var(--kv-accent);--kv-color-accent-hover: var(--kv-accent-hover);--kv-color-accent-soft: var(--kv-accent-subtle);--kv-color-on-accent: var(--kv-on-accent);--kv-color-positive: var(--kv-positive);--kv-color-positive-soft: var(--kv-positive-bg);--kv-color-warning: var(--kv-warning);--kv-color-warning-soft: var(--kv-warning-bg);--kv-color-danger: var(--kv-danger);--kv-color-danger-soft: var(--kv-danger-bg);--kv-color-info: var(--kv-info);--kv-color-info-soft: var(--kv-info-bg);--kv-font-sans: "Inter", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--kv-font-display: var(--kv-font-sans);--kv-font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;--kv-text-2xs: .625rem;--kv-text-xs: .6875rem;--kv-text-sm: .75rem;--kv-text-md: .8125rem;--kv-text-base: .875rem;--kv-text-lg: 1rem;--kv-text-xl: 1.125rem;--kv-text-2xl: 1.375rem;--kv-text-3xl: 1.75rem;--kv-leading-tight: 1.2;--kv-leading-normal: 1.45;--kv-leading-relaxed: 1.6;--kv-weight-normal: 400;--kv-weight-medium: 500;--kv-weight-semibold: 600;--kv-weight-bold: 700;--kv-space-0: 0;--kv-space-0-5: .125rem;--kv-space-1: .25rem;--kv-space-1-5: .375rem;--kv-space-2: .5rem;--kv-space-2-5: .625rem;--kv-space-3: .75rem;--kv-space-4: 1rem;--kv-space-5: 1.25rem;--kv-space-6: 1.5rem;--kv-space-7: 1.75rem;--kv-space-8: 2rem;--kv-space-10: 2.5rem;--kv-space-12: 3rem;--kv-space-16: 4rem;--kv-gap-control: var(--kv-space-2);--kv-gap-form-row: .875rem;--kv-gap-field-group: var(--kv-space-5);--kv-gap-section: var(--kv-space-7);--kv-page-padding-x: var(--kv-space-7);--kv-page-padding-y: var(--kv-space-6);--kv-control-height-xs: 1.625rem;--kv-control-height-sm: 1.875rem;--kv-control-height-md: 2.125rem;--kv-control-height-lg: 2.5rem;--kv-control-height: var(--kv-control-height-md);--kv-control-height-compact: var(--kv-control-height-sm);--kv-control-height-prominent: var(--kv-control-height-lg);--kv-sidebar-width: 13.5rem;--kv-right-rail-width: 21.25rem;--kv-sidebar-item-height: 1.875rem;--kv-table-row-height: 3.25rem;--kv-table-header-height: 2.625rem;--kv-row-height: var(--kv-table-row-height);--kv-radius-xs: .1875rem;--kv-radius-sm: .3125rem;--kv-radius-md: .4375rem;--kv-radius-lg: .5625rem;--kv-radius-xl: .75rem;--kv-radius-full: 9999px;--kv-radius-app-region: 0;--kv-shadow-xs: 0 1px 2px rgb(0 0 0 / 22%);--kv-shadow-sm: 0 2px 6px rgb(0 0 0 / 24%);--kv-shadow-md: 0 8px 20px rgb(0 0 0 / 28%);--kv-shadow-popover: 0 12px 32px rgb(0 0 0 / 42%);--kv-shadow-float: var(--kv-shadow-popover);--kv-duration-fast: .1s;--kv-duration-normal: .16s;--kv-duration-slow: .24s;--kv-ease-default: cubic-bezier(.2, 0, 0, 1);--kv-ease-out: cubic-bezier(0, 0, .2, 1);--kv-motion-fast: var(--kv-duration-fast) var(--kv-ease-default);--kv-motion-normal: var(--kv-duration-normal) var(--kv-ease-default);--kv-z-base: 0;--kv-z-sticky: 10;--kv-z-dropdown: 40;--kv-z-popover: 50;--kv-z-modal: 100;--kv-z-toast: 200;--kv-page-chrome-bg: light-dark(var(--kv-page-bg), var(--kv-panel-bg));--kv-page-content-bg: var(--kv-page-bg);--kv-action-primary-bg: var(--kv-accent);--kv-action-primary-hover: var(--kv-accent-hover);--kv-action-primary-active: var(--kv-accent-active);--kv-action-primary-ink: var(--kv-on-accent);--kv-input-bg: light-dark(#ffffff, #20252b);--kv-input-bg-hover: light-dark(#f7f5f5, #252b32);--kv-input-bg-focus: light-dark(#ffffff, #222831);--kv-input-border: light-dark(#dddcde, rgb(255 255 255 / 10%));--kv-input-border-hover: light-dark(#cccccd, rgb(255 255 255 / 17%));--kv-input-border-focus: var(--kv-focus-border);--kv-input-placeholder: light-dark(#717373, #707985);--kv-input-text: light-dark(#24262a, #e9ecf1);--kv-input-ring: var(--kv-focus-ring);--kv-field-bg: var(--kv-input-bg);--kv-field-border: var(--kv-input-border);--kv-table-bg: light-dark(var(--kv-panel-bg), transparent);--kv-table-header-bg: light-dark(#efedee, #282d34);--kv-table-header-text: light-dark(#5a5c5e, #9da4af);--kv-table-row-bg: transparent;--kv-table-row-hover: light-dark(#f7f5f5, rgb(255 255 255 / 2.7%));--kv-table-row-selected: light-dark(#eef0fb, rgb(89 104 223 / 9%));--kv-table-border: var(--kv-panel-border);--kv-sidebar-border: light-dark(#e9e7e8, rgb(255 255 255 / 7%));--kv-right-rail-border: var(--kv-sidebar-border)}:root[data-theme=light],[data-kv-design-system][data-theme=light]{color-scheme:light}:root[data-theme=dark],[data-kv-design-system][data-theme=dark]{color-scheme:dark}[data-kv-design-system][data-density=compact]{--kv-control-height: var(--kv-control-height-sm);--kv-row-height: 2.5rem}[data-kv-design-system][data-density=comfortable]{--kv-control-height: var(--kv-control-height-lg);--kv-row-height: 3.75rem}}@layer ket.reset{:where([data-kv-design-system]),:where([data-kv-design-system]) *,:where([data-kv-design-system]) *:before,:where([data-kv-design-system]) *:after{box-sizing:border-box}:where([data-kv-design-system]){min-width:0;color:var(--kv-color-ink);font-family:var(--kv-font-sans);font-size:var(--kv-text-base);line-height:var(--kv-leading-normal);text-rendering:optimizeLegibility}:where([data-kv-design-system]) :where(button,input,select,textarea){font:inherit}:where([data-kv-design-system]) :where(a,button,input,select,textarea,summary):focus-visible{outline:2px solid var(--kv-color-focus);outline-offset:2px;box-shadow:var(--kv-focus-ring)}:where([data-kv-design-system]) :where(h1,h2,h3,p){margin-block-start:0}@media(prefers-reduced-motion:reduce){:where([data-kv-design-system]) *,:where([data-kv-design-system]) *:before,:where([data-kv-design-system]) *:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=action]{display:inline-flex;min-height:var(--kv-control-height);align-items:center;justify-content:center;gap:.4375rem;padding-inline:var(--kv-space-3);border:1px solid var(--kv-border-default);border-radius:var(--kv-radius-sm);background:var(--kv-interactive-bg);color:var(--kv-text-secondary);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium);line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background var(--kv-motion-fast),border-color var(--kv-motion-fast),transform var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=action]:hover:not(:disabled){border-color:var(--kv-border-strong);background:var(--kv-interactive-hover);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=action]:active:not(:disabled){background:var(--kv-interactive-active);transform:translateY(1px)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]{border-color:var(--kv-action-primary-bg);background:var(--kv-action-primary-bg);color:var(--kv-action-primary-ink)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]:hover:not(:disabled){border-color:var(--kv-action-primary-hover);background:var(--kv-action-primary-hover)}:where([data-kv-design-system]) [data-ui=action][data-variant=primary]:active:not(:disabled){border-color:var(--kv-action-primary-active);background:var(--kv-action-primary-active)}:where([data-kv-design-system]) [data-ui=action][data-variant=tertiary]{border-color:transparent;background:transparent;color:var(--kv-text-secondary)}:where([data-kv-design-system]) [data-ui=action][data-variant=tertiary]:hover:not(:disabled){border-color:transparent;background:color-mix(in srgb,var(--kv-text-main) 5%,transparent)}:where([data-kv-design-system]) [data-ui=action][data-variant=destructive]{border-color:var(--kv-danger-border);background:transparent;color:var(--kv-danger)}:where([data-kv-design-system]) [data-ui=action][data-variant=destructive]:hover:not(:disabled){border-color:var(--kv-danger-border);background:var(--kv-danger-bg);color:var(--kv-danger-hover)}:where([data-kv-design-system]) [data-ui=action][data-size=compact]{min-height:var(--kv-control-height-compact);padding-inline:var(--kv-space-2);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=action][data-size=prominent]{min-height:var(--kv-control-height-prominent);padding-inline:var(--kv-space-5);font-size:var(--kv-text-base)}:where([data-kv-design-system]) [data-ui=action][data-icon-only=true]{width:var(--kv-control-height);padding-inline:0}:where([data-kv-design-system]) [data-ui=action]:disabled{border-color:var(--kv-panel-border);background:var(--kv-interactive-disabled);color:var(--kv-text-disabled);cursor:not-allowed}:where([data-kv-design-system]) [data-ui=action-leading]{display:inline-grid;width:1rem;height:1rem;place-items:center;font-family:var(--kv-font-mono)}:where([data-kv-design-system]) [data-ui=action-label]{min-width:0;overflow:hidden;line-height:var(--kv-leading-normal);text-overflow:ellipsis}:where([data-kv-design-system]) [data-ui=action-spinner]{width:.8rem;height:.8rem;border:2px solid currentcolor;border-right-color:transparent;border-radius:50%;animation:kv-spin .7s linear infinite}:where([data-kv-design-system]) [data-ui=action-group]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=badge]{display:inline-flex;min-height:1.4rem;align-items:center;gap:.3125rem;padding:.125rem .4375rem;border:1px solid transparent;border-radius:var(--kv-radius-sm);background:color-mix(in srgb,var(--kv-text-main) 7%,transparent);color:var(--kv-text-secondary);font-size:var(--kv-text-xs);font-weight:var(--kv-weight-medium);white-space:nowrap}:where([data-kv-design-system]) [data-ui=badge][data-tone=info]{background:var(--kv-color-info-soft);color:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=badge][data-tone=positive]{background:var(--kv-color-positive-soft);color:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=badge][data-tone=warning]{background:var(--kv-color-warning-soft);color:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=badge][data-tone=danger]{background:var(--kv-color-danger-soft);color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=tag]{display:inline-flex;min-height:1.6rem;align-items:center;gap:var(--kv-space-1);padding-inline:var(--kv-space-2);border:1px solid var(--kv-color-line);border-radius:var(--kv-radius-sm);background:var(--kv-color-surface);font-size:var(--kv-text-xs);font-weight:650}:where([data-kv-design-system]) [data-ui=tag-remove]{display:grid;width:1rem;height:1rem;place-items:center;border-radius:var(--kv-radius-xs);color:var(--kv-color-ink-muted);text-decoration:none}:where([data-kv-design-system]) [data-ui=tag-remove]:hover{background:var(--kv-color-danger-soft);color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=count-badge]{display:inline-grid;min-width:1.4rem;height:1.4rem;place-items:center;padding-inline:var(--kv-space-1);border-radius:var(--kv-radius-full);background:var(--kv-color-accent-soft);color:var(--kv-color-accent);font-family:var(--kv-font-mono);font-size:var(--kv-text-xs);font-weight:800}:where([data-kv-design-system]) [data-ui=avatar]{display:inline-grid;width:2rem;height:2rem;place-items:center;border:1px solid var(--kv-color-line-strong);border-radius:50%;background:var(--kv-color-accent-soft);color:var(--kv-color-accent);font-size:var(--kv-text-xs);font-weight:800}:where([data-kv-design-system]) [data-ui=avatar][data-size=small]{width:1.5rem;height:1.5rem}:where([data-kv-design-system]) [data-ui=avatar][data-size=large]{width:3rem;height:3rem;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=code]{padding:.15rem .35rem;border-radius:var(--kv-radius-xs);background:var(--kv-color-surface-subtle);color:var(--kv-color-ink-secondary);font-family:var(--kv-font-mono);font-size:.85em;overflow-wrap:anywhere}:where([data-kv-design-system]) [data-ui=notice]{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--kv-space-3);align-items:start;padding:var(--kv-space-3) var(--kv-space-4);border:1px solid var(--kv-color-line);border-left:3px solid var(--kv-color-info);border-radius:var(--kv-radius-sm);background:var(--kv-color-info-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=positive]{border-left-color:var(--kv-color-positive);background:var(--kv-color-positive-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=warning]{border-left-color:var(--kv-color-warning);background:var(--kv-color-warning-soft)}:where([data-kv-design-system]) [data-ui=notice][data-tone=danger]{border-left-color:var(--kv-color-danger);background:var(--kv-color-danger-soft)}:where([data-kv-design-system]) [data-ui=notice-mark]{width:.65rem;height:.65rem;margin-top:.35rem;border-radius:50%;background:currentcolor}:where([data-kv-design-system]) [data-ui=notice-copy]{min-width:0}:where([data-kv-design-system]) [data-ui=notice-title]{margin-bottom:var(--kv-space-1);font-weight:800}:where([data-kv-design-system]) [data-ui=notice-message]{margin-bottom:0;color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=notice-actions]{align-self:center}:where([data-kv-design-system]) [data-ui=empty]{display:grid;min-height:11rem;place-items:center;align-content:center;padding:var(--kv-space-8);color:var(--kv-color-ink-secondary);text-align:center}:where([data-kv-design-system]) [data-ui=empty-mark]{display:grid;width:2.5rem;height:2.5rem;margin-bottom:var(--kv-space-3);place-items:center;border:1px solid var(--kv-color-line-strong);border-radius:50%;color:var(--kv-color-accent);font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=empty-title]{margin-bottom:var(--kv-space-1);color:var(--kv-color-ink);font-weight:800}:where([data-kv-design-system]) [data-ui=empty-message]{max-width:34rem;margin-bottom:0;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=empty-actions]{margin-top:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=loading]{display:grid;gap:var(--kv-space-3);padding:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=loading-label]{color:var(--kv-color-ink-muted);font-size:var(--kv-text-xs);font-weight:750;letter-spacing:.08em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=skeleton]{display:grid;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=skeleton-line]{height:.7rem;border-radius:var(--kv-radius-xs);background:linear-gradient(90deg,var(--kv-color-surface-subtle),var(--kv-color-line),var(--kv-color-surface-subtle));background-size:200% 100%;animation:kv-shimmer 1.5s ease infinite}:where([data-kv-design-system]) [data-ui=skeleton-line][data-line="2"]{width:82%}:where([data-kv-design-system]) [data-ui=skeleton-line][data-line="3"]{width:58%}:where([data-kv-design-system]) [data-ui=field]{display:grid;min-width:0;gap:var(--kv-space-1);margin:0;padding:0;border:0}:where([data-kv-design-system]) [data-ui=field][data-kind=checkbox]{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=field-label]{color:var(--kv-text-secondary);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium)}:where([data-kv-design-system]) [data-ui=field-required]{color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=field-control]{width:100%;min-height:var(--kv-control-height);padding:0 var(--kv-space-2-5);border:1px solid var(--kv-field-border);border-radius:var(--kv-radius-sm);background:var(--kv-input-bg);color:var(--kv-input-text);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=field-control]::placeholder{color:var(--kv-input-placeholder)}:where([data-kv-design-system]) [data-ui=field-control]:hover:not(:focus-visible,:disabled){border-color:var(--kv-input-border-hover);background:var(--kv-input-bg-hover)}:where([data-kv-design-system]) [data-ui=field-control]:focus-visible{border-color:var(--kv-input-border-focus);background:var(--kv-input-bg-focus);box-shadow:var(--kv-input-ring);outline:none}:where([data-kv-design-system]) [data-ui=field-control]:disabled{border-color:var(--kv-panel-border);background:var(--kv-interactive-disabled);color:var(--kv-text-disabled);cursor:not-allowed}:where([data-kv-design-system]) textarea[data-ui=field-control]{min-height:6.875rem;padding:var(--kv-space-2-5) var(--kv-space-3);resize:vertical}:where([data-kv-design-system]) input[type=checkbox][data-ui=field-control]{width:1rem;min-height:1rem;accent-color:var(--kv-color-accent)}:where([data-kv-design-system]) [data-ui=field][data-invalid=true] [data-ui=field-control]{border-color:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=field-options]{display:flex;flex-wrap:wrap;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=field-option]{display:inline-flex;align-items:center;gap:var(--kv-space-2);color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=field-help]{color:var(--kv-color-ink-muted);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=field-error]{color:var(--kv-color-danger);font-size:var(--kv-text-xs);font-weight:700}@keyframes kv-spin{to{transform:rotate(360deg)}}@keyframes kv-shimmer{to{background-position:-200% 0}}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=notice]{grid-template-columns:auto minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=notice-actions]{grid-column:1 / -1}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=nav-list]{display:grid;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=nav-item]{display:flex;height:var(--kv-sidebar-item-height);align-items:center;gap:.5625rem;padding-inline:var(--kv-space-2-5);border-radius:var(--kv-radius-sm);color:var(--kv-text-secondary);font-size:var(--kv-text-sm);text-decoration:none;transition:background var(--kv-duration-normal) var(--kv-ease-default),color var(--kv-duration-normal) var(--kv-ease-default)}:where([data-kv-design-system]) [data-ui=nav-item]:hover{background:color-mix(in srgb,var(--kv-text-main) 4.5%,transparent);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=nav-item][data-active=true]{background:var(--kv-nav-selected);color:var(--kv-nav-selected-text)}:where([data-kv-design-system]) [data-ui=nav-item][data-active=true]:hover{background:var(--kv-nav-selected-hover)}:where([data-kv-design-system]) [data-ui=nav-item-leading]{display:inline-grid;width:1rem;flex:none;place-items:center}:where([data-kv-design-system]) [data-ui=nav-item-label]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where([data-kv-design-system]) [data-ui=nav-item-count],:where([data-kv-design-system]) [data-ui=tab-count]{color:inherit;font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums;opacity:.72}:where([data-kv-design-system]) [data-ui=tabs]{display:flex;min-height:var(--kv-table-header-height);align-items:center;gap:1.625rem;border-bottom:1px solid var(--kv-border-subtle);overflow-x:auto}:where([data-kv-design-system]) [data-ui=tab]{position:relative;display:inline-flex;height:var(--kv-table-header-height);flex:none;align-items:center;gap:var(--kv-space-1-5);color:var(--kv-text-muted);font-size:var(--kv-text-sm);font-weight:var(--kv-weight-medium);text-decoration:none}:where([data-kv-design-system]) [data-ui=tab]:hover{color:var(--kv-text-secondary)}:where([data-kv-design-system]) [data-ui=tab][data-active=true]{color:var(--kv-tab-active-text)}:where([data-kv-design-system]) [data-ui=tab][data-active=true]:after{position:absolute;right:0;bottom:-1px;left:0;height:2px;border-radius:2px 2px 0 0;background:var(--kv-accent);content:""}}@layer ket.app{:where([data-kv-design-system]) [data-ui=progress]{display:grid;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=progress-label]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-3);color:var(--kv-text-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=progress-value]{color:var(--kv-text-muted);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=progress-track]{height:4px;overflow:hidden;border-radius:var(--kv-radius-full);background:color-mix(in srgb,var(--kv-text-main) 9%,transparent)}:where([data-kv-design-system]) [data-ui=progress-bar]{display:block;height:100%;border-radius:inherit;background:var(--kv-accent)}:where([data-kv-design-system]) [data-ui=progress][data-tone=positive] [data-ui=progress-bar]{background:var(--kv-success)}:where([data-kv-design-system]) [data-ui=progress][data-tone=warning] [data-ui=progress-bar]{background:var(--kv-warning)}:where([data-kv-design-system]) [data-ui=progress][data-tone=danger] [data-ui=progress-bar]{background:var(--kv-danger)}}@layer ket.app{:where([data-kv-design-system]) [data-ui=stack]{display:grid;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=stack][data-gap=compact]{gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=stack][data-gap=loose]{gap:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=inline]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=grid]{display:grid;grid-template-columns:repeat(var(--kv-grid-columns, 3),minmax(0,1fr));gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=grid][data-columns="2"]{--kv-grid-columns: 2}:where([data-kv-design-system]) [data-ui=grid][data-columns="3"]{--kv-grid-columns: 3}:where([data-kv-design-system]) [data-ui=grid][data-columns="4"]{--kv-grid-columns: 4}:where([data-kv-design-system]) [data-ui=surface]{min-width:0;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg)}:where([data-kv-design-system]) [data-ui=surface][data-tone=subtle]{background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=surface][data-tone=raised]{background:var(--kv-surface-raised);box-shadow:var(--kv-shadow-md)}:where([data-kv-design-system]) [data-ui=surface][data-padding=compact]{padding:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=surface][data-padding=default]{padding:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=disclosure]{min-width:0;overflow:clip;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=disclosure-summary]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-3);padding:var(--kv-space-3) var(--kv-space-4);color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm);font-weight:700;cursor:pointer;list-style:none}:where([data-kv-design-system]) [data-ui=disclosure-summary]::-webkit-details-marker{display:none}:where([data-kv-design-system]) [data-ui=disclosure-summary]:after{content:"+";flex:0 0 auto;color:var(--kv-color-ink-muted);font-family:var(--kv-font-mono);font-weight:600;transition:transform var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=disclosure][open]>[data-ui=disclosure-summary]{border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=disclosure][open]>[data-ui=disclosure-summary]:after{transform:rotate(45deg)}:where([data-kv-design-system]) [data-ui=disclosure-body]{min-width:0;padding:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=section]{display:grid;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=section-head]{display:flex;align-items:end;justify-content:space-between;gap:var(--kv-space-4);padding-bottom:var(--kv-space-3);border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=section-eyebrow]{margin-bottom:var(--kv-space-1);color:var(--kv-color-accent);font-family:var(--kv-font-mono);font-size:var(--kv-text-xs);font-weight:800;letter-spacing:.1em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=section-title]{margin-bottom:0;font-size:var(--kv-text-md);line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=section-description]{max-width:52rem;margin:var(--kv-space-1) 0 0;color:var(--kv-color-ink-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=section-actions]{flex:0 0 auto}:where([data-kv-design-system]) [data-ui=section-body]{min-width:0}:where([data-kv-design-system]) [data-ui=content-card]{display:grid;min-width:0;gap:var(--kv-space-3);padding:var(--kv-space-4);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg);transition:border-color var(--kv-motion-fast),background var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=content-card][data-interactive=true]:hover{border-color:var(--kv-border-default);background:var(--kv-surface-raised)}:where([data-kv-design-system]) [data-ui=content-card][data-selected=true]{border-color:var(--kv-accent-border);background:var(--kv-accent-subtle)}:where([data-kv-design-system]) [data-ui=card-head]{min-width:0}:where([data-kv-design-system]) [data-ui=card-title]{margin-bottom:0;font-size:var(--kv-text-base)}:where([data-kv-design-system]) [data-ui=card-title] a{color:inherit;text-decoration:none}:where([data-kv-design-system]) [data-ui=card-summary]{margin:var(--kv-space-1) 0 0;color:var(--kv-color-ink-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=card-body]{color:var(--kv-color-ink-secondary);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=card-meta]{align-self:end}:where([data-kv-design-system]) [data-ui=card-actions]{padding-top:var(--kv-space-3);border-top:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=metric]{display:grid;min-width:0;min-height:6.75rem;align-content:start;gap:var(--kv-space-1);padding:var(--kv-space-4);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg)}:where([data-kv-design-system]) [data-ui=metric]:has(>[data-ui=metric-icon]){grid-template-columns:auto 1fr;column-gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=metric]:has(>[data-ui=metric-icon])>:not([data-ui=metric-icon]){grid-column:2}:where([data-kv-design-system]) [data-ui=metric-icon]{display:grid;grid-row:1 / 3;grid-column:1;align-self:center;place-items:center;inline-size:2.25rem;block-size:2.25rem;border-radius:var(--kv-radius-md);background:var(--kv-accent-subtle);color:var(--kv-accent)}:where([data-kv-design-system]) [data-ui=metric-icon] svg{inline-size:1.125rem;block-size:1.125rem}:where([data-kv-design-system]) a[data-ui=metric]{color:inherit;text-decoration:none}:where([data-kv-design-system]) a[data-ui=metric]:hover{border-color:var(--kv-color-line-strong);background:var(--kv-color-surface-hover)}:where([data-kv-design-system]) [data-ui=metric-label]{display:flex;align-items:center;margin-bottom:0;gap:var(--kv-space-2);color:var(--kv-text-secondary);font-size:var(--kv-text-xs);font-weight:var(--kv-weight-semibold);letter-spacing:.05em;text-transform:uppercase}:where([data-kv-design-system]) [data-ui=metric][data-dot=true] [data-ui=metric-label]:before{width:.5rem;height:.5rem;flex:none;border-radius:50%;background:var(--kv-text-muted);content:""}:where([data-kv-design-system]) [data-ui=metric][data-tone=info] [data-ui=metric-label]:before{background:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=metric][data-tone=positive] [data-ui=metric-label]:before{background:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=metric][data-tone=warning] [data-ui=metric-label]:before{background:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=metric][data-tone=danger] [data-ui=metric-label]:before{background:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=metric-value]{margin-bottom:0;font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-.025em}:where([data-kv-design-system]) [data-ui=metric-detail]{margin:0;color:var(--kv-text-secondary);font-size:var(--kv-text-sm)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=grid]{grid-template-columns:1fr}:where([data-kv-design-system]) [data-ui=section-head]{align-items:start;flex-direction:column}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=app-shell]{display:grid;min-width:0;min-height:100dvh;grid-template-columns:var(--kv-sidebar-width) minmax(0,1fr);background:var(--kv-page-bg);color:var(--kv-text-main)}:where([data-kv-design-system]) [data-ui=app-shell][data-has-right-rail=true]{grid-template-columns:var(--kv-sidebar-width) minmax(0,1fr) var(--kv-right-rail-width)}:where([data-kv-design-system]) [data-ui=app-sidebar]{position:sticky;top:0;height:100dvh;min-width:0;overflow:hidden;border-right:1px solid var(--kv-sidebar-border);border-radius:var(--kv-radius-app-region);background:var(--kv-sidebar-bg)}:where([data-kv-design-system]) [data-ui=app-main]{min-width:0;border-radius:var(--kv-radius-app-region);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=app-right-rail]{position:sticky;top:0;height:100dvh;min-width:0;overflow-y:auto;border-left:1px solid var(--kv-right-rail-border);border-radius:var(--kv-radius-app-region);background:var(--kv-right-rail-bg)}:where([data-kv-design-system]) [data-ui=app-shell][data-mode=embedded]{min-height:28rem;height:28rem;overflow:hidden}:where([data-kv-design-system]) [data-ui=app-shell][data-mode=embedded] :is([data-ui=app-sidebar],[data-ui=app-right-rail]){position:relative;height:100%}:where([data-kv-design-system]) [data-ui=page]{min-width:0;padding:var(--kv-page-padding-y) var(--kv-page-padding-x)}:where([data-kv-design-system]) [data-ui=page-header]{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--kv-space-6);margin-bottom:var(--kv-space-6)}:where([data-kv-design-system]) [data-ui=page-heading]{min-width:0}:where([data-kv-design-system]) [data-ui=page-title]{margin:0;font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=page-description]{margin:var(--kv-space-1-5) 0 0;color:var(--kv-text-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=page-actions]{flex:0 0 auto}:where([data-kv-design-system]) [data-ui=page-body]{min-width:0}:where([data-kv-design-system]) [data-ui=record-canvas]{min-width:0;padding:1.375rem var(--kv-page-padding-x) var(--kv-space-12)}:where([data-kv-design-system]) [data-ui=record-content]{width:100%;min-width:0}:where([data-kv-design-system]) [data-ui=record-section]{min-width:0;padding:var(--kv-space-6) 0;border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=record-section]:last-child{border-bottom:0}:where([data-kv-design-system]) [data-ui=record-section-title]{margin:0 0 var(--kv-space-4);font-size:var(--kv-text-lg);font-weight:var(--kv-weight-semibold)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=app-shell],:where([data-kv-design-system]) [data-ui=app-shell][data-has-right-rail=true]{grid-template-columns:minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=app-sidebar],:where([data-kv-design-system]) [data-ui=app-right-rail]{position:relative;width:auto;height:auto}:where([data-kv-design-system]) [data-ui=app-sidebar]{border-right:0;border-bottom:1px solid var(--kv-sidebar-border)}:where([data-kv-design-system]) [data-ui=app-right-rail]{border-top:1px solid var(--kv-right-rail-border);border-left:0}:where([data-kv-design-system]) [data-ui=page],:where([data-kv-design-system]) [data-ui=record-canvas]{padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=page-header]{flex-direction:column;gap:var(--kv-space-4)}}}@layer ket.app{:where([data-kv-design-system]) :is([data-ui=list-page],[data-ui=form-page],[data-ui=dashboard-page],[data-ui=board-page]){--kv-page-title-size: 1.5rem}:where([data-kv-design-system]) [data-ui=list-page]{display:grid;min-width:0;gap:var(--kv-space-3);padding:var(--kv-space-6) var(--kv-page-padding-x) var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=list-page-header]{min-width:0;padding-bottom:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=list-page-title-row]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page-eyebrow]{margin:0;color:var(--kv-accent);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-bold);letter-spacing:.09em;line-height:var(--kv-leading-tight);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=list-page-title]{margin:0;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=list-page-description]{max-width:48rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=list-page-actions]{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-toolbar]{display:flex;width:100%;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2);padding:var(--kv-space-2);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=list-page-controls]{min-width:min(100%,24rem);flex:1 1 40rem}:where([data-kv-design-system]) [data-ui=list-page-status]{min-width:max-content;flex:0 0 auto;padding-inline:var(--kv-space-2);color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=list-page-body]{min-width:0}:where([data-kv-design-system]) [data-ui=list-page-footer]{min-width:0;padding-top:var(--kv-space-3);border-top:1px solid var(--kv-panel-divider);color:var(--kv-text-muted);font-size:var(--kv-text-xs)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-header]{padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title-row]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]{justify-content:flex-end}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-toolbar]{padding:var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);border:0;border-radius:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-controls]{min-width:0;flex-basis:100%}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]{padding-top:var(--kv-space-2);padding-inline:var(--kv-page-padding-x);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-footer]{margin:var(--kv-space-3) var(--kv-page-padding-x) 0;padding:var(--kv-space-2-5) var(--kv-space-3);border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-panel-bg);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]:has(>[data-ui=table-scroll])>[data-ui=table-scroll]{border-radius:var(--kv-radius-md) var(--kv-radius-md) 0 0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-body]:has(>[data-ui=table-scroll])+[data-ui=list-page-footer]{margin-top:-1px;border-radius:0 0 var(--kv-radius-md) var(--kv-radius-md)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=table-scroll]{margin:0;border-color:var(--kv-table-border);border-radius:var(--kv-radius-md);background:var(--kv-table-bg);box-shadow:none}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=table] th{background:var(--kv-table-header-bg);color:var(--kv-table-header-text)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=row] td{background:var(--kv-table-row-bg)}:where([data-kv-design-system]) [data-ui=list-page] [data-ui=row]:hover td{background:var(--kv-table-row-hover)}:where([data-kv-design-system]) [data-ui=table-scroll]{width:100%;overflow-x:auto;border:1px solid var(--kv-panel-border);border-radius:var(--kv-radius-md);background:var(--kv-table-bg)}:where([data-kv-design-system]) [data-ui=table]{width:100%;min-width:38rem;border-collapse:separate;border-spacing:0;font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=table-caption]{padding:var(--kv-space-3);color:var(--kv-text-muted);font-size:var(--kv-text-xs);text-align:left}:where([data-kv-design-system]) [data-ui=col]{height:var(--kv-table-header-height);padding:0 var(--kv-space-3);border-bottom:1px solid var(--kv-table-border);background:var(--kv-table-header-bg);color:var(--kv-table-header-text);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.035em;text-align:left;text-transform:uppercase;white-space:nowrap}:where([data-kv-design-system]) [data-ui=col][data-align=end],:where([data-kv-design-system]) [data-ui=cell][data-align=end]{font-variant-numeric:tabular-nums;text-align:right}:where([data-kv-design-system]) [data-ui=row]{height:var(--kv-row-height);transition:background var(--kv-motion-fast)}:where([data-kv-design-system]) [data-ui=row]:hover{background:transparent}:where([data-kv-design-system]) [data-ui=row]:hover [data-ui=cell]{background:var(--kv-table-row-hover)}:where([data-kv-design-system]) [data-ui=row][data-selected=true] [data-ui=cell]{background:var(--kv-table-row-selected)}:where([data-kv-design-system]) [data-ui=cell]{max-width:24rem;height:var(--kv-row-height);padding:.4375rem var(--kv-space-3);border-bottom:1px solid var(--kv-table-border);background:var(--kv-table-row-bg);color:var(--kv-text-secondary);overflow-wrap:anywhere}:where([data-kv-design-system]) [data-ui=cell][data-priority=primary]{color:var(--kv-text-main);font-weight:var(--kv-weight-semibold)}:where([data-kv-design-system]) [data-ui=row-link]{color:inherit;text-decoration:none}:where([data-kv-design-system]) [data-ui=row-link]:hover{color:var(--kv-color-accent);text-decoration:underline;text-underline-offset:.15em}:where([data-kv-design-system]) [data-ui=record-form]{display:grid;gap:var(--kv-gap-field-group)}@media(max-width:48rem){:where([data-kv-design-system]) [data-ui=table-scroll][data-responsive=stack]{overflow:hidden}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]{display:block;min-width:0}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]>thead{display:none}:where([data-kv-design-system]) [data-responsive=stack]>[data-ui=table]>tbody{display:block}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=row]{display:grid;grid-template-columns:minmax(0,1fr);height:auto;padding:var(--kv-space-3);border-bottom:1px solid var(--kv-table-border)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=row]:last-child{border-bottom:0}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--kv-space-2);width:100%;min-width:0;max-width:none;height:auto;padding:var(--kv-space-2) 0;border:0;white-space:normal}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:before{content:attr(data-label);color:var(--kv-text-muted);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:first-child{display:block;font-weight:var(--kv-weight-semibold)}:where([data-kv-design-system]) [data-responsive=stack] [data-ui=cell]:first-child:before{display:none}}:where([data-kv-design-system]) [data-ui=form-errors]{display:grid;gap:var(--kv-space-1);margin:0;padding:var(--kv-space-3) var(--kv-space-3) var(--kv-space-3) 2rem;border:1px solid var(--kv-color-danger);border-radius:var(--kv-radius-sm);background:var(--kv-color-danger-soft);color:var(--kv-color-danger);font-size:var(--kv-text-sm)}:where([data-kv-design-system]) [data-ui=form-grid]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--kv-gap-form-row) var(--kv-gap-field-group)}:where([data-kv-design-system]) [data-ui=form-grid] [data-ui=field][data-span=full]{grid-column:1 / -1}:where([data-kv-design-system]) [data-ui=form-actions]{display:flex;justify-content:flex-end;padding-top:var(--kv-space-4);border-top:1px solid var(--kv-panel-divider)}@media(max-width:47.9375rem){:where([data-kv-design-system]) [data-ui=form-grid]{grid-template-columns:minmax(0,1fr)}:where([data-kv-design-system]) [data-ui=form-grid] [data-ui=field]{grid-column:1}}:where([data-kv-design-system]) [data-ui=modal-backdrop]{position:fixed;z-index:var(--kv-z-modal);inset:0;display:grid;place-items:center;padding:var(--kv-space-4);background:#0c0e1085;backdrop-filter:blur(3px)}:where([data-kv-design-system]) [data-ui=modal-backdrop][data-mode=embedded]{position:relative;min-height:20rem;inset:auto;border-radius:var(--kv-radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--kv-color-accent-soft) 60%,transparent),transparent),var(--kv-color-canvas);backdrop-filter:none}:where([data-kv-design-system]) [data-ui=modal-sheet]{width:min(34rem,100%);max-height:calc(100dvh - 2rem);overflow:auto;border:1px solid var(--kv-color-line-strong);border-radius:var(--kv-radius-lg);background:var(--kv-color-surface);box-shadow:var(--kv-shadow-popover)}:where([data-kv-design-system]) [data-ui=modal-head]{display:flex;align-items:center;justify-content:space-between;gap:var(--kv-space-4);padding:var(--kv-space-4) var(--kv-space-5);border-bottom:1px solid var(--kv-color-line)}:where([data-kv-design-system]) [data-ui=modal-title]{margin-bottom:0;font-family:var(--kv-font-display);font-size:var(--kv-text-lg);font-weight:650}:where([data-kv-design-system]) [data-ui=modal-close]{display:grid;width:2rem;height:2rem;place-items:center;border-radius:50%;color:var(--kv-color-ink-muted);font-size:1.4rem;line-height:1;text-decoration:none}:where([data-kv-design-system]) [data-ui=modal-close]:hover{background:var(--kv-color-surface-hover);color:var(--kv-color-ink)}:where([data-kv-design-system]) [data-ui=modal-body]{padding:var(--kv-space-5)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=list-page]{gap:var(--kv-space-3);padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=list-page-header]{padding-bottom:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=list-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=list-page-toolbar]{gap:var(--kv-space-2);padding:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page-controls]{min-width:0;flex-basis:15rem}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational]{padding:0 0 var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-heading]{display:flex;flex-direction:column}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title-row]{display:contents}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-title]{order:1;font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-description]{order:2}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions],:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]>[data-ui=inline]{width:100%}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions]{order:3;margin-top:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-actions] [data-ui=action][data-variant=primary]{min-height:2.75rem;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-toolbar]{padding:var(--kv-space-3) var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] :is([data-ui=list-page-body],[data-ui=list-page-footer]){margin-inline:var(--kv-space-4);padding-inline:0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=list-page-footer]{padding:var(--kv-space-2-5) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table]{min-width:0}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table-scroll]:not([data-responsive=stack]) [data-ui=table] :is(th,td):is([data-priority=secondary],[data-priority=tertiary]){display:none}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table-scroll]:not([data-responsive=stack]) [data-ui=table] :is(th,td)[data-priority=primary][data-align=end]{width:7rem}:where([data-kv-design-system]) [data-ui=list-page][data-variant=operational] [data-ui=table] :is([data-ui=col],[data-ui=cell]){padding-inline:var(--kv-space-2)}}:where([data-kv-design-system]) [data-ui=pipeline]{display:grid;margin:0;padding:0;grid-auto-columns:1fr;grid-auto-flow:column;list-style:none}:where([data-kv-design-system]) [data-ui=pipeline-step]{position:relative;display:grid;padding-bottom:var(--kv-space-5);justify-items:center;gap:var(--kv-space-1);text-align:center}:where([data-kv-design-system]) [data-ui=pipeline-step]:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:after{position:absolute;bottom:.3125rem;height:1px;background:var(--kv-color-line-strong);content:""}:where([data-kv-design-system]) [data-ui=pipeline-step]:before{left:0;right:50%}:where([data-kv-design-system]) [data-ui=pipeline-step]:after{left:50%;right:0}:where([data-kv-design-system]) [data-ui=pipeline-step]:first-child:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:last-child:after{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-node]{position:absolute;bottom:0;left:50%;width:.625rem;height:.625rem;border-radius:50%;background:var(--kv-text-muted);translate:-50% 0}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=info] [data-ui=pipeline-step-node]{background:var(--kv-color-info)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=positive] [data-ui=pipeline-step-node]{background:var(--kv-color-positive)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=warning] [data-ui=pipeline-step-node]{background:var(--kv-color-warning)}:where([data-kv-design-system]) [data-ui=pipeline-step][data-tone=danger] [data-ui=pipeline-step-node]{background:var(--kv-color-danger)}:where([data-kv-design-system]) [data-ui=pipeline-arrow]{position:absolute;top:.25rem;left:0;width:.375rem;height:.375rem;border-top:1.5px solid var(--kv-text-muted);border-right:1.5px solid var(--kv-text-muted);rotate:45deg;translate:-50% 0}:where([data-kv-design-system]) [data-ui=pipeline-step]:first-child [data-ui=pipeline-arrow]{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-label]{color:var(--kv-text-secondary);font-size:var(--kv-text-sm);text-decoration:none}:where([data-kv-design-system]) a[data-ui=pipeline-step-label]:hover{color:var(--kv-text-main);text-decoration:underline}:where([data-kv-design-system]) [data-ui=pipeline-step-value]{color:var(--kv-text-main);font-size:var(--kv-text-2xl);font-weight:var(--kv-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-.025em}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=pipeline]{grid-auto-columns:auto;grid-auto-flow:row}:where([data-kv-design-system]) [data-ui=pipeline-step]{padding-bottom:var(--kv-space-3);padding-left:var(--kv-space-6);grid-template-columns:1fr auto;align-items:center;justify-items:start;text-align:left}:where([data-kv-design-system]) [data-ui=pipeline-step]:before,:where([data-kv-design-system]) [data-ui=pipeline-step]:after{left:.3125rem;right:auto;width:1px;height:50%}:where([data-kv-design-system]) [data-ui=pipeline-step]:before{top:0;bottom:auto}:where([data-kv-design-system]) [data-ui=pipeline-step]:after{top:50%;bottom:auto}:where([data-kv-design-system]) [data-ui=pipeline-step-node]{top:50%;bottom:auto;left:.3125rem;translate:-50% -50%}:where([data-kv-design-system]) [data-ui=pipeline-arrow]{display:none}:where([data-kv-design-system]) [data-ui=pipeline-step-value]{font-size:var(--kv-text-lg)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=board-page]{display:grid;min-width:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational]{gap:0;padding:0}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=board-page-header]{display:grid;min-width:0;padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=board-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=board-page-eyebrow]{margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.07em;line-height:var(--kv-leading-normal);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=board-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=board-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=board-page-description]{max-width:56rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=board-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=board-page-status],:where([data-kv-design-system]) [data-ui=board-page-meta]{color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=board-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=board-page-toolbar]{display:flex;min-width:0;align-items:center;padding:var(--kv-space-3) var(--kv-page-padding-x) var(--kv-space-2-5);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=board-page-controls]{min-width:0;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=board-page-body]{display:grid;min-width:0;gap:var(--kv-space-4);padding:var(--kv-space-4) var(--kv-page-padding-x) var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=board-page-body]>[data-ui=stack]{gap:var(--kv-space-4)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=board-page][data-variant=operational] [data-ui=board-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=board-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=board-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=board-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=board-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=board-page-toolbar],:where([data-kv-design-system]) [data-ui=board-page-body]{padding-inline:var(--kv-space-4)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=dashboard-page]{display:grid;min-width:0;background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-header]{display:grid;min-width:0;padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=dashboard-page-eyebrow]{margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-2xs);font-weight:var(--kv-weight-semibold);letter-spacing:.07em;line-height:var(--kv-leading-normal);text-transform:uppercase}:where([data-kv-design-system]) [data-ui=dashboard-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=dashboard-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=dashboard-page-description]{max-width:56rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=dashboard-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=dashboard-page-status],:where([data-kv-design-system]) [data-ui=dashboard-page-meta]{color:var(--kv-text-muted);font-size:var(--kv-text-xs);font-variant-numeric:tabular-nums}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=dashboard-page-body]{display:grid;min-width:0;gap:var(--kv-space-6);padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-toolbar]{background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=dashboard-page-body]>[data-ui=stack]{gap:var(--kv-space-6)}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational]{padding-bottom:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=dashboard-page][data-variant=operational] [data-ui=dashboard-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=dashboard-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=dashboard-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=dashboard-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=dashboard-page-actions]>[data-ui=inline]{width:100%}:where([data-kv-design-system]) [data-ui=dashboard-page-actions] [data-ui=action][data-variant=primary]{min-height:2.75rem;flex:1 1 auto}:where([data-kv-design-system]) [data-ui=dashboard-page-body]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-8)}}}@layer ket.app{:where([data-kv-design-system]) [data-ui=form-page]{display:grid;min-width:0;background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational]{gap:0;padding:0 0 var(--kv-space-10)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-context]{display:flex;min-width:0;min-height:var(--kv-table-header-height);align-items:center;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=form-page-header]{display:grid;min-width:0;gap:var(--kv-space-2);padding:var(--kv-space-4) var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-header]{background:var(--kv-page-chrome-bg)}:where([data-kv-design-system]) [data-ui=form-page-title-row]{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-heading]{display:grid;min-width:0;gap:var(--kv-space-1)}:where([data-kv-design-system]) [data-ui=form-page-title]{margin:0;overflow-wrap:anywhere;color:var(--kv-text-main);font-size:var(--kv-page-title-size);font-weight:var(--kv-weight-semibold);letter-spacing:-.025em;line-height:var(--kv-leading-tight)}:where([data-kv-design-system]) [data-ui=form-page-status]{display:inline-flex;flex:0 0 auto;align-items:center}:where([data-kv-design-system]) [data-ui=form-page-subline]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=form-page-description]{max-width:48rem;margin:0;color:var(--kv-text-muted);font-size:var(--kv-text-sm);line-height:var(--kv-leading-normal)}:where([data-kv-design-system]) [data-ui=form-page-actions]{display:flex;min-width:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--kv-space-2)}:where([data-kv-design-system]) [data-ui=form-page-meta]{min-width:0}:where([data-kv-design-system]) [data-ui=form-page-controller]{min-width:0;padding-inline:var(--kv-page-padding-x);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=form-page-controller]:empty{display:none}:where([data-kv-design-system]) [data-ui=form-page-navigation]{min-width:0;padding-inline:var(--kv-page-padding-x);border-bottom:1px solid var(--kv-panel-divider);background:var(--kv-page-bg)}:where([data-kv-design-system]) [data-ui=form-page-layout]{display:grid;min-width:0;grid-template-columns:minmax(0,2fr) minmax(0,1fr);align-items:start}:where([data-kv-design-system]) [data-ui=form-page][data-has-aside=false] [data-ui=form-page-layout]{grid-template-columns:minmax(0,56rem)}:where([data-kv-design-system]) [data-ui=form-page][data-has-aside=false][data-width=wide] [data-ui=form-page-layout]{grid-template-columns:minmax(0,calc(68.75rem + var(--kv-page-padding-x) * 2))}:where([data-kv-design-system]) [data-ui=form-page-body]{display:grid;min-width:0;gap:var(--kv-space-6);padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10);background:var(--kv-page-content-bg)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]{gap:var(--kv-space-6)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=section]>[data-ui=section-head],:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]>[data-ui=section-head]{align-items:flex-start;padding-bottom:0;border-bottom:0}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]{padding-block:var(--kv-space-5);border-bottom:1px solid var(--kv-panel-divider)}:where([data-kv-design-system]) [data-ui=form-page-body]>[data-ui=stack]>[data-ui=section]:first-child{padding-block-start:0}:where([data-kv-design-system]) [data-ui=form-page-aside]{position:sticky;top:0;display:grid;min-width:0;max-height:100dvh;align-content:start;padding:var(--kv-space-5) var(--kv-page-padding-x) var(--kv-space-10) var(--kv-space-5);overflow-y:auto;border-left:1px solid var(--kv-panel-divider);background:var(--kv-panel-bg-subtle)}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(7rem,9rem) minmax(0,1fr);align-items:center;column-gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>[data-ui=field-label]{grid-column:1}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>:is([data-ui=field-control],[data-ui=field-options],[data-ui=field-help],[data-ui=field-error]){grid-column:2}@media(max-width:89.9375rem){:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(6.5rem,7.5rem) minmax(0,1fr);column-gap:var(--kv-space-2)}}@media(max-width:63.9375rem){:where([data-kv-design-system]) [data-ui=form-page-layout]{grid-template-columns:minmax(0,1fr);row-gap:var(--kv-space-5)}:where([data-kv-design-system]) [data-ui=form-page-aside]{position:static;max-height:none;padding-top:var(--kv-space-5);overflow:visible;border-top:1px solid var(--kv-panel-divider);border-left:0}}@media(max-width:47.9375rem){:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox]){grid-template-columns:minmax(0,1fr);align-items:stretch}:where([data-kv-design-system]) [data-ui=form-page] [data-ui=record-form] [data-ui=field]:not([data-kind=checkbox])>:is([data-ui=field-label],[data-ui=field-control],[data-ui=field-options],[data-ui=field-help],[data-ui=field-error]){grid-column:1}}@media(max-width:42rem){:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational]{padding-bottom:var(--kv-space-8)}:where([data-kv-design-system]) [data-ui=form-page][data-variant=operational] [data-ui=form-page-context]{min-height:2.75rem;padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-header]{padding:var(--kv-space-4) var(--kv-space-4) var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page-title-row]{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:var(--kv-space-3)}:where([data-kv-design-system]) [data-ui=form-page-title]{font-size:var(--kv-text-lg)}:where([data-kv-design-system]) [data-ui=form-page-actions]{justify-content:flex-start}:where([data-kv-design-system]) [data-ui=form-page-actions]>:is([data-ui=action-group],[data-ui=form-cluster]){width:100%}:where([data-kv-design-system]) [data-ui=form-page-meta]{padding-left:0}:where([data-kv-design-system]) [data-ui=form-page-navigation]{padding-inline:var(--kv-space-4)}:where([data-kv-design-system]) [data-ui=form-page-body],:where([data-kv-design-system]) [data-ui=form-page-aside],:where([data-kv-design-system]) [data-ui=form-page-controller]{padding-inline:var(--kv-space-4)}}}