aiblueprint-cli 1.4.81 → 1.4.82
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.
- package/README.md +21 -17
- package/agents-config/claude-config/scripts/statusline/data/.gitignore +8 -0
- package/agents-config/claude-config/scripts/statusline/data/.gitkeep +0 -0
- package/agents-config/claude-config/scripts/statusline/defaults.json +10 -10
- package/agents-config/claude-config/scripts/statusline/src/commands/interactive-config.ts +118 -6
- package/agents-config/claude-config/scripts/statusline/src/index.ts +100 -9
- package/agents-config/claude-config/scripts/statusline/src/lib/config.ts +28 -2
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/index.ts +164 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +163 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
- package/agents-config/claude-config/scripts/statusline/src/lib/presets.ts +13 -13
- package/agents-config/claude-config/scripts/statusline/statusline.config.free.json +4 -1
- package/agents-config/claude-config/scripts/statusline/statusline.config.json +44 -23
- package/agents-config/scripts/statusline/data/.gitignore +8 -0
- package/agents-config/scripts/statusline/data/.gitkeep +0 -0
- package/agents-config/scripts/statusline/defaults.json +10 -10
- package/agents-config/scripts/statusline/src/commands/interactive-config.ts +118 -6
- package/agents-config/scripts/statusline/src/index.ts +100 -9
- package/agents-config/scripts/statusline/src/lib/config.ts +28 -2
- package/agents-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
- package/agents-config/scripts/statusline/src/lib/features/limits/index.ts +164 -0
- package/agents-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +163 -0
- package/agents-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
- package/agents-config/scripts/statusline/src/lib/presets.ts +13 -13
- package/agents-config/scripts/statusline/statusline.config.free.json +4 -1
- package/agents-config/scripts/statusline/statusline.config.json +44 -23
- package/agents-config/skills/agents-managers/SKILL.md +1 -1
- package/agents-config/skills/agents-managers/references/writing-agent-prompts.md +1 -1
- package/agents-config/{commands/prompts/create-vitejs-app.md → skills/create-vitejs-app/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/SKILL.md +6 -6
- package/agents-config/skills/environments-manager/examples/{claude/commands/dev.md → skills/dev/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/lint.md → skills/lint/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/test.md → skills/test/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/examples/{claude/commands/typecheck.md → skills/typecheck/SKILL.md} +2 -1
- package/agents-config/skills/environments-manager/references/claude.md +13 -9
- package/agents-config/skills/environments-manager/references/cursor.md +2 -2
- package/agents-config/{commands/prompts/nextjs-add-prisma-db.md → skills/nextjs-add-prisma-db/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/nextjs-setup-better-auth.md → skills/nextjs-setup-better-auth/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/nextjs-setup-project.md → skills/nextjs-setup-project/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/prompt.md → skills/prompt/SKILL.md} +5 -0
- package/agents-config/{commands/prompts/saas-challenge-idea.md → skills/saas-challenge-idea/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-architecture.md → skills/saas-create-architecture/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-headline.md → skills/saas-create-headline/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-landing-copywritting.md → skills/saas-create-landing-copywritting/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-legals-docs.md → skills/saas-create-legals-docs/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-logos.md → skills/saas-create-logos/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-create-prd.md → skills/saas-create-prd/SKILL.md} +4 -3
- package/agents-config/{commands/prompts/saas-create-tasks.md → skills/saas-create-tasks/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-define-pricing.md → skills/saas-define-pricing/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-find-domain-name.md → skills/saas-find-domain-name/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/saas-implement-landing-page.md → skills/saas-implement-landing-page/SKILL.md} +1 -0
- package/agents-config/{commands/prompts/setup-tmux.md → skills/setup-tmux/SKILL.md} +5 -0
- package/agents-config/{commands/prompts/tools.md → skills/tools/SKILL.md} +1 -0
- package/agents-config/skills/ultrathink/SKILL.md +1 -1
- package/agents-config/skills/use-style/SKILL.md +7 -4
- package/agents-config/skills/use-style/examples/luma.html +221 -0
- package/agents-config/skills/use-style/examples/testspirite.html +340 -0
- package/agents-config/skills/use-style/styles/ios-app.md +350 -0
- package/agents-config/skills/use-style/styles/luma.md +422 -0
- package/agents-config/skills/use-style/styles/new-york-times.md +1 -1
- package/agents-config/skills/use-style/styles/split-auth.md +2 -2
- package/agents-config/skills/use-style/styles/testspirite.md +397 -0
- package/dist/cli.js +17 -80
- package/package.json +1 -1
- package/agents-config/claude-config/scripts/.claude/commands/fix-on-my-computer.md +0 -87
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
# Luma Style
|
|
2
|
+
|
|
3
|
+
Polished consumer event + calendar app. Pure-black canvas with one soft teal aurora at the very top, near-borderless rounded dark cards, photo-led event covers, white pill buttons, a single blue status accent, and gold event-time labels. Friendly, premium, social.
|
|
4
|
+
|
|
5
|
+
**Reference vibe:** Luma (lu.ma) - events timeline, calendars, discover, account settings.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core vibe
|
|
10
|
+
|
|
11
|
+
- **Black, not gray-dark.** The canvas is near-pure black `#0a0a0b`. Cards lift one subtle step (`#161618`) with whisper-thin `rgba(255,255,255,.08)` borders. Depth comes from fill steps, not shadows.
|
|
12
|
+
- **One aurora, top only.** A soft desaturated teal/blue glow washes the top ~30% of the page, fading to black. The rest of the UI is flat black. Nowhere else gets a gradient.
|
|
13
|
+
- **White pill primary button.** The signature CTA is a solid white button with near-black text (`Save Changes`, `Next`, `Enable 2FA`). Secondary actions are quiet dark-gray fills. This white-on-black button is the most recognizable Luma element.
|
|
14
|
+
- **Photo-led.** Event cover images (square-ish, `rounded-xl`) carry the visual weight of every list row and calendar card. Design assuming rich imagery on the right of each card.
|
|
15
|
+
- **Two chromatic accents, used sparingly.** A medium blue `#2f6bff` for status pills (`Invited`), links, and the active timeline dot; a warm gold `#f5b13d` for event start-times. Everything else is monochrome.
|
|
16
|
+
- **Big, friendly, rounded.** Large radii (`rounded-2xl` cards, `rounded-full` pills/avatars/toggles), bold tight-tracked headings, generous spacing. Geometric-humanist sans, never sharp or corporate.
|
|
17
|
+
- **Timeline as spine.** The events feed is a left date-rail (`Jun 22 / Monday`) + a dot + a dotted vertical connector + the card. This timeline is the core layout primitive.
|
|
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 | `#0a0a0b` | `--lu-bg` | Page background (near-black) |
|
|
28
|
+
| Surface | `#161618` | `--lu-surface` | Cards, event rows, inputs, panels |
|
|
29
|
+
| Surface raised | `#202024` | `--lu-raised` | Hover, secondary buttons, segmented track |
|
|
30
|
+
| Surface high | `#2a2a2e` | `--lu-high` | Active segment, input prefix box |
|
|
31
|
+
| Ink | `#f7f7f8` | `--lu-fg` | Headings, titles, primary values |
|
|
32
|
+
| Body | `#c6c6cb` | `--lu-body` | Body copy, host names |
|
|
33
|
+
| Muted ink | `#8c8c93` | `--lu-muted-fg` | Labels, dates, captions, inactive nav |
|
|
34
|
+
| Subtle ink | `#5e5e65` | `--lu-subtle-fg` | Meta, placeholders, faint icons |
|
|
35
|
+
| Border | `rgba(255,255,255,0.08)` | `--lu-border` | Card outlines, dividers, inputs |
|
|
36
|
+
| Border soft | `rgba(255,255,255,0.05)` | `--lu-border-soft` | Inner hairlines, timeline connector |
|
|
37
|
+
| White button | `#ffffff` | `--lu-white` | Primary CTA fill |
|
|
38
|
+
| White button ink | `#0a0a0a` | `--lu-white-fg` | Text on the white button |
|
|
39
|
+
| Blue | `#2f6bff` | `--lu-blue` | Status pill (`Invited`), links, active dot |
|
|
40
|
+
| Gold | `#f5b13d` | `--lu-gold` | Event start-time label |
|
|
41
|
+
| Positive | `#3ecf8e` | `--lu-pos` | Going / confirmed status |
|
|
42
|
+
| Error | `#f76d6d` | `--lu-error` | Destructive, declined |
|
|
43
|
+
|
|
44
|
+
### The top aurora
|
|
45
|
+
|
|
46
|
+
A soft teal-blue radial glow at the top edge that fades to black. Keep it low-saturation and short - it is ambient, not a hero gradient.
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
background:
|
|
50
|
+
radial-gradient(90% 32% at 50% 0%,
|
|
51
|
+
rgba(40, 82, 96, 0.55) 0%,
|
|
52
|
+
rgba(22, 44, 54, 0.18) 45%,
|
|
53
|
+
transparent 72%),
|
|
54
|
+
#0a0a0b;
|
|
55
|
+
background-attachment: fixed;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Tailwind mapping (when no project tokens)
|
|
59
|
+
|
|
60
|
+
```css
|
|
61
|
+
:root {
|
|
62
|
+
--lu-bg:#0a0a0b; --lu-surface:#161618; --lu-raised:#202024; --lu-high:#2a2a2e;
|
|
63
|
+
--lu-fg:#f7f7f8; --lu-body:#c6c6cb; --lu-muted-fg:#8c8c93; --lu-subtle-fg:#5e5e65;
|
|
64
|
+
--lu-border:rgba(255,255,255,.08);
|
|
65
|
+
--lu-blue:#2f6bff; --lu-gold:#f5b13d;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
| Tailwind | Value |
|
|
70
|
+
|----------|-------|
|
|
71
|
+
| `bg-[#0a0a0b]` | Canvas |
|
|
72
|
+
| `bg-[#161618]` | Card / surface |
|
|
73
|
+
| `bg-[#202024]` | Hover / secondary button |
|
|
74
|
+
| `text-[#f7f7f8]` | Primary ink |
|
|
75
|
+
| `text-[#8c8c93]` | Muted |
|
|
76
|
+
| `border-white/[0.08]` | Structure |
|
|
77
|
+
| `bg-white text-[#0a0a0a]` | Primary CTA |
|
|
78
|
+
| `text-[#2f6bff]` | Blue accent / link |
|
|
79
|
+
| `text-[#f5b13d]` | Event-time gold |
|
|
80
|
+
|
|
81
|
+
**Rule:** Keep 95% of the UI monochrome on black. Blue is for status + links, gold is for event times, white fill is for the one primary button. Never introduce a third UI accent hue (multi-color belongs only to real cover photos).
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Typography
|
|
86
|
+
|
|
87
|
+
### Font stacks
|
|
88
|
+
|
|
89
|
+
| Role | Stack |
|
|
90
|
+
|------|-------|
|
|
91
|
+
| Sans (everything) | `"Inter", "SF Pro Display", ui-sans-serif, system-ui, -apple-system, sans-serif` |
|
|
92
|
+
| Mono (rare: IDs, codes) | `"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace` |
|
|
93
|
+
|
|
94
|
+
Luma's face reads as a friendly geometric-humanist sans. Inter (or SF Pro Display) is the portable match. No serif anywhere. Numbers/dates use `tabular-nums`.
|
|
95
|
+
|
|
96
|
+
### Scale
|
|
97
|
+
|
|
98
|
+
| Level | Pattern |
|
|
99
|
+
|-------|---------|
|
|
100
|
+
| Page title (`Events`, `Settings`) | `text-3xl md:text-4xl font-bold tracking-tight text-[#f7f7f8]` |
|
|
101
|
+
| Section heading (`Your Profile`, `Following`) | `text-lg md:text-xl font-semibold text-[#f7f7f8]` |
|
|
102
|
+
| Event / card title | `text-lg md:text-xl font-semibold tracking-tight text-[#f7f7f8]` |
|
|
103
|
+
| Timeline date | `text-base font-semibold text-[#f7f7f8]` + `text-sm text-[#8c8c93]` (weekday) |
|
|
104
|
+
| Host / body | `text-sm md:text-[15px] text-[#c6c6cb]` |
|
|
105
|
+
| Event time (lead) | `text-sm text-[#8c8c93]` then `· ` then `text-sm font-medium text-[#f5b13d]` |
|
|
106
|
+
| Label / meta / location | `text-sm text-[#8c8c93]` |
|
|
107
|
+
| Field label | `text-[13px] font-medium text-[#8c8c93]` |
|
|
108
|
+
|
|
109
|
+
### Weight & tracking
|
|
110
|
+
|
|
111
|
+
- Page + card titles: `font-bold`/`font-semibold` (600-700), `tracking-tight`.
|
|
112
|
+
- Body, hosts, labels: `font-normal`/`font-medium`, sentence case.
|
|
113
|
+
- No uppercase letter-spaced labels (that's grid/linear). Luma labels are sentence-case muted gray.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Layout tokens
|
|
118
|
+
|
|
119
|
+
| Token | Value |
|
|
120
|
+
|-------|-------|
|
|
121
|
+
| `LU_PAGE` | the top-aurora background on `body`; content `max-w-[860px] mx-auto px-4 md:px-6` |
|
|
122
|
+
| `LU_NAV` | `flex items-center gap-6 py-4` (icon + label tabs, top of page) |
|
|
123
|
+
| `LU_CARD` | `rounded-2xl border border-white/[0.08] bg-[#161618] p-4 md:p-5` |
|
|
124
|
+
| `LU_ROW` | timeline row: `grid grid-cols-[112px_1fr] gap-4` (date rail + card) |
|
|
125
|
+
| `LU_GAP` | `space-y-3` within a day, `space-y-10` between days |
|
|
126
|
+
| `LU_THUMB` | `size-24 md:size-28 rounded-xl object-cover` (event cover) |
|
|
127
|
+
| `LU_PILL` | `rounded-full px-2.5 py-1 text-xs font-medium` |
|
|
128
|
+
|
|
129
|
+
### Page shell
|
|
130
|
+
|
|
131
|
+
Centered single column (Luma is not a sidebar app). Icon nav on top, big title, optional segmented toggle on the right, then the timeline/content.
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
<body className="min-h-screen text-[#f7f7f8]"
|
|
135
|
+
style={{background:"radial-gradient(90% 32% at 50% 0%, rgba(40,82,96,.55), rgba(22,44,54,.18) 45%, transparent 72%), #0a0a0b"}}>
|
|
136
|
+
<header className="mx-auto max-w-[860px] px-4 md:px-6">
|
|
137
|
+
<nav className="flex items-center gap-6 py-4 text-sm">
|
|
138
|
+
<a className="flex items-center gap-2 font-medium text-[#f7f7f8]"><Ticket className="size-4"/> Events</a>
|
|
139
|
+
<a className="flex items-center gap-2 text-[#8c8c93] hover:text-[#f7f7f8]"><Calendar className="size-4"/> Calendars</a>
|
|
140
|
+
<a className="flex items-center gap-2 text-[#8c8c93] hover:text-[#f7f7f8]"><Compass className="size-4"/> Discover</a>
|
|
141
|
+
</nav>
|
|
142
|
+
</header>
|
|
143
|
+
<main className="mx-auto max-w-[860px] px-4 md:px-6 py-6">
|
|
144
|
+
<div className="mb-8 flex items-center justify-between">
|
|
145
|
+
<h1 className="text-3xl md:text-4xl font-bold tracking-tight">Events</h1>
|
|
146
|
+
<SegmentedToggle />
|
|
147
|
+
</div>
|
|
148
|
+
{timeline}
|
|
149
|
+
</main>
|
|
150
|
+
</body>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Component patterns
|
|
156
|
+
|
|
157
|
+
### Top nav tab
|
|
158
|
+
|
|
159
|
+
Line icon + label. Active = white; inactive = muted, brightens on hover. No underline, no pill.
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
<a className={cn("flex items-center gap-2 text-sm",
|
|
163
|
+
active ? "font-medium text-[#f7f7f8]" : "text-[#8c8c93] hover:text-[#f7f7f8]")}>
|
|
164
|
+
<Ticket className="size-4" /> Events
|
|
165
|
+
</a>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Segmented toggle (`Upcoming` / `Past`)
|
|
169
|
+
|
|
170
|
+
A rounded-full dark track; the active segment is a lighter fill.
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
<div className="inline-flex rounded-full bg-[#202024] p-0.5 text-sm">
|
|
174
|
+
<button className="rounded-full bg-[#2a2a2e] px-4 py-1.5 font-medium text-[#f7f7f8]">Upcoming</button>
|
|
175
|
+
<button className="rounded-full px-4 py-1.5 text-[#8c8c93] hover:text-[#f7f7f8]">Past</button>
|
|
176
|
+
</div>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Timeline row (the signature)
|
|
180
|
+
|
|
181
|
+
Left date-rail with a dot + dotted vertical connector; right is the event card.
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
<div className="grid grid-cols-[112px_1fr] gap-4">
|
|
185
|
+
<div className="relative pt-1">
|
|
186
|
+
<p className="text-base font-semibold leading-tight">Jun 22</p>
|
|
187
|
+
<p className="text-sm text-[#8c8c93]">Monday</p>
|
|
188
|
+
{/* dot + dotted connector */}
|
|
189
|
+
<span className="absolute -right-[10px] top-2 size-2.5 rounded-full bg-[#2f6bff] ring-4 ring-[#0a0a0b]" />
|
|
190
|
+
<span className="absolute -right-[5px] top-5 bottom-[-40px] border-l border-dashed border-white/15" />
|
|
191
|
+
</div>
|
|
192
|
+
<EventCard />
|
|
193
|
+
</div>
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Event card
|
|
197
|
+
|
|
198
|
+
Time row (muted lead `·` gold start), title, host (avatar + name), location (pin), footer (status pill + avatar stack), cover image on the right.
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
<article className="rounded-2xl border border-white/[0.08] bg-[#161618] p-4 md:p-5">
|
|
202
|
+
<div className="flex gap-4">
|
|
203
|
+
<div className="min-w-0 flex-1">
|
|
204
|
+
<p className="text-sm text-[#8c8c93]">
|
|
205
|
+
3:30 AM <span className="mx-1">·</span>
|
|
206
|
+
<span className="font-medium text-[#f5b13d]">Jun 21, 6:30 PM PDT</span>
|
|
207
|
+
</p>
|
|
208
|
+
<h3 className="mt-1.5 text-lg md:text-xl font-semibold tracking-tight">Founder DJ Party</h3>
|
|
209
|
+
<p className="mt-2 flex items-center gap-2 text-sm text-[#c6c6cb]">
|
|
210
|
+
<img className="size-5 rounded-full" /> By Founders on Tap
|
|
211
|
+
</p>
|
|
212
|
+
<p className="mt-1 flex items-center gap-1.5 text-sm text-[#8c8c93]">
|
|
213
|
+
<MapPin className="size-4" /> San Francisco, United States
|
|
214
|
+
</p>
|
|
215
|
+
<div className="mt-3 flex items-center gap-2">
|
|
216
|
+
<StatusPill>Invited</StatusPill>
|
|
217
|
+
<AvatarStack count={132} />
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
<img className="size-24 md:size-28 shrink-0 rounded-xl object-cover" />
|
|
221
|
+
</div>
|
|
222
|
+
</article>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Status pill (`Invited`)
|
|
226
|
+
|
|
227
|
+
The one blue chip. Variants reuse `pos`/`error`/muted on the same shape.
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
<span className="rounded-full bg-[#2f6bff] px-2.5 py-1 text-xs font-medium text-white">Invited</span>
|
|
231
|
+
// going: bg-[#3ecf8e]/15 text-[#3ecf8e]
|
|
232
|
+
// pending: bg-[#202024] text-[#8c8c93]
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Avatar stack + overflow count
|
|
236
|
+
|
|
237
|
+
Overlapping round avatars (ringed in the canvas color) ending in a `+N` chip.
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
<div className="flex items-center">
|
|
241
|
+
<div className="flex -space-x-2">
|
|
242
|
+
{avatars.map(a => <img className="size-6 rounded-full ring-2 ring-[#0a0a0b]" />)}
|
|
243
|
+
</div>
|
|
244
|
+
<span className="ml-2 rounded-full bg-[#202024] px-2 py-0.5 text-xs text-[#8c8c93]">+132</span>
|
|
245
|
+
</div>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Buttons
|
|
249
|
+
|
|
250
|
+
| Variant | Classes |
|
|
251
|
+
|---------|---------|
|
|
252
|
+
| Primary (white pill) | `rounded-full bg-white px-4 py-2 text-sm font-semibold text-[#0a0a0a] transition-opacity hover:opacity-90` |
|
|
253
|
+
| Secondary (dark) | `rounded-full bg-[#202024] px-4 py-2 text-sm font-medium text-[#f7f7f8] hover:bg-[#2a2a2e]` |
|
|
254
|
+
| Ghost / icon | `rounded-full p-2 text-[#8c8c93] hover:bg-[#202024] hover:text-[#f7f7f8]` |
|
|
255
|
+
| Link | `text-sm font-medium text-[#2f6bff] hover:opacity-90` |
|
|
256
|
+
| Calendar action | secondary + trailing `→`, e.g. `View Calendar →` |
|
|
257
|
+
|
|
258
|
+
Primary buttons often carry a small leading glyph (sparkle/sign icon), matching Luma's `Save Changes`.
|
|
259
|
+
|
|
260
|
+
### Calendar / following card
|
|
261
|
+
|
|
262
|
+
Rounded app-icon, name, `View Calendar →`, then an upcoming-events list (title + date).
|
|
263
|
+
|
|
264
|
+
```tsx
|
|
265
|
+
<div className="flex gap-4 rounded-2xl border border-white/[0.08] bg-[#161618] p-4">
|
|
266
|
+
<div className="w-44 shrink-0">
|
|
267
|
+
<img className="size-12 rounded-xl" />
|
|
268
|
+
<p className="mt-2 font-semibold leading-tight">Bond AI - SF & Bay Area</p>
|
|
269
|
+
<button className="mt-2 rounded-full bg-[#202024] px-3 py-1.5 text-xs text-[#f7f7f8] hover:bg-[#2a2a2e]">View Calendar →</button>
|
|
270
|
+
</div>
|
|
271
|
+
<div className="min-w-0 flex-1 space-y-3">
|
|
272
|
+
<p className="text-xs text-[#8c8c93]">Upcoming Events</p>
|
|
273
|
+
<div>
|
|
274
|
+
<p className="text-sm font-medium">HUD Frontier / RSI RL Hackathon</p>
|
|
275
|
+
<p className="text-xs tabular-nums text-[#8c8c93]">Sat, Jun 20, 11:00 AM</p>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Field label + input
|
|
282
|
+
|
|
283
|
+
Label sits *above* a dark rounded input. Sentence-case, muted.
|
|
284
|
+
|
|
285
|
+
```tsx
|
|
286
|
+
<label className="block">
|
|
287
|
+
<span className="mb-1.5 block text-[13px] font-medium text-[#8c8c93]">First Name</span>
|
|
288
|
+
<input className="w-full rounded-xl border border-white/[0.08] bg-[#161618] px-3.5 py-2.5 text-sm text-[#f7f7f8] placeholder:text-[#5e5e65] focus:border-[#2f6bff]/60 focus:outline-none focus:ring-2 focus:ring-[#2f6bff]/20" />
|
|
289
|
+
</label>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Prefix-segmented input
|
|
293
|
+
|
|
294
|
+
A high-fill prefix box (`@`, `instagram.com/`) fused to the input - Luma's social-links pattern.
|
|
295
|
+
|
|
296
|
+
```tsx
|
|
297
|
+
<div className="flex overflow-hidden rounded-xl border border-white/[0.08] bg-[#161618]">
|
|
298
|
+
<span className="grid place-items-center bg-[#2a2a2e] px-3 text-sm text-[#8c8c93]">instagram.com/</span>
|
|
299
|
+
<input className="flex-1 bg-transparent px-3 py-2.5 text-sm text-[#f7f7f8] focus:outline-none" placeholder="username" />
|
|
300
|
+
</div>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Settings row (label + desc + action)
|
|
304
|
+
|
|
305
|
+
Bordered row: icon + title + sub on the left, white/secondary action button on the right. Used for `Password & Security`, `Emails`.
|
|
306
|
+
|
|
307
|
+
```tsx
|
|
308
|
+
<div className="flex items-center justify-between rounded-xl border border-white/[0.08] bg-[#161618] p-4">
|
|
309
|
+
<div className="flex items-start gap-3">
|
|
310
|
+
<Lock className="mt-0.5 size-4 text-[#8c8c93]" />
|
|
311
|
+
<div>
|
|
312
|
+
<p className="text-sm font-semibold text-[#f7f7f8]">Account Password</p>
|
|
313
|
+
<p className="text-sm text-[#8c8c93]">You have not set up a password.</p>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
<button className="rounded-full bg-white px-4 py-2 text-sm font-semibold text-[#0a0a0a] hover:opacity-90">Set Password</button>
|
|
317
|
+
</div>
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Underline tabs (`Account` / `Preferences` / `Payment`)
|
|
321
|
+
|
|
322
|
+
Active tab = white ink + a short bottom bar; inactive = muted.
|
|
323
|
+
|
|
324
|
+
```tsx
|
|
325
|
+
<div className="flex gap-6 border-b border-white/[0.08] text-sm">
|
|
326
|
+
<button className="relative pb-3 font-medium text-[#f7f7f8]">
|
|
327
|
+
Account <span className="absolute inset-x-0 -bottom-px h-0.5 rounded-full bg-[#f7f7f8]" />
|
|
328
|
+
</button>
|
|
329
|
+
<button className="pb-3 text-[#8c8c93] hover:text-[#f7f7f8]">Preferences</button>
|
|
330
|
+
</div>
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Onboarding / welcome card
|
|
334
|
+
|
|
335
|
+
Icon thumb + title + description, page dots bottom-left, white `Next` button bottom-right.
|
|
336
|
+
|
|
337
|
+
```tsx
|
|
338
|
+
<div className="flex items-center gap-5 rounded-2xl border border-white/[0.08] bg-[#161618] p-5">
|
|
339
|
+
<div className="grid size-20 shrink-0 place-items-center rounded-xl bg-[#202024]"><CalendarIcon /></div>
|
|
340
|
+
<div className="flex-1">
|
|
341
|
+
<p className="text-lg font-semibold">Welcome to Luma Calendar</p>
|
|
342
|
+
<p className="mt-1 text-sm text-[#8c8c93]">Easily share and manage your events.</p>
|
|
343
|
+
<div className="mt-4 flex items-center justify-between">
|
|
344
|
+
<div className="flex gap-1.5">{dots}</div>
|
|
345
|
+
<button className="rounded-full bg-white px-4 py-2 text-sm font-semibold text-[#0a0a0a]">Next</button>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Empty state
|
|
352
|
+
|
|
353
|
+
Quiet centered glyph + title + one muted sub line; no illustration weight.
|
|
354
|
+
|
|
355
|
+
```tsx
|
|
356
|
+
<div className="rounded-2xl border border-white/[0.08] bg-[#161618] p-6 text-center">
|
|
357
|
+
<p className="text-sm font-semibold text-[#f7f7f8]">No Calendars</p>
|
|
358
|
+
<p className="mt-1 text-sm text-[#8c8c93]">You are not an admin of any calendars.</p>
|
|
359
|
+
</div>
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Borders, radius & elevation
|
|
365
|
+
|
|
366
|
+
| Context | Radius | Border | Fill |
|
|
367
|
+
|---------|--------|--------|------|
|
|
368
|
+
| Card / event row / panel | `rounded-2xl` (16px) | `border-white/[0.08]` | `#161618` |
|
|
369
|
+
| Input / settings row | `rounded-xl` (12px) | `border-white/[0.08]` | `#161618` |
|
|
370
|
+
| Button / pill / toggle / avatar | `rounded-full` | none (white/dark fill) | white or `#202024` |
|
|
371
|
+
| Event cover image | `rounded-xl` (12px) | none | photo |
|
|
372
|
+
| App-icon thumb | `rounded-xl` (12px) | none | image / `#202024` |
|
|
373
|
+
|
|
374
|
+
No drop shadows on cards - elevation is the fill step from `#0a0a0b` → `#161618` plus the hairline border. The top aurora is the only ambient light.
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Motion & effects
|
|
379
|
+
|
|
380
|
+
- **Calm and quick.** `transition-colors`/`transition-opacity duration-150`. Hover = fill lift (`#202024` → `#2a2a2e`), muted text → white, white button → `opacity-90`.
|
|
381
|
+
- Focus: 2px blue ring `ring-[#2f6bff]/20` + blue-tinted border on inputs.
|
|
382
|
+
- No neon glow (raycast), no hard offset shadow (gumroad), no floating-window backdrop (dusk). The aurora is a flat top wash, not animated.
|
|
383
|
+
- Cards/rows may fade-slide in on load; no scale-bounce.
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## When to use
|
|
388
|
+
|
|
389
|
+
| Surface | Fit |
|
|
390
|
+
|---------|-----|
|
|
391
|
+
| Event feed / timeline, calendar list, discover | Strong fit |
|
|
392
|
+
| Account / settings, profile, billing forms | Strong fit |
|
|
393
|
+
| Onboarding cards, RSVP / invite surfaces | Strong fit |
|
|
394
|
+
| Consumer social/community product (dark) | Strong fit |
|
|
395
|
+
| Dense analytics dashboard (KPIs, charts) | Poor fit - use `dusk` |
|
|
396
|
+
| 3-pane issue tracker | Use `linear` |
|
|
397
|
+
| Marketing hero / landing page | Use `raycast`, `grid`, or `vercel-simple` |
|
|
398
|
+
|
|
399
|
+
Luma is for **dark consumer event/calendar/account app shells** built around a centered column and photo-led cards.
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Anti-patterns
|
|
404
|
+
|
|
405
|
+
| Avoid | Why |
|
|
406
|
+
|-------|-----|
|
|
407
|
+
| Mid-gray `#111`/`#18181b` canvas | Luma's canvas is near-pure black `#0a0a0b`; cards are the lighter step |
|
|
408
|
+
| Gradient on cards or buttons | The only gradient is the top aurora; chrome stays flat |
|
|
409
|
+
| Colored primary buttons | The primary CTA is a white pill with near-black text |
|
|
410
|
+
| Heavy `shadow-lg` elevation | Depth is the fill step + hairline border, never drop shadows |
|
|
411
|
+
| Sharp `rounded-none` / small radius | The look is large, friendly radius (16px cards, full pills) |
|
|
412
|
+
| A third UI accent hue | Only blue (status/links) + gold (times); other color is real cover photos |
|
|
413
|
+
| Uppercase letter-spaced labels | Luma labels are sentence-case muted gray |
|
|
414
|
+
| Sidebar app shell | Luma is a centered single column, not a sidebar layout |
|
|
415
|
+
| Text-only event rows | Every event/calendar row is anchored by a cover image |
|
|
416
|
+
| Serif type | Inter / geometric-humanist sans throughout |
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Project overrides
|
|
421
|
+
|
|
422
|
+
If the repo defines `.agents/styles/luma.md` or `.agents/styles/luma-theme.md`, prefer those tokens and components over this portable spec.
|
|
@@ -127,7 +127,7 @@ A wide left region and a rule-divided right rail. The vertical rule between them
|
|
|
127
127
|
</div>
|
|
128
128
|
<figure>
|
|
129
129
|
<img className="w-full" />
|
|
130
|
-
<figcaption className="mt-1 text-right font-sans text-xs text-[#999]">Jade Gao/AFP
|
|
130
|
+
<figcaption className="mt-1 text-right font-sans text-xs text-[#999]">Jade Gao/AFP — Getty</figcaption>
|
|
131
131
|
</figure>
|
|
132
132
|
</article>
|
|
133
133
|
```
|
|
@@ -21,10 +21,10 @@ Two-column authentication style for sign-in, signup, OAuth, magic-code, password
|
|
|
21
21
|
|
|
22
22
|
Use this style when the user says:
|
|
23
23
|
|
|
24
|
-
- `/
|
|
24
|
+
- `/useskill split-auth`
|
|
25
25
|
- `$use-style split-auth`
|
|
26
26
|
- `use split-auth`
|
|
27
|
-
- `/
|
|
27
|
+
- `/useskill signin 2pages`
|
|
28
28
|
- `two-column auth`
|
|
29
29
|
- `auth split`
|
|
30
30
|
- `make the sign in page like the example`
|