@stylecrib/cli 0.3.1 → 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 +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 +1577 -463
- package/package.json +11 -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,176 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// solar-residential — Sunrun / Tesla Solar / SunPower clean-white residential
|
|
4
|
+
// installer language. White canvas, single signal-green accent, savings-driven
|
|
5
|
+
// numerics. Reads like a friendly neighborhood quote, not a utility bill.
|
|
6
|
+
|
|
7
|
+
export const solarResidential: Direction = {
|
|
8
|
+
name: "solar-residential" as Direction["name"],
|
|
9
|
+
ethos:
|
|
10
|
+
"Sunrun homeowner-friendly chrome · Tesla Solar minimal white · SunPower trust-blue restraint · " +
|
|
11
|
+
"Sunnova warm signal-green · ADT Solar suburban-safe rounding",
|
|
12
|
+
references: [
|
|
13
|
+
{ brand: "Sunrun", trait: "homeowner-friendly orange-on-white CTA stack" },
|
|
14
|
+
{ brand: "Tesla Solar", trait: "near-zero-chrome white canvas, single-accent moment" },
|
|
15
|
+
{ brand: "SunPower", trait: "restrained trust-blue type, savings-calculator gravity" },
|
|
16
|
+
{ brand: "Sunnova", trait: "warm signal-green for go/install/active states" },
|
|
17
|
+
{ brand: "ADT Solar", trait: "rounded suburban-safe card chrome, friendly numerics" },
|
|
18
|
+
],
|
|
19
|
+
feel:
|
|
20
|
+
"Clean white residential-installer page. One signal-green accent does all the savings/CTA work. " +
|
|
21
|
+
"Numbers are big and tabular — kWh, dollar-per-month, panel count. Rounded corners read suburban-safe " +
|
|
22
|
+
"(not enterprise-sharp). The page is a confident quote, not a sales pitch.",
|
|
23
|
+
|
|
24
|
+
fonts: {
|
|
25
|
+
display: {
|
|
26
|
+
family: "Inter",
|
|
27
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
28
|
+
from: "Tesla Solar / Sunrun display — Inter heavy, no flourishes",
|
|
29
|
+
googleFont: "Inter",
|
|
30
|
+
weights: [500, 600, 700],
|
|
31
|
+
},
|
|
32
|
+
body: {
|
|
33
|
+
family: "Inter",
|
|
34
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
35
|
+
from: "SunPower body — neutral 15px, readable for older homeowners",
|
|
36
|
+
googleFont: "Inter",
|
|
37
|
+
weights: [400, 500, 600],
|
|
38
|
+
},
|
|
39
|
+
mono: {
|
|
40
|
+
family: "JetBrains Mono",
|
|
41
|
+
fallback: ["ui-monospace", "SFMono-Regular", "monospace"],
|
|
42
|
+
from: "savings numerics — kWh, $/month, panel count tabular",
|
|
43
|
+
googleFont: "JetBrains+Mono",
|
|
44
|
+
weights: [400, 500],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
typography: {
|
|
49
|
+
headingTracking: "-0.02em",
|
|
50
|
+
bodyTracking: "0",
|
|
51
|
+
fontFeatureSettings: '"tnum", "ss01"',
|
|
52
|
+
h1ScaleClamp: "clamp(2.25rem, 5vw, 3.75rem)",
|
|
53
|
+
bodyBaseSize: "0.9375rem",
|
|
54
|
+
bodyLineHeight: "1.55",
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
colors: {
|
|
58
|
+
background: { hsl: "0 0% 100%", from: "Tesla Solar pure white — no warmth, no tint" },
|
|
59
|
+
foreground: { hsl: "215 30% 14%", from: "deep slate — SunPower trust-ink, not pure black" },
|
|
60
|
+
card: { hsl: "210 25% 98%", from: "near-white card — lifts a degree above background" },
|
|
61
|
+
popover: { hsl: "0 0% 100%", from: "same as background" },
|
|
62
|
+
primary: { hsl: "142 65% 38%", from: "Sunnova signal green — install/active/savings color" },
|
|
63
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on signal green" },
|
|
64
|
+
secondary: { hsl: "210 22% 96%", from: "cool gray surface — secondary panel" },
|
|
65
|
+
secondaryForeground: { hsl: "215 30% 14%", from: "ink on cool gray" },
|
|
66
|
+
muted: { hsl: "210 20% 95%", from: "muted gray — divider blocks, disabled" },
|
|
67
|
+
mutedForeground: { hsl: "215 14% 44%", from: "slate gray — captions, kWh units, address meta" },
|
|
68
|
+
accent: { hsl: "142 55% 94%", from: "pale green hover surface — savings-row highlight" },
|
|
69
|
+
accentForeground: { hsl: "142 70% 22%", from: "deep green ink on pale green" },
|
|
70
|
+
border: { hsl: "210 16% 88%", from: "soft cool-gray hairline" },
|
|
71
|
+
input: { hsl: "210 16% 88%", from: "same as border" },
|
|
72
|
+
ring: { hsl: "142 65% 38%", from: "primary signal green — focus rings on inputs" },
|
|
73
|
+
destructive: { hsl: "8 72% 50%", from: "alert red — distinct from any solar accent, used for outage/fault" },
|
|
74
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on alert red" },
|
|
75
|
+
brand: {
|
|
76
|
+
"signal-green": { hsl: "142 65% 38%", from: "= primary; Sunnova install/active state" },
|
|
77
|
+
"signal-green-deep": { hsl: "142 70% 28%", from: "hover state for green, gradient anchor" },
|
|
78
|
+
"signal-green-soft": { hsl: "142 55% 94%", from: "pale green badge bg, savings-row highlight" },
|
|
79
|
+
"trust-blue": { hsl: "212 60% 38%", from: "SunPower trust-blue — secondary accent for warranty/badges" },
|
|
80
|
+
"sun-amber": { hsl: "38 92% 56%", from: "literal sun warmth — used sparingly on sunshine-icon, never CTA" },
|
|
81
|
+
"panel-slate": { hsl: "215 25% 22%", from: "panel-render slate — 3D card render anchor color" },
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
spacing: {
|
|
86
|
+
base: 4,
|
|
87
|
+
scale: [4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64, 80],
|
|
88
|
+
containerMax: "max-w-6xl",
|
|
89
|
+
containerPadding: "px-4 lg:px-8",
|
|
90
|
+
sectionPadding: {
|
|
91
|
+
hero: "pt-20 pb-12 lg:pt-28 lg:pb-20",
|
|
92
|
+
default: "py-14 lg:py-20",
|
|
93
|
+
tight: "py-10 lg:py-14",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
radius: {
|
|
98
|
+
base: "0.625rem",
|
|
99
|
+
pillsAllowed: true,
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
shadows: {
|
|
103
|
+
style: "soft",
|
|
104
|
+
utilities: {
|
|
105
|
+
"shadow-quote":
|
|
106
|
+
"0 1px 2px hsl(215 30% 14% / 0.04), 0 6px 18px hsl(215 30% 14% / 0.06)",
|
|
107
|
+
"shadow-card":
|
|
108
|
+
"0 1px 2px hsl(215 30% 14% / 0.04), 0 2px 6px hsl(215 30% 14% / 0.04)",
|
|
109
|
+
"shadow-panel-glow":
|
|
110
|
+
"0 0 0 1px hsl(142 65% 38% / 0.18), 0 12px 40px hsl(142 65% 38% / 0.16)",
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
motion: {
|
|
115
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
116
|
+
durations: {
|
|
117
|
+
reveal: 400,
|
|
118
|
+
loop: 2400,
|
|
119
|
+
ambient: 18000,
|
|
120
|
+
},
|
|
121
|
+
keyframes: {
|
|
122
|
+
"fade-rise": {
|
|
123
|
+
css:
|
|
124
|
+
"from { opacity: 0; transform: translateY(10px); }\n" +
|
|
125
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
126
|
+
defaultDuration: 400,
|
|
127
|
+
iteration: "once",
|
|
128
|
+
purpose: "savings card and quote-block entrance — confident, not theatrical",
|
|
129
|
+
},
|
|
130
|
+
"counter-up": {
|
|
131
|
+
css:
|
|
132
|
+
"from { opacity: 0; transform: translateY(6px); }\n" +
|
|
133
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
134
|
+
defaultDuration: 600,
|
|
135
|
+
iteration: "once",
|
|
136
|
+
purpose: "estimated-savings dollar number rolls in once the zip is entered",
|
|
137
|
+
},
|
|
138
|
+
"sun-rays": {
|
|
139
|
+
css:
|
|
140
|
+
"0% { transform: rotate(0deg); opacity: 0.6; }\n" +
|
|
141
|
+
"100% { transform: rotate(360deg); opacity: 0.6; }",
|
|
142
|
+
defaultDuration: 18000,
|
|
143
|
+
iteration: "infinite",
|
|
144
|
+
purpose: "ambient sun-ray rotation behind the panel-render hero — slow, decorative",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
respectsReducedMotion: true,
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
density: "medium",
|
|
151
|
+
|
|
152
|
+
patterns: {
|
|
153
|
+
button:
|
|
154
|
+
"Solid signal-green primary (rounded-lg, shadow-card) for the single quote/install commit. " +
|
|
155
|
+
"Secondary is ghost (border + foreground). Tertiary is text-link green. " +
|
|
156
|
+
"Hover deepens fill to signal-green-deep; no scale jump — residential trust language is steady.",
|
|
157
|
+
card:
|
|
158
|
+
"Rounded-lg, 1px --border, bg-card, shadow-card. Padding p-5 lg:p-6. " +
|
|
159
|
+
"Savings-calculator card uses shadow-panel-glow as the hero exception. " +
|
|
160
|
+
"Title display sans, dollar/kWh numbers in mono with tabular-nums.",
|
|
161
|
+
input:
|
|
162
|
+
"Full rounded-lg box, 1px --input border, bg-card. Zip-code input is mono 18px, center-aligned. " +
|
|
163
|
+
"Focus = 2px signal-green ring at 45% opacity. Label above in sans-medium 13px.",
|
|
164
|
+
cta:
|
|
165
|
+
"Primary signal-green button for 'Get my quote' / 'Schedule install'. " +
|
|
166
|
+
"Process timeline steps use signal-green-soft pills with signal-green-deep text. " +
|
|
167
|
+
"Customer-story rows use a small trust-blue underline on the homeowner name only.",
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
details: {
|
|
171
|
+
selectionBg: "hsl(var(--primary) / 0.20)",
|
|
172
|
+
selectionFg: "hsl(var(--foreground))",
|
|
173
|
+
focusRing: "2px solid hsl(var(--ring) / 0.45)",
|
|
174
|
+
scrollbarStyle: "thin",
|
|
175
|
+
},
|
|
176
|
+
};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Sports League
|
|
2
|
+
|
|
3
|
+
> NBA / league-official-anchored premium sports register — deep navy canvas at
|
|
4
|
+
|
|
5
|
+
**Slug:** `sports-league` — **Surface:** web — **Density:** dense
|
|
6
|
+
|
|
7
|
+
## Influence
|
|
8
|
+
|
|
9
|
+
Modern professional-league brand systems at their most cinematic
|
|
10
|
+
(league-official hero tiles at their most portrait-and-stat forward,
|
|
11
|
+
premium sports broadcast graphics at their most graphic and pared-back,
|
|
12
|
+
broadcast score-bug chrome at its most reduced). Distinct from esports
|
|
13
|
+
and college-sports surfaces through the PLAYER STAT CARD ANCHOR +
|
|
14
|
+
ARENA CHROME + LEAGUE-OFFICIAL RESTRAINT trio.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Signature move
|
|
18
|
+
|
|
19
|
+
Deep navy canvas at #0a0e1e — the register's non-negotiable base
|
|
20
|
+
(league-official cinematic ground, deeper than pure black, warmer
|
|
21
|
+
than cool blue). Saturated arena-red brand accent #e6202b used ONLY
|
|
22
|
+
for live indicators, score bugs, primary CTAs, and championship
|
|
23
|
+
moments. Per-palette team spotlight color rotates through the 10
|
|
24
|
+
palette variants (Meridian red / Arcadia navy / Summit purple /
|
|
25
|
+
Capital forest / Marquee gold / Lane orange / Clutch teal / Opener
|
|
26
|
+
crimson / Final indigo / Capstone silver). Sharp 2px corners
|
|
27
|
+
everywhere.
|
|
28
|
+
|
|
29
|
+
MASTHEAD — a cream 'MERIDIAN' wordmark in Archivo Black uppercase
|
|
30
|
+
at 22px on the left with a stylized ball-mark, a horizontal nav
|
|
31
|
+
(Games / Standings / Teams / Schedule / Season Pass) center, a
|
|
32
|
+
filled arena-red 'Watch live' button right-aligned. Shrinks after
|
|
33
|
+
200px scroll.
|
|
34
|
+
|
|
35
|
+
LIVE TICKER STRIP — a full-bleed horizontal ticker below the nav
|
|
36
|
+
showing 6 games with team abbreviations, live/final scores, and
|
|
37
|
+
game clocks. Ticker cycles every 4 seconds. Live indicator pulses.
|
|
38
|
+
('MER 108 · ARC 102 · Q4 2:41 LIVE' + 'SUM 94 · CAP 87 · FINAL' +
|
|
39
|
+
'MAR 71 · LAN 68 · Q3 8:12 LIVE' etc.)
|
|
40
|
+
|
|
41
|
+
CINEMATIC PLAYER STAT CARD — the SIGNATURE MOVE. Full-bleed panel
|
|
42
|
+
with:
|
|
43
|
+
• BACKGROUND: team-color flood (Meridian arena red) with subtle
|
|
44
|
+
arena-lights texture (bespoke SVG radial spotlights, sharp
|
|
45
|
+
geometric — no gradient blooms).
|
|
46
|
+
• LEFT: bespoke SVG player silhouette in cream on navy — a
|
|
47
|
+
dramatic shooting-form portrait, not a stock photo, not an
|
|
48
|
+
emoji, not a radial-gradient blob. Illustrated in a graphic
|
|
49
|
+
broadcast-poster style with sharp angular geometry.
|
|
50
|
+
• RIGHT: massive stat number '48' in Archivo Black at 160px
|
|
51
|
+
counting up from 0, with 'PTS' label below in tracked mono.
|
|
52
|
+
Secondary stats '12 REB · 9 AST · 4 STL · 2 BLK' in a row
|
|
53
|
+
below in mono.
|
|
54
|
+
• BOTTOM RIBBON: player name 'K. MOSELY' + jersey number '#7'
|
|
55
|
+
+ team 'MERIDIAN HOME' + game 'vs. Arcadia · Feb 24'.
|
|
56
|
+
|
|
57
|
+
STANDINGS TABLE — full-width dark table with 12 rows (all 12
|
|
58
|
+
fictional Meridian League teams). Columns: RANK / TEAM / W-L / PCT
|
|
59
|
+
/ GB / STRK / LAST 10. Top 4 rows have subtle arena-red left border
|
|
60
|
+
(playoff spots). Bottom row has a small trending-down indicator.
|
|
61
|
+
Rows stagger reveal at 40ms per row.
|
|
62
|
+
|
|
63
|
+
ROSTER GRID — 12 player tiles in a dense 4-column grid, each with:
|
|
64
|
+
• Bespoke SVG jersey-number tile in team color
|
|
65
|
+
• Player name in Archivo Black uppercase
|
|
66
|
+
• Position + height in mono ('SF · 6'8"')
|
|
67
|
+
• Season stats mini bar: PTS · REB · AST
|
|
68
|
+
• Small status pill (Active / Day-to-day / Out)
|
|
69
|
+
|
|
70
|
+
SCHEDULE STRIP — horizontally-scrolling row of 10 upcoming game
|
|
71
|
+
cards, each with:
|
|
72
|
+
• Date + tip-off time in mono
|
|
73
|
+
• Home team abbreviation + logo mark (bespoke SVG)
|
|
74
|
+
• '@' or 'vs' in tracked mono
|
|
75
|
+
• Away team abbreviation + logo mark
|
|
76
|
+
• Arena venue + broadcast channel
|
|
77
|
+
|
|
78
|
+
FEATURED GAME RECAP — a full-width recap card with:
|
|
79
|
+
• Final score in Archivo Black 120px ('MER 108 · ARC 102')
|
|
80
|
+
• Game-flow line chart drawing via stroke-dashoffset (home vs.
|
|
81
|
+
away score progression over 4 quarters)
|
|
82
|
+
• Box-score mini-table (top 5 scorers per team, PTS/REB/AST)
|
|
83
|
+
• Championship-gold winner ribbon strip
|
|
84
|
+
|
|
85
|
+
SEASON PASS TIERS — 3-tier grid with:
|
|
86
|
+
• REGULAR SEASON PASS: all 82 regular-season games
|
|
87
|
+
• PLAYOFF PASS: adds playoffs (arena-red RECOMMENDED chip)
|
|
88
|
+
• CHAMPIONSHIP PASS: adds finals + all-access (championship-gold
|
|
89
|
+
chip + total-savings counter)
|
|
90
|
+
|
|
91
|
+
FOOTER — dark inverted band with 'MERIDIAN LEAGUE' wordmark at ~160px,
|
|
92
|
+
a 5-column utility grid, and a small broadcast-partner logo strip
|
|
93
|
+
(fictional 'MERIDIAN NETWORK · MRD SPORTS · WEST WIRE').
|
|
94
|
+
|
|
95
|
+
Six bespoke SVG marks (league-shield, ball-mark, jersey-number-tile,
|
|
96
|
+
clock-bug, court-diagram-mini, arena-lights) drop as PUNCTUATION at
|
|
97
|
+
specific compositional moments, never as a uniform icon row.
|
|
98
|
+
|
|
99
|
+
## Palette
|
|
100
|
+
|
|
101
|
+
- **bg:** `#0a0e1e`
|
|
102
|
+
- **surface:** `#111632`
|
|
103
|
+
- **ink:** `#f5f2ec`
|
|
104
|
+
- **accent:** `#e6202b`
|
|
105
|
+
|
|
106
|
+
## Typography
|
|
107
|
+
|
|
108
|
+
- **Display:** A bold condensed display sans at very heavy weight — Archivo Black / Neue Machina / Helvetica Now Condensed Extra Bold. Free fallback stack — "Archivo Black", "Barlow Condensed", "Helvetica Neue", "Impact", system-ui, sans-serif. Weight 800-900, uppercase for hero + score bugs, mixed case for section titles. Very tight letter-spacing (-0.03em) at hero scale. Top of scale ~160px cinematic hero stat number, 88px section titles, 32px card titles.
|
|
109
|
+
- **Body:** A clean neutral sans for body copy and player names — Inter / IBM Plex Sans. Free fallback stack — "Inter", "IBM Plex Sans", system-ui, sans-serif. Weight 400 for body, 500 for player names, 600 for team names. 14-15px body copy, line-height 1.55.
|
|
110
|
+
- **Mono:** JetBrains Mono / IBM Plex Mono for stats, jersey numbers, box scores, and game clock. Weight 400-600, 11-14px. LEGITIMATE here because sports statistics genuinely require monospaced tabular figures.
|
|
111
|
+
- **Scale:** 1.333 (perfect fourth stretched — dramatic hero-to-body jump)
|
|
112
|
+
|
|
113
|
+
## Motion
|
|
114
|
+
|
|
115
|
+
Ships live in the section renderer (no external dependencies):
|
|
116
|
+
1. Hero player-portrait fades in with 1000ms cubic-bezier(0.19,1,0.22,1), then the big stat number counts up 0 → target (e.g., 0 → 48) over 1600ms via requestAnimationFrame ease-out.
|
|
117
|
+
2. Live scoreboard ticker — 6 games cycle through the ticker every 4 seconds, each with team abbreviations + live/final score + game clock. The 'LIVE' indicator pulses in arena red at 1.4s intervals.
|
|
118
|
+
3. Standings table row reveal — 12 rows fade in with 40ms per-row stagger on IntersectionObserver visibility at 30% threshold.
|
|
119
|
+
4. Roster grid stagger — 12 player tiles fade in with 60ms per-tile stagger on scroll into view.
|
|
120
|
+
5. Schedule strip horizontal scroll — 10 upcoming games slide in from right with 80ms per-card stagger on scroll.
|
|
121
|
+
6. Featured recap chart draws — a game-flow line chart draws via stroke-dashoffset over 1400ms cubic-bezier on visibility at 40%.
|
|
122
|
+
7. Season-pass tier count-up — total-savings number counts up 0 → $340 on scroll.
|
|
123
|
+
8. Section reveals — each below-fold section fades in over 700ms cubic-bezier on IntersectionObserver at 25% threshold.
|
|
124
|
+
9. Nav shrink on scroll after 200px; ticker sticks to top edge after 400px scroll.
|
|
125
|
+
10. prefers-reduced-motion: reduce — scoreboard ticker still cycles but without pulse; counter jumps to final; charts show at full stroke; state changes still fire.
|
|
126
|
+
|
|
127
|
+
Motion character: cinematic, broadcast-graphic, high-gloss. Custom cubic-bezier(0.19,1,0.22,1) for reveals + cubic-bezier(0.65, 0, 0.35, 1) for scoreboard transitions. Reads as a broadcast graphics package, not a marketing page.
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## Imagery
|
|
131
|
+
|
|
132
|
+
BESPOKE SVG illustrations — the reference uses cinematic player
|
|
133
|
+
portraits, team-color hero floods, jersey-number tiles, and court
|
|
134
|
+
diagrams. FPO imagery here should read as considered broadcast-
|
|
135
|
+
graphics (bespoke SVG player silhouettes with sharp angular
|
|
136
|
+
geometry, team-color flood grounds, subtle arena-lights radial
|
|
137
|
+
spotlights). NO stock 'cheering crowd in stadium' photography.
|
|
138
|
+
NO player mockups that could read as real-world attribution.
|
|
139
|
+
NO 3D-rendered basketball/football renders. NO radial-gradient
|
|
140
|
+
placeholder fills as fake photography.
|
|
141
|
+
|
|
142
|
+
## Best for
|
|
143
|
+
|
|
144
|
+
- Professional-league broadcast and streaming surfaces
|
|
145
|
+
- Sports-league official brand sites and season-pass storefronts
|
|
146
|
+
- Sports media surfaces (recap, box-score, standings)
|
|
147
|
+
- Fantasy-league and sports-analytics platforms leaning cinematic
|
|
148
|
+
- Sports-betting platforms leaning premium and league-official
|
|
149
|
+
- Sports-team single-brand promo sites
|
|
150
|
+
|
|
151
|
+
## Reject if
|
|
152
|
+
|
|
153
|
+
_Director grades each of the following as a pass/fail check. Any violation blocks the theme._
|
|
154
|
+
|
|
155
|
+
- Light canvas — Sports League's canvas is DEEP NAVY #0a0e1e. Light canvas inverts the league-broadcast register into a fantasy-sports light-tool register (different theme).
|
|
156
|
+
- Pure black canvas — #0a0e1e is deliberately WARMER and BLUER than pure black, matching league-official brand systems. Pure black kills the specific atmospheric depth.
|
|
157
|
+
- Serif display — the register requires BOLD CONDENSED DISPLAY SANS. Serif display collapses into editorial territory.
|
|
158
|
+
- Multi-color palette — the register uses NAVY + CREAM + ARENA RED single accent + per-palette team spotlight. Introducing multi-color as decoration collapses the discipline into candy slop.
|
|
159
|
+
- Fully-rounded pill corners — cards use 2px sharp corners. 999px pills anywhere on this register kill the league-official reading.
|
|
160
|
+
- Stock crowd photography — imagery MUST feel like considered SVG broadcast graphics (player silhouettes, team-color floods, jersey tiles). Stock cheering-crowd photography is the AI-tell for corporate-sports slop.
|
|
161
|
+
- Player names or team names lifted from real leagues — placeholder MERIDIAN LEAGUE + fictional teams (MER / ARC / SUM / CAP / MAR / LAN / CLU / OPE / FIN / CAP-2) + fictional players. Naming real-world players / teams / leagues creates trademark and right-of-publicity exposure.
|
|
162
|
+
- 3D-rendered ball / court renders — visuals must be flat SVG broadcast graphics. 3D renders read as e-sports esports launch.
|
|
163
|
+
- Emoji sports icons ⛹️ 🏀 🏆 — bespoke SVG only. Emoji is the biggest AI-tell for corporate sports slop.
|
|
164
|
+
- Marketing-loud copy ('the most epic season of all time', 'unleash your fandom', 'game-changing action') — the register requires broadcast-official voice. Marketing-loud copy collapses into startup slop.
|
|
165
|
+
- Cycling headline words or auto-advancing carousel — the LIVE motion is the SCOREBOARD TICKER + STAT-NUMBER COUNT-UP only. Auto-advancing headline sliders collapse into marketing slop.
|
|
166
|
+
|
|
167
|
+
## Banned defaults (inherited + theme-specific)
|
|
168
|
+
|
|
169
|
+
- claude-cream (#F4F1EA + serif + #D97757) — this theme's canvas is deep navy #0a0e1e, and register requires bold condensed sans.
|
|
170
|
+
- void+acid
|
|
171
|
+
- broadsheet-on-noneditorial
|
|
172
|
+
- tech-bro purple gradient
|
|
173
|
+
- uniform-everything
|
|
174
|
+
- light-canvas-inversion (canvas is deep navy. Light canvas inverts into fantasy-tool register.)
|
|
175
|
+
- serif-display-anywhere (register requires bold condensed display sans. Serif display collapses into editorial territory.)
|
|
176
|
+
- multi-color-outside-team-spotlight (palette is navy + cream + arena red + per-palette team spotlight. Multi-color as decoration collapses into candy slop.)
|
|
177
|
+
- pill-card-corners (cards use 2px sharp corners, NOT 999px pills. 999px pills kill the league-official reading.)
|
|
178
|
+
- stock-crowd-photography (imagery must be bespoke SVG broadcast graphics. Stock crowd photography is the AI-tell.)
|
|
179
|
+
- real-player-names (placeholder MERIDIAN LEAGUE + fictional teams and players. Real player names create right-of-publicity exposure.)
|
|
180
|
+
- emoji-sports-icons (bespoke SVG only. Emoji is the biggest AI-tell for corporate sports slop.)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"slug":"sports-league","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-05T06:46:08.324Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-05T06:46:08.337Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-05T06:46:08.337Z","dismissed":[]},{"gate":"anchor-compare","verdict":{"passed":true,"failures":[],"skipped":"Family E rubric.md missing at /Users/mattfrischer/Taste/site/design-system/golden-set/E/rubric.md — anchor-compare skipped."},"ran_at":"2026-07-05T06:46:08.337Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-05T06:46:08.324Z"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
|
|
2
|
+
// slug: sports-league
|
|
3
|
+
export const sportsLeagueTailwindExtend = {
|
|
4
|
+
colors: {
|
|
5
|
+
bg: "#0a0e1e",
|
|
6
|
+
surface: "#111632",
|
|
7
|
+
ink: "#f5f2ec",
|
|
8
|
+
accent: "#e6202b",
|
|
9
|
+
},
|
|
10
|
+
fontFamily: {
|
|
11
|
+
display: ["A bold condensed display sans at very heavy weight — Archivo Black / Neue Machina / Helvetica Now Condensed Extra Bold. Free fallback stack — \"Archivo Black\", \"Barlow Condensed\", \"Helvetica Neue\", \"Impact\", system-ui, sans-serif. Weight 800-900, uppercase for hero + score bugs, mixed case for section titles. Very tight letter-spacing (-0.03em) at hero scale. Top of scale ~160px cinematic hero stat number, 88px section titles, 32px card titles."],
|
|
12
|
+
body: ["A clean neutral sans for body copy and player names — Inter / IBM Plex Sans. Free fallback stack — \"Inter\", \"IBM Plex Sans\", system-ui, sans-serif. Weight 400 for body, 500 for player names, 600 for team names. 14-15px body copy, line-height 1.55."],
|
|
13
|
+
mono: ["JetBrains Mono / IBM Plex Mono for stats, jersey numbers, box scores, and game clock. Weight 400-600, 11-14px. LEGITIMATE here because sports statistics genuinely require monospaced tabular figures."],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Sports League — Family E, Cinematic Dark (league-broadcast subregion).
|
|
2
|
+
#
|
|
3
|
+
# NBA / league-official-anchored premium sports register. Deep navy canvas
|
|
4
|
+
# (#0a0e1e) + high-gloss cream typography + saturated ARENA RED single accent
|
|
5
|
+
# (#e6202b) + optional per-palette team spotlight color. Bold condensed
|
|
6
|
+
# display sans + geometric mono for stats. Sharp 2px corners.
|
|
7
|
+
#
|
|
8
|
+
# Influence anchor: modern league-official brand systems at their most
|
|
9
|
+
# cinematic — the black/team-color hero tiles, the huge portrait + big
|
|
10
|
+
# stat overlay, the scoreboard-strip chrome. Placeholder league:
|
|
11
|
+
# "MERIDIAN LEAGUE" — a fictional pro league. Original name, original
|
|
12
|
+
# copy, no team names or player names lifted from any real league.
|
|
13
|
+
#
|
|
14
|
+
# Distinct from other Family E bases:
|
|
15
|
+
# - Vault Reel is cinema-poster reels for film festivals
|
|
16
|
+
# - Cinematic Dark is film-poster editorial dark
|
|
17
|
+
# - Performance Engineered is hypercar molten-amber
|
|
18
|
+
# - Signal Dark is dev-dashboard terminal green
|
|
19
|
+
# Sports League fills the LEAGUE-BROADCAST slot — the CINEMATIC PLAYER
|
|
20
|
+
# STAT CARD is the composition's signature move.
|
|
21
|
+
#
|
|
22
|
+
# Twenty-second theme via the v2 harness. Fifth Family E theme.
|
|
23
|
+
# Upgrade of the existing v1 archetype-fallback slug.
|
|
24
|
+
|
|
25
|
+
name: Sports League
|
|
26
|
+
concept: NBA / league-official-anchored premium sports register — deep navy canvas at #0a0e1e with high-gloss cream typography, saturated arena-red single accent, and a rotating per-palette team spotlight color. Bold condensed display sans (Archivo Black / Neue Machina / Helvetica Now Condensed) at monumental sizes. Full-bleed CINEMATIC PLAYER STAT CARD as the signature move — a bespoke SVG player silhouette on a team-color-flood ground with a massive overlaid stat number (48 PTS / 12 REB / 9 AST). Live scoreboard ticker updating every 4 seconds. Standings table, roster grid with bespoke jersey-number tiles, schedule strip, featured game recap with box score, and season-pass tiers.
|
|
27
|
+
influence: |
|
|
28
|
+
Modern professional-league brand systems at their most cinematic
|
|
29
|
+
(league-official hero tiles at their most portrait-and-stat forward,
|
|
30
|
+
premium sports broadcast graphics at their most graphic and pared-back,
|
|
31
|
+
broadcast score-bug chrome at its most reduced). Distinct from esports
|
|
32
|
+
and college-sports surfaces through the PLAYER STAT CARD ANCHOR +
|
|
33
|
+
ARENA CHROME + LEAGUE-OFFICIAL RESTRAINT trio.
|
|
34
|
+
|
|
35
|
+
family: E
|
|
36
|
+
base_number: 38
|
|
37
|
+
base_note: |
|
|
38
|
+
Family E Cinematic Dark, LEAGUE-BROADCAST slot. Distinct from other
|
|
39
|
+
Family E bases through the CINEMATIC PLAYER STAT CARD signature move
|
|
40
|
+
(full-bleed portrait + big stat number is the hero — not a film
|
|
41
|
+
still, not a hypercar close-up) + LIVE SCOREBOARD TICKER + STANDINGS
|
|
42
|
+
TABLE. Vault Reel is film-festival reels; Cinematic Dark is film-
|
|
43
|
+
poster editorial; Performance Engineered is hypercar molten-amber.
|
|
44
|
+
Sports League fills the league-broadcast slot. Upgrade of the
|
|
45
|
+
existing v1 sports-league slug from archetype-fallback.
|
|
46
|
+
|
|
47
|
+
render_url: http://localhost:5173/themes/sports-league
|
|
48
|
+
|
|
49
|
+
surface: web
|
|
50
|
+
|
|
51
|
+
typography:
|
|
52
|
+
display: A bold condensed display sans at very heavy weight — Archivo Black / Neue Machina / Helvetica Now Condensed Extra Bold. Free fallback stack — "Archivo Black", "Barlow Condensed", "Helvetica Neue", "Impact", system-ui, sans-serif. Weight 800-900, uppercase for hero + score bugs, mixed case for section titles. Very tight letter-spacing (-0.03em) at hero scale. Top of scale ~160px cinematic hero stat number, 88px section titles, 32px card titles.
|
|
53
|
+
body: A clean neutral sans for body copy and player names — Inter / IBM Plex Sans. Free fallback stack — "Inter", "IBM Plex Sans", system-ui, sans-serif. Weight 400 for body, 500 for player names, 600 for team names. 14-15px body copy, line-height 1.55.
|
|
54
|
+
mono: JetBrains Mono / IBM Plex Mono for stats, jersey numbers, box scores, and game clock. Weight 400-600, 11-14px. LEGITIMATE here because sports statistics genuinely require monospaced tabular figures.
|
|
55
|
+
scale: 1.333 (perfect fourth stretched — dramatic hero-to-body jump)
|
|
56
|
+
eyebrow_exception: |
|
|
57
|
+
Sports League LEGITIMATELY uses small-caps 0.14em-tracked 10-11px labels for LIVE GAME STATUS ('LIVE · Q4 · 2:41'), SCORE BUGS ('FINAL · OT'), STANDINGS COLUMN HEADERS ('W-L / PCT / GB / STRK'), and BOX-SCORE LABELS ('PTS / REB / AST / STL / BLK'). This is a THEME-SPECIFIC EXCEPTION — league-broadcast chrome uses these EXACTLY in this register as diegetic broadcast chrome, not decorative eyebrow slop.
|
|
58
|
+
|
|
59
|
+
palette:
|
|
60
|
+
bg: "#0a0e1e" # deep navy canvas — league-official base
|
|
61
|
+
surface: "#111632" # raised card surface — navy step
|
|
62
|
+
ink: "#f5f2ec" # high-gloss cream typography
|
|
63
|
+
accent: "#e6202b" # arena red single accent — CTAs, score bugs, live indicators
|
|
64
|
+
cream: "#f5f2ec" # alias for ink
|
|
65
|
+
darkInk: "#050813" # deepest navy for full-bleed floods
|
|
66
|
+
mute: "#8a90a8" # dimmed for captions + column headers
|
|
67
|
+
spotlight: "#d5aa50" # championship-gold accent for banner + title strip
|
|
68
|
+
teamHome: "#c8102e" # per-palette default team-home color (Meridian home)
|
|
69
|
+
teamAway: "#00538c" # per-palette default team-away color (Arcadia visitors)
|
|
70
|
+
|
|
71
|
+
density: dense
|
|
72
|
+
|
|
73
|
+
motion: |
|
|
74
|
+
Ships live in the section renderer (no external dependencies):
|
|
75
|
+
1. Hero player-portrait fades in with 1000ms cubic-bezier(0.19,1,0.22,1), then the big stat number counts up 0 → target (e.g., 0 → 48) over 1600ms via requestAnimationFrame ease-out.
|
|
76
|
+
2. Live scoreboard ticker — 6 games cycle through the ticker every 4 seconds, each with team abbreviations + live/final score + game clock. The 'LIVE' indicator pulses in arena red at 1.4s intervals.
|
|
77
|
+
3. Standings table row reveal — 12 rows fade in with 40ms per-row stagger on IntersectionObserver visibility at 30% threshold.
|
|
78
|
+
4. Roster grid stagger — 12 player tiles fade in with 60ms per-tile stagger on scroll into view.
|
|
79
|
+
5. Schedule strip horizontal scroll — 10 upcoming games slide in from right with 80ms per-card stagger on scroll.
|
|
80
|
+
6. Featured recap chart draws — a game-flow line chart draws via stroke-dashoffset over 1400ms cubic-bezier on visibility at 40%.
|
|
81
|
+
7. Season-pass tier count-up — total-savings number counts up 0 → $340 on scroll.
|
|
82
|
+
8. Section reveals — each below-fold section fades in over 700ms cubic-bezier on IntersectionObserver at 25% threshold.
|
|
83
|
+
9. Nav shrink on scroll after 200px; ticker sticks to top edge after 400px scroll.
|
|
84
|
+
10. prefers-reduced-motion: reduce — scoreboard ticker still cycles but without pulse; counter jumps to final; charts show at full stroke; state changes still fire.
|
|
85
|
+
|
|
86
|
+
Motion character: cinematic, broadcast-graphic, high-gloss. Custom cubic-bezier(0.19,1,0.22,1) for reveals + cubic-bezier(0.65, 0, 0.35, 1) for scoreboard transitions. Reads as a broadcast graphics package, not a marketing page.
|
|
87
|
+
|
|
88
|
+
signature: |
|
|
89
|
+
Deep navy canvas at #0a0e1e — the register's non-negotiable base
|
|
90
|
+
(league-official cinematic ground, deeper than pure black, warmer
|
|
91
|
+
than cool blue). Saturated arena-red brand accent #e6202b used ONLY
|
|
92
|
+
for live indicators, score bugs, primary CTAs, and championship
|
|
93
|
+
moments. Per-palette team spotlight color rotates through the 10
|
|
94
|
+
palette variants (Meridian red / Arcadia navy / Summit purple /
|
|
95
|
+
Capital forest / Marquee gold / Lane orange / Clutch teal / Opener
|
|
96
|
+
crimson / Final indigo / Capstone silver). Sharp 2px corners
|
|
97
|
+
everywhere.
|
|
98
|
+
|
|
99
|
+
MASTHEAD — a cream 'MERIDIAN' wordmark in Archivo Black uppercase
|
|
100
|
+
at 22px on the left with a stylized ball-mark, a horizontal nav
|
|
101
|
+
(Games / Standings / Teams / Schedule / Season Pass) center, a
|
|
102
|
+
filled arena-red 'Watch live' button right-aligned. Shrinks after
|
|
103
|
+
200px scroll.
|
|
104
|
+
|
|
105
|
+
LIVE TICKER STRIP — a full-bleed horizontal ticker below the nav
|
|
106
|
+
showing 6 games with team abbreviations, live/final scores, and
|
|
107
|
+
game clocks. Ticker cycles every 4 seconds. Live indicator pulses.
|
|
108
|
+
('MER 108 · ARC 102 · Q4 2:41 LIVE' + 'SUM 94 · CAP 87 · FINAL' +
|
|
109
|
+
'MAR 71 · LAN 68 · Q3 8:12 LIVE' etc.)
|
|
110
|
+
|
|
111
|
+
CINEMATIC PLAYER STAT CARD — the SIGNATURE MOVE. Full-bleed panel
|
|
112
|
+
with:
|
|
113
|
+
• BACKGROUND: team-color flood (Meridian arena red) with subtle
|
|
114
|
+
arena-lights texture (bespoke SVG radial spotlights, sharp
|
|
115
|
+
geometric — no gradient blooms).
|
|
116
|
+
• LEFT: bespoke SVG player silhouette in cream on navy — a
|
|
117
|
+
dramatic shooting-form portrait, not a stock photo, not an
|
|
118
|
+
emoji, not a radial-gradient blob. Illustrated in a graphic
|
|
119
|
+
broadcast-poster style with sharp angular geometry.
|
|
120
|
+
• RIGHT: massive stat number '48' in Archivo Black at 160px
|
|
121
|
+
counting up from 0, with 'PTS' label below in tracked mono.
|
|
122
|
+
Secondary stats '12 REB · 9 AST · 4 STL · 2 BLK' in a row
|
|
123
|
+
below in mono.
|
|
124
|
+
• BOTTOM RIBBON: player name 'K. MOSELY' + jersey number '#7'
|
|
125
|
+
+ team 'MERIDIAN HOME' + game 'vs. Arcadia · Feb 24'.
|
|
126
|
+
|
|
127
|
+
STANDINGS TABLE — full-width dark table with 12 rows (all 12
|
|
128
|
+
fictional Meridian League teams). Columns: RANK / TEAM / W-L / PCT
|
|
129
|
+
/ GB / STRK / LAST 10. Top 4 rows have subtle arena-red left border
|
|
130
|
+
(playoff spots). Bottom row has a small trending-down indicator.
|
|
131
|
+
Rows stagger reveal at 40ms per row.
|
|
132
|
+
|
|
133
|
+
ROSTER GRID — 12 player tiles in a dense 4-column grid, each with:
|
|
134
|
+
• Bespoke SVG jersey-number tile in team color
|
|
135
|
+
• Player name in Archivo Black uppercase
|
|
136
|
+
• Position + height in mono ('SF · 6'8"')
|
|
137
|
+
• Season stats mini bar: PTS · REB · AST
|
|
138
|
+
• Small status pill (Active / Day-to-day / Out)
|
|
139
|
+
|
|
140
|
+
SCHEDULE STRIP — horizontally-scrolling row of 10 upcoming game
|
|
141
|
+
cards, each with:
|
|
142
|
+
• Date + tip-off time in mono
|
|
143
|
+
• Home team abbreviation + logo mark (bespoke SVG)
|
|
144
|
+
• '@' or 'vs' in tracked mono
|
|
145
|
+
• Away team abbreviation + logo mark
|
|
146
|
+
• Arena venue + broadcast channel
|
|
147
|
+
|
|
148
|
+
FEATURED GAME RECAP — a full-width recap card with:
|
|
149
|
+
• Final score in Archivo Black 120px ('MER 108 · ARC 102')
|
|
150
|
+
• Game-flow line chart drawing via stroke-dashoffset (home vs.
|
|
151
|
+
away score progression over 4 quarters)
|
|
152
|
+
• Box-score mini-table (top 5 scorers per team, PTS/REB/AST)
|
|
153
|
+
• Championship-gold winner ribbon strip
|
|
154
|
+
|
|
155
|
+
SEASON PASS TIERS — 3-tier grid with:
|
|
156
|
+
• REGULAR SEASON PASS: all 82 regular-season games
|
|
157
|
+
• PLAYOFF PASS: adds playoffs (arena-red RECOMMENDED chip)
|
|
158
|
+
• CHAMPIONSHIP PASS: adds finals + all-access (championship-gold
|
|
159
|
+
chip + total-savings counter)
|
|
160
|
+
|
|
161
|
+
FOOTER — dark inverted band with 'MERIDIAN LEAGUE' wordmark at ~160px,
|
|
162
|
+
a 5-column utility grid, and a small broadcast-partner logo strip
|
|
163
|
+
(fictional 'MERIDIAN NETWORK · MRD SPORTS · WEST WIRE').
|
|
164
|
+
|
|
165
|
+
Six bespoke SVG marks (league-shield, ball-mark, jersey-number-tile,
|
|
166
|
+
clock-bug, court-diagram-mini, arena-lights) drop as PUNCTUATION at
|
|
167
|
+
specific compositional moments, never as a uniform icon row.
|
|
168
|
+
|
|
169
|
+
imagery: |
|
|
170
|
+
BESPOKE SVG illustrations — the reference uses cinematic player
|
|
171
|
+
portraits, team-color hero floods, jersey-number tiles, and court
|
|
172
|
+
diagrams. FPO imagery here should read as considered broadcast-
|
|
173
|
+
graphics (bespoke SVG player silhouettes with sharp angular
|
|
174
|
+
geometry, team-color flood grounds, subtle arena-lights radial
|
|
175
|
+
spotlights). NO stock 'cheering crowd in stadium' photography.
|
|
176
|
+
NO player mockups that could read as real-world attribution.
|
|
177
|
+
NO 3D-rendered basketball/football renders. NO radial-gradient
|
|
178
|
+
placeholder fills as fake photography.
|
|
179
|
+
|
|
180
|
+
best_for:
|
|
181
|
+
- Professional-league broadcast and streaming surfaces
|
|
182
|
+
- Sports-league official brand sites and season-pass storefronts
|
|
183
|
+
- Sports media surfaces (recap, box-score, standings)
|
|
184
|
+
- Fantasy-league and sports-analytics platforms leaning cinematic
|
|
185
|
+
- Sports-betting platforms leaning premium and league-official
|
|
186
|
+
- Sports-team single-brand promo sites
|
|
187
|
+
|
|
188
|
+
avoid:
|
|
189
|
+
- "Light canvas — Sports League's canvas is DEEP NAVY #0a0e1e. Light canvas inverts the league-broadcast register into a fantasy-sports light-tool register (different theme)."
|
|
190
|
+
- "Pure black canvas — #0a0e1e is deliberately WARMER and BLUER than pure black, matching league-official brand systems. Pure black kills the specific atmospheric depth."
|
|
191
|
+
- "Serif display — the register requires BOLD CONDENSED DISPLAY SANS. Serif display collapses into editorial territory."
|
|
192
|
+
- "Multi-color palette — the register uses NAVY + CREAM + ARENA RED single accent + per-palette team spotlight. Introducing multi-color as decoration collapses the discipline into candy slop."
|
|
193
|
+
- "Fully-rounded pill corners — cards use 2px sharp corners. 999px pills anywhere on this register kill the league-official reading."
|
|
194
|
+
- "Stock crowd photography — imagery MUST feel like considered SVG broadcast graphics (player silhouettes, team-color floods, jersey tiles). Stock cheering-crowd photography is the AI-tell for corporate-sports slop."
|
|
195
|
+
- "Player names or team names lifted from real leagues — placeholder MERIDIAN LEAGUE + fictional teams (MER / ARC / SUM / CAP / MAR / LAN / CLU / OPE / FIN / CAP-2) + fictional players. Naming real-world players / teams / leagues creates trademark and right-of-publicity exposure."
|
|
196
|
+
- "3D-rendered ball / court renders — visuals must be flat SVG broadcast graphics. 3D renders read as e-sports esports launch."
|
|
197
|
+
- "Emoji sports icons ⛹️ 🏀 🏆 — bespoke SVG only. Emoji is the biggest AI-tell for corporate sports slop."
|
|
198
|
+
- "Marketing-loud copy ('the most epic season of all time', 'unleash your fandom', 'game-changing action') — the register requires broadcast-official voice. Marketing-loud copy collapses into startup slop."
|
|
199
|
+
- "Cycling headline words or auto-advancing carousel — the LIVE motion is the SCOREBOARD TICKER + STAT-NUMBER COUNT-UP only. Auto-advancing headline sliders collapse into marketing slop."
|
|
200
|
+
|
|
201
|
+
banned_defaults:
|
|
202
|
+
- "claude-cream (#F4F1EA + serif + #D97757) — this theme's canvas is deep navy #0a0e1e, and register requires bold condensed sans."
|
|
203
|
+
- "void+acid"
|
|
204
|
+
- "broadsheet-on-noneditorial"
|
|
205
|
+
- "tech-bro purple gradient"
|
|
206
|
+
- "uniform-everything"
|
|
207
|
+
- "light-canvas-inversion (canvas is deep navy. Light canvas inverts into fantasy-tool register.)"
|
|
208
|
+
- "serif-display-anywhere (register requires bold condensed display sans. Serif display collapses into editorial territory.)"
|
|
209
|
+
- "multi-color-outside-team-spotlight (palette is navy + cream + arena red + per-palette team spotlight. Multi-color as decoration collapses into candy slop.)"
|
|
210
|
+
- "pill-card-corners (cards use 2px sharp corners, NOT 999px pills. 999px pills kill the league-official reading.)"
|
|
211
|
+
- "stock-crowd-photography (imagery must be bespoke SVG broadcast graphics. Stock crowd photography is the AI-tell.)"
|
|
212
|
+
- "real-player-names (placeholder MERIDIAN LEAGUE + fictional teams and players. Real player names create right-of-publicity exposure.)"
|
|
213
|
+
- "emoji-sports-icons (bespoke SVG only. Emoji is the biggest AI-tell for corporate sports slop.)"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
|
|
2
|
+
|
|
3
|
+
export const tokens = {
|
|
4
|
+
slug: "sports-league",
|
|
5
|
+
family: "E",
|
|
6
|
+
base: "38",
|
|
7
|
+
palette: {
|
|
8
|
+
"bg": "#0a0e1e",
|
|
9
|
+
"surface": "#111632",
|
|
10
|
+
"ink": "#f5f2ec",
|
|
11
|
+
"accent": "#e6202b",
|
|
12
|
+
"cream": "#f5f2ec",
|
|
13
|
+
"darkInk": "#050813",
|
|
14
|
+
"mute": "#8a90a8",
|
|
15
|
+
"spotlight": "#d5aa50",
|
|
16
|
+
"teamHome": "#c8102e",
|
|
17
|
+
"teamAway": "#00538c"
|
|
18
|
+
},
|
|
19
|
+
typography: {
|
|
20
|
+
"display": "A bold condensed display sans at very heavy weight — Archivo Black / Neue Machina / Helvetica Now Condensed Extra Bold. Free fallback stack — \"Archivo Black\", \"Barlow Condensed\", \"Helvetica Neue\", \"Impact\", system-ui, sans-serif. Weight 800-900, uppercase for hero + score bugs, mixed case for section titles. Very tight letter-spacing (-0.03em) at hero scale. Top of scale ~160px cinematic hero stat number, 88px section titles, 32px card titles.",
|
|
21
|
+
"body": "A clean neutral sans for body copy and player names — Inter / IBM Plex Sans. Free fallback stack — \"Inter\", \"IBM Plex Sans\", system-ui, sans-serif. Weight 400 for body, 500 for player names, 600 for team names. 14-15px body copy, line-height 1.55.",
|
|
22
|
+
"mono": "JetBrains Mono / IBM Plex Mono for stats, jersey numbers, box scores, and game clock. Weight 400-600, 11-14px. LEGITIMATE here because sports statistics genuinely require monospaced tabular figures.",
|
|
23
|
+
"scale": "1.333 (perfect fourth stretched — dramatic hero-to-body jump)",
|
|
24
|
+
"eyebrow_exception": "Sports League LEGITIMATELY uses small-caps 0.14em-tracked 10-11px labels for LIVE GAME STATUS ('LIVE · Q4 · 2:41'), SCORE BUGS ('FINAL · OT'), STANDINGS COLUMN HEADERS ('W-L / PCT / GB / STRK'), and BOX-SCORE LABELS ('PTS / REB / AST / STL / BLK'). This is a THEME-SPECIFIC EXCEPTION — league-broadcast chrome uses these EXACTLY in this register as diegetic broadcast chrome, not decorative eyebrow slop.\n"
|
|
25
|
+
},
|
|
26
|
+
surface: "web",
|
|
27
|
+
density: "dense",
|
|
28
|
+
motion: "Ships live in the section renderer (no external dependencies):\n1. Hero player-portrait fades in with 1000ms cubic-bezier(0.19,1,0.22,1), then the big stat number counts up 0 → target (e.g., 0 → 48) over 1600ms via requestAnimationFrame ease-out.\n2. Live scoreboard ticker — 6 games cycle through the ticker every 4 seconds, each with team abbreviations + live/final score + game clock. The 'LIVE' indicator pulses in arena red at 1.4s intervals.\n3. Standings table row reveal — 12 rows fade in with 40ms per-row stagger on IntersectionObserver visibility at 30% threshold.\n4. Roster grid stagger — 12 player tiles fade in with 60ms per-tile stagger on scroll into view.\n5. Schedule strip horizontal scroll — 10 upcoming games slide in from right with 80ms per-card stagger on scroll.\n6. Featured recap chart draws — a game-flow line chart draws via stroke-dashoffset over 1400ms cubic-bezier on visibility at 40%.\n7. Season-pass tier count-up — total-savings number counts up 0 → $340 on scroll.\n8. Section reveals — each below-fold section fades in over 700ms cubic-bezier on IntersectionObserver at 25% threshold.\n9. Nav shrink on scroll after 200px; ticker sticks to top edge after 400px scroll.\n10. prefers-reduced-motion: reduce — scoreboard ticker still cycles but without pulse; counter jumps to final; charts show at full stroke; state changes still fire.\n\nMotion character: cinematic, broadcast-graphic, high-gloss. Custom cubic-bezier(0.19,1,0.22,1) for reveals + cubic-bezier(0.65, 0, 0.35, 1) for scoreboard transitions. Reads as a broadcast graphics package, not a marketing page.\n",
|
|
29
|
+
signature: "Deep navy canvas at #0a0e1e — the register's non-negotiable base\n(league-official cinematic ground, deeper than pure black, warmer\nthan cool blue). Saturated arena-red brand accent #e6202b used ONLY\nfor live indicators, score bugs, primary CTAs, and championship\nmoments. Per-palette team spotlight color rotates through the 10\npalette variants (Meridian red / Arcadia navy / Summit purple /\nCapital forest / Marquee gold / Lane orange / Clutch teal / Opener\ncrimson / Final indigo / Capstone silver). Sharp 2px corners\neverywhere.\n\nMASTHEAD — a cream 'MERIDIAN' wordmark in Archivo Black uppercase\nat 22px on the left with a stylized ball-mark, a horizontal nav\n(Games / Standings / Teams / Schedule / Season Pass) center, a\nfilled arena-red 'Watch live' button right-aligned. Shrinks after\n200px scroll.\n\nLIVE TICKER STRIP — a full-bleed horizontal ticker below the nav\nshowing 6 games with team abbreviations, live/final scores, and\ngame clocks. Ticker cycles every 4 seconds. Live indicator pulses.\n('MER 108 · ARC 102 · Q4 2:41 LIVE' + 'SUM 94 · CAP 87 · FINAL' +\n 'MAR 71 · LAN 68 · Q3 8:12 LIVE' etc.)\n\nCINEMATIC PLAYER STAT CARD — the SIGNATURE MOVE. Full-bleed panel\nwith:\n • BACKGROUND: team-color flood (Meridian arena red) with subtle\n arena-lights texture (bespoke SVG radial spotlights, sharp\n geometric — no gradient blooms).\n • LEFT: bespoke SVG player silhouette in cream on navy — a\n dramatic shooting-form portrait, not a stock photo, not an\n emoji, not a radial-gradient blob. Illustrated in a graphic\n broadcast-poster style with sharp angular geometry.\n • RIGHT: massive stat number '48' in Archivo Black at 160px\n counting up from 0, with 'PTS' label below in tracked mono.\n Secondary stats '12 REB · 9 AST · 4 STL · 2 BLK' in a row\n below in mono.\n • BOTTOM RIBBON: player name 'K. MOSELY' + jersey number '#7'\n + team 'MERIDIAN HOME' + game 'vs. Arcadia · Feb 24'.\n\nSTANDINGS TABLE — full-width dark table with 12 rows (all 12\nfictional Meridian League teams). Columns: RANK / TEAM / W-L / PCT\n/ GB / STRK / LAST 10. Top 4 rows have subtle arena-red left border\n(playoff spots). Bottom row has a small trending-down indicator.\nRows stagger reveal at 40ms per row.\n\nROSTER GRID — 12 player tiles in a dense 4-column grid, each with:\n • Bespoke SVG jersey-number tile in team color\n • Player name in Archivo Black uppercase\n • Position + height in mono ('SF · 6'8\"')\n • Season stats mini bar: PTS · REB · AST\n • Small status pill (Active / Day-to-day / Out)\n\nSCHEDULE STRIP — horizontally-scrolling row of 10 upcoming game\ncards, each with:\n • Date + tip-off time in mono\n • Home team abbreviation + logo mark (bespoke SVG)\n • '@' or 'vs' in tracked mono\n • Away team abbreviation + logo mark\n • Arena venue + broadcast channel\n\nFEATURED GAME RECAP — a full-width recap card with:\n • Final score in Archivo Black 120px ('MER 108 · ARC 102')\n • Game-flow line chart drawing via stroke-dashoffset (home vs.\n away score progression over 4 quarters)\n • Box-score mini-table (top 5 scorers per team, PTS/REB/AST)\n • Championship-gold winner ribbon strip\n\nSEASON PASS TIERS — 3-tier grid with:\n • REGULAR SEASON PASS: all 82 regular-season games\n • PLAYOFF PASS: adds playoffs (arena-red RECOMMENDED chip)\n • CHAMPIONSHIP PASS: adds finals + all-access (championship-gold\n chip + total-savings counter)\n\nFOOTER — dark inverted band with 'MERIDIAN LEAGUE' wordmark at ~160px,\na 5-column utility grid, and a small broadcast-partner logo strip\n(fictional 'MERIDIAN NETWORK · MRD SPORTS · WEST WIRE').\n\nSix bespoke SVG marks (league-shield, ball-mark, jersey-number-tile,\nclock-bug, court-diagram-mini, arena-lights) drop as PUNCTUATION at\nspecific compositional moments, never as a uniform icon row.\n",
|
|
30
|
+
} as const;
|
|
31
|
+
|
|
32
|
+
export type Tokens = typeof tokens;
|