@stylecrib/cli 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -9
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +1606 -467
- package/package.json +12 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Enterprise Tech — Family D, Contemporary Web (brutalist-institutional subregion).
|
|
2
|
+
#
|
|
3
|
+
# Palantir-anchored institutional-brutalist dark register. Deep charcoal
|
|
4
|
+
# canvas at #0f0f11 (warmer than pure black) + near-white ink (#f2f2f0)
|
|
5
|
+
# + ONE electric-cyan accent (#00c8ff) used sparingly for hover states,
|
|
6
|
+
# active-node highlights, live-data readouts, and compliance-badge
|
|
7
|
+
# borders. Sharp corners everywhere (0px radius). Söhne / Aktiv Grotesk
|
|
8
|
+
# medium-weight sans (weight 500) — deliberately NOT thin, unlike the
|
|
9
|
+
# hypercar theme. JetBrains Mono for query counters, dossier metadata,
|
|
10
|
+
# and data-flow labels.
|
|
11
|
+
#
|
|
12
|
+
# Influence anchor: Palantir Technologies at its most institutional.
|
|
13
|
+
# Placeholder brand: "BASTION" — a fictional defense/finance/institutional
|
|
14
|
+
# data platform. Original name, original copy, no reproductions.
|
|
15
|
+
#
|
|
16
|
+
# Distinct from other dark themes:
|
|
17
|
+
# - Vault Reel is extreme black cinema-archive with burning-red accent
|
|
18
|
+
# - Performance Engineered is near-black hypercar with THIN monumental
|
|
19
|
+
# display and molten-amber accent
|
|
20
|
+
# - Signal Dark (the site itself) is dark canvas with green terminal
|
|
21
|
+
# accent and dashboard/tool register
|
|
22
|
+
# Enterprise Tech fills the INSTITUTIONAL-BRUTALIST DATA-PLATFORM slot —
|
|
23
|
+
# medium-weight display + electric cyan + numbered dossier structure +
|
|
24
|
+
# network graph diagrams.
|
|
25
|
+
#
|
|
26
|
+
# Nineteenth theme via the v2 harness. First Family D institutional-
|
|
27
|
+
# brutalist base. Upgrade of the existing v1 archetype-fallback slug.
|
|
28
|
+
|
|
29
|
+
name: Enterprise Tech
|
|
30
|
+
concept: Institutional-brutalist data-platform register — deep charcoal canvas at #0f0f11 with near-white ink and ONE electric-cyan accent used sparingly for hover states, active-node highlights, live-data readouts, and compliance-badge borders. Medium-weight Söhne-family sans (never thin) paired with JetBrains Mono for data readouts. Numbered dossier structure (I-01 through I-06 for capabilities), network graph SVG diagrams with animated node pulses, live queries counter, data-flow diagrams with animated dots along paths, and compliance-certification grids. Reads like a Palantir capabilities briefing — institutional, dossier-precise, defense/finance/government-adjacent.
|
|
31
|
+
influence: |
|
|
32
|
+
Modern institutional data-platform brand identity systems (Palantir
|
|
33
|
+
Technologies at its most brutalist-serious, Databricks at its most
|
|
34
|
+
dressy, Recursion at its most technical). Distinct from consumer-
|
|
35
|
+
tech surfaces through the MEDIUM-WEIGHT DISPLAY (not thin, not bold)
|
|
36
|
+
+ NUMBERED DOSSIER STRUCTURE + NETWORK GRAPH DIAGRAM + INSTITUTIONAL
|
|
37
|
+
LANGUAGE trio — which reads as defense-and-finance rather than
|
|
38
|
+
startup-and-SaaS.
|
|
39
|
+
|
|
40
|
+
family: D
|
|
41
|
+
base_number: 36
|
|
42
|
+
base_note: |
|
|
43
|
+
Family D Contemporary Web, INSTITUTIONAL-BRUTALIST DATA-PLATFORM
|
|
44
|
+
slot. Distinct from other Family D bases through the MEDIUM-WEIGHT
|
|
45
|
+
DISPLAY + NUMBERED DOSSIER STRUCTURE + NETWORK GRAPH DIAGRAM
|
|
46
|
+
signature. Signal Dark is dashboard/tool with green terminal
|
|
47
|
+
accent; Arc Stack is protocol infrastructure with saturated
|
|
48
|
+
signal-glow hero; Kinetic Headline is kinetic-marketing display;
|
|
49
|
+
Bento Modular is grid-driven dashboard. Enterprise Tech fills the
|
|
50
|
+
serious-institutional-data-platform slot. Upgrade of the existing
|
|
51
|
+
v1 enterprise-tech slug from archetype-fallback.
|
|
52
|
+
|
|
53
|
+
render_url: http://localhost:5173/themes/enterprise-tech
|
|
54
|
+
|
|
55
|
+
surface: web
|
|
56
|
+
|
|
57
|
+
typography:
|
|
58
|
+
display: A precision geometric sans at MEDIUM weight (500) — the reference uses Söhne / Aktiv Grotesk / Neue Haas Grotesk at medium. Free fallback stack — "Söhne", "Neue Haas Grotesk Display", "Inter Display", Inter, "Space Grotesk", system-ui, sans-serif. Weight 500 for hero and section headings (deliberately NOT thin — that's the hypercar register, not institutional-brutalist), weight 400 for body. Mixed case, letter-spacing -0.01em. Top of scale ~88px hero, 48px section headings, 24px h3. UPPERCASE ONLY for the wordmark and section markers (I-01 / I-02 style).
|
|
59
|
+
body: Söhne Text / Inter Tight. Free fallback stack — "Inter Tight", Inter, "Space Grotesk", system-ui, sans-serif. Weight 400 for body copy, 500 for small labels. 15-16px body copy, line-height 1.6.
|
|
60
|
+
mono: JetBrains Mono / Berkeley Mono for data readouts, dossier metadata, diagram labels, network graph annotations, compliance certification IDs. Weight 400-500, 12-14px. LEGITIMATE here because the register is technical dossier — mono reads as data readout / instrument-panel, not decorative slop.
|
|
61
|
+
scale: 1.333 (perfect fourth — comfortable for long-form dossier reading with clear hierarchy)
|
|
62
|
+
eyebrow_exception: |
|
|
63
|
+
Enterprise Tech LEGITIMATELY uses two small-caps use sites — DOSSIER SECTION MARKERS (I-01 / I-02 / I-03) and COMPLIANCE CERTIFICATIONS (SOC 2 / ISO 27001 / FEDRAMP HIGH / HIPAA). This is a THEME-SPECIFIC EXCEPTION — the reference institutional dossier register uses these EXACTLY, as dossier index markers and compliance-certification identifiers, not decorative eyebrow slop.
|
|
64
|
+
|
|
65
|
+
palette:
|
|
66
|
+
bg: "#0f0f11" # canvas — deep charcoal, warmer than pure black
|
|
67
|
+
surface: "#1a1a1c" # slightly-lifted panel for section bands
|
|
68
|
+
ink: "#f2f2f0" # near-white with slight warmth
|
|
69
|
+
accent: "#00c8ff" # electric cyan — the ONE accent
|
|
70
|
+
cream: "#f2f2f0" # alias for ink
|
|
71
|
+
darkInk: "#050506" # deepest charcoal for masthead + footer
|
|
72
|
+
mute: "#6a6a70" # dimmed near-white for captions, metadata
|
|
73
|
+
|
|
74
|
+
density: dense
|
|
75
|
+
|
|
76
|
+
motion: |
|
|
77
|
+
Ships live in the section renderer (no external dependencies):
|
|
78
|
+
1. Hero display reveal — headline fades in from opacity 0 + translateY(20px) over 800ms cubic-bezier(0.23,1,0.32,1) on first paint. Body copy follows with 200ms delay.
|
|
79
|
+
2. Network graph node pulses — 6 nodes in the hero-right network graph SVG scale from 1 → 1.15 → 1 in a staggered loop (each node offset by 400ms, 2000ms per pulse cycle). Simulates a live-monitored graph.
|
|
80
|
+
3. Live queries counter — displays a mock "queries processed today" number that increments every 2 seconds via a mock event stream (starts at 4,127,483 and increments by 1,000-5,000 per tick — reads as a live data-platform readout).
|
|
81
|
+
4. Numbered dossier capability reveal — the 6 numbered capabilities fade in with 120ms per-row stagger + 500ms cubic-bezier on IntersectionObserver at 25% threshold.
|
|
82
|
+
5. Data-flow diagram dots — three dots travel along SVG paths from source to sink at 3-second cycles (spaced 1s apart). Simulates data streaming through the platform.
|
|
83
|
+
6. Compliance badge reveal — grid of 8 certification badges fade in with 80ms stagger on scroll into view.
|
|
84
|
+
7. Case-study card reveal — 3 case study cards stagger reveal with 160ms per-card delay.
|
|
85
|
+
8. Section reveals — each below-fold section fades in from opacity 0 + translateY(24px) → 0 over 700ms cubic-bezier at 25% threshold.
|
|
86
|
+
9. Nav shrink on scroll after 200px.
|
|
87
|
+
10. prefers-reduced-motion: reduce — all reveals disabled; queries counter shows final; network graph pulses paused; dots hidden; state changes still fire.
|
|
88
|
+
|
|
89
|
+
Motion character: institutional, dossier-precise, monitored. Custom cubic-bezier(0.23,1,0.32,1) for reveals. Never marketing-loud, never startup-hype — reads as a live security-operations-center readout, not a product-launch page.
|
|
90
|
+
|
|
91
|
+
signature: |
|
|
92
|
+
Deep charcoal canvas at #0f0f11 — the register's non-negotiable base
|
|
93
|
+
(deliberately warmer than pure black, matching Palantir's actual
|
|
94
|
+
brand render). Near-white ink #f2f2f0 with ONE electric-cyan accent
|
|
95
|
+
#00c8ff used ONLY for hover states, active graph-node highlights,
|
|
96
|
+
live-data readouts, compliance-badge borders, and CTA fills. Sharp
|
|
97
|
+
corners everywhere.
|
|
98
|
+
|
|
99
|
+
MASTHEAD — a "BASTION" wordmark in Söhne 500 medium at 18px with
|
|
100
|
+
letter-spacing 0.14em (deliberately institutional-medium, not thin
|
|
101
|
+
hypercar-restraint) on the left, a horizontal nav (Platform /
|
|
102
|
+
Capabilities / Sectors / Compliance / Company / Contact) center,
|
|
103
|
+
a filled electric-cyan "Request a briefing" block button right-
|
|
104
|
+
aligned. Masthead shrinks after 200px scroll.
|
|
105
|
+
|
|
106
|
+
HERO — two-column split. LEFT column: small cyan caps
|
|
107
|
+
DOSSIER · 2026-Q1 label + big medium-weight display headline
|
|
108
|
+
("Data operations for the institutional stakeholder.") + a two-
|
|
109
|
+
paragraph body-copy block about the platform's mission +
|
|
110
|
+
cyan "Read the capabilities dossier →" text link. RIGHT column: a
|
|
111
|
+
BESPOKE NETWORK GRAPH SVG (6 nodes connected by edges, one node
|
|
112
|
+
highlighted cyan as "active", subtle pulse animation on each node
|
|
113
|
+
offset by 400ms, mono metadata labels below identifying each node
|
|
114
|
+
type — Data / Model / Query / Egress).
|
|
115
|
+
|
|
116
|
+
LIVE-OPS READOUT BAR — a slim inverted band below the hero showing
|
|
117
|
+
three live-updating counters in mono: "QUERIES PROCESSED TODAY"
|
|
118
|
+
(increments every 2s from 4,127,483 + random 1-5k per tick),
|
|
119
|
+
"ACTIVE DEPLOYMENTS" (static 217), "REGIONS ONLINE" (static 14 /
|
|
120
|
+
14 with cyan dot). Reads as a live SOC (security operations
|
|
121
|
+
center) readout.
|
|
122
|
+
|
|
123
|
+
NUMBERED CAPABILITIES DOSSIER — 6 rows with cyan I-01 / I-02 /
|
|
124
|
+
I-03 / I-04 / I-05 / I-06 numbering, each row has a small icon SVG
|
|
125
|
+
(data-pipe / model-node / query-cursor / audit-trail / access-key
|
|
126
|
+
/ regional-topology) + heading + body-copy block. Rows stagger
|
|
127
|
+
reveal on scroll (120ms per row). Hover state: cyan left border
|
|
128
|
+
slides in from top.
|
|
129
|
+
|
|
130
|
+
DATA-FLOW DIAGRAM — a full-width band showing "How it works" as an
|
|
131
|
+
SVG data-flow diagram with 5 stages (Ingest → Transform → Model
|
|
132
|
+
→ Query → Egress) connected by paths, with 3 cyan dots animating
|
|
133
|
+
along the paths at 3s cycles (1s apart) to simulate streaming
|
|
134
|
+
data. Mono labels beneath each stage.
|
|
135
|
+
|
|
136
|
+
CASE STUDIES — 3 case study cards in a row: Defense / Finance /
|
|
137
|
+
Health. Each card has a sector caps label, monumental case-study
|
|
138
|
+
title, mono metric callout (e.g. "94% reduction in triage time"),
|
|
139
|
+
and a body-copy paragraph. Cards stagger reveal at 160ms per card.
|
|
140
|
+
|
|
141
|
+
COMPLIANCE + CERTIFICATIONS — a grid of 8 compliance badges (SOC 2
|
|
142
|
+
Type II / ISO 27001 / FedRAMP High / HIPAA / GDPR / PCI DSS /
|
|
143
|
+
CJIS / IL5) in a dark card grid with cyan borders on hover.
|
|
144
|
+
|
|
145
|
+
BRIEFING CTA — a full-width dark band with a terminal-style
|
|
146
|
+
contact form (single input field styled as a mono prompt with
|
|
147
|
+
">> " prefix and cyan cursor). Filled cyan "Submit briefing
|
|
148
|
+
request" button.
|
|
149
|
+
|
|
150
|
+
FOOTER — deep-charcoal inverted band with medium-weight BASTION
|
|
151
|
+
wordmark at ~120px, a 4-column utility grid, address plate
|
|
152
|
+
("Palo Alto · Washington DC · London · Zagreb"), and legal
|
|
153
|
+
compliance metadata (registered agent, entity address, SEC-
|
|
154
|
+
registered subsidiary info).
|
|
155
|
+
|
|
156
|
+
Six bespoke SVG marks (network graph, data-pipe icon, model-node
|
|
157
|
+
icon, audit-trail icon, compliance shield, data-flow arrow) drop
|
|
158
|
+
as PUNCTUATION at specific compositional moments, never as a
|
|
159
|
+
uniform icon row.
|
|
160
|
+
|
|
161
|
+
imagery: |
|
|
162
|
+
BESPOKE SVG diagrams — the reference uses network graphs, data-flow
|
|
163
|
+
block diagrams, capability icons, and compliance shields. FPO
|
|
164
|
+
imagery here should read as institutional dossier diagrams (network
|
|
165
|
+
topology, data-flow blocks, capability iconography). NO stock
|
|
166
|
+
"team meeting" photography (that's the AI-tell for corporate
|
|
167
|
+
enterprise slop). NO 3D-rendered abstract "cloud" imagery. NO
|
|
168
|
+
radial-gradient placeholder fills. NO emoji shields (only bespoke
|
|
169
|
+
SVG compliance badges with real certification identifiers).
|
|
170
|
+
|
|
171
|
+
best_for:
|
|
172
|
+
- Institutional data platforms (government contractors, defense, finance-tier data infrastructure)
|
|
173
|
+
- Serious enterprise SaaS (security operations, compliance-heavy verticals)
|
|
174
|
+
- Government-adjacent technology (public-sector deployments, regulated industries)
|
|
175
|
+
- Defense and intelligence-adjacent brands (background-check platforms, secure comms)
|
|
176
|
+
- Finance-tier data platforms (bank-facing analytics, regulatory reporting)
|
|
177
|
+
- Health-tier compliance data (HIPAA-regulated analytics, clinical data platforms)
|
|
178
|
+
|
|
179
|
+
avoid:
|
|
180
|
+
- "Light canvas — Enterprise Tech's canvas is DEEP CHARCOAL #0f0f11. Light canvas inverts the institutional-brutalist register into a modern-SaaS register (which is a different theme)."
|
|
181
|
+
- "Thin display sans (weight 200-300) — the Söhne medium at 500 is the register's fingerprint. Thin display collapses into the hypercar restraint register (Performance Engineered), which is a different theme."
|
|
182
|
+
- "Bold display sans (weight 800-900) — bold display collapses into modern-marketing hero mode. The register requires MEDIUM (500) weight — precise, institutional, not attention-seeking."
|
|
183
|
+
- "Multi-color accent palette — the whole discipline is ONE electric-cyan accent doing everything (hover, active nodes, live data, compliance borders, CTA fills). Introducing red / green / any second accent collapses the discipline into candy-tech slop."
|
|
184
|
+
- "Rounded corners on cards, buttons, badges, or diagram nodes — 0px radius everywhere. The register requires sharp instrument-panel precision."
|
|
185
|
+
- "Stock team-meeting or diverse-workplace photography — imagery MUST feel like institutional dossier diagrams (bespoke SVG). Stock team photography is the AI-tell for corporate enterprise slop."
|
|
186
|
+
- "3D-rendered cloud abstractions — visuals must be flat SVG diagrams (network graphs, data-flow blocks, capability icons). 3D cloud abstractions read as consumer-cloud SaaS, not institutional-data-platform."
|
|
187
|
+
- "Emoji or unicode marks — bespoke SVG only for icons and shields."
|
|
188
|
+
- "Marketing-loud copy language ('game-changing', 'revolutionary', 'unlock your potential') — the register requires INSTITUTIONAL, DOSSIER-PRECISE language. Marketing-loud copy collapses into startup slop."
|
|
189
|
+
- "Cycling headline words or auto-advancing sliders — the register requires STATIC, MONITORED motion. Network node pulses and data-flow dots are legitimate (institutional-monitoring register); auto-advancing cycling is not."
|
|
190
|
+
|
|
191
|
+
banned_defaults:
|
|
192
|
+
- "claude-cream (#F4F1EA + serif + #D97757) — this theme's canvas is dark."
|
|
193
|
+
- "void+acid (near-black bg + single bright acid-green or vermilion accent) — accent is ELECTRIC CYAN #00c8ff, not acid-green. Vermilion collapses into cyberpunk."
|
|
194
|
+
- "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns)"
|
|
195
|
+
- "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
|
|
196
|
+
- "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
|
|
197
|
+
- "light-canvas-inversion (canvas is deep charcoal. Swapping to light collapses the institutional-brutalist register into a modern-SaaS register.)"
|
|
198
|
+
- "thin-hypercar-display (thin weight 200-300 is the hypercar restraint register — different theme. Enterprise Tech uses MEDIUM weight 500.)"
|
|
199
|
+
- "bold-marketing-display (bold weight 800-900 is marketing hero — different register. Enterprise Tech uses MEDIUM weight 500 — precise, institutional.)"
|
|
200
|
+
- "multi-accent-flood (ONE electric-cyan accent doing 100% of the punctuation. Introducing red / green / any second accent collapses the discipline.)"
|
|
201
|
+
- "stock-team-photography (imagery must be bespoke SVG dossier diagrams — network graphs, data-flow blocks. Stock team photography is the AI-tell.)"
|
|
202
|
+
- "3d-cloud-abstractions (visuals must be flat SVG diagrams. 3D cloud abstractions read as consumer-cloud SaaS, not institutional-data-platform.)"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
|
|
2
|
+
|
|
3
|
+
export const tokens = {
|
|
4
|
+
slug: "enterprise-tech",
|
|
5
|
+
family: "D",
|
|
6
|
+
base: "36",
|
|
7
|
+
palette: {
|
|
8
|
+
"bg": "#0f0f11",
|
|
9
|
+
"surface": "#1a1a1c",
|
|
10
|
+
"ink": "#f2f2f0",
|
|
11
|
+
"accent": "#00c8ff",
|
|
12
|
+
"cream": "#f2f2f0",
|
|
13
|
+
"darkInk": "#050506",
|
|
14
|
+
"mute": "#6a6a70"
|
|
15
|
+
},
|
|
16
|
+
typography: {
|
|
17
|
+
"display": "A precision geometric sans at MEDIUM weight (500) — the reference uses Söhne / Aktiv Grotesk / Neue Haas Grotesk at medium. Free fallback stack — \"Söhne\", \"Neue Haas Grotesk Display\", \"Inter Display\", Inter, \"Space Grotesk\", system-ui, sans-serif. Weight 500 for hero and section headings (deliberately NOT thin — that's the hypercar register, not institutional-brutalist), weight 400 for body. Mixed case, letter-spacing -0.01em. Top of scale ~88px hero, 48px section headings, 24px h3. UPPERCASE ONLY for the wordmark and section markers (I-01 / I-02 style).",
|
|
18
|
+
"body": "Söhne Text / Inter Tight. Free fallback stack — \"Inter Tight\", Inter, \"Space Grotesk\", system-ui, sans-serif. Weight 400 for body copy, 500 for small labels. 15-16px body copy, line-height 1.6.",
|
|
19
|
+
"mono": "JetBrains Mono / Berkeley Mono for data readouts, dossier metadata, diagram labels, network graph annotations, compliance certification IDs. Weight 400-500, 12-14px. LEGITIMATE here because the register is technical dossier — mono reads as data readout / instrument-panel, not decorative slop.",
|
|
20
|
+
"scale": "1.333 (perfect fourth — comfortable for long-form dossier reading with clear hierarchy)",
|
|
21
|
+
"eyebrow_exception": "Enterprise Tech LEGITIMATELY uses two small-caps use sites — DOSSIER SECTION MARKERS (I-01 / I-02 / I-03) and COMPLIANCE CERTIFICATIONS (SOC 2 / ISO 27001 / FEDRAMP HIGH / HIPAA). This is a THEME-SPECIFIC EXCEPTION — the reference institutional dossier register uses these EXACTLY, as dossier index markers and compliance-certification identifiers, not decorative eyebrow slop.\n"
|
|
22
|
+
},
|
|
23
|
+
surface: "web",
|
|
24
|
+
density: "dense",
|
|
25
|
+
motion: "Ships live in the section renderer (no external dependencies):\n1. Hero display reveal — headline fades in from opacity 0 + translateY(20px) over 800ms cubic-bezier(0.23,1,0.32,1) on first paint. Body copy follows with 200ms delay.\n2. Network graph node pulses — 6 nodes in the hero-right network graph SVG scale from 1 → 1.15 → 1 in a staggered loop (each node offset by 400ms, 2000ms per pulse cycle). Simulates a live-monitored graph.\n3. Live queries counter — displays a mock \"queries processed today\" number that increments every 2 seconds via a mock event stream (starts at 4,127,483 and increments by 1,000-5,000 per tick — reads as a live data-platform readout).\n4. Numbered dossier capability reveal — the 6 numbered capabilities fade in with 120ms per-row stagger + 500ms cubic-bezier on IntersectionObserver at 25% threshold.\n5. Data-flow diagram dots — three dots travel along SVG paths from source to sink at 3-second cycles (spaced 1s apart). Simulates data streaming through the platform.\n6. Compliance badge reveal — grid of 8 certification badges fade in with 80ms stagger on scroll into view.\n7. Case-study card reveal — 3 case study cards stagger reveal with 160ms per-card delay.\n8. Section reveals — each below-fold section fades in from opacity 0 + translateY(24px) → 0 over 700ms cubic-bezier at 25% threshold.\n9. Nav shrink on scroll after 200px.\n10. prefers-reduced-motion: reduce — all reveals disabled; queries counter shows final; network graph pulses paused; dots hidden; state changes still fire.\n\nMotion character: institutional, dossier-precise, monitored. Custom cubic-bezier(0.23,1,0.32,1) for reveals. Never marketing-loud, never startup-hype — reads as a live security-operations-center readout, not a product-launch page.\n",
|
|
26
|
+
signature: "Deep charcoal canvas at #0f0f11 — the register's non-negotiable base\n(deliberately warmer than pure black, matching Palantir's actual\nbrand render). Near-white ink #f2f2f0 with ONE electric-cyan accent\n#00c8ff used ONLY for hover states, active graph-node highlights,\nlive-data readouts, compliance-badge borders, and CTA fills. Sharp\ncorners everywhere.\n\nMASTHEAD — a \"BASTION\" wordmark in Söhne 500 medium at 18px with\nletter-spacing 0.14em (deliberately institutional-medium, not thin\nhypercar-restraint) on the left, a horizontal nav (Platform /\nCapabilities / Sectors / Compliance / Company / Contact) center,\na filled electric-cyan \"Request a briefing\" block button right-\naligned. Masthead shrinks after 200px scroll.\n\nHERO — two-column split. LEFT column: small cyan caps\nDOSSIER · 2026-Q1 label + big medium-weight display headline\n(\"Data operations for the institutional stakeholder.\") + a two-\nparagraph body-copy block about the platform's mission +\ncyan \"Read the capabilities dossier →\" text link. RIGHT column: a\nBESPOKE NETWORK GRAPH SVG (6 nodes connected by edges, one node\nhighlighted cyan as \"active\", subtle pulse animation on each node\noffset by 400ms, mono metadata labels below identifying each node\ntype — Data / Model / Query / Egress).\n\nLIVE-OPS READOUT BAR — a slim inverted band below the hero showing\nthree live-updating counters in mono: \"QUERIES PROCESSED TODAY\"\n(increments every 2s from 4,127,483 + random 1-5k per tick),\n\"ACTIVE DEPLOYMENTS\" (static 217), \"REGIONS ONLINE\" (static 14 /\n14 with cyan dot). Reads as a live SOC (security operations\ncenter) readout.\n\nNUMBERED CAPABILITIES DOSSIER — 6 rows with cyan I-01 / I-02 /\nI-03 / I-04 / I-05 / I-06 numbering, each row has a small icon SVG\n(data-pipe / model-node / query-cursor / audit-trail / access-key\n/ regional-topology) + heading + body-copy block. Rows stagger\nreveal on scroll (120ms per row). Hover state: cyan left border\nslides in from top.\n\nDATA-FLOW DIAGRAM — a full-width band showing \"How it works\" as an\nSVG data-flow diagram with 5 stages (Ingest → Transform → Model\n→ Query → Egress) connected by paths, with 3 cyan dots animating\nalong the paths at 3s cycles (1s apart) to simulate streaming\ndata. Mono labels beneath each stage.\n\nCASE STUDIES — 3 case study cards in a row: Defense / Finance /\nHealth. Each card has a sector caps label, monumental case-study\ntitle, mono metric callout (e.g. \"94% reduction in triage time\"),\nand a body-copy paragraph. Cards stagger reveal at 160ms per card.\n\nCOMPLIANCE + CERTIFICATIONS — a grid of 8 compliance badges (SOC 2\nType II / ISO 27001 / FedRAMP High / HIPAA / GDPR / PCI DSS /\nCJIS / IL5) in a dark card grid with cyan borders on hover.\n\nBRIEFING CTA — a full-width dark band with a terminal-style\ncontact form (single input field styled as a mono prompt with\n\">> \" prefix and cyan cursor). Filled cyan \"Submit briefing\nrequest\" button.\n\nFOOTER — deep-charcoal inverted band with medium-weight BASTION\nwordmark at ~120px, a 4-column utility grid, address plate\n(\"Palo Alto · Washington DC · London · Zagreb\"), and legal\ncompliance metadata (registered agent, entity address, SEC-\nregistered subsidiary info).\n\nSix bespoke SVG marks (network graph, data-pipe icon, model-node\nicon, audit-trail icon, compliance shield, data-flow arrow) drop\nas PUNCTUATION at specific compositional moments, never as a\nuniform icon row.\n",
|
|
27
|
+
} as const;
|
|
28
|
+
|
|
29
|
+
export type Tokens = typeof tokens;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Design Direction — EV-Charging
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
ChargePoint cool-blue signal · EVgo magenta urgency-flash · Electrify America cobalt + neutral grid · Blink Charging bright-yellow availability · Wallbox restrained Spanish-design chrome
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
A clean operator dashboard you'd use on the road. Cool brand-blue is the signal — it marks the station, the selected pin, the price column. A magenta urgency-flash appears only on DC-fast availability. Tabular numerics carry the kWh and price-per-kWh. Maps are first-class, never a marketing afterthought.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **ChargePoint** → cool-blue station-pin language. The network is one color and the pin is the network.
|
|
11
|
+
- **EVgo** → magenta urgency flash. Only DC-fast availability gets to flash.
|
|
12
|
+
- **Electrify America** → cobalt + neutral grid. 350kW deserves a louder accent than 150kW.
|
|
13
|
+
- **Blink Charging** → bright-yellow semi-busy pin. Availability state is a color, always.
|
|
14
|
+
- **Wallbox** → restrained Spanish-design chrome. Home-unit cards do not need to shout.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin.
|
|
18
|
+
|
|
19
|
+
Surface stack is **cool near-white background** → `--card` (pure white, one degree above) → `--secondary` (cool gray for table headers and inset panels). The map basemap has its own pair — `--map-land` and `--map-water` — and those colors are off-limits to non-map UI.
|
|
20
|
+
|
|
21
|
+
Brand tokens: `--signal-blue`, `--signal-blue-deep`, `--signal-blue-soft`, `--urgency-magenta`, `--availability-amber`, `--cobalt`, `--map-land`, `--map-water`. The urgency-magenta is semantic-only — it appears on DC-fast (150kW+) availability rows and station pins, nowhere else. Cobalt is reserved for 350kW ultra-fast badges. Availability-amber means "busy, queue forming."
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Manrope (ChargePoint / Wallbox display). h1–h4. Tracking `-0.022em`. Manrope's geometric clarity feels operator-grade.
|
|
25
|
+
- **Body:** Inter regular/medium (Electrify America / Blink body). Body base **14.4px** with **line-height 1.5** — dashboard density.
|
|
26
|
+
- **Mono:** JetBrains Mono. kWh, $/kWh, station-id codes, port numbers. Tabular numerics on by default.
|
|
27
|
+
|
|
28
|
+
H1 uses `clamp(2rem, 4.5vw, 3.25rem)`. Restrained. The map is the hero, not the headline.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-7xl px-4 lg:px-6` — dashboard-wide, tight horizontal padding.
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-12 pb-8 lg:pt-16 lg:pb-12`
|
|
34
|
+
- Default: `py-10 lg:py-14`
|
|
35
|
+
- Tight: `py-6 lg:py-10`
|
|
36
|
+
- **Allowed scale values:** 2 4 6 8 10 12 16 20 24 32 40 48 64.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex anywhere in component files. All color via tokens.
|
|
40
|
+
|
|
41
|
+
Cool blue is the single network accent. Urgency-magenta and cobalt are semantic-only. Availability pins are color-coded: green=open, amber=busy, magenta=DC-fast-open, gray=offline. The availability colors live on the map and on station-list rows — they are not free-for-use brand accents elsewhere.
|
|
42
|
+
|
|
43
|
+
## Radius
|
|
44
|
+
`--radius: 0.5rem` (8px). Sits between dashboard-sharp and home-unit-friendly. Pills allowed (`pillsAllowed: true`) for filter chips, DC-fast badges, and availability dots.
|
|
45
|
+
|
|
46
|
+
## Shadows
|
|
47
|
+
**Minimal.** Three utilities: `.shadow-card` (subtle 1px lift), `.shadow-popover` (6-18px for map-popups and dropdowns), `.shadow-pin-active` (4px signal-blue halo + drop shadow on the selected map pin). No glows on body cards.
|
|
48
|
+
|
|
49
|
+
## Motion
|
|
50
|
+
Four keyframes: `fade-in` (220ms, opacity only — table and card entrance), `pin-pulse` (1800ms infinite — active session pin halo), `dc-fast-flash` (1400ms infinite — magenta on DC-fast availability badges, never elsewhere), `charge-arc` (2400ms once — SVG arc fill when a session starts).
|
|
51
|
+
|
|
52
|
+
`pin-pulse` and `dc-fast-flash` are continuous and must respect `prefers-reduced-motion` by going static at peak color, not by hiding entirely — availability state must still read.
|
|
53
|
+
|
|
54
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`.
|
|
55
|
+
|
|
56
|
+
## Density
|
|
57
|
+
High. Station-list rows are 44px tall with 6 columns. The map pin is 12px. Filter chips are 28px. The kWh price column is 14px mono tabular. The user is comparison-shopping fast-charge stations while driving — every pixel earns its keep.
|
|
58
|
+
|
|
59
|
+
## Component patterns
|
|
60
|
+
- **Buttons:** solid signal-blue primary (rounded-md, shadow-card) for the single commit — `Start charging`, `Reserve`, `Pay`. Secondary is ghost. Tertiary is text-link blue. Hover deepens fill to `--signal-blue-deep`; no scale, no shadow growth.
|
|
61
|
+
- **Cards:** rounded-md, 1px `--border`, `bg-card`, `shadow-card`. Padding `p-4 lg:p-5`. Station card holds name, address, distance, port-count, $/kWh — modular, one purpose.
|
|
62
|
+
- **Inputs:** full rounded-md box, 1px `--input` border, `bg-card`. Search has leading pin glyph in signal-blue. Focus = 2px signal-blue ring at 45% opacity. Filter chips are rounded pills, `--signal-blue-soft` when active.
|
|
63
|
+
- **CTA:** primary signal-blue button. DC-fast badge uses urgency-magenta with `dc-fast-flash` keyframe — never on Level 2 / Level 1. Price columns right-aligned mono. Availability pin colors follow the legend above, strictly.
|
|
64
|
+
|
|
65
|
+
## Recommended rich media
|
|
66
|
+
EV-Charging leans on **map visualization** and **station-hardware photography** — the actual charger unit at the actual location, golden-hour-lit, never a stock EV concept render. Marketing surfaces show the operator app in browser-chrome mockups with real map tiles, not blurred placeholders.
|
|
67
|
+
|
|
68
|
+
**Iconography:** 20px grid, 1.5px stroke, rounded line caps. Plug types (CCS, CHAdeMO, Tesla, J1772) drawn in a single hand — never mixed visual languages. Battery, lightning, pin, car, leaf — all consistent.
|
|
69
|
+
|
|
70
|
+
**AI tool recommendations:** **Midjourney / Flux** for *"photorealistic DC-fast charging station at retail parking lot, golden hour, single Audi e-tron plugged in, wide-angle, soft natural light, no logos visible"*. Avoid Midjourney's "futuristic EV" defaults — neon underglow, holographic dashboards, etc. Stations sit in mundane parking lots; that's the truth and that's the visual.
|
|
71
|
+
|
|
72
|
+
**Aspect ratios:** 16:10 for the operator-app dashboard hero. 4:5 for station-hardware portraits. 1:1 for plug-type icon tiles. The map preview takes whatever aspect the layout gives it — typically a wide 21:9 strip on marketing pages.
|
|
73
|
+
|
|
74
|
+
**Video:** rare. If used, a 20-second silent timelapse of a full charging session (0% → 80% in DC-fast). H.265, ≤8MB, poster mandatory. Never autoplay with sound.
|
|
75
|
+
|
|
76
|
+
**Performance:** map preview ships as a static SVG with pin overlays, never a raster screenshot of Google Maps. Station-hardware hero AVIF at 1800w ≤140KB. LCP target 1.8s.
|
|
77
|
+
|
|
78
|
+
**Avoid:** generic "EV future" abstract gradients, glowing battery cells, charging-cable hero shots in mid-air, neon-blue underlit cars, futuristic dashboards from concept-car reveals. The page sells reliable charging at a real station — show that.
|
|
79
|
+
|
|
80
|
+
**Accessibility:** every availability state has both a color and a text label (`Open · 4 of 6 ports free`). Map pins include `aria-label` with full station name and status. The urgency-magenta flash is paused under `prefers-reduced-motion` and the badge stays in its peak-color state.
|
|
81
|
+
|
|
82
|
+
## Component families
|
|
83
|
+
None at install time. Family conventions emerge as the project grows.
|
|
84
|
+
|
|
85
|
+
## Details
|
|
86
|
+
- **Selection:** `hsl(var(--primary) / 0.22)` background, foreground text.
|
|
87
|
+
- **Focus ring:** `2px solid hsl(var(--ring) / 0.45)`. Signal-blue, soft.
|
|
88
|
+
- **Scrollbar:** thin.
|
|
89
|
+
|
|
90
|
+
## Exceptions
|
|
91
|
+
None yet.
|
|
92
|
+
|
|
93
|
+
## Revisions
|
|
94
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// ev-charging — ChargePoint / EVgo / Electrify America station-network operator
|
|
4
|
+
// language. Brand-blue signal, station-map gravity, fast-charge urgency.
|
|
5
|
+
// Dashboard chrome with a public-network warmth — not enterprise-cold.
|
|
6
|
+
|
|
7
|
+
export const evCharging: Direction = {
|
|
8
|
+
name: "ev-charging" as Direction["name"],
|
|
9
|
+
ethos:
|
|
10
|
+
"ChargePoint cool-blue signal · EVgo magenta urgency-flash · Electrify America cobalt + neutral grid · " +
|
|
11
|
+
"Blink Charging bright-yellow availability · Wallbox restrained Spanish-design chrome",
|
|
12
|
+
references: [
|
|
13
|
+
{ brand: "ChargePoint", trait: "cool-blue station-pin language, network-first map" },
|
|
14
|
+
{ brand: "EVgo", trait: "magenta urgency flash, DC-fast availability dot" },
|
|
15
|
+
{ brand: "Electrify America", trait: "cobalt + neutral grid, ultra-fast 350kW gravity" },
|
|
16
|
+
{ brand: "Blink Charging", trait: "bright-yellow availability pin, consumer-friendly chrome" },
|
|
17
|
+
{ brand: "Wallbox", trait: "restrained Spanish design, home-unit clean cards" },
|
|
18
|
+
],
|
|
19
|
+
feel:
|
|
20
|
+
"A clean operator dashboard you'd use on the road. Cool brand-blue is the signal — it marks the station, the " +
|
|
21
|
+
"selected pin, the price column. A magenta urgency-flash appears only on DC-fast availability. Tabular numerics " +
|
|
22
|
+
"carry the kWh and price-per-kWh. Maps are first-class, never a marketing afterthought.",
|
|
23
|
+
|
|
24
|
+
fonts: {
|
|
25
|
+
display: {
|
|
26
|
+
family: "Manrope",
|
|
27
|
+
fallback: ["Inter", "system-ui", "-apple-system", "sans-serif"],
|
|
28
|
+
from: "ChargePoint / Wallbox display — Manrope's geometric clarity at heavy weights",
|
|
29
|
+
googleFont: "Manrope",
|
|
30
|
+
weights: [600, 700, 800],
|
|
31
|
+
},
|
|
32
|
+
body: {
|
|
33
|
+
family: "Inter",
|
|
34
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
35
|
+
from: "Electrify America / Blink body — neutral 14.5px, dashboard-density",
|
|
36
|
+
googleFont: "Inter",
|
|
37
|
+
weights: [400, 500, 600],
|
|
38
|
+
},
|
|
39
|
+
mono: {
|
|
40
|
+
family: "JetBrains Mono",
|
|
41
|
+
fallback: ["ui-monospace", "SFMono-Regular", "monospace"],
|
|
42
|
+
from: "kWh, $/kWh, station-id codes — tabular numerics",
|
|
43
|
+
googleFont: "JetBrains+Mono",
|
|
44
|
+
weights: [400, 500],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
typography: {
|
|
49
|
+
headingTracking: "-0.022em",
|
|
50
|
+
bodyTracking: "0",
|
|
51
|
+
fontFeatureSettings: '"tnum", "ss01", "cv11"',
|
|
52
|
+
h1ScaleClamp: "clamp(2rem, 4.5vw, 3.25rem)",
|
|
53
|
+
bodyBaseSize: "0.9rem",
|
|
54
|
+
bodyLineHeight: "1.5",
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
colors: {
|
|
58
|
+
background: { hsl: "215 28% 97%", from: "cool near-white — ChargePoint pale-blue canvas" },
|
|
59
|
+
foreground: { hsl: "222 38% 12%", from: "deep navy-ink — operator dashboard ink" },
|
|
60
|
+
card: { hsl: "0 0% 100%", from: "pure white card — lifts off pale-blue background" },
|
|
61
|
+
popover: { hsl: "0 0% 100%", from: "same as card" },
|
|
62
|
+
primary: { hsl: "216 92% 48%", from: "ChargePoint cool-blue — the network signal color" },
|
|
63
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on cool blue" },
|
|
64
|
+
secondary: { hsl: "215 22% 94%", from: "cool gray surface — table headers, inset panels" },
|
|
65
|
+
secondaryForeground: { hsl: "222 38% 12%", from: "ink on cool gray" },
|
|
66
|
+
muted: { hsl: "215 20% 93%", from: "muted cool gray — disabled rows, off-network state" },
|
|
67
|
+
mutedForeground: { hsl: "215 14% 42%", from: "slate gray — meta, kWh-unit labels" },
|
|
68
|
+
accent: { hsl: "216 70% 95%", from: "pale blue hover — selected station row" },
|
|
69
|
+
accentForeground: { hsl: "216 92% 28%", from: "deep blue ink on pale-blue" },
|
|
70
|
+
border: { hsl: "215 18% 86%", from: "cool hairline — table and card borders" },
|
|
71
|
+
input: { hsl: "215 18% 86%", from: "same as border" },
|
|
72
|
+
ring: { hsl: "216 92% 48%", from: "primary cool-blue — focus ring on inputs" },
|
|
73
|
+
destructive: { hsl: "0 70% 50%", from: "fault red — distinct from urgency-magenta, used for charger-down/error" },
|
|
74
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on fault red" },
|
|
75
|
+
brand: {
|
|
76
|
+
"signal-blue": { hsl: "216 92% 48%", from: "= primary; ChargePoint network signal" },
|
|
77
|
+
"signal-blue-deep": { hsl: "216 88% 32%", from: "hover, gradient anchor, sidebar surface" },
|
|
78
|
+
"signal-blue-soft": { hsl: "216 70% 95%", from: "selected-station row bg, station-pin halo" },
|
|
79
|
+
"urgency-magenta": { hsl: "330 88% 52%", from: "EVgo magenta — DC-fast availability flash, never decorative" },
|
|
80
|
+
"availability-amber": { hsl: "42 100% 52%", from: "Blink bright yellow — semi-busy station pin" },
|
|
81
|
+
cobalt: { hsl: "224 80% 38%", from: "Electrify America cobalt — 350kW badge accent only" },
|
|
82
|
+
"map-land": { hsl: "215 24% 92%", from: "map basemap land tone — pale, recessive" },
|
|
83
|
+
"map-water": { hsl: "210 40% 84%", from: "map basemap water tone — slightly cooler" },
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
spacing: {
|
|
88
|
+
base: 4,
|
|
89
|
+
scale: [2, 4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64],
|
|
90
|
+
containerMax: "max-w-7xl",
|
|
91
|
+
containerPadding: "px-4 lg:px-6",
|
|
92
|
+
sectionPadding: {
|
|
93
|
+
hero: "pt-12 pb-8 lg:pt-16 lg:pb-12",
|
|
94
|
+
default: "py-10 lg:py-14",
|
|
95
|
+
tight: "py-6 lg:py-10",
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
radius: {
|
|
100
|
+
base: "0.5rem",
|
|
101
|
+
pillsAllowed: true,
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
shadows: {
|
|
105
|
+
style: "minimal",
|
|
106
|
+
utilities: {
|
|
107
|
+
"shadow-card":
|
|
108
|
+
"0 1px 2px hsl(222 38% 12% / 0.05), 0 1px 3px hsl(222 38% 12% / 0.04)",
|
|
109
|
+
"shadow-popover":
|
|
110
|
+
"0 6px 18px hsl(222 38% 12% / 0.10), 0 1px 2px hsl(222 38% 12% / 0.06)",
|
|
111
|
+
"shadow-pin-active":
|
|
112
|
+
"0 0 0 4px hsl(216 92% 48% / 0.25), 0 2px 6px hsl(222 38% 12% / 0.25)",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
motion: {
|
|
117
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
118
|
+
durations: {
|
|
119
|
+
reveal: 220,
|
|
120
|
+
loop: 1400,
|
|
121
|
+
ambient: 2400,
|
|
122
|
+
},
|
|
123
|
+
keyframes: {
|
|
124
|
+
"fade-in": {
|
|
125
|
+
css:
|
|
126
|
+
"from { opacity: 0; }\n" +
|
|
127
|
+
"to { opacity: 1; }",
|
|
128
|
+
defaultDuration: 220,
|
|
129
|
+
iteration: "once",
|
|
130
|
+
purpose: "table-row and station-card entrance — opacity only, no translate",
|
|
131
|
+
},
|
|
132
|
+
"pin-pulse": {
|
|
133
|
+
css:
|
|
134
|
+
"0%, 100% { box-shadow: 0 0 0 0 hsl(216 92% 48% / 0.5); }\n" +
|
|
135
|
+
"50% { box-shadow: 0 0 0 8px hsl(216 92% 48% / 0); }",
|
|
136
|
+
defaultDuration: 1800,
|
|
137
|
+
iteration: "infinite",
|
|
138
|
+
purpose: "active station-pin pulse on the map — indicates a live charging session",
|
|
139
|
+
},
|
|
140
|
+
"dc-fast-flash": {
|
|
141
|
+
css:
|
|
142
|
+
"0%, 100% { background-color: hsl(330 88% 52%); }\n" +
|
|
143
|
+
"50% { background-color: hsl(330 88% 68%); }",
|
|
144
|
+
defaultDuration: 1400,
|
|
145
|
+
iteration: "infinite",
|
|
146
|
+
purpose: "EVgo-style urgency flash on DC-fast availability badge — used only on 150kW+ rows",
|
|
147
|
+
},
|
|
148
|
+
"charge-arc": {
|
|
149
|
+
css:
|
|
150
|
+
"from { stroke-dashoffset: 282; }\n" +
|
|
151
|
+
"to { stroke-dashoffset: 56; }",
|
|
152
|
+
defaultDuration: 2400,
|
|
153
|
+
iteration: "once",
|
|
154
|
+
purpose: "charge-percentage SVG arc fill on session start",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
respectsReducedMotion: true,
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
density: "high",
|
|
161
|
+
|
|
162
|
+
patterns: {
|
|
163
|
+
button:
|
|
164
|
+
"Solid signal-blue primary (rounded-md, shadow-card) for the single commit — Start charging, Reserve, Pay. " +
|
|
165
|
+
"Secondary is ghost (border + foreground). Tertiary is text-link blue. " +
|
|
166
|
+
"Hover deepens fill to signal-blue-deep; no scale, no shadow growth.",
|
|
167
|
+
card:
|
|
168
|
+
"Rounded-md, 1px --border, bg-card, shadow-card. Padding p-4 lg:p-5 — tight. " +
|
|
169
|
+
"Station card holds name, address, distance, port-count, $/kWh. Map-popup card uses shadow-popover.",
|
|
170
|
+
input:
|
|
171
|
+
"Full rounded-md box, 1px --input border, bg-card. Search input has a leading pin glyph in signal-blue. " +
|
|
172
|
+
"Focus = 2px signal-blue ring at 45% opacity. Filter chips are rounded pills, signal-blue-soft when active.",
|
|
173
|
+
cta:
|
|
174
|
+
"Primary signal-blue button for Start charging / Reserve. " +
|
|
175
|
+
"DC-fast badge uses urgency-magenta with dc-fast-flash keyframe — never on Level 2 / Level 1. " +
|
|
176
|
+
"Price columns right-aligned mono. Availability pin colors: green=open, amber=busy, magenta=DC-fast-open, gray=offline.",
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
details: {
|
|
180
|
+
selectionBg: "hsl(var(--primary) / 0.22)",
|
|
181
|
+
selectionFg: "hsl(var(--foreground))",
|
|
182
|
+
focusRing: "2px solid hsl(var(--ring) / 0.45)",
|
|
183
|
+
scrollbarStyle: "thin",
|
|
184
|
+
},
|
|
185
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Design Direction — Farm-Direct
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Misfits Market chalkboard-cream + carrot-orange · Imperfect Foods rescued-produce green · Hungryroot friendly box configurator · Thrive Market warm-trust serif · Daily Harvest pastel pantry
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Warm cream paper canvas with a friendly farm-green primary and a carrot-orange secondary. Headings carry a soft serif warmth; body sits in a rounded humanist sans. Box cards have pillow-rounded corners and produce illustrations sit inside them like a chalk drawing. Numbers report sourcing impact, not pricing. The page is a farmers-market stand, not a checkout aisle.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Misfits Market** → chalkboard-cream surface and carrot-orange accent. The page is warm before it is anything else.
|
|
11
|
+
- **Imperfect Foods** → rescued-produce green. The wonky carrot is beautiful and so is the badge color.
|
|
12
|
+
- **Hungryroot** → friendly box configurator. Small/medium/large is a choice, not a tier.
|
|
13
|
+
- **Thrive Market** → warm-trust serif. Members trust display serif; sans is for the receipt.
|
|
14
|
+
- **Daily Harvest** → pastel pantry palette. Soft, never neon.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin.
|
|
18
|
+
|
|
19
|
+
Surface stack is **warm cream background** → `--card` (a degree above, lifted cream) → `--secondary` (deeper cream for inset panels). Depth comes from soft basket-shadows and the rounded chrome — never from fill differentiation alone.
|
|
20
|
+
|
|
21
|
+
Brand tokens: `--farm-green`, `--farm-green-deep`, `--farm-green-soft`, `--carrot-orange`, `--tomato-soft`, `--chalk-blue`, `--earth-clay`. Carrot-orange is the friendly secondary — used on box-size selectors and the in-season highlight. Chalk-blue and earth-clay are reserved for the sourcing-map basemap; they are off-limits to UI chrome.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Fraunces (Misfits Market / Thrive Market display). h1–h4. Tracking `-0.015em`. Fraunces' soft-serif warmth — chalkboard sign-painter energy.
|
|
25
|
+
- **Body:** Nunito (Hungryroot body). Body base **16px** with **line-height 1.6** — rounded humanist sans, the friendliest readable face.
|
|
26
|
+
- **Mono:** DM Mono. Member-impact tickers (lbs rescued, farms supported). DM Mono is wider and warmer than JetBrains.
|
|
27
|
+
|
|
28
|
+
H1 uses `clamp(2.5rem, 5.5vw, 4rem)` — generous, like a farm-stand chalkboard headline.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-6xl px-4 lg:px-8`.
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-24 pb-16 lg:pt-32 lg:pb-24` (generous; the produce hero breathes)
|
|
34
|
+
- Default: `py-16 lg:py-24`
|
|
35
|
+
- Tight: `py-12 lg:py-16`
|
|
36
|
+
- **Allowed scale values:** 4 6 8 10 12 16 20 24 32 40 48 56 64 80 96.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex anywhere in component files. All color via tokens. Pure white and pure black are forbidden — `--background` and `--foreground` carry warmth.
|
|
40
|
+
|
|
41
|
+
Farm-green is the primary commit color. Carrot-orange is the friendly secondary, used on box-size selectors and seasonality badges. Tomato-soft appears only on out-of-stock / low-quantity badges. The sourcing-map basemap is the only place chalk-blue and earth-clay appear.
|
|
42
|
+
|
|
43
|
+
## Radius
|
|
44
|
+
`--radius: 1rem` (16px). Pillow-rounded — the friendliest direction in this library after soft-modern. Pills allowed (`pillsAllowed: true`) for box-size selectors, seasonality chips, dietary badges, CTA buttons. Buttons are full pill (`rounded-full`).
|
|
45
|
+
|
|
46
|
+
## Shadows
|
|
47
|
+
**Soft, three utilities:** `.shadow-basket` (8-24px lift on the box-preview hero card — feels like the basket is sitting on the page), `.shadow-card` (general card lift), `.shadow-pop` (4-16px for the sourcing-map farm callouts). No glows.
|
|
48
|
+
|
|
49
|
+
## Motion
|
|
50
|
+
Three keyframes: `fade-rise` (500ms — produce-card and configurator entrance, friendly rise), `box-bump` (280ms — box-size selector bumps when changed, playful confirm), `drift` (22s slow ambient on illustration glyphs — decorative).
|
|
51
|
+
|
|
52
|
+
`box-bump` is the playful moment. `drift` is decorative and disabled under `prefers-reduced-motion`. Easing: `cubic-bezier(0.22, 1, 0.36, 1)`.
|
|
53
|
+
|
|
54
|
+
## Density
|
|
55
|
+
Medium. The box-preview card breathes. The produce-illustration cluster has whitespace around it. Impact metrics are big (40px mono) with generous gutters. The farms-supported map gives the callouts room — three farms across, not eight crammed in.
|
|
56
|
+
|
|
57
|
+
## Component patterns
|
|
58
|
+
- **Buttons:** solid farm-green primary, **full-pill** (`rounded-full`), `shadow-card`. The single commit per surface — `Pick this box`, `Subscribe`. Secondary is ghost (1.5px border in foreground). Tertiary is text-link `--farm-green-deep` with underline-on-hover. Hover deepens fill and 1px y-translate — playful, not theatrical.
|
|
59
|
+
- **Cards:** rounded-2xl (1rem), 1px `--border`, `bg-card` (lifted cream), `shadow-card`. Padding `p-6`. Box-preview hero card uses `shadow-basket` and contains a produce-illustration cluster.
|
|
60
|
+
- **Inputs:** full rounded-xl box, 1px `--input` border, `bg-card`. Label above in body-medium 14px. Zip-code and email inputs lead with a small farm-green glyph. Focus = 2px farm-green ring at 50% opacity.
|
|
61
|
+
- **CTA:** primary farm-green pill button for the box commit. Box-size selector uses three pill chips — carrot-orange when selected, ghost when not. Sourcing-story farm callouts use pop-out cards with `shadow-pop`. Impact metrics (lbs rescued, farms supported) display large in mono with tabular-nums.
|
|
62
|
+
|
|
63
|
+
## Recommended rich media
|
|
64
|
+
Farm-Direct leans on **chalkboard-style produce illustration** and **honest farm photography** — real growers, real fields, real wonky carrots. Avoid stock "fresh vegetables on white background" — that's grocery aisle, not farm stand.
|
|
65
|
+
|
|
66
|
+
**Iconography:** the produce glyphs are **hand-drawn chalkboard illustration** (single-line, slightly imperfect), not flat geometric icons. The UI icons (cart, account, search, close) are 1.5px stroke at 20px — but the produce family is its own illustrated world.
|
|
67
|
+
|
|
68
|
+
**AI tool recommendations:** **Midjourney / Flux** for *"chalkboard-style hand-drawn produce illustration, carrot tomato kale, white chalk on warm cream background, slightly imperfect lines, farm-stand aesthetic"* and *"honest farm photography, mid-morning natural light, female farmer in rubber boots holding a basket of imperfect tomatoes, wide-angle, no over-saturation"*. Avoid the default Midjourney "fresh organic vegetable" gloss — it reads supermarket flyer.
|
|
69
|
+
|
|
70
|
+
**Aspect ratios:** 4:5 portrait for farmer photography. 1:1 for produce-illustration tiles inside box cards. 21:9 strip for the sourcing-map. Never 16:9.
|
|
71
|
+
|
|
72
|
+
**Video:** rare. If used, a 15-second silent timelapse of a box being packed — gloved hands placing produce in a brown box. ≤6MB H.265. Poster mandatory.
|
|
73
|
+
|
|
74
|
+
**Performance:** farmer-portrait hero AVIF at 1400w ≤120KB. Produce-illustration glyphs as inline SVG (≤4KB each, no raster). LCP target 2s.
|
|
75
|
+
|
|
76
|
+
**Avoid:** stock grocery-aisle imagery, glossy red apple on white, hands-holding-soil shots (cliché), generic "farm to table" gradient overlays, neon-green "organic certified" badges, before/after produce-rescue slider gimmicks.
|
|
77
|
+
|
|
78
|
+
**Accessibility:** every produce illustration in a box card has a text label visible (`8 carrots`, not just an illustration). Impact-metric numbers ship with full aria-labels (`12.4 million pounds of produce rescued`). Box-size pills carry `aria-pressed` state.
|
|
79
|
+
|
|
80
|
+
## Component families
|
|
81
|
+
None at install time. Family conventions emerge as the project grows.
|
|
82
|
+
|
|
83
|
+
## Details
|
|
84
|
+
- **Selection:** `hsl(var(--primary) / 0.22)` background, foreground text.
|
|
85
|
+
- **Focus ring:** `2px solid hsl(var(--ring) / 0.5)`. Farm-green, soft.
|
|
86
|
+
- **Scrollbar:** thin.
|
|
87
|
+
|
|
88
|
+
## Exceptions
|
|
89
|
+
None yet.
|
|
90
|
+
|
|
91
|
+
## Revisions
|
|
92
|
+
- Initial direction, generated at install time.
|