@krizaka/ui 2.6.0 → 2.9.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 (331) hide show
  1. package/README.md +37 -4
  2. package/dist/achievement.d.ts +54 -0
  3. package/dist/achievement.js +73 -0
  4. package/dist/achievement.js.map +1 -0
  5. package/dist/app-shell.d.ts +203 -0
  6. package/dist/app-shell.js +137 -0
  7. package/dist/app-shell.js.map +1 -0
  8. package/dist/auth-layout.d.ts +136 -0
  9. package/dist/auth-layout.js +75 -0
  10. package/dist/auth-layout.js.map +1 -0
  11. package/dist/choice-grid.d.ts +84 -0
  12. package/dist/choice-grid.js +141 -0
  13. package/dist/choice-grid.js.map +1 -0
  14. package/dist/chunk-555LWYIN.js +11 -0
  15. package/dist/chunk-555LWYIN.js.map +1 -0
  16. package/dist/chunk-AZPKXP3O.js +36 -0
  17. package/dist/chunk-AZPKXP3O.js.map +1 -0
  18. package/dist/chunk-NOVUREEC.js +274 -0
  19. package/dist/chunk-NOVUREEC.js.map +1 -0
  20. package/dist/chunk-VCAAHCHL.js +17 -0
  21. package/dist/chunk-VCAAHCHL.js.map +1 -0
  22. package/dist/code-block.js +23 -44
  23. package/dist/code-block.js.map +1 -1
  24. package/dist/continue-prompt.d.ts +48 -0
  25. package/dist/continue-prompt.js +200 -0
  26. package/dist/continue-prompt.js.map +1 -0
  27. package/dist/dashboard-layout.d.ts +139 -0
  28. package/dist/dashboard-layout.js +68 -0
  29. package/dist/dashboard-layout.js.map +1 -0
  30. package/dist/detail-layout.d.ts +126 -0
  31. package/dist/detail-layout.js +48 -0
  32. package/dist/detail-layout.js.map +1 -0
  33. package/dist/docs-layout.d.ts +78 -0
  34. package/dist/docs-layout.js +60 -0
  35. package/dist/docs-layout.js.map +1 -0
  36. package/dist/geometry-CXrAW34x.d.ts +19 -0
  37. package/dist/goal-gauge.d.ts +38 -0
  38. package/dist/goal-gauge.js +53 -0
  39. package/dist/goal-gauge.js.map +1 -0
  40. package/dist/index.d.ts +11 -2
  41. package/dist/index.js +89 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/landscape.d.ts +41 -0
  44. package/dist/landscape.js +836 -0
  45. package/dist/landscape.js.map +1 -0
  46. package/dist/marketing-layout.d.ts +60 -0
  47. package/dist/marketing-layout.js +25 -0
  48. package/dist/marketing-layout.js.map +1 -0
  49. package/dist/mascot-quote.d.ts +4 -3
  50. package/dist/mascot-quote.js +21 -1
  51. package/dist/mascot-quote.js.map +1 -1
  52. package/dist/mascot-state.d.ts +128 -0
  53. package/dist/mascot-state.js +95 -0
  54. package/dist/mascot-state.js.map +1 -0
  55. package/dist/mascots.d.ts +18 -20
  56. package/dist/mascots.js +65 -221
  57. package/dist/mascots.js.map +1 -1
  58. package/dist/native.d.ts +124 -7
  59. package/dist/native.js +641 -239
  60. package/dist/native.js.map +1 -1
  61. package/dist/profile-card.d.ts +85 -0
  62. package/dist/profile-card.js +87 -0
  63. package/dist/profile-card.js.map +1 -0
  64. package/dist/promise-card.d.ts +28 -0
  65. package/dist/promise-card.js +29 -0
  66. package/dist/promise-card.js.map +1 -0
  67. package/dist/scroll-stage.d.ts +603 -0
  68. package/dist/scroll-stage.js +59 -0
  69. package/dist/scroll-stage.js.map +1 -0
  70. package/dist/settings-layout.d.ts +154 -0
  71. package/dist/settings-layout.js +57 -0
  72. package/dist/settings-layout.js.map +1 -0
  73. package/dist/split-view.d.ts +106 -0
  74. package/dist/split-view.js +41 -0
  75. package/dist/split-view.js.map +1 -0
  76. package/dist/stage-banner.d.ts +34 -0
  77. package/dist/stage-banner.js +26 -0
  78. package/dist/stage-banner.js.map +1 -0
  79. package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
  80. package/dist/story.css +432 -0
  81. package/package.json +267 -10
  82. package/registry/achievement.json +322 -0
  83. package/registry/action-bar.json +1 -1
  84. package/registry/alert.json +1 -1
  85. package/registry/app-shell.json +451 -0
  86. package/registry/argument-card.json +1 -1
  87. package/registry/audio-player.json +1 -1
  88. package/registry/auth-layout.json +230 -0
  89. package/registry/avatar.json +1 -1
  90. package/registry/badge.json +1 -1
  91. package/registry/button.json +5 -5
  92. package/registry/card-grid.json +5 -5
  93. package/registry/card.json +3 -3
  94. package/registry/checkbox.json +1 -1
  95. package/registry/chip-link.json +1 -1
  96. package/registry/chip.json +1 -1
  97. package/registry/choice-grid.json +318 -0
  98. package/registry/code-block.json +1 -1
  99. package/registry/combobox.json +1 -1
  100. package/registry/command.json +1 -1
  101. package/registry/confirm-button.json +3 -3
  102. package/registry/continue-prompt.json +312 -0
  103. package/registry/countdown.json +1 -1
  104. package/registry/cta-panel.json +1 -1
  105. package/registry/dashboard-layout.json +273 -0
  106. package/registry/data-table.json +1 -1
  107. package/registry/date-picker.json +1 -1
  108. package/registry/decision-list.json +1 -1
  109. package/registry/detail-layout.json +233 -0
  110. package/registry/dialog.json +1 -1
  111. package/registry/docs-layout.json +148 -0
  112. package/registry/dropdown-menu.json +3 -3
  113. package/registry/empty-state.json +1 -1
  114. package/registry/examples/achievement/arcade.d.ts +4 -0
  115. package/registry/examples/achievement/arcade.js +15 -0
  116. package/registry/examples/achievement/arcade.tsx +12 -0
  117. package/registry/examples/achievement/milestones.d.ts +4 -0
  118. package/registry/examples/achievement/milestones.js +15 -0
  119. package/registry/examples/achievement/milestones.tsx +12 -0
  120. package/registry/examples/app-shell/admin-console.d.ts +4 -0
  121. package/registry/examples/app-shell/admin-console.js +52 -0
  122. package/registry/examples/app-shell/admin-console.tsx +64 -0
  123. package/registry/examples/app-shell/basic.d.ts +4 -0
  124. package/registry/examples/app-shell/basic.js +37 -0
  125. package/registry/examples/app-shell/basic.tsx +31 -0
  126. package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
  127. package/registry/examples/app-shell/orochia-studio.js +89 -0
  128. package/registry/examples/app-shell/orochia-studio.tsx +101 -0
  129. package/registry/examples/auth-layout/onboarding.d.ts +4 -0
  130. package/registry/examples/auth-layout/onboarding.js +56 -0
  131. package/registry/examples/auth-layout/onboarding.tsx +47 -0
  132. package/registry/examples/auth-layout/sign-in.d.ts +4 -0
  133. package/registry/examples/auth-layout/sign-in.js +55 -0
  134. package/registry/examples/auth-layout/sign-in.tsx +47 -0
  135. package/registry/examples/auth-layout/verify.d.ts +4 -0
  136. package/registry/examples/auth-layout/verify.js +23 -0
  137. package/registry/examples/auth-layout/verify.tsx +19 -0
  138. package/registry/examples/choice-grid/line-up.d.ts +4 -0
  139. package/registry/examples/choice-grid/line-up.js +37 -0
  140. package/registry/examples/choice-grid/line-up.tsx +32 -0
  141. package/registry/examples/choice-grid/plans.d.ts +4 -0
  142. package/registry/examples/choice-grid/plans.js +28 -0
  143. package/registry/examples/choice-grid/plans.tsx +24 -0
  144. package/registry/examples/continue-prompt/arcade.d.ts +4 -0
  145. package/registry/examples/continue-prompt/arcade.js +28 -0
  146. package/registry/examples/continue-prompt/arcade.tsx +25 -0
  147. package/registry/examples/continue-prompt/offer.d.ts +4 -0
  148. package/registry/examples/continue-prompt/offer.js +24 -0
  149. package/registry/examples/continue-prompt/offer.tsx +19 -0
  150. package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
  151. package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
  152. package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
  153. package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
  154. package/registry/examples/dashboard-layout/widgets.js +17 -0
  155. package/registry/examples/dashboard-layout/widgets.tsx +22 -0
  156. package/registry/examples/detail-layout/job.d.ts +4 -0
  157. package/registry/examples/detail-layout/job.js +25 -0
  158. package/registry/examples/detail-layout/job.tsx +20 -0
  159. package/registry/examples/detail-layout/video.d.ts +4 -0
  160. package/registry/examples/detail-layout/video.js +44 -0
  161. package/registry/examples/detail-layout/video.tsx +53 -0
  162. package/registry/examples/docs-layout/page.d.ts +4 -0
  163. package/registry/examples/docs-layout/page.js +26 -0
  164. package/registry/examples/docs-layout/page.tsx +30 -0
  165. package/registry/examples/goal-gauge/arcade.d.ts +4 -0
  166. package/registry/examples/goal-gauge/arcade.js +11 -0
  167. package/registry/examples/goal-gauge/arcade.tsx +10 -0
  168. package/registry/examples/goal-gauge/challenge.d.ts +4 -0
  169. package/registry/examples/goal-gauge/challenge.js +11 -0
  170. package/registry/examples/goal-gauge/challenge.tsx +10 -0
  171. package/registry/examples/goal-gauge/drain.d.ts +4 -0
  172. package/registry/examples/goal-gauge/drain.js +11 -0
  173. package/registry/examples/goal-gauge/drain.tsx +10 -0
  174. package/registry/examples/goal-gauge/native/default.d.ts +4 -0
  175. package/registry/examples/goal-gauge/native/default.dark.png +0 -0
  176. package/registry/examples/goal-gauge/native/default.js +15 -0
  177. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  178. package/registry/examples/goal-gauge/native/default.tsx +12 -0
  179. package/registry/examples/landscape/backdrop.d.ts +4 -0
  180. package/registry/examples/landscape/backdrop.js +14 -0
  181. package/registry/examples/landscape/backdrop.tsx +11 -0
  182. package/registry/examples/landscape/brand.d.ts +4 -0
  183. package/registry/examples/landscape/brand.js +11 -0
  184. package/registry/examples/landscape/brand.tsx +10 -0
  185. package/registry/examples/marketing-layout/basic.d.ts +4 -0
  186. package/registry/examples/marketing-layout/basic.js +31 -0
  187. package/registry/examples/marketing-layout/basic.tsx +28 -0
  188. package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
  189. package/registry/examples/marketing-layout/docs-hub.js +37 -0
  190. package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
  191. package/registry/examples/marketing-layout/pricing.d.ts +4 -0
  192. package/registry/examples/marketing-layout/pricing.js +45 -0
  193. package/registry/examples/marketing-layout/pricing.tsx +55 -0
  194. package/registry/examples/marketing-layout/product-page.d.ts +4 -0
  195. package/registry/examples/marketing-layout/product-page.js +79 -0
  196. package/registry/examples/marketing-layout/product-page.tsx +83 -0
  197. package/registry/examples/mascot-state/empty.d.ts +4 -0
  198. package/registry/examples/mascot-state/empty.js +22 -0
  199. package/registry/examples/mascot-state/empty.tsx +20 -0
  200. package/registry/examples/mascot-state/error.d.ts +4 -0
  201. package/registry/examples/mascot-state/error.js +23 -0
  202. package/registry/examples/mascot-state/error.tsx +21 -0
  203. package/registry/examples/mascot-state/loading.d.ts +4 -0
  204. package/registry/examples/mascot-state/loading.js +22 -0
  205. package/registry/examples/mascot-state/loading.tsx +16 -0
  206. package/registry/examples/mascot-state/native/default.d.ts +4 -0
  207. package/registry/examples/mascot-state/native/default.dark.png +0 -0
  208. package/registry/examples/mascot-state/native/default.js +25 -0
  209. package/registry/examples/mascot-state/native/default.light.png +0 -0
  210. package/registry/examples/mascot-state/native/default.tsx +19 -0
  211. package/registry/examples/mascot-state/success.d.ts +4 -0
  212. package/registry/examples/mascot-state/success.js +21 -0
  213. package/registry/examples/mascot-state/success.tsx +19 -0
  214. package/registry/examples/mascot-state/welcome.d.ts +4 -0
  215. package/registry/examples/mascot-state/welcome.js +21 -0
  216. package/registry/examples/mascot-state/welcome.tsx +19 -0
  217. package/registry/examples/mascots/flock.tsx +1 -1
  218. package/registry/examples/mascots/lovebird.d.ts +4 -0
  219. package/registry/examples/mascots/lovebird.js +19 -0
  220. package/registry/examples/mascots/lovebird.tsx +18 -0
  221. package/registry/examples/mascots/native/lovebird.d.ts +4 -0
  222. package/registry/examples/mascots/native/lovebird.dark.png +0 -0
  223. package/registry/examples/mascots/native/lovebird.js +21 -0
  224. package/registry/examples/mascots/native/lovebird.light.png +0 -0
  225. package/registry/examples/mascots/native/lovebird.tsx +18 -0
  226. package/registry/examples/mascots/native/phoenix.d.ts +4 -0
  227. package/registry/examples/mascots/native/phoenix.dark.png +0 -0
  228. package/registry/examples/mascots/native/phoenix.js +21 -0
  229. package/registry/examples/mascots/native/phoenix.light.png +0 -0
  230. package/registry/examples/mascots/native/phoenix.tsx +18 -0
  231. package/registry/examples/mascots/phoenix.d.ts +4 -0
  232. package/registry/examples/mascots/phoenix.js +14 -0
  233. package/registry/examples/mascots/phoenix.tsx +11 -0
  234. package/registry/examples/profile-card/arcade.d.ts +4 -0
  235. package/registry/examples/profile-card/arcade.js +25 -0
  236. package/registry/examples/profile-card/arcade.tsx +19 -0
  237. package/registry/examples/profile-card/creator.d.ts +4 -0
  238. package/registry/examples/profile-card/creator.js +31 -0
  239. package/registry/examples/profile-card/creator.tsx +26 -0
  240. package/registry/examples/profile-card/match.d.ts +4 -0
  241. package/registry/examples/profile-card/match.js +25 -0
  242. package/registry/examples/profile-card/match.tsx +19 -0
  243. package/registry/examples/profile-card/native/default.d.ts +4 -0
  244. package/registry/examples/profile-card/native/default.dark.png +0 -0
  245. package/registry/examples/profile-card/native/default.js +27 -0
  246. package/registry/examples/profile-card/native/default.light.png +0 -0
  247. package/registry/examples/profile-card/native/default.tsx +22 -0
  248. package/registry/examples/promise-card/arcade.d.ts +4 -0
  249. package/registry/examples/promise-card/arcade.js +25 -0
  250. package/registry/examples/promise-card/arcade.tsx +19 -0
  251. package/registry/examples/promise-card/guarantee.d.ts +4 -0
  252. package/registry/examples/promise-card/guarantee.js +23 -0
  253. package/registry/examples/promise-card/guarantee.tsx +17 -0
  254. package/registry/examples/scroll-stage/arcade.d.ts +4 -0
  255. package/registry/examples/scroll-stage/arcade.js +16 -0
  256. package/registry/examples/scroll-stage/arcade.tsx +15 -0
  257. package/registry/examples/scroll-stage/chapters.d.ts +4 -0
  258. package/registry/examples/scroll-stage/chapters.js +25 -0
  259. package/registry/examples/scroll-stage/chapters.tsx +22 -0
  260. package/registry/examples/settings-layout/account.d.ts +4 -0
  261. package/registry/examples/settings-layout/account.js +51 -0
  262. package/registry/examples/settings-layout/account.tsx +50 -0
  263. package/registry/examples/settings-layout/sections.d.ts +4 -0
  264. package/registry/examples/settings-layout/sections.js +27 -0
  265. package/registry/examples/settings-layout/sections.tsx +24 -0
  266. package/registry/examples/split-view/empty.d.ts +4 -0
  267. package/registry/examples/split-view/empty.js +19 -0
  268. package/registry/examples/split-view/empty.tsx +13 -0
  269. package/registry/examples/split-view/messages.d.ts +4 -0
  270. package/registry/examples/split-view/messages.js +49 -0
  271. package/registry/examples/split-view/messages.tsx +52 -0
  272. package/registry/examples/stage-banner/round.d.ts +4 -0
  273. package/registry/examples/stage-banner/round.js +14 -0
  274. package/registry/examples/stage-banner/round.tsx +11 -0
  275. package/registry/examples/stage-banner/steps.d.ts +4 -0
  276. package/registry/examples/stage-banner/steps.js +14 -0
  277. package/registry/examples/stage-banner/steps.tsx +11 -0
  278. package/registry/field.json +1 -1
  279. package/registry/file-upload.json +1 -1
  280. package/registry/filter-bar.json +1 -1
  281. package/registry/glow-card.json +1 -1
  282. package/registry/goal-gauge.json +322 -0
  283. package/registry/image-cropper.json +1 -1
  284. package/registry/index.json +337 -5
  285. package/registry/iso.json +1 -1
  286. package/registry/kbd.json +1 -1
  287. package/registry/landscape.json +189 -0
  288. package/registry/link-card.json +1 -1
  289. package/registry/loader.json +1 -1
  290. package/registry/marketing-layout.json +172 -0
  291. package/registry/marquee.json +1 -1
  292. package/registry/mascot-quote.json +6 -6
  293. package/registry/mascot-state.json +1249 -0
  294. package/registry/mascots.json +140 -23
  295. package/registry/media-capture.json +1 -1
  296. package/registry/meter.json +1 -1
  297. package/registry/nav-bar.json +1 -1
  298. package/registry/number-ticker.json +1 -1
  299. package/registry/page-header.json +1 -1
  300. package/registry/page-hero.json +3 -3
  301. package/registry/page.json +5 -5
  302. package/registry/pagination.json +1 -1
  303. package/registry/pointer-light.json +1 -1
  304. package/registry/popover.json +1 -1
  305. package/registry/profile-card.json +501 -0
  306. package/registry/progress.json +1 -1
  307. package/registry/promise-card.json +228 -0
  308. package/registry/radio-group.json +1 -1
  309. package/registry/scroll-stage.json +197 -0
  310. package/registry/search-field.json +1 -1
  311. package/registry/section-backdrop.json +1 -1
  312. package/registry/separator.json +1 -1
  313. package/registry/settings-layout.json +231 -0
  314. package/registry/skeleton.json +1 -1
  315. package/registry/slider.json +1 -1
  316. package/registry/slot.json +1 -1
  317. package/registry/spinner.json +1 -1
  318. package/registry/split-view.json +233 -0
  319. package/registry/stage-banner.json +221 -0
  320. package/registry/stat.json +1 -1
  321. package/registry/stepper.json +1 -1
  322. package/registry/switch.json +1 -1
  323. package/registry/tabs.json +1 -1
  324. package/registry/tag-input.json +1 -1
  325. package/registry/terminal-replay.json +1 -1
  326. package/registry/theme.json +1 -1
  327. package/registry/toast.json +1 -1
  328. package/registry/toc.json +1 -1
  329. package/registry/tooltip.json +1 -1
  330. package/registry/video-player.json +1 -1
  331. package/registry/video-trimmer.json +1 -1
package/dist/story.css ADDED
@@ -0,0 +1,432 @@
1
+ /* @krizaka/ui — the storytelling kit (ScrollStage, Scene, ChoiceGrid, ProfileCard, StatGauge, StageBanner, GoalGauge,
2
+ PromiseCard, ContinuePrompt, Achievement). The app imports it once, from its root layout or its global stylesheet, by
3
+ package path: `import "@krizaka/ui/story.css"`. Plain CSS on the --kz-* tokens: dark and light alike, every brand
4
+ (`.brand-<id>`) through --kz-accent.
5
+
6
+ Two looks, one structure:
7
+ - the default is sober — surfaces, hairlines, one accent, a short fade and gauges that fill: at home in a business
8
+ app, a dating app or a creator platform;
9
+ - `variant="arcade"` (on a component, or once on its ScrollStage: the class `kzs-arcade`) is the opt-in flavour of a
10
+ 1990s cabinet poster — the brand's light on each card, mono capitals, skewed gauges, corners that lock, a scanline
11
+ texture, a CRT. Every shape is Krizaka's own: no sprite, name, typeface or sound of any game.
12
+
13
+ Motion contract: a scene (`[data-kzs-scene]`) plays its entrance ONCE, when it first enters the viewport, in order —
14
+ the visual, then the announcement, then the words; at most one slow, faint loop per scene (`.kzs-loop`), running only
15
+ while the scene is on screen (`[data-live]`); nothing is held invisible before the stage has switched motion on
16
+ (`[data-kzs-stage="on"]`), and nothing moves at all under prefers-reduced-motion. */
17
+
18
+ /* `A` = the arcade scope of a component: on the component itself or on an ancestor (its ScrollStage). Written out below
19
+ as `:is(.kzs-x.kzs-arcade, .kzs-arcade .kzs-x)`. */
20
+
21
+ /* ─── Shared ─── */
22
+ .kzs-texture, .kzs-scan { position: absolute; inset: 0; pointer-events: none; border-radius: inherit; display: none; }
23
+ .kzs-scan { overflow: hidden; }
24
+ .kzs-scan::before { content: ""; position: absolute; left: 0; right: 0; height: 30%; top: -30%;
25
+ background: linear-gradient(to bottom, transparent, color-mix(in srgb, var(--kz-text-primary) 6%, transparent), transparent); }
26
+ :is(.kzs-arcade .kzs-texture, .kzs-texture.kzs-arcade) { display: block;
27
+ background: repeating-linear-gradient(to bottom, color-mix(in srgb, var(--kz-text-primary) 4%, transparent) 0 1px, transparent 1px 4px); }
28
+ .kzs-arcade .kzs-scan { display: block; }
29
+
30
+ /* ─── StatGauge (ProfileCard, ChoiceGrid tiles) ─── */
31
+ .kzs-stat { display: grid; gap: 6px; width: 100%; text-align: left; }
32
+ .kzs-stat-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 12.5px; }
33
+ .kzs-stat-label { color: var(--kz-text-secondary); }
34
+ .kzs-stat-value { color: var(--kz-text-primary); font-weight: 600; font-variant-numeric: tabular-nums; }
35
+ .kzs-bar { position: relative; display: block; width: 100%; height: 6px; border-radius: 999px; overflow: hidden; background: var(--kz-surface-3); }
36
+ .kzs-bar-fill { position: absolute; inset: 0; border-radius: inherit; transform-origin: left center; transform: scaleX(var(--kzs-ratio, 1)); background: var(--kz-accent); }
37
+
38
+ .kzs-arcade .kzs-stat { gap: 7px; padding: 0 4px; }
39
+ .kzs-arcade .kzs-stat-label { font-family: var(--kz-font-mono); font-size: 10px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; }
40
+ .kzs-arcade .kzs-stat-value { font-family: var(--kz-font-display); font-size: 15px; font-weight: 800; color: var(--kz-accent-text); }
41
+ .kzs-arcade .kzs-bar { height: 9px; border-radius: 3px; transform: skewX(-16deg); background: var(--kz-surface-2); border: 1px solid var(--kz-border-subtle); }
42
+ .kzs-arcade .kzs-bar-fill { inset: 0 auto 0 0; width: calc(var(--kzs-ratio, 1) * 100%); transform: none; border-radius: 0;
43
+ background: linear-gradient(90deg, var(--kz-accent), var(--kz-accent-2, var(--kz-accent))); box-shadow: 0 0 12px color-mix(in oklab, var(--kz-accent) 70%, transparent); }
44
+ .kzs-arcade .kzs-bar-fill::after { content: ""; position: absolute; inset: 0;
45
+ background: repeating-linear-gradient(90deg, transparent 0 10px, color-mix(in srgb, var(--kz-surface-0) 45%, transparent) 10px 12px); }
46
+
47
+ /* ─── ChoiceGrid ─── */
48
+ .kzs-choice { position: relative; width: 100%; margin-inline: auto; }
49
+ .kzs-choice-head { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 4px 12px; margin: 0 0 14px; font-size: 13px; }
50
+ .kzs-choice-tag { font-family: var(--kz-font-mono); font-size: 11px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--kz-accent-text); }
51
+ .kzs-choice-sep { width: 4px; height: 4px; border-radius: 50%; background: var(--kz-border-strong); }
52
+ .kzs-choice-caption { color: var(--kz-text-secondary); }
53
+ .kzs-choice-prompt { position: relative; margin: 0 0 20px; text-align: center; font-family: var(--kz-font-display); font-size: clamp(1.05rem, 1.8vw, 1.25rem);
54
+ font-weight: 700; letter-spacing: -.01em; color: var(--kz-text-primary); }
55
+ .kzs-choice-grid { position: relative; list-style: none; margin: 0; padding: 0; display: grid;
56
+ grid-template-columns: repeat(var(--kzs-cols, 3), minmax(0, 1fr)); gap: clamp(10px, 2vw, 20px); }
57
+ .kzs-choice-slot { display: flex; min-width: 0; }
58
+ .kzs-choice-item { position: relative; isolation: isolate; flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; min-width: 0; overflow: hidden;
59
+ padding: clamp(14px, 2.4vw, 20px) clamp(10px, 2vw, 16px); border-radius: 16px; border: 1px solid var(--kz-border-subtle); background: var(--kz-surface-1);
60
+ color: var(--kz-text-primary); font: inherit; text-align: center; text-decoration: none;
61
+ transition: border-color .2s ease, transform .25s var(--kz-ease), box-shadow .2s ease; }
62
+ button.kzs-choice-item { cursor: pointer; width: 100%; }
63
+ button.kzs-choice-item:disabled { cursor: not-allowed; opacity: .5; }
64
+ .kzs-choice-item:is(:hover, :focus-visible):not(:disabled) { border-color: var(--kz-border-default); transform: translateY(-2px); }
65
+ .kzs-choice-item:focus-visible { outline: 2px solid var(--kz-ring, var(--kz-accent)); outline-offset: 2px; }
66
+ .kzs-choice-item[aria-checked="true"] { border-color: var(--kz-accent); box-shadow: 0 0 0 3px var(--kz-accent-soft); }
67
+ .kzs-choice-top { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 8px; }
68
+ .kzs-choice-badge { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; background: var(--kz-accent-soft); color: var(--kz-accent-text); }
69
+ .kzs-choice-eyebrow { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--kz-text-secondary); }
70
+ .kzs-choice-frame { position: relative; display: grid; place-items: center; width: clamp(64px, 15vw, 96px); aspect-ratio: 1; border-radius: 50%; background: var(--kz-surface-2); }
71
+ .kzs-choice-aura, .kzs-choice-flash, .kzs-choice-floor, .kzs-corner { display: none; }
72
+ .kzs-choice-visual { position: relative; display: grid; place-items: center; transition: transform .3s var(--kz-ease); }
73
+ .kzs-choice-name { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; margin-top: 4px; font-size: 14px; font-weight: 600; color: var(--kz-text-primary); }
74
+ .kzs-choice-title { font-size: 12.5px; line-height: 1.4; color: var(--kz-text-secondary); }
75
+ .kzs-choice-extra { display: block; width: 100%; margin-top: 6px; }
76
+ .kzs-choice-meta { display: inline-flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 12.5px; font-weight: 600; color: var(--kz-accent-text); }
77
+ .kzs-choice-check { position: absolute; top: 10px; right: 10px; width: 18px; height: 18px; border-radius: 50%; display: none; place-items: center;
78
+ background: var(--kz-accent); color: var(--kz-on-accent); }
79
+ .kzs-choice-item[aria-checked="true"] .kzs-choice-check { display: grid; }
80
+
81
+ /* arcade: the select screen — fighter cards in their brand's light, a pedestal, corners that close in, a flash */
82
+ .kzs-arcade .kzs-choice-head { gap: 6px 14px; font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 800; letter-spacing: .22em; text-transform: uppercase; }
83
+ .kzs-arcade .kzs-choice-tag { font-size: 10.5px; font-weight: 800; letter-spacing: .22em; }
84
+ .kzs-arcade .kzs-choice-sep { width: 28px; height: 1px; border-radius: 0; }
85
+ .kzs-arcade .kzs-choice-prompt { margin: 14px 0 26px; font-size: clamp(1.05rem, 1.8vw, 1.3rem); }
86
+ .kzs-arcade .kzs-choice-prompt::before { content: "▶"; margin-right: 10px; font-size: .7em; color: var(--kz-accent-text); }
87
+ .kzs-arcade .kzs-choice-grid { gap: clamp(14px, 2vw, 24px); }
88
+ .kzs-arcade .kzs-choice-item { gap: 8px; padding: 16px 18px 18px; border-radius: 22px;
89
+ background:
90
+ radial-gradient(120% 70% at 50% 0%, color-mix(in oklab, var(--kz-accent) 24%, transparent), transparent 62%),
91
+ linear-gradient(180deg, color-mix(in srgb, var(--kz-surface-1) 88%, transparent), color-mix(in srgb, var(--kz-surface-0) 92%, transparent));
92
+ border-color: color-mix(in srgb, var(--kz-accent) 32%, var(--kz-border-subtle));
93
+ box-shadow: 0 24px 60px -36px var(--kz-accent), inset 0 1px 0 color-mix(in srgb, var(--kz-on-accent) 8%, transparent);
94
+ transition: transform .35s var(--kz-ease), border-color .3s ease, box-shadow .35s var(--kz-ease); }
95
+ html.light .kzs-arcade .kzs-choice-item { background: radial-gradient(120% 70% at 50% 0%, color-mix(in oklab, var(--kz-accent) 14%, transparent), transparent 62%), var(--kz-surface-0);
96
+ box-shadow: 0 24px 50px -36px var(--kz-accent); }
97
+ .kzs-arcade .kzs-choice-aura { display: block; position: absolute; z-index: -1; left: 50%; top: 92px; width: 190px; aspect-ratio: 1; margin-left: -95px; border-radius: 50%;
98
+ background: radial-gradient(closest-side, color-mix(in oklab, var(--kz-accent) 45%, transparent), transparent); opacity: .7; transition: opacity .35s ease, transform .35s var(--kz-ease); }
99
+ .kzs-arcade .kzs-choice-flash { display: block; position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: 0; transform: translateX(-100%);
100
+ background: linear-gradient(115deg, transparent 30%, color-mix(in srgb, var(--kz-on-accent) 40%, transparent) 48%, color-mix(in oklab, var(--kz-accent) 30%, transparent) 54%, transparent 70%); }
101
+ .kzs-arcade .kzs-corner { display: block; position: absolute; width: 18px; height: 18px; border: 2px solid var(--kz-accent); opacity: .85; transition: transform .3s var(--kz-ease), opacity .3s ease; }
102
+ .kzs-arcade .kzs-choice-item[data-selectable]:not([aria-checked="true"]) .kzs-corner { opacity: 0; }
103
+ .kzs-corner[data-at="tl"] { top: 8px; left: 8px; border-right: 0; border-bottom: 0; border-top-left-radius: 8px; }
104
+ .kzs-corner[data-at="tr"] { top: 8px; right: 8px; border-left: 0; border-bottom: 0; border-top-right-radius: 8px; }
105
+ .kzs-corner[data-at="bl"] { bottom: 8px; left: 8px; border-right: 0; border-top: 0; border-bottom-left-radius: 8px; }
106
+ .kzs-corner[data-at="br"] { bottom: 8px; right: 8px; border-left: 0; border-top: 0; border-bottom-right-radius: 8px; }
107
+ .kzs-arcade .kzs-choice-top { padding: 4px 6px 0; }
108
+ .kzs-arcade .kzs-choice-badge { font-family: var(--kz-font-mono); font-size: 10px; font-weight: 900; letter-spacing: .1em; padding: 2px 7px; border-radius: 5px;
109
+ background: var(--kz-accent); color: var(--kz-on-accent); }
110
+ .kzs-arcade .kzs-choice-eyebrow { font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 800; letter-spacing: .18em; text-transform: uppercase; color: var(--kz-accent-text); }
111
+ .kzs-arcade .kzs-choice-frame { width: 100%; height: 150px; aspect-ratio: auto; border-radius: 0; background: none; }
112
+ .kzs-arcade .kzs-choice-floor { display: block; position: absolute; left: 50%; bottom: 14px; width: 150px; height: 26px; margin-left: -75px; border-radius: 50%;
113
+ background: radial-gradient(closest-side, color-mix(in oklab, var(--kz-accent) 55%, transparent), transparent); border: 1px solid color-mix(in srgb, var(--kz-accent) 35%, transparent); }
114
+ .kzs-arcade .kzs-choice-visual { filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--kz-on-accent) 45%, transparent)) drop-shadow(0 16px 20px color-mix(in oklab, var(--kz-accent) 50%, transparent));
115
+ transition: transform .4s var(--kz-ease); }
116
+ .kzs-arcade .kzs-choice-name { margin-top: 0; font-family: var(--kz-font-display); font-size: clamp(1.4rem, 2.4vw, 1.75rem); font-weight: 800; letter-spacing: -.03em; line-height: 1; }
117
+ .kzs-arcade .kzs-choice-title { font-size: 13px; margin-bottom: 6px; }
118
+ .kzs-arcade .kzs-choice-meta { font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 800; letter-spacing: .18em; text-transform: uppercase;
119
+ color: var(--kz-text-secondary); transition: color .25s ease; }
120
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible):not(:disabled), .kzs-arcade .kzs-choice-item[aria-checked="true"] { transform: translateY(-6px); border-color: var(--kz-accent);
121
+ box-shadow: 0 34px 80px -30px var(--kz-accent), inset 0 0 0 1px color-mix(in srgb, var(--kz-accent) 50%, transparent); }
122
+ .kzs-arcade .kzs-choice-item:focus-visible { outline-offset: 4px; }
123
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-choice-aura { opacity: 1; transform: scale(1.15); }
124
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-choice-visual { transform: translateY(-4px) scale(1.06); }
125
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-corner { opacity: 1; }
126
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-corner[data-at="tl"] { transform: translate(4px, 4px); }
127
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-corner[data-at="tr"] { transform: translate(-4px, 4px); }
128
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-corner[data-at="bl"] { transform: translate(4px, -4px); }
129
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-corner[data-at="br"] { transform: translate(-4px, -4px); }
130
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-choice-meta { color: var(--kz-accent-text); }
131
+ .kzs-arcade .kzs-choice-item[aria-checked="true"] .kzs-choice-check { display: none; }
132
+
133
+ /* Phones: one tile per row; arcade: a fighter card on its side. */
134
+ @media (max-width: 680px) {
135
+ .kzs-choice-grid { grid-template-columns: 1fr; gap: 12px; }
136
+ .kzs-choice-item { display: grid; grid-template-columns: 72px minmax(0, 1fr); grid-template-areas: "top top" "frame name" "frame title" "extra extra" "meta meta";
137
+ column-gap: 14px; row-gap: 2px; align-items: center; text-align: left; }
138
+ .kzs-choice-top { grid-area: top; padding-bottom: 6px; }
139
+ .kzs-choice-frame { grid-area: frame; width: 72px; }
140
+ .kzs-choice-name { grid-area: name; align-self: end; margin: 0; }
141
+ .kzs-choice-title { grid-area: title; align-self: start; margin: 0; }
142
+ .kzs-choice-extra { grid-area: extra; margin-top: 8px; }
143
+ .kzs-choice-meta { grid-area: meta; justify-self: end; }
144
+ .kzs-arcade .kzs-choice-item { grid-template-columns: 104px minmax(0, 1fr); padding: 14px 16px 16px; }
145
+ .kzs-arcade .kzs-choice-frame { width: auto; height: 96px; }
146
+ .kzs-arcade .kzs-choice-floor { width: 92px; margin-left: -46px; bottom: 6px; height: 18px; }
147
+ .kzs-arcade .kzs-choice-visual { transform: scale(.78); }
148
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-choice-visual { transform: scale(.82); }
149
+ .kzs-arcade .kzs-choice-aura { top: 40px; left: 64px; width: 130px; margin-left: -65px; }
150
+ }
151
+
152
+ /* ─── ProfileCard ─── */
153
+ .kzs-profile { position: relative; display: flex; flex-direction: column; align-items: center; gap: 14px; width: 100%; max-width: 320px;
154
+ padding: 24px 22px 20px; border-radius: 20px; border: 1px solid var(--kz-border-subtle); background: var(--kz-surface-1); overflow: hidden; }
155
+ .kzs-profile-disc { position: relative; width: var(--kzs-disc, 132px); height: var(--kzs-disc, 132px); display: grid; place-items: center; border-radius: 50%;
156
+ background: var(--kz-surface-2); border: 1px solid color-mix(in srgb, var(--kz-accent) 30%, var(--kz-border-subtle)); }
157
+ .kzs-profile-visual { position: relative; display: grid; place-items: center; width: 100%; height: 100%; border-radius: 50%; overflow: hidden; transition: transform .4s var(--kz-ease); }
158
+ .kzs-profile-visual > img { width: 100%; height: 100%; object-fit: cover; }
159
+ .kzs-profile-ring, .kzs-profile-aura, .kzs-profile-flash { display: none; }
160
+ .kzs-profile-name { display: inline-flex; align-items: center; gap: 7px; max-width: 100%; margin: 0; font-family: var(--kz-font-display); font-size: 17px; font-weight: 700;
161
+ letter-spacing: -.01em; color: var(--kz-text-primary); }
162
+ .kzs-profile-name > span[aria-hidden] { display: inline-flex; color: var(--kz-accent-text); }
163
+ .kzs-profile-stats { display: grid; gap: 10px; width: 100%; margin: 0; padding: 0; list-style: none; }
164
+ .kzs-profile-caption { margin: 0; font-size: 13px; line-height: 1.5; color: var(--kz-text-secondary); text-align: center; }
165
+ .kzs-profile-extra { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; width: 100%; }
166
+
167
+ /* arcade: the fighter card — the brand's light from the top, a ring around the portrait, a breathing aura */
168
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) { --kzs-disc: 196px; gap: 16px; max-width: 340px; padding: 30px 24px 24px; border-radius: 26px;
169
+ background: linear-gradient(180deg, color-mix(in oklab, var(--kz-accent) 20%, var(--kz-surface-1)), var(--kz-surface-1) 62%);
170
+ border-color: color-mix(in srgb, var(--kz-accent) 38%, var(--kz-border-subtle));
171
+ box-shadow: 0 40px 90px -50px var(--kz-accent), inset 0 1px 0 color-mix(in srgb, var(--kz-on-accent) 10%, transparent); }
172
+ html.light :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) { background: linear-gradient(180deg, color-mix(in oklab, var(--kz-accent) 12%, var(--kz-surface-0)), var(--kz-surface-0) 62%); }
173
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-disc { border: 0; background: radial-gradient(circle at 50% 38%, var(--kz-surface-2), var(--kz-surface-0) 74%); }
174
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-visual { overflow: visible;
175
+ filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--kz-on-accent) 45%, transparent)) drop-shadow(0 16px 20px color-mix(in oklab, var(--kz-accent) 50%, transparent)); }
176
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-ring { display: block; position: absolute; inset: -8px; border-radius: 50%;
177
+ background: conic-gradient(from 210deg, var(--kz-accent), transparent 28%, color-mix(in srgb, var(--kz-accent-2, var(--kz-accent)) 80%, transparent) 52%, transparent 78%, var(--kz-accent));
178
+ -webkit-mask: radial-gradient(closest-side, transparent calc(100% - 3px), black calc(100% - 2px)); mask: radial-gradient(closest-side, transparent calc(100% - 3px), black calc(100% - 2px)); }
179
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-aura { display: block; position: absolute; inset: -18px; border-radius: 50%;
180
+ background: radial-gradient(circle, color-mix(in srgb, var(--kz-accent) 34%, transparent), transparent 70%); opacity: .5; filter: blur(10px); }
181
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-flash { display: block; position: absolute; inset: 0; border-radius: 50%; border: 2px solid var(--kz-accent); opacity: 0; pointer-events: none; }
182
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile):hover .kzs-profile-visual { transform: scale(1.05); }
183
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-name { gap: 8px; font-family: var(--kz-font-mono); font-size: 11.5px; font-weight: 800; letter-spacing: .2em;
184
+ text-transform: uppercase; color: var(--kz-accent-text); }
185
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-caption { font-family: var(--kz-font-mono); font-size: 12px; }
186
+ @media (max-width: 760px) { :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) { --kzs-disc: 156px; max-width: 300px; padding: 24px 20px 20px; } }
187
+
188
+ /* ─── StageBanner ─── */
189
+ .kzs-banner { position: relative; display: inline-flex; align-items: baseline; gap: 10px; margin: 0; font-size: 13px; }
190
+ .kzs-banner-stage { font-family: var(--kz-font-mono); font-size: 11.5px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--kz-accent-text); }
191
+ .kzs-banner-name { color: var(--kz-text-secondary); font-weight: 500; }
192
+ .kzs-banner[data-size="lg"] { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
193
+ .kzs-banner-title { margin: 0; font-family: var(--kz-font-display); font-size: clamp(1.4rem, 3.2vw, 2rem); font-weight: 700; letter-spacing: -.02em; line-height: 1.15; color: var(--kz-text-primary); }
194
+ .kzs-banner-sub { margin: 0; max-width: 34rem; font-size: 15px; line-height: 1.6; color: var(--kz-text-secondary); }
195
+ .kzs-banner-sweep { display: none; }
196
+
197
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner):not([data-size="lg"]) { align-items: center; padding: 6px 16px; border-radius: 6px; transform: skewX(-10deg); overflow: hidden;
198
+ border: 1px solid color-mix(in srgb, var(--kz-accent) 30%, var(--kz-border-subtle)); border-left: 4px solid var(--kz-accent);
199
+ background: color-mix(in srgb, var(--kz-surface-1) 80%, transparent); }
200
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner):not([data-size="lg"]) > span { transform: skewX(10deg); }
201
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner) .kzs-banner-stage { font-weight: 900; letter-spacing: .18em; }
202
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner) .kzs-banner-name { font-family: var(--kz-font-mono); font-size: 11.5px; font-weight: 800; letter-spacing: .16em;
203
+ text-transform: uppercase; color: var(--kz-text-primary); }
204
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner) .kzs-banner-sweep { display: block; position: absolute; inset: 0; width: 40%; opacity: 0; pointer-events: none;
205
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--kz-accent) 40%, transparent), transparent); }
206
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] { gap: 10px; }
207
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-stage { display: inline-flex; align-items: center; gap: 14px; font-size: 12px; letter-spacing: .34em; transform: skewX(-8deg); }
208
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-stage::before,
209
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-stage::after { content: ""; width: 44px; height: 2px; background: linear-gradient(90deg, transparent, var(--kz-accent-2, var(--kz-accent))); }
210
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-stage::after { transform: scaleX(-1); }
211
+ :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-title { font-size: clamp(2.4rem, 7vw, 4.6rem); font-weight: 800; letter-spacing: -.045em; line-height: 1; padding-bottom: .06em;
212
+ background: linear-gradient(180deg, var(--kz-text-primary) 20%, var(--kz-accent-text) 70%, var(--kz-accent-2, var(--kz-accent))); -webkit-background-clip: text; background-clip: text; color: transparent; }
213
+
214
+ /* ─── GoalGauge ─── */
215
+ .kzs-gauge { display: grid; gap: 8px; width: 100%; max-width: 560px; }
216
+ .kzs-gauge-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 12.5px; }
217
+ .kzs-gauge-label { color: var(--kz-text-secondary); }
218
+ .kzs-gauge-value { color: var(--kz-text-primary); font-weight: 600; font-variant-numeric: tabular-nums; }
219
+ .kzs-gauge-cells { display: grid; grid-template-columns: repeat(var(--kzs-segments, 8), minmax(0, 1fr)); gap: 4px; }
220
+ .kzs-gauge-cell { height: 8px; border-radius: 999px; background: var(--kz-surface-3); }
221
+ .kzs-gauge-cell[data-lit] { background: var(--kz-accent); }
222
+
223
+ :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-head { justify-content: center; font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; }
224
+ :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-value { display: none; }
225
+ :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cells { padding: 4px; border-radius: 4px; transform: skewX(-16deg);
226
+ border: 1px solid color-mix(in srgb, var(--kz-accent) 35%, var(--kz-border-subtle)); background: var(--kz-surface-1); }
227
+ :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cell { height: 12px; border-radius: 1px; opacity: .14;
228
+ background: linear-gradient(90deg, var(--kz-accent), var(--kz-accent-2, var(--kz-accent))); }
229
+ :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cell[data-lit] { opacity: 1; }
230
+
231
+ /* ─── PromiseCard ─── */
232
+ .kzs-promise { position: relative; overflow: hidden; padding: 16px 18px 14px; border-radius: 16px; max-width: 34rem; text-align: left;
233
+ background: var(--kz-surface-1); border: 1px solid var(--kz-border-subtle); border-left: 3px solid var(--kz-accent); }
234
+ .kzs-promise-flash { display: none; }
235
+ .kzs-promise-head { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
236
+ .kzs-promise-label { font-size: 12px; font-weight: 600; color: var(--kz-accent-text); }
237
+ .kzs-promise-keys { display: inline-flex; flex-wrap: wrap; gap: 5px; }
238
+ .kzs-key { display: inline-grid; place-items: center; min-width: 24px; height: 24px; padding: 0 6px; border-radius: 6px;
239
+ font-family: var(--kz-font-mono); font-size: 11.5px; font-weight: 600; color: var(--kz-text-primary);
240
+ background: var(--kz-surface-2); border: 1px solid var(--kz-border-default); box-shadow: 0 1px 0 var(--kz-border-strong); }
241
+ .kzs-promise-text { position: relative; margin: 10px 0 12px; font-family: var(--kz-font-display); font-size: clamp(1.15rem, 2vw, 1.35rem); font-weight: 700;
242
+ letter-spacing: -.015em; line-height: 1.2; color: var(--kz-text-primary); }
243
+ .kzs-promise-bearer { position: relative; display: flex; align-items: center; gap: 12px; padding-top: 12px; border-top: 1px solid var(--kz-border-subtle); }
244
+ .kzs-promise-bird { display: inline-flex; flex: none; }
245
+ .kzs-promise-who { display: grid; gap: 2px; }
246
+ .kzs-promise-bearer-label { font-size: 11.5px; color: var(--kz-text-secondary); }
247
+ .kzs-promise-name { font-size: 13.5px; font-weight: 600; color: var(--kz-text-primary); }
248
+
249
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) { padding: 18px 20px 16px; border-radius: 18px; border: 1px solid color-mix(in srgb, var(--kz-accent) 40%, var(--kz-border-subtle));
250
+ background: linear-gradient(120deg, color-mix(in oklab, var(--kz-accent) 16%, var(--kz-surface-1)), var(--kz-surface-1) 70%); box-shadow: 0 22px 50px -34px var(--kz-accent); }
251
+ html.light :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) { background: linear-gradient(120deg, color-mix(in oklab, var(--kz-accent) 9%, var(--kz-surface-0)), var(--kz-surface-0) 70%); }
252
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-flash { display: block; position: absolute; inset: 0; pointer-events: none; opacity: 0;
253
+ background: radial-gradient(60% 120% at 20% 50%, color-mix(in oklab, var(--kz-accent) 45%, transparent), transparent 70%); }
254
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-label { font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 900; letter-spacing: .2em; text-transform: uppercase; }
255
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-key { min-width: 26px; height: 26px; border-radius: 7px; font-size: 12px; font-weight: 800; box-shadow: 0 2px 0 var(--kz-border-strong); }
256
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-text { font-weight: 800; font-size: clamp(1.3rem, 2.4vw, 1.6rem); letter-spacing: -.025em; line-height: 1.15; }
257
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-bearer { border-top: 1px dashed color-mix(in srgb, var(--kz-accent) 30%, var(--kz-border-subtle)); }
258
+ :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-bearer-label { font-family: var(--kz-font-mono); font-size: 10px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; }
259
+
260
+ /* ─── ContinuePrompt ─── */
261
+ .kzs-prompt { position: relative; width: 100%; max-width: 560px; margin-inline: auto; padding: 16px; border-radius: 22px; text-align: center;
262
+ background: var(--kz-surface-1); border: 1px solid var(--kz-border-default); box-shadow: var(--kz-shadow-md); }
263
+ .kzs-prompt-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 0 6px 12px; font-size: 12px; color: var(--kz-text-secondary); }
264
+ .kzs-prompt-screw, .kzs-prompt-glass { display: none; }
265
+ .kzs-prompt-screen { position: relative; overflow: hidden; padding: clamp(20px, 4vw, 32px) clamp(16px, 4vw, 32px); border-radius: 16px;
266
+ background: var(--kz-surface-2); color: var(--kz-text-primary); }
267
+ .kzs-prompt-content { position: relative; display: grid; justify-items: center; gap: 14px; }
268
+ .kzs-prompt-head { display: inline-flex; align-items: center; gap: 14px; }
269
+ .kzs-prompt-title { font-family: var(--kz-font-display); font-size: clamp(1.2rem, 3vw, 1.6rem); font-weight: 700; letter-spacing: -.015em; }
270
+ .kzs-prompt-count { position: relative; display: inline-grid; place-items: center; min-width: 1.8em; height: 1.8em; padding: 0 6px; border-radius: 10px;
271
+ font-family: var(--kz-font-display); font-size: clamp(1.2rem, 3vw, 1.5rem); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--kz-accent-text); background: var(--kz-accent-soft); }
272
+ .kzs-prompt-count::after { position: absolute; inset: 0; display: grid; place-items: center; color: var(--kz-accent-text); }
273
+ .kzs-prompt-deck { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; }
274
+ .kzs-prompt-coin { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-size: 12.5px; color: var(--kz-text-secondary); }
275
+ .kzs-prompt-highlight { color: var(--kz-accent-text); font-weight: 600; }
276
+ .kzs-prompt-status { display: inline-flex; align-items: center; gap: 6px; }
277
+ .kzs-prompt-led { width: 7px; height: 7px; border-radius: 50%; background: var(--kz-success); }
278
+ .kzs-prompt-action { gap: 10px; margin-left: auto; }
279
+ .kzs-prompt-key { font-family: var(--kz-font-mono); font-size: 10.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; padding: 3px 7px; border-radius: 6px;
280
+ background: color-mix(in srgb, currentColor 16%, transparent); }
281
+ .kzs-prompt-icon { display: inline-flex; }
282
+
283
+ /* arcade: the cabinet — screws, a CRT with its glass and its scan band, a coin deck with a lit LED */
284
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) { max-width: 780px; padding: 16px 16px 18px; border-radius: 32px; border-color: var(--kz-border-strong);
285
+ background: linear-gradient(180deg, var(--kz-surface-2), var(--kz-surface-1));
286
+ box-shadow: var(--kz-shadow-lg), 0 60px 140px -70px var(--kz-accent), inset 0 1px 0 color-mix(in srgb, var(--kz-on-accent) 10%, transparent); }
287
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-top { margin: 0 8px 12px; font-family: var(--kz-font-mono); font-size: 9.5px; font-weight: 800; letter-spacing: .2em; text-transform: uppercase; }
288
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-screw { display: block; width: 8px; height: 8px; border-radius: 50%; background: var(--kz-border-strong);
289
+ box-shadow: inset 0 1px 1px color-mix(in srgb, var(--kz-surface-0) 60%, transparent); }
290
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-screen { border-radius: 34px / 28px; padding: clamp(28px, 5vw, 52px) clamp(20px, 5vw, 56px) clamp(30px, 5vw, 50px);
291
+ background: radial-gradient(ellipse 90% 80% at 50% 40%, color-mix(in oklab, var(--kz-accent) 16%, var(--kz-surface-0)), var(--kz-surface-0) 78%);
292
+ border: 1px solid color-mix(in srgb, var(--kz-accent) 40%, transparent);
293
+ box-shadow: inset 0 0 0 6px color-mix(in srgb, var(--kz-surface-0) 70%, transparent), inset 0 0 110px 10px color-mix(in srgb, var(--kz-surface-0) 85%, transparent); }
294
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-glass { display: block; position: absolute; inset: 0; pointer-events: none; border-radius: inherit;
295
+ background: radial-gradient(ellipse 70% 40% at 28% 0%, color-mix(in srgb, var(--kz-text-primary) 9%, transparent), transparent 70%); }
296
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-head { gap: 18px; }
297
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-title { font-family: var(--kz-font-mono); font-size: clamp(1.5rem, 4.6vw, 2.6rem); font-weight: 900; letter-spacing: .2em;
298
+ text-transform: uppercase; text-shadow: 0 0 22px color-mix(in oklab, var(--kz-accent) 80%, transparent), 0 0 2px var(--kz-text-primary); }
299
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-count { min-width: 1.6em; height: 1.6em; font-family: var(--kz-font-mono); font-size: clamp(1.6rem, 4.6vw, 2.6rem); font-weight: 900;
300
+ border: 1px solid color-mix(in srgb, var(--kz-accent) 45%, transparent); text-shadow: 0 0 16px var(--kz-accent); }
301
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-count::after { text-shadow: 0 0 16px var(--kz-accent); }
302
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-coin { padding: 9px 14px; border-radius: 12px; background: var(--kz-surface-1); border: 1px solid var(--kz-border-subtle);
303
+ font-family: var(--kz-font-mono); font-size: 10px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
304
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-highlight { font-weight: 900; letter-spacing: .2em; }
305
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-led { box-shadow: 0 0 8px var(--kz-success); }
306
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-key { font-weight: 900; letter-spacing: .16em; padding: 3px 8px; background: var(--kz-accent); color: var(--kz-on-accent); }
307
+ @media (max-width: 680px) {
308
+ .kzs-prompt-deck { justify-content: center; }
309
+ .kzs-prompt-action { margin-left: 0; }
310
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-screen { border-radius: 24px / 20px; }
311
+ :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-head { gap: 12px; }
312
+ }
313
+
314
+ /* ─── Achievement ─── */
315
+ .kzs-achievements { position: relative; list-style: none; margin: 0; padding: 0; display: grid; gap: 1px;
316
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--kzs-min, 220px)), 1fr));
317
+ background: var(--kz-border-subtle); border: 1px solid var(--kz-border-subtle); border-radius: 20px; overflow: hidden; }
318
+ .kzs-achievements > li { display: grid; }
319
+ .kzs-achievement { display: grid; align-content: start; gap: 8px; padding: 20px; background: var(--kz-surface-0); transition: background-color .2s ease, border-color .25s ease, transform .25s var(--kz-ease); }
320
+ .kzs-achievement:hover { background: var(--kz-surface-1); }
321
+ :not(.kzs-achievements > li) > .kzs-achievement { border: 1px solid var(--kz-border-subtle); border-radius: 16px; }
322
+ .kzs-achievement-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
323
+ .kzs-achievement-eyebrow { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--kz-accent-text); }
324
+ .kzs-achievement-badge { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px;
325
+ background: var(--kz-accent-soft); color: var(--kz-accent-text); }
326
+ .kzs-achievement-replaced { font-size: 13px; color: var(--kz-text-secondary); text-decoration: line-through; text-decoration-color: color-mix(in srgb, var(--kz-accent-2, var(--kz-accent)) 70%, transparent); }
327
+ .kzs-achievement-title { margin: 0; font-size: 14.5px; font-weight: 600; line-height: 1.35; color: var(--kz-text-primary); }
328
+ .kzs-achievement[data-locked] :is(.kzs-achievement-title, .kzs-achievement-eyebrow) { color: var(--kz-text-secondary); }
329
+ .kzs-achievement[data-locked] .kzs-achievement-badge { background: var(--kz-surface-2); color: var(--kz-text-secondary); }
330
+
331
+ /* arcade: separate cards on the arena, a stamp tilted on each */
332
+ :is(.kzs-achievements.kzs-arcade, .kzs-arcade .kzs-achievements) { gap: 12px; background: none; border: 0; border-radius: 0; overflow: visible; }
333
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) { padding: 18px 18px 20px; border-radius: 16px;
334
+ background: color-mix(in srgb, var(--kz-surface-0) 82%, transparent); border: 1px solid color-mix(in srgb, var(--kz-accent) 22%, var(--kz-border-subtle)); }
335
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement):hover { background: color-mix(in srgb, var(--kz-surface-0) 82%, transparent);
336
+ border-color: color-mix(in srgb, var(--kz-accent) 55%, var(--kz-border-subtle)); transform: translateY(-2px); }
337
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) .kzs-achievement-eyebrow { font-family: var(--kz-font-mono); font-size: 11px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
338
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) .kzs-achievement-badge { font-family: var(--kz-font-mono); font-size: 9.5px; font-weight: 900; letter-spacing: .14em;
339
+ text-transform: uppercase; padding: 2px 7px; border-radius: 4px; border: 1px solid color-mix(in srgb, var(--kz-accent-2, var(--kz-accent)) 45%, transparent); transform: rotate(-3deg); }
340
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) .kzs-achievement-replaced { text-decoration-thickness: 2px; text-decoration-color: color-mix(in srgb, var(--kz-accent-2, var(--kz-accent)) 75%, transparent); }
341
+ :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) .kzs-achievement-title { font-size: 15px; font-weight: 700; }
342
+
343
+ /* ─── Interaction under reduced motion: nothing lifts, scales or slides ─── */
344
+ @media (prefers-reduced-motion: reduce) {
345
+ .kzs-choice-item, .kzs-choice-aura, .kzs-choice-visual, .kzs-corner, .kzs-profile-visual, .kzs-achievement { transition: none !important; }
346
+ .kzs-choice-item:is(:hover, :focus-visible), .kzs-choice-item[aria-checked="true"], .kzs-choice-item:is(:hover, :focus-visible) :is(.kzs-choice-visual, .kzs-corner, .kzs-choice-aura),
347
+ .kzs-profile:hover .kzs-profile-visual, .kzs-achievement:hover { transform: none !important; }
348
+ }
349
+
350
+ /* ════ Motion — only when the person has not asked for less ════ */
351
+ @keyframes kzs-up { from { opacity: 0; transform: translateY(14px); } }
352
+ @keyframes kzs-fade { from { opacity: 0; } }
353
+ @keyframes kzs-card-in { from { transform: translateY(28px) scale(.96); } }
354
+ @keyframes kzs-in-left { from { opacity: 0; transform: translateX(-40px); } }
355
+ @keyframes kzs-lock { 0% { opacity: 0; transform: scale(1.8); } 70% { opacity: 1; transform: scale(.92); } 100% { opacity: .85; transform: none; } }
356
+ @keyframes kzs-slam { 0% { opacity: 0; transform: skewX(-10deg) scale(1.4); } 60% { opacity: 1; transform: skewX(-10deg) scale(.97); } 100% { opacity: 1; transform: skewX(-10deg) scale(1); } }
357
+ @keyframes kzs-slam-plain { 0% { opacity: 0; transform: skewX(-8deg) scale(1.4); } 100% { opacity: 1; transform: skewX(-8deg) scale(1); } }
358
+ @keyframes kzs-sweep { 0% { opacity: 0; transform: translateX(-120%); } 30% { opacity: 1; } 100% { opacity: 0; transform: translateX(260%); } }
359
+ @keyframes kzs-select-flash { 0% { opacity: 1; transform: translateX(-100%); } 100% { opacity: 0; transform: translateX(100%); } }
360
+ @keyframes kzs-flash { 0% { opacity: .9; transform: scale(.7); } 100% { opacity: 0; transform: scale(1.5); } }
361
+ @keyframes kzs-fill { from { transform: scaleX(0); } }
362
+ @keyframes kzs-fill-width { from { width: 0; } }
363
+ @keyframes kzs-drain { from { background: var(--kz-accent); } }
364
+ @keyframes kzs-drain-arcade { from { opacity: 1; } }
365
+ @keyframes kzs-light { from { opacity: .25; transform: scaleX(.6); } }
366
+ @keyframes kzs-light-arcade { from { opacity: .14; } }
367
+ @keyframes kzs-stamp { 0% { opacity: 0; transform: scale(1.9) rotate(-14deg); } 70% { opacity: 1; transform: scale(.95) rotate(-3deg); } 100% { opacity: 1; transform: rotate(-3deg); } }
368
+ @keyframes kzs-pop { from { opacity: 0; transform: scale(.85); } }
369
+ @keyframes kzs-press { 0%, 100% { transform: none; } 40% { transform: translateY(2px); background: var(--kz-accent); color: var(--kz-on-accent); box-shadow: 0 0 14px var(--kz-accent); border-color: var(--kz-accent); } }
370
+ @keyframes kzs-press-soft { 0%, 100% { transform: none; } 40% { transform: translateY(1px); border-color: var(--kz-accent); color: var(--kz-accent-text); } }
371
+ @keyframes kzs-land { 0% { opacity: 0; transform: scale(1.12); } 100% { opacity: 1; transform: none; } }
372
+ @keyframes kzs-glow { 0% { opacity: 0; } 30% { opacity: 1; } 100% { opacity: 0; } }
373
+ @keyframes kzs-crt-on { 0% { opacity: 0; transform: scale(.7, .02); filter: brightness(3); } 45% { opacity: 1; transform: scale(1, .02); } 100% { opacity: 1; transform: none; filter: none; } }
374
+ @keyframes kzs-scan { from { transform: translateY(0); } to { transform: translateY(450%); } }
375
+ @keyframes kzs-breathe { from { opacity: .4; transform: scale(1); } to { opacity: .7; transform: scale(1.05); } }
376
+ @keyframes kzs-blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: .25; } }
377
+
378
+ @media (prefers-reduced-motion: no-preference) {
379
+ /* Loops: one per scene, slow and faint, only while it is on screen. */
380
+ .kzs-scan.kzs-loop::before { animation: kzs-scan 9s linear infinite; animation-play-state: paused; }
381
+ :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-aura.kzs-loop { animation: kzs-breathe 6s ease-in-out 2.2s infinite alternate; animation-play-state: paused; }
382
+ [data-live] :is(.kzs-scan.kzs-loop::before, .kzs-profile-aura.kzs-loop), [data-live].kzs-prompt .kzs-scan.kzs-loop::before { animation-play-state: running; }
383
+
384
+ /* ChoiceGrid: on mount (a first screen needs no observer) — the tiles arrive; arcade: the corners lock on each one in
385
+ turn, a flash crosses it, its gauge fills; then a flash each time a card is pointed at or focused. */
386
+ .kzs-choice[data-animated] .kzs-choice-slot { animation: kzs-up .5s var(--kz-ease) both; animation-delay: calc(.15s + var(--i) * .07s); }
387
+ .kzs-choice[data-animated] .kzs-bar-fill { animation: kzs-fill .9s var(--kz-ease) both; animation-delay: calc(.5s + var(--i) * .1s); }
388
+ :is(.kzs-choice.kzs-arcade, .kzs-arcade .kzs-choice)[data-animated] .kzs-choice-slot { animation: kzs-card-in .7s var(--kz-ease) both; animation-delay: calc(.3s + var(--i) * .12s); }
389
+ :is(.kzs-choice.kzs-arcade, .kzs-arcade .kzs-choice)[data-animated] .kzs-corner { animation: kzs-lock .45s var(--kz-ease) both; animation-delay: calc(.95s + var(--i) * .3s); }
390
+ :is(.kzs-choice.kzs-arcade, .kzs-arcade .kzs-choice)[data-animated] .kzs-choice-flash { animation: kzs-select-flash .7s ease-out both; animation-delay: calc(1.05s + var(--i) * .3s); }
391
+ :is(.kzs-choice.kzs-arcade, .kzs-arcade .kzs-choice)[data-animated] .kzs-bar-fill { animation: kzs-fill-width 1.1s var(--kz-ease) both; animation-delay: calc(1.15s + var(--i) * .3s); }
392
+ .kzs-arcade .kzs-choice-item:is(:hover, :focus-visible) .kzs-choice-flash { animation: kzs-select-flash .6s ease-out both; }
393
+
394
+ /* Inside a stage: hidden until the scene enters, then played once, in order. */
395
+ [data-kzs-stage="on"] [data-kzs-scene]:not([data-in]) :is(.kzs-profile, .kzs-banner, [data-kzs-reveal], .kzs-promise, .kzs-gauge-cell[data-animate], .kzs-achievement-badge, .kzs-prompt-screen) { opacity: 0; }
396
+ [data-kzs-stage="on"] .kzs-prompt[data-kzs-scene]:not([data-in]) .kzs-prompt-screen { opacity: 0; }
397
+
398
+ [data-in] .kzs-profile { animation: kzs-up .55s var(--kz-ease) both; }
399
+ [data-in] .kzs-profile .kzs-bar-fill { animation: kzs-fill 1s var(--kz-ease) .45s both; }
400
+ [data-in] :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) { animation: kzs-in-left .65s var(--kz-ease) both; }
401
+ [data-in] :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-bar-fill { animation: kzs-fill-width 1.1s var(--kz-ease) .6s both; }
402
+ [data-in] :is(.kzs-profile.kzs-arcade, .kzs-arcade .kzs-profile) .kzs-profile-flash { animation: kzs-flash .7s ease-out .5s both; }
403
+
404
+ [data-in] .kzs-banner { animation: kzs-up .5s var(--kz-ease) .3s both; }
405
+ [data-in] :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner):not([data-size="lg"]) { animation: kzs-slam .5s var(--kz-ease) .35s both; }
406
+ [data-in] :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner) .kzs-banner-sweep { animation: kzs-sweep .7s ease-out .8s both; }
407
+ [data-in] :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] { animation: kzs-fade .2s ease-out both; }
408
+ [data-in] :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-stage { animation: kzs-slam-plain .5s var(--kz-ease) both; }
409
+ [data-in] :is(.kzs-banner.kzs-arcade, .kzs-arcade .kzs-banner)[data-size="lg"] .kzs-banner-title { animation: kzs-land .7s var(--kz-ease) .25s both; }
410
+
411
+ [data-in] [data-kzs-reveal] { animation: kzs-up .6s var(--kz-ease) both; animation-delay: var(--kzs-delay, .6s); }
412
+
413
+ [data-in] .kzs-promise { animation: kzs-up .6s var(--kz-ease) .8s both; }
414
+ [data-in] .kzs-key { animation: kzs-press-soft .32s ease-out both; animation-delay: calc(1.3s + var(--k) * .11s); }
415
+ [data-in] :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-key { animation-name: kzs-press; }
416
+ [data-in] :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-text { animation: kzs-land .45s var(--kz-ease) 2s both; }
417
+ [data-in] :is(.kzs-promise.kzs-arcade, .kzs-arcade .kzs-promise) .kzs-promise-flash { animation: kzs-glow .7s ease-out 2s both; }
418
+
419
+ [data-in] .kzs-gauge-cell[data-animate][data-lit] { animation: kzs-light .35s var(--kz-ease) both; animation-delay: calc(var(--kzs-gauge-delay, .5s) + var(--i) * .1s); }
420
+ [data-in] .kzs-gauge-cell[data-animate]:not([data-lit]) { animation: kzs-drain .35s ease-out both; animation-delay: calc(var(--kzs-gauge-delay, .5s) + var(--i) * .1s); }
421
+ [data-in] :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cell[data-animate][data-lit] { animation-name: kzs-light-arcade; }
422
+ [data-in] :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cell[data-animate]:not([data-lit]) { animation-name: kzs-drain-arcade; }
423
+ [data-in] :is(.kzs-gauge.kzs-arcade, .kzs-arcade .kzs-gauge) .kzs-gauge-cell[data-animate] { animation-delay: calc(var(--kzs-gauge-delay, .9s) + var(--i) * .16s); }
424
+
425
+ [data-in] .kzs-achievement-badge { animation: kzs-pop .35s var(--kz-ease) both; animation-delay: calc(var(--kzs-gauge-delay, .5s) + var(--i, 0) * .1s); }
426
+ [data-in] :is(.kzs-achievement.kzs-arcade, .kzs-arcade .kzs-achievement) .kzs-achievement-badge { animation: kzs-stamp .4s var(--kz-ease) both;
427
+ animation-delay: calc(var(--kzs-gauge-delay, .9s) + var(--i, 0) * .16s); }
428
+
429
+ [data-in] .kzs-prompt-screen, [data-in].kzs-prompt .kzs-prompt-screen { animation: kzs-fade .5s ease-out .2s both; }
430
+ [data-in] :is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-screen, [data-in]:is(.kzs-prompt.kzs-arcade) .kzs-prompt-screen { animation: kzs-crt-on .7s var(--kz-ease) .15s both; }
431
+ [data-in]:is(.kzs-prompt.kzs-arcade, .kzs-arcade .kzs-prompt) .kzs-prompt-highlight { animation: kzs-blink 1.2s steps(1) 1s 4; }
432
+ }