@stylecrib/cli 0.3.1 → 0.3.3
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 +94 -9
- 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 +1606 -467
- package/package.json +12 -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/THEME.md +125 -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/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/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -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/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/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/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/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/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/THEME.md +167 -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/THEME.md +144 -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/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/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -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/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/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -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/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/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/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/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/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/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/THEME.md +167 -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/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
package/themes/schema.ts
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Shared schema for every design direction in this library.
|
|
2
|
+
// The CLI consumes this shape to emit `tailwind.config.ts` and `src/index.css`.
|
|
3
|
+
// Hand-authoring is fine; runtime validation happens at codegen time.
|
|
4
|
+
|
|
5
|
+
export type BrandTrait = {
|
|
6
|
+
brand: string; // "NYT", "Tesla", "Aman"
|
|
7
|
+
trait: string; // "typography", "blackout", "cream paper"
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type HSL = `${number} ${number}% ${number}%`;
|
|
11
|
+
|
|
12
|
+
export type ColorToken = {
|
|
13
|
+
hsl: HSL; // raw triple, no hsl() wrapper — feeds opacity modifier syntax
|
|
14
|
+
from: string; // verbatim provenance: "Masters green, restrained" — survives in generated css as a comment
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type FontStack = {
|
|
18
|
+
family: string; // primary face the project loads — "EB Garamond", "Manrope"
|
|
19
|
+
fallback: string[]; // system fallbacks in order
|
|
20
|
+
from: string; // brand provenance: "NYT serif feel", "Linear's sans"
|
|
21
|
+
googleFont?: string; // url-safe Google Fonts name; null if self-hosted or system-only
|
|
22
|
+
weights?: number[]; // weights to load (default: [400, 600])
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type MotionTier = "reveal" | "loop" | "ambient";
|
|
26
|
+
|
|
27
|
+
export type Direction = {
|
|
28
|
+
// identity
|
|
29
|
+
name:
|
|
30
|
+
| "editorial"
|
|
31
|
+
| "soft-modern"
|
|
32
|
+
| "dense-utility"
|
|
33
|
+
| "brutalist"
|
|
34
|
+
| "cinematic-dark"
|
|
35
|
+
| "mid-century"
|
|
36
|
+
| "maximalist"
|
|
37
|
+
| "outdoor-adventure"
|
|
38
|
+
| "hyperminimal-mono"
|
|
39
|
+
| "newsletter"
|
|
40
|
+
| "y2k-chrome"
|
|
41
|
+
| "glassmorphic-modern"
|
|
42
|
+
| "signal-dark"
|
|
43
|
+
| "couture-luxury"
|
|
44
|
+
| "stadium-sport"
|
|
45
|
+
| "performance-engineered"
|
|
46
|
+
| "saturday-morning"
|
|
47
|
+
| "enterprise-tech"
|
|
48
|
+
| "creator-social"
|
|
49
|
+
| "kaiju-reveal"
|
|
50
|
+
| "runway-fashion"
|
|
51
|
+
| "streetwear-hype"
|
|
52
|
+
| "architectural"
|
|
53
|
+
| "kinetic-data"
|
|
54
|
+
| "indie-art-game"
|
|
55
|
+
| "corporate-grid"
|
|
56
|
+
| "enterprise-cloud"
|
|
57
|
+
| "business-tiles"
|
|
58
|
+
| "acrylic-soft"
|
|
59
|
+
| "cloud-friendly"
|
|
60
|
+
| "team-kanban"
|
|
61
|
+
| "government-civic"
|
|
62
|
+
| "banking-gravity"
|
|
63
|
+
| "pharma-clinical"
|
|
64
|
+
// ──────── Batch 2026-06: 30 new directions across under-covered categories ────────
|
|
65
|
+
| "fintech-trust"
|
|
66
|
+
| "fintech-card"
|
|
67
|
+
| "crypto-onchain"
|
|
68
|
+
| "web3-restraint"
|
|
69
|
+
| "education-warm"
|
|
70
|
+
| "education-formal"
|
|
71
|
+
| "healthcare-bright"
|
|
72
|
+
| "telehealth-modern"
|
|
73
|
+
| "wellness-spa"
|
|
74
|
+
| "music-streaming"
|
|
75
|
+
| "music-vinyl"
|
|
76
|
+
| "podcast-warm"
|
|
77
|
+
| "realestate-luxury"
|
|
78
|
+
| "realestate-marketplace"
|
|
79
|
+
| "marketplace-vintage"
|
|
80
|
+
| "marketplace-modern"
|
|
81
|
+
| "gaming-streamer"
|
|
82
|
+
| "gaming-esports"
|
|
83
|
+
| "devtool-cli"
|
|
84
|
+
| "devtool-docs"
|
|
85
|
+
| "nonprofit-warm"
|
|
86
|
+
| "agency-portfolio"
|
|
87
|
+
| "agency-creative"
|
|
88
|
+
| "studio-photographer"
|
|
89
|
+
| "studio-architect"
|
|
90
|
+
| "restaurant-modern"
|
|
91
|
+
| "hotel-boutique"
|
|
92
|
+
| "wellness-active"
|
|
93
|
+
| "food-blog"
|
|
94
|
+
| "ai-startup"
|
|
95
|
+
// ──────── Batch 2026-06 (B): 40 new directions, push library past 100 ────────
|
|
96
|
+
| "travel-luxury"
|
|
97
|
+
| "vacation-rental"
|
|
98
|
+
| "airline-modern"
|
|
99
|
+
| "tourism-board"
|
|
100
|
+
| "yoga-studio"
|
|
101
|
+
| "gym-chain"
|
|
102
|
+
| "sports-league"
|
|
103
|
+
| "cycling-brand"
|
|
104
|
+
| "linkedin-pro"
|
|
105
|
+
| "dating-friendly"
|
|
106
|
+
| "forum-classic"
|
|
107
|
+
| "community-niche"
|
|
108
|
+
| "newspaper-classic"
|
|
109
|
+
| "magazine-glossy"
|
|
110
|
+
| "news-tabloid"
|
|
111
|
+
| "news-tech"
|
|
112
|
+
| "law-firm"
|
|
113
|
+
| "lawtech-modern"
|
|
114
|
+
| "insurance-modern"
|
|
115
|
+
| "insurance-legacy"
|
|
116
|
+
| "automotive-luxury"
|
|
117
|
+
| "automotive-ev"
|
|
118
|
+
| "motorcycle-brand"
|
|
119
|
+
| "classic-car"
|
|
120
|
+
| "beauty-clean"
|
|
121
|
+
| "beauty-luxury"
|
|
122
|
+
| "furniture-modern"
|
|
123
|
+
| "home-decor"
|
|
124
|
+
| "pet-food"
|
|
125
|
+
| "baby-modern"
|
|
126
|
+
| "toys-modern"
|
|
127
|
+
| "vet-modern"
|
|
128
|
+
| "solar-residential"
|
|
129
|
+
| "ev-charging"
|
|
130
|
+
| "farm-direct"
|
|
131
|
+
| "logistics-modern"
|
|
132
|
+
| "museum"
|
|
133
|
+
| "bookstore-indie"
|
|
134
|
+
| "publisher-indie"
|
|
135
|
+
| "nonprofit-arts"
|
|
136
|
+
| "spotter-bright";
|
|
137
|
+
ethos: string; // one-line brand·trait synthesis
|
|
138
|
+
references: BrandTrait[]; // 4-6 brands max
|
|
139
|
+
feel: string; // 2-3 sentence prose description
|
|
140
|
+
|
|
141
|
+
// typography
|
|
142
|
+
fonts: {
|
|
143
|
+
display: FontStack;
|
|
144
|
+
body: FontStack;
|
|
145
|
+
mono: FontStack;
|
|
146
|
+
};
|
|
147
|
+
typography: {
|
|
148
|
+
headingTracking: string; // e.g. "-0.01em"
|
|
149
|
+
bodyTracking: string; // e.g. "0" or "0.17em" for cinematic
|
|
150
|
+
fontFeatureSettings?: string; // e.g. `"ss01", "cv11"` for Manrope
|
|
151
|
+
h1ScaleClamp: string; // e.g. "clamp(2.5rem, 6vw, 4.5rem)"
|
|
152
|
+
bodyBaseSize: string; // e.g. "1rem", "0.9375rem"
|
|
153
|
+
bodyLineHeight: string; // e.g. "1.6"
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// colors — every token traces to a brand·trait
|
|
157
|
+
colors: {
|
|
158
|
+
background: ColorToken;
|
|
159
|
+
foreground: ColorToken;
|
|
160
|
+
card: ColorToken;
|
|
161
|
+
popover: ColorToken;
|
|
162
|
+
primary: ColorToken;
|
|
163
|
+
primaryForeground: ColorToken;
|
|
164
|
+
secondary: ColorToken;
|
|
165
|
+
secondaryForeground: ColorToken;
|
|
166
|
+
muted: ColorToken;
|
|
167
|
+
mutedForeground: ColorToken;
|
|
168
|
+
accent: ColorToken;
|
|
169
|
+
accentForeground: ColorToken;
|
|
170
|
+
border: ColorToken;
|
|
171
|
+
input: ColorToken;
|
|
172
|
+
ring: ColorToken;
|
|
173
|
+
destructive: ColorToken;
|
|
174
|
+
destructiveForeground: ColorToken;
|
|
175
|
+
// brand tokens (named, not numbered) — any additional colors the direction calls for
|
|
176
|
+
brand?: Record<string, ColorToken>;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// spacing — base unit + the canonical scale
|
|
180
|
+
spacing: {
|
|
181
|
+
base: number; // px, almost always 4
|
|
182
|
+
scale: number[]; // tailwind scale steps actually allowed in this direction
|
|
183
|
+
containerMax: string; // "max-w-6xl", "max-w-2xl" for editorial prose-first
|
|
184
|
+
containerPadding: string; // "px-4 lg:px-8"
|
|
185
|
+
sectionPadding: {
|
|
186
|
+
hero: string; // "pt-20 pb-12 lg:pt-28 lg:pb-16"
|
|
187
|
+
default: string; // "py-16 lg:py-24"
|
|
188
|
+
tight: string; // "py-12"
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// radius — single source for the rounding language
|
|
193
|
+
radius: {
|
|
194
|
+
base: string; // "0.4rem" (sharp), "0.75rem" (rounded), "0" (editorial)
|
|
195
|
+
pillsAllowed: boolean; // false for editorial/dense-utility; true for soft-modern
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// shadow language — utilities defined in index.css, named by intent
|
|
199
|
+
shadows: {
|
|
200
|
+
style: "minimal" | "soft" | "glow" | "none";
|
|
201
|
+
utilities: Record<string, string>; // e.g. { "glow-gold": "0 0 0 1px ..., 0 30px 80px ..." }
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// motion — the project library
|
|
205
|
+
motion: {
|
|
206
|
+
easing: string; // "cubic-bezier(0.22, 1, 0.36, 1)" — universal across directions
|
|
207
|
+
durations: Record<MotionTier, number>; // ms
|
|
208
|
+
keyframes: Record<string, { // every keyframe the direction ships
|
|
209
|
+
css: string; // the @keyframes block body
|
|
210
|
+
defaultDuration: number; // ms
|
|
211
|
+
iteration: "once" | "infinite";
|
|
212
|
+
purpose: string; // why this keyframe exists
|
|
213
|
+
}>;
|
|
214
|
+
respectsReducedMotion: true; // hard-coded; non-negotiable
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
// density — informs spacing scale, line-height, component patterns
|
|
218
|
+
density: "low" | "medium" | "high";
|
|
219
|
+
|
|
220
|
+
// component patterns — declarative rules the Director and QA agents enforce
|
|
221
|
+
patterns: {
|
|
222
|
+
button: string; // e.g. "ghost only; no solid-fill on brand-mark colors"
|
|
223
|
+
card: string; // e.g. "hairline border, no fill differentiation from background"
|
|
224
|
+
input: string; // e.g. "border-bottom only, no full box"
|
|
225
|
+
cta: string; // e.g. "text link with gold-gradient utility; never a filled rect"
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// selection + scrollbar + focus — small details that signal "built"
|
|
229
|
+
details: {
|
|
230
|
+
selectionBg: string; // "hsl(var(--gold) / 0.3)"
|
|
231
|
+
selectionFg: string; // "hsl(var(--foreground))"
|
|
232
|
+
focusRing: string; // "2px solid hsl(var(--ring))"
|
|
233
|
+
scrollbarStyle: "thin" | "auto" | "none";
|
|
234
|
+
};
|
|
235
|
+
};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Signal-Dark — Build Brief
|
|
2
|
+
|
|
3
|
+
> This file is the CONTRACT the theme ships with. It IS the source of truth
|
|
4
|
+
> the `brief-enforcer` subagent reads at commit time and the payload the
|
|
5
|
+
> `Copy for Claude Code` button on the theme detail page hands out.
|
|
6
|
+
>
|
|
7
|
+
> The contract has three sections:
|
|
8
|
+
> 1. MANDATORY BUILD DIRECTIVE — the `You MUST` list.
|
|
9
|
+
> 2. SLOP-BLOCKLIST — the `You MUST NOT` list.
|
|
10
|
+
> 3. CHROME INVENTORY — the allow-list of ornaments this theme may use.
|
|
11
|
+
>
|
|
12
|
+
> Any UI change that touches this theme's section source (or applies this
|
|
13
|
+
> theme to a project) must pass the enforcer against this file.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## MANDATORY BUILD DIRECTIVE — you MUST
|
|
18
|
+
|
|
19
|
+
1. **Hold the warm-black canvas at `#0F0D0C`** (30° warm-bias). Never pure
|
|
20
|
+
black. On light canvas: cotton-paper `#F7F4F0` (30° warm bias). Never
|
|
21
|
+
pure white. Both canvases share the register; only tokens invert.
|
|
22
|
+
2. **Use ONE signal color on the page** (the palette variant). No second
|
|
23
|
+
color for "variety." Status signals use mono labels with a signal-hued
|
|
24
|
+
dot, not green / orange / blue chips.
|
|
25
|
+
3. **Set the hero display at `clamp(3.5rem, 10vw, 9rem)`** with tight
|
|
26
|
+
tracking (-0.04em). Type is the primary design element.
|
|
27
|
+
4. **Radius 12px on cards.** Pills allowed only on model-card meta chips +
|
|
28
|
+
status badges.
|
|
29
|
+
5. **Reserve prominent mono (JetBrains Mono) for CODE-shaped things:**
|
|
30
|
+
terminal specimens, model IDs, semver tags, CLI output, at-handles.
|
|
31
|
+
NEVER for decorative eyebrow labels.
|
|
32
|
+
6. **Real Pexels photos for the marketing hero + product surfaces.** No
|
|
33
|
+
SVG stand-ins for photo-worthy subjects.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## SLOP-BLOCKLIST — you MUST NOT
|
|
38
|
+
|
|
39
|
+
Each is a hard fail. If the section source contains any of these, the
|
|
40
|
+
enforcer verdict is BLOCK.
|
|
41
|
+
|
|
42
|
+
- **Mono-caps decorative eyebrows** (`SECTION · X`, `WHAT WE X`). CSS
|
|
43
|
+
fingerprint: `textTransform: uppercase` + `letterSpacing ≥ 0.18em` at
|
|
44
|
+
`fontSize < 20px`. Not on this theme's chrome inventory, so banned.
|
|
45
|
+
- **Dot-separated decorative metadata rows** (`ISSUE 04 · CHAPTER 03`,
|
|
46
|
+
`EST. 2019`, `12 MIN READ`). Content-level `·` (`handle · role`,
|
|
47
|
+
terminal output like `stylecrib qa --ci · 12s · passed`) is fine.
|
|
48
|
+
- **`№` / no. / vol. ornaments.**
|
|
49
|
+
- **`▸ TAG` labels.**
|
|
50
|
+
- **`TRUSTED BY` / `AS SEEN IN` / `COMPOSED BY TEAMS AT`** wordmark strips
|
|
51
|
+
— content-slop under any name.
|
|
52
|
+
- **Ticker bars, auto-advancing hero sliders (< 6s mutation), cycling
|
|
53
|
+
headline words** (`we [design][build][ship]`), `AUTO 4s` helpers.
|
|
54
|
+
- **Warm-radial glow gradients as image FALLBACKS.**
|
|
55
|
+
- **Roman-numeral copyright** (`MMXXVI. ALL RIGHTS RESERVED.`).
|
|
56
|
+
- **3-pillar identical feature-card grids as the marketing spine.**
|
|
57
|
+
- **Vague trust copy:** hand-crafted, thoughtfully-made, considered,
|
|
58
|
+
for-teams-that-care, made-with-love.
|
|
59
|
+
- **Attribution of influence in visible copy** — Tesla, Hugging Face,
|
|
60
|
+
Apple, Vercel, Cybertruck are STUDIED, never NAMED in slug, copy, or UI.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## CHROME INVENTORY — the allow-list
|
|
65
|
+
|
|
66
|
+
Every ornament this theme may use. Anything visible in the section source
|
|
67
|
+
that is NOT on this list falls under the SLOP-BLOCKLIST above.
|
|
68
|
+
|
|
69
|
+
- **Full-bleed warm-black hero band** with subtle radial warm+cool mesh
|
|
70
|
+
backdrop (opacity ~0.4, drifts on `gradient-shift 32s` ambient loop; NOT
|
|
71
|
+
a purple/pink slop gradient — warm amber + cool blue only, matching
|
|
72
|
+
`--glow-warm` and `--glow-cool`).
|
|
73
|
+
- **Oversized display h1** in Inter 700 at `clamp(3.5rem, 10vw, 9rem)`,
|
|
74
|
+
tracking -0.04em, one line-break maximum.
|
|
75
|
+
- **ONE primary CTA per page:** filled signal button, radius 12px,
|
|
76
|
+
`glow-signal` outer halo on hover only.
|
|
77
|
+
- **ONE ghost secondary next to the primary:** bordered, foreground
|
|
78
|
+
color, radius 12px, no glow.
|
|
79
|
+
- **Model-card panel:** rounded-xl (12px), 1px border, subtle raised card
|
|
80
|
+
bg, meta row at top in mono (icon dot + slug + status pill),
|
|
81
|
+
display-font title, softInk body copy, no shadow beyond hairline border.
|
|
82
|
+
- **Terminal specimen:** rounded-xl (12px) card with a top window bar
|
|
83
|
+
(err-red · warn-amber · signal dots) + mono CLI title. Body is
|
|
84
|
+
pre-formatted JetBrains Mono at 13px, signal-yellow prompt glyph (`$ `),
|
|
85
|
+
softInk body text, mutedInk system text.
|
|
86
|
+
- **Status pill** (mono, rounded-full, px-2.5 py-1 text-[11px]): dot
|
|
87
|
+
prefix in signal for active, mutedInk otherwise. No colored fills.
|
|
88
|
+
- **Full-bleed marketing hero photograph**, 21:9 or 16:9, warm-shadow
|
|
89
|
+
cool-highlight grade, hero display text OVERLAID (never a caption card).
|
|
90
|
+
- **Table-style live metrics grid:** label / value / status dot in mono,
|
|
91
|
+
tabular figures, one row per metric.
|
|
92
|
+
- **3-tier pricing card row**, ONE primary CTA on the middle recommended
|
|
93
|
+
tier (signal-filled), other tiers use ghost secondary.
|
|
94
|
+
- **Footer:** minimal — brand name, one-line studio note, three columns of
|
|
95
|
+
links max, small copyright line (regular Arabic numerals, no MMXXVI,
|
|
96
|
+
no dot-metadata).
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## SIGNATURE MOVES — verbs, not adjectives
|
|
101
|
+
|
|
102
|
+
The theme's actual moves you MUST land, not adjectives to gesture at.
|
|
103
|
+
|
|
104
|
+
- **Fill the hero band with a warm-black canvas + oversized display type**
|
|
105
|
+
breaking the baseline; hold the mesh-gradient backdrop under it at 0.4
|
|
106
|
+
opacity, drifting via `gradient-shift 32s` so the horizon never sits
|
|
107
|
+
still.
|
|
108
|
+
- **Place ONE signal-yellow button per page**, at the point of conversion.
|
|
109
|
+
Its `glow-signal` halo appears ONLY on hover — never as a static bloom
|
|
110
|
+
(that's Stripe-Linear-Vercel AI-default slop).
|
|
111
|
+
- **Show a terminal specimen with `$` in signal + real CLI output** — the
|
|
112
|
+
developer-tool signature. The prompt IS the visual accent, not
|
|
113
|
+
decorative chrome.
|
|
114
|
+
- **Model-card grid:** put the meta row at the TOP in mono (like a HF
|
|
115
|
+
model card would show `provider/name · v0.14 · task`); display-font
|
|
116
|
+
title comes SECOND, body copy underneath. Never invert that order.
|
|
117
|
+
- **Marketing hero:** full-bleed photograph, big-quiet display text laid
|
|
118
|
+
OVER the photo (not in a caption card next to it). Warm shadows + cool
|
|
119
|
+
highlights color grade so the yellow signal never competes with the
|
|
120
|
+
image.
|
|
121
|
+
- **Use tabular figures for all metric numbers** so they align in columns.
|
|
122
|
+
Non-tabular metric numerals break the register.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## COLOR TOKENS (measured)
|
|
127
|
+
|
|
128
|
+
**Dark canvas**
|
|
129
|
+
- `bg`: `#0F0D0C` `card`: `#1A1614` `border`: `#2A231F`
|
|
130
|
+
- `ink`: `#F7F4F0` `softInk`: `#E4DFD8` `mutedInk`: `#9F958A`
|
|
131
|
+
|
|
132
|
+
**Light canvas**
|
|
133
|
+
- `bg`: `#F7F4F0` `card`: `#FFFFFF` `border`: `#DED6CB`
|
|
134
|
+
- `ink`: `#0F0D0C` `softInk`: `#2A231F` `mutedInk`: `#6C6259`
|
|
135
|
+
|
|
136
|
+
**Signal** (default `hazard`)
|
|
137
|
+
- Dark canvas: `#FFDF29` Light canvas: `#B58900`
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## TYPOGRAPHY
|
|
142
|
+
|
|
143
|
+
- **Display:** Inter (SF Pro Display approximation), 500 / 600 / 700 / 800.
|
|
144
|
+
Hero h1 at `clamp(3.5rem, 10vw, 9rem)`, tracking -0.04em (loosens to
|
|
145
|
+
-0.005em at body).
|
|
146
|
+
- **Body:** Inter, 17px, line-height 1.55, tracking -0.005em.
|
|
147
|
+
- **Mono:** JetBrains Mono — for code / terminal / metric values /
|
|
148
|
+
@handles ONLY.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## SECTION SKELETON (top → bottom)
|
|
153
|
+
|
|
154
|
+
1. Sticky palette + canvas picker strip (meta-UI, not theme composition).
|
|
155
|
+
2. Masthead nav — brand + 4 nav items + one signal CTA.
|
|
156
|
+
3. Hero — mesh-gradient backdrop, oversized display, one signal CTA +
|
|
157
|
+
ghost secondary, one paragraph of body copy.
|
|
158
|
+
4. Product surface photograph — full-bleed 21:9, warm-shadow grade, no
|
|
159
|
+
caption card.
|
|
160
|
+
5. Terminal specimen — rounded-xl card with `$` prompt, real CLI output.
|
|
161
|
+
6. Model-card feature grid (2×2 or 4×1) — mono meta at top, display
|
|
162
|
+
title, body, status pill.
|
|
163
|
+
7. Marketing hero — full-bleed photograph with oversized display overlay
|
|
164
|
+
+ one signal CTA.
|
|
165
|
+
8. Live metrics table — 4 rows, tabular figures, status dots.
|
|
166
|
+
9. Pricing — 3 tiers, ONE signal CTA on the recommended tier.
|
|
167
|
+
10. Footer — brand + one-line note + three link columns + small
|
|
168
|
+
copyright.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Design Direction — Signal-Dark
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Tesla blackout · Hugging Face yellow signal · Apple display type · Cybertruck engineered restraint · Vercel typographic discipline
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Warm-black backdrop with one bright yellow signal color and oversized display type. Hugging-Face-style model-card grids carry technical content; Tesla-style hero moments carry marketing. Reads as a premium developer tool — serious, friendly, expensive without being noisy. The opposite of generic AI-startup purple.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Tesla** → warm-black blackout marketing surfaces. Photography is the lead; UI gets out of the way.
|
|
11
|
+
- **Hugging Face** → yellow signal accent (#FFD21E) and model-card chrome. Code prominence; technical-but-friendly voice.
|
|
12
|
+
- **Apple** → oversized SF Pro display type at 80-140px, generous tracking refinement, hero whitespace.
|
|
13
|
+
- **Cybertruck** → engineered angular restraint, raw materiality. Hairline borders that *suggest* without enforcing.
|
|
14
|
+
- **Vercel** → developer-tool typographic discipline. Body type that's neutral; mono type that's prominent.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
HSL triples in `src/index.css`. The warm bias on dark surfaces (`30°` hue) is deliberate — it keeps photography from looking dead. Tesla cinematic uses cool 220° blue-black; signal-dark uses warm 30°. Same pitch-black at first glance, different feeling underneath.
|
|
18
|
+
|
|
19
|
+
Brand tokens: `signal` (= primary), `signal-glow`, `ice` (Vercel cyan, used sparingly for info states), `carbon` (Cybertruck steel for contrast panels), `platinum` (warm silver for sub-headings), `glow-warm` + `glow-cool` (radial-gradient stops for hero backdrops).
|
|
20
|
+
|
|
21
|
+
The yellow `signal` is the **only allowed accent color** on a page. No second color for "variety." If you need a status signal (success/warning/info), use mono labels with the signal-yellow dot prefix, not green/orange/blue chips. The single-color rule is what makes the yellow read as *the signal*.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Inter (Apple SF Pro Display approximation). Weights 500/600/700/800. h1-h4. Hero h1 uses `clamp(3.5rem, 10vw, 9rem)` — Apple/Vercel hero scale. Tracking `-0.04em` (very tight at display sizes; loosens to `-0.005em` at body).
|
|
25
|
+
- **Body:** Inter, 17px, line-height 1.55. Negative tracking `-0.005em`.
|
|
26
|
+
- **Mono:** JetBrains Mono. **Prominent.** Used for eyebrow labels (small-caps mono), code, model IDs, CLI output, status meta. Hugging-Face-style code-first surfaces.
|
|
27
|
+
|
|
28
|
+
Font features: `"cv11", "ss01", "ss03", "tnum"` — Inter stylistic sets + tabular figures. Numbers use `font-mono` or `.tabular`.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-7xl px-6 lg:px-12` (1280px wide — Apple/Tesla claim the screen).
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-24 pb-32 lg:pt-32 lg:pb-48` — oversized
|
|
34
|
+
- Default: `py-20 lg:py-32`
|
|
35
|
+
- Tight: `py-12 lg:py-20`
|
|
36
|
+
- **Allowed scale:** 4 6 8 12 16 20 24 32 40 48 64 80 96 128.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex anywhere. All color via tokens. Opacity via `/N` modifier on a token. **Pure black is forbidden** (`--background` is `30 8% 5%`, never `0 0% 0%`). **Pure white is forbidden** (`--foreground` is `30 15% 96%`, never `0 0% 100%`). The warm bias is structural; abandoning it makes everything look like every other dark-mode site.
|
|
40
|
+
|
|
41
|
+
## Radius
|
|
42
|
+
`--radius: 0.75rem` (12px). Apple-iOS card radius — rounded but not pillowy. **Pills are allowed** (`pillsAllowed: true`) for status badges, tags, model-card meta chips. Pure right angles read as a Vercel-dashboard surface (off-direction); pure pills read as a chip toggle (also off-direction).
|
|
43
|
+
|
|
44
|
+
## Shadows
|
|
45
|
+
Style is **"glow"**. Signature utility: `.glow-signal` (yellow halo + soft drop) on primary CTAs and active states. Cards use `.glow-card` (border + subtle drop + ambient backdrop shadow). The glow is the depth language — drop-shadows alone read as 2018 SaaS.
|
|
46
|
+
|
|
47
|
+
Three utilities:
|
|
48
|
+
- `.glow-signal` — yellow halo for the one primary action per page
|
|
49
|
+
- `.glow-card` — default card lift with border + subtle dark drop
|
|
50
|
+
- `.glow-subtle` — minimal hairline + small drop for secondary surfaces
|
|
51
|
+
|
|
52
|
+
## Motion
|
|
53
|
+
- **Easing:** `cubic-bezier(0.22, 1, 0.36, 1)`
|
|
54
|
+
- **Duration tiers:** reveal (700ms), loop (3s), ambient (32s)
|
|
55
|
+
- **Keyframes:**
|
|
56
|
+
- `fade-rise` — standard content reveal
|
|
57
|
+
- `glow-pulse` — primary CTA breathes slowly (3s loop on the main action)
|
|
58
|
+
- `gradient-shift` — hero backdrop drifts slowly (32s ambient, no visible loop point)
|
|
59
|
+
- `terminal-type` — staggered slide-in for terminal-demo lines
|
|
60
|
+
|
|
61
|
+
`prefers-reduced-motion` honored throughout. Transform-only animations on loops; never animate `top/left/width/height`.
|
|
62
|
+
|
|
63
|
+
## Component patterns
|
|
64
|
+
- **Buttons:** primary = solid yellow signal (`bg-signal text-primary-foreground rounded-xl font-medium`), `glow-signal` shadow on hover. Secondary = ghost (border + foreground). Tertiary = mono text-link with signal underline. **One primary per page.**
|
|
65
|
+
- **Cards:** `rounded-xl border bg-card`, `glow-card` shadow. Padding `p-6 lg:p-8`. Title in display font; meta in mono. Hover lifts with `translate-y-[-2px]` and the glow strengthens. **Model-card-style** — HF influence: meta lives at the top in mono, content lives below.
|
|
66
|
+
- **Inputs:** rounded-lg box, border, `bg-secondary`. Focus ring `2px solid signal at 60% opacity`. Label above; helper below in `mutedForeground`.
|
|
67
|
+
- **CTAs:** primary action is *the* yellow button — always. There is ONE primary CTA per page maximum. Secondary actions are ghost buttons or text-links. Marketing-heavy "free trial / sign up" double-CTAs are forbidden — pick one.
|
|
68
|
+
|
|
69
|
+
## Component families
|
|
70
|
+
**Model-card** (`*Card`, `*ModelCard`): rounded-xl, border, bg-card, glow-card; meta row in mono at top (icon + slug + version pill); display-font title; mono description; hover lifts. **Status pill** (`*Pill`, `*Badge`): rounded-full, text-xs, px-2 py-0.5, mono, signal-yellow dot prefix for active/success; never colored fills. **Hero block** (`*Hero`): full-bleed gradient backdrop, oversized h1, mono eyebrow, single yellow CTA + ghost secondary.
|
|
71
|
+
|
|
72
|
+
## Recommended rich media
|
|
73
|
+
|
|
74
|
+
Signal-dark is **photography-rich** in the Tesla / Apple-marketing tradition, but **screenshot-rich** in the Hugging Face / Vercel developer-tool tradition. The mix is the direction.
|
|
75
|
+
|
|
76
|
+
**Hero media:** widescreen photography (21:9 or 16:9), color-graded toward warm shadows + cool highlights (Tesla-cinematic), or product photography on warm-black seamless. **CSS mesh-gradient backdrops** are also permitted as the hero — radial gradients of `--glow-warm` and `--glow-cool` over `--background`, animated subtly via `gradient-shift`. The gradient backdrop is the cheapest hero option that still reads premium.
|
|
77
|
+
|
|
78
|
+
**Code / terminal demo:** the signature signal-dark element. Show the product running — CLI output, code snippets, model-card examples — in a styled `<pre>` with terminal chrome (window dots, title bar). HF leans into this hard; signal-dark should too. Use **JetBrains Mono**, signal-yellow for the prompt and accents, off-white body, dimmed muted-foreground for system text.
|
|
79
|
+
|
|
80
|
+
**AI tool recommendations:**
|
|
81
|
+
- **Midjourney / Flux** with prompts like *"Tesla marketing site photography, warm shadows, cool highlights, 21:9 cinematic, slight film grain, anamorphic lens flare suppressed"* for hero photography
|
|
82
|
+
- **Sora / Runway / Veo** for hero video loops (cinematic atmosphere, slow motion, max 8 MB)
|
|
83
|
+
- **Spline** for hero 3D — premium product objects, glass/chrome surfaces with warm rim lighting
|
|
84
|
+
- **mesh-gradient.com** for the CSS-only gradient backdrop (no AI needed)
|
|
85
|
+
- **Carbon (carbon.now.sh)** or **Ray.so** for static code-snippet images in warm-black theme
|
|
86
|
+
|
|
87
|
+
**Aspect ratios:** 21:9 or 16:9 for hero photography; 4:3 or 1:1 for product shots; gradient backdrops are full-bleed (no aspect constraint).
|
|
88
|
+
|
|
89
|
+
**Performance:** hero photo ≤200 KB AVIF at 1920w; hero video ≤6 MB H.265 with poster fallback; mesh-gradient is ~0 KB CSS. LCP target <2s on 4G.
|
|
90
|
+
|
|
91
|
+
**Avoid:** pure black photography backgrounds (kills the warm bias), saturated chrome 3D (that's Y2K), gradient backdrops in the wrong hue (no purple, no pink — warm amber + cool blue only), generic stock photography with watermarks, autoplay video with sound, photography that competes with the yellow signal (no yellow-dominant images — the signal must remain the unique yellow on the page).
|
|
92
|
+
|
|
93
|
+
**Accessibility:** WCAG AA for text on warm-black requires foreground at ≥`30 15% 88%` minimum (we use `30 15% 96%`, well above). Yellow signal on warm-black passes AA at large size; for small body text on yellow, the foreground must be the near-black `--primary-foreground`, never off-white.
|
|
94
|
+
|
|
95
|
+
## Component families (when projects add them)
|
|
96
|
+
Document each family here as it emerges. Initial expected families: `*Card` (model-card pattern), `*Pill` (status/tag), `*Hero` (full-bleed gradient + oversized type).
|
|
97
|
+
|
|
98
|
+
## Details
|
|
99
|
+
- **Selection:** `hsl(var(--signal) / 0.3)` background, foreground text.
|
|
100
|
+
- **Focus ring:** `2px solid hsl(var(--signal) / 0.6)` — visible and on-brand.
|
|
101
|
+
- **Scrollbar:** thin, warm-toned.
|
|
102
|
+
|
|
103
|
+
## Exceptions
|
|
104
|
+
None yet. When an intentional violation lands (e.g. a Tesla cinematic-dark *blue* hue used for a single hero moment), add it here with the reason.
|
|
105
|
+
|
|
106
|
+
## Revisions
|
|
107
|
+
- Initial direction, generated at install time. Authored as the 13th canonical direction to dogfood the synthesis Tesla + Hugging Face + Apple — and to provide a premium-developer-tool aesthetic the original twelve didn't cover.
|