Skip to content

Commit e09c24b

Browse files
r8a5claude
andcommitted
Editorial onboarding — page-by-page cards with success beats
Replaces the dense 4-step wizard with a single-card-per-page flow that opens on a dedicated welcome screen, walks you through brand URL → DNA review → providers → 28-day plan, and lands on a tick "you're live" screen at the end. Two interstitial "beats" between heavy steps (after brand DNA saves, after the plan renders) make the progress feel earned rather than transactional. Visual: serif italic accent inside the H1 (Instrument Serif, loaded via Google Fonts), generous whitespace, one primary action per card, animated pill stepper that swaps "current → done" as you advance. Beats use the existing accent/good colour tokens for the tick badge. The pane id model now accepts string keys so beats (`beat-brand`, `beat-done`) don't push the milestone stepper around. The keyboard flow learned Enter-on-URL to submit step 1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 5610db7 commit e09c24b

3 files changed

Lines changed: 391 additions & 145 deletions

File tree

public/admin.css

Lines changed: 200 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -589,142 +589,269 @@ em.optional{font-style:normal;color:var(--ink-faint);font-size:11px;letter-spaci
589589
.cal-week-head span{font-size:9px}
590590
}
591591

592-
/* ── Onboarding wizard ───────────────────────────────────────────── */
592+
/* ── Onboarding wizard (editorial / page-by-page) ────────────────── */
593593
.wiz{
594594
position:fixed;inset:0;z-index:100;
595-
background:radial-gradient(900px 500px at 50% 20%, var(--accent-soft), transparent 70%) var(--bg);
595+
background:
596+
radial-gradient(1200px 600px at 50% -10%, rgba(122,255,240,0.10), transparent 65%),
597+
radial-gradient(800px 800px at 110% 110%, rgba(245,207,62,0.06), transparent 60%),
598+
var(--bg);
596599
display:flex;align-items:flex-start;justify-content:center;
597-
padding:48px 20px;overflow-y:auto;
600+
padding:48px 24px;overflow-y:auto;
601+
font-family:var(--sans);
598602
}
599603
.wiz[hidden]{display:none}
604+
605+
/* Family-sized card so the eye lands on one thing at a time. */
600606
.wiz-shell{
601-
position:relative;width:min(720px,100%);
602-
background:var(--bg-card);border:1px solid var(--line-2);
603-
border-radius:16px;padding:36px 40px;
604-
display:flex;flex-direction:column;gap:18px;
605-
box-shadow:0 30px 80px -20px rgba(0,0,0,0.5);
607+
position:relative;
608+
width:min(640px,100%);margin:24px 0;
609+
background:linear-gradient(180deg, rgba(255,255,255,0.02), transparent 30%) var(--bg-card);
610+
border:1px solid var(--line-2);border-radius:18px;
611+
padding:24px 28px 32px;
612+
display:flex;flex-direction:column;gap:0;
613+
box-shadow:
614+
0 40px 100px -30px rgba(0,0,0,0.6),
615+
0 0 0 1px rgba(255,255,255,0.02) inset;
616+
}
617+
618+
/* Topbar: brand mark · stepper · skip. Three columns, baseline-aligned. */
619+
.wiz-head{
620+
display:grid;grid-template-columns:auto 1fr auto;
621+
align-items:center;gap:18px;
622+
margin:0 0 28px;padding:0 0 18px;
623+
border-bottom:1px solid var(--line);
606624
}
607-
.wiz-skip{
608-
position:absolute;top:16px;right:18px;
609-
background:transparent;border:0;color:var(--ink-faint);
610-
font:inherit;font-size:12px;cursor:pointer;letter-spacing:.04em;
611-
text-transform:uppercase;font-family:var(--mono);
625+
.wiz-brand-mark{
626+
display:inline-flex;align-items:center;gap:8px;
627+
font-family:var(--mono);font-size:12px;color:var(--ink-dim);
628+
letter-spacing:.04em;
612629
}
613-
.wiz-skip:hover{color:var(--ink-dim)}
630+
.wiz-dot{
631+
width:8px;height:8px;border-radius:50%;background:var(--accent);
632+
box-shadow:0 0 0 4px rgba(122,255,240,0.15);
633+
}
634+
.wiz-brand-text{color:var(--ink)}
614635

615-
.wiz-head{margin:0 0 8px}
616636
.wiz-steps{
617637
list-style:none;padding:0;margin:0;
618-
display:flex;gap:6px;align-items:center;
619-
font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;
638+
display:flex;gap:6px;align-items:center;justify-content:center;
639+
font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.1em;
620640
}
621641
.wiz-step{
622-
flex:1;display:flex;align-items:center;gap:8px;
623-
padding:8px 10px;border-radius:8px;
624-
color:var(--ink-faint);background:var(--bg-soft);
625-
border:1px solid var(--line);transition:color .2s,border-color .2s,background .2s;
626-
}
627-
.wiz-step span{
628-
width:20px;height:20px;border-radius:50%;flex-shrink:0;
629-
background:var(--bg-card);border:1px solid var(--line-2);
630642
display:inline-flex;align-items:center;justify-content:center;
631-
font-size:11px;font-weight:600;color:var(--ink-dim);
643+
padding:6px 12px;border-radius:999px;
644+
color:var(--ink-faint);background:transparent;border:1px solid transparent;
645+
transition:color .25s, background .25s, border-color .25s;
646+
}
647+
.wiz-step b{font-weight:500;font-size:10px;letter-spacing:.1em}
648+
.wiz-step.is-current{
649+
color:var(--accent);background:var(--accent-soft);border-color:rgba(122,255,240,0.25);
632650
}
633-
.wiz-step b{font-weight:500;font-size:11px}
634-
.wiz-step.is-current{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
635-
.wiz-step.is-current span{background:var(--accent);color:#06080d;border-color:var(--accent)}
636-
.wiz-step.is-done{color:var(--good);border-color:rgba(122,252,166,0.3)}
637-
.wiz-step.is-done span{background:rgba(122,252,166,0.2);color:var(--good);border-color:rgba(122,252,166,0.3)}
651+
.wiz-step.is-done{color:var(--good)}
652+
.wiz-step.is-done::before{content:"✓ ";font-weight:700}
638653

639-
.wiz-pane{display:flex;flex-direction:column;gap:14px;animation:wiz-fade .2s ease}
640-
@keyframes wiz-fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
641-
.wiz-h{margin:0;font-size:24px;font-weight:600;letter-spacing:-0.015em;line-height:1.2}
642-
.wiz-p{margin:0;color:var(--ink-dim);font-size:14px;line-height:1.55}
654+
.wiz-skip{
655+
background:transparent;border:0;color:var(--ink-faint);
656+
font:inherit;font-size:11px;cursor:pointer;letter-spacing:.08em;
657+
text-transform:uppercase;font-family:var(--mono);padding:0;
658+
transition:color .15s;
659+
}
660+
.wiz-skip:hover{color:var(--ink-dim)}
661+
662+
/* Panes — exactly one visible at a time. */
663+
.wiz-pane{
664+
display:flex;flex-direction:column;gap:18px;
665+
animation:wiz-fade .25s ease;
666+
}
667+
.wiz-pane-center{text-align:center;align-items:center;padding:4px 0 8px}
668+
@keyframes wiz-fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
669+
670+
.wiz-eyebrow{
671+
font-family:var(--mono);font-size:10px;letter-spacing:.16em;
672+
text-transform:uppercase;color:var(--accent);
673+
margin:0 0 -4px;
674+
}
675+
.wiz-pane-center .wiz-eyebrow{margin:0}
643676

677+
.wiz-h1{
678+
margin:0;
679+
font-family:'Instrument Serif', 'Iowan Old Style', Palatino, Georgia, serif;
680+
font-weight:400;
681+
font-size:clamp(2rem, 4.5vw, 2.6rem);
682+
letter-spacing:-0.015em;line-height:1.05;color:var(--ink);
683+
}
684+
.wiz-h1 .serif-i{font-style:italic;color:var(--accent)}
685+
.wiz-lede{
686+
margin:0;color:var(--ink-dim);
687+
font-size:15px;line-height:1.6;max-width:520px;
688+
}
689+
.wiz-pane-center .wiz-lede{margin:0 auto}
690+
.wiz-foot-note{
691+
margin:14px 0 0;color:var(--ink-faint);font-size:12px;
692+
}
693+
694+
/* Step-1 bullet list (welcome card) */
695+
.wiz-bullets{
696+
list-style:none;padding:0;margin:8px 0 0;
697+
display:flex;flex-direction:column;gap:10px;
698+
text-align:left;
699+
border-top:1px solid var(--line);border-bottom:1px solid var(--line);
700+
padding:18px 0;
701+
}
702+
.wiz-pane-center .wiz-bullets{margin:8px auto 0;max-width:420px}
703+
.wiz-bullets li{
704+
display:flex;gap:14px;align-items:flex-start;
705+
color:var(--ink-dim);font-size:14px;line-height:1.5;
706+
}
707+
.wiz-bullets li span{
708+
flex-shrink:0;width:24px;height:24px;border-radius:50%;
709+
background:var(--bg-soft);border:1px solid var(--line-2);
710+
display:inline-flex;align-items:center;justify-content:center;
711+
font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-dim);
712+
}
713+
.wiz-bullets li em{font-style:normal;color:var(--ink-faint);font-size:12px}
714+
.wiz-bullets-inline li{font-size:13px}
715+
.wiz-bullets-inline li b{color:var(--accent);font-weight:600;margin-right:2px}
716+
717+
/* Form fields */
644718
.wiz-field{display:flex;flex-direction:column;gap:6px}
645719
.wiz-field span{
646720
font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em;
647721
font-family:var(--mono);
648722
}
649723
.wiz-field span em{font-style:normal;color:var(--ink-faint);text-transform:none;letter-spacing:0;font-family:var(--sans)}
650724
.wiz-field input, .wiz-field textarea{
651-
background:var(--bg-soft);border:1px solid var(--line-2);border-radius:8px;
652-
padding:11px 14px;color:var(--ink);font:inherit;font-size:14px;
725+
background:var(--bg-soft);border:1px solid var(--line-2);border-radius:10px;
726+
padding:12px 14px;color:var(--ink);font:inherit;font-size:14px;
727+
transition:border-color .15s;
653728
}
654729
.wiz-field input:focus,.wiz-field textarea:focus{outline:none;border-color:var(--accent)}
655-
.wiz-field textarea{resize:vertical;line-height:1.55}
730+
.wiz-field textarea{resize:vertical;line-height:1.55;font-family:var(--sans)}
731+
732+
.wiz-field-big input{font-size:17px;padding:14px 18px;border-radius:12px}
656733

657734
.wiz-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
658-
.wiz-row-optional{margin-top:4px}
735+
.wiz-brand-fields{display:flex;flex-direction:column;gap:14px;margin-top:4px}
736+
737+
.wiz-details{margin:0;color:var(--ink-dim)}
738+
.wiz-details > summary{
739+
cursor:pointer;list-style:none;color:var(--accent);
740+
font-size:12px;font-family:var(--mono);letter-spacing:.06em;
741+
display:inline-flex;align-items:center;gap:6px;padding:6px 0;
742+
}
743+
.wiz-details > summary::-webkit-details-marker{display:none}
744+
.wiz-details > summary::after{content:"▾";font-size:10px;transition:transform .15s}
745+
.wiz-details[open] > summary::after{transform:rotate(180deg)}
746+
.wiz-details[open] > summary{margin-bottom:12px}
747+
748+
/* Actions */
659749
.wiz-actions{
660750
display:flex;justify-content:space-between;align-items:center;
661-
gap:8px;margin-top:6px;
751+
gap:10px;margin-top:14px;
662752
}
663-
.wiz-actions .btn{font-size:14px;padding:11px 22px}
753+
.wiz-actions-single{justify-content:center;margin-top:18px}
754+
.wiz-actions .btn{font-size:14px;padding:12px 24px;border-radius:10px}
755+
.wiz-btn-lg{font-size:15px !important;padding:14px 28px !important}
664756
.wiz-err{color:var(--bad);font-size:13px;min-height:16px;margin:0}
665-
.wiz-loading{
666-
padding:24px;text-align:center;color:var(--ink-dim);font-size:14px;
667-
background:var(--bg-soft);border:1px solid var(--line);border-radius:10px;
668-
display:flex;align-items:center;justify-content:center;gap:10px;
669-
}
670-
.wiz-loading::before{
671-
content:"";width:16px;height:16px;border-radius:50%;
672-
border:2px solid var(--line-2);border-top-color:var(--accent);
757+
758+
/* Loading panel */
759+
.wiz-loading-big{
760+
display:flex;gap:18px;align-items:center;
761+
padding:22px;background:var(--bg-soft);
762+
border:1px solid var(--line);border-radius:12px;
763+
}
764+
.wiz-loading-big b{display:block;color:var(--ink);font-size:14px;margin-bottom:4px}
765+
.wiz-loading-big p{margin:0;color:var(--ink-dim);font-size:13px;line-height:1.5}
766+
.wiz-spinner{
767+
flex-shrink:0;width:28px;height:28px;border-radius:50%;
768+
border:3px solid var(--line-2);border-top-color:var(--accent);
673769
animation:wiz-spin .8s linear infinite;
674770
}
675771
@keyframes wiz-spin{to{transform:rotate(360deg)}}
676772

677-
.wiz-provs{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
773+
/* Providers grid */
774+
.wiz-provs{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
678775
.wiz-prov{
679-
display:flex;flex-direction:column;gap:6px;padding:12px 14px;
680-
background:var(--bg-soft);border:1px solid var(--line);border-radius:10px;
681-
transition:border-color .15s;
776+
display:flex;flex-direction:column;gap:8px;padding:14px 16px;
777+
background:var(--bg-soft);border:1px solid var(--line);border-radius:12px;
778+
transition:border-color .15s, background .15s;
682779
}
683-
.wiz-prov.is-set{border-color:var(--good)}
780+
.wiz-prov:focus-within{border-color:var(--accent)}
781+
.wiz-prov.is-set{border-color:rgba(122,252,166,0.4);background:rgba(122,252,166,0.04)}
684782
.wiz-prov-head{display:flex;justify-content:space-between;align-items:center;gap:6px}
685-
.wiz-prov-head b{font-size:13px;font-weight:600}
686-
.wiz-prov-head .wiz-prov-pill{
783+
.wiz-prov-head b{font-size:13px;font-weight:600;color:var(--ink)}
784+
.wiz-prov-pill{
687785
font-family:var(--mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;
688-
padding:2px 6px;border-radius:4px;color:var(--ink-faint);
689-
background:transparent;border:1px solid var(--line);
786+
padding:3px 7px;border-radius:5px;color:var(--ink-faint);
787+
background:transparent;border:1px solid var(--line);white-space:nowrap;
690788
}
691789
.wiz-prov.is-set .wiz-prov-pill{color:var(--good);border-color:rgba(122,252,166,0.4);background:rgba(122,252,166,0.08)}
692790
.wiz-prov input{
693-
background:var(--bg-card);border:1px solid var(--line-2);border-radius:6px;
694-
padding:8px 10px;color:var(--ink);font:inherit;font-size:12px;font-family:var(--mono);
791+
background:var(--bg-card);border:1px solid var(--line-2);border-radius:8px;
792+
padding:9px 11px;color:var(--ink);font:inherit;font-size:12px;font-family:var(--mono);
695793
}
696794
.wiz-prov input:focus{outline:none;border-color:var(--accent)}
697-
.wiz-prov .wiz-prov-hint{font-size:11px;color:var(--ink-faint)}
795+
.wiz-prov .wiz-prov-hint{font-size:11px;color:var(--ink-faint);line-height:1.4}
698796

797+
/* Plan list */
699798
.wiz-plan-list{
700-
list-style:none;margin:0;padding:8px 0;max-height:340px;overflow-y:auto;
701-
display:flex;flex-direction:column;gap:8px;
799+
list-style:none;margin:0;padding:4px 0;max-height:340px;overflow-y:auto;
800+
display:flex;flex-direction:column;gap:6px;
702801
border-top:1px solid var(--line);border-bottom:1px solid var(--line);
802+
padding:14px 2px;
703803
}
704804
.wiz-plan-list li{
705-
display:flex;align-items:flex-start;gap:10px;
706-
padding:10px 12px;background:var(--bg-soft);border:1px solid var(--line);border-radius:8px;
805+
display:flex;align-items:flex-start;gap:14px;
806+
padding:10px 14px;background:var(--bg-soft);border:1px solid var(--line);border-radius:8px;
707807
font-size:13px;line-height:1.45;
708808
}
709809
.wiz-plan-date{
710810
font-family:var(--mono);font-size:10px;color:var(--ink-faint);
711-
letter-spacing:.06em;text-transform:uppercase;
712-
white-space:nowrap;padding-top:1px;flex-shrink:0;min-width:78px;
811+
letter-spacing:.08em;text-transform:uppercase;
812+
white-space:nowrap;padding-top:1px;flex-shrink:0;min-width:64px;
713813
}
714814
.wiz-plan-title{flex:1;color:var(--ink);font-weight:500}
715815
.wiz-plan-kw{
716-
display:block;font-size:11px;color:var(--ink-faint);margin-top:2px;font-weight:400;
816+
display:block;font-size:11px;color:var(--ink-faint);margin-top:2px;
817+
font-weight:400;font-family:var(--mono);letter-spacing:.02em;
818+
}
819+
820+
/* Success beats (between steps) */
821+
.wiz-beat{padding:18px 0 8px}
822+
.wiz-tick{
823+
width:64px;height:64px;border-radius:50%;
824+
display:inline-flex;align-items:center;justify-content:center;
825+
font-size:28px;color:var(--good);
826+
background:rgba(122,252,166,0.1);border:1px solid rgba(122,252,166,0.4);
827+
animation:wiz-pop .35s cubic-bezier(.34,1.56,.64,1);
828+
}
829+
.wiz-tick-big{
830+
font-size:32px;color:var(--accent);
831+
background:rgba(122,255,240,0.1);border-color:rgba(122,255,240,0.4);
832+
}
833+
@keyframes wiz-pop{0%{transform:scale(0.6);opacity:0}100%{transform:scale(1);opacity:1}}
834+
.wiz-pill{
835+
display:inline-block;
836+
padding:1px 9px;border-radius:5px;
837+
background:var(--accent-soft);color:var(--accent);
838+
font-family:var(--mono);font-size:13px;
717839
}
718840

719841
.topbar-tools{display:flex;gap:6px;align-items:center}
720842

721843
@media (max-width:600px){
722-
.wiz-shell{padding:24px 22px;border-radius:12px}
723-
.wiz-h{font-size:20px}
844+
.wiz{padding:20px 14px}
845+
.wiz-shell{padding:18px 20px 24px;border-radius:14px}
846+
.wiz-head{margin-bottom:20px;padding-bottom:14px;gap:10px}
847+
.wiz-brand-mark span:last-child{display:none}
848+
.wiz-step{padding:5px 9px;font-size:9px}
849+
.wiz-h1{font-size:1.85rem}
850+
.wiz-lede{font-size:14px}
724851
.wiz-row{grid-template-columns:1fr}
725-
.wiz-steps{gap:4px}
726-
.wiz-step b{display:none}
727-
.wiz-step{flex:0;padding:8px 10px;border-radius:50%;width:36px;height:36px;justify-content:center}
852+
.wiz-bullets{padding:14px 0}
853+
.wiz-actions{flex-direction:column-reverse;align-items:stretch}
854+
.wiz-actions .btn{width:100%}
728855
}
729856

730857
/* ── Links / aliases ─────────────────────────────────────────────── */

0 commit comments

Comments
 (0)