aiblueprint-cli 1.4.74 → 1.4.76

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.
@@ -0,0 +1,281 @@
1
+ # Split Auth Style
2
+
3
+ Two-column authentication style for sign-in, signup, OAuth, magic-code, password reset, and account recovery screens. It is not a marketing homepage. It is a focused auth surface with a strong brand panel and a clean form panel.
4
+
5
+ **Reference vibe:** premium SaaS auth page with a dark visual brand panel on the left and a quiet, high-clarity form on the right.
6
+
7
+ ---
8
+
9
+ ## Core vibe
10
+
11
+ - **Split auth layout.** Desktop is two panels: visual brand story on one side, form task on the other. Mobile hides the visual panel and keeps the form first.
12
+ - **One strong bitmap.** Use a real optimized image or generated bitmap as the visual panel background. Avoid SVG-only decoration.
13
+ - **Quiet form column.** The form panel is white or token-card colored, with no nested card shell unless the app design system requires it.
14
+ - **Brand line, not feature list.** The visual panel gets one concise positioning line and one support sentence.
15
+ - **Monochrome OAuth.** Social buttons are black with white text and white icons. Do not use colored Google marks here.
16
+ - **Compact verification.** OTP/code inputs are centered, stable size, and never stretch across the form width.
17
+
18
+ ---
19
+
20
+ ## Invocation aliases
21
+
22
+ Use this style when the user says:
23
+
24
+ - `/usestyle split-auth`
25
+ - `$use-style split-auth`
26
+ - `use split-auth`
27
+ - `/usestyle signin 2pages`
28
+ - `two-column auth`
29
+ - `auth split`
30
+ - `make the sign in page like the example`
31
+
32
+ Normalize those to `split-auth`.
33
+
34
+ ---
35
+
36
+ ## Layout
37
+
38
+ ### Desktop shell
39
+
40
+ Use a full viewport grid. Left panel is visual, right panel is task.
41
+
42
+ ```tsx
43
+ <main className="grid min-h-screen bg-background text-foreground lg:grid-cols-[minmax(0,1.08fr)_minmax(420px,0.92fr)]">
44
+ <section className="relative hidden overflow-hidden bg-black lg:block">
45
+ <div className="absolute inset-0 bg-cover bg-center" />
46
+ <div className="absolute inset-0 bg-[linear-gradient(180deg,rgba(7,9,15,0.18),rgba(7,9,15,0.78))]" />
47
+ <div className="relative flex h-full min-h-screen flex-col justify-between p-12 text-white xl:p-16">
48
+ {brand}
49
+ {positioning}
50
+ {footer}
51
+ </div>
52
+ </section>
53
+ <section className="flex min-h-screen flex-col bg-card">
54
+ <header className="flex items-center justify-between px-5 py-4 sm:px-8 lg:px-10 lg:py-8" />
55
+ <div className="flex flex-1 items-center justify-center px-5 pb-10 pt-4 sm:px-8 lg:px-10 lg:py-12">
56
+ <div className="w-full max-w-[420px]">{form}</div>
57
+ </div>
58
+ </section>
59
+ </main>
60
+ ```
61
+
62
+ ### Mobile shell
63
+
64
+ - Hide the visual panel with `hidden lg:block`.
65
+ - Keep brand logo in the top form header.
66
+ - Use `px-5`, a max width of the full viewport, and enough top spacing to avoid feeling cramped.
67
+ - Do not show the bitmap as a mobile background unless it improves readability.
68
+
69
+ ---
70
+
71
+ ## Visual panel
72
+
73
+ ### Background image
74
+
75
+ Use one optimized bitmap:
76
+
77
+ - Preferred formats: WebP or AVIF.
78
+ - Target size: 1200-2200px wide for desktop visual panels.
79
+ - Target weight: under 150 KB when possible.
80
+ - If source is HEIC, PNG, or large JPG, convert before serving.
81
+ - Use `background-size: cover` and `background-position: center`.
82
+
83
+ ### Overlay
84
+
85
+ Add a dark overlay so white text stays readable:
86
+
87
+ ```tsx
88
+ <div className="absolute inset-0 bg-[radial-gradient(circle_at_20%_20%,rgba(255,255,255,0.18),transparent_28%),linear-gradient(180deg,rgba(7,9,15,0.18),rgba(7,9,15,0.78))]" />
89
+ ```
90
+
91
+ ### Brand lockup
92
+
93
+ Small brand mark at the top, not a giant logo.
94
+
95
+ ```tsx
96
+ <a className="flex w-fit items-center gap-3">
97
+ <span className="flex size-11 items-center justify-center rounded-xl border border-white/20 bg-white/10 shadow-lg shadow-black/20 backdrop-blur-md">
98
+ <Logo className="text-white" />
99
+ </span>
100
+ <span className="text-xl font-semibold">{Product}</span>
101
+ </a>
102
+ ```
103
+
104
+ ### Positioning copy
105
+
106
+ Use one direct brand line. Keep it literal and adapted to the product.
107
+
108
+ Pattern examples:
109
+
110
+ - `{Product} - the workspace your team finally enjoys.`
111
+ - `{Product} - the calmer way to manage your work.`
112
+ - `{Product} - everything important, without the noise.`
113
+
114
+ Support copy examples:
115
+
116
+ - `Access your workspace, pick up where you left off, and keep moving.`
117
+ - `Secure sign-in for teams that need speed without clutter.`
118
+ - `One account, one focused place for the work that matters.`
119
+
120
+ ---
121
+
122
+ ## Form panel
123
+
124
+ ### Heading block
125
+
126
+ ```tsx
127
+ <div className="space-y-3">
128
+ <p className="text-sm font-medium text-primary">Welcome back</p>
129
+ <div className="space-y-2">
130
+ <h1 className="text-3xl font-semibold leading-tight text-foreground">
131
+ Sign in to {Product}
132
+ </h1>
133
+ <p className="text-sm leading-6 text-muted-foreground">
134
+ Use your email code or continue with a connected provider.
135
+ </p>
136
+ </div>
137
+ </div>
138
+ ```
139
+
140
+ ### Inputs
141
+
142
+ - Height: 44px.
143
+ - Radius: 8px or existing design-system `rounded-lg`.
144
+ - Background: panel background or app token `bg-background`.
145
+ - Label: small, medium, high contrast.
146
+ - Placeholder: practical, not playful.
147
+
148
+ ```tsx
149
+ <Input
150
+ placeholder="you@example.com"
151
+ autoComplete="email"
152
+ size="lg"
153
+ className="h-11 rounded-lg bg-background"
154
+ />
155
+ ```
156
+
157
+ ### Primary action
158
+
159
+ Use the app primary color. Keep it full width and stable height.
160
+
161
+ ```tsx
162
+ <LoadingButton className="h-11 w-full rounded-lg">Send code</LoadingButton>
163
+ ```
164
+
165
+ ### Social buttons
166
+
167
+ All OAuth buttons use the same monochrome treatment:
168
+
169
+ ```tsx
170
+ <button className="h-11 w-full rounded-lg border-black bg-black text-white hover:bg-black/90 hover:text-white">
171
+ <GithubIcon className="text-white" />
172
+ <span className="text-white">Sign in with GitHub</span>
173
+ </button>
174
+ ```
175
+
176
+ Rules:
177
+
178
+ - Icon must be white.
179
+ - Text must be white.
180
+ - Do not use colored Google icon segments.
181
+ - Button fill stays black in light mode and dark mode.
182
+ - Use `currentColor` SVGs when possible.
183
+
184
+ ### Divider
185
+
186
+ Use thin lines and a centered lowercase `or`.
187
+
188
+ ```tsx
189
+ <div className="flex items-center gap-6 text-sm">
190
+ <div className="h-px flex-1 bg-border" />
191
+ <span>or</span>
192
+ <div className="h-px flex-1 bg-border" />
193
+ </div>
194
+ ```
195
+
196
+ ### OTP/code state
197
+
198
+ Persist code-entry state in the URL when the user can leave and return from an email app.
199
+
200
+ ```tsx
201
+ await navigate({
202
+ to: '/auth/signin',
203
+ search: { email, step: 'otp' },
204
+ replace: true,
205
+ });
206
+ ```
207
+
208
+ Compact code inputs:
209
+
210
+ ```tsx
211
+ <InputOTP maxLength={6} containerClassName="justify-center">
212
+ <InputOTPGroup>
213
+ <InputOTPSlot index={0} className="size-10 bg-background" />
214
+ <InputOTPSlot index={1} className="size-10 bg-background" />
215
+ <InputOTPSlot index={2} className="size-10 bg-background" />
216
+ <InputOTPSlot index={3} className="size-10 bg-background" />
217
+ <InputOTPSlot index={4} className="size-10 bg-background" />
218
+ <InputOTPSlot index={5} className="size-10 bg-background" />
219
+ </InputOTPGroup>
220
+ </InputOTP>
221
+ ```
222
+
223
+ Do not stretch OTP slots with `w-full justify-between`; that causes clipping on mobile.
224
+
225
+ ---
226
+
227
+ ## Auth page variants
228
+
229
+ ### Sign in
230
+
231
+ - Eyebrow: `Welcome back`
232
+ - Title: `Sign in to {Product}`
233
+ - Description: `Use your email code or continue with a connected provider.`
234
+ - Primary action: `Send code`
235
+ - Secondary: OAuth buttons
236
+ - Footer link: `No account yet? Create one`
237
+
238
+ ### Signup
239
+
240
+ - Eyebrow: `Create your account`
241
+ - Title: `Sign up to {Product}`
242
+ - Description: `We just need a few details to get you started.`
243
+ - Footer link: `You already have an account? Sign in`
244
+
245
+ ### Password reset
246
+
247
+ - Icon in small muted square.
248
+ - Title: `Reset your password`
249
+ - Description: `Enter your email and we will send you a reset link.`
250
+ - Primary action: `Send reset link`
251
+
252
+ ### Verify email
253
+
254
+ - Centered icon, title, and one sentence.
255
+ - No card wrapper.
256
+ - Keep it inside the shared form panel.
257
+
258
+ ---
259
+
260
+ ## Anti-patterns
261
+
262
+ - Do not add cards inside cards.
263
+ - Do not use a marketing navbar on auth pages.
264
+ - Do not use colored social icons in monochrome OAuth buttons.
265
+ - Do not use stock-photo people unless the product specifically needs human trust imagery.
266
+ - Do not put instructional text explaining how the UI works.
267
+ - Do not use visible keyboard shortcut copy on auth pages.
268
+ - Do not let OTP slots resize or shift on input.
269
+ - Do not make the form column wider than 460px.
270
+
271
+ ---
272
+
273
+ ## Review checklist
274
+
275
+ - The layout has two panels on desktop and one clean form panel on mobile.
276
+ - The image is optimized and loads from a browser-friendly format.
277
+ - Social buttons have white icons and white text.
278
+ - Form controls have stable heights and no layout shift.
279
+ - OTP state survives reload, tab switching, and return from email app when relevant.
280
+ - Text does not overlap the visual background or preceding content.
281
+ - Mobile screenshot has no clipped inputs, buttons, or OTP slots.
@@ -0,0 +1,372 @@
1
+ # Stripe Style
2
+
3
+ Clean fintech product UI. Light, airy, trust-driven. Soft elevation over hard lines, blurple accent, rounded geometry.
4
+
5
+ **Reference vibe:** Stripe Dashboard, Checkout, and docs. App panels, settings pages, payment forms.
6
+
7
+ ---
8
+
9
+ ## Core vibe
10
+
11
+ - **Trust-first fintech.** Polished, premium, calm. Feels like money software, not a marketing funnel.
12
+ - **Light canvas.** Off-white / pale blue background, white cards, dark navy ink.
13
+ - **Soft elevation.** Subtle layered shadows define cards, NOT 1px borders. This is the key contrast with `grid` / `vercel-simple`.
14
+ - **Rounded geometry.** `8px` cards, `6px` inputs/buttons, `radius-full` pills and avatars.
15
+ - **Blurple accent.** `#635BFF` for primary actions, active states, links. Green (`#24B47E`) for success/confirm CTAs.
16
+ - **Sans everywhere.** Clean grotesk (Inter / system / sohne). Mono only for card numbers, IDs, code.
17
+ - **Generous whitespace.** Wide gutters, airy row padding, breathing room around values.
18
+
19
+ ---
20
+
21
+ ## Color
22
+
23
+ Portable palette. Map to project tokens when available.
24
+
25
+ | Role | Hex | CSS var (suggested) | Usage |
26
+ |------|-----|---------------------|-------|
27
+ | Canvas | `#F6F9FC` | `--sp-bg` | Page background (pale blue-gray) |
28
+ | Surface | `#FFFFFF` | `--sp-surface` | Cards, panels, inputs |
29
+ | Surface sunken | `#F7FAFC` | `--sp-sunken` | Inset blocks, table headers, hover rows |
30
+ | Ink | `#0A2540` | `--sp-fg` | Headlines, primary values |
31
+ | Slate ink | `#425466` | `--sp-slate` | Body copy, descriptions |
32
+ | Muted ink | `#697386` | `--sp-muted-fg` | Metadata, labels, inactive tabs |
33
+ | Subtle ink | `#8792A2` | `--sp-subtle-fg` | Placeholders, helper text |
34
+ | Border | `#E3E8EE` | `--sp-border` | Input outlines, dividers, table lines |
35
+ | Border strong | `#CFD7DF` | `--sp-border-strong` | Hover/focus outlines |
36
+ | Primary | `#635BFF` | `--sp-primary` | Buttons, active tab, links, focus ring |
37
+ | Primary hover | `#5249E0` | `--sp-primary-hover` | Button hover |
38
+ | Primary surface | `#F5F4FF` | `--sp-primary-surface` | Active row / selected card tint |
39
+ | Success | `#24B47E` | `--sp-success` | Confirm CTA, connected status, paid |
40
+ | Warning | `#D97917` | `--sp-warning` | Pending, attention |
41
+ | Error | `#DF1B41` | `--sp-error` | Failed, destructive |
42
+ | Link | `#635BFF` | `--sp-link` | Text links |
43
+
44
+ ### Dark variant (Checkout dark, dashboards)
45
+
46
+ | Role | Hex |
47
+ |------|-----|
48
+ | Canvas | `#0A2540` |
49
+ | Surface | `#1A2B45` / `#15233B` |
50
+ | Ink | `#FFFFFF` |
51
+ | Muted ink | `#A3ACBA` |
52
+ | Border | `#2A3A55` |
53
+ | Primary CTA | `#24B47E` (green) or `#635BFF` |
54
+
55
+ ### Tailwind mapping (when no project tokens)
56
+
57
+ ```css
58
+ :root {
59
+ --sp-bg: #f6f9fc;
60
+ --sp-surface: #fff;
61
+ --sp-fg: #0a2540;
62
+ --sp-slate: #425466;
63
+ --sp-muted-fg: #697386;
64
+ --sp-border: #e3e8ee;
65
+ --sp-primary: #635bff;
66
+ --sp-success: #24b47e;
67
+ }
68
+ ```
69
+
70
+ | Tailwind | Value |
71
+ |----------|-------|
72
+ | `bg-[#f6f9fc]` | Canvas |
73
+ | `bg-white` | Card / surface |
74
+ | `text-[#0a2540]` | Primary ink |
75
+ | `text-[#697386]` | Muted |
76
+ | `border-[#e3e8ee]` | Structure |
77
+ | `bg-[#635bff]` | Primary action |
78
+ | `bg-[#24b47e]` | Success CTA |
79
+
80
+ **Rule:** Keep the layout neutral (navy/slate/gray) and reserve saturated color for actions, active state, and status. Blurple is the signature; use it deliberately, not everywhere.
81
+
82
+ ---
83
+
84
+ ## Typography
85
+
86
+ ### Font stacks
87
+
88
+ | Role | Stack |
89
+ |------|-------|
90
+ | Sans (everything) | `Inter, "Sohne", ui-sans-serif, system-ui, -apple-system, sans-serif` |
91
+ | Mono (card #, IDs, code) | `"Berkeley Mono", ui-monospace, SFMono-Regular, Menlo, monospace` |
92
+
93
+ Load Inter via `@fontsource/inter` or `next/font`. Stripe's own face is "sohne"; Inter is the closest free substitute.
94
+
95
+ ### Scale
96
+
97
+ | Level | Pattern |
98
+ |-------|---------|
99
+ | Page title | `text-2xl md:text-3xl font-semibold tracking-tight text-[#0a2540]` |
100
+ | Section heading | `text-lg md:text-xl font-semibold text-[#0a2540]` |
101
+ | Section label | `text-xs font-medium uppercase tracking-wide text-[#697386]` |
102
+ | Body | `text-sm md:text-base leading-relaxed text-[#425466]` |
103
+ | Large metric | `text-3xl md:text-4xl font-semibold tabular-nums text-[#0a2540]` |
104
+ | Metadata | `text-xs text-[#697386]` |
105
+ | Card number / ID | `font-mono text-sm tabular-nums text-[#0a2540]` |
106
+
107
+ ### Weight & tracking
108
+
109
+ - Headlines: `font-semibold` (600), `tracking-tight`.
110
+ - Body: `font-normal` (400), normal tracking, relaxed leading.
111
+ - Labels: `font-medium` (500), light uppercase tracking.
112
+ - Numbers: always `tabular-nums`.
113
+
114
+ ---
115
+
116
+ ## Layout tokens
117
+
118
+ | Token | Value |
119
+ |-------|-------|
120
+ | `SP_SHELL` | `mx-auto w-full max-w-6xl px-4 sm:px-6 md:px-8` |
121
+ | `SP_SHELL_NARROW` | `max-w-3xl` (settings, forms) |
122
+ | `SP_SECTION` | `py-10 md:py-14 lg:py-16` |
123
+ | `SP_CARD_PAD` | `p-5 sm:p-6 md:p-8` |
124
+ | `SP_GAP_SECTION` | `space-y-8 md:space-y-10` |
125
+
126
+ ### App shell (dashboard)
127
+
128
+ Top nav + horizontal tab bar + content on pale canvas. Optional right-rail app dock.
129
+
130
+ ```tsx
131
+ <div className="min-h-screen bg-[#f6f9fc] text-[#0a2540]">
132
+ <header className="border-b border-[#e3e8ee] bg-white">
133
+ <div className={cn(SP_SHELL, "flex h-16 items-center justify-between")}>...</div>
134
+ <nav className={cn(SP_SHELL, "flex gap-1")}>{tabs}</nav>
135
+ </header>
136
+ <main className={cn(SP_SHELL, "py-8")}>...</main>
137
+ </div>
138
+ ```
139
+
140
+ ### Settings / form shell (narrow)
141
+
142
+ ```tsx
143
+ <main className={cn(SP_SHELL_NARROW, "py-12")}>
144
+ <nav className="mb-6 text-sm text-[#697386]">Settings › Authorized apps › <span className="text-[#635bff]">SuperTodo</span></nav>
145
+ <h1 className="text-3xl font-semibold tracking-tight">...</h1>
146
+ <div className="mt-8 space-y-8">{rows}</div>
147
+ </main>
148
+ ```
149
+
150
+ ---
151
+
152
+ ## Borders, radius & elevation
153
+
154
+ This is where Stripe diverges from the line-driven styles. **Cards float on soft shadows; borders are thin and quiet.**
155
+
156
+ | Context | Radius | Border | Shadow |
157
+ |---------|--------|--------|--------|
158
+ | Card / panel | `rounded-lg` (8px) | none or `border-[#e3e8ee]` | `SP_SHADOW_CARD` |
159
+ | Floating panel (app dock, popover) | `rounded-xl` (12px) | none | `SP_SHADOW_FLOAT` |
160
+ | Input | `rounded-md` (6px) | `border-[#e3e8ee]` | `SP_SHADOW_INPUT` (inset-ish) |
161
+ | Button | `rounded-md` (6px) | none | `SP_SHADOW_BTN` |
162
+ | Tab / segmented item | `rounded-md` (6px) | none | none until active |
163
+ | Pill / badge / avatar | `rounded-full` | optional | none |
164
+
165
+ ### Shadow tokens (Stripe's signature soft elevation)
166
+
167
+ ```css
168
+ --sp-shadow-card: 0 1px 3px rgba(50,50,93,0.10), 0 1px 2px rgba(0,0,0,0.06);
169
+ --sp-shadow-float: 0 7px 14px rgba(50,50,93,0.10), 0 3px 6px rgba(0,0,0,0.08);
170
+ --sp-shadow-input: 0 1px 1px rgba(0,0,0,0.03);
171
+ --sp-shadow-btn: 0 1px 1px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.08);
172
+ --sp-focus-ring: 0 0 0 3px rgba(99,91,255,0.25);
173
+ ```
174
+
175
+ Tailwind arbitrary equivalents:
176
+
177
+ ```tsx
178
+ // card
179
+ className="shadow-[0_1px_3px_rgba(50,50,93,0.10),0_1px_2px_rgba(0,0,0,0.06)]"
180
+ // floating panel
181
+ className="shadow-[0_7px_14px_rgba(50,50,93,0.10),0_3px_6px_rgba(0,0,0,0.08)]"
182
+ // focus
183
+ className="focus:shadow-[0_0_0_3px_rgba(99,91,255,0.25)]"
184
+ ```
185
+
186
+ Dividers: `border-t border-[#e3e8ee]`.
187
+
188
+ ---
189
+
190
+ ## Component patterns
191
+
192
+ ### Primary button (blurple)
193
+
194
+ ```tsx
195
+ <button className="rounded-md bg-[#635bff] px-4 py-2.5 text-sm font-medium text-white shadow-[0_1px_1px_rgba(0,0,0,0.06),0_1px_2px_rgba(0,0,0,0.08)] transition-colors hover:bg-[#5249e0]">
196
+ Save changes
197
+ </button>
198
+ ```
199
+
200
+ ### Success CTA (green pay button)
201
+
202
+ ```tsx
203
+ <button className="w-full rounded-md bg-[#24b47e] px-4 py-3 text-base font-semibold text-white transition-colors hover:bg-[#1f9e6e]">
204
+ Pay $24.90
205
+ </button>
206
+ ```
207
+
208
+ ### Secondary button
209
+
210
+ ```tsx
211
+ <button className="rounded-md border border-[#e3e8ee] bg-white px-4 py-2 text-sm font-medium text-[#0a2540] shadow-[0_1px_1px_rgba(0,0,0,0.04)] transition-colors hover:bg-[#f7fafc]">
212
+ Uninstall app
213
+ </button>
214
+ ```
215
+
216
+ ### Input
217
+
218
+ ```tsx
219
+ <input
220
+ className="w-full rounded-md border border-[#e3e8ee] bg-white px-3 py-2.5 text-sm text-[#0a2540] placeholder:text-[#8792a2] shadow-[0_1px_1px_rgba(0,0,0,0.03)] transition-shadow focus:border-[#635bff] focus:shadow-[0_0_0_3px_rgba(99,91,255,0.25)] focus:outline-none"
221
+ placeholder="orders@supertodo.me"
222
+ />
223
+ ```
224
+
225
+ ### Tab bar (horizontal nav)
226
+
227
+ Active: blurple pill background + white/dark text. Inactive: muted, transparent.
228
+
229
+ ```tsx
230
+ <button className={cn(
231
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
232
+ active ? "bg-[#635bff] text-white" : "text-[#425466] hover:bg-[#f7fafc]"
233
+ )}>Home</button>
234
+ ```
235
+
236
+ ### Card
237
+
238
+ ```tsx
239
+ <div className="rounded-lg bg-white p-6 shadow-[0_1px_3px_rgba(50,50,93,0.10),0_1px_2px_rgba(0,0,0,0.06)]">
240
+ ...
241
+ </div>
242
+ ```
243
+
244
+ ### Metric block (dashboard "Today")
245
+
246
+ ```tsx
247
+ <div>
248
+ <p className="text-sm font-medium text-[#697386]">Gross volume</p>
249
+ <p className="mt-1 text-3xl font-semibold tabular-nums text-[#0a2540]">$12,198.72</p>
250
+ <p className="mt-1 text-xs text-[#8792a2]">1:00 PM</p>
251
+ </div>
252
+ ```
253
+
254
+ ### Status pill
255
+
256
+ ```tsx
257
+ // success
258
+ <span className="inline-flex items-center gap-1.5 rounded-full bg-[#ecfdf5] px-2.5 py-0.5 text-xs font-medium text-[#24b47e]">
259
+ <span className="h-1.5 w-1.5 rounded-full bg-[#24b47e]" /> Connected
260
+ </span>
261
+ ```
262
+
263
+ ### Sidebar info panel (settings right rail)
264
+
265
+ ```tsx
266
+ <aside className="rounded-lg bg-[#f7fafc] p-6 text-sm">
267
+ <p className="text-xs font-medium uppercase tracking-wide text-[#697386]">Version</p>
268
+ <p className="mt-1 text-[#0a2540]">v1.4.2</p>
269
+ </aside>
270
+ ```
271
+
272
+ ### Radio / toggle row
273
+
274
+ ```tsx
275
+ <label className="flex items-center gap-2 text-sm text-[#0a2540]">
276
+ <input type="radio" className="accent-[#635bff]" /> Yes
277
+ </label>
278
+ ```
279
+
280
+ ### Floating app panel (dock popover)
281
+
282
+ ```tsx
283
+ <div className="rounded-xl bg-white shadow-[0_7px_14px_rgba(50,50,93,0.10),0_3px_6px_rgba(0,0,0,0.08)]">
284
+ <header className="flex items-center justify-between rounded-t-xl bg-[#ec4899] px-4 py-3 text-white">...</header>
285
+ <div className="p-6">...</div>
286
+ </div>
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Hero / marketing (Stripe.com style)
292
+
293
+ When building a marketing page rather than a product UI:
294
+
295
+ - **Diagonal gradient hero.** The famous angled blurple-to-cyan band. Skew a colored block behind the content.
296
+ - Gradient: `linear-gradient(101deg, #635bff 0%, #00d4ff 100%)` or the warmer `#a960ee → #ff333d → #ffcb57`.
297
+ - Light content on top, then white cards float over the seam.
298
+
299
+ ```tsx
300
+ <section className="relative overflow-hidden bg-[#f6f9fc]">
301
+ <div className="absolute inset-0 origin-top-left -skew-y-6 bg-[linear-gradient(101deg,#635bff,#00d4ff)]" />
302
+ <div className="relative mx-auto max-w-6xl px-6 py-32 text-white">...</div>
303
+ </section>
304
+ ```
305
+
306
+ Keep this for marketing only. Product/app UIs stay flat pale-blue, no gradient.
307
+
308
+ ---
309
+
310
+ ## Charts (fintech data viz)
311
+
312
+ Soft, light, blurple-led - the Stripe dashboard look:
313
+
314
+ - Series as a **blurple ramp**: `#635bff → #9b96ff → #cdcaff → #e9e8ff`. The primary/highlighted series is full blurple `#635bff`; supporting series fade toward light lavender.
315
+ - Use `#24b47e` (green) for explicitly positive/paid series, `#df1b41` for negative, sparingly.
316
+ - **Rounded bars** (`borderRadius: 6-8`), flat fills, no gradients or glow.
317
+ - Background stays white/`#f6f9fc`; gridlines `#e3e8ee`; axis text sans (`Inter`), muted `#697386`, tabular nums.
318
+ - Tooltip: navy `#0a2540` background, white text, `8px` corners.
319
+ - Doughnut: white segment stroke (`#fff`), `60-62%` cutout; legend in sans.
320
+
321
+ ```js
322
+ const PRIMARY="#635bff", S2="#9b96ff", S3="#cdcaff", S4="#e9e8ff", GRID="#e3e8ee";
323
+ Chart.defaults.font.family = "Inter, system-ui, sans-serif";
324
+ Chart.defaults.color = "#697386";
325
+ // bars: backgroundColor:[S2, PRIMARY], borderRadius:6
326
+ // grid: { color: GRID }
327
+ // tooltip: { backgroundColor:"#0a2540", cornerRadius:8 }
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Motion & effects
333
+
334
+ - Soft shadow IS the depth language - keep it; do not strip it like in `grid`/`vercel-simple`.
335
+ - Hover: slight bg shift (`#f7fafc`), darker fill on primary buttons, never scale-jump.
336
+ - Focus: 3px blurple ring (`rgba(99,91,255,0.25)`) on inputs and focusable controls. Always visible.
337
+ - `transition-colors duration-150` on interactive elements; `transition-shadow` on inputs.
338
+ - Subtle card lift on hover is OK for clickable cards: shadow `card → float`.
339
+ - No glow halos, no neon, no glass blur on product surfaces.
340
+
341
+ ---
342
+
343
+ ## Mode selection
344
+
345
+ | Surface type | Background | Accent | Notes |
346
+ |--------------|------------|--------|-------|
347
+ | Dashboard / app UI | `#f6f9fc` flat | blurple | shadows + rounded, tabular nums |
348
+ | Settings / forms | `#f6f9fc`, white cards | blurple | narrow shell, breadcrumb nav |
349
+ | Checkout / payment | white OR dark navy | green CTA | rounded inputs, payment-method tabs |
350
+ | Marketing / landing | gradient hero + white | blurple | diagonal skew band |
351
+
352
+ ---
353
+
354
+ ## Anti-patterns
355
+
356
+ | Avoid | Why |
357
+ |-------|-----|
358
+ | `rounded-none` / sharp corners on cards | Stripe is soft and rounded, not blueprint-square |
359
+ | Removing shadows in favor of 1px borders only | Elevation is the core depth language here |
360
+ | Pure black `#000` background | Use navy `#0a2540` for dark, pale `#f6f9fc` for light |
361
+ | Blurple on large fills / backgrounds | Reserve it for actions and active state |
362
+ | Mono for body text | Sans for prose; mono only for card #, IDs, code |
363
+ | Heavy `shadow-2xl` drop shadows | Use the layered soft tokens, not one big blur |
364
+ | Gradient on product/app surfaces | Gradient is marketing-hero only; product stays flat |
365
+ | Skipping the focus ring | Fintech trust UI must keep visible focus states |
366
+ | Saturated multi-color UI | Keep layout neutral; one accent + status colors |
367
+
368
+ ---
369
+
370
+ ## Project overrides
371
+
372
+ If the repo defines `.agents/styles/stripe.md` or `.agents/styles/stripe-theme.md`, prefer those tokens and components over this portable spec.