From c860b55f9731d4b7be623b3f5ed4aa6dda74db04 Mon Sep 17 00:00:00 2001 From: mawkone Date: Mon, 8 Jun 2026 16:25:30 -0700 Subject: [PATCH] design(onboarding): add premium springy card animations, breathing focus inputs, and volumetric radial glow --- _onboarding/onboarding-fork.tsx | 19 +- _onboarding/onboarding.css | 1286 ++++++++++++++++++++----------- _onboarding/page.tsx | 14 +- 3 files changed, 840 insertions(+), 479 deletions(-) diff --git a/_onboarding/onboarding-fork.tsx b/_onboarding/onboarding-fork.tsx index 4c609431..fe159dbe 100644 --- a/_onboarding/onboarding-fork.tsx +++ b/_onboarding/onboarding-fork.tsx @@ -112,24 +112,7 @@ export function ForkScreen({ name, value, onChange, onClose, onNext }) { onChange(f.id); onNext(); }} - style={{ - display: "flex", - alignItems: "center", - gap: 14, - padding: "14px 16px", - borderRadius: 12, - border: `1px solid ${active ? "var(--accent)" : "var(--hairline)"}`, - background: active - ? "oklch(0.20 0.04 35 / 0.4)" - : "oklch(0.18 0.009 60 / 0.6)", - boxShadow: active - ? "0 0 0 3px oklch(0.74 0.175 35 / 0.1)" - : "none", - textAlign: "left", - color: "var(--fg)", - transition: "border-color .15s, background .15s", - cursor: "pointer", - }} + className={active ? "fork-card active" : "fork-card"} > "); + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + z-index: 1; + opacity: 0.035; + mix-blend-mode: overlay; + background-image: url("data:image/svg+xml;utf8,"); } -a { color: inherit; text-decoration: none; } -button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; } -h1, h2, h3 { margin: 0; font-weight: 500; letter-spacing: -0.02em; line-height: 1.05; } -p { margin: 0; } -::selection { background: var(--accent); color: var(--accent-fg); } +a { + color: inherit; + text-decoration: none; +} +button { + font: inherit; + color: inherit; + background: none; + border: 0; + padding: 0; + cursor: pointer; +} +h1, +h2, +h3 { + margin: 0; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.05; +} +p { + margin: 0; +} +::selection { + background: var(--accent); + color: var(--accent-fg); +} -.mono { font-family: var(--font-mono); } +.mono { + font-family: var(--font-mono); +} /* App shell */ .app { - position: relative; - z-index: 2; - min-height: 100dvh; - display: flex; flex-direction: column; + position: relative; + z-index: 2; + min-height: 100dvh; + display: flex; + flex-direction: column; } .app-bar { - position: relative; z-index: 5; - padding: 20px clamp(20px, 4vw, 48px); - display: flex; align-items: center; justify-content: space-between; - border-bottom: 1px solid transparent; + position: relative; + z-index: 5; + padding: 20px clamp(20px, 4vw, 48px); + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid transparent; +} +.app-bar-left { + display: flex; + align-items: center; + gap: 24px; } -.app-bar-left { display: flex; align-items: center; gap: 24px; } .app-step { - font-family: var(--font-mono); - font-size: 11px; - color: var(--fg-faint); - letter-spacing: 0.12em; - text-transform: uppercase; - display: inline-flex; align-items: center; gap: 8px; + font-family: var(--font-mono); + font-size: 11px; + color: var(--fg-faint); + letter-spacing: 0.12em; + text-transform: uppercase; + display: inline-flex; + align-items: center; + gap: 8px; } .app-step::before { - content: ""; - width: 5px; height: 5px; border-radius: 50%; - background: var(--accent); - box-shadow: 0 0 12px var(--accent-glow); + content: ""; + width: 5px; + height: 5px; + border-radius: 50%; + background: var(--accent); + box-shadow: 0 0 12px var(--accent-glow); } .app-bar-right { - display: flex; gap: 18px; align-items: center; + display: flex; + gap: 18px; + align-items: center; } -.app-bar-right a, .app-bar-right button { - font-size: 13px; color: var(--fg-mute); +.app-bar-right a, +.app-bar-right button { + font-size: 13px; + color: var(--fg-mute); +} +.app-bar-right a:hover, +.app-bar-right button:hover { + color: var(--fg); } -.app-bar-right a:hover, .app-bar-right button:hover { color: var(--fg); } /* Logo */ .logo { - display: inline-flex; align-items: center; gap: 9px; - font-weight: 600; font-size: 17px; letter-spacing: -0.02em; - color: var(--fg); + display: inline-flex; + align-items: center; + gap: 9px; + font-weight: 600; + font-size: 17px; + letter-spacing: -0.02em; + color: var(--fg); } .logo-mark { - width: 26px; height: 26px; border-radius: 50%; - background: linear-gradient(135deg, var(--accent) 0%, oklch(0.65 0.20 18) 100%); - box-shadow: 0 0 22px var(--accent-glow), inset 0 1px 0 oklch(1 0 0 / 0.25); - display: grid; place-items: center; - color: var(--accent-fg); - flex-shrink: 0; + width: 26px; + height: 26px; + border-radius: 50%; + background: linear-gradient( + 135deg, + var(--accent) 0%, + oklch(0.65 0.2 18) 100% + ); + box-shadow: + 0 0 22px var(--accent-glow), + inset 0 1px 0 oklch(1 0 0 / 0.25); + display: grid; + place-items: center; + color: var(--accent-fg); + flex-shrink: 0; +} +.logo-mark svg { + display: block; +} +.logo-caret { + animation: caret-blink 1.4s steps(2) infinite; +} +@keyframes caret-blink { + 50% { + opacity: 0.25; + } } -.logo-mark svg { display: block; } -.logo-caret { animation: caret-blink 1.4s steps(2) infinite; } -@keyframes caret-blink { 50% { opacity: 0.25; } } /* Main */ .screen { - flex: 1; - position: relative; - padding: clamp(40px, 7vh, 80px) clamp(20px, 4vw, 48px) clamp(40px, 6vh, 60px); - display: flex; flex-direction: column; - align-items: center; - text-align: center; + flex: 1; + position: relative; + padding: clamp(40px, 7vh, 80px) clamp(20px, 4vw, 48px) + clamp(40px, 6vh, 60px); + display: flex; + flex-direction: column; + align-items: center; + text-align: center; } .screen-wide { - align-items: stretch; - text-align: left; + align-items: stretch; + text-align: left; } .screen-content { - position: relative; z-index: 2; - width: 100%; - max-width: 720px; - display: flex; flex-direction: column; - align-items: center; text-align: center; + position: relative; + z-index: 2; + width: 100%; + max-width: 720px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; } .screen-content-wide { - max-width: 1100px; - align-items: stretch; text-align: left; + max-width: 1100px; + align-items: stretch; + text-align: left; } /* Ambient glows */ .glow { - position: absolute; - pointer-events: none; - filter: blur(20px); - z-index: 0; + position: absolute; + pointer-events: none; + filter: blur(20px); + z-index: 0; } /* Typography */ .eyebrow { - display: inline-flex; align-items: center; gap: 10px; - font-family: var(--font-mono); - font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; - color: var(--fg-mute); + display: inline-flex; + align-items: center; + gap: 10px; + font-family: var(--font-mono); + font-size: 11px; + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--fg-mute); } .eyebrow::before { - content: ""; width: 5px; height: 5px; border-radius: 50%; - background: var(--accent); box-shadow: 0 0 12px var(--accent-glow); + content: ""; + width: 5px; + height: 5px; + border-radius: 50%; + background: var(--accent); + box-shadow: 0 0 12px var(--accent-glow); +} +.eyebrow-accent { + color: var(--accent); } -.eyebrow-accent { color: var(--accent); } .h1 { - margin-top: 20px; - font-size: clamp(36px, 5.4vw, 64px); - font-weight: 500; letter-spacing: -0.03em; line-height: 1.04; - text-wrap: balance; + margin-top: 20px; + font-size: clamp(36px, 5.4vw, 64px); + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.04; + text-wrap: balance; } .h1 em { - font-style: normal; - color: var(--accent); - text-shadow: 0 0 30px var(--accent-glow); + font-style: normal; + color: var(--accent); + text-shadow: 0 0 30px var(--accent-glow); } .sub { - margin-top: 18px; - font-size: clamp(15px, 1.55vw, 18px); - color: var(--fg-mute); - line-height: 1.55; - text-wrap: balance; - max-width: 540px; + margin-top: 18px; + font-size: clamp(15px, 1.55vw, 18px); + color: var(--fg-mute); + line-height: 1.55; + text-wrap: balance; + max-width: 540px; +} +.sub b { + color: var(--fg); + font-weight: 500; } -.sub b { color: var(--fg); font-weight: 500; } .tagline { - display: inline-flex; align-items: center; gap: 14px; - font-family: var(--font-mono); - font-size: 12px; - letter-spacing: 0.06em; - color: var(--fg-faint); - margin-bottom: 8px; + display: inline-flex; + align-items: center; + gap: 14px; + font-family: var(--font-mono); + font-size: 12px; + letter-spacing: 0.06em; + color: var(--fg-faint); + margin-bottom: 8px; } -.tagline::before, .tagline::after { - content: ""; width: 28px; height: 1px; - background: linear-gradient(90deg, transparent, var(--hairline), transparent); +.tagline::before, +.tagline::after { + content: ""; + width: 28px; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + var(--hairline), + transparent + ); } /* Buttons */ .btn { - display: inline-flex; align-items: center; justify-content: center; gap: 10px; - height: 50px; padding: 0 22px; - border-radius: 999px; - font-weight: 500; - font-size: 15px; - transition: transform .12s, box-shadow .2s, background .2s, border-color .15s; - white-space: nowrap; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + height: 50px; + padding: 0 22px; + border-radius: 999px; + font-weight: 500; + font-size: 15px; + transition: + transform 0.12s, + box-shadow 0.2s, + background 0.2s, + border-color 0.15s; + white-space: nowrap; } .btn-primary { - background: var(--accent); - color: var(--accent-fg); - box-shadow: - 0 0 0 1px oklch(0.84 0.16 35 / 0.5) inset, - 0 10px 40px -10px var(--accent-glow), - 0 0 40px -8px var(--accent-glow); + background: var(--accent); + color: var(--accent-fg); + box-shadow: + 0 0 0 1px oklch(0.84 0.16 35 / 0.5) inset, + 0 10px 40px -10px var(--accent-glow), + 0 0 40px -8px var(--accent-glow); +} +.btn-primary:hover { + transform: translateY(-1px); +} +.btn-primary[disabled] { + opacity: 0.55; + cursor: not-allowed; + transform: none; +} +.btn-primary .arrow { + transition: transform 0.15s; +} +.btn-primary:hover .arrow { + transform: translateX(3px); } -.btn-primary:hover { transform: translateY(-1px); } -.btn-primary[disabled] { opacity: .55; cursor: not-allowed; transform: none; } -.btn-primary .arrow { transition: transform .15s; } -.btn-primary:hover .arrow { transform: translateX(3px); } .btn-ghost { - background: oklch(0.20 0.009 60 / 0.6); - border: 1px solid var(--hairline); - color: var(--fg-dim); + background: oklch(0.2 0.009 60 / 0.6); + border: 1px solid var(--hairline); + color: var(--fg-dim); +} +.btn-ghost:hover { + color: var(--fg); + border-color: var(--hairline-2); + background: oklch(0.22 0.01 60 / 0.8); } -.btn-ghost:hover { color: var(--fg); border-color: var(--hairline-2); background: oklch(0.22 0.010 60 / 0.8); } .link-quiet { - font-size: 13px; - color: var(--fg-mute); - display: inline-flex; align-items: center; gap: 6px; - border-bottom: 1px dashed var(--hairline); - padding-bottom: 2px; + font-size: 13px; + color: var(--fg-mute); + display: inline-flex; + align-items: center; + gap: 6px; + border-bottom: 1px dashed var(--hairline); + padding-bottom: 2px; +} +.link-quiet:hover { + color: var(--fg); + border-color: var(--accent); } -.link-quiet:hover { color: var(--fg); border-color: var(--accent); } /* Or divider */ .or-divider { - display: flex; align-items: center; gap: 14px; - margin: 28px 0 18px; - width: 100%; max-width: 360px; - font-family: var(--font-mono); - font-size: 11px; - letter-spacing: 0.12em; - text-transform: uppercase; - color: var(--fg-faint); + display: flex; + align-items: center; + gap: 14px; + margin: 28px 0 18px; + width: 100%; + max-width: 360px; + font-family: var(--font-mono); + font-size: 11px; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--fg-faint); } -.or-divider::before, .or-divider::after { - content: ""; flex: 1; height: 1px; background: var(--hairline); +.or-divider::before, +.or-divider::after { + content: ""; + flex: 1; + height: 1px; + background: var(--hairline); } /* Form */ .field { - width: 100%; - display: flex; flex-direction: column; gap: 8px; - margin-top: 24px; - text-align: left; + width: 100%; + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 24px; + text-align: left; } .field-label { - font-size: 15px; - font-weight: 500; - color: var(--fg); - letter-spacing: -0.005em; + font-size: 15px; + font-weight: 500; + color: var(--fg); + letter-spacing: -0.005em; } .field-hint { - font-size: 13px; - color: var(--fg-mute); - line-height: 1.5; + font-size: 13px; + color: var(--fg-mute); + line-height: 1.5; } .input { - width: 100%; - padding: 14px 16px; - background: oklch(0.16 0.008 60 / 0.8); - border: 1px solid var(--hairline); - border-radius: 12px; - color: var(--fg); - font: 15px/1.5 var(--font-sans); - outline: none; - transition: border-color .15s, background .15s, box-shadow .15s; - resize: vertical; + width: 100%; + padding: 14px 16px; + background: oklch(0.16 0.008 60 / 0.8); + border: 1px solid var(--hairline); + border-radius: 12px; + color: var(--fg); + font: 15px/1.5 var(--font-sans); + outline: none; + transition: + border-color 0.15s, + background 0.15s, + box-shadow 0.15s; + resize: vertical; +} +.input::placeholder { + color: var(--fg-faint); } -.input::placeholder { color: var(--fg-faint); } .input:focus { - border-color: oklch(0.74 0.175 35 / 0.65); - background: oklch(0.18 0.009 60 / 0.95); - box-shadow: 0 0 0 3px oklch(0.74 0.175 35 / 0.12), 0 0 30px -10px var(--accent-glow); + border-color: oklch(0.74 0.175 35 / 0.65); + background: oklch(0.18 0.009 60 / 0.95); + box-shadow: + 0 0 0 3px oklch(0.74 0.175 35 / 0.12), + 0 0 30px -10px var(--accent-glow); +} +.input-textarea { + min-height: 110px; + resize: vertical; +} +.input-large { + padding: 20px 22px; + font-size: 17px; + border-radius: 16px; } -.input-textarea { min-height: 110px; resize: vertical; } -.input-large { padding: 20px 22px; font-size: 17px; border-radius: 16px; } /* Hero prompt input */ .prompt { - width: 100%; - position: relative; - margin-top: 24px; + width: 100%; + position: relative; + margin-top: 24px; } .prompt-frame { - position: relative; - border-radius: 22px; - padding: 1px; - background: linear-gradient(180deg, - oklch(0.50 0.06 35 / 0.6), - oklch(0.30 0.012 60 / 0.4) 40%, - oklch(0.25 0.012 60 / 0.4)); - box-shadow: - 0 30px 80px -20px oklch(0 0 0 / 0.6), - 0 0 80px -20px var(--accent-glow); + position: relative; + border-radius: 22px; + padding: 1px; + background: linear-gradient( + 180deg, + oklch(0.5 0.06 35 / 0.6), + oklch(0.3 0.012 60 / 0.4) 40%, + oklch(0.25 0.012 60 / 0.4) + ); + box-shadow: + 0 30px 80px -20px oklch(0 0 0 / 0.6), + 0 0 80px -20px var(--accent-glow); } .prompt-inner { - background: linear-gradient(180deg, oklch(0.19 0.009 60 / 0.92), oklch(0.17 0.008 60 / 0.92)); - border-radius: 21px; - padding: 18px 20px 14px; - backdrop-filter: blur(20px); - display: flex; flex-direction: column; - gap: 12px; + background: linear-gradient( + 180deg, + oklch(0.19 0.009 60 / 0.92), + oklch(0.17 0.008 60 / 0.92) + ); + border-radius: 21px; + padding: 18px 20px 14px; + backdrop-filter: blur(20px); + display: flex; + flex-direction: column; + gap: 12px; } .prompt-inner textarea { - width: 100%; - min-height: 92px; - background: transparent; - border: 0; - color: var(--fg); - font: 17px/1.5 var(--font-sans); - resize: none; - outline: none; - padding: 4px; + width: 100%; + min-height: 92px; + background: transparent; + border: 0; + color: var(--fg); + font: 17px/1.5 var(--font-sans); + resize: none; + outline: none; + padding: 4px; } .prompt-typed { - position: absolute; - top: 22px; left: 24px; right: 24px; - pointer-events: none; - color: var(--fg-faint); - font: 17px/1.5 var(--font-sans); - text-align: left; + position: absolute; + top: 22px; + left: 24px; + right: 24px; + pointer-events: none; + color: var(--fg-faint); + font: 17px/1.5 var(--font-sans); + text-align: left; } .prompt-typed::after { - content: ""; - display: inline-block; - width: 8px; height: 18px; - background: var(--accent); - vertical-align: -3px; - margin-left: 2px; - animation: blink 1s steps(2) infinite; - box-shadow: 0 0 12px var(--accent-glow); + content: ""; + display: inline-block; + width: 8px; + height: 18px; + background: var(--accent); + vertical-align: -3px; + margin-left: 2px; + animation: blink 1s steps(2) infinite; + box-shadow: 0 0 12px var(--accent-glow); +} +@keyframes blink { + 50% { + opacity: 0; + } } -@keyframes blink { 50% { opacity: 0; } } .prompt-bar { - display: flex; align-items: center; justify-content: space-between; - padding-top: 8px; - border-top: 1px solid var(--hairline); + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 8px; + border-top: 1px solid var(--hairline); } .prompt-hint { - font-family: var(--font-mono); - font-size: 11px; - color: var(--fg-faint); - letter-spacing: 0.02em; + font-family: var(--font-mono); + font-size: 11px; + color: var(--fg-faint); + letter-spacing: 0.02em; } /* Chip / option grid */ .chips { - display: flex; flex-wrap: wrap; gap: 8px; + display: flex; + flex-wrap: wrap; + gap: 8px; } .chip { - padding: 9px 14px; - border-radius: 999px; - border: 1px solid var(--hairline); - background: oklch(0.20 0.009 60 / 0.5); - color: var(--fg-dim); - font-size: 13.5px; - transition: border-color .15s, color .15s, background .15s, transform .12s; + padding: 9px 14px; + border-radius: 999px; + border: 1px solid var(--hairline); + background: oklch(0.2 0.009 60 / 0.5); + color: var(--fg-dim); + font-size: 13.5px; + transition: + border-color 0.15s, + color 0.15s, + background 0.15s, + transform 0.12s; +} +.chip:hover { + border-color: var(--hairline-2); + color: var(--fg); + transform: translateY(-1px); } -.chip:hover { border-color: var(--hairline-2); color: var(--fg); transform: translateY(-1px); } .chip.active { - border-color: var(--accent); - background: oklch(0.20 0.04 35 / 0.4); - color: var(--fg); + border-color: var(--accent); + background: oklch(0.2 0.04 35 / 0.4); + color: var(--fg); } /* Preset chips */ .preset-row { - display: flex; gap: 8px; flex-wrap: wrap; - margin-top: 4px; + display: flex; + gap: 8px; + flex-wrap: wrap; + margin-top: 4px; } .preset-chip { - padding: 11px 18px; - border-radius: 12px; - border: 1px solid var(--hairline); - background: oklch(0.18 0.009 60 / 0.6); - color: var(--fg-dim); - font: 500 14.5px var(--font-mono); - letter-spacing: -0.005em; - transition: all .15s; + padding: 11px 18px; + border-radius: 12px; + border: 1px solid var(--hairline); + background: oklch(0.18 0.009 60 / 0.6); + color: var(--fg-dim); + font: 500 14.5px var(--font-mono); + letter-spacing: -0.005em; + transition: all 0.15s; +} +.preset-chip:hover { + border-color: var(--hairline-2); + color: var(--fg); } -.preset-chip:hover { border-color: var(--hairline-2); color: var(--fg); } .preset-chip.active { - border-color: var(--accent); - background: oklch(0.20 0.04 35 / 0.4); - color: var(--fg); - box-shadow: 0 0 0 3px oklch(0.74 0.175 35 / 0.1); + border-color: var(--accent); + background: oklch(0.2 0.04 35 / 0.4); + color: var(--fg); + box-shadow: 0 0 0 3px oklch(0.74 0.175 35 / 0.1); } /* Trust strip */ .trust { - margin-top: 36px; - display: flex; gap: 14px; justify-content: center; align-items: center; - flex-wrap: wrap; - font-family: var(--font-mono); - font-size: 11px; - letter-spacing: 0.03em; - color: var(--fg-faint); + margin-top: 36px; + display: flex; + gap: 14px; + justify-content: center; + align-items: center; + flex-wrap: wrap; + font-family: var(--font-mono); + font-size: 11px; + letter-spacing: 0.03em; + color: var(--fg-faint); +} +.trust .sep { + opacity: 0.5; } -.trust .sep { opacity: 0.5; } /* CTA row */ .cta-row { - margin-top: 36px; - display: flex; gap: 14px; align-items: center; flex-wrap: wrap; - justify-content: center; + margin-top: 36px; + display: flex; + gap: 14px; + align-items: center; + flex-wrap: wrap; + justify-content: center; } /* Spinner */ .spinner { - width: 16px; height: 16px; border-radius: 50%; - border: 2px solid oklch(0 0 0 / 0.2); - border-top-color: var(--accent-fg); - animation: spin .9s linear infinite; - display: inline-block; + width: 16px; + height: 16px; + border-radius: 50%; + border: 2px solid oklch(0 0 0 / 0.2); + border-top-color: var(--accent-fg); + animation: spin 0.9s linear infinite; + display: inline-block; } .spinner-line { - width: 12px; height: 12px; - border-color: var(--hairline); - border-top-color: var(--accent); + width: 12px; + height: 12px; + border-color: var(--hairline); + border-top-color: var(--accent); +} +@keyframes spin { + to { + transform: rotate(360deg); + } } -@keyframes spin { to { transform: rotate(360deg); } } /* Surface card */ .surface { - background: linear-gradient(180deg, oklch(0.20 0.009 60 / 0.55), oklch(0.17 0.008 60 / 0.55)); - border: 1px solid var(--hairline); - border-radius: 18px; + background: linear-gradient( + 180deg, + oklch(0.2 0.009 60 / 0.55), + oklch(0.17 0.008 60 / 0.55) + ); + border: 1px solid var(--hairline); + border-radius: 18px; } /* ── Wizard chrome ───────────────────────────────────────────────────── */ /* The persistent top strip with progress bar + back + step text + close. */ .wiz-top { - position: sticky; top: 0; z-index: 50; - background: oklch(0.155 0.008 60 / 0.85); - backdrop-filter: blur(14px) saturate(140%); - -webkit-backdrop-filter: blur(14px) saturate(140%); - border-bottom: 1px solid var(--hairline); + position: sticky; + top: 0; + z-index: 50; + background: oklch(0.155 0.008 60 / 0.85); + backdrop-filter: blur(14px) saturate(140%); + -webkit-backdrop-filter: blur(14px) saturate(140%); + border-bottom: 1px solid var(--hairline); } .wiz-top-row { - height: 54px; - padding: 0 clamp(16px, 3vw, 28px); - display: flex; align-items: center; gap: 14px; + height: 54px; + padding: 0 clamp(16px, 3vw, 28px); + display: flex; + align-items: center; + gap: 14px; } .wiz-iconbtn { - width: 32px; height: 32px; - display: inline-flex; align-items: center; justify-content: center; - border-radius: 8px; - color: var(--fg-mute); - border: 1px solid transparent; - transition: color .15s, border-color .15s, background .15s; - flex-shrink: 0; + width: 32px; + height: 32px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 8px; + color: var(--fg-mute); + border: 1px solid transparent; + transition: + color 0.15s, + border-color 0.15s, + background 0.15s; + flex-shrink: 0; } .wiz-iconbtn:hover { - color: var(--fg); - background: oklch(0.20 0.009 60 / 0.6); - border-color: var(--hairline); + color: var(--fg); + background: oklch(0.2 0.009 60 / 0.6); + border-color: var(--hairline); +} +.wiz-iconbtn[disabled] { + opacity: 0; + pointer-events: none; } -.wiz-iconbtn[disabled] { opacity: 0; pointer-events: none; } .wiz-logo { - display: inline-flex; align-items: center; gap: 8px; - font-weight: 500; font-size: 14px; letter-spacing: -0.01em; - color: var(--fg); - flex-shrink: 0; + display: inline-flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 14px; + letter-spacing: -0.01em; + color: var(--fg); + flex-shrink: 0; +} +.wiz-logo .logo-mark { + width: 22px; + height: 22px; } -.wiz-logo .logo-mark { width: 22px; height: 22px; } .wiz-step { - flex: 1; - display: flex; align-items: center; gap: 10px; - min-width: 0; - justify-content: center; - font-family: var(--font-mono); - font-size: 11.5px; - color: var(--fg-mute); - letter-spacing: 0.04em; - overflow: hidden; + flex: 1; + display: flex; + align-items: center; + gap: 10px; + min-width: 0; + justify-content: center; + font-family: var(--font-mono); + font-size: 11.5px; + color: var(--fg-mute); + letter-spacing: 0.04em; + overflow: hidden; +} +.wiz-step b { + color: var(--fg); + font-weight: 500; } -.wiz-step b { color: var(--fg); font-weight: 500; } .wiz-step .dot { - width: 4px; height: 4px; border-radius: 50%; - background: var(--fg-faint); - flex-shrink: 0; + width: 4px; + height: 4px; + border-radius: 50%; + background: var(--fg-faint); + flex-shrink: 0; } .wiz-step .lane { - color: var(--accent); - letter-spacing: 0.08em; - text-transform: uppercase; - font-size: 10.5px; - display: inline-flex; align-items: center; gap: 6px; + color: var(--accent); + letter-spacing: 0.08em; + text-transform: uppercase; + font-size: 10.5px; + display: inline-flex; + align-items: center; + gap: 6px; } .wiz-step .lane::before { - content: ""; width: 5px; height: 5px; border-radius: 50%; - background: var(--accent); box-shadow: 0 0 10px var(--accent-glow); + content: ""; + width: 5px; + height: 5px; + border-radius: 50%; + background: var(--accent); + box-shadow: 0 0 10px var(--accent-glow); } .wiz-progress { - position: relative; - height: 2px; - background: oklch(0.30 0.010 60 / 0.35); + position: relative; + height: 2px; + background: oklch(0.3 0.01 60 / 0.35); } .wiz-progress-fill { - position: absolute; left: 0; top: 0; bottom: 0; - background: var(--accent); - box-shadow: 0 0 14px var(--accent-glow); - transition: width .35s cubic-bezier(.4,0,.2,1); + position: absolute; + left: 0; + top: 0; + bottom: 0; + background: var(--accent); + box-shadow: 0 0 14px var(--accent-glow); + transition: width 0.35s cubic-bezier(0.4, 0, 0.2, 1); } @media (max-width: 640px) { - .wiz-step .lane { display: none; } - .wiz-step .dot:first-of-type { display: none; } + .wiz-step .lane { + display: none; + } + .wiz-step .dot:first-of-type { + display: none; + } } /* ── Wizard body ─────────────────────────────────────────────────────── */ .wiz-body { - flex: 1; - position: relative; - padding: clamp(40px, 7vh, 88px) clamp(20px, 4vw, 32px) clamp(40px, 6vh, 64px); - display: flex; flex-direction: column; - align-items: center; + flex: 1; + position: relative; + padding: clamp(40px, 7vh, 88px) clamp(20px, 4vw, 32px) + clamp(40px, 6vh, 64px); + display: flex; + flex-direction: column; + align-items: center; +} +.wiz-body::before { + content: ""; + position: absolute; + top: 5%; + left: 50%; + transform: translateX(-50%); + width: 100%; + max-width: 680px; + height: 380px; + background: radial-gradient( + ellipse at center, + oklch(0.74 0.175 35 / 0.06) 0%, + transparent 70% + ); + pointer-events: none; + z-index: 0; + filter: blur(40px); } .wiz-card { - width: 100%; - max-width: 520px; - display: flex; flex-direction: column; - gap: 28px; + width: 100%; + max-width: 520px; + display: flex; + flex-direction: column; + gap: 28px; +} +.wiz-card.wide { + max-width: 760px; +} +.wiz-card.xwide { + max-width: 1040px; } -.wiz-card.wide { max-width: 760px; } -.wiz-card.xwide { max-width: 1040px; } /* Question heading — quiet, one line, no em accents */ -.wiz-q { display: flex; flex-direction: column; gap: 10px; } +.wiz-q { + display: flex; + flex-direction: column; + gap: 10px; +} .wiz-q h2 { - font-size: clamp(22px, 2.4vw, 28px); - font-weight: 500; - letter-spacing: -0.018em; - line-height: 1.22; - color: var(--fg); - text-wrap: balance; + font-size: clamp(22px, 2.4vw, 28px); + font-weight: 500; + letter-spacing: -0.018em; + line-height: 1.22; + color: var(--fg); + text-wrap: balance; } .wiz-q p { - font-size: 14.5px; - color: var(--fg-mute); - line-height: 1.55; - max-width: 460px; + font-size: 14.5px; + color: var(--fg-mute); + line-height: 1.55; + max-width: 460px; } /* Footer with back/continue */ .wiz-foot { - display: flex; align-items: center; justify-content: space-between; - gap: 14px; - margin-top: 8px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + margin-top: 8px; } .wiz-foot-left { - display: flex; align-items: center; gap: 10px; - font-size: 13px; - color: var(--fg-mute); + display: flex; + align-items: center; + gap: 10px; + font-size: 13px; + color: var(--fg-mute); } .wiz-foot-right { - display: flex; align-items: center; gap: 12px; + display: flex; + align-items: center; + gap: 12px; } .wiz-hint { - font-family: var(--font-mono); - font-size: 11px; - color: var(--fg-faint); - letter-spacing: 0.06em; + font-family: var(--font-mono); + font-size: 11px; + color: var(--fg-faint); + letter-spacing: 0.06em; } .wiz-skip { - font-size: 13.5px; - color: var(--fg-mute); - padding: 8px 12px; - border-radius: 8px; + font-size: 13.5px; + color: var(--fg-mute); + padding: 8px 12px; + border-radius: 8px; +} +.wiz-skip:hover { + color: var(--fg); + background: oklch(0.2 0.009 60 / 0.5); } -.wiz-skip:hover { color: var(--fg); background: oklch(0.20 0.009 60 / 0.5); } .btn-wiz { - height: 42px; - padding: 0 18px; - font-size: 14px; - border-radius: 10px; + height: 42px; + padding: 0 18px; + font-size: 14px; + border-radius: 10px; } /* Fields tightened up for wizard context */ .wiz-field { - display: flex; flex-direction: column; gap: 8px; + display: flex; + flex-direction: column; + gap: 8px; } .wiz-field-label { - font-size: 13.5px; - font-weight: 500; - color: var(--fg-dim); - letter-spacing: -0.005em; + font-size: 13.5px; + font-weight: 500; + color: var(--fg-dim); + letter-spacing: -0.005em; } .wiz-field-hint { - font-size: 12.5px; - color: var(--fg-mute); - line-height: 1.5; + font-size: 12.5px; + color: var(--fg-mute); + line-height: 1.5; } .wiz-input { - width: 100%; - padding: 12px 14px; - background: oklch(0.16 0.008 60 / 0.8); - border: 1px solid var(--hairline); - border-radius: 10px; - color: var(--fg); - font: 14.5px/1.5 var(--font-sans); - outline: none; - transition: border-color .15s, background .15s, box-shadow .15s; + width: 100%; + padding: 12px 14px; + background: oklch(0.16 0.008 60 / 0.8); + border: 1px solid var(--hairline); + border-radius: 10px; + color: var(--fg); + font: 14.5px/1.5 var(--font-sans); + outline: none; + transition: + border-color 0.22s cubic-bezier(0.4, 0, 0.2, 1), + background 0.22s cubic-bezier(0.4, 0, 0.2, 1), + box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1); +} +.wiz-input::placeholder { + color: var(--fg-faint); } -.wiz-input::placeholder { color: var(--fg-faint); } .wiz-input:focus { - border-color: oklch(0.74 0.175 35 / 0.6); - background: oklch(0.18 0.009 60 / 0.95); - box-shadow: 0 0 0 3px oklch(0.74 0.175 35 / 0.12); + border-color: oklch(0.74 0.175 35 / 0.65); + background: oklch(0.18 0.009 60 / 0.95); + box-shadow: + 0 0 0 3px oklch(0.74 0.175 35 / 0.12), + 0 0 32px -10px var(--accent-glow); + animation: pulse-border-glow 2.5s infinite ease-in-out; +} +@keyframes pulse-border-glow { + 0%, + 100% { + box-shadow: + 0 0 0 3px oklch(0.74 0.175 35 / 0.1), + 0 0 24px -12px var(--accent-glow); + } + 50% { + box-shadow: + 0 0 0 4px oklch(0.74 0.175 35 / 0.15), + 0 0 32px -8px var(--accent-glow); + } +} +textarea.wiz-input { + min-height: 96px; + resize: vertical; +} + +/* Premium Onboarding Option Cards */ +.door-card, +.fork-card { + width: 100%; + display: flex; + align-items: center; + gap: 14px; + padding: 16px 18px; + border-radius: 12px; + text-align: left; + cursor: pointer; + color: var(--fg); + border: 1px solid var(--hairline); + background: oklch(0.18 0.009 60 / 0.6); + transition: + border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), + background 0.2s cubic-bezier(0.4, 0, 0.2, 1), + transform 0.15s cubic-bezier(0.25, 1, 0.5, 1), + box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1); +} +.door-card:hover, +.fork-card:hover { + border-color: var(--hairline-2); + background: oklch(0.2 0.01 60 / 0.85); + transform: translateY(-2px); + box-shadow: + 0 12px 30px -10px oklch(0 0 0 / 0.45), + 0 0 28px -12px var(--accent-glow); +} +.door-card:active, +.fork-card:active { + transform: translateY(0) scale(0.985); + transition-duration: 0.06s; +} +.door-card.active, +.fork-card.active { + border-color: var(--accent); + background: oklch(0.2 0.04 35 / 0.4); + box-shadow: 0 0 0 3px oklch(0.74 0.175 35 / 0.15); +} +.door-card.active:hover, +.fork-card.active:hover { + box-shadow: + 0 0 0 3px oklch(0.74 0.175 35 / 0.15), + 0 12px 30px -10px oklch(0 0 0 / 0.45), + 0 0 32px -10px var(--accent-glow); } -textarea.wiz-input { min-height: 96px; resize: vertical; } /* Debug navigator panel */ .debug { - position: fixed; bottom: 16px; right: 16px; - z-index: 1000; - font-family: var(--font-mono); - font-size: 11px; - display: flex; flex-direction: column; gap: 6px; - align-items: flex-end; + position: fixed; + bottom: 16px; + right: 16px; + z-index: 1000; + font-family: var(--font-mono); + font-size: 11px; + display: flex; + flex-direction: column; + gap: 6px; + align-items: flex-end; } .debug-toggle { - padding: 8px 12px; - border-radius: 999px; - background: oklch(0.18 0.009 60 / 0.85); - border: 1px solid var(--hairline); - color: var(--fg-mute); - letter-spacing: 0.06em; - text-transform: uppercase; - backdrop-filter: blur(12px); + padding: 8px 12px; + border-radius: 999px; + background: oklch(0.18 0.009 60 / 0.85); + border: 1px solid var(--hairline); + color: var(--fg-mute); + letter-spacing: 0.06em; + text-transform: uppercase; + backdrop-filter: blur(12px); +} +.debug-toggle:hover { + color: var(--fg); + border-color: var(--hairline-2); } -.debug-toggle:hover { color: var(--fg); border-color: var(--hairline-2); } .debug-panel { - width: 240px; - padding: 12px; - background: oklch(0.16 0.008 60 / 0.95); - border: 1px solid var(--hairline); - border-radius: 12px; - backdrop-filter: blur(20px); - display: flex; flex-direction: column; gap: 4px; - max-height: 60vh; overflow-y: auto; + width: 240px; + padding: 12px; + background: oklch(0.16 0.008 60 / 0.95); + border: 1px solid var(--hairline); + border-radius: 12px; + backdrop-filter: blur(20px); + display: flex; + flex-direction: column; + gap: 4px; + max-height: 60vh; + overflow-y: auto; } .debug-row { - display: flex; align-items: center; gap: 8px; - padding: 6px 8px; - border-radius: 6px; - color: var(--fg-mute); - cursor: pointer; - letter-spacing: 0.04em; - text-transform: uppercase; - font-size: 10px; + display: flex; + align-items: center; + gap: 8px; + padding: 6px 8px; + border-radius: 6px; + color: var(--fg-mute); + cursor: pointer; + letter-spacing: 0.04em; + text-transform: uppercase; + font-size: 10px; +} +.debug-row:hover { + background: oklch(0.2 0.009 60); + color: var(--fg-dim); } -.debug-row:hover { background: oklch(0.20 0.009 60); color: var(--fg-dim); } .debug-row.active { - background: oklch(0.74 0.175 35 / 0.18); - color: var(--accent); + background: oklch(0.74 0.175 35 / 0.18); + color: var(--accent); +} +.debug-row b { + color: inherit; + font-weight: 600; } -.debug-row b { color: inherit; font-weight: 600; } diff --git a/_onboarding/page.tsx b/_onboarding/page.tsx index a997c6f5..bc22bf49 100644 --- a/_onboarding/page.tsx +++ b/_onboarding/page.tsx @@ -543,19 +543,7 @@ function DoorCard({