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,273 @@
1
+ # Gumroad Style
2
+
3
+ Loud neo-brutalist commerce. Yellow + pink primaries, thick black borders, hard offset shadows, flat fills, playful illustration. Confident and a little chaotic - built to sell.
4
+
5
+ **Reference vibe:** gumroad.com (marketplace) and the Gumroad creator dashboard.
6
+
7
+ ---
8
+
9
+ ## Core vibe
10
+
11
+ - **Loud and flat.** Saturated primaries, no gradients on UI, no soft shadows. Everything is bold and unapologetic.
12
+ - **Thick black outlines.** `2-4px` solid black borders define cards, buttons, inputs - the structural language.
13
+ - **Hard offset shadow.** The neo-brutalist tell: `4px 4px 0 #000` (or `6px 6px`), no blur. Things look stamped, not floating.
14
+ - **Yellow + pink.** Brand yellow `#FFC900` for big surfaces/marketing, pink `#FF90E8` for accents, prices, CTAs, active state.
15
+ - **Bold geometric sans.** Heavy grotesque for everything; lowercase wordmark. No serif.
16
+ - **Square-ish, but pills for actions.** Cards near-`0` radius with thick borders; nav items and buttons are full pills.
17
+ - **Playful illustration.** Flat primary-color cartoons, hand-drawn energy, emoji-adjacent. Personality over polish.
18
+ - **Two surfaces.** Loud light/yellow marketplace, and a near-black creator dashboard with pink accents.
19
+
20
+ ---
21
+
22
+ ## Color
23
+
24
+ Portable palette. Map to project tokens when available.
25
+
26
+ | Role | Hex | CSS var (suggested) | Usage |
27
+ |------|-----|---------------------|-------|
28
+ | Brand yellow | `#FFC900` | `--gr-yellow` | Hero bands, marketing background, highlights |
29
+ | Pink | `#FF90E8` | `--gr-pink` | Accent, price tags, CTAs, active nav, links |
30
+ | Ink | `#000000` | `--gr-fg` | Text, borders, shadows |
31
+ | Paper | `#FFFFFF` | `--gr-bg` | Light surface, cards on yellow/dark |
32
+ | Off-white | `#F4F4F0` | `--gr-paper` | Subtle light cards |
33
+ | Teal | `#23A094` | `--gr-teal` | Secondary accent / illustration / chart |
34
+ | Mint | `#90E8D0` | `--gr-mint` | Light teal tint |
35
+ | Purple | `#90A8ED` | `--gr-purple` | Illustration / chart series |
36
+ | Orange | `#FF7051` | `--gr-orange` | Warning / illustration / chart |
37
+
38
+ ### Dark / dashboard surface
39
+
40
+ | Role | Hex | Usage |
41
+ |------|-----|-------|
42
+ | App canvas | `#161616` | Dashboard background |
43
+ | App rail | `#0F0F0F` / `#000` | Sidebar |
44
+ | Panel | `#1C1C1C` | Cards, product tiles |
45
+ | Panel raised | `#242424` | Hover, inputs |
46
+ | Ink on dark | `#FFFFFF` | Primary text |
47
+ | Muted on dark | `#A0A0A0` | Secondary text, inactive nav |
48
+ | Border on dark | `#2A2A2A` | Dividers, tile borders |
49
+ | Pink | `#FF90E8` | Active nav, accents, pill |
50
+
51
+ ### Tailwind mapping (when no project tokens)
52
+
53
+ ```css
54
+ :root {
55
+ --gr-yellow: #ffc900;
56
+ --gr-pink: #ff90e8;
57
+ --gr-fg: #000;
58
+ --gr-bg: #fff;
59
+ --gr-teal: #23a094;
60
+ --gr-dark: #161616;
61
+ }
62
+ ```
63
+
64
+ **Rule:** On light, color is bold and large (yellow bands, pink tags). On dark, the canvas is near-black and pink is the one bright accent. Borders and shadows are always pure black.
65
+
66
+ ---
67
+
68
+ ## Typography
69
+
70
+ ### Font stacks
71
+
72
+ | Role | Stack | Open substitute |
73
+ |------|-------|-----------------|
74
+ | Display / UI (sans) | `"Mabry Pro", "ABC Favorit", "Mona Sans", Inter, system-ui, sans-serif` | `"Mona Sans"` or Inter (tight) |
75
+ | Mono (rare: code/IDs) | `"Berkeley Mono", ui-monospace, monospace` | ui-monospace |
76
+
77
+ Geometric grotesque, bold. The `gumroad` wordmark is lowercase, heavy, slightly rounded.
78
+
79
+ ### Scale
80
+
81
+ | Level | Pattern |
82
+ |-------|---------|
83
+ | Hero | `text-5xl md:text-7xl font-bold tracking-tight text-black` |
84
+ | Section / H2 | `text-2xl md:text-3xl font-bold` |
85
+ | Card title | `text-lg font-semibold` |
86
+ | Body | `text-base leading-relaxed` |
87
+ | Nav / button / label | `text-sm font-medium` |
88
+ | Price | `text-sm font-bold` (in the pink ribbon) |
89
+ | Wordmark | `text-2xl font-bold lowercase tracking-tight` |
90
+
91
+ Weight does the work - prefer `font-bold` over light weights. Tracking tight on big sizes.
92
+
93
+ ---
94
+
95
+ ## Layout tokens
96
+
97
+ | Token | Value |
98
+ |-------|-------|
99
+ | `GR_SHELL` | `mx-auto w-full max-w-[1200px] px-4 sm:px-6` |
100
+ | `GR_SECTION` | `py-10 md:py-14` |
101
+ | `GR_BORDER` | `border-2 border-black` (or `border-4` for emphasis) |
102
+ | `GR_SHADOW` | `shadow-[4px_4px_0_#000]` (hard, no blur) |
103
+ | `GR_CARD_PAD` | `p-5 sm:p-6` |
104
+
105
+ ### Marketplace shell
106
+
107
+ Yellow top band (search + nav pills), then dark or white product grid below.
108
+
109
+ ```tsx
110
+ <div className="min-h-screen bg-[#161616] text-white">
111
+ <header className="bg-[#ffc900] text-black">
112
+ <div className={cn(GR_SHELL, "flex items-center gap-4 py-4")}>
113
+ <span className="text-2xl font-bold lowercase">gumroad</span>
114
+ <input className="flex-1 rounded-full bg-black px-5 py-2.5 text-white" placeholder="Search products" />
115
+ <button className="rounded-full border-2 border-black px-5 py-2 font-medium">Log in</button>
116
+ </div>
117
+ <nav className={cn(GR_SHELL, "flex gap-2 pb-3")}>{pills}</nav>
118
+ </header>
119
+ <main className={cn(GR_SHELL, "py-10")}>{grid}</main>
120
+ </div>
121
+ ```
122
+
123
+ ### Dashboard shell (creator)
124
+
125
+ Black sidebar + dark canvas. Active item = pink text + pink icon.
126
+
127
+ ```tsx
128
+ <div className="flex min-h-screen bg-[#161616] text-white">
129
+ <aside className="w-60 border-r border-[#2a2a2a] bg-black p-3">{nav}</aside>
130
+ <main className="flex-1 p-6 md:p-8">{content}</main>
131
+ </div>
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Borders, radius & shadow
137
+
138
+ | Context | Radius | Border | Shadow |
139
+ |---------|--------|--------|--------|
140
+ | Card / tile (light) | `rounded-none` or `rounded-sm` | `border-2 border-black` | `shadow-[4px_4px_0_#000]` |
141
+ | Card / tile (dark) | `rounded-md` | `border border-[#2a2a2a]` | none (flat) |
142
+ | Button / nav pill | `rounded-full` | `border-2 border-black` (light) | optional hard shadow |
143
+ | Input | `rounded-full` (search) or `rounded-md` | `border-2 border-black` | none |
144
+ | Price tag | ribbon/flag shape | none | none |
145
+
146
+ On light surfaces the hard offset shadow is the whole personality - use it on cards, buttons, callouts. On dark, drop the shadow and use thin borders instead.
147
+
148
+ ---
149
+
150
+ ## Component patterns
151
+
152
+ ### Primary button (pink pill)
153
+
154
+ ```tsx
155
+ <button className="rounded-full border-2 border-black bg-[#ff90e8] px-6 py-3 font-medium text-black shadow-[4px_4px_0_#000] transition-transform hover:-translate-y-0.5 hover:shadow-[6px_6px_0_#000]">
156
+ Start selling
157
+ </button>
158
+ ```
159
+
160
+ ### Secondary / nav pill
161
+
162
+ ```tsx
163
+ // active
164
+ <button className="rounded-full bg-black px-4 py-1.5 text-sm font-medium text-white">Design</button>
165
+ // inactive
166
+ <button className="rounded-full px-4 py-1.5 text-sm font-medium text-black hover:bg-black/10">3D</button>
167
+ ```
168
+
169
+ ### Product tile (dark)
170
+
171
+ ```tsx
172
+ <div className="overflow-hidden rounded-md border border-[#2a2a2a] bg-[#1c1c1c]">
173
+ <div className="aspect-[4/3] bg-[#242424]">{cover}</div>
174
+ <div className="border-t border-[#2a2a2a] p-4">
175
+ <h3 className="font-semibold text-white">Dracula PRO</h3>
176
+ <p className="mt-1 text-sm text-[#a0a0a0]">by Dracula</p>
177
+ </div>
178
+ </div>
179
+ ```
180
+
181
+ ### Price ribbon (the pink flag)
182
+
183
+ A pink tag with a notched/flag end, black text, bold.
184
+
185
+ ```tsx
186
+ <span className="relative inline-block bg-[#ff90e8] px-3 py-1 text-sm font-bold text-black
187
+ [clip-path:polygon(0_0,100%_0,88%_50%,100%_100%,0_100%)]">
188
+ €130.15
189
+ </span>
190
+ ```
191
+
192
+ ### Sidebar nav item (dashboard)
193
+
194
+ ```tsx
195
+ <a className={cn(
196
+ "flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium",
197
+ active ? "text-[#ff90e8]" : "text-white hover:bg-[#242424]"
198
+ )}>
199
+ <Icon className="size-5" /> Home
200
+ </a>
201
+ ```
202
+
203
+ ### Onboarding / getting-started card
204
+
205
+ Bordered dark tile with a flat line-illustration icon and a check when done.
206
+
207
+ ```tsx
208
+ <div className="rounded-md border border-[#2a2a2a] bg-[#1c1c1c] p-6 text-center">
209
+ <div className="mx-auto mb-3 text-[#ff90e8]">{illustration}</div>
210
+ <p className="font-semibold text-white">Showtime</p>
211
+ <p className="mt-1 text-sm text-[#a0a0a0]">Create your first product.</p>
212
+ </div>
213
+ ```
214
+
215
+ ### Illustration band
216
+
217
+ Flat primary-color cartoon, full-bleed inside a bordered black panel. Teal/yellow/pink, hand-drawn energy.
218
+
219
+ ```tsx
220
+ <div className="rounded-md border border-[#2a2a2a] overflow-hidden">
221
+ <img className="w-full" src="/illustration.png" alt="" />
222
+ </div>
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Charts (bold flat data viz)
228
+
229
+ Match the loud, flat personality:
230
+
231
+ - Series in the brand primaries: pink `#ff90e8`, teal `#23a094`, yellow `#ffc900`, purple `#90a8ed`, orange `#ff7051`. Highlighted series = pink.
232
+ - **Flat fills, thick or no bar radius** (`borderRadius: 0-4`). On light, add `borderColor:'#000', borderWidth:2` for the outlined look.
233
+ - Light surface: gridlines `#000` at low opacity or `#e5e5e0`; dark surface: gridlines `#2a2a2a`.
234
+ - Axis text bold sans; tooltip black background, white text, square corners (or a 2px black-bordered box).
235
+ - Doughnut: segments separated by the surface color; bold legend.
236
+
237
+ ```js
238
+ const PINK="#ff90e8", TEAL="#23a094", YELLOW="#ffc900", PURPLE="#90a8ed", GRID="#2a2a2a";
239
+ Chart.defaults.font.family = "Mona Sans, Inter, system-ui, sans-serif";
240
+ // dark: bars backgroundColor:[TEAL, PINK], borderRadius:4
241
+ // light: add borderColor:"#000", borderWidth:2
242
+ // tooltip: { backgroundColor:"#000", cornerRadius:0 }
243
+ ```
244
+
245
+ ---
246
+
247
+ ## Motion & effects
248
+
249
+ - Hover = lift into the shadow: `hover:-translate-y-0.5` with the offset shadow growing (`4px → 6px`). Tactile, stamped.
250
+ - Fast, snappy transitions (`transition-transform duration-100`). No slow fades.
251
+ - No soft/blurred shadows, no gradients on UI chrome, no glass blur.
252
+ - Gradients only inside product cover artwork, never on the UI itself.
253
+
254
+ ---
255
+
256
+ ## Anti-patterns
257
+
258
+ | Avoid | Why |
259
+ |-------|-----|
260
+ | Soft blurred shadows (`shadow-lg`, `shadow-xl`) | The look is hard offset `Npx Npx 0 #000` |
261
+ | Thin `1px` gray borders on light cards | Light cards use thick `2-4px` black borders |
262
+ | Muted / pastel-only palette | Gumroad is saturated and loud (yellow + pink) |
263
+ | Serif type | All bold geometric sans |
264
+ | Gradients on buttons / backgrounds | Keep UI flat; gradients live in cover art only |
265
+ | Light weights for headings | Prefer `font-bold` everywhere |
266
+ | Pink as a huge background fill | Pink is accents/tags/CTAs; yellow is the big surface |
267
+ | Over-rounded `rounded-2xl` cards | Cards are square-ish; only buttons/nav are full pills |
268
+
269
+ ---
270
+
271
+ ## Project overrides
272
+
273
+ If the repo defines `.agents/styles/gumroad.md` or `.agents/styles/gumroad-theme.md`, prefer those tokens and components over this portable spec.
@@ -0,0 +1,355 @@
1
+ # Linear Style
2
+
3
+ Linear's app UI. Near-black canvas, dense aligned navigation, indigo accent, Inter Display headings. Quiet chrome, line-defined structure, content-first hierarchy.
4
+
5
+ **Reference vibe:** Linear desktop app (inbox, issue view, sidebar). See `linear.app/now/how-we-redesigned-the-linear-ui`.
6
+
7
+ ---
8
+
9
+ ## Core vibe
10
+
11
+ - **Product UI, not marketing.** This is an app shell aesthetic: sidebar, panes, lists, properties. Use it for dashboards and tools, not hero landing pages.
12
+ - **Quiet chrome.** Reduce visual noise. Navigation recedes; content leads. Neutral, timeless, minimal blue tint in the grays.
13
+ - **Line over depth.** 1px low-contrast borders separate panes. No shadows on structure (one soft shadow only on floating menus/popovers).
14
+ - **Dense and aligned.** Compact rows, tight vertical rhythm. Labels, icons, and buttons align both vertically and horizontally.
15
+ - **Indigo accent, used sparingly.** Linear's signature `#5e6ad2` for active state, links, focus. 90% of the UI stays neutral gray.
16
+ - **Inter Display for headings, Inter for body.** Display adds expressiveness on titles; regular Inter keeps prose readable.
17
+ - **Soft small radius.** `rounded-md` (6px) on rows, buttons, inputs. Never sharp `0`, never `rounded-xl+`.
18
+ - **Status by glyph.** Colored circle/icon glyphs carry meaning (todo, in-progress, done, urgent), not colored text or fills.
19
+
20
+ ---
21
+
22
+ ## Color
23
+
24
+ Portable palette. LCH-derived neutrals with a faint cool tint. Map to project tokens when available.
25
+
26
+ | Role | Hex | CSS var (suggested) | Usage |
27
+ |------|-----|---------------------|-------|
28
+ | Canvas | `#08090a` | `--ln-bg` | App background, main pane |
29
+ | Surface | `#0f1011` | `--ln-surface` | Sidebar, secondary panes |
30
+ | Surface raised | `#1a1b1e` | `--ln-surface-raised` | Hover rows, selected items, inputs |
31
+ | Popover | `#1c1d1f` | `--ln-popover` | Floating menus, dropdowns, tooltips |
32
+ | Ink | `#f7f8f8` | `--ln-fg` | Headings, primary text, active labels |
33
+ | Muted ink | `#8a8f98` | `--ln-muted-fg` | Secondary text, inactive nav, metadata |
34
+ | Subtle ink | `#62666d` | `--ln-subtle-fg` | Timestamps, placeholders, faint labels |
35
+ | Border | `#1f2023` | `--ln-border` | Pane dividers, row separators |
36
+ | Border strong | `#2c2e33` | `--ln-border-strong` | Hover/active borders, input focus ring base |
37
+ | Accent | `#5e6ad2` | `--ln-accent` | Active state, links, selection, focus |
38
+ | Accent hover | `#6e79de` | `--ln-accent-hover` | Accent hover |
39
+ | Todo | `#e2a336` | `--ln-todo` | Yellow status glyph |
40
+ | In progress | `#f2994a` | `--ln-progress` | Orange status glyph (partial ring) |
41
+ | Done | `#5e6ad2` | `--ln-done` | Filled indigo check |
42
+ | Urgent | `#eb5757` | `--ln-urgent` | Red SLA / urgent glyph |
43
+ | Success | `#4cb782` | `--ln-success` | Positive state |
44
+
45
+ ### Tailwind mapping (when no project tokens)
46
+
47
+ ```css
48
+ :root {
49
+ --ln-bg: #08090a;
50
+ --ln-surface: #0f1011;
51
+ --ln-surface-raised: #1a1b1e;
52
+ --ln-fg: #f7f8f8;
53
+ --ln-muted-fg: #8a8f98;
54
+ --ln-border: #1f2023;
55
+ --ln-accent: #5e6ad2;
56
+ }
57
+ ```
58
+
59
+ | Tailwind | Value |
60
+ |----------|-------|
61
+ | `bg-[#08090a]` | Canvas |
62
+ | `bg-[#0f1011]` | Surface (sidebar) |
63
+ | `bg-[#1a1b1e]` | Hover / selected row |
64
+ | `text-[#f7f8f8]` | Primary |
65
+ | `text-[#8a8f98]` | Muted |
66
+ | `border-[#1f2023]` | Structure |
67
+ | `text-[#5e6ad2]` | Accent |
68
+
69
+ **Rule:** Keep the surface within a 2-3 step gray range. Accent and status colors are glyph-sized only - never large fills.
70
+
71
+ ---
72
+
73
+ ## Typography
74
+
75
+ ### Font stacks
76
+
77
+ | Role | Stack |
78
+ |------|-------|
79
+ | Display (headings) | `Inter Display, Inter, ui-sans-serif, system-ui, sans-serif` |
80
+ | Body / UI | `Inter, ui-sans-serif, system-ui, sans-serif` |
81
+ | Mono (IDs, code) | `Berkeley Mono, ui-monospace, SFMono-Regular, Menlo, monospace` |
82
+
83
+ Load Inter via `@fontsource/inter` or `next/font`. Inter Display is the optical "display" cut for large sizes; fall back to Inter if unavailable.
84
+
85
+ ### Scale
86
+
87
+ | Level | Font | Pattern |
88
+ |-------|------|---------|
89
+ | Issue / page title | Display | `text-2xl md:text-3xl font-semibold tracking-[-0.01em] text-[#f7f8f8]` |
90
+ | Pane heading (Inbox) | Display | `text-base font-semibold text-[#f7f8f8]` |
91
+ | Section label | Body | `text-xs font-medium text-[#8a8f98]` (e.g. Workspace, Favorites) |
92
+ | Row title | Body | `text-sm font-medium text-[#f7f8f8]` |
93
+ | Row subtitle / meta | Body | `text-[13px] text-[#8a8f98]` |
94
+ | Body prose | Body | `text-sm md:text-[15px] leading-relaxed text-[#d0d2d6]` |
95
+ | Timestamp / ID | Body or Mono | `text-xs text-[#62666d]` |
96
+
97
+ ### Section labels
98
+
99
+ Small, medium weight, muted. NOT uppercase, NOT letter-spaced (unlike Vercel style). Examples: `Workspace`, `Favorites`, `Your teams`, `Properties`, `Labels`.
100
+
101
+ ```tsx
102
+ <p className="px-2 text-xs font-medium text-[#8a8f98]">Workspace</p>
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Layout tokens
108
+
109
+ | Token | Value |
110
+ |-------|-------|
111
+ | `LN_SIDEBAR` | `w-56 shrink-0 bg-[#0f1011] border-r border-[#1f2023]` |
112
+ | `LN_LIST` | `w-[360px] shrink-0 border-r border-[#1f2023]` |
113
+ | `LN_MAIN` | `flex-1 min-w-0` |
114
+ | `LN_PROPS` | `w-64 shrink-0 border-l border-[#1f2023] p-4` |
115
+ | `LN_ROW` | `flex items-center gap-2.5 rounded-md px-2 py-1.5` |
116
+ | `LN_CONTENT` | `mx-auto w-full max-w-3xl px-6 md:px-10 py-8` |
117
+
118
+ ### App shell (Linear's core layout)
119
+
120
+ Two or three panes: sidebar + (list) + main, optional right properties rail.
121
+
122
+ ```
123
+ +--------+------------------+---------------------------+--------+
124
+ | side | list / inbox | main (issue / content) | props |
125
+ | bar | rows w/ glyphs | title + body + activity | rail |
126
+ | w-56 | w-[360px] | flex-1 | w-64 |
127
+ +--------+------------------+---------------------------+--------+
128
+ ```
129
+
130
+ ```tsx
131
+ <div className="flex h-screen bg-[#08090a] text-[#f7f8f8]">
132
+ <aside className="w-56 shrink-0 border-r border-[#1f2023] bg-[#0f1011] p-2">...</aside>
133
+ <section className="w-[360px] shrink-0 border-r border-[#1f2023]">...</section>
134
+ <main className="flex-1 min-w-0">...</main>
135
+ <aside className="w-64 shrink-0 border-l border-[#1f2023] p-4">...</aside>
136
+ </div>
137
+ ```
138
+
139
+ ### Breadcrumb header
140
+
141
+ Top of the main pane. Icon + segment, `/` or `chevron` between, muted until the leaf.
142
+
143
+ ```tsx
144
+ <header className="flex items-center gap-1.5 border-b border-[#1f2023] px-4 py-2.5 text-sm">
145
+ <span className="text-[#8a8f98]">Product</span>
146
+ <span className="text-[#62666d]">/</span>
147
+ <span className="text-[#8a8f98]">Insights</span>
148
+ <span className="text-[#62666d]">/</span>
149
+ <span className="text-[#f7f8f8]">LIN-1305</span>
150
+ </header>
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Borders & radius
156
+
157
+ | Context | Radius | Border |
158
+ |---------|--------|--------|
159
+ | Panes (sidebar, list, rail) | n/a | `border-[#1f2023]` dividers only |
160
+ | Sidebar / list rows | `rounded-md` (6px) | none; selection = `bg-[#1a1b1e]` |
161
+ | Buttons, badges, inputs | `rounded-md` (6px) | `border-[#1f2023]` or borderless |
162
+ | Avatars, status icons | `rounded-full` | none |
163
+ | Popovers / menus | `rounded-lg` (8px) | `border-[#2c2e33]` + soft shadow |
164
+
165
+ Dividers: `border-b border-[#1f2023]`, full width inside the pane. Rows are separated by selection bg, not by per-row borders.
166
+
167
+ ---
168
+
169
+ ## Component patterns
170
+
171
+ ### Sidebar nav item
172
+
173
+ Icon + label. Inactive muted, active = raised bg + white text. No left accent bar.
174
+
175
+ ```tsx
176
+ <a className={cn(
177
+ "flex items-center gap-2.5 rounded-md px-2 py-1.5 text-sm",
178
+ active ? "bg-[#1a1b1e] text-[#f7f8f8]" : "text-[#8a8f98] hover:bg-[#1a1b1e] hover:text-[#f7f8f8]"
179
+ )}>
180
+ <Icon className="size-4 shrink-0" />
181
+ <span className="truncate">Inbox</span>
182
+ </a>
183
+ ```
184
+
185
+ ### Status glyph
186
+
187
+ Colored ring/circle, no fill text. The glyph is the only color in the row.
188
+
189
+ ```tsx
190
+ // Todo: hollow yellow circle · In progress: partial orange ring · Done: filled indigo check · Urgent: red square
191
+ <span className="grid size-4 place-items-center rounded-full border-2 border-[#e2a336]" />
192
+ <CheckCircle className="size-4 text-[#5e6ad2]" />
193
+ ```
194
+
195
+ ### Inbox / list row
196
+
197
+ Avatar or glyph left, two-line title + subtitle, status + timestamp right. Selected row gets raised bg.
198
+
199
+ ```tsx
200
+ <a className={cn(
201
+ "flex items-center gap-3 rounded-md px-3 py-2.5",
202
+ selected ? "bg-[#1a1b1e]" : "hover:bg-[#1a1b1e]/60"
203
+ )}>
204
+ <img className="size-7 shrink-0 rounded-full" src={avatar} />
205
+ <div className="min-w-0 flex-1">
206
+ <p className="truncate text-sm font-medium text-[#f7f8f8]">LIN-13055 Add source to insights</p>
207
+ <p className="truncate text-[13px] text-[#8a8f98]">nan mentioned you</p>
208
+ </div>
209
+ <div className="flex items-center gap-2 text-xs text-[#62666d]">
210
+ <StatusGlyph />
211
+ <span>2d</span>
212
+ </div>
213
+ </a>
214
+ ```
215
+
216
+ ### Issue title block
217
+
218
+ Display heading + sub-issue context line.
219
+
220
+ ```tsx
221
+ <div className="mb-6">
222
+ <h1 className="text-2xl font-semibold tracking-[-0.01em] text-[#f7f8f8] md:text-3xl">Update copy</h1>
223
+ <p className="mt-2 flex items-center gap-1.5 text-sm text-[#8a8f98]">
224
+ Sub-issue of <CheckCircle className="size-3.5 text-[#5e6ad2]" />
225
+ <span className="text-[#f7f8f8]">LIN-19734 Update welcome and log in screens</span>
226
+ </p>
227
+ </div>
228
+ ```
229
+
230
+ ### Properties rail row
231
+
232
+ Label-less stacked rows or icon + value. Muted label, white value, click to edit.
233
+
234
+ ```tsx
235
+ <div className="space-y-1">
236
+ <p className="text-xs font-medium text-[#8a8f98]">Properties</p>
237
+ <button className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm text-[#f7f8f8] hover:bg-[#1a1b1e]">
238
+ <CheckCircle className="size-4 text-[#5e6ad2]" /> Done
239
+ </button>
240
+ <button className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm text-[#8a8f98] hover:bg-[#1a1b1e]">
241
+ <CircleDashed className="size-4" /> Set priority
242
+ </button>
243
+ </div>
244
+ ```
245
+
246
+ ### Label / badge chip
247
+
248
+ Small, muted, dot or icon + text. `rounded-md`, faint border or transparent.
249
+
250
+ ```tsx
251
+ <span className="inline-flex items-center gap-1.5 rounded-md border border-[#1f2023] px-2 py-0.5 text-xs text-[#8a8f98]">
252
+ <span className="size-2 rounded-full bg-[#5e6ad2]" /> UI Refresh
253
+ </span>
254
+ ```
255
+
256
+ ### Buttons
257
+
258
+ | Variant | Classes |
259
+ |---------|---------|
260
+ | Primary | `rounded-md bg-[#5e6ad2] px-3 py-1.5 text-sm font-medium text-white hover:bg-[#6e79de]` |
261
+ | Secondary | `rounded-md border border-[#2c2e33] bg-transparent px-3 py-1.5 text-sm text-[#f7f8f8] hover:bg-[#1a1b1e]` |
262
+ | Ghost / toolbar | `rounded-md px-2 py-1.5 text-sm text-[#8a8f98] hover:bg-[#1a1b1e] hover:text-[#f7f8f8]` |
263
+ | Link | `text-[#5e6ad2] hover:underline` |
264
+
265
+ ### Input
266
+
267
+ ```tsx
268
+ <input
269
+ className="w-full rounded-md border border-[#1f2023] bg-[#1a1b1e] px-3 py-1.5 text-sm text-[#f7f8f8] placeholder:text-[#62666d] focus:border-[#5e6ad2] focus:outline-none"
270
+ placeholder="Add description..."
271
+ />
272
+ ```
273
+
274
+ ### Popover / command menu
275
+
276
+ Floating surface gets the one allowed shadow.
277
+
278
+ ```tsx
279
+ <div className="rounded-lg border border-[#2c2e33] bg-[#1c1d1f] p-1 shadow-[0_8px_24px_rgba(0,0,0,0.5)]">
280
+ {items.map(...)}
281
+ </div>
282
+ ```
283
+
284
+ ### Avatar
285
+
286
+ ```tsx
287
+ <img className="size-6 rounded-full ring-1 ring-[#1f2023]" src={src} />
288
+ // stacked: -ml-1.5 ring-2 ring-[#08090a]
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Charts (app data viz)
294
+
295
+ Dashboards and insights panes use charts that stay as quiet as the rest of the chrome:
296
+
297
+ - Series in the neutral grays: `#8a8f98`, `#62666d`, `#2c2e33`, with **one** indigo accent `#5e6ad2` for the highlighted/primary series. Status colors (`#e2a336`, `#f2994a`, `#eb5757`, `#4cb782`) only when the chart literally encodes those states.
298
+ - **Small-radius bars** (`borderRadius: 4`), flat fills. No gradients, no glow.
299
+ - Background = pane surface (`#08090a` / `#0f1011`); gridlines `#1f2023`; axis text `Inter`, muted `#8a8f98`.
300
+ - Tooltip: popover surface `#1c1d1f`, border `#2c2e33`, ink `#f7f8f8`, `8px` corners, the one allowed soft shadow.
301
+ - Keep legends and labels in `Inter` sentence-case (not uppercase), matching section labels.
302
+
303
+ ```js
304
+ const ACCENT="#5e6ad2", S2="#8a8f98", S3="#62666d", S4="#2c2e33", GRID="#1f2023";
305
+ Chart.defaults.font.family = "Inter, system-ui, sans-serif";
306
+ Chart.defaults.color = "#8a8f98";
307
+ // bars: backgroundColor:[S3, ACCENT], borderRadius:4
308
+ // grid: { color: GRID }
309
+ // tooltip: { backgroundColor:"#1c1d1f", borderColor:"#2c2e33", borderWidth:1, cornerRadius:8 }
310
+ ```
311
+
312
+ ---
313
+
314
+ ## Motion & effects
315
+
316
+ - **Quiet.** Transitions are fast and subtle: `transition-colors duration-100`.
317
+ - Hover = bg shift to `#1a1b1e` and/or text muted to white. No scale, no lift on rows.
318
+ - One soft shadow allowed: floating menus/popovers only (`0 8px 24px rgba(0,0,0,.5)`).
319
+ - Focus ring uses accent: `focus:border-[#5e6ad2]` or `focus-visible:ring-1 ring-[#5e6ad2]`.
320
+ - No gradients, no glow, no glass blur on structure.
321
+
322
+ ---
323
+
324
+ ## When to use
325
+
326
+ | Surface | Fit |
327
+ |---------|-----|
328
+ | Issue tracker, inbox, dashboard, settings, admin panel | Strong fit |
329
+ | Tool with sidebar + list + detail panes | Strong fit |
330
+ | Marketing landing / hero page | Poor fit - use `grid` or `vercel-simple` |
331
+ | Data calculator / index of tools | Use `vercel-simple` (mono + sharp) |
332
+
333
+ Linear style is for **product app shells**. If the request is a marketing page, redirect to another style.
334
+
335
+ ---
336
+
337
+ ## Anti-patterns
338
+
339
+ | Avoid | Why |
340
+ |-------|-----|
341
+ | Sharp `rounded-none` rows/buttons | Linear is soft 6px, not Vercel-sharp |
342
+ | `rounded-xl`, `rounded-2xl`, pills on rows | Too soft; breaks the dense app feel |
343
+ | Uppercase letter-spaced section labels | Linear labels are sentence-case, medium weight |
344
+ | Large accent or status color fills | Color lives in glyphs and active state only |
345
+ | Shadows on cards, panes, rows | Structure is line-defined; shadow is popover-only |
346
+ | Per-row 1px borders in lists | Use selection bg + spacing, not borders |
347
+ | High-contrast pure `#000` / `#fff` | Use `#08090a` canvas and `#f7f8f8` ink |
348
+ | Monospace as the primary UI font | Inter is primary; mono only for IDs/code |
349
+ | Gradient or photographic backgrounds | Keep flat neutral surfaces |
350
+
351
+ ---
352
+
353
+ ## Project overrides
354
+
355
+ If the repo defines `.agents/styles/linear.md` or `.agents/styles/linear-theme.md`, prefer those tokens and components over this portable spec.