@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.
- package/README.md +37 -4
- package/dist/achievement.d.ts +54 -0
- package/dist/achievement.js +73 -0
- package/dist/achievement.js.map +1 -0
- package/dist/app-shell.d.ts +203 -0
- package/dist/app-shell.js +137 -0
- package/dist/app-shell.js.map +1 -0
- package/dist/auth-layout.d.ts +136 -0
- package/dist/auth-layout.js +75 -0
- package/dist/auth-layout.js.map +1 -0
- package/dist/choice-grid.d.ts +84 -0
- package/dist/choice-grid.js +141 -0
- package/dist/choice-grid.js.map +1 -0
- package/dist/chunk-555LWYIN.js +11 -0
- package/dist/chunk-555LWYIN.js.map +1 -0
- package/dist/chunk-AZPKXP3O.js +36 -0
- package/dist/chunk-AZPKXP3O.js.map +1 -0
- package/dist/chunk-NOVUREEC.js +274 -0
- package/dist/chunk-NOVUREEC.js.map +1 -0
- package/dist/chunk-VCAAHCHL.js +17 -0
- package/dist/chunk-VCAAHCHL.js.map +1 -0
- package/dist/code-block.js +23 -44
- package/dist/code-block.js.map +1 -1
- package/dist/continue-prompt.d.ts +48 -0
- package/dist/continue-prompt.js +200 -0
- package/dist/continue-prompt.js.map +1 -0
- package/dist/dashboard-layout.d.ts +139 -0
- package/dist/dashboard-layout.js +68 -0
- package/dist/dashboard-layout.js.map +1 -0
- package/dist/detail-layout.d.ts +126 -0
- package/dist/detail-layout.js +48 -0
- package/dist/detail-layout.js.map +1 -0
- package/dist/docs-layout.d.ts +78 -0
- package/dist/docs-layout.js +60 -0
- package/dist/docs-layout.js.map +1 -0
- package/dist/geometry-CXrAW34x.d.ts +19 -0
- package/dist/goal-gauge.d.ts +38 -0
- package/dist/goal-gauge.js +53 -0
- package/dist/goal-gauge.js.map +1 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.js +89 -4
- package/dist/index.js.map +1 -1
- package/dist/landscape.d.ts +41 -0
- package/dist/landscape.js +836 -0
- package/dist/landscape.js.map +1 -0
- package/dist/marketing-layout.d.ts +60 -0
- package/dist/marketing-layout.js +25 -0
- package/dist/marketing-layout.js.map +1 -0
- package/dist/mascot-quote.d.ts +4 -3
- package/dist/mascot-quote.js +21 -1
- package/dist/mascot-quote.js.map +1 -1
- package/dist/mascot-state.d.ts +128 -0
- package/dist/mascot-state.js +95 -0
- package/dist/mascot-state.js.map +1 -0
- package/dist/mascots.d.ts +18 -20
- package/dist/mascots.js +65 -221
- package/dist/mascots.js.map +1 -1
- package/dist/native.d.ts +124 -7
- package/dist/native.js +641 -239
- package/dist/native.js.map +1 -1
- package/dist/profile-card.d.ts +85 -0
- package/dist/profile-card.js +87 -0
- package/dist/profile-card.js.map +1 -0
- package/dist/promise-card.d.ts +28 -0
- package/dist/promise-card.js +29 -0
- package/dist/promise-card.js.map +1 -0
- package/dist/scroll-stage.d.ts +603 -0
- package/dist/scroll-stage.js +59 -0
- package/dist/scroll-stage.js.map +1 -0
- package/dist/settings-layout.d.ts +154 -0
- package/dist/settings-layout.js +57 -0
- package/dist/settings-layout.js.map +1 -0
- package/dist/split-view.d.ts +106 -0
- package/dist/split-view.js +41 -0
- package/dist/split-view.js.map +1 -0
- package/dist/stage-banner.d.ts +34 -0
- package/dist/stage-banner.js +26 -0
- package/dist/stage-banner.js.map +1 -0
- package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
- package/dist/story.css +432 -0
- package/package.json +267 -10
- package/registry/achievement.json +322 -0
- package/registry/action-bar.json +1 -1
- package/registry/alert.json +1 -1
- package/registry/app-shell.json +451 -0
- package/registry/argument-card.json +1 -1
- package/registry/audio-player.json +1 -1
- package/registry/auth-layout.json +230 -0
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/button.json +5 -5
- package/registry/card-grid.json +5 -5
- package/registry/card.json +3 -3
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/choice-grid.json +318 -0
- package/registry/code-block.json +1 -1
- package/registry/combobox.json +1 -1
- package/registry/command.json +1 -1
- package/registry/confirm-button.json +3 -3
- package/registry/continue-prompt.json +312 -0
- package/registry/countdown.json +1 -1
- package/registry/cta-panel.json +1 -1
- package/registry/dashboard-layout.json +273 -0
- package/registry/data-table.json +1 -1
- package/registry/date-picker.json +1 -1
- package/registry/decision-list.json +1 -1
- package/registry/detail-layout.json +233 -0
- package/registry/dialog.json +1 -1
- package/registry/docs-layout.json +148 -0
- package/registry/dropdown-menu.json +3 -3
- package/registry/empty-state.json +1 -1
- package/registry/examples/achievement/arcade.d.ts +4 -0
- package/registry/examples/achievement/arcade.js +15 -0
- package/registry/examples/achievement/arcade.tsx +12 -0
- package/registry/examples/achievement/milestones.d.ts +4 -0
- package/registry/examples/achievement/milestones.js +15 -0
- package/registry/examples/achievement/milestones.tsx +12 -0
- package/registry/examples/app-shell/admin-console.d.ts +4 -0
- package/registry/examples/app-shell/admin-console.js +52 -0
- package/registry/examples/app-shell/admin-console.tsx +64 -0
- package/registry/examples/app-shell/basic.d.ts +4 -0
- package/registry/examples/app-shell/basic.js +37 -0
- package/registry/examples/app-shell/basic.tsx +31 -0
- package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
- package/registry/examples/app-shell/orochia-studio.js +89 -0
- package/registry/examples/app-shell/orochia-studio.tsx +101 -0
- package/registry/examples/auth-layout/onboarding.d.ts +4 -0
- package/registry/examples/auth-layout/onboarding.js +56 -0
- package/registry/examples/auth-layout/onboarding.tsx +47 -0
- package/registry/examples/auth-layout/sign-in.d.ts +4 -0
- package/registry/examples/auth-layout/sign-in.js +55 -0
- package/registry/examples/auth-layout/sign-in.tsx +47 -0
- package/registry/examples/auth-layout/verify.d.ts +4 -0
- package/registry/examples/auth-layout/verify.js +23 -0
- package/registry/examples/auth-layout/verify.tsx +19 -0
- package/registry/examples/choice-grid/line-up.d.ts +4 -0
- package/registry/examples/choice-grid/line-up.js +37 -0
- package/registry/examples/choice-grid/line-up.tsx +32 -0
- package/registry/examples/choice-grid/plans.d.ts +4 -0
- package/registry/examples/choice-grid/plans.js +28 -0
- package/registry/examples/choice-grid/plans.tsx +24 -0
- package/registry/examples/continue-prompt/arcade.d.ts +4 -0
- package/registry/examples/continue-prompt/arcade.js +28 -0
- package/registry/examples/continue-prompt/arcade.tsx +25 -0
- package/registry/examples/continue-prompt/offer.d.ts +4 -0
- package/registry/examples/continue-prompt/offer.js +24 -0
- package/registry/examples/continue-prompt/offer.tsx +19 -0
- package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
- package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
- package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
- package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
- package/registry/examples/dashboard-layout/widgets.js +17 -0
- package/registry/examples/dashboard-layout/widgets.tsx +22 -0
- package/registry/examples/detail-layout/job.d.ts +4 -0
- package/registry/examples/detail-layout/job.js +25 -0
- package/registry/examples/detail-layout/job.tsx +20 -0
- package/registry/examples/detail-layout/video.d.ts +4 -0
- package/registry/examples/detail-layout/video.js +44 -0
- package/registry/examples/detail-layout/video.tsx +53 -0
- package/registry/examples/docs-layout/page.d.ts +4 -0
- package/registry/examples/docs-layout/page.js +26 -0
- package/registry/examples/docs-layout/page.tsx +30 -0
- package/registry/examples/goal-gauge/arcade.d.ts +4 -0
- package/registry/examples/goal-gauge/arcade.js +11 -0
- package/registry/examples/goal-gauge/arcade.tsx +10 -0
- package/registry/examples/goal-gauge/challenge.d.ts +4 -0
- package/registry/examples/goal-gauge/challenge.js +11 -0
- package/registry/examples/goal-gauge/challenge.tsx +10 -0
- package/registry/examples/goal-gauge/drain.d.ts +4 -0
- package/registry/examples/goal-gauge/drain.js +11 -0
- package/registry/examples/goal-gauge/drain.tsx +10 -0
- package/registry/examples/goal-gauge/native/default.d.ts +4 -0
- package/registry/examples/goal-gauge/native/default.dark.png +0 -0
- package/registry/examples/goal-gauge/native/default.js +15 -0
- package/registry/examples/goal-gauge/native/default.light.png +0 -0
- package/registry/examples/goal-gauge/native/default.tsx +12 -0
- package/registry/examples/landscape/backdrop.d.ts +4 -0
- package/registry/examples/landscape/backdrop.js +14 -0
- package/registry/examples/landscape/backdrop.tsx +11 -0
- package/registry/examples/landscape/brand.d.ts +4 -0
- package/registry/examples/landscape/brand.js +11 -0
- package/registry/examples/landscape/brand.tsx +10 -0
- package/registry/examples/marketing-layout/basic.d.ts +4 -0
- package/registry/examples/marketing-layout/basic.js +31 -0
- package/registry/examples/marketing-layout/basic.tsx +28 -0
- package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
- package/registry/examples/marketing-layout/docs-hub.js +37 -0
- package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
- package/registry/examples/marketing-layout/pricing.d.ts +4 -0
- package/registry/examples/marketing-layout/pricing.js +45 -0
- package/registry/examples/marketing-layout/pricing.tsx +55 -0
- package/registry/examples/marketing-layout/product-page.d.ts +4 -0
- package/registry/examples/marketing-layout/product-page.js +79 -0
- package/registry/examples/marketing-layout/product-page.tsx +83 -0
- package/registry/examples/mascot-state/empty.d.ts +4 -0
- package/registry/examples/mascot-state/empty.js +22 -0
- package/registry/examples/mascot-state/empty.tsx +20 -0
- package/registry/examples/mascot-state/error.d.ts +4 -0
- package/registry/examples/mascot-state/error.js +23 -0
- package/registry/examples/mascot-state/error.tsx +21 -0
- package/registry/examples/mascot-state/loading.d.ts +4 -0
- package/registry/examples/mascot-state/loading.js +22 -0
- package/registry/examples/mascot-state/loading.tsx +16 -0
- package/registry/examples/mascot-state/native/default.d.ts +4 -0
- package/registry/examples/mascot-state/native/default.dark.png +0 -0
- package/registry/examples/mascot-state/native/default.js +25 -0
- package/registry/examples/mascot-state/native/default.light.png +0 -0
- package/registry/examples/mascot-state/native/default.tsx +19 -0
- package/registry/examples/mascot-state/success.d.ts +4 -0
- package/registry/examples/mascot-state/success.js +21 -0
- package/registry/examples/mascot-state/success.tsx +19 -0
- package/registry/examples/mascot-state/welcome.d.ts +4 -0
- package/registry/examples/mascot-state/welcome.js +21 -0
- package/registry/examples/mascot-state/welcome.tsx +19 -0
- package/registry/examples/mascots/flock.tsx +1 -1
- package/registry/examples/mascots/lovebird.d.ts +4 -0
- package/registry/examples/mascots/lovebird.js +19 -0
- package/registry/examples/mascots/lovebird.tsx +18 -0
- package/registry/examples/mascots/native/lovebird.d.ts +4 -0
- package/registry/examples/mascots/native/lovebird.dark.png +0 -0
- package/registry/examples/mascots/native/lovebird.js +21 -0
- package/registry/examples/mascots/native/lovebird.light.png +0 -0
- package/registry/examples/mascots/native/lovebird.tsx +18 -0
- package/registry/examples/mascots/native/phoenix.d.ts +4 -0
- package/registry/examples/mascots/native/phoenix.dark.png +0 -0
- package/registry/examples/mascots/native/phoenix.js +21 -0
- package/registry/examples/mascots/native/phoenix.light.png +0 -0
- package/registry/examples/mascots/native/phoenix.tsx +18 -0
- package/registry/examples/mascots/phoenix.d.ts +4 -0
- package/registry/examples/mascots/phoenix.js +14 -0
- package/registry/examples/mascots/phoenix.tsx +11 -0
- package/registry/examples/profile-card/arcade.d.ts +4 -0
- package/registry/examples/profile-card/arcade.js +25 -0
- package/registry/examples/profile-card/arcade.tsx +19 -0
- package/registry/examples/profile-card/creator.d.ts +4 -0
- package/registry/examples/profile-card/creator.js +31 -0
- package/registry/examples/profile-card/creator.tsx +26 -0
- package/registry/examples/profile-card/match.d.ts +4 -0
- package/registry/examples/profile-card/match.js +25 -0
- package/registry/examples/profile-card/match.tsx +19 -0
- package/registry/examples/profile-card/native/default.d.ts +4 -0
- package/registry/examples/profile-card/native/default.dark.png +0 -0
- package/registry/examples/profile-card/native/default.js +27 -0
- package/registry/examples/profile-card/native/default.light.png +0 -0
- package/registry/examples/profile-card/native/default.tsx +22 -0
- package/registry/examples/promise-card/arcade.d.ts +4 -0
- package/registry/examples/promise-card/arcade.js +25 -0
- package/registry/examples/promise-card/arcade.tsx +19 -0
- package/registry/examples/promise-card/guarantee.d.ts +4 -0
- package/registry/examples/promise-card/guarantee.js +23 -0
- package/registry/examples/promise-card/guarantee.tsx +17 -0
- package/registry/examples/scroll-stage/arcade.d.ts +4 -0
- package/registry/examples/scroll-stage/arcade.js +16 -0
- package/registry/examples/scroll-stage/arcade.tsx +15 -0
- package/registry/examples/scroll-stage/chapters.d.ts +4 -0
- package/registry/examples/scroll-stage/chapters.js +25 -0
- package/registry/examples/scroll-stage/chapters.tsx +22 -0
- package/registry/examples/settings-layout/account.d.ts +4 -0
- package/registry/examples/settings-layout/account.js +51 -0
- package/registry/examples/settings-layout/account.tsx +50 -0
- package/registry/examples/settings-layout/sections.d.ts +4 -0
- package/registry/examples/settings-layout/sections.js +27 -0
- package/registry/examples/settings-layout/sections.tsx +24 -0
- package/registry/examples/split-view/empty.d.ts +4 -0
- package/registry/examples/split-view/empty.js +19 -0
- package/registry/examples/split-view/empty.tsx +13 -0
- package/registry/examples/split-view/messages.d.ts +4 -0
- package/registry/examples/split-view/messages.js +49 -0
- package/registry/examples/split-view/messages.tsx +52 -0
- package/registry/examples/stage-banner/round.d.ts +4 -0
- package/registry/examples/stage-banner/round.js +14 -0
- package/registry/examples/stage-banner/round.tsx +11 -0
- package/registry/examples/stage-banner/steps.d.ts +4 -0
- package/registry/examples/stage-banner/steps.js +14 -0
- package/registry/examples/stage-banner/steps.tsx +11 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +322 -0
- package/registry/image-cropper.json +1 -1
- package/registry/index.json +337 -5
- package/registry/iso.json +1 -1
- package/registry/kbd.json +1 -1
- package/registry/landscape.json +189 -0
- package/registry/link-card.json +1 -1
- package/registry/loader.json +1 -1
- package/registry/marketing-layout.json +172 -0
- package/registry/marquee.json +1 -1
- package/registry/mascot-quote.json +6 -6
- package/registry/mascot-state.json +1249 -0
- package/registry/mascots.json +140 -23
- package/registry/media-capture.json +1 -1
- package/registry/meter.json +1 -1
- package/registry/nav-bar.json +1 -1
- package/registry/number-ticker.json +1 -1
- package/registry/page-header.json +1 -1
- package/registry/page-hero.json +3 -3
- package/registry/page.json +5 -5
- package/registry/pagination.json +1 -1
- package/registry/pointer-light.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/profile-card.json +501 -0
- package/registry/progress.json +1 -1
- package/registry/promise-card.json +228 -0
- package/registry/radio-group.json +1 -1
- package/registry/scroll-stage.json +197 -0
- package/registry/search-field.json +1 -1
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/settings-layout.json +231 -0
- package/registry/skeleton.json +1 -1
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/split-view.json +233 -0
- package/registry/stage-banner.json +221 -0
- package/registry/stat.json +1 -1
- package/registry/stepper.json +1 -1
- package/registry/switch.json +1 -1
- package/registry/tabs.json +1 -1
- package/registry/tag-input.json +1 -1
- package/registry/terminal-replay.json +1 -1
- package/registry/theme.json +1 -1
- package/registry/toast.json +1 -1
- package/registry/toc.json +1 -1
- package/registry/tooltip.json +1 -1
- package/registry/video-player.json +1 -1
- 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
|
+
}
|