@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,281 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const saturdayMorning: Direction = {
|
|
4
|
+
name: "saturday-morning",
|
|
5
|
+
ethos:
|
|
6
|
+
"Cartoon Network playful · Nickelodeon orange splat · Adult Swim ironic edge · Pixar warmth · Adventure Time hand-drawn whimsy",
|
|
7
|
+
references: [
|
|
8
|
+
{
|
|
9
|
+
brand: "Cartoon Network (1990s-2000s bumper graphics)",
|
|
10
|
+
trait: "chunky bold type, mismatched colors, sticker-pack composition",
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
brand: "Nickelodeon",
|
|
14
|
+
trait: "orange splat, slime green, oversized round shapes",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
brand: "Adult Swim",
|
|
18
|
+
trait: "ironic late-night minimalism with chunky type, deadpan title cards",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
brand: "Pixar",
|
|
22
|
+
trait: "warm character lighting, friendly rounded forms",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
brand: "Adventure Time",
|
|
26
|
+
trait: "hand-drawn wobble, expressive shapes, flat-color whimsy",
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
feel:
|
|
30
|
+
"Bright, chunky, playful without being childish. Bold display fonts with friendly roundness, " +
|
|
31
|
+
"many colors used confidently, hard-offset shadow drops give a sticker-pack feel. " +
|
|
32
|
+
"Reads as fun-but-considered, not Comic-Sans — the cartoon sensibility filtered through " +
|
|
33
|
+
"an Adult Swim editor's eye.",
|
|
34
|
+
|
|
35
|
+
fonts: {
|
|
36
|
+
display: {
|
|
37
|
+
family: "Fredoka",
|
|
38
|
+
fallback: ["Lilita One", "Baloo 2", "Inter", "system-ui", "sans-serif"],
|
|
39
|
+
from:
|
|
40
|
+
"Fredoka — chunky friendly rounded display, the cartoon-bumper feel without the Comic-Sans wobble; " +
|
|
41
|
+
"Lilita One covers the same territory if Fredoka is unavailable",
|
|
42
|
+
googleFont: "Fredoka:wght@500;700;900",
|
|
43
|
+
weights: [500, 700, 900],
|
|
44
|
+
},
|
|
45
|
+
body: {
|
|
46
|
+
family: "DM Sans",
|
|
47
|
+
fallback: ["Inter", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
48
|
+
from:
|
|
49
|
+
"DM Sans — friendly rounded sans, soft terminals that pair with Fredoka without competing; " +
|
|
50
|
+
"the body voice is warm, not corporate",
|
|
51
|
+
googleFont: "DM+Sans:wght@400;500;700",
|
|
52
|
+
weights: [400, 500, 700],
|
|
53
|
+
},
|
|
54
|
+
mono: {
|
|
55
|
+
family: "JetBrains Mono",
|
|
56
|
+
fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
57
|
+
from:
|
|
58
|
+
"JetBrains Mono — rounded humanist mono with personality; reads like a credits crawl on a cartoon bumper",
|
|
59
|
+
googleFont: "JetBrains+Mono",
|
|
60
|
+
weights: [400, 700],
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
typography: {
|
|
65
|
+
headingTracking: "-0.01em", // Fredoka is wide and round; a hair of negative tracking tightens the chunky feel
|
|
66
|
+
bodyTracking: "0",
|
|
67
|
+
fontFeatureSettings: '"ss01", "cv11"',
|
|
68
|
+
h1ScaleClamp: "clamp(2.75rem, 7vw, 5.5rem)", // chunky display wants size — bumper-card territory
|
|
69
|
+
bodyBaseSize: "1.0625rem",
|
|
70
|
+
bodyLineHeight: "1.6",
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
colors: {
|
|
74
|
+
background: {
|
|
75
|
+
hsl: "42 90% 92%",
|
|
76
|
+
from: "bright cream sun — Saturday morning light pouring through the kitchen window",
|
|
77
|
+
},
|
|
78
|
+
foreground: {
|
|
79
|
+
hsl: "275 30% 15%",
|
|
80
|
+
from:
|
|
81
|
+
"deep purple-black — not pure black; gives the palette room to sit against it without going gray",
|
|
82
|
+
},
|
|
83
|
+
card: {
|
|
84
|
+
hsl: "42 80% 96%",
|
|
85
|
+
from: "lighter cream — a card lifted off the cereal-box background",
|
|
86
|
+
},
|
|
87
|
+
popover: {
|
|
88
|
+
hsl: "42 80% 96%",
|
|
89
|
+
from: "same as card; depth comes from sticker shadow, not hue shift",
|
|
90
|
+
},
|
|
91
|
+
primary: {
|
|
92
|
+
hsl: "325 90% 55%",
|
|
93
|
+
from: "hot magenta-pink — the Nickelodeon energy color, the principal action",
|
|
94
|
+
},
|
|
95
|
+
primaryForeground: {
|
|
96
|
+
hsl: "42 80% 96%",
|
|
97
|
+
from: "cream on magenta — the sticker label",
|
|
98
|
+
},
|
|
99
|
+
secondary: {
|
|
100
|
+
hsl: "44 100% 55%",
|
|
101
|
+
from: "= brand.sun — Cartoon Network sun yellow, secondary action color",
|
|
102
|
+
},
|
|
103
|
+
secondaryForeground: {
|
|
104
|
+
hsl: "275 30% 15%",
|
|
105
|
+
from: "purple-black on sun yellow",
|
|
106
|
+
},
|
|
107
|
+
muted: {
|
|
108
|
+
hsl: "42 50% 88%",
|
|
109
|
+
from: "deeper cream — quiet panels inside a bright page",
|
|
110
|
+
},
|
|
111
|
+
mutedForeground: {
|
|
112
|
+
hsl: "275 20% 35%",
|
|
113
|
+
from: "purple-gray — secondary text that reads against cream and muted alike",
|
|
114
|
+
},
|
|
115
|
+
accent: {
|
|
116
|
+
hsl: "200 95% 60%",
|
|
117
|
+
from: "= brand.sky — Adventure Time sky blue, hover and selection accent",
|
|
118
|
+
},
|
|
119
|
+
accentForeground: {
|
|
120
|
+
hsl: "275 30% 15%",
|
|
121
|
+
from: "purple-black on sky blue",
|
|
122
|
+
},
|
|
123
|
+
border: {
|
|
124
|
+
hsl: "275 30% 15%",
|
|
125
|
+
from:
|
|
126
|
+
"= foreground; the inked outline around every cartoon shape — thick, intentional, never gray",
|
|
127
|
+
},
|
|
128
|
+
input: {
|
|
129
|
+
hsl: "275 30% 15%",
|
|
130
|
+
from: "same as border — inputs wear the inked-outline treatment",
|
|
131
|
+
},
|
|
132
|
+
ring: {
|
|
133
|
+
hsl: "325 90% 55%",
|
|
134
|
+
from: "primary magenta, focus only",
|
|
135
|
+
},
|
|
136
|
+
destructive: {
|
|
137
|
+
hsl: "350 85% 60%",
|
|
138
|
+
from:
|
|
139
|
+
"= brand.cherry — Pixar character red; saturated and warm, not blood-red — alerts that still feel hand-drawn",
|
|
140
|
+
},
|
|
141
|
+
destructiveForeground: {
|
|
142
|
+
hsl: "42 80% 96%",
|
|
143
|
+
from: "cream on alert",
|
|
144
|
+
},
|
|
145
|
+
brand: {
|
|
146
|
+
slime: {
|
|
147
|
+
hsl: "90 75% 55%",
|
|
148
|
+
from: "Nickelodeon slime green — the splat color, the late-90s game-show ooze",
|
|
149
|
+
},
|
|
150
|
+
sun: {
|
|
151
|
+
hsl: "44 100% 55%",
|
|
152
|
+
from: "Cartoon Network sun yellow — the bumper-card highlight, the Adventure Time afternoon",
|
|
153
|
+
},
|
|
154
|
+
sky: {
|
|
155
|
+
hsl: "200 95% 60%",
|
|
156
|
+
from: "Adventure Time sky blue — the flat-cel backdrop, the candy-kingdom horizon",
|
|
157
|
+
},
|
|
158
|
+
cherry: {
|
|
159
|
+
hsl: "350 85% 60%",
|
|
160
|
+
from: "Pixar character red — Mr. Incredible chest, warm and saturated, never cool magenta",
|
|
161
|
+
},
|
|
162
|
+
grape: {
|
|
163
|
+
hsl: "275 75% 55%",
|
|
164
|
+
from: "playful purple — Adult Swim title-card grape, the wink between the bright colors",
|
|
165
|
+
},
|
|
166
|
+
magenta: {
|
|
167
|
+
hsl: "325 90% 55%",
|
|
168
|
+
from: "= primary; Nickelodeon energy magenta, also the brand-mark color",
|
|
169
|
+
},
|
|
170
|
+
cream: {
|
|
171
|
+
hsl: "42 90% 92%",
|
|
172
|
+
from: "= background; the kitchen-window light, also a named token for component overrides",
|
|
173
|
+
},
|
|
174
|
+
ink: {
|
|
175
|
+
hsl: "275 30% 15%",
|
|
176
|
+
from: "= foreground; the inked outline, also semantic for borders",
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
spacing: {
|
|
182
|
+
base: 4,
|
|
183
|
+
scale: [4, 6, 8, 12, 16, 20, 24, 32, 48, 64], // medium — decoration takes room
|
|
184
|
+
containerMax: "max-w-5xl",
|
|
185
|
+
containerPadding: "px-6 lg:px-10",
|
|
186
|
+
sectionPadding: {
|
|
187
|
+
hero: "pt-24 pb-16 lg:pt-32 lg:pb-24",
|
|
188
|
+
default: "py-16 lg:py-24",
|
|
189
|
+
tight: "py-12 lg:py-16",
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
radius: {
|
|
194
|
+
base: "1.5rem", // very rounded — pillowy soft, sticker-edge feel
|
|
195
|
+
pillsAllowed: true,
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
shadows: {
|
|
199
|
+
style: "none",
|
|
200
|
+
utilities: {
|
|
201
|
+
"shadow-sticker":
|
|
202
|
+
"4px 4px 0 0 hsl(var(--foreground))", // hard offset, no blur — the sticker/comic peel
|
|
203
|
+
"shadow-sticker-lg":
|
|
204
|
+
"6px 6px 0 0 hsl(var(--foreground))", // hover-lifted sticker — same drop, bigger throw
|
|
205
|
+
"shadow-sticker-sm":
|
|
206
|
+
"2px 2px 0 0 hsl(var(--foreground))", // compact sticker for tags, badges, inline chips
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
motion: {
|
|
211
|
+
easing: "cubic-bezier(0.34, 1.56, 0.64, 1)", // bouncy spring — overshoot is the language
|
|
212
|
+
durations: {
|
|
213
|
+
reveal: 400, // bounce-in entrance — spring with overshoot
|
|
214
|
+
loop: 600, // wiggle cycle
|
|
215
|
+
ambient: 200, // pop-color flash on hover
|
|
216
|
+
},
|
|
217
|
+
keyframes: {
|
|
218
|
+
"bounce-in": {
|
|
219
|
+
css:
|
|
220
|
+
"0% { opacity: 0; transform: scale(0.6); }\n" +
|
|
221
|
+
"60% { opacity: 1; transform: scale(1.08); }\n" +
|
|
222
|
+
"100% { opacity: 1; transform: scale(1); }",
|
|
223
|
+
defaultDuration: 400,
|
|
224
|
+
iteration: "once",
|
|
225
|
+
purpose:
|
|
226
|
+
"entrance with overshoot — buttons, modals, cards land with a spring; the cartoon-card pop",
|
|
227
|
+
},
|
|
228
|
+
"wiggle": {
|
|
229
|
+
css:
|
|
230
|
+
"0%, 100% { transform: rotate(0deg); }\n" +
|
|
231
|
+
"25% { transform: rotate(-3deg); }\n" +
|
|
232
|
+
"75% { transform: rotate(3deg); }",
|
|
233
|
+
defaultDuration: 600,
|
|
234
|
+
iteration: "once",
|
|
235
|
+
purpose:
|
|
236
|
+
"playful nudge on hover — buttons wiggle when the cursor lands; the Adventure Time wobble",
|
|
237
|
+
},
|
|
238
|
+
"pop-color": {
|
|
239
|
+
css:
|
|
240
|
+
"0% { filter: hue-rotate(0deg); }\n" +
|
|
241
|
+
"50% { filter: hue-rotate(20deg) saturate(1.15); }\n" +
|
|
242
|
+
"100% { filter: hue-rotate(0deg); }",
|
|
243
|
+
defaultDuration: 200,
|
|
244
|
+
iteration: "once",
|
|
245
|
+
purpose:
|
|
246
|
+
"color flash on hover — links and tags pulse a hue-shift; the bumper-graphic blink",
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
respectsReducedMotion: true,
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
density: "medium",
|
|
253
|
+
|
|
254
|
+
patterns: {
|
|
255
|
+
button:
|
|
256
|
+
"Chunky rounded, magenta solid by default with foreground text and a hard `.shadow-sticker` drop. " +
|
|
257
|
+
"Rounded-3xl baseline (matches `--radius: 1.5rem`); pills allowed for tags and compact actions. " +
|
|
258
|
+
"Hover: `wiggle` keyframe + lift to `.shadow-sticker-lg`. " +
|
|
259
|
+
"Secondary buttons swap the magenta for any brand token (sun, sky, slime, grape) — fill is the norm, " +
|
|
260
|
+
"ghost is the exception.",
|
|
261
|
+
card:
|
|
262
|
+
"Thick 2px `--ink` border, brand-token or card-cream background, `rounded-3xl`, " +
|
|
263
|
+
"`.shadow-sticker` drop. Title in Fredoka display, oversized. Padding `p-6 lg:p-10`. " +
|
|
264
|
+
"Hover lifts to `.shadow-sticker-lg`. Cards are stickers — they peel off the page.",
|
|
265
|
+
input:
|
|
266
|
+
"Full `rounded-2xl` box, 2px `--ink` border, `bg-card`. Label above in DM Sans 500. " +
|
|
267
|
+
"Focus shifts border to `--ring` (magenta) and adds `.shadow-sticker-sm`. " +
|
|
268
|
+
"No border-bottom-only treatment — every input is a labeled sticker pocket.",
|
|
269
|
+
cta:
|
|
270
|
+
"Filled chunky button is the default — magenta primary or sun-yellow secondary, with the sticker shadow. " +
|
|
271
|
+
"Pills reserved for tags and toggles. Text-link CTAs use `pop-color` on hover with a thick underline. " +
|
|
272
|
+
"Never a flat ghost — every CTA carries weight.",
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
details: {
|
|
276
|
+
selectionBg: "hsl(var(--brand-sun) / 0.6)",
|
|
277
|
+
selectionFg: "hsl(var(--foreground))",
|
|
278
|
+
focusRing: "3px solid hsl(var(--ring))",
|
|
279
|
+
scrollbarStyle: "auto",
|
|
280
|
+
},
|
|
281
|
+
};
|
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.
|