@krizaka/ui 3.35.0 → 3.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/dist/account-menu.js +1 -1
  2. package/dist/account-menu.js.map +1 -1
  3. package/dist/activity-feed.js +2 -2
  4. package/dist/activity-feed.js.map +1 -1
  5. package/dist/anatomy-plate.d.ts +26 -0
  6. package/dist/anatomy-plate.js +32 -0
  7. package/dist/anatomy-plate.js.map +1 -0
  8. package/dist/app-header.js +1 -1
  9. package/dist/app-header.js.map +1 -1
  10. package/dist/app-shell.js +6 -6
  11. package/dist/app-shell.js.map +1 -1
  12. package/dist/argument-card.js +1 -1
  13. package/dist/badge.d.ts +1 -1
  14. package/dist/badge.js +1 -1
  15. package/dist/badge.js.map +1 -1
  16. package/dist/bird-plate.d.ts +38 -0
  17. package/dist/bird-plate.js +39 -0
  18. package/dist/bird-plate.js.map +1 -0
  19. package/dist/blocks.css +243 -46
  20. package/dist/card.d.ts +6 -6
  21. package/dist/card.js +2 -2
  22. package/dist/card.js.map +1 -1
  23. package/dist/checkbox.js +1 -1
  24. package/dist/checkbox.js.map +1 -1
  25. package/dist/chip-row.js +1 -1
  26. package/dist/chip-row.js.map +1 -1
  27. package/dist/chip.js +1 -1
  28. package/dist/chip.js.map +1 -1
  29. package/dist/{chunk-QDXV544C.js → chunk-4QH6CP2Y.js} +2 -2
  30. package/dist/chunk-4QH6CP2Y.js.map +1 -0
  31. package/dist/{chunk-NJFCSVPT.js → chunk-6EAHUURY.js} +2 -2
  32. package/dist/chunk-6EAHUURY.js.map +1 -0
  33. package/dist/{chunk-REPTKUJ6.js → chunk-7NRSPHAF.js} +2 -2
  34. package/dist/chunk-7NRSPHAF.js.map +1 -0
  35. package/dist/{chunk-CKSHLSDH.js → chunk-AAP3U66V.js} +2 -2
  36. package/dist/{chunk-7UCPGXKN.js → chunk-C3NF7V5Y.js} +2 -2
  37. package/dist/{chunk-7UCPGXKN.js.map → chunk-C3NF7V5Y.js.map} +1 -1
  38. package/dist/chunk-JFJECOZ2.js +338 -0
  39. package/dist/chunk-JFJECOZ2.js.map +1 -0
  40. package/dist/{chunk-KIBICUZK.js → chunk-S5LP7KKW.js} +4 -4
  41. package/dist/{chunk-3S4GHSPZ.js → chunk-VPO27AFS.js} +5 -5
  42. package/dist/chunk-VPO27AFS.js.map +1 -0
  43. package/dist/{chunk-2PNLHZLT.js → chunk-WYQ277F2.js} +3 -3
  44. package/dist/chunk-WYQ277F2.js.map +1 -0
  45. package/dist/{chunk-7Z4KHPFC.js → chunk-YGIN2YIY.js} +2 -2
  46. package/dist/{chunk-7Z4KHPFC.js.map → chunk-YGIN2YIY.js.map} +1 -1
  47. package/dist/{chunk-LZNZLCOE.js → chunk-YKEIOYJ5.js} +20 -6
  48. package/dist/chunk-YKEIOYJ5.js.map +1 -0
  49. package/dist/{chunk-2DGLWTPS.js → chunk-YKOLME7R.js} +3 -3
  50. package/dist/{chunk-2DGLWTPS.js.map → chunk-YKOLME7R.js.map} +1 -1
  51. package/dist/code-block.js +4 -4
  52. package/dist/code-block.js.map +1 -1
  53. package/dist/combobox.js +2 -2
  54. package/dist/command.js +3 -3
  55. package/dist/command.js.map +1 -1
  56. package/dist/comparison-table.js +2 -2
  57. package/dist/comparison-table.js.map +1 -1
  58. package/dist/countdown.js +1 -1
  59. package/dist/countdown.js.map +1 -1
  60. package/dist/cover-hero.js +15 -6
  61. package/dist/cover-hero.js.map +1 -1
  62. package/dist/dashboard-layout.js +1 -1
  63. package/dist/dashboard-layout.js.map +1 -1
  64. package/dist/data-table.js +5 -5
  65. package/dist/date-picker.js +3 -3
  66. package/dist/date-picker.js.map +1 -1
  67. package/dist/description-list.js +1 -1
  68. package/dist/description-list.js.map +1 -1
  69. package/dist/detail-layout.js +1 -1
  70. package/dist/detail-layout.js.map +1 -1
  71. package/dist/dialog.js +1 -1
  72. package/dist/docs-nav.js +1 -1
  73. package/dist/docs-nav.js.map +1 -1
  74. package/dist/dropdown-menu.js +1 -1
  75. package/dist/dropdown-menu.js.map +1 -1
  76. package/dist/file-upload.js +3 -3
  77. package/dist/file-upload.js.map +1 -1
  78. package/dist/filter-bar.js +2 -2
  79. package/dist/footnote.d.ts +32 -0
  80. package/dist/footnote.js +29 -0
  81. package/dist/footnote.js.map +1 -0
  82. package/dist/genui.js +6 -6
  83. package/dist/geometry-DncHaYP8.d.ts +22 -0
  84. package/dist/language-switch.js +1 -1
  85. package/dist/list.js +1 -1
  86. package/dist/loader.js +2 -2
  87. package/dist/loader.js.map +1 -1
  88. package/dist/map.js +95 -83
  89. package/dist/map.js.map +1 -1
  90. package/dist/marketing-layout.js +1 -1
  91. package/dist/marketing-layout.js.map +1 -1
  92. package/dist/mascot-quote.d.ts +2 -21
  93. package/dist/mascot-quote.js +9 -338
  94. package/dist/mascot-quote.js.map +1 -1
  95. package/dist/match-dialog.js +1 -1
  96. package/dist/match-dialog.js.map +1 -1
  97. package/dist/media-grid.js +1 -1
  98. package/dist/meter.js +3 -3
  99. package/dist/meter.js.map +1 -1
  100. package/dist/motion.css +28 -41
  101. package/dist/native/map.js +94 -82
  102. package/dist/native/map.js.map +1 -1
  103. package/dist/native.d.ts +8 -1
  104. package/dist/native.js +57 -45
  105. package/dist/native.js.map +1 -1
  106. package/dist/nav-bar.js +12 -12
  107. package/dist/nav-bar.js.map +1 -1
  108. package/dist/page-hero.js +1 -1
  109. package/dist/page-index.d.ts +30 -0
  110. package/dist/page-index.js +23 -0
  111. package/dist/page-index.js.map +1 -0
  112. package/dist/page.d.ts +19 -7
  113. package/dist/page.js +1 -1
  114. package/dist/photo-grid.js +2 -2
  115. package/dist/photo-grid.js.map +1 -1
  116. package/dist/progress.js +3 -3
  117. package/dist/progress.js.map +1 -1
  118. package/dist/radio-group.js +1 -1
  119. package/dist/radio-group.js.map +1 -1
  120. package/dist/rail-nav.js +2 -2
  121. package/dist/rail-nav.js.map +1 -1
  122. package/dist/search-field.js +1 -1
  123. package/dist/service-card.js +3 -3
  124. package/dist/service-card.js.map +1 -1
  125. package/dist/settings-layout.js +1 -1
  126. package/dist/settings-layout.js.map +1 -1
  127. package/dist/site-footer.js +3 -3
  128. package/dist/site-footer.js.map +1 -1
  129. package/dist/skip-link.js +1 -1
  130. package/dist/slot-picker.js +1 -1
  131. package/dist/slot-picker.js.map +1 -1
  132. package/dist/specimen-tag.d.ts +52 -0
  133. package/dist/specimen-tag.js +33 -0
  134. package/dist/specimen-tag.js.map +1 -0
  135. package/dist/stat.js +1 -1
  136. package/dist/stat.js.map +1 -1
  137. package/dist/step-progress.js +1 -1
  138. package/dist/step-progress.js.map +1 -1
  139. package/dist/sticky-action.d.ts +1 -1
  140. package/dist/sticky-action.js +1 -1
  141. package/dist/sticky-action.js.map +1 -1
  142. package/dist/swipe-deck.js +1 -1
  143. package/dist/swipe-deck.js.map +1 -1
  144. package/dist/tabs.js +4 -4
  145. package/dist/tabs.js.map +1 -1
  146. package/dist/tag-input.js +2 -2
  147. package/dist/tag-selector.js +1 -1
  148. package/dist/toast.js +1 -1
  149. package/dist/toast.js.map +1 -1
  150. package/package.json +74 -4
  151. package/registry/account-menu.json +1 -1
  152. package/registry/achievement.json +1 -1
  153. package/registry/action-bar.json +1 -1
  154. package/registry/activity-feed.json +2 -2
  155. package/registry/alert.json +1 -1
  156. package/registry/anatomy-plate.json +168 -0
  157. package/registry/app-header.json +2 -2
  158. package/registry/app-shell.json +2 -2
  159. package/registry/argument-card.json +1 -1
  160. package/registry/audio-player.json +1 -1
  161. package/registry/auth-layout.json +1 -1
  162. package/registry/avatar.json +1 -1
  163. package/registry/badge.json +2 -2
  164. package/registry/bird-plate.json +221 -0
  165. package/registry/button.json +1 -1
  166. package/registry/captcha.json +1 -1
  167. package/registry/card-grid.json +1 -1
  168. package/registry/card.json +2 -2
  169. package/registry/catalogue-page.json +1 -1
  170. package/registry/changelog-page.json +1 -1
  171. package/registry/chat.json +3 -3
  172. package/registry/checkbox.json +2 -2
  173. package/registry/chip-link.json +1 -1
  174. package/registry/chip-row.json +2 -2
  175. package/registry/chip.json +2 -2
  176. package/registry/choice-grid.json +1 -1
  177. package/registry/code-block.json +1 -1
  178. package/registry/combobox.json +1 -1
  179. package/registry/command.json +2 -2
  180. package/registry/comparison-table.json +2 -2
  181. package/registry/component-page.json +1 -1
  182. package/registry/confirm-button.json +1 -1
  183. package/registry/contact-page.json +1 -1
  184. package/registry/continue-prompt.json +1 -1
  185. package/registry/countdown.json +2 -2
  186. package/registry/cover-hero.json +2 -2
  187. package/registry/cta-panel.json +1 -1
  188. package/registry/dashboard-layout.json +2 -2
  189. package/registry/data-table.json +1 -1
  190. package/registry/date-picker.json +4 -4
  191. package/registry/decision-list.json +1 -1
  192. package/registry/description-list.json +2 -2
  193. package/registry/detail-layout.json +2 -2
  194. package/registry/dialog.json +2 -2
  195. package/registry/docs-article-page.json +1 -1
  196. package/registry/docs-hub-page.json +1 -1
  197. package/registry/docs-layout.json +1 -1
  198. package/registry/docs-nav.json +2 -2
  199. package/registry/document-viewer.json +1 -1
  200. package/registry/dropdown-menu.json +2 -2
  201. package/registry/empty-state.json +1 -1
  202. package/registry/engine-flow.json +1 -1
  203. package/registry/error-page.json +1 -1
  204. package/registry/examples/action-sheet/native/video-actions.dark.png +0 -0
  205. package/registry/examples/action-sheet/native/video-actions.light.png +0 -0
  206. package/registry/examples/activity-feed/native/notifications.dark.png +0 -0
  207. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  208. package/registry/examples/anatomy-plate/button.d.ts +4 -0
  209. package/registry/examples/anatomy-plate/button.js +25 -0
  210. package/registry/examples/anatomy-plate/button.tsx +20 -0
  211. package/registry/examples/avatar/native/group.dark.png +0 -0
  212. package/registry/examples/avatar/native/group.light.png +0 -0
  213. package/registry/examples/avatar/native/presence.dark.png +0 -0
  214. package/registry/examples/avatar/native/presence.light.png +0 -0
  215. package/registry/examples/avatar/native/sizes.dark.png +0 -0
  216. package/registry/examples/avatar/native/sizes.light.png +0 -0
  217. package/registry/examples/badge/native/dot.dark.png +0 -0
  218. package/registry/examples/badge/native/dot.light.png +0 -0
  219. package/registry/examples/badge/native/scrim.dark.png +0 -0
  220. package/registry/examples/badge/native/scrim.light.png +0 -0
  221. package/registry/examples/badge/native/tones.dark.png +0 -0
  222. package/registry/examples/badge/native/tones.light.png +0 -0
  223. package/registry/examples/bird-plate/flock.d.ts +4 -0
  224. package/registry/examples/bird-plate/flock.js +24 -0
  225. package/registry/examples/bird-plate/flock.tsx +18 -0
  226. package/registry/examples/bird-plate/single.d.ts +4 -0
  227. package/registry/examples/bird-plate/single.js +19 -0
  228. package/registry/examples/bird-plate/single.tsx +13 -0
  229. package/registry/examples/button/native/danger.dark.png +0 -0
  230. package/registry/examples/button/native/danger.light.png +0 -0
  231. package/registry/examples/button/native/disabled.dark.png +0 -0
  232. package/registry/examples/button/native/disabled.light.png +0 -0
  233. package/registry/examples/button/native/ghost.dark.png +0 -0
  234. package/registry/examples/button/native/ghost.light.png +0 -0
  235. package/registry/examples/button/native/gradient.dark.png +0 -0
  236. package/registry/examples/button/native/gradient.light.png +0 -0
  237. package/registry/examples/button/native/icon-only.dark.png +0 -0
  238. package/registry/examples/button/native/icon-only.light.png +0 -0
  239. package/registry/examples/button/native/icon.dark.png +0 -0
  240. package/registry/examples/button/native/icon.light.png +0 -0
  241. package/registry/examples/button/native/loading.dark.png +0 -0
  242. package/registry/examples/button/native/loading.light.png +0 -0
  243. package/registry/examples/button/native/outline.dark.png +0 -0
  244. package/registry/examples/button/native/outline.light.png +0 -0
  245. package/registry/examples/button/native/primary.dark.png +0 -0
  246. package/registry/examples/button/native/primary.light.png +0 -0
  247. package/registry/examples/button/native/secondary.dark.png +0 -0
  248. package/registry/examples/button/native/secondary.light.png +0 -0
  249. package/registry/examples/button/native/sizes.dark.png +0 -0
  250. package/registry/examples/button/native/sizes.light.png +0 -0
  251. package/registry/examples/card/native/body.dark.png +0 -0
  252. package/registry/examples/card/native/body.light.png +0 -0
  253. package/registry/examples/card/native/default.dark.png +0 -0
  254. package/registry/examples/card/native/default.light.png +0 -0
  255. package/registry/examples/card/native/elevated.dark.png +0 -0
  256. package/registry/examples/card/native/elevated.light.png +0 -0
  257. package/registry/examples/card/native/pressable.dark.png +0 -0
  258. package/registry/examples/card/native/pressable.light.png +0 -0
  259. package/registry/examples/chat/native/assistant.dark.png +0 -0
  260. package/registry/examples/chat/native/assistant.light.png +0 -0
  261. package/registry/examples/chat/native/conversation.dark.png +0 -0
  262. package/registry/examples/chat/native/conversation.light.png +0 -0
  263. package/registry/examples/chat/native/inbox.dark.png +0 -0
  264. package/registry/examples/chat/native/inbox.light.png +0 -0
  265. package/registry/examples/checkbox/native/terms.dark.png +0 -0
  266. package/registry/examples/checkbox/native/terms.light.png +0 -0
  267. package/registry/examples/chip/native/multiple.dark.png +0 -0
  268. package/registry/examples/chip/native/multiple.light.png +0 -0
  269. package/registry/examples/chip/native/removable.dark.png +0 -0
  270. package/registry/examples/chip/native/removable.light.png +0 -0
  271. package/registry/examples/chip/native/single.dark.png +0 -0
  272. package/registry/examples/chip/native/single.light.png +0 -0
  273. package/registry/examples/chip/native/toggle.dark.png +0 -0
  274. package/registry/examples/chip/native/toggle.light.png +0 -0
  275. package/registry/examples/combobox/native/multiple.dark.png +0 -0
  276. package/registry/examples/combobox/native/multiple.light.png +0 -0
  277. package/registry/examples/combobox/native/search.dark.png +0 -0
  278. package/registry/examples/combobox/native/search.light.png +0 -0
  279. package/registry/examples/countdown/native/days.dark.png +0 -0
  280. package/registry/examples/countdown/native/days.light.png +0 -0
  281. package/registry/examples/countdown/native/hours.dark.png +0 -0
  282. package/registry/examples/countdown/native/hours.light.png +0 -0
  283. package/registry/examples/countdown/native/sizes.dark.png +0 -0
  284. package/registry/examples/countdown/native/sizes.light.png +0 -0
  285. package/registry/examples/countdown/native/urgent.dark.png +0 -0
  286. package/registry/examples/countdown/native/urgent.light.png +0 -0
  287. package/registry/examples/countdown/native/with-label.dark.png +0 -0
  288. package/registry/examples/countdown/native/with-label.light.png +0 -0
  289. package/registry/examples/date-picker/native/birth-date-wheel.dark.png +0 -0
  290. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  291. package/registry/examples/date-picker/native/birth-date.dark.png +0 -0
  292. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  293. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  294. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  295. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  296. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  297. package/registry/examples/date-picker/native/month-year.dark.png +0 -0
  298. package/registry/examples/date-picker/native/month-year.light.png +0 -0
  299. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  300. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  301. package/registry/examples/date-picker/native/time-wheel.dark.png +0 -0
  302. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  303. package/registry/examples/description-list/native/job-details.dark.png +0 -0
  304. package/registry/examples/description-list/native/job-details.light.png +0 -0
  305. package/registry/examples/dialog/native/sheet.dark.png +0 -0
  306. package/registry/examples/dialog/native/sheet.light.png +0 -0
  307. package/registry/examples/empty-state/native/default.dark.png +0 -0
  308. package/registry/examples/empty-state/native/default.light.png +0 -0
  309. package/registry/examples/fab/native/extended.dark.png +0 -0
  310. package/registry/examples/fab/native/extended.light.png +0 -0
  311. package/registry/examples/field/native/default.dark.png +0 -0
  312. package/registry/examples/field/native/default.light.png +0 -0
  313. package/registry/examples/field/native/select.dark.png +0 -0
  314. package/registry/examples/field/native/select.light.png +0 -0
  315. package/registry/examples/footnote/notes.d.ts +4 -0
  316. package/registry/examples/footnote/notes.js +24 -0
  317. package/registry/examples/footnote/notes.tsx +19 -0
  318. package/registry/examples/force-update-screen/native/default.dark.png +0 -0
  319. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  320. package/registry/examples/form/native/amount.dark.png +0 -0
  321. package/registry/examples/form/native/amount.light.png +0 -0
  322. package/registry/examples/form/native/audience.dark.png +0 -0
  323. package/registry/examples/form/native/audience.light.png +0 -0
  324. package/registry/examples/form/native/profile.dark.png +0 -0
  325. package/registry/examples/form/native/profile.light.png +0 -0
  326. package/registry/examples/form/native/settings.dark.png +0 -0
  327. package/registry/examples/form/native/settings.light.png +0 -0
  328. package/registry/examples/form/native/sign-up.dark.png +0 -0
  329. package/registry/examples/form/native/sign-up.light.png +0 -0
  330. package/registry/examples/form/native/upload.dark.png +0 -0
  331. package/registry/examples/form/native/upload.light.png +0 -0
  332. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  333. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  334. package/registry/examples/header/native/large-title.dark.png +0 -0
  335. package/registry/examples/header/native/large-title.light.png +0 -0
  336. package/registry/examples/image-viewer/native/gallery.dark.png +0 -0
  337. package/registry/examples/image-viewer/native/gallery.light.png +0 -0
  338. package/registry/examples/list/native/default.dark.png +0 -0
  339. package/registry/examples/list/native/default.light.png +0 -0
  340. package/registry/examples/list/native/infinite.dark.png +0 -0
  341. package/registry/examples/list/native/infinite.light.png +0 -0
  342. package/registry/examples/list/native/states.dark.png +0 -0
  343. package/registry/examples/list/native/states.light.png +0 -0
  344. package/registry/examples/loader/native/block.dark.png +0 -0
  345. package/registry/examples/loader/native/block.light.png +0 -0
  346. package/registry/examples/loader/native/branded.dark.png +0 -0
  347. package/registry/examples/loader/native/branded.light.png +0 -0
  348. package/registry/examples/loader/native/job-wait.dark.png +0 -0
  349. package/registry/examples/loader/native/job-wait.light.png +0 -0
  350. package/registry/examples/maintenance-screen/native/default.dark.png +0 -0
  351. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  352. package/registry/examples/map/native/location-picker.dark.png +0 -0
  353. package/registry/examples/map/native/location-picker.light.png +0 -0
  354. package/registry/examples/map/native/places.dark.png +0 -0
  355. package/registry/examples/map/native/places.light.png +0 -0
  356. package/registry/examples/markdown/native/ai-stream.dark.png +0 -0
  357. package/registry/examples/markdown/native/ai-stream.light.png +0 -0
  358. package/registry/examples/markdown/native/basic.dark.png +0 -0
  359. package/registry/examples/markdown/native/basic.light.png +0 -0
  360. package/registry/examples/mascot-state/native/default.dark.png +0 -0
  361. package/registry/examples/mascot-state/native/default.light.png +0 -0
  362. package/registry/examples/mascots/native/crane.dark.png +0 -0
  363. package/registry/examples/mascots/native/crane.light.png +0 -0
  364. package/registry/examples/mascots/native/default.dark.png +0 -0
  365. package/registry/examples/mascots/native/default.light.png +0 -0
  366. package/registry/examples/mascots/native/lovebird.dark.png +0 -0
  367. package/registry/examples/mascots/native/lovebird.light.png +0 -0
  368. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  369. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  370. package/registry/examples/match-dialog/native/its-a-match.dark.png +0 -0
  371. package/registry/examples/match-dialog/native/its-a-match.light.png +0 -0
  372. package/registry/examples/media-capture/native/photo.dark.png +0 -0
  373. package/registry/examples/media-capture/native/photo.light.png +0 -0
  374. package/registry/examples/media-picker/native/story.dark.png +0 -0
  375. package/registry/examples/media-picker/native/story.light.png +0 -0
  376. package/registry/examples/meta-row/native/video.dark.png +0 -0
  377. package/registry/examples/meta-row/native/video.light.png +0 -0
  378. package/registry/examples/meter/native/credits.dark.png +0 -0
  379. package/registry/examples/meter/native/credits.light.png +0 -0
  380. package/registry/examples/meter/native/split-ring.dark.png +0 -0
  381. package/registry/examples/meter/native/split-ring.light.png +0 -0
  382. package/registry/examples/number-ticker/native/balance.dark.png +0 -0
  383. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  384. package/registry/examples/onboarding/native/first-launch.dark.png +0 -0
  385. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  386. package/registry/examples/otp-input/native/invalid.dark.png +0 -0
  387. package/registry/examples/otp-input/native/invalid.light.png +0 -0
  388. package/registry/examples/otp-input/native/verify.dark.png +0 -0
  389. package/registry/examples/otp-input/native/verify.light.png +0 -0
  390. package/registry/examples/page-index/docs.d.ts +4 -0
  391. package/registry/examples/page-index/docs.js +33 -0
  392. package/registry/examples/page-index/docs.tsx +27 -0
  393. package/registry/examples/pagination/native/cursor.dark.png +0 -0
  394. package/registry/examples/pagination/native/cursor.light.png +0 -0
  395. package/registry/examples/pagination/native/pages.dark.png +0 -0
  396. package/registry/examples/pagination/native/pages.light.png +0 -0
  397. package/registry/examples/permission-prompt/native/blocked.dark.png +0 -0
  398. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  399. package/registry/examples/permission-prompt/native/camera.dark.png +0 -0
  400. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  401. package/registry/examples/photo-grid/native/profile-photos.dark.png +0 -0
  402. package/registry/examples/photo-grid/native/profile-photos.light.png +0 -0
  403. package/registry/examples/profile-card/native/default.dark.png +0 -0
  404. package/registry/examples/profile-card/native/default.light.png +0 -0
  405. package/registry/examples/progress/native/bar.dark.png +0 -0
  406. package/registry/examples/progress/native/bar.light.png +0 -0
  407. package/registry/examples/progress/native/indeterminate.dark.png +0 -0
  408. package/registry/examples/progress/native/indeterminate.light.png +0 -0
  409. package/registry/examples/progress/native/ring.dark.png +0 -0
  410. package/registry/examples/progress/native/ring.light.png +0 -0
  411. package/registry/examples/pull-to-refresh/native/branded.dark.png +0 -0
  412. package/registry/examples/pull-to-refresh/native/branded.light.png +0 -0
  413. package/registry/examples/pull-to-refresh/native/feed.dark.png +0 -0
  414. package/registry/examples/pull-to-refresh/native/feed.light.png +0 -0
  415. package/registry/examples/radio-group/native/buttons.dark.png +0 -0
  416. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  417. package/registry/examples/radio-group/native/cards.dark.png +0 -0
  418. package/registry/examples/radio-group/native/cards.light.png +0 -0
  419. package/registry/examples/radio-group/native/list.dark.png +0 -0
  420. package/registry/examples/radio-group/native/list.light.png +0 -0
  421. package/registry/examples/radio-group/native/segmented.dark.png +0 -0
  422. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  423. package/registry/examples/screen/native/app-shell.dark.png +0 -0
  424. package/registry/examples/screen/native/app-shell.light.png +0 -0
  425. package/registry/examples/screen/native/auth.dark.png +0 -0
  426. package/registry/examples/screen/native/auth.light.png +0 -0
  427. package/registry/examples/screen/native/chat.dark.png +0 -0
  428. package/registry/examples/screen/native/chat.light.png +0 -0
  429. package/registry/examples/screen/native/feed.dark.png +0 -0
  430. package/registry/examples/screen/native/feed.light.png +0 -0
  431. package/registry/examples/screen/native/map.dark.png +0 -0
  432. package/registry/examples/screen/native/map.light.png +0 -0
  433. package/registry/examples/screen/native/notifications.dark.png +0 -0
  434. package/registry/examples/screen/native/notifications.light.png +0 -0
  435. package/registry/examples/screen/native/profile.dark.png +0 -0
  436. package/registry/examples/screen/native/profile.light.png +0 -0
  437. package/registry/examples/screen/native/settings.dark.png +0 -0
  438. package/registry/examples/screen/native/settings.light.png +0 -0
  439. package/registry/examples/search-field/native/cancel.dark.png +0 -0
  440. package/registry/examples/search-field/native/cancel.light.png +0 -0
  441. package/registry/examples/search-field/native/default.dark.png +0 -0
  442. package/registry/examples/search-field/native/default.light.png +0 -0
  443. package/registry/examples/segmented/native/default.dark.png +0 -0
  444. package/registry/examples/segmented/native/default.light.png +0 -0
  445. package/registry/examples/segmented/native/small.dark.png +0 -0
  446. package/registry/examples/segmented/native/small.light.png +0 -0
  447. package/registry/examples/settings-layout/native/account.dark.png +0 -0
  448. package/registry/examples/settings-layout/native/account.light.png +0 -0
  449. package/registry/examples/showcase/native/slides.dark.png +0 -0
  450. package/registry/examples/showcase/native/slides.light.png +0 -0
  451. package/registry/examples/skeleton/native/shapes.dark.png +0 -0
  452. package/registry/examples/skeleton/native/shapes.light.png +0 -0
  453. package/registry/examples/slider/native/default.dark.png +0 -0
  454. package/registry/examples/slider/native/default.light.png +0 -0
  455. package/registry/examples/slider/native/range.dark.png +0 -0
  456. package/registry/examples/slider/native/range.light.png +0 -0
  457. package/registry/examples/slider/native/stepped.dark.png +0 -0
  458. package/registry/examples/slider/native/stepped.light.png +0 -0
  459. package/registry/examples/slider/native/vertical.dark.png +0 -0
  460. package/registry/examples/slider/native/vertical.light.png +0 -0
  461. package/registry/examples/specimen-tag/product.d.ts +4 -0
  462. package/registry/examples/specimen-tag/product.js +28 -0
  463. package/registry/examples/specimen-tag/product.tsx +25 -0
  464. package/registry/examples/specimen-tag/stamps.d.ts +4 -0
  465. package/registry/examples/specimen-tag/stamps.js +16 -0
  466. package/registry/examples/specimen-tag/stamps.tsx +13 -0
  467. package/registry/examples/specimen-tag/wire.d.ts +4 -0
  468. package/registry/examples/specimen-tag/wire.js +16 -0
  469. package/registry/examples/specimen-tag/wire.tsx +20 -0
  470. package/registry/examples/spinner/native/sizes.dark.png +0 -0
  471. package/registry/examples/spinner/native/sizes.light.png +0 -0
  472. package/registry/examples/splash-handoff/native/default.dark.png +0 -0
  473. package/registry/examples/splash-handoff/native/default.light.png +0 -0
  474. package/registry/examples/step-progress/native/sign-up.dark.png +0 -0
  475. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  476. package/registry/examples/stepper/native/run.dark.png +0 -0
  477. package/registry/examples/stepper/native/run.light.png +0 -0
  478. package/registry/examples/swipe-deck/native/discover.dark.png +0 -0
  479. package/registry/examples/swipe-deck/native/discover.light.png +0 -0
  480. package/registry/examples/swipeable-row/native/conversation.dark.png +0 -0
  481. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  482. package/registry/examples/switch/native/default.dark.png +0 -0
  483. package/registry/examples/switch/native/default.light.png +0 -0
  484. package/registry/examples/switch/native/settings.dark.png +0 -0
  485. package/registry/examples/switch/native/settings.light.png +0 -0
  486. package/registry/examples/tab-bar/native/main-sections.dark.png +0 -0
  487. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  488. package/registry/examples/tabs/native/sections.dark.png +0 -0
  489. package/registry/examples/tabs/native/sections.light.png +0 -0
  490. package/registry/examples/tabs/native/segmented.dark.png +0 -0
  491. package/registry/examples/tabs/native/segmented.light.png +0 -0
  492. package/registry/examples/tag-selector/native/interests.dark.png +0 -0
  493. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  494. package/registry/examples/toast/native/notification.dark.png +0 -0
  495. package/registry/examples/toast/native/notification.light.png +0 -0
  496. package/registry/examples/toast/native/snackbar.dark.png +0 -0
  497. package/registry/examples/toast/native/snackbar.light.png +0 -0
  498. package/registry/examples/toast/native/tones.dark.png +0 -0
  499. package/registry/examples/toast/native/tones.light.png +0 -0
  500. package/registry/examples/txt/native/tones.dark.png +0 -0
  501. package/registry/examples/txt/native/tones.light.png +0 -0
  502. package/registry/examples/txt/native/variants.dark.png +0 -0
  503. package/registry/examples/txt/native/variants.light.png +0 -0
  504. package/registry/examples/update-prompt/native/default.dark.png +0 -0
  505. package/registry/examples/update-prompt/native/default.light.png +0 -0
  506. package/registry/examples/verified-badge/native/verified.dark.png +0 -0
  507. package/registry/examples/verified-badge/native/verified.light.png +0 -0
  508. package/registry/examples/vertical-video/native/rail.dark.png +0 -0
  509. package/registry/examples/vertical-video/native/rail.light.png +0 -0
  510. package/registry/examples/video-player/native/default.dark.png +0 -0
  511. package/registry/examples/video-player/native/default.light.png +0 -0
  512. package/registry/examples/waveform/native/card.dark.png +0 -0
  513. package/registry/examples/waveform/native/card.light.png +0 -0
  514. package/registry/field.json +1 -1
  515. package/registry/file-upload.json +1 -1
  516. package/registry/filter-bar.json +1 -1
  517. package/registry/footnote.json +220 -0
  518. package/registry/force-update-screen.json +1 -1
  519. package/registry/form.json +3 -3
  520. package/registry/gallery-page.json +1 -1
  521. package/registry/genui.json +1 -1
  522. package/registry/glow-card.json +1 -1
  523. package/registry/goal-gauge.json +1 -1
  524. package/registry/how-it-works-page.json +1 -1
  525. package/registry/image-cropper.json +1 -1
  526. package/registry/index.json +160 -5
  527. package/registry/iso.json +1 -1
  528. package/registry/kanban.json +1 -1
  529. package/registry/kbd.json +1 -1
  530. package/registry/landing-page.json +1 -1
  531. package/registry/landscape.json +1 -1
  532. package/registry/language-switch.json +2 -2
  533. package/registry/legal-page.json +1 -1
  534. package/registry/link-card.json +1 -1
  535. package/registry/list.json +1 -1
  536. package/registry/loader.json +2 -2
  537. package/registry/longform-page.json +1 -1
  538. package/registry/maintenance-screen.json +1 -1
  539. package/registry/map.json +3 -3
  540. package/registry/markdown.json +1 -1
  541. package/registry/marketing-layout.json +1 -1
  542. package/registry/marquee.json +1 -1
  543. package/registry/mascot-quote.json +1 -1
  544. package/registry/mascot-state.json +1 -1
  545. package/registry/mascots.json +1 -1
  546. package/registry/match-dialog.json +1 -1
  547. package/registry/media-capture.json +1 -1
  548. package/registry/media-gallery.json +1 -1
  549. package/registry/media-grid.json +1 -1
  550. package/registry/meta-row.json +1 -1
  551. package/registry/meter.json +2 -2
  552. package/registry/nav-bar.json +3 -3
  553. package/registry/number-ticker.json +1 -1
  554. package/registry/opening-hours.json +1 -1
  555. package/registry/page-header.json +1 -1
  556. package/registry/page-hero.json +1 -1
  557. package/registry/page-index.json +168 -0
  558. package/registry/page.json +89 -5
  559. package/registry/pagination.json +1 -1
  560. package/registry/photo-grid.json +2 -2
  561. package/registry/pointer-light.json +1 -1
  562. package/registry/popover.json +1 -1
  563. package/registry/pricing-page.json +1 -1
  564. package/registry/product-page.json +1 -1
  565. package/registry/profile-card.json +1 -1
  566. package/registry/progress.json +2 -2
  567. package/registry/promise-card.json +1 -1
  568. package/registry/radio-group.json +2 -2
  569. package/registry/rail-nav.json +3 -3
  570. package/registry/recipes.json +1 -1
  571. package/registry/scroll-stage.json +1 -1
  572. package/registry/search-field.json +2 -2
  573. package/registry/section-backdrop.json +1 -1
  574. package/registry/separator.json +1 -1
  575. package/registry/service-card.json +2 -2
  576. package/registry/settings-layout.json +2 -2
  577. package/registry/showcase.json +1 -1
  578. package/registry/site-footer.json +3 -3
  579. package/registry/sites.json +1 -1
  580. package/registry/skeleton.json +1 -1
  581. package/registry/skip-link.json +2 -2
  582. package/registry/slider.json +1 -1
  583. package/registry/slot-picker.json +2 -2
  584. package/registry/slot.json +1 -1
  585. package/registry/specimen-tag.json +269 -0
  586. package/registry/spinner.json +1 -1
  587. package/registry/split-view.json +1 -1
  588. package/registry/stage-banner.json +1 -1
  589. package/registry/stat.json +2 -2
  590. package/registry/status-page.json +1 -1
  591. package/registry/step-progress.json +2 -2
  592. package/registry/step-showcase.json +1 -1
  593. package/registry/stepper.json +1 -1
  594. package/registry/sticky-action.json +2 -2
  595. package/registry/swipe-deck.json +2 -2
  596. package/registry/switch.json +1 -1
  597. package/registry/tabs.json +2 -2
  598. package/registry/tag-input.json +1 -1
  599. package/registry/tag-selector.json +1 -1
  600. package/registry/terminal-replay.json +1 -1
  601. package/registry/theme.json +1 -1
  602. package/registry/toast.json +2 -2
  603. package/registry/toc.json +1 -1
  604. package/registry/tooltip.json +1 -1
  605. package/registry/tree-view.json +1 -1
  606. package/registry/update-prompt.json +1 -1
  607. package/registry/verified-badge.json +1 -1
  608. package/registry/vertical-video.json +1 -1
  609. package/registry/video-player.json +1 -1
  610. package/registry/video-trimmer.json +1 -1
  611. package/registry/virtual.json +1 -1
  612. package/registry/waveform.json +1 -1
  613. package/dist/chunk-2PNLHZLT.js.map +0 -1
  614. package/dist/chunk-3S4GHSPZ.js.map +0 -1
  615. package/dist/chunk-LZNZLCOE.js.map +0 -1
  616. package/dist/chunk-NJFCSVPT.js.map +0 -1
  617. package/dist/chunk-QDXV544C.js.map +0 -1
  618. package/dist/chunk-REPTKUJ6.js.map +0 -1
  619. /package/dist/{chunk-CKSHLSDH.js.map → chunk-AAP3U66V.js.map} +0 -0
  620. /package/dist/{chunk-KIBICUZK.js.map → chunk-S5LP7KKW.js.map} +0 -0
package/dist/blocks.css CHANGED
@@ -23,6 +23,50 @@
23
23
  /* A frame inside a frame (a Section in a TocLayout, a Page in a card) adds no second pair of gutters. */
24
24
  .kz-frame .kz-frame { --kz-gutter: 0px; }
25
25
 
26
+ /* ─── Paper (Cahier, ADR-004): the notebook under a page or a section ───
27
+ `data-paper="ruled"` — the French Seyès ruling: a strong line every 32 px (--kz-paper-module), three fine lines between
28
+ (--kz-paper-line) and the verticals; `data-paper="lines"` — the lines only, for a page to read. `data-margin` — the red
29
+ margin line on the left, where `.kz-heading-number` (§ 2) and `.kz-margin-note` hang on a wide screen. The ruling is
30
+ drawn by the element (backgrounds), never by an image: dark (slate) and light (paper) alike. */
31
+ [data-paper="ruled"] {
32
+ background-image:
33
+ linear-gradient(to bottom, var(--kz-paper-rule-major) 1px, transparent 1px),
34
+ linear-gradient(to bottom, var(--kz-paper-rule-minor) 1px, transparent 1px),
35
+ linear-gradient(to right, var(--kz-paper-rule-minor) 1px, transparent 1px);
36
+ background-size: 100% var(--kz-paper-module, 32px), 100% var(--kz-paper-line, 8px), var(--kz-paper-module, 32px) 100%;
37
+ }
38
+ [data-paper="lines"] {
39
+ background-image:
40
+ linear-gradient(to bottom, var(--kz-paper-rule-major) 1px, transparent 1px),
41
+ linear-gradient(to bottom, var(--kz-paper-rule-minor) 1px, transparent 1px);
42
+ background-size: 100% var(--kz-paper-module, 32px), 100% var(--kz-paper-line, 8px);
43
+ }
44
+ [data-margin] { position: relative; --kz-margin-x: max(8px, calc(var(--kz-gutter, 16px) - 12px)); }
45
+ [data-margin]::before {
46
+ content: "";
47
+ position: absolute;
48
+ inset-block: 0;
49
+ left: var(--kz-margin-x);
50
+ width: 1.5px;
51
+ background: var(--kz-paper-rule-margin);
52
+ opacity: 0.8;
53
+ pointer-events: none;
54
+ }
55
+ .kz-frame[data-margin] { --kz-margin-x: max(8px, calc(var(--kz-gutter) - 12px)); }
56
+ .kz-heading-number,
57
+ .kz-margin-note {
58
+ font-family: var(--kz-font-mono);
59
+ font-size: 13px;
60
+ line-height: 16px;
61
+ color: var(--kz-paper-rule-margin);
62
+ }
63
+ .kz-margin-note { color: var(--kz-text-secondary); }
64
+ @media (min-width: 1180px) {
65
+ .kz-heading { position: relative; }
66
+ .kz-heading-number { position: absolute; right: calc(100% + 28px); top: 0.55em; white-space: nowrap; }
67
+ .kz-margin-note { position: absolute; right: calc(100% + 28px); width: 12ch; text-align: right; }
68
+ }
69
+
26
70
  /* Section: the content in the frame, a space above and below; `divider` draws the hairline between two sections (the
27
71
  transition), inside the gutters. */
28
72
  .kz-section { --kz-section-space: clamp(48px, 7vw, 88px); position: relative; }
@@ -34,17 +78,20 @@
34
78
  }
35
79
  .kz-section :is(h2, h3)[id] { scroll-margin-top: var(--kz-anchor-offset, 96px); }
36
80
 
81
+ /* Cahier (ADR-004, #417): the eyebrow is a note in the margin's voice — the typewriter face, lower case, untracked,
82
+ inked in the margin red. No more uppercase tracked overline above every heading. */
37
83
  .kz-eyebrow {
38
84
  margin: 0;
39
85
  display: inline-flex;
40
- align-items: center;
41
- gap: 10px;
86
+ align-items: baseline;
87
+ gap: 8px;
42
88
  font-family: var(--kz-font-mono);
43
- font-size: 11px;
44
- font-weight: 600;
45
- letter-spacing: 0.18em;
46
- text-transform: uppercase;
47
- color: var(--kz-hue-text, var(--kz-accent-text));
89
+ font-size: 13px;
90
+ font-weight: 400;
91
+ line-height: 16px;
92
+ letter-spacing: 0;
93
+ text-transform: none;
94
+ color: var(--kz-paper-rule-margin, var(--kz-hue-text, var(--kz-accent-text)));
48
95
  }
49
96
  .kz-label {
50
97
  margin: 0;
@@ -52,10 +99,10 @@
52
99
  align-items: center;
53
100
  gap: 6px;
54
101
  font-family: var(--kz-font-mono);
55
- font-size: 10.5px;
56
- font-weight: 600;
57
- letter-spacing: 0.14em;
58
- text-transform: uppercase;
102
+ font-size: 12.5px;
103
+ font-weight: 400;
104
+ letter-spacing: 0;
105
+ text-transform: none;
59
106
  color: var(--kz-text-secondary);
60
107
  }
61
108
  .kz-heading { margin-bottom: clamp(24px, 3vw, 36px); display: grid; gap: 12px; }
@@ -68,8 +115,8 @@
68
115
  max-width: 24ch;
69
116
  font-family: var(--kz-font-display);
70
117
  font-size: clamp(1.6rem, 3.6vw, 2.3rem);
71
- font-weight: 800;
72
- letter-spacing: -0.028em;
118
+ font-weight: 400;
119
+ letter-spacing: -0.01em;
73
120
  line-height: 1.15;
74
121
  color: var(--kz-text-primary);
75
122
  text-wrap: balance;
@@ -156,8 +203,8 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
156
203
  margin: 10px 0 0;
157
204
  font-family: var(--kz-font-display);
158
205
  font-size: clamp(2rem, 5.4vw, 3.1rem);
159
- font-weight: 800;
160
- letter-spacing: -0.035em;
206
+ font-weight: 400;
207
+ letter-spacing: -0.01em;
161
208
  line-height: 1.08;
162
209
  color: var(--kz-text-primary);
163
210
  text-wrap: balance;
@@ -182,7 +229,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
182
229
  .kz-foundation-base { position: relative; display: grid; min-width: 0; }
183
230
  .kz-foundation-base::after { content: ""; position: absolute; left: 50%; top: 100%; width: 1px; height: 28px; background: var(--kz-rail); }
184
231
  .kz-foundation-group { position: relative; margin-top: 28px; padding: 22px 14px 14px; border: 1px solid var(--kz-rail); border-radius: 24px; }
185
- .kz-foundation-label { position: absolute; top: -9px; left: 22px; padding: 0 8px; font: 500 11px/18px var(--kz-font-mono, ui-monospace, monospace); letter-spacing: 0.06em; text-transform: uppercase; color: var(--kz-hue-text, var(--kz-accent-text)); background: var(--kz-surface-0); }
232
+ .kz-foundation-label { position: absolute; top: -9px; left: 22px; padding: 0 8px; font: 500 11px/18px var(--kz-font-mono, ui-monospace, monospace); letter-spacing: 0; text-transform: none; color: var(--kz-hue-text, var(--kz-accent-text)); background: var(--kz-surface-0); }
186
233
  .kz-foundation[data-position="end"] .kz-foundation-base { order: 2; }
187
234
  .kz-foundation[data-position="end"] .kz-foundation-group { order: 1; margin-top: 0; margin-bottom: 28px; }
188
235
  .kz-foundation[data-position="end"] .kz-foundation-base::after { top: auto; bottom: 100%; }
@@ -256,8 +303,8 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
256
303
  keeps its status and its link on one line. `data-footer="top"` keeps them under the text. */
257
304
  .kz-link-card-foot { display: grid; gap: 5px; margin-top: auto; }
258
305
  .kz-link-card[data-footer="top"] .kz-link-card-foot { margin-top: 0; }
259
- .kz-link-card-meta { margin: 0; font-family: var(--kz-font-mono); font-size: 11px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kz-hue-text, var(--kz-accent-text)); }
260
- .kz-link-card-title { margin: 0; font-family: var(--kz-font-display); font-size: 16.5px; font-weight: 750; letter-spacing: -0.012em; line-height: 1.3; color: var(--kz-text-primary); }
306
+ .kz-link-card-meta { margin: 0; font-family: var(--kz-font-mono); font-size: 11px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--kz-hue-text, var(--kz-accent-text)); }
307
+ .kz-link-card-title { margin: 0; font-family: var(--kz-font-display); font-size: 16.5px; font-weight: 750; letter-spacing: -0.01em; line-height: 1.3; color: var(--kz-text-primary); }
261
308
  .kz-link-card-text { margin: 0; font-size: 14px; line-height: 1.55; color: var(--kz-text-secondary); }
262
309
  .kz-link-card-extra { margin-top: 6px; }
263
310
  .kz-link-card-cta {
@@ -280,7 +327,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
280
327
  .kz-arg .kz-block-icon { width: 40px; height: 40px; }
281
328
  .kz-arg-head { display: flex; align-items: center; gap: 12px; min-width: 0; }
282
329
  .kz-arg-id { min-width: 0; }
283
- .kz-arg-title { margin: 0; font-family: var(--kz-font-display); font-size: 17px; font-weight: 800; letter-spacing: -0.015em; line-height: 1.2; color: var(--kz-text-primary); }
330
+ .kz-arg-title { margin: 0; font-family: var(--kz-font-display); font-size: 17px; font-weight: 400; letter-spacing: -0.01em; line-height: 1.2; color: var(--kz-text-primary); }
284
331
  .kz-arg-meta { margin: 3px 0 0; font-family: var(--kz-font-mono); font-size: 12px; color: var(--kz-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
285
332
  .kz-arg-mark { margin-left: auto; align-self: flex-start; margin-top: -6px; margin-right: -4px; flex-shrink: 0; --kz-accent: var(--kz-hue, var(--kz-accent)); }
286
333
  .kz-arg-line { margin: 0; font-size: 15px; font-weight: 500; line-height: 1.55; color: var(--kz-text-primary); text-wrap: pretty; }
@@ -352,7 +399,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
352
399
  top: 6px;
353
400
  font-family: var(--kz-font-display), Georgia, serif;
354
401
  font-size: 44px;
355
- font-weight: 800;
402
+ font-weight: 400;
356
403
  line-height: 1;
357
404
  color: var(--kz-hue, var(--kz-accent));
358
405
  }
@@ -377,15 +424,14 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
377
424
  font-family: var(--kz-font-mono);
378
425
  font-size: 10.5px;
379
426
  font-weight: 700;
380
- letter-spacing: 0.14em;
381
- text-transform: uppercase;
427
+ letter-spacing: 0; text-transform: none;
382
428
  color: var(--kz-hue-text, var(--kz-accent-text));
383
429
  }
384
430
  .kz-quote-bird { flex-shrink: 0; --kz-accent: var(--kz-hue, var(--kz-accent)); }
385
431
  .kz-quote[data-variant="callout"] blockquote { padding: 24px 26px 24px 68px; border-radius: 22px 22px 22px 8px; }
386
432
  .kz-quote[data-variant="callout"] blockquote::before { left: 18px; top: 12px; font-size: 72px; }
387
433
  .kz-quote[data-variant="callout"] blockquote::after { left: 36px; bottom: -8px; width: 14px; height: 14px; }
388
- .kz-quote[data-variant="callout"] blockquote p { font-family: var(--kz-font-display); font-size: clamp(16px, 2vw, 19px); font-weight: 600; line-height: 1.55; letter-spacing: -0.005em; }
434
+ .kz-quote[data-variant="callout"] blockquote p { font-family: var(--kz-font-display); font-size: clamp(16px, 2vw, 19px); font-weight: 400; line-height: 1.55; letter-spacing: -0.01em; }
389
435
  .kz-quote[data-variant="callout"] figcaption { gap: 12px; padding-left: 14px; font-size: 11px; }
390
436
  @media (max-width: 480px) {
391
437
  .kz-quote[data-variant="callout"] blockquote { padding: 50px 20px 20px; }
@@ -400,7 +446,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
400
446
  /* ─── DecisionList: one card per decision — what was chosen, large; refused · because · what it costs, side by side ─── */
401
447
  .kz-decisions { margin: 0; padding: 0; list-style: none; display: grid; gap: 14px; }
402
448
  .kz-decision { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 18px; padding: 20px 22px; border-radius: 18px; background: var(--kz-surface-1); border: 1px solid var(--kz-border-default); }
403
- .kz-decision-n { font-family: var(--kz-font-display); font-size: 28px; font-weight: 800; line-height: 1; letter-spacing: -0.03em; font-variant-numeric: tabular-nums; color: var(--kz-hue-text, var(--kz-accent-text)); }
449
+ .kz-decision-n { font-family: var(--kz-font-display); font-size: 28px; font-weight: 400; line-height: 1; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; color: var(--kz-hue-text, var(--kz-accent-text)); }
404
450
  .kz-decision-body { display: grid; gap: 14px; min-width: 0; }
405
451
  .kz-decision-part p:not(.kz-label) { margin: 6px 0 0; font-size: 14px; line-height: 1.6; color: var(--kz-text-secondary); }
406
452
  .kz-decision-part[data-part="chose"] .kz-label { color: var(--kz-success-text); }
@@ -432,7 +478,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
432
478
  border-bottom: 1px solid var(--kz-border-subtle);
433
479
  }
434
480
  .kz-code-file { display: inline-flex; align-items: center; gap: 10px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
435
- .kz-code-lang { padding: 2px 7px; border-radius: 6px; font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--kz-text-primary); background: var(--kz-surface-3); }
481
+ .kz-code-lang { padding: 2px 7px; border-radius: 6px; font-size: 10px; font-weight: 700; letter-spacing: 0; text-transform: none; color: var(--kz-text-primary); background: var(--kz-surface-3); }
436
482
  .kz-code pre { margin: 0; padding: 16px 18px; overflow-x: auto; font-family: var(--kz-font-mono); font-size: 12.5px; line-height: 1.7; color: var(--kz-text-primary); tab-size: 2; }
437
483
  .kz-code pre:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); outline-offset: -2px; }
438
484
  /* The code's colours: TanStack Highlight's `th-*` classes on the tokens' text roles (each ≥ 4.5:1 on the code surface,
@@ -463,7 +509,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
463
509
  .kz-md { min-width: 0; color: var(--kz-text-primary); font-size: 15px; line-height: 1.7; overflow-wrap: anywhere; }
464
510
  .kz-md > * { margin-block: 0; }
465
511
  .kz-md > * + * { margin-top: 0.9em; }
466
- .kz-md h1, .kz-md h2, .kz-md h3, .kz-md h4, .kz-md h5, .kz-md h6 { font-family: var(--kz-font-display); font-weight: 800; line-height: 1.2; letter-spacing: -0.01em; }
512
+ .kz-md h1, .kz-md h2, .kz-md h3, .kz-md h4, .kz-md h5, .kz-md h6 { font-family: var(--kz-font-display); font-weight: 400; line-height: 1.2; letter-spacing: -0.01em; }
467
513
  .kz-md > * + :is(h1, h2, h3) { margin-top: 1.6em; }
468
514
  .kz-md h1 { font-size: 1.7em; } .kz-md h2 { font-size: 1.35em; } .kz-md h3 { font-size: 1.15em; } .kz-md h4, .kz-md h5, .kz-md h6 { font-size: 1em; }
469
515
  .kz-md a { color: var(--kz-accent-text); text-decoration: underline; text-underline-offset: 3px; }
@@ -553,7 +599,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
553
599
  border: 1px solid color-mix(in srgb, var(--kz-hue, var(--kz-accent)) 30%, var(--kz-border-default));
554
600
  }
555
601
  .kz-cta-text { min-width: 0; flex: 1 1 320px; }
556
- .kz-cta-title { margin: 0 0 6px; font-family: var(--kz-font-display); font-size: 21px; font-weight: 800; letter-spacing: -0.015em; color: var(--kz-text-primary); scroll-margin-top: var(--kz-anchor-offset, 96px); }
602
+ .kz-cta-title { margin: 0 0 6px; font-family: var(--kz-font-display); font-size: 21px; font-weight: 400; letter-spacing: -0.01em; color: var(--kz-text-primary); scroll-margin-top: var(--kz-anchor-offset, 96px); }
557
603
  .kz-cta-body { margin: 0; max-width: 640px; font-size: 14.5px; line-height: 1.65; color: var(--kz-text-secondary); }
558
604
  .kz-cta-actions { display: flex; flex-wrap: wrap; gap: 10px; }
559
605
 
@@ -603,7 +649,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
603
649
  .kz-tpl-band { margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); border-block: 1px solid var(--kz-border-subtle); }
604
650
  .kz-tpl-band > div { padding: 20px 18px; border-left: 1px solid var(--kz-border-subtle); }
605
651
  .kz-tpl-band > div:first-child { border-left: 0; }
606
- .kz-tpl-band dt { font-family: var(--kz-font-display); font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 800; letter-spacing: -0.03em; color: var(--kz-text-primary); }
652
+ .kz-tpl-band dt { font-family: var(--kz-font-display); font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 400; letter-spacing: -0.01em; color: var(--kz-text-primary); }
607
653
  .kz-tpl-band dd { margin: 4px 0 0; font-size: 13px; color: var(--kz-text-secondary); }
608
654
  @media (max-width: 560px) { .kz-tpl-band > div { border-left: 0; border-top: 1px solid var(--kz-border-subtle); } .kz-tpl-band > div:first-child { border-top: 0; } }
609
655
 
@@ -613,7 +659,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
613
659
  background: var(--kz-surface-1); border: 1px solid var(--kz-border-default); }
614
660
  .kz-tpl-bento > li[data-size="lg"] { grid-column: span 4; grid-row: span 2; background: color-mix(in srgb, var(--kz-hue, var(--kz-accent)) 7%, var(--kz-surface-1)); }
615
661
  .kz-tpl-bento > li[data-size="md"] { grid-column: span 3; }
616
- .kz-tpl-bento h3 { margin: 0; font-family: var(--kz-font-display); font-size: 17px; font-weight: 800; letter-spacing: -0.012em; color: var(--kz-text-primary); }
662
+ .kz-tpl-bento h3 { margin: 0; font-family: var(--kz-font-display); font-size: 17px; font-weight: 400; letter-spacing: -0.01em; color: var(--kz-text-primary); }
617
663
  .kz-tpl-bento > li[data-size="lg"] h3 { font-size: clamp(1.3rem, 2.4vw, 1.75rem); }
618
664
  .kz-tpl-bento p { margin: 0; font-size: 14px; line-height: 1.6; color: var(--kz-text-secondary); }
619
665
  .kz-tpl-bento-visual { margin-top: auto; min-width: 0; }
@@ -625,9 +671,9 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
625
671
  background: linear-gradient(var(--kz-hue, var(--kz-accent)), color-mix(in srgb, var(--kz-hue, var(--kz-accent)) 10%, transparent)); }
626
672
  .kz-tpl-step { position: relative; display: grid; grid-template-columns: 44px minmax(0, 1fr) minmax(0, 1fr); gap: 20px 28px; align-items: start; }
627
673
  .kz-tpl-step-n { grid-column: 1; grid-row: 1; position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 14px;
628
- font-family: var(--kz-font-display); font-size: 16px; font-weight: 800; color: var(--kz-text-primary); background: var(--kz-surface-1);
674
+ font-family: var(--kz-font-display); font-size: 16px; font-weight: 400; color: var(--kz-text-primary); background: var(--kz-surface-1);
629
675
  border: 2px solid var(--kz-hue, var(--kz-accent)); box-shadow: 0 0 0 6px var(--kz-surface-0); }
630
- .kz-tpl-step :is(h2, h3) { margin: 6px 0 8px; font-family: var(--kz-font-display); font-size: clamp(1.15rem, 2.2vw, 1.4rem); font-weight: 800; color: var(--kz-text-primary); }
676
+ .kz-tpl-step :is(h2, h3) { margin: 6px 0 8px; font-family: var(--kz-font-display); font-size: clamp(1.15rem, 2.2vw, 1.4rem); font-weight: 400; color: var(--kz-text-primary); }
631
677
  .kz-tpl-step p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--kz-text-secondary); }
632
678
  .kz-tpl-step-visual { min-width: 0; }
633
679
  .kz-tpl-step:nth-child(even) .kz-tpl-step-visual { order: -1; grid-column: 2; }
@@ -658,7 +704,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
658
704
  background: linear-gradient(160deg, color-mix(in srgb, var(--kz-accent) 14%, var(--kz-surface-1)), var(--kz-surface-1) 55%);
659
705
  border: 1px solid color-mix(in srgb, var(--kz-accent) 28%, var(--kz-border-default)); }
660
706
  .kz-tpl-collection-head { display: flex; align-items: center; gap: 10px; }
661
- .kz-tpl-collection-head a { font-family: var(--kz-font-display); font-size: 18px; font-weight: 800; color: var(--kz-text-primary); text-decoration: none; }
707
+ .kz-tpl-collection-head a { font-family: var(--kz-font-display); font-size: 18px; font-weight: 400; color: var(--kz-text-primary); text-decoration: none; }
662
708
  .kz-tpl-collection-head a::after { content: ""; position: absolute; inset: 0; z-index: -1; }
663
709
  .kz-tpl-collection-head a:focus-visible { outline: none; }
664
710
  .kz-tpl-collection:has(.kz-tpl-collection-head a:focus-visible) { outline: 2px solid var(--kz-ring, var(--kz-accent)); outline-offset: 2px; }
@@ -691,7 +737,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
691
737
  .kz-tpl-crumbs li + li::before { content: "/"; margin-right: 6px; color: var(--kz-border-strong); }
692
738
  .kz-tpl-crumbs a { color: inherit; text-decoration: none; }
693
739
  .kz-tpl-crumbs a:hover { color: var(--kz-text-primary); }
694
- .kz-tpl-article-title { margin: 0; font-family: var(--kz-font-display); font-size: clamp(1.9rem, 4vw, 2.6rem); font-weight: 800; letter-spacing: -0.03em; line-height: 1.1; color: var(--kz-text-primary); }
740
+ .kz-tpl-article-title { margin: 0; font-family: var(--kz-font-display); font-size: clamp(1.9rem, 4vw, 2.6rem); font-weight: 400; letter-spacing: -0.01em; line-height: 1.1; color: var(--kz-text-primary); }
695
741
  .kz-tpl-article-lead { margin: 12px 0 0; max-width: 46rem; font-size: 17px; line-height: 1.65; color: var(--kz-text-secondary); }
696
742
  .kz-tpl-article-meta { margin-top: 14px; }
697
743
  .kz-tpl-prose { max-width: 46rem; font-size: 16px; line-height: 1.75; color: var(--kz-text-secondary); }
@@ -702,7 +748,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
702
748
  .kz-tpl-pager a:hover { border-color: var(--kz-accent); }
703
749
  .kz-tpl-pager a:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); outline-offset: 2px; }
704
750
  .kz-tpl-pager a[rel="next"] { grid-column: 2; text-align: right; }
705
- .kz-tpl-pager small { font-family: var(--kz-font-mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--kz-text-secondary); }
751
+ .kz-tpl-pager small { font-family: var(--kz-font-mono); font-size: 11px; letter-spacing: 0; text-transform: none; color: var(--kz-text-secondary); }
706
752
 
707
753
  /* A catalogue: the filters in a sticky column (folded above the results on a phone). */
708
754
  .kz-tpl-catalogue { display: grid; grid-template-columns: 15rem minmax(0, 1fr); gap: 32px; align-items: start; }
@@ -730,14 +776,14 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
730
776
  /* A long read: chapters with their big numbers, pull quotes in the margin, figures that break out. */
731
777
  .kz-tpl-chapters { display: grid; gap: clamp(40px, 7vw, 88px); }
732
778
  .kz-tpl-chapter { display: grid; grid-template-columns: minmax(0, 9rem) minmax(0, 42rem) minmax(0, 1fr); gap: 24px 32px; }
733
- .kz-tpl-chapter-n { font-family: var(--kz-font-display); font-size: clamp(2.4rem, 6vw, 4.2rem); font-weight: 800; line-height: 0.9; letter-spacing: -0.04em;
779
+ .kz-tpl-chapter-n { font-family: var(--kz-font-display); font-size: clamp(2.4rem, 6vw, 4.2rem); font-weight: 400; line-height: 0.9; letter-spacing: -0.01em;
734
780
  color: transparent; -webkit-text-stroke: 1.5px var(--kz-hue, var(--kz-accent)); }
735
- .kz-tpl-chapter h2 { margin: 0 0 14px; font-family: var(--kz-font-display); font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 800; letter-spacing: -0.025em; line-height: 1.15;
781
+ .kz-tpl-chapter h2 { margin: 0 0 14px; font-family: var(--kz-font-display); font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 400; letter-spacing: -0.01em; line-height: 1.15;
736
782
  color: var(--kz-text-primary); scroll-margin-top: var(--kz-anchor-offset, 96px); }
737
783
  .kz-tpl-chapter-body { font-size: 17px; line-height: 1.8; color: var(--kz-text-secondary); }
738
784
  .kz-tpl-chapter-body p { margin: 0 0 1em; }
739
785
  .kz-tpl-chapter-aside { align-self: start; padding-top: 8px; }
740
- .kz-tpl-pull { margin: 0; padding-left: 16px; border-left: 3px solid var(--kz-hue, var(--kz-accent)); font-family: var(--kz-font-display); font-size: 19px; font-weight: 700;
786
+ .kz-tpl-pull { margin: 0; padding-left: 16px; border-left: 3px solid var(--kz-hue, var(--kz-accent)); font-family: var(--kz-font-display); font-size: 19px; font-weight: 400;
741
787
  line-height: 1.4; color: var(--kz-text-primary); }
742
788
  .kz-tpl-chapter-figure { grid-column: 2 / -1; margin: 8px 0 0; }
743
789
  @media (max-width: 1023px) {
@@ -751,10 +797,10 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
751
797
  .kz-tpl-log-entry:first-child { border-top: 0; }
752
798
  .kz-tpl-log-when { position: sticky; top: var(--kz-anchor-offset, 96px); align-self: start; display: grid; gap: 6px; }
753
799
  .kz-tpl-log-when time { font-family: var(--kz-font-mono); font-size: 12.5px; color: var(--kz-text-secondary); }
754
- .kz-tpl-log-entry :is(h2, h3) { margin: 0 0 10px; font-family: var(--kz-font-display); font-size: 19px; font-weight: 800; color: var(--kz-text-primary); }
800
+ .kz-tpl-log-entry :is(h2, h3) { margin: 0 0 10px; font-family: var(--kz-font-display); font-size: 19px; font-weight: 400; color: var(--kz-text-primary); }
755
801
  .kz-tpl-log-items { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
756
802
  .kz-tpl-log-items li { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); gap: 10px; font-size: 14.5px; line-height: 1.6; color: var(--kz-text-secondary); }
757
- .kz-tpl-log-kind { font-family: var(--kz-font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; padding-top: 3px; }
803
+ .kz-tpl-log-kind { font-family: var(--kz-font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0; text-transform: none; padding-top: 3px; }
758
804
  .kz-tpl-log-kind[data-kind="added"] { color: var(--kz-success-text); }
759
805
  .kz-tpl-log-kind[data-kind="changed"] { color: var(--kz-accent-text); }
760
806
  .kz-tpl-log-kind[data-kind="fixed"] { color: var(--kz-warning-text); }
@@ -783,7 +829,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
783
829
  .kz-tpl-state[data-state="operational"] { border-color: color-mix(in srgb, var(--kz-success) 40%, var(--kz-border-default)); background: color-mix(in srgb, var(--kz-success) 7%, var(--kz-surface-1)); }
784
830
  .kz-tpl-state[data-state="degraded"] { border-color: color-mix(in srgb, var(--kz-warning) 40%, var(--kz-border-default)); background: color-mix(in srgb, var(--kz-warning) 7%, var(--kz-surface-1)); }
785
831
  .kz-tpl-state[data-state="outage"] { border-color: color-mix(in srgb, var(--kz-danger) 40%, var(--kz-border-default)); background: color-mix(in srgb, var(--kz-danger) 7%, var(--kz-surface-1)); }
786
- .kz-tpl-state strong { font-family: var(--kz-font-display); font-size: 19px; font-weight: 800; color: var(--kz-text-primary); }
832
+ .kz-tpl-state strong { font-family: var(--kz-font-display); font-size: 19px; font-weight: 400; color: var(--kz-text-primary); }
787
833
  .kz-tpl-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; background: var(--kz-text-secondary); }
788
834
  [data-state="operational"] > .kz-tpl-dot, .kz-tpl-dot[data-state="operational"] { background: var(--kz-success); box-shadow: 0 0 0 4px color-mix(in srgb, var(--kz-success) 22%, transparent); }
789
835
  [data-state="degraded"] > .kz-tpl-dot, .kz-tpl-dot[data-state="degraded"] { background: var(--kz-warning); }
@@ -797,9 +843,9 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
797
843
 
798
844
  /* An error: the code, huge and drawn in outline, the bird beside it, the ways out under it. */
799
845
  .kz-tpl-error { display: grid; justify-items: center; gap: 16px; padding-block: calc(var(--kz-hero-top, 120px) - 16px) clamp(48px, 8vw, 96px); text-align: center; }
800
- .kz-tpl-error .kz-tpl-error-code { margin: 0; max-width: none; display: flex; align-items: center; gap: 8px; font-family: var(--kz-font-display); font-size: clamp(5rem, 18vw, 10rem); font-weight: 800;
801
- line-height: 0.9; letter-spacing: -0.06em; color: transparent; -webkit-text-stroke: 2px var(--kz-hue, var(--kz-accent)); }
802
- .kz-tpl-error h1 { margin: 0; font-family: var(--kz-font-display); font-size: clamp(1.6rem, 4vw, 2.3rem); font-weight: 800; letter-spacing: -0.025em; color: var(--kz-text-primary); }
846
+ .kz-tpl-error .kz-tpl-error-code { margin: 0; max-width: none; display: flex; align-items: center; gap: 8px; font-family: var(--kz-font-display); font-size: clamp(5rem, 18vw, 10rem); font-weight: 400;
847
+ line-height: 0.9; letter-spacing: -0.01em; color: transparent; -webkit-text-stroke: 2px var(--kz-hue, var(--kz-accent)); }
848
+ .kz-tpl-error h1 { margin: 0; font-family: var(--kz-font-display); font-size: clamp(1.6rem, 4vw, 2.3rem); font-weight: 400; letter-spacing: -0.01em; color: var(--kz-text-primary); }
803
849
  .kz-tpl-error p:not(.kz-tpl-error-code) { margin: 0; max-width: 34rem; font-size: 16px; line-height: 1.65; color: var(--kz-text-secondary); }
804
850
  .kz-tpl-error-search { width: min(100%, 28rem); }
805
851
 
@@ -809,8 +855,8 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
809
855
  border: 1px solid var(--kz-border-default); }
810
856
  .kz-tpl-plan[data-featured] { border-color: var(--kz-accent); background: linear-gradient(170deg, color-mix(in srgb, var(--kz-accent) 12%, var(--kz-surface-1)), var(--kz-surface-1) 60%);
811
857
  box-shadow: 0 30px 60px -36px var(--kz-accent); }
812
- .kz-tpl-plan :is(h2, h3) { margin: 0; font-family: var(--kz-font-display); font-size: 18px; font-weight: 800; color: var(--kz-text-primary); }
813
- .kz-tpl-price { margin: 0; font-family: var(--kz-font-display); font-size: 2.6rem; font-weight: 800; letter-spacing: -0.03em; line-height: 1; color: var(--kz-text-primary); }
858
+ .kz-tpl-plan :is(h2, h3) { margin: 0; font-family: var(--kz-font-display); font-size: 18px; font-weight: 400; color: var(--kz-text-primary); }
859
+ .kz-tpl-price { margin: 0; font-family: var(--kz-font-display); font-size: 2.6rem; font-weight: 400; letter-spacing: -0.01em; line-height: 1; color: var(--kz-text-primary); }
814
860
  .kz-tpl-price small { display: block; margin-top: 6px; font-family: var(--kz-font-text, inherit); font-size: 13px; font-weight: 500; letter-spacing: 0; color: var(--kz-text-secondary); }
815
861
  .kz-tpl-plan ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; font-size: 14px; color: var(--kz-text-secondary); }
816
862
  .kz-tpl-plan ul li { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 8px; }
@@ -818,7 +864,7 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
818
864
  .kz-tpl-plan > :last-child { margin-top: auto; }
819
865
  .kz-tpl-compare { width: 100%; border-collapse: collapse; font-size: 14px; }
820
866
  .kz-tpl-compare th, .kz-tpl-compare td { padding: 12px 14px; text-align: left; border-bottom: 1px solid var(--kz-border-subtle); color: var(--kz-text-secondary); }
821
- .kz-tpl-compare thead th { font-family: var(--kz-font-mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; }
867
+ .kz-tpl-compare thead th { font-family: var(--kz-font-mono); font-size: 11px; letter-spacing: 0; text-transform: none; }
822
868
  .kz-tpl-compare tbody th { color: var(--kz-text-primary); font-weight: 600; }
823
869
  .kz-tpl-scroll { overflow-x: auto; border-radius: 16px; border: 1px solid var(--kz-border-default); background: var(--kz-surface-1); }
824
870
  .kz-tpl-faq { display: grid; gap: 8px; }
@@ -841,3 +887,154 @@ a.kz-fact:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); o
841
887
  .kz-tpl-plan .kz-tpl-collection-head { justify-content: space-between; }
842
888
  .kz-tpl-scroll:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); outline-offset: 2px; }
843
889
  .kz-tpl-prose > p, .kz-tpl-prose > ul, .kz-tpl-prose > ol { margin: 0 0 1em; }
890
+
891
+ /* ─── The Cahier's signature blocks (ADR-004, #417): the specimen tag, the stamp, the bird plate, the anatomy plate,
892
+ the index, the caption and the footnotes. Paper and ink on the --kz-paper-* roles; nothing blurs, nothing glows. ─── */
893
+
894
+ /* SpecimenTag — manila, an eyelet, a typed record. `data-mount="hang"`: a string from the wire above. */
895
+ .kz-tag {
896
+ position: relative;
897
+ display: flex;
898
+ flex-direction: column;
899
+ gap: 10px;
900
+ padding: 40px 20px 16px;
901
+ color: var(--kz-paper-tag-ink);
902
+ background: var(--kz-paper-tag);
903
+ border: 1px solid var(--kz-paper-tag-edge);
904
+ border-top-left-radius: 12px;
905
+ border-top-right-radius: 12px;
906
+ corner-shape: bevel;
907
+ box-shadow: var(--kz-shadow-raised);
908
+ }
909
+ .kz-tag-eyelet {
910
+ position: absolute;
911
+ top: 12px;
912
+ left: 50%;
913
+ width: 14px;
914
+ height: 14px;
915
+ margin-left: -7px;
916
+ border-radius: 9999px;
917
+ background: var(--kz-surface-0);
918
+ box-shadow: inset 0 0 0 3px var(--kz-paper-tag-edge);
919
+ }
920
+ .kz-tag[data-mount="hang"] { margin-top: 32px; }
921
+ .kz-tag[data-mount="hang"]::before {
922
+ content: "";
923
+ position: absolute;
924
+ left: 50%;
925
+ top: -33px;
926
+ height: 52px;
927
+ border-left: 1.5px solid var(--kz-text-secondary);
928
+ opacity: 0.75;
929
+ }
930
+ .kz-tag-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 26px; }
931
+ .kz-tag-code { font-family: var(--kz-font-mono); font-size: 12.5px; font-weight: 700; line-height: 16px; }
932
+ .kz-tag-title { margin: 0; display: flex; align-items: center; justify-content: space-between; gap: 12px; font-family: var(--kz-font-display); font-weight: 400; font-size: 26px; line-height: 32px; color: inherit; }
933
+ .kz-tag-mark { display: inline-flex; flex-shrink: 0; }
934
+ .kz-tag-mark > svg, .kz-tag-mark > img { width: 32px; height: 32px; }
935
+ .kz-tag-body { font-size: 15px; line-height: 22px; }
936
+ .kz-tag-body > p { margin: 0; }
937
+ .kz-tag-fields { margin: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; font-family: var(--kz-font-mono); font-size: 13px; line-height: 24px; }
938
+ .kz-tag-fields > div { display: contents; }
939
+ .kz-tag-fields dt { opacity: 0.72; }
940
+ .kz-tag-fields dd { margin: 0; font-weight: 700; border-bottom: 1px dashed var(--kz-paper-tag-edge); overflow-wrap: anywhere; }
941
+ .kz-tag-foot { margin-top: auto; padding-top: 10px; display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 12px; font-family: var(--kz-font-mono); font-size: 12.5px; line-height: 16px; border-top: 1px dashed var(--kz-paper-tag-edge); }
942
+ .kz-tag-foot a { color: inherit; font-weight: 700; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 4px; }
943
+
944
+ /* Stamp — a rubber stamp: lower case, double-ruled, askew; the tone is its ink. */
945
+ .kz-stamp {
946
+ display: inline-flex;
947
+ align-items: center;
948
+ flex-shrink: 0;
949
+ padding: 3px 8px 2px;
950
+ font-family: var(--kz-font-mono);
951
+ font-size: 12px;
952
+ font-weight: 700;
953
+ line-height: 16px;
954
+ white-space: nowrap;
955
+ color: var(--kz-stamp-ink, var(--kz-text-primary));
956
+ border: 2px solid currentColor;
957
+ border-radius: 2px;
958
+ outline: 1px solid currentColor;
959
+ outline-offset: 2px;
960
+ transform: rotate(-3deg);
961
+ }
962
+ .kz-stamp[data-tone="ok"] { --kz-stamp-ink: var(--kz-success-text); }
963
+ .kz-stamp[data-tone="wip"] { --kz-stamp-ink: var(--kz-text-secondary); }
964
+ .kz-stamp[data-tone="construction"] { --kz-stamp-ink: var(--kz-paper-rule-margin); }
965
+ .kz-tag .kz-stamp[data-tone="wip"], .kz-tag .kz-stamp[data-tone="neutral"] { --kz-stamp-ink: var(--kz-paper-tag-ink); }
966
+ /* On the manila (or the slate tag), the margin's red is mixed with the tag's ink so a small stamp stays ≥ 4.5:1 (axe). */
967
+ .kz-tag .kz-stamp[data-tone="construction"] { --kz-stamp-ink: color-mix(in oklab, var(--kz-paper-rule-margin) 72%, var(--kz-paper-tag-ink)); }
968
+
969
+ /* BirdPlate and AnatomyPlate — a sheet of the field guide. */
970
+ .kz-plate, .kz-anatomy {
971
+ margin: 0;
972
+ padding: 20px 24px 24px;
973
+ background: var(--kz-surface-1);
974
+ border: 1px solid var(--kz-border-default);
975
+ box-shadow: var(--kz-shadow-md);
976
+ }
977
+ .kz-plate-head, .kz-anatomy-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 16px; margin-bottom: 16px; }
978
+ .kz-plate-title { font-family: var(--kz-font-display); font-size: 22px; line-height: 32px; font-weight: 400; color: var(--kz-text-primary); }
979
+ .kz-plate-sub { font-family: var(--kz-font-mono); font-size: 13px; line-height: 16px; color: var(--kz-text-secondary); }
980
+ .kz-plate-figures { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 24px 20px; }
981
+ .kz-plate-figure { display: grid; justify-items: center; align-content: start; gap: 4px; text-align: center; }
982
+ .kz-plate-bird { width: 112px; height: 112px; }
983
+ .kz-plate-caption { position: relative; margin: 0; padding-top: 22px; max-width: 24ch; font-family: var(--kz-font-mono); font-size: 12.5px; line-height: 16px; color: var(--kz-text-secondary); }
984
+ .kz-plate-caption b { display: block; font-weight: 700; color: var(--kz-text-primary); }
985
+ .kz-plate-caption::before { content: ""; position: absolute; top: 2px; left: 50%; height: 16px; border-left: 1px solid var(--kz-text-secondary); }
986
+ .kz-plate-caption::after { content: ""; position: absolute; top: 0; left: calc(50% - 2.5px); width: 5px; height: 5px; border-radius: 9999px; background: var(--kz-paper-rule-margin); }
987
+ .kz-plate[data-layout="single"] .kz-plate-figures { grid-template-columns: 1fr; }
988
+ .kz-plate[data-layout="single"] .kz-plate-figure { grid-template-columns: auto minmax(0, 1fr); align-items: center; justify-items: start; text-align: left; gap: 32px; }
989
+ .kz-plate[data-layout="single"] .kz-plate-bird { width: 168px; height: 168px; }
990
+ .kz-plate[data-layout="single"] .kz-plate-caption { padding: 0 0 0 4px; max-width: 32ch; font-size: 13.5px; line-height: 20px; }
991
+ .kz-plate[data-layout="single"] .kz-plate-caption::before { top: 50%; left: -28px; height: 0; width: 26px; border-left: 0; border-top: 1px solid var(--kz-text-secondary); }
992
+ .kz-plate[data-layout="single"] .kz-plate-caption::after { top: calc(50% - 2.5px); left: -31px; }
993
+
994
+ .kz-anatomy-stage { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 0 56px; min-height: 240px; }
995
+ .kz-anatomy-specimen { display: grid; place-items: center; padding: 40px 24px; }
996
+ .kz-anatomy-scale { transform: scale(var(--kz-anatomy-scale, 1.6)); transform-origin: center; }
997
+ .kz-anatomy-parts { margin: 0; padding: 0; list-style: none; display: grid; gap: 28px; }
998
+ .kz-anatomy-part { position: relative; display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 10px; align-items: start; font-family: var(--kz-font-mono); font-size: 12.5px; line-height: 16px; color: var(--kz-text-secondary); }
999
+ .kz-anatomy-part b { font-weight: 700; color: var(--kz-paper-rule-margin); }
1000
+ .kz-anatomy-n { display: grid; place-items: center; width: 24px; height: 24px; border: 1.5px solid var(--kz-paper-rule-margin); border-radius: 9999px; font-family: var(--kz-font-text); font-size: 12px; font-weight: 700; color: var(--kz-paper-rule-margin); }
1001
+ .kz-anatomy-parts[data-side="left"] .kz-anatomy-part::after,
1002
+ .kz-anatomy-parts[data-side="right"] .kz-anatomy-part::after { content: ""; position: absolute; top: 12px; width: 44px; border-top: 1px solid var(--kz-text-secondary); }
1003
+ .kz-anatomy-parts[data-side="left"] .kz-anatomy-part::after { right: -52px; }
1004
+ .kz-anatomy-parts[data-side="right"] .kz-anatomy-part::after { left: -52px; }
1005
+ @media (max-width: 720px) {
1006
+ .kz-anatomy-stage { grid-template-columns: 1fr; gap: 16px; }
1007
+ .kz-anatomy-specimen { order: -1; padding: 24px 0; }
1008
+ .kz-anatomy-scale { transform: none; }
1009
+ .kz-anatomy-parts { gap: 16px; }
1010
+ .kz-anatomy-parts[data-side] .kz-anatomy-part::after { display: none; }
1011
+ .kz-plate[data-layout="single"] .kz-plate-figure { grid-template-columns: 1fr; justify-items: center; text-align: center; gap: 4px; }
1012
+ .kz-plate[data-layout="single"] .kz-plate-caption { padding-top: 22px; }
1013
+ .kz-plate[data-layout="single"] .kz-plate-caption::before { top: 2px; left: 50%; height: 16px; width: 0; border-top: 0; border-left: 1px solid var(--kz-text-secondary); }
1014
+ .kz-plate[data-layout="single"] .kz-plate-caption::after { top: 0; left: calc(50% - 2.5px); }
1015
+ }
1016
+
1017
+ /* PageIndex — a book's index: dotted leaders and page numbers; the current entry marked in the margin. */
1018
+ .kz-index { font-size: 15px; line-height: 24px; }
1019
+ .kz-index-group + .kz-index-group { margin-top: 16px; }
1020
+ .kz-index-title { margin: 0 0 4px; font-family: var(--kz-font-mono); font-size: 12.5px; font-weight: 700; line-height: 24px; color: var(--kz-paper-rule-margin); }
1021
+ .kz-index ul { margin: 0; padding: 0; list-style: none; }
1022
+ .kz-index-entry { position: relative; display: flex; align-items: baseline; gap: 6px; padding: 4px 0; color: var(--kz-text-secondary); text-decoration: none; }
1023
+ .kz-index-entry:hover { color: var(--kz-text-primary); }
1024
+ .kz-index-entry:focus-visible { outline: var(--kz-ring-width, 2px) solid var(--kz-ring); outline-offset: 2px; }
1025
+ .kz-index-label { min-width: 0; }
1026
+ .kz-index-leader { flex: 1; min-width: 12px; border-bottom: 1.5px dotted var(--kz-text-muted); transform: translateY(-4px); }
1027
+ .kz-index-page { font-family: var(--kz-font-mono); font-size: 12.5px; color: var(--kz-text-secondary); font-variant-numeric: tabular-nums; }
1028
+ .kz-index-entry[aria-current="page"] { color: var(--kz-text-primary); font-weight: 700; }
1029
+ .kz-index-entry[aria-current="page"]::before { content: "→"; position: absolute; left: -20px; color: var(--kz-paper-rule-margin); font-weight: 400; }
1030
+
1031
+ /* Caption, footnote refs and the notes — the small print. */
1032
+ .kz-caption { display: block; margin: 8px 0 0; font-family: var(--kz-font-mono); font-size: 12.5px; line-height: 16px; color: var(--kz-text-secondary); }
1033
+ .kz-caption-figure { font-weight: 700; color: var(--kz-text-primary); }
1034
+ .kz-fnref { line-height: 0; }
1035
+ .kz-fnref a { padding: 0 1px; font-family: var(--kz-font-mono); font-size: 0.72em; font-weight: 700; color: var(--kz-paper-rule-margin); text-decoration: none; }
1036
+ .kz-fnref a:hover { text-decoration: underline; }
1037
+ .kz-footnotes { margin-top: 24px; padding-top: 12px; font-size: 13.5px; line-height: 20px; color: var(--kz-text-secondary); background: linear-gradient(var(--kz-text-secondary), var(--kz-text-secondary)) top left / 12ch 1px no-repeat; }
1038
+ .kz-footnotes ol { margin: 0; padding-left: 1.6em; display: grid; gap: 6px; }
1039
+ .kz-footnotes li::marker { font-family: var(--kz-font-mono); color: var(--kz-paper-rule-margin); }
1040
+ .kz-fn-back { color: var(--kz-accent-text); text-decoration: none; }
package/dist/card.d.ts CHANGED
@@ -20,7 +20,7 @@ declare const card: tailwind_variants.TVReturnType<{
20
20
  readonly root: "bg-surface-2 shadow-md";
21
21
  };
22
22
  readonly glass: {
23
- readonly root: "bg-surface-1/70 backdrop-blur-md";
23
+ readonly root: "bg-glass border-glass-border";
24
24
  };
25
25
  };
26
26
  readonly interactive: {
@@ -52,7 +52,7 @@ declare const card: tailwind_variants.TVReturnType<{
52
52
  readonly title: "line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent";
53
53
  readonly description: "line-clamp-2 text-xs text-fg-secondary";
54
54
  readonly stat: "min-w-0";
55
- readonly statLabel: "text-[10px] font-semibold uppercase tracking-wider text-fg-secondary";
55
+ readonly statLabel: "font-mono text-[11.5px] text-fg-secondary";
56
56
  readonly statValue: "font-display text-xl font-black tabular-nums text-fg";
57
57
  readonly footer: "relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary";
58
58
  }, undefined, {
@@ -73,7 +73,7 @@ declare const card: tailwind_variants.TVReturnType<{
73
73
  readonly root: "bg-surface-2 shadow-md";
74
74
  };
75
75
  readonly glass: {
76
- readonly root: "bg-surface-1/70 backdrop-blur-md";
76
+ readonly root: "bg-glass border-glass-border";
77
77
  };
78
78
  };
79
79
  readonly interactive: {
@@ -105,7 +105,7 @@ declare const card: tailwind_variants.TVReturnType<{
105
105
  readonly title: "line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent";
106
106
  readonly description: "line-clamp-2 text-xs text-fg-secondary";
107
107
  readonly stat: "min-w-0";
108
- readonly statLabel: "text-[10px] font-semibold uppercase tracking-wider text-fg-secondary";
108
+ readonly statLabel: "font-mono text-[11.5px] text-fg-secondary";
109
109
  readonly statValue: "font-display text-xl font-black tabular-nums text-fg";
110
110
  readonly footer: "relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary";
111
111
  }, tailwind_variants.TVReturnTypeLike<{
@@ -126,7 +126,7 @@ declare const card: tailwind_variants.TVReturnType<{
126
126
  readonly root: "bg-surface-2 shadow-md";
127
127
  };
128
128
  readonly glass: {
129
- readonly root: "bg-surface-1/70 backdrop-blur-md";
129
+ readonly root: "bg-glass border-glass-border";
130
130
  };
131
131
  };
132
132
  readonly interactive: {
@@ -158,7 +158,7 @@ declare const card: tailwind_variants.TVReturnType<{
158
158
  readonly title: "line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent";
159
159
  readonly description: "line-clamp-2 text-xs text-fg-secondary";
160
160
  readonly stat: "min-w-0";
161
- readonly statLabel: "text-[10px] font-semibold uppercase tracking-wider text-fg-secondary";
161
+ readonly statLabel: "font-mono text-[11.5px] text-fg-secondary";
162
162
  readonly statValue: "font-display text-xl font-black tabular-nums text-fg";
163
163
  readonly footer: "relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary";
164
164
  }>>;
package/dist/card.js CHANGED
@@ -21,13 +21,13 @@ var cardRecipe = defineRecipe({
21
21
  title: "line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent",
22
22
  description: "line-clamp-2 text-xs text-fg-secondary",
23
23
  stat: "min-w-0",
24
- statLabel: "text-[10px] font-semibold uppercase tracking-wider text-fg-secondary",
24
+ statLabel: "font-mono text-[11.5px] text-fg-secondary",
25
25
  statValue: "font-display text-xl font-black tabular-nums text-fg",
26
26
  footer: "relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary"
27
27
  },
28
28
  variants: {
29
29
  radius: { md: { root: "rounded-md" }, lg: { root: "rounded-lg" }, xl: { root: "rounded-xl" } },
30
- tone: { default: {}, elevated: { root: "bg-surface-2 shadow-md" }, glass: { root: "bg-surface-1/70 backdrop-blur-md" } },
30
+ tone: { default: {}, elevated: { root: "bg-surface-2 shadow-md" }, glass: { root: "bg-glass border-glass-border" } },
31
31
  interactive: { true: { root: "duration-150 hover:border-border-strong hover:bg-surface-2" } },
32
32
  padding: { none: { body: "p-0" }, sm: { body: "p-3" }, md: { body: "p-4" }, lg: { body: "p-6" } }
33
33
  },
package/dist/card.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/card/card.tsx","../src/card/recipe.ts"],"sourcesContent":["// Server-safe: no hook, no context. One `tv` definition with slots: each part takes its slot, and a product overrides\n// any part through `className` (merged last by tailwind-merge).\nimport { Slot } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nimport { cn } from \"../cn\";\nimport { cardRecipe } from \"./recipe\";\n\nexport const card = tv(cardRecipe);\n\ntype CardVariants = VariantProps<typeof card>;\n/** The parts without a variant read the default slots: no context, so server-safe. */\nconst slots = card();\n\nexport type CardRootProps = React.ComponentProps<\"div\"> &\n Pick<CardVariants, \"radius\" | \"tone\" | \"interactive\"> & {\n /**\n * md · lg · xl.\n * @default \"xl\"\n */\n radius?: CardVariants[\"radius\"];\n /**\n * default (the base surface) · elevated (raised, a shadow) · glass (translucent, blurred).\n * @default \"default\"\n */\n tone?: CardVariants[\"tone\"];\n /** The quiet hover — the hairline and the surface one step up, nothing moves (krizaka-ui#393): for a card that is a link. */\n interactive?: CardVariants[\"interactive\"];\n /** Renders the child (a link, an article) instead of the <div>, with props, classes and ref merged. */\n asChild?: boolean;\n /** Enters on scroll (MotionObserver): the index in the grid becomes the delay (50 ms a step, 8 steps at most). */\n reveal?: number;\n };\n\nexport function CardRoot({ asChild, reveal, radius, tone, interactive, className, style, ...props }: CardRootProps) {\n const Comp = asChild ? Slot.Root : \"div\";\n const revealStyle =\n reveal === undefined ? style : ({ ...style, \"--kz-delay\": `${Math.min(Math.max(reveal, 0), 8) * 50}ms` } as React.CSSProperties);\n return (\n <Comp\n data-reveal={reveal === undefined ? undefined : \"\"}\n data-interactive={interactive ? \"\" : undefined}\n style={revealStyle}\n className={card({ radius, tone, interactive }).root({ className })}\n {...props}\n />\n );\n}\n\nconst ASPECT = { video: \"aspect-video\", square: \"aspect-square\", portrait: \"aspect-[3/4]\", auto: \"\" } as const;\nexport type CardMediaProps = React.ComponentProps<\"div\"> & {\n /** The ratio of the media: video (16:9) · square · portrait (3:4) · auto (the content's). */\n aspect?: keyof typeof ASPECT;\n};\n\nexport function CardMedia({ aspect = \"video\", className, ...props }: CardMediaProps) {\n return <div data-aspect={aspect} className={slots.media({ className: cn(ASPECT[aspect], className) })} {...props} />;\n}\n\nexport type CardImageProps = Omit<React.ComponentProps<\"img\">, \"src\"> & {\n /** The image's URL; `null` or nothing shows the `fallback`. */\n src?: string | null;\n /** Shown when there is no image: an icon, an illustration (decorative). */\n fallback?: React.ReactNode;\n /**\n * When the browser loads it: `lazy` (default, a card in a list or below the fold) or `eager` for the first cards\n * of a page — the image that is the largest contentful paint must not wait (add `fetchPriority=\"high\"`).\n * @default \"lazy\"\n */\n loading?: \"lazy\" | \"eager\";\n};\n\n/** The image of a media, or its `fallback` when there is none. `alt` is empty by default: the title names the card. */\nexport function CardImage({ src, alt = \"\", fallback, loading = \"lazy\", className, ...props }: CardImageProps) {\n if (!src) {\n return (\n <div data-fallback=\"\" aria-hidden className={slots.fallback({ className })}>\n {fallback}\n </div>\n );\n }\n return <img src={src} alt={alt} loading={loading} decoding=\"async\" className={slots.image({ className })} {...props} />;\n}\n\nconst CORNER = {\n \"top-left\": \"left-2.5 top-2.5\",\n \"top-right\": \"right-2.5 top-2.5\",\n \"bottom-left\": \"bottom-2.5 left-2.5\",\n \"bottom-right\": \"bottom-2.5 right-2.5\",\n} as const;\nexport type CardOverlayProps = React.ComponentProps<\"div\"> & {\n /** The corner of the media it sits in. */\n corner?: keyof typeof CORNER;\n};\n\n/** What sits on the media (badges, a caption). `scrim` and `fg-on-media` are invariant: nothing to do for light. */\nexport function CardOverlay({ corner = \"top-left\", className, ...props }: CardOverlayProps) {\n return <div data-corner={corner} className={slots.overlay({ className: cn(CORNER[corner], className) })} {...props} />;\n}\n\nexport type CardBodyProps = React.ComponentProps<\"div\"> & {\n /**\n * none · sm · md · lg.\n * @default \"md\"\n */\n padding?: CardVariants[\"padding\"];\n};\n\nexport function CardBody({ padding, className, ...props }: CardBodyProps) {\n return <div className={card({ padding }).body({ className })} {...props} />;\n}\n\nexport type CardTitleProps = React.ComponentProps<\"h3\"> & {\n /** The heading level, to fit the page's outline. */\n as?: \"h2\" | \"h3\" | \"h4\";\n};\n\nexport function CardTitle({ as: Tag = \"h3\", className, ...props }: CardTitleProps) {\n return <Tag className={slots.title({ className })} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p className={slots.description({ className })} {...props} />;\n}\n\nexport type CardStatProps = React.ComponentProps<\"div\"> & {\n /** What the figure is, in small capitals above it (the figure is the children). */\n label: React.ReactNode;\n};\n\n/** A figure put forward: the label in capitals, the value in tabular digits. */\nexport function CardStat({ label, className, children, ...props }: CardStatProps) {\n return (\n <div className={slots.stat({ className })} {...props}>\n <p className={slots.statLabel()}>{label}</p>\n <p className={slots.statValue()}>{children}</p>\n </div>\n );\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={slots.footer({ className })} {...props} />;\n}\n\n/** `Card.Root/Media/Image/Overlay/Body/Title/Description/Stat/Footer`. */\nexport const Card = {\n Root: CardRoot,\n Media: CardMedia,\n Image: CardImage,\n Overlay: CardOverlay,\n Body: CardBody,\n Title: CardTitle,\n Description: CardDescription,\n Stat: CardStat,\n Footer: CardFooter,\n};\n","// The card's parts, radii, tones and paddings, written once as classes of the Krizaka tokens: the web wears them with\n// `tv(cardRecipe)`, React Native reads the same classes into styles (native/card.tsx): a part of the card that exists only\n// on the web (the hover's tint) is simply ignored there.\nimport { defineRecipe } from \"../recipes/define\";\n\nexport const cardRecipe = defineRecipe({\n slots: {\n root:\n \"group relative flex flex-col overflow-hidden border border-border-default bg-surface-1 text-fg transition-colors \" +\n \"focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\",\n media: \"relative overflow-hidden bg-media\",\n image: \"h-full w-full object-cover\",\n fallback: \"flex h-full w-full items-center justify-center bg-linear-to-br from-accent/15 via-media to-accent-2/15 text-accent/60\",\n overlay: \"absolute z-10 flex items-center gap-1.5\",\n body: \"relative flex flex-1 flex-col gap-3\",\n title: \"line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent\",\n description: \"line-clamp-2 text-xs text-fg-secondary\",\n stat: \"min-w-0\",\n statLabel: \"text-[10px] font-semibold uppercase tracking-wider text-fg-secondary\",\n statValue: \"font-display text-xl font-black tabular-nums text-fg\",\n footer: \"relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary\",\n },\n variants: {\n radius: { md: { root: \"rounded-md\" }, lg: { root: \"rounded-lg\" }, xl: { root: \"rounded-xl\" } },\n tone: { default: {}, elevated: { root: \"bg-surface-2 shadow-md\" }, glass: { root: \"bg-surface-1/70 backdrop-blur-md\" } },\n interactive: { true: { root: \"duration-150 hover:border-border-strong hover:bg-surface-2\" } },\n padding: { none: { body: \"p-0\" }, sm: { body: \"p-3\" }, md: { body: \"p-4\" }, lg: { body: \"p-6\" } },\n },\n defaultVariants: { radius: \"xl\", tone: \"default\", padding: \"md\" },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/card/card.tsx","../src/card/recipe.ts"],"sourcesContent":["// Server-safe: no hook, no context. One `tv` definition with slots: each part takes its slot, and a product overrides\n// any part through `className` (merged last by tailwind-merge).\nimport { Slot } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nimport { cn } from \"../cn\";\nimport { cardRecipe } from \"./recipe\";\n\nexport const card = tv(cardRecipe);\n\ntype CardVariants = VariantProps<typeof card>;\n/** The parts without a variant read the default slots: no context, so server-safe. */\nconst slots = card();\n\nexport type CardRootProps = React.ComponentProps<\"div\"> &\n Pick<CardVariants, \"radius\" | \"tone\" | \"interactive\"> & {\n /**\n * md · lg · xl.\n * @default \"xl\"\n */\n radius?: CardVariants[\"radius\"];\n /**\n * default (the base surface) · elevated (raised, a shadow) · glass (translucent, blurred).\n * @default \"default\"\n */\n tone?: CardVariants[\"tone\"];\n /** The quiet hover — the hairline and the surface one step up, nothing moves (krizaka-ui#393): for a card that is a link. */\n interactive?: CardVariants[\"interactive\"];\n /** Renders the child (a link, an article) instead of the <div>, with props, classes and ref merged. */\n asChild?: boolean;\n /** Enters on scroll (MotionObserver): the index in the grid becomes the delay (50 ms a step, 8 steps at most). */\n reveal?: number;\n };\n\nexport function CardRoot({ asChild, reveal, radius, tone, interactive, className, style, ...props }: CardRootProps) {\n const Comp = asChild ? Slot.Root : \"div\";\n const revealStyle =\n reveal === undefined ? style : ({ ...style, \"--kz-delay\": `${Math.min(Math.max(reveal, 0), 8) * 50}ms` } as React.CSSProperties);\n return (\n <Comp\n data-reveal={reveal === undefined ? undefined : \"\"}\n data-interactive={interactive ? \"\" : undefined}\n style={revealStyle}\n className={card({ radius, tone, interactive }).root({ className })}\n {...props}\n />\n );\n}\n\nconst ASPECT = { video: \"aspect-video\", square: \"aspect-square\", portrait: \"aspect-[3/4]\", auto: \"\" } as const;\nexport type CardMediaProps = React.ComponentProps<\"div\"> & {\n /** The ratio of the media: video (16:9) · square · portrait (3:4) · auto (the content's). */\n aspect?: keyof typeof ASPECT;\n};\n\nexport function CardMedia({ aspect = \"video\", className, ...props }: CardMediaProps) {\n return <div data-aspect={aspect} className={slots.media({ className: cn(ASPECT[aspect], className) })} {...props} />;\n}\n\nexport type CardImageProps = Omit<React.ComponentProps<\"img\">, \"src\"> & {\n /** The image's URL; `null` or nothing shows the `fallback`. */\n src?: string | null;\n /** Shown when there is no image: an icon, an illustration (decorative). */\n fallback?: React.ReactNode;\n /**\n * When the browser loads it: `lazy` (default, a card in a list or below the fold) or `eager` for the first cards\n * of a page — the image that is the largest contentful paint must not wait (add `fetchPriority=\"high\"`).\n * @default \"lazy\"\n */\n loading?: \"lazy\" | \"eager\";\n};\n\n/** The image of a media, or its `fallback` when there is none. `alt` is empty by default: the title names the card. */\nexport function CardImage({ src, alt = \"\", fallback, loading = \"lazy\", className, ...props }: CardImageProps) {\n if (!src) {\n return (\n <div data-fallback=\"\" aria-hidden className={slots.fallback({ className })}>\n {fallback}\n </div>\n );\n }\n return <img src={src} alt={alt} loading={loading} decoding=\"async\" className={slots.image({ className })} {...props} />;\n}\n\nconst CORNER = {\n \"top-left\": \"left-2.5 top-2.5\",\n \"top-right\": \"right-2.5 top-2.5\",\n \"bottom-left\": \"bottom-2.5 left-2.5\",\n \"bottom-right\": \"bottom-2.5 right-2.5\",\n} as const;\nexport type CardOverlayProps = React.ComponentProps<\"div\"> & {\n /** The corner of the media it sits in. */\n corner?: keyof typeof CORNER;\n};\n\n/** What sits on the media (badges, a caption). `scrim` and `fg-on-media` are invariant: nothing to do for light. */\nexport function CardOverlay({ corner = \"top-left\", className, ...props }: CardOverlayProps) {\n return <div data-corner={corner} className={slots.overlay({ className: cn(CORNER[corner], className) })} {...props} />;\n}\n\nexport type CardBodyProps = React.ComponentProps<\"div\"> & {\n /**\n * none · sm · md · lg.\n * @default \"md\"\n */\n padding?: CardVariants[\"padding\"];\n};\n\nexport function CardBody({ padding, className, ...props }: CardBodyProps) {\n return <div className={card({ padding }).body({ className })} {...props} />;\n}\n\nexport type CardTitleProps = React.ComponentProps<\"h3\"> & {\n /** The heading level, to fit the page's outline. */\n as?: \"h2\" | \"h3\" | \"h4\";\n};\n\nexport function CardTitle({ as: Tag = \"h3\", className, ...props }: CardTitleProps) {\n return <Tag className={slots.title({ className })} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p className={slots.description({ className })} {...props} />;\n}\n\nexport type CardStatProps = React.ComponentProps<\"div\"> & {\n /** What the figure is, in small capitals above it (the figure is the children). */\n label: React.ReactNode;\n};\n\n/** A figure put forward: the label in capitals, the value in tabular digits. */\nexport function CardStat({ label, className, children, ...props }: CardStatProps) {\n return (\n <div className={slots.stat({ className })} {...props}>\n <p className={slots.statLabel()}>{label}</p>\n <p className={slots.statValue()}>{children}</p>\n </div>\n );\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={slots.footer({ className })} {...props} />;\n}\n\n/** `Card.Root/Media/Image/Overlay/Body/Title/Description/Stat/Footer`. */\nexport const Card = {\n Root: CardRoot,\n Media: CardMedia,\n Image: CardImage,\n Overlay: CardOverlay,\n Body: CardBody,\n Title: CardTitle,\n Description: CardDescription,\n Stat: CardStat,\n Footer: CardFooter,\n};\n","// The card's parts, radii, tones and paddings, written once as classes of the Krizaka tokens: the web wears them with\n// `tv(cardRecipe)`, React Native reads the same classes into styles (native/card.tsx): a part of the card that exists only\n// on the web (the hover's tint) is simply ignored there.\nimport { defineRecipe } from \"../recipes/define\";\n\nexport const cardRecipe = defineRecipe({\n slots: {\n root:\n \"group relative flex flex-col overflow-hidden border border-border-default bg-surface-1 text-fg transition-colors \" +\n \"focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\",\n media: \"relative overflow-hidden bg-media\",\n image: \"h-full w-full object-cover\",\n fallback: \"flex h-full w-full items-center justify-center bg-linear-to-br from-accent/15 via-media to-accent-2/15 text-accent/60\",\n overlay: \"absolute z-10 flex items-center gap-1.5\",\n body: \"relative flex flex-1 flex-col gap-3\",\n title: \"line-clamp-1 text-sm font-semibold text-fg transition-colors group-hover:text-fg-accent\",\n description: \"line-clamp-2 text-xs text-fg-secondary\",\n stat: \"min-w-0\",\n statLabel: \"font-mono text-[11.5px] text-fg-secondary\",\n statValue: \"font-display text-xl font-black tabular-nums text-fg\",\n footer: \"relative mt-auto flex items-center gap-2 border-t border-border-subtle pt-3 text-xs text-fg-secondary\",\n },\n variants: {\n radius: { md: { root: \"rounded-md\" }, lg: { root: \"rounded-lg\" }, xl: { root: \"rounded-xl\" } },\n tone: { default: {}, elevated: { root: \"bg-surface-2 shadow-md\" }, glass: { root: \"bg-glass border-glass-border\" } },\n interactive: { true: { root: \"duration-150 hover:border-border-strong hover:bg-surface-2\" } },\n padding: { none: { body: \"p-0\" }, sm: { body: \"p-3\" }, md: { body: \"p-4\" }, lg: { body: \"p-6\" } },\n },\n defaultVariants: { radius: \"xl\", tone: \"default\", padding: \"md\" },\n});\n"],"mappings":"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","names":[]}