@stylecrib/cli 0.0.0-stage → 0.3.2
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 +163 -2
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +7182 -0
- package/package.json +69 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/.anchor-render.png +0 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/audit.log.jsonl +6 -0
- package/themes/arc-stack/dismissals.jsonl +3 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/audit.log.jsonl +1 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/.anchor-render.png +0 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/audit.log.jsonl +3 -0
- package/themes/bento-modular/dismissals.jsonl +1 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/audit.log.jsonl +1 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/audit.log.jsonl +2 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/audit.log.jsonl +2 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/audit.log.jsonl +1 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/audit.log.jsonl +17 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/.anchor-render.png +0 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/audit.log.jsonl +1 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/.anchor-render.png +0 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/audit.log.jsonl +2 -0
- package/themes/fresh-plate/dismissals.jsonl +3 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/audit.log.jsonl +1 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/.anchor-render.png +0 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/audit.log.jsonl +4 -0
- package/themes/kinetic-headline/dismissals.jsonl +1 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/audit.log.jsonl +1 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/.anchor-render.png +0 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/audit.log.jsonl +2 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/audit.log.jsonl +1 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/audit.log.jsonl +1 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/audit.log.jsonl +1 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/audit.log.jsonl +1 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/audit.log.jsonl +10 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/audit.log.jsonl +1 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/.anchor-render.png +0 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/audit.log.jsonl +2 -0
- package/themes/team-kanban/dismissals.jsonl +1 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/audit.log.jsonl +3 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Design Direction — Community-Niche
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Patreon coral-tier warmth · Discord-server soft purple + role tags · Buy Me a Coffee yellow CTA · Memberful clean tier-display · Geneva community-room friendliness
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
A creator's home, not a SaaS landing. Soft purple-pink wash with a coral primary that owns every membership CTA. Tier-cards, member spotlights, and a recent-posts feed are the basic units of the page. Warm rounded surfaces, tinted badges per role/tier, and friendly illustrated avatars where corporate headshots would feel too cold.
|
|
8
|
+
|
|
9
|
+
Where `linkedin-pro` is corporate-blue density and `dating-friendly` is intimate-warm prompt-cards, community-niche is **creator-warm** — purple-pink-coral over lavender, a tip-jar yellow accent, and tiers as the dominant content shape. The page should feel like walking into a small, curated room, not browsing a marketplace.
|
|
10
|
+
|
|
11
|
+
## Reference brands
|
|
12
|
+
- **Patreon** → coral primary + tier-tinted cards + creator-photo hero. The membership-economy canonical.
|
|
13
|
+
- **Discord (server pages)** → soft purple bg + role-color name tags + community-room shape. The "members in this server" surface.
|
|
14
|
+
- **Buy Me a Coffee** → yellow tip CTA + warm playful chrome. The one-time-support color.
|
|
15
|
+
- **Memberful** → clean tier-display + readable subscription chrome. The well-organized version.
|
|
16
|
+
- **Geneva** → soft pastel rooms + friendly small-group warmth. The "this is a vibe, not a product" energy.
|
|
17
|
+
|
|
18
|
+
## Tokens
|
|
19
|
+
HSL triples in `src/index.css`. Every token's `from:` comment names its brand origin.
|
|
20
|
+
|
|
21
|
+
Surface stack: **lavender wash** (`278 40% 97%`, the home surface) → **white card** (`0 0% 100%`) → **deeper lavender tint** (`278 40% 93%`, hover/secondary). Warmth runs through every neutral; pure gray reads enterprise and breaks the creator-home feel.
|
|
22
|
+
|
|
23
|
+
Primary is **Patreon coral-pink** (`340 80% 55%`) — the membership-join CTA, the tip-jar, the tier-card top-stripe. It carries the entire economic action of the page.
|
|
24
|
+
|
|
25
|
+
Brand tokens — language, not decoration:
|
|
26
|
+
- `--patreon-coral` (= primary) — membership CTA.
|
|
27
|
+
- `--discord-purple` — secondary identity, server-tag / role-tag color.
|
|
28
|
+
- `--bmc-yellow` — Buy Me a Coffee yellow; the **one-time-tip** action, distinct from recurring membership.
|
|
29
|
+
- `--tier-bronze` / `--tier-silver` / `--tier-gold` — the canonical tier-badge palette. Used as a small accent stripe at the top of a TIER-CARD, never as a card fill.
|
|
30
|
+
- `--geneva-mint` — Geneva pastel mint, for room/group accent badges. Stays small.
|
|
31
|
+
- `--aubergine` (= foreground) — warm-bias deep ink. Pure black forbidden.
|
|
32
|
+
|
|
33
|
+
## Typography
|
|
34
|
+
- **Display:** Sora — Patreon's geometric-display spirit, friendly modern sans, weights 600/700/800. h1–h4.
|
|
35
|
+
- **Body:** Inter — neutral, dense-friendly at 16px, line-height 1.6 (looser than linkedin-pro because posts are read here, not scanned).
|
|
36
|
+
- **Mono:** JetBrains Mono — member counts, tier-price, post-meta. Small tabular only.
|
|
37
|
+
|
|
38
|
+
H1 uses `clamp(2.25rem, 5.5vw, 4rem)`. Heading tracking `-0.02em`.
|
|
39
|
+
|
|
40
|
+
## Spacing
|
|
41
|
+
- **Container:** `max-w-5xl px-5 lg:px-8` — narrower than enterprise; creator pages read better in a smaller column.
|
|
42
|
+
- **Section padding tiers:**
|
|
43
|
+
- Hero: `pt-20 pb-12 lg:pt-28 lg:pb-20`
|
|
44
|
+
- Default: `py-16 lg:py-24`
|
|
45
|
+
- Tight: `py-10 lg:py-14`
|
|
46
|
+
- **Allowed scale values:** 4 6 8 12 16 20 24 32 40 48 64 80.
|
|
47
|
+
|
|
48
|
+
## Color
|
|
49
|
+
No hex in components. All color via tokens. Opacity via `/N`.
|
|
50
|
+
|
|
51
|
+
The palette is **lavender-and-coral with a tip-jar yellow**. Resist adding any cool blue or teal — those break the creator-warm envelope. Discord-purple is the only purple accent and stays small (role tags, server pills). The tier-tints (`--tier-bronze` / `--tier-silver` / `--tier-gold`) appear only as small top-stripes on tier-cards, never as full surfaces.
|
|
52
|
+
|
|
53
|
+
## Radius
|
|
54
|
+
`--radius: 1rem` (16px). Patreon/Memberful card softness. Pills allowed (`pillsAllowed: true`) for tier-badges, role tags, member-count chips. Sharp corners are forbidden — they read enterprise and kill the creator-home warmth.
|
|
55
|
+
|
|
56
|
+
## Shadows
|
|
57
|
+
Three warm-tinted utilities — drops carry coral, never neutral gray:
|
|
58
|
+
- `.shadow-card-soft` — resting tier/post-card elevation.
|
|
59
|
+
- `.shadow-card-hover` — hover state.
|
|
60
|
+
- `.shadow-tier-glow` — the **recommended tier** state. A 2px coral ring + 32px coral halo. Used on the one tier the creator wants you to pick.
|
|
61
|
+
|
|
62
|
+
## Motion
|
|
63
|
+
Three keyframes:
|
|
64
|
+
- `fade-rise` (500ms) — post-feed / tier-card entrance. Warm rise.
|
|
65
|
+
- `tip-pulse` (3000ms loop) — gentle scale-breath on the tip-jar / one-time-support CTA. A nudge that doesn't shout.
|
|
66
|
+
- `join-shimmer` (2400ms loop) — coral shimmer sweep across the **featured/recommended tier**. Premium hint without being a marquee.
|
|
67
|
+
|
|
68
|
+
`prefers-reduced-motion` honored — `tip-pulse` collapses to a static scale, `join-shimmer` to a static coral fill.
|
|
69
|
+
|
|
70
|
+
## Component patterns
|
|
71
|
+
- **Buttons:** primary = filled coral pill (weight 700, rounded-full) — the Join / Become a member CTA. Alt = Buy-Me-a-Coffee yellow pill for one-time tips. Secondary = bordered pill in foreground. Discord-purple pill = role-tag display only, never a CTA.
|
|
72
|
+
- **Cards:** two shapes —
|
|
73
|
+
- **TIER-CARD**: rounded-2xl, tier-tinted top-stripe (3–4px in the relevant `--tier-*` color) + white body + benefit-list (checkmarks) + inline Join pill at the bottom. The recommended tier wears `.shadow-tier-glow` and has the `join-shimmer` sweep on its top-stripe.
|
|
74
|
+
- **POST-CARD**: rounded-xl, creator avatar + title + body excerpt + small `🔒` lock-icon if the post is tier-gated.
|
|
75
|
+
- **Inputs:** full rounded-2xl box. Focus = 2px coral ring at 40% opacity. **Pledge-amount input** is the special one: $ prefix + giant tabular number + tier-suggestion chips below.
|
|
76
|
+
- **CTAs:** coral pill = membership action. Yellow pill = tip action. Tier-cards have an INLINE Join pill at their bottom — never a separate Buy button outside the card.
|
|
77
|
+
|
|
78
|
+
## Component families
|
|
79
|
+
- `*TierCard` — tinted top-stripe + benefit-list + inline Join pill. The Patreon-style tier display.
|
|
80
|
+
- `*PostFeedItem` — creator avatar + title + excerpt + paywall lock + posted-time.
|
|
81
|
+
- `*MemberSpotlight` — avatar + name + role-tag + member-since date + small quote.
|
|
82
|
+
- `*RolePill` — Discord-purple pill with a small color-dot prefix; one per server role.
|
|
83
|
+
|
|
84
|
+
## Recommended rich media
|
|
85
|
+
Creator-led, friendly, slightly illustrated. Headshot photography works but illustrated avatars work better — they make the page feel less like a transaction. Patreon's own creator-pages lean on illustrated portraits because they hold up across tier tiers without going corporate.
|
|
86
|
+
|
|
87
|
+
**AI tools:** Midjourney *"warm illustrated portrait, coral and lavender palette, friendly creator avatar, soft brushwork, illustrated not photoreal"*. For photographic content (post thumbnails), prompt for warm natural light, behind-the-scenes / workspace shots, never glossy studio.
|
|
88
|
+
|
|
89
|
+
**Aspect ratios:** 1:1 for creator avatars, 4:3 for post thumbnails, 16:9 only for video previews.
|
|
90
|
+
|
|
91
|
+
**AVOID:** corporate stock photography, glassmorphic surfaces, dark moody photography, marketplace-grid layouts (this is a creator's home, not a store), pricing-card rows (tier-cards are *inline* and contextual, not a comparison grid), generic feature-tile sections.
|
|
92
|
+
|
|
93
|
+
## Details
|
|
94
|
+
- **Selection:** `hsl(var(--primary) / 0.22)` background, foreground text.
|
|
95
|
+
- **Focus ring:** `2px solid hsl(var(--ring) / 0.5)` — coral, warm-visible.
|
|
96
|
+
- **Scrollbar:** thin.
|
|
97
|
+
|
|
98
|
+
## Exceptions
|
|
99
|
+
None yet.
|
|
100
|
+
|
|
101
|
+
## Revisions
|
|
102
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// community-niche — Patreon / Discord-server / Substack-Notes creator warmth.
|
|
4
|
+
// Soft purple-pink palette, member-tier driven, post-feed forward.
|
|
5
|
+
// Decoration-first language: rounded cards, tinted badges, warm illustration
|
|
6
|
+
// territory. Reads as a creator's home, not a SaaS product page.
|
|
7
|
+
export const communityNiche: Direction = {
|
|
8
|
+
name: "community-niche",
|
|
9
|
+
ethos:
|
|
10
|
+
"Patreon coral-tier warmth · Discord-server soft purple + role tags · Buy Me a Coffee yellow CTA · Memberful clean tier-display · Geneva community-room friendliness",
|
|
11
|
+
references: [
|
|
12
|
+
{ brand: "Patreon", trait: "coral primary + tier-tinted cards + creator-photo hero" },
|
|
13
|
+
{ brand: "Discord", trait: "soft purple bg + role-color name tags + community-room shape" },
|
|
14
|
+
{ brand: "Buy Me a Coffee", trait: "yellow tip CTA + warm playful chrome" },
|
|
15
|
+
{ brand: "Memberful", trait: "clean tier-display + readable subscription chrome" },
|
|
16
|
+
{ brand: "Geneva", trait: "soft pastel rooms + friendly small-group warmth" },
|
|
17
|
+
],
|
|
18
|
+
feel:
|
|
19
|
+
"A creator's home, not a SaaS landing. Soft purple-pink wash with a coral primary that owns the membership CTAs. " +
|
|
20
|
+
"Tier-cards, member spotlights, and a recent-posts feed are the basic units. " +
|
|
21
|
+
"Warm rounded surfaces, tinted badges per role/tier, and friendly illustrated avatars where headshots would feel too corporate.",
|
|
22
|
+
|
|
23
|
+
fonts: {
|
|
24
|
+
display: {
|
|
25
|
+
family: "Sora",
|
|
26
|
+
fallback: ["Manrope", "Inter", "system-ui", "sans-serif"],
|
|
27
|
+
from: "Patreon's geometric-display feel — friendly modern sans, weights 600/700",
|
|
28
|
+
googleFont: "Sora",
|
|
29
|
+
weights: [400, 600, 700, 800],
|
|
30
|
+
},
|
|
31
|
+
body: {
|
|
32
|
+
family: "Inter",
|
|
33
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
34
|
+
from: "Memberful / Substack body — neutral, dense-friendly at 16px",
|
|
35
|
+
googleFont: "Inter",
|
|
36
|
+
weights: [400, 500, 600],
|
|
37
|
+
},
|
|
38
|
+
mono: {
|
|
39
|
+
family: "JetBrains Mono",
|
|
40
|
+
fallback: ["ui-monospace", "SFMono-Regular", "monospace"],
|
|
41
|
+
from: "member counts, tier-price, post-meta — small tabular",
|
|
42
|
+
googleFont: "JetBrains+Mono",
|
|
43
|
+
weights: [400, 500],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
typography: {
|
|
48
|
+
headingTracking: "-0.02em",
|
|
49
|
+
bodyTracking: "0",
|
|
50
|
+
fontFeatureSettings: '"ss01", "cv11"',
|
|
51
|
+
h1ScaleClamp: "clamp(2.25rem, 5.5vw, 4rem)",
|
|
52
|
+
bodyBaseSize: "1rem",
|
|
53
|
+
bodyLineHeight: "1.6",
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
colors: {
|
|
57
|
+
background: { hsl: "278 40% 97%", from: "soft lavender wash — Discord's pale-purple home surface" },
|
|
58
|
+
foreground: { hsl: "278 30% 14%", from: "deep aubergine ink — warm-bias near-black with purple lean" },
|
|
59
|
+
card: { hsl: "0 0% 100%", from: "white member/post card — lifts off the lavender wash" },
|
|
60
|
+
popover: { hsl: "0 0% 100%", from: "same as card" },
|
|
61
|
+
primary: { hsl: "340 80% 55%", from: "Patreon coral-pink — the membership CTA, the tip-jar color" },
|
|
62
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on coral-pink" },
|
|
63
|
+
secondary: { hsl: "278 40% 93%", from: "deeper lavender tint — secondary surface, hover" },
|
|
64
|
+
secondaryForeground: { hsl: "278 30% 18%", from: "aubergine on lavender" },
|
|
65
|
+
muted: { hsl: "278 30% 92%", from: "quiet lavender-cream — meta panels, post-body backing" },
|
|
66
|
+
mutedForeground: { hsl: "278 14% 42%", from: "warm gray with purple bias — captions, post-meta" },
|
|
67
|
+
accent: { hsl: "270 80% 92%", from: "Discord-purple tinted bg — role chip, mention pill" },
|
|
68
|
+
accentForeground: { hsl: "270 70% 38%", from: "deeper Discord purple on tinted accent" },
|
|
69
|
+
border: { hsl: "278 20% 88%", from: "soft lavender hairline — visible but warm" },
|
|
70
|
+
input: { hsl: "278 20% 88%", from: "same as border" },
|
|
71
|
+
ring: { hsl: "340 80% 55%", from: "primary, focus only" },
|
|
72
|
+
destructive: { hsl: "0 70% 52%", from: "warm red — unsubscribe, remove member" },
|
|
73
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on alert" },
|
|
74
|
+
brand: {
|
|
75
|
+
"patreon-coral": { hsl: "340 80% 55%", from: "= primary; Patreon membership color, the join-tier action" },
|
|
76
|
+
"discord-purple": { hsl: "262 60% 55%", from: "Discord blurple — secondary identity, server-tag color" },
|
|
77
|
+
"bmc-yellow": { hsl: "44 96% 58%", from: "Buy Me a Coffee yellow — tip/one-time-support CTA" },
|
|
78
|
+
"tier-bronze": { hsl: "28 60% 50%", from: "lowest tier tint — bronze member badge" },
|
|
79
|
+
"tier-silver": { hsl: "210 14% 60%", from: "mid-tier silver" },
|
|
80
|
+
"tier-gold": { hsl: "44 80% 50%", from: "top-tier gold — VIP badge" },
|
|
81
|
+
"geneva-mint": { hsl: "168 50% 70%", from: "Geneva pastel mint — room/group accent" },
|
|
82
|
+
lavender: { hsl: "278 40% 97%", from: "= background; the home surface" },
|
|
83
|
+
aubergine: { hsl: "278 30% 14%", from: "= foreground; warm-bias deep ink" },
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
spacing: {
|
|
88
|
+
base: 4,
|
|
89
|
+
scale: [4, 6, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80],
|
|
90
|
+
containerMax: "max-w-5xl",
|
|
91
|
+
containerPadding: "px-5 lg:px-8",
|
|
92
|
+
sectionPadding: {
|
|
93
|
+
hero: "pt-20 pb-12 lg:pt-28 lg:pb-20",
|
|
94
|
+
default: "py-16 lg:py-24",
|
|
95
|
+
tight: "py-10 lg:py-14",
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
radius: {
|
|
100
|
+
base: "1rem", // 16px — Patreon/Memberful card softness
|
|
101
|
+
pillsAllowed: true, // tier-badges, role tags, member-count chips
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
shadows: {
|
|
105
|
+
style: "soft",
|
|
106
|
+
utilities: {
|
|
107
|
+
"shadow-card-soft":
|
|
108
|
+
"0 1px 2px hsl(278 30% 30% / 0.04), 0 8px 24px hsl(340 60% 50% / 0.06)",
|
|
109
|
+
"shadow-card-hover":
|
|
110
|
+
"0 2px 4px hsl(278 30% 30% / 0.06), 0 16px 36px hsl(340 70% 55% / 0.12)",
|
|
111
|
+
"shadow-tier-glow":
|
|
112
|
+
"0 0 0 2px hsl(340 80% 55% / 0.2), 0 12px 32px hsl(340 80% 55% / 0.22)",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
motion: {
|
|
117
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
118
|
+
durations: {
|
|
119
|
+
reveal: 500,
|
|
120
|
+
loop: 3000,
|
|
121
|
+
ambient: 18000,
|
|
122
|
+
},
|
|
123
|
+
keyframes: {
|
|
124
|
+
"fade-rise": {
|
|
125
|
+
css:
|
|
126
|
+
"from { opacity: 0; transform: translateY(12px); }\n" +
|
|
127
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
128
|
+
defaultDuration: 500,
|
|
129
|
+
iteration: "once",
|
|
130
|
+
purpose: "post-feed / tier-card entrance — warm rise",
|
|
131
|
+
},
|
|
132
|
+
"tip-pulse": {
|
|
133
|
+
css:
|
|
134
|
+
"0%, 100% { transform: scale(1); }\n" +
|
|
135
|
+
"50% { transform: scale(1.04); }",
|
|
136
|
+
defaultDuration: 3000,
|
|
137
|
+
iteration: "infinite",
|
|
138
|
+
purpose: "tip-jar / one-time-support CTA — gentle ongoing nudge",
|
|
139
|
+
},
|
|
140
|
+
"join-shimmer": {
|
|
141
|
+
css:
|
|
142
|
+
"0% { background-position: 200% 0; }\n" +
|
|
143
|
+
"100% { background-position: -200% 0; }",
|
|
144
|
+
defaultDuration: 2400,
|
|
145
|
+
iteration: "infinite",
|
|
146
|
+
purpose: "featured-tier card — coral shimmer sweep on the recommended tier",
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
respectsReducedMotion: true,
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
density: "medium",
|
|
153
|
+
|
|
154
|
+
patterns: {
|
|
155
|
+
button:
|
|
156
|
+
"Primary = filled coral pill (weight 700, rounded-full). The 'Join' / 'Become a member' CTA. " +
|
|
157
|
+
"Alt CTA = Buy-Me-a-Coffee yellow pill for one-time tips. " +
|
|
158
|
+
"Secondary = bordered pill in foreground color. Discord-purple pill = role-tag display only.",
|
|
159
|
+
card:
|
|
160
|
+
"Two patterns: TIER-CARD (rounded-2xl, tier-tinted top-stripe + white body + benefit-list + Join pill) and " +
|
|
161
|
+
"POST-CARD (rounded-xl, creator avatar + title + body excerpt + lock-icon if paywalled). " +
|
|
162
|
+
"Both wear shadow-card-soft. Featured tier wears shadow-tier-glow.",
|
|
163
|
+
input:
|
|
164
|
+
"Full rounded-2xl box, border, bg-card. Focus = 2px coral ring at 40% opacity. " +
|
|
165
|
+
"Pledge-amount input is the special one: prefix $ + giant tabular number + tier-suggestion chips below.",
|
|
166
|
+
cta:
|
|
167
|
+
"Coral pill is the membership action. Yellow pill is the tip action. " +
|
|
168
|
+
"Tier-display cards have an inline Join pill, never a separate Buy button.",
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
details: {
|
|
172
|
+
selectionBg: "hsl(var(--primary) / 0.22)",
|
|
173
|
+
selectionFg: "hsl(var(--foreground))",
|
|
174
|
+
focusRing: "2px solid hsl(var(--ring) / 0.5)",
|
|
175
|
+
scrollbarStyle: "thin",
|
|
176
|
+
},
|
|
177
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Design Direction — Corporate-Grid
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
IBM Carbon discipline · Plex Sans everywhere · IBM blue signal · documentation-grade information density · 2x grid system
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Corporate seriousness in white. Plex Sans + Plex Mono everywhere — display through caption. Sharp corners, no rounding. IBM blue is the SINGLE signal color, used sparingly on primary actions and link text. Reads as 100-year-old technology company; trustworthy, documentation-grade, never trendy.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **IBM Carbon Design System** → the 2x grid, sharp corners, Plex Sans as canonical face. The structural law.
|
|
11
|
+
- **IBM Plex** → the typeface family, prominently used. Display, body, and mono are all Plex — they were designed as a system.
|
|
12
|
+
- **IBM marketing site (ibm.com)** → clean white surface with blue signal restraint. The proof that documentation density and corporate gravity coexist.
|
|
13
|
+
- **Watson + IBM Cloud** → dense documentation product surfaces. The interior register.
|
|
14
|
+
- **IBM Bluemix-era console** → data-grid heavy, instrument-cluster aesthetic. The historical reference.
|
|
15
|
+
|
|
16
|
+
This direction ships the LIGHT variant. Carbon also ships a parallel dark theme (`gray-100` background, `gray-10` foreground, same IBM blue) — when a dark variant is needed, mirror the gray scale around the same blue signal.
|
|
17
|
+
|
|
18
|
+
## Tokens
|
|
19
|
+
HSL triples in `src/index.css`. Surface stack is pure white (`--background: 0 0% 100%`) through Carbon's structural gray scale — `gray-10` (`0 0% 96%`, card / muted), `gray-20` (`0 0% 91%`, border / hover), `gray-70` (`0 0% 32%`, secondary text), `gray-100` (`0 0% 9%`, foreground). Depth comes from **hairline borders**, not shadows.
|
|
20
|
+
|
|
21
|
+
Brand tokens carry explicit Carbon naming: `--ibm-blue` (alias for primary, Carbon interactive-01), `--gray-10`, `--gray-20`, `--gray-70`, `--gray-100`, `--red-60` (Carbon support-error / destructive), `--green-50` (Carbon support-success), `--yellow-30` (Carbon support-warning), `--cyan-40` (Carbon info accent). The single-color rule: IBM blue is the *only* interactive signal. Red is destructive. Green is affirmative status. Yellow is caution. Cyan is info. Nothing is decorative.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** IBM Plex Sans, weights 600/700. Headings are heavier body weight — this is a documentation language. H1 uses `clamp(1.75rem, 3.5vw, 2.75rem)`; the doc body is the work, the headline supports it.
|
|
25
|
+
- **Body:** IBM Plex Sans, 14px (`0.875rem`), line-height 1.5, tracking `0`. Weights 400/500.
|
|
26
|
+
- **Mono:** IBM Plex Mono, weights 400/500/600. **Prominent** — API examples, error codes, CLI snippets, request/response bodies, model IDs, version pins, token names. Pair Plex Sans and Plex Mono together; they were designed as a system.
|
|
27
|
+
|
|
28
|
+
Font features: `"tnum", "zero", "ss01"` — tabular figures + slashed zero for tables and metrics, IBM stylistic set 01.
|
|
29
|
+
|
|
30
|
+
Google Fonts (already loaded site-wide; reference in tokens): `IBM+Plex+Sans:wght@400;500;600;700` and `IBM+Plex+Mono:wght@400;500;600`.
|
|
31
|
+
|
|
32
|
+
## Spacing
|
|
33
|
+
- **Container:** `max-w-screen-2xl px-4 lg:px-8` — wide; documentation and console surfaces claim the screen.
|
|
34
|
+
- **Section padding tiers:**
|
|
35
|
+
- Hero: `pt-16 pb-12 lg:pt-24 lg:pb-16`
|
|
36
|
+
- Default: `py-12 lg:py-16`
|
|
37
|
+
- Tight: `py-8 lg:py-10`
|
|
38
|
+
- **Allowed scale:** **2** 4 8 12 16 20 24 32 40 48 64 80 96. Carbon's 2x grid is the structural law — every dimension is a multiple of 8px where possible, with 4px and 2px steps reserved for chrome details and icon-to-label gaps. The base unit is 4px; the rhythm is 8px.
|
|
39
|
+
|
|
40
|
+
High density. The reference is the IBM Cloud console and Carbon documentation, not a marketing site.
|
|
41
|
+
|
|
42
|
+
## Color
|
|
43
|
+
No hex anywhere. The background is pure white (`0 0% 100%`) — Carbon canonical. The foreground is `0 0% 9%` (Carbon gray-100, near-black) — not pure black, deliberately. The gray scale is the structural backbone: `gray-10` for layered surfaces, `gray-20` for borders and hover, `gray-70` for secondary text.
|
|
44
|
+
|
|
45
|
+
Semantic discipline:
|
|
46
|
+
- **IBM blue** (`220 100% 53%`, #0F62FE) — primary, interactive, links, focus ring. The single Carbon signal.
|
|
47
|
+
- **Red-60** (`352 84% 51%`) — destructive and error only. Never decorative.
|
|
48
|
+
- **Green-50** (`140 70% 38%`) — affirmative status only.
|
|
49
|
+
- **Yellow-30** (`44 100% 56%`) — caution and warning states only.
|
|
50
|
+
- **Cyan-40** (`200 100% 50%`) — info chips and meta accents.
|
|
51
|
+
- **Gray-70** (`0 0% 32%`) — captions, doc meta, dim foreground.
|
|
52
|
+
|
|
53
|
+
## Radius
|
|
54
|
+
`--radius: 0` — **Carbon is explicitly sharp.** No rounding on cards, buttons, inputs, modals, or panels. `pillsAllowed: false` — even status tags are sharp rectangles in canonical Carbon. (Pill-shaped tags are a permitted single exception when a status badge must distinguish itself from data-grid chrome, but defer to the rectangle by default.)
|
|
55
|
+
|
|
56
|
+
The sharpness is doctrinal. It signals seriousness, engineering precision, and the absence of consumer-product affordances.
|
|
57
|
+
|
|
58
|
+
## Shadows
|
|
59
|
+
Style is **"minimal"**. Carbon uses layered border accents over shadows. Two utilities:
|
|
60
|
+
- `.shadow-elevation-1` — `inset 0 0 0 1px hsl(var(--border)), 0 1px 2px hsl(0 0% 0% / 0.08)`. Cards, panels, table containers. Border-as-shadow with a one-pixel drop for layered surfaces.
|
|
61
|
+
- `.shadow-elevation-2` — `inset 0 0 0 1px hsl(var(--border)), 0 2px 6px hsl(0 0% 0% / 0.12)`. Modals, popovers, side panels. The next tier — still restrained.
|
|
62
|
+
|
|
63
|
+
No marketing-style elevation. No drop-shadow stacks. Depth comes from borders.
|
|
64
|
+
|
|
65
|
+
## Motion
|
|
66
|
+
- **Easing tokens (Carbon-defined):**
|
|
67
|
+
- `standard`: `cubic-bezier(0.2, 0, 0.38, 0.9)` — the default for in-place transitions.
|
|
68
|
+
- `entrance`: `cubic-bezier(0, 0, 0.38, 0.9)` — for elements entering the viewport.
|
|
69
|
+
- `exit`: `cubic-bezier(0.2, 0, 1, 0.9)` — for elements leaving.
|
|
70
|
+
- **Duration tiers (Carbon-defined):**
|
|
71
|
+
- `fast` (110ms) — popovers, tooltips, micro-interactions, hover state changes.
|
|
72
|
+
- `moderate` (240ms) — accordion panels, side-nav expansion, documentation reveals.
|
|
73
|
+
- `slow` (400ms) — page transitions, modal entrance, large surface changes.
|
|
74
|
+
- **Keyframes:**
|
|
75
|
+
- `fade-in` (110ms, fast) — opacity-only reveal for popovers, tooltips, micro-interactions.
|
|
76
|
+
- `expand-panel` (240ms, moderate) — accordion expansion for documentation panels and collapsed sections.
|
|
77
|
+
- `slide-in` (400ms, slow) — page transitions, modal entrance.
|
|
78
|
+
|
|
79
|
+
**Deliberate.** No bounce, no spring, no parallax, no ambient drift. Carbon motion is engineering motion. `prefers-reduced-motion` honored throughout.
|
|
80
|
+
|
|
81
|
+
## Component patterns
|
|
82
|
+
- **Buttons:** primary = solid IBM blue, white text, sharp rectangle (no border-radius), 16px padding-x, weight 600 (`bg-primary text-primary-foreground rounded-none font-semibold px-4`). Secondary = ghost with 1px IBM-blue border, IBM-blue text. Tertiary = IBM-blue text-link with underline-on-hover. Sizes: small (`h-8 px-3 text-sm`) and default (`h-10 px-4 text-sm`). Carbon button heights canonically are 32/40/48px.
|
|
83
|
+
- **Cards:** sharp 0px corners (`rounded-none`), 1px gray-20 border, `bg-card`. Padding 16px or 24px. Header row inside the card uses a bottom border. Tables and code samples embed inline. No drop shadows beyond `.shadow-elevation-1`.
|
|
84
|
+
- **Inputs:** compact (`h-10 text-sm`), 1px gray-20 border, `bg-background`, `rounded-none`. Underline-only variant also valid (border-bottom only, `bg-gray-10`). Focus uses 2px IBM-blue ring. Label above; helper below in gray-70. Inline validation in red-60.
|
|
85
|
+
- **CTAs:** primary = IBM-blue button. Secondary = ghost IBM-blue border. Tertiary = IBM-blue text-link with underline-on-hover. One primary CTA per surface. Marketing-style double-CTAs are forbidden — this is corporate documentation, not conversion theater.
|
|
86
|
+
|
|
87
|
+
## Brand-book customization
|
|
88
|
+
Carbon is the structural chassis. When an enterprise brings its own brand book on top of Carbon, only a thin brand layer is overridden — the gray scale, grid, motion, and density stay constant.
|
|
89
|
+
|
|
90
|
+
**Tokens an enterprise typically overrides:**
|
|
91
|
+
- `--primary` — the corporate signal color (their blue, red, orange, purple, whatever the brand book calls for).
|
|
92
|
+
- `display` font family — when the corporate face is mandated (e.g. a custom face delivered by the brand team). Body and mono usually stay Plex Sans / Plex Mono because the documentation rhythm depends on them.
|
|
93
|
+
- `--radius` — some IBM business units (and many non-IBM enterprises) use rounded corners; raising `--radius` to `0.25rem` or `0.5rem` is the cleanest brand-aware deviation.
|
|
94
|
+
|
|
95
|
+
**Tokens that must NOT be overridden:**
|
|
96
|
+
- The gray scale (`--gray-10` through `--gray-100`). It is structural to Carbon's contrast and density math. Overriding it breaks readability targets.
|
|
97
|
+
- The 2x grid (spacing scale, container widths, section padding tiers).
|
|
98
|
+
- The motion tokens (fast / moderate / slow with Carbon's easing curves).
|
|
99
|
+
- The density scale.
|
|
100
|
+
- The focus ring contract (2px solid, brand primary).
|
|
101
|
+
|
|
102
|
+
**Mapping a brand-book hex to `--primary` in `index.css`:**
|
|
103
|
+
1. Convert the brand-book hex to HSL (any color picker; macOS Digital Color Meter, Chrome DevTools, or `chroma-js`).
|
|
104
|
+
2. Write the triple as `<H> <S>% <L>%` (no `hsl()` wrapper — the opacity-modifier syntax requires raw triples).
|
|
105
|
+
3. Replace `--primary` and `--ring` (they share the brand signal) and `--ibm-blue` if the brand alias should also shift.
|
|
106
|
+
4. Adjust `--primary-foreground` to maintain WCAG AA contrast against the new primary (white on most saturated hues; gray-100 on very light hues).
|
|
107
|
+
|
|
108
|
+
**Example:** Cloudflare orange (`#F38020`) → `--primary: 24 90% 54%`. Everything else (Plex Sans, sharp corners, gray scale, layout grid, motion tokens, density) stays Carbon.
|
|
109
|
+
|
|
110
|
+
**Carbon utilities that stay constant** under any brand overlay:
|
|
111
|
+
- 2x grid spacing scale and section padding tiers.
|
|
112
|
+
- Motion duration tokens (fast 110ms / moderate 240ms / slow 400ms) and Carbon easings (`standard`, `entrance`, `exit`).
|
|
113
|
+
- Density scale (button heights 32/40/48, input height 40, body 14px / line-height 1.5).
|
|
114
|
+
- Focus ring contract (2px solid, brand primary, no border-radius).
|
|
115
|
+
- Gray scale (the entire structural neutral system).
|
|
116
|
+
|
|
117
|
+
The discipline: a brand-customized Carbon surface still *reads* as Carbon. The brand layer is a thin paint job over the structural chassis.
|
|
118
|
+
|
|
119
|
+
## Component families
|
|
120
|
+
**Doc cards** (`*DocCard`, `*ApiCard`): rounded-none border bg-card; mono slug + version label in the meta row; Plex Sans title; Plex Mono body for code; "Read more" tertiary IBM-blue text-link with underline-on-hover. **Status indicators** (`*StatusIndicator`, `*SeverityBadge`): sharp rectangles by default with semantic bg/fg from Carbon support tokens (green-50 success, red-60 error, yellow-30 warning, cyan-40 info). **Data tables** (`*Table`, `*DataGrid`): tabular figures, mono numeric columns, `border-collapse`, 1px gray-20 row borders, `bg-gray-10` for zebra (5% delta).
|
|
121
|
+
|
|
122
|
+
## Recommended rich media
|
|
123
|
+
Carbon-corporate is **diagram-heavy and screenshot-heavy**, the opposite of consumer-photography-heavy. The aesthetic is documentation-grade: schematics, console captures, code panels, and a sparing tradition of cut-paper-modernist illustration in the Eames-adjacent IBM lineage.
|
|
124
|
+
|
|
125
|
+
**Hero media:**
|
|
126
|
+
- **Technical diagrams** in the IBM architecture-diagram tradition — labeled, gridded, two-to-three-color, mono labels. Lines, boxes, and arrows over white. Show the system; don't decorate it.
|
|
127
|
+
- **Product screenshots** of dashboards, consoles, and API surfaces. Present frankly: no shadow, no border, no decorative crop. The screen is the proof.
|
|
128
|
+
- **Cut-paper-modernist illustration** in the Eames / Paul Rand / mid-century IBM tradition. Sparing use. Flat color planes, geometric, never gradient. When in doubt, omit.
|
|
129
|
+
- **NO decorative photography.** No lifestyle staging, no abstract gradients, no stock imagery. Carbon-corporate does not do consumer photography.
|
|
130
|
+
|
|
131
|
+
**AI tool recommendations:**
|
|
132
|
+
- **Recraft** — technical schematics, labeled architecture diagrams ("IBM Carbon architecture diagram, flat lines, three-color, Plex Mono labels, white background").
|
|
133
|
+
- **Carbon (carbon.now.sh) / Ray.so** — code-snippet images rendered in IBM Plex Mono with a Carbon light theme matching `--background`.
|
|
134
|
+
- **Mermaid / DBML** — declarative diagrams that update with the code (often the better answer than AI).
|
|
135
|
+
- **Excalidraw** — when a hand-drawn-but-precise feel is wanted for explainer diagrams.
|
|
136
|
+
|
|
137
|
+
**Aspect ratios:** 16:9 for hero diagrams and architecture renders; 4:3 for documentation screenshots; natural aspect for inline charts, CLI output, and code panels. Square (1:1) for product macro photography on neutral seamless when product photography is permitted at all.
|
|
138
|
+
|
|
139
|
+
**Performance:** SVG diagrams inline (≤8 KB each); screenshots ≤120 KB AVIF at 1.5x device pixel ratio; no autoplay video. LCP target <1.5s — enterprise users run these surfaces on locked-down corporate networks.
|
|
140
|
+
|
|
141
|
+
**Avoid:** playful illustrations, gradient meshes, consumer-feel photography, lifestyle staging, glassmorphic anything, autoplay video with sound, 3D product renders that look like a Behance reel, purple-or-pink gradients, decorative SVG ornament, lens flare, anything that signals consumer/startup/AI-fad rather than corporate/documentation/Fortune-500.
|
|
142
|
+
|
|
143
|
+
**Accessibility:** WCAG AA on white background requires foreground at gray-100 (`0 0% 9%`) — easily passes. IBM blue (`220 100% 53%`) on white passes AA at all sizes above 14px regular. Color-coding (green = good, red = bad, yellow = warning) needs a non-color signal (icon, text label) — colorblind engineers exist and they read everything.
|
|
144
|
+
|
|
145
|
+
## Details
|
|
146
|
+
- **Selection:** `hsl(var(--primary) / 0.2)` background, foreground text — IBM blue at 20% on white.
|
|
147
|
+
- **Focus ring:** `2px solid hsl(var(--ring))` — Carbon canonical focus, 2px solid IBM blue, no rounding.
|
|
148
|
+
- **Scrollbar:** thin, gray-toned.
|
|
149
|
+
|
|
150
|
+
## Exceptions
|
|
151
|
+
None yet. When an intentional violation lands (e.g. a rounded card to match a business-unit brand book, or a colored hero panel under a Watson-style data-viz piece), add it here with the reason.
|
|
152
|
+
|
|
153
|
+
## Revisions
|
|
154
|
+
- Initial direction, generated at install time. Authored to provide the canonical IBM Carbon aesthetic — corporate, documentation-grade, sharp, Plex-typeset — as a brand-bookable chassis other enterprises can re-skin.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const corporateGrid: Direction = {
|
|
4
|
+
name: "corporate-grid",
|
|
5
|
+
ethos:
|
|
6
|
+
"IBM Carbon discipline · Plex Sans everywhere · IBM blue signal · documentation-grade information density · 2x grid system",
|
|
7
|
+
references: [
|
|
8
|
+
{ brand: "IBM Carbon Design System", trait: "2x grid system, sharp corners, Plex Sans canonical" },
|
|
9
|
+
{ brand: "IBM Plex", trait: "the typeface family, prominently used display through caption" },
|
|
10
|
+
{ brand: "IBM marketing site (ibm.com)", trait: "clean white surface, blue signal restraint" },
|
|
11
|
+
{ brand: "Watson + IBM Cloud", trait: "dense documentation product surfaces" },
|
|
12
|
+
{ brand: "IBM Bluemix-era console", trait: "data-grid heavy, instrument-cluster aesthetic" },
|
|
13
|
+
],
|
|
14
|
+
feel:
|
|
15
|
+
"Corporate seriousness in white. Plex Sans + Plex Mono everywhere — display through caption. " +
|
|
16
|
+
"Sharp corners, no rounding. IBM blue is the SINGLE signal color, used sparingly on primary " +
|
|
17
|
+
"actions and link text. Reads as 100-year-old technology company; trustworthy, " +
|
|
18
|
+
"documentation-grade, never trendy.",
|
|
19
|
+
|
|
20
|
+
fonts: {
|
|
21
|
+
display: {
|
|
22
|
+
family: "IBM Plex Sans",
|
|
23
|
+
fallback: ["Inter", "system-ui", "-apple-system", "sans-serif"],
|
|
24
|
+
from: "IBM Plex Sans — Carbon's canonical display face, weights 600/700 for headings",
|
|
25
|
+
googleFont: "IBM+Plex+Sans:wght@400;500;600;700",
|
|
26
|
+
weights: [600, 700],
|
|
27
|
+
},
|
|
28
|
+
body: {
|
|
29
|
+
family: "IBM Plex Sans",
|
|
30
|
+
fallback: ["Inter", "system-ui", "-apple-system", "sans-serif"],
|
|
31
|
+
from: "IBM Plex Sans — same face as display, Carbon body rhythm at 400/500",
|
|
32
|
+
googleFont: "IBM+Plex+Sans:wght@400;500;600;700",
|
|
33
|
+
weights: [400, 500],
|
|
34
|
+
},
|
|
35
|
+
mono: {
|
|
36
|
+
family: "IBM Plex Mono",
|
|
37
|
+
fallback: ["JetBrains Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
38
|
+
from: "IBM Plex Mono — Carbon's canonical mono, API examples, code, CLI snippets",
|
|
39
|
+
googleFont: "IBM+Plex+Mono:wght@400;500;600",
|
|
40
|
+
weights: [400, 500, 600],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
typography: {
|
|
45
|
+
headingTracking: "0",
|
|
46
|
+
bodyTracking: "0",
|
|
47
|
+
fontFeatureSettings: '"tnum", "zero", "ss01"',
|
|
48
|
+
h1ScaleClamp: "clamp(1.75rem, 3.5vw, 2.75rem)",
|
|
49
|
+
bodyBaseSize: "0.875rem",
|
|
50
|
+
bodyLineHeight: "1.5",
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
colors: {
|
|
54
|
+
background: { hsl: "0 0% 100%", from: "Carbon white-100 — canonical light theme surface" },
|
|
55
|
+
foreground: { hsl: "0 0% 9%", from: "Carbon gray-100 text-primary, near-black documentation ink" },
|
|
56
|
+
card: { hsl: "0 0% 96%", from: "Carbon gray-10 — layered surface one tier above background" },
|
|
57
|
+
popover: { hsl: "0 0% 100%", from: "Carbon white-100 — popovers float on white with hairline border" },
|
|
58
|
+
|
|
59
|
+
primary: { hsl: "220 100% 53%", from: "IBM blue #0F62FE — Carbon's signature interactive blue" },
|
|
60
|
+
primaryForeground: { hsl: "0 0% 100%", from: "Carbon white-100 on IBM blue for primary actions" },
|
|
61
|
+
|
|
62
|
+
secondary: { hsl: "0 0% 91%", from: "Carbon gray-20 — secondary surface, ghost-button background on hover" },
|
|
63
|
+
secondaryForeground: { hsl: "0 0% 9%", from: "Carbon gray-100 on gray-20" },
|
|
64
|
+
muted: { hsl: "0 0% 96%", from: "Carbon gray-10 — muted surface, same as card" },
|
|
65
|
+
mutedForeground: { hsl: "0 0% 32%", from: "Carbon gray-70 — secondary text, captions, doc meta" },
|
|
66
|
+
accent: { hsl: "0 0% 91%", from: "Carbon gray-20 — hover surface tier" },
|
|
67
|
+
accentForeground: { hsl: "0 0% 9%", from: "Carbon gray-100 on gray-20 hover" },
|
|
68
|
+
|
|
69
|
+
border: { hsl: "0 0% 91%", from: "Carbon gray-20 — structural hairline border, visible at data-grid density" },
|
|
70
|
+
input: { hsl: "0 0% 91%", from: "Carbon gray-20 — input border, same as structural border" },
|
|
71
|
+
ring: { hsl: "220 100% 53%", from: "IBM blue #0F62FE — Carbon focus ring color" },
|
|
72
|
+
|
|
73
|
+
destructive: { hsl: "352 84% 51%", from: "Carbon red-60 support-error — destructive actions and error states" },
|
|
74
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "Carbon white-100 on red-60" },
|
|
75
|
+
|
|
76
|
+
brand: {
|
|
77
|
+
"ibm-blue": { hsl: "220 100% 53%", from: "IBM blue #0F62FE — alias for primary, Carbon interactive-01" },
|
|
78
|
+
"gray-10": { hsl: "0 0% 96%", from: "Carbon gray-10 — layered surface, code-block background" },
|
|
79
|
+
"gray-20": { hsl: "0 0% 91%", from: "Carbon gray-20 — borders, dividers, ghost-button hover" },
|
|
80
|
+
"gray-70": { hsl: "0 0% 32%", from: "Carbon gray-70 — secondary text, doc meta, caption" },
|
|
81
|
+
"gray-100": { hsl: "0 0% 9%", from: "Carbon gray-100 — text-primary, near-black documentation ink" },
|
|
82
|
+
"red-60": { hsl: "352 84% 51%", from: "Carbon red-60 support-error — destructive and error" },
|
|
83
|
+
"green-50": { hsl: "140 70% 38%", from: "Carbon green-50 support-success — affirmative status only" },
|
|
84
|
+
"yellow-30": { hsl: "44 100% 56%", from: "Carbon yellow-30 support-warning — caution states only" },
|
|
85
|
+
"cyan-40": { hsl: "200 100% 50%", from: "Carbon cyan-40 — info chips and meta accents" },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
spacing: {
|
|
90
|
+
base: 4,
|
|
91
|
+
scale: [2, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96],
|
|
92
|
+
containerMax: "max-w-screen-2xl",
|
|
93
|
+
containerPadding: "px-4 lg:px-8",
|
|
94
|
+
sectionPadding: {
|
|
95
|
+
hero: "pt-16 pb-12 lg:pt-24 lg:pb-16",
|
|
96
|
+
default: "py-12 lg:py-16",
|
|
97
|
+
tight: "py-8 lg:py-10",
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
radius: {
|
|
102
|
+
base: "0",
|
|
103
|
+
pillsAllowed: false,
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
shadows: {
|
|
107
|
+
style: "minimal",
|
|
108
|
+
utilities: {
|
|
109
|
+
"shadow-elevation-1":
|
|
110
|
+
"inset 0 0 0 1px hsl(var(--border)), 0 1px 2px hsl(0 0% 0% / 0.08)",
|
|
111
|
+
"shadow-elevation-2":
|
|
112
|
+
"inset 0 0 0 1px hsl(var(--border)), 0 2px 6px hsl(0 0% 0% / 0.12)",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
motion: {
|
|
117
|
+
easing: "cubic-bezier(0.2, 0, 0.38, 0.9)",
|
|
118
|
+
durations: {
|
|
119
|
+
reveal: 240,
|
|
120
|
+
loop: 1200,
|
|
121
|
+
ambient: 0,
|
|
122
|
+
},
|
|
123
|
+
keyframes: {
|
|
124
|
+
"fade-in": {
|
|
125
|
+
css:
|
|
126
|
+
"from { opacity: 0; }\n" +
|
|
127
|
+
"to { opacity: 1; }",
|
|
128
|
+
defaultDuration: 110,
|
|
129
|
+
iteration: "once",
|
|
130
|
+
purpose: "Carbon fast tier (110ms) — popovers, tooltips, micro-interactions",
|
|
131
|
+
},
|
|
132
|
+
"expand-panel": {
|
|
133
|
+
css:
|
|
134
|
+
"from { opacity: 0; max-height: 0; }\n" +
|
|
135
|
+
"to { opacity: 1; max-height: 100vh; }",
|
|
136
|
+
defaultDuration: 240,
|
|
137
|
+
iteration: "once",
|
|
138
|
+
purpose: "Carbon moderate tier (240ms) — accordion panels, side-nav expansion, documentation reveals",
|
|
139
|
+
},
|
|
140
|
+
"slide-in": {
|
|
141
|
+
css:
|
|
142
|
+
"from { opacity: 0; transform: translateX(-8px); }\n" +
|
|
143
|
+
"to { opacity: 1; transform: translateX(0); }",
|
|
144
|
+
defaultDuration: 400,
|
|
145
|
+
iteration: "once",
|
|
146
|
+
purpose: "Carbon slow tier (400ms) — page transitions, modal entrance, large surface changes",
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
respectsReducedMotion: true,
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
density: "high",
|
|
153
|
+
|
|
154
|
+
patterns: {
|
|
155
|
+
button:
|
|
156
|
+
"Primary = solid IBM blue, white text, sharp rectangle (no border-radius), 16px padding-x, weight 600 " +
|
|
157
|
+
"(bg-primary text-primary-foreground rounded-none font-semibold px-4). " +
|
|
158
|
+
"Secondary = ghost with 1px IBM-blue border, IBM-blue text (border border-primary text-primary bg-transparent). " +
|
|
159
|
+
"Tertiary = IBM-blue text-link with underline-on-hover (text-primary hover:underline underline-offset-2). " +
|
|
160
|
+
"Sizes: small (h-8 px-3 text-sm) and default (h-10 px-4 text-sm). Carbon button heights are 32/40/48px.",
|
|
161
|
+
card:
|
|
162
|
+
"Sharp 0px corners (rounded-none), 1px gray-20 border, bg-card (gray-10). " +
|
|
163
|
+
"Padding 16px or 24px (p-4 lg:p-6). Header row inside card uses bottom border. " +
|
|
164
|
+
"Tables and code samples embed inline. No drop shadows beyond .shadow-elevation-1.",
|
|
165
|
+
input:
|
|
166
|
+
"Compact (h-10 text-sm), 1px gray-20 border, bg-background, rounded-none. " +
|
|
167
|
+
"Underline-only variant also valid (border-b only, bg-gray-10). " +
|
|
168
|
+
"Focus uses 2px IBM-blue ring. Label above; helper below in gray-70. " +
|
|
169
|
+
"Inline validation in red-60.",
|
|
170
|
+
cta:
|
|
171
|
+
"Primary = IBM-blue button. Secondary = ghost IBM-blue border. Tertiary = IBM-blue text-link. " +
|
|
172
|
+
"One primary CTA per surface; corporate documentation, not conversion theater. " +
|
|
173
|
+
"Marketing-style double-CTAs are forbidden.",
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
details: {
|
|
177
|
+
selectionBg: "hsl(var(--primary) / 0.2)",
|
|
178
|
+
selectionFg: "hsl(var(--foreground))",
|
|
179
|
+
focusRing: "2px solid hsl(var(--ring))",
|
|
180
|
+
scrollbarStyle: "thin",
|
|
181
|
+
},
|
|
182
|
+
};
|