complete onboarding UX v2
Some checks failed
deploy / deploy (push) Has been cancelled

Tasks C, H, I from the plan:

- Forgiving API key validation: add Printify UUID format and Printful
  length validation, validate on blur for fast feedback, helpful error
  messages with specific guidance

- External links UX: verified all external links use <.external_link>
  component with target="_blank", rel="noopener noreferrer", icon, and
  screen reader text

- Input styling WCAG compliance: increase input border contrast from
  ~3.3:1 to ~4.5-5:1 across all theme moods (neutral, warm, cool, dark)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-03-10 07:56:54 +00:00
parent 951147a675
commit 2282af91db
15 changed files with 1034 additions and 153 deletions

View File

@@ -1516,6 +1516,13 @@
margin-bottom: 0.75rem;
}
.setup-field-note {
font-size: 0.75rem;
color: var(--admin-text-muted);
margin-top: -0.5rem;
margin-bottom: 0.75rem;
}
.setup-link {
color: var(--t-text-primary, #171717);
text-decoration: underline;
@@ -1700,6 +1707,283 @@
margin: 0.25rem 0 1rem;
}
/* ── Guided setup flow ── */
.setup-guided {
max-width: 600px;
margin: 0 auto;
}
/* Progress bar */
.setup-progress {
margin-bottom: 2rem;
}
.setup-progress-list {
display: flex;
justify-content: center;
gap: 0.5rem;
list-style: none;
padding: 0;
margin: 0;
}
.setup-progress-item {
flex: 1;
max-width: 140px;
}
.setup-progress-button {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
width: 100%;
padding: 0.5rem;
border: none;
background: none;
cursor: pointer;
font: inherit;
color: var(--admin-text-muted);
transition: color 0.15s;
}
.setup-progress-button:hover:not(:disabled) {
color: var(--t-text-primary, #171717);
}
.setup-progress-button:disabled {
cursor: default;
}
.setup-progress-indicator {
display: flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
border-radius: 50%;
border: 2px solid var(--t-border-default, #d4d4d4);
background: var(--t-surface-base, #fff);
font-size: 0.875rem;
font-weight: 600;
transition: all 0.15s;
}
.setup-progress-done .setup-progress-indicator {
background: var(--t-status-success, #22c55e);
border-color: var(--t-status-success, #22c55e);
color: #fff;
}
.setup-progress-current .setup-progress-indicator {
border-color: var(--t-accent, #6366f1);
color: var(--t-accent, #6366f1);
}
.setup-progress-label {
font-size: 0.75rem;
font-weight: 500;
}
.setup-progress-current .setup-progress-label {
color: var(--t-text-primary, #171717);
font-weight: 600;
}
/* Intro screen */
.setup-intro {
text-align: center;
padding: 1.5rem;
border: 1px solid var(--t-border-default, #d4d4d4);
border-radius: 0.75rem;
background: var(--t-surface-base, #fff);
}
.setup-intro-content {
text-align: left;
max-width: 480px;
margin: 0 auto;
}
.setup-intro-lead {
font-size: 1rem;
line-height: 1.6;
margin-bottom: 1.5rem;
}
.setup-intro-list {
list-style: none;
padding: 0;
margin: 0 0 1.5rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.setup-intro-list li {
display: flex;
align-items: flex-start;
gap: 0.75rem;
}
.setup-intro-icon {
width: 1.25rem;
height: 1.25rem;
color: var(--t-accent, #6366f1);
flex-shrink: 0;
margin-top: 0.125rem;
}
.setup-intro-list strong {
display: block;
font-weight: 600;
margin-bottom: 0.125rem;
}
.setup-intro-list span {
font-size: 0.875rem;
color: var(--admin-text-muted);
}
.setup-intro-note {
font-size: 0.875rem;
color: var(--admin-text-muted);
padding: 0.75rem 1rem;
background: var(--t-surface-sunken, #f5f5f5);
border-radius: 0.5rem;
margin-bottom: 1rem;
}
.setup-actions-center {
justify-content: center;
}
/* Step container */
.setup-step {
border: 1px solid var(--t-border-default, #d4d4d4);
border-radius: 0.75rem;
background: var(--t-surface-base, #fff);
overflow: hidden;
}
.setup-step-header {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 1rem 1.25rem;
border-bottom: 1px solid var(--t-border-default, #d4d4d4);
background: var(--t-surface-sunken, #f5f5f5);
}
.setup-step-number {
display: flex;
align-items: center;
justify-content: center;
width: 1.75rem;
height: 1.75rem;
border-radius: 50%;
background: var(--t-accent, #6366f1);
color: #fff;
font-size: 0.875rem;
font-weight: 600;
}
.setup-step-number-done {
background: var(--t-status-success, #22c55e);
}
.setup-step-title {
font-size: 1rem;
font-weight: 600;
margin: 0;
}
.setup-step-body {
padding: 1.25rem;
}
.setup-step-done {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1rem;
background: color-mix(in oklab, var(--t-status-success, #22c55e) 10%, transparent);
border-radius: 0.5rem;
margin-bottom: 1rem;
}
.setup-step-done-icon {
width: 1.25rem;
height: 1.25rem;
color: var(--t-status-success, #22c55e);
}
.setup-step-done p {
margin: 0;
font-size: 0.875rem;
}
/* Step navigation */
.setup-step-nav {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: 1rem 1.25rem;
border-top: 1px solid var(--t-border-default, #d4d4d4);
background: var(--t-surface-sunken, #f5f5f5);
}
.setup-step-nav-left,
.setup-step-nav-right {
display: flex;
align-items: center;
}
.setup-step-back {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.5rem 0.75rem;
border: none;
background: none;
font: inherit;
font-size: 0.875rem;
color: var(--admin-text-muted);
cursor: pointer;
transition: color 0.15s;
}
.setup-step-back:hover {
color: var(--t-text-primary, #171717);
}
.setup-step-skip {
text-align: right;
}
.setup-step-skip-btn {
padding: 0.5rem 1rem;
border: 1px solid var(--t-border-default, #d4d4d4);
border-radius: 0.375rem;
background: var(--t-surface-base, #fff);
font: inherit;
font-size: 0.875rem;
cursor: pointer;
transition: all 0.15s;
}
.setup-step-skip-btn:hover {
border-color: var(--t-border-input, #a3a3a3);
}
.setup-step-skip-note {
font-size: 0.75rem;
color: var(--admin-text-muted);
margin-top: 0.5rem;
max-width: 200px;
}
/* ── Dashboard launch checklist ── */
.admin-checklist {
@@ -1834,6 +2118,37 @@
margin-bottom: 0;
}
.admin-checklist-help {
display: inline-flex;
margin-left: 0.25rem;
color: var(--admin-text-muted);
vertical-align: middle;
&:hover { color: var(--t-accent); }
}
/* ── Status banners ── */
.admin-status-banner {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1rem;
border-radius: 0.5rem;
font-size: 0.875rem;
font-weight: 500;
}
.admin-status-banner-live {
background: oklch(0.95 0.05 145);
color: oklch(0.35 0.15 145);
}
.admin-status-banner-setup {
background: oklch(0.95 0.05 250);
color: oklch(0.35 0.15 250);
}
/* ── Page editor ── */
.page-list {

View File

@@ -2898,12 +2898,13 @@
}
.coming-soon-logo {
display: flex;
justify-content: center;
margin-bottom: 1.5rem;
& img {
max-height: 4rem;
max-width: 12rem;
margin-inline: auto;
object-fit: contain;
}
}
@@ -2924,12 +2925,19 @@
}
.coming-soon-admin-link {
font-size: 0.75rem;
position: fixed;
bottom: 1rem;
right: 1rem;
padding: 0.25rem 0.5rem;
font-size: 0.6875rem;
color: var(--t-text-tertiary);
text-decoration: none;
opacity: 0.5;
transition: opacity 0.15s ease;
&:hover {
color: var(--t-text-secondary);
opacity: 1;
}
}
}