@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,126 @@
|
|
|
1
|
+
# Case Panel
|
|
2
|
+
|
|
3
|
+
> Agency-portfolio register — the client work IS the design. White canvas with big bold sans headlines at tight negative tracking, and a bento-grid where each case study is a full-bleed brand-colored panel showing a fictional client's identity at scale. The studio's chrome (nav, headers, footer) deliberately stays neutral so the client brands can shout.
|
|
4
|
+
|
|
5
|
+
**Slug:** `case-panel` — **Surface:** web — **Density:** balanced
|
|
6
|
+
|
|
7
|
+
## Influence
|
|
8
|
+
|
|
9
|
+
High-end branding-and-UX agency portfolio sites — the Clay / Collins / Pentagram / Instrument / Base Design register where a client-work grid dominates the composition. Also international-style Swiss agency print work (the studio positions itself through the work, not through its own identity). Reference-adjacent — Wolff Olins, Sagmeister, COMMISSION.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Signature move
|
|
13
|
+
|
|
14
|
+
Big bold sans-serif hero at 74px, letter-spacing crushed to -0.04em,
|
|
15
|
+
set on pure white canvas. A small dark navy pill sits ABOVE the hero
|
|
16
|
+
("Parable is a global branding and UX design agency" — the studio's
|
|
17
|
+
positioning line, treated as a floating badge not a headline).
|
|
18
|
+
The signature move sits BELOW the hero: a bento-style grid of 8-12
|
|
19
|
+
case-study panels, each a full-bleed brand-colored rectangle
|
|
20
|
+
representing a fictional client.
|
|
21
|
+
Panels alternate: some are pure color-plus-brand-name (in the
|
|
22
|
+
client's own imagined typeface, big and centered), others hold a
|
|
23
|
+
small product screenshot with the brand name at the corner, others
|
|
24
|
+
hold a lifestyle photograph. Panel sizes vary 2x1 / 1x1 / 3x2 to
|
|
25
|
+
break the uniform-grid slop. On the right rail of the hero, a
|
|
26
|
+
vertical stack of category filter chips (Branding / Digital
|
|
27
|
+
Features / Websites / Development / Content / Generative AI). Below
|
|
28
|
+
the case grid, a workflow strip with 4 numbered process steps in
|
|
29
|
+
large bold type. Featured News section with 3 image-headed cards.
|
|
30
|
+
Dark navy `#171921` FAQ band with white text — accordion rows,
|
|
31
|
+
chevron rotates on expand. Cream/tan `#F3F4F6` footer band with
|
|
32
|
+
wordmark + column navigation. Border-radius 0 everywhere — no
|
|
33
|
+
rounded cards, buttons, inputs, media. Brand character sits in the
|
|
34
|
+
case-panel grid (the client work IS the design) and the studio's
|
|
35
|
+
restraint (nav, headers, chrome all step aside) — not in
|
|
36
|
+
decoration, not in mono-caps eyebrows, not in stat-card triads.
|
|
37
|
+
|
|
38
|
+
## Palette
|
|
39
|
+
|
|
40
|
+
- **bg:** `#FFFFFF`
|
|
41
|
+
- **surface:** `#F3F4F6`
|
|
42
|
+
- **ink:** `#06070A`
|
|
43
|
+
- **accent:** `#0000EE`
|
|
44
|
+
|
|
45
|
+
## Typography
|
|
46
|
+
|
|
47
|
+
- **Display:** UniversalSans (paid, from TypeMates equivalent) or Inter Display / General Sans as broader-market fallback — weight 700 (very bold, "740-headline" in the reference maps to Inter Display 800-900 in practice), letter-spacing -0.04em at hero scale (-2.96px at 74px). At scale — 74px hero-headline, 52px section-title, 40px subhead, 28-30px case-panel title inside each brand panel. UniversalSans is the reference face (its tight negative tracking + bold weight is the exact register); Inter Display is the safest free approximation with similar bold-sans proportions.
|
|
48
|
+
- **Body:** UniversalSans-500 same family — 500 weight, 15-18px body copy, line-height 1.5. This theme's discipline is ONE type family across display + body (the studio's chrome speaks quietly so client brands dominate), but the body uses the LIGHTER weight to contrast with the hero's very-bold.
|
|
49
|
+
- **Mono:** none. Case Panel is a consumer-portfolio surface — mono has no legitimate role here. Numbered indices (01, 02, 03) use the body face at bold weight, NOT a mono variant.
|
|
50
|
+
- **Scale:** 1.414 (augmented fourth — deliberately wide contrast so bold display shouts and the light body captions settle)
|
|
51
|
+
|
|
52
|
+
## Motion
|
|
53
|
+
|
|
54
|
+
Ships live in the section renderer (no external dependencies):
|
|
55
|
+
1. Hero headline scroll-triggered reveal via IntersectionObserver — bottom-up + fade, 700ms cubic-bezier(0.19,1,0.22,1).
|
|
56
|
+
2. Case-panel grid stagger reveal — each brand panel enters from opacity 0 + translateY(12px) with 80ms stagger, 600ms cubic-bezier per panel.
|
|
57
|
+
3. Case-panel hover — subtle 1.01 scale + 200ms cubic-bezier transition. On hover the panel's brand-color darkens 8% so it reads as clickable without changing character.
|
|
58
|
+
4. Nav client-rotator (small marquee-adjacent) — a rotating "trusted by" list of client brand names cycles vertically (roll every 2.5s per name, 400ms cubic-bezier easing). Small text only, no huge marquee — this is a subtle nav ornament, not a hero move.
|
|
59
|
+
5. Filter-chip active state — the category chips on the right rail highlight one-at-a-time when clicked; grid re-renders filtered instantly (no cross-fade transition, no loading state — instant like a filter should be).
|
|
60
|
+
6. FAQ accordion — each FAQ row expands 400ms cubic-bezier on click, chevron rotates 180deg. Only one open at a time (accordion, not multi-open).
|
|
61
|
+
7. Featured-news card hover — subtle image scale(1.03) + 400ms cubic-bezier. Card frame stays flat; only the image inside moves.
|
|
62
|
+
8. prefers-reduced-motion: reduce — all keyframe animations disabled, hero at final state, stagger disabled, hover transitions instant, client-rotator paused. State changes still fire (they're content, not decoration).
|
|
63
|
+
|
|
64
|
+
Customer installs these as dependencies for the deeper motion tier:
|
|
65
|
+
- Lenis — smooth inertial scroll (the section rhythm needs inertial scroll to feel considered at agency-tier polish).
|
|
66
|
+
- GSAP ScrollTrigger — the hero reveal + case-panel stagger + featured-news scroll-reveal all benefit from orchestrated timelines.
|
|
67
|
+
- Custom branded preloader with the studio wordmark drawing in from small to large over the white ground.
|
|
68
|
+
|
|
69
|
+
Motion character: precise, considered, professional. Custom cubic-bezier(0.19,1,0.22,1) (ease-out-expo) for reveal easings. Nothing bouncy, nothing playful — the studio speaks with restraint so client work can shout.
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## Imagery
|
|
73
|
+
|
|
74
|
+
Full-bleed brand-colored rectangles as the primary imagery — each
|
|
75
|
+
case panel is a fictional client's brand identity rendered at scale.
|
|
76
|
+
Some panels are pure color + client wordmark (imagined typeface, big
|
|
77
|
+
and centered on the color field). Others show product screenshots
|
|
78
|
+
(fictional app mockups, mobile UI cards) on the client's brand
|
|
79
|
+
color. Others show photographic lifestyle shots (portraits, product
|
|
80
|
+
photography, environmental). Featured News cards use small
|
|
81
|
+
photograph-plus-headline layout. Workflow strip images are candid
|
|
82
|
+
studio photography (people at desks, whiteboards, screens). NO
|
|
83
|
+
gradient blobs, NO glassmorphism, NO stock illustrations, NO
|
|
84
|
+
emoji — this is a design AGENCY, not a SaaS product. All FPO
|
|
85
|
+
imagery uses colored rectangles with clearly-labeled placeholders
|
|
86
|
+
("FPO / Client X — product hero") so the composition reads as a
|
|
87
|
+
showcase-in-progress without shipping stock assets.
|
|
88
|
+
|
|
89
|
+
## Best for
|
|
90
|
+
|
|
91
|
+
- Design-agency portfolio sites (branding studios, digital agencies, creative shops)
|
|
92
|
+
- Case-study showcases for freelance designers with 5-15 named clients
|
|
93
|
+
- Studio-launch marketing pages where the client roster IS the pitch
|
|
94
|
+
- Consultancy / advisory portfolios that trade on named clients + case studies
|
|
95
|
+
- Photographer or director portfolio sites where the work grid is the composition
|
|
96
|
+
- Design-focused SaaS marketing pages that want to feel like an agency-tier launch, not a product tour
|
|
97
|
+
|
|
98
|
+
## Reject if
|
|
99
|
+
|
|
100
|
+
_Director grades each of the following as a pass/fail check. Any violation blocks the theme._
|
|
101
|
+
|
|
102
|
+
- Border-radius greater than 0px anywhere on the page — sharp corners are core to the identity
|
|
103
|
+
- Rounded pill buttons or fully-rounded CTAs — buttons are sharp-cornered with 0 radius, that's it
|
|
104
|
+
- Serif or condensed display type — display face must be humanist bold sans (UniversalSans or Inter Display), never a serif, never Anton condensed
|
|
105
|
+
- Mono type as a decorative label voice on consumer surfaces — mono has NO legitimate role here
|
|
106
|
+
- Warm color palettes as the canvas — this register is COOL and NEUTRAL (white paper, near-black ink), never espresso/cream/amber flooding
|
|
107
|
+
- Corporate polish on the studio chrome — no drop-shadow-md cards, no soft-glow panels, no gradient backgrounds. Chrome is FLAT so client brands can shout.
|
|
108
|
+
- Uniform three-column feature grid for case studies — the case-panel grid MUST vary panel sizes (2x1 / 1x1 / 3x2) so it reads as considered composition, not template output
|
|
109
|
+
- Center-aligned hero everything — hero is left-weighted, agency-badge floats above the display type, category filter chips align RIGHT
|
|
110
|
+
- Multiple accent colors — browser-blue #0000EE is the ONE studio accent (CTAs, hover states, small inline glyphs only). The case-panel colors are CLIENT brands, not studio accents.
|
|
111
|
+
- Auto-advancing hero sliders / cycling headline words — refused
|
|
112
|
+
- Stat-card triads (100K CLIENTS / 4.9 STAR / 12 YEARS) — the case grid speaks for the studio's scale, no stat cards needed
|
|
113
|
+
- Grain overlay on any surface — this register is CRISP paper, not textured
|
|
114
|
+
- Studio-name mono-caps corner tag anywhere on the page — the studio's brand shows up ONCE as a nav wordmark and ONCE as a footer wordmark, that's it
|
|
115
|
+
- Emoji or decorative unicode glyphs — inline marks are bespoke SVG shapes only
|
|
116
|
+
|
|
117
|
+
## Banned defaults (inherited + theme-specific)
|
|
118
|
+
|
|
119
|
+
- claude-cream (#F4F1EA + serif + #D97757)
|
|
120
|
+
- void+acid (near-black bg + single bright acid-green or vermilion accent)
|
|
121
|
+
- broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)
|
|
122
|
+
- tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)
|
|
123
|
+
- uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)
|
|
124
|
+
- studio-brand-as-accent (the case-panel colors are CLIENT brands. The moment you use one of them as the studio's accent, the register collapses — studio chrome stays neutral, only browser-blue is the studio accent.)
|
|
125
|
+
- case-panels-in-uniform-grid (the panel bento must break sizes 2x1 / 1x1 / 3x2. A uniform 3-col grid of same-size panels reads as a template-generic 'Our Work' page, not a considered showcase.)
|
|
126
|
+
- agency-badge-in-hero-headline (the studio positioning line is a SMALL floating pill above the hero. Rendering it as the hero H1 collapses the composition into every-agency-website — 'we are a global design agency that transforms brands' as the headline.)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
|
|
2
|
+
// slug: case-panel
|
|
3
|
+
export const casePanelTailwindExtend = {
|
|
4
|
+
colors: {
|
|
5
|
+
bg: "#FFFFFF",
|
|
6
|
+
surface: "#F3F4F6",
|
|
7
|
+
ink: "#06070A",
|
|
8
|
+
accent: "#0000EE",
|
|
9
|
+
},
|
|
10
|
+
fontFamily: {
|
|
11
|
+
display: ["UniversalSans (paid, from TypeMates equivalent) or Inter Display / General Sans as broader-market fallback — weight 700 (very bold, \"740-headline\" in the reference maps to Inter Display 800-900 in practice), letter-spacing -0.04em at hero scale (-2.96px at 74px). At scale — 74px hero-headline, 52px section-title, 40px subhead, 28-30px case-panel title inside each brand panel. UniversalSans is the reference face (its tight negative tracking + bold weight is the exact register); Inter Display is the safest free approximation with similar bold-sans proportions."],
|
|
12
|
+
body: ["UniversalSans-500 same family — 500 weight, 15-18px body copy, line-height 1.5. This theme's discipline is ONE type family across display + body (the studio's chrome speaks quietly so client brands dominate), but the body uses the LIGHTER weight to contrast with the hero's very-bold."],
|
|
13
|
+
mono: ["none. Case Panel is a consumer-portfolio surface — mono has no legitimate role here. Numbered indices (01, 02, 03) use the body face at bold weight, NOT a mono variant."],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Case Panel — Family C, Editorial & Print.
|
|
2
|
+
#
|
|
3
|
+
# NEW-BASE CANDIDATE for BESPOKE_THEME_SYSTEM.md. Design-agency portfolio
|
|
4
|
+
# register — the client work IS the design. White canvas, big bold sans
|
|
5
|
+
# headlines at tight negative tracking, and a bento-grid of case studies
|
|
6
|
+
# where each case study is a FULL-BLEED brand-colored panel showing a
|
|
7
|
+
# fictional client's identity at scale. Distinct from Base 27 Type
|
|
8
|
+
# Specimen (which shows off a typeface): here the SHOWCASE is the design,
|
|
9
|
+
# and the studio's chrome deliberately steps aside so the client brands
|
|
10
|
+
# can shout.
|
|
11
|
+
#
|
|
12
|
+
# Authored from Matt's provided design brief (2026-07-04, clay.global
|
|
13
|
+
# reference). Placeholder demonstration studio is a fictional 12-year-old
|
|
14
|
+
# branding + UX agency called "PARABLE" — domain-agnostic mockup that
|
|
15
|
+
# could re-skin to any design studio, creative shop, or agency
|
|
16
|
+
# portfolio. The register expresses "agency premium" through the CLIENT
|
|
17
|
+
# WORK GRID rather than through decoration or the studio's own brand.
|
|
18
|
+
#
|
|
19
|
+
# Eighth theme via the v2 harness. Second Family C theme (after
|
|
20
|
+
# ember-poster). Fourth NEW BASE (after ember-poster, overland-broadside,
|
|
21
|
+
# arc-stack).
|
|
22
|
+
#
|
|
23
|
+
# Alternative slugs considered: agency-showcase, brand-index, atelier-
|
|
24
|
+
# portfolio, case-stack, portfolio-grid. Case-panel picked because
|
|
25
|
+
# "case" is the industry term for a case study and "panel" nails the
|
|
26
|
+
# structural move — each case study is a full-bleed color panel, not a
|
|
27
|
+
# framed thumbnail.
|
|
28
|
+
|
|
29
|
+
name: Case Panel
|
|
30
|
+
concept: Agency-portfolio register — the client work IS the design. White canvas with big bold sans headlines at tight negative tracking, and a bento-grid where each case study is a full-bleed brand-colored panel showing a fictional client's identity at scale. The studio's chrome (nav, headers, footer) deliberately stays neutral so the client brands can shout.
|
|
31
|
+
influence: |
|
|
32
|
+
High-end branding-and-UX agency portfolio sites — the Clay / Collins / Pentagram / Instrument / Base Design register where a client-work grid dominates the composition. Also international-style Swiss agency print work (the studio positions itself through the work, not through its own identity). Reference-adjacent — Wolff Olins, Sagmeister, COMMISSION.
|
|
33
|
+
|
|
34
|
+
family: C
|
|
35
|
+
base_number: 27
|
|
36
|
+
base_note: |
|
|
37
|
+
New-base candidate adjacent to Base 27 Type Specimen. Base 27 is "the typeface IS the design" (foundry showcase); Case Panel is "the CLIENT WORK is the design" (agency showcase). Both trade on the same discipline — the SHOWCASE dominates and the surrounding chrome steps aside — but the subject shifts from type specimens to brand panels. Both register as portfolio-first — content is the design, ornament is banned.
|
|
38
|
+
|
|
39
|
+
render_url: http://localhost:5173/themes/case-panel
|
|
40
|
+
|
|
41
|
+
surface: web
|
|
42
|
+
|
|
43
|
+
typography:
|
|
44
|
+
display: UniversalSans (paid, from TypeMates equivalent) or Inter Display / General Sans as broader-market fallback — weight 700 (very bold, "740-headline" in the reference maps to Inter Display 800-900 in practice), letter-spacing -0.04em at hero scale (-2.96px at 74px). At scale — 74px hero-headline, 52px section-title, 40px subhead, 28-30px case-panel title inside each brand panel. UniversalSans is the reference face (its tight negative tracking + bold weight is the exact register); Inter Display is the safest free approximation with similar bold-sans proportions.
|
|
45
|
+
body: UniversalSans-500 same family — 500 weight, 15-18px body copy, line-height 1.5. This theme's discipline is ONE type family across display + body (the studio's chrome speaks quietly so client brands dominate), but the body uses the LIGHTER weight to contrast with the hero's very-bold.
|
|
46
|
+
mono: none. Case Panel is a consumer-portfolio surface — mono has no legitimate role here. Numbered indices (01, 02, 03) use the body face at bold weight, NOT a mono variant.
|
|
47
|
+
scale: 1.414 (augmented fourth — deliberately wide contrast so bold display shouts and the light body captions settle)
|
|
48
|
+
|
|
49
|
+
palette:
|
|
50
|
+
bg: "#FFFFFF"
|
|
51
|
+
surface: "#F3F4F6"
|
|
52
|
+
ink: "#06070A"
|
|
53
|
+
accent: "#0000EE" # browser-blue link accent, used sparingly on CTAs, hover states, small icons ONLY
|
|
54
|
+
mute: "#7F8694" # gray-500 for secondary labels
|
|
55
|
+
invertedBg: "#171921" # dark navy for FAQ + one-inverted-band + footer nav accent
|
|
56
|
+
invertedInk: "#FFFFFF"
|
|
57
|
+
|
|
58
|
+
density: balanced
|
|
59
|
+
|
|
60
|
+
motion: |
|
|
61
|
+
Ships live in the section renderer (no external dependencies):
|
|
62
|
+
1. Hero headline scroll-triggered reveal via IntersectionObserver — bottom-up + fade, 700ms cubic-bezier(0.19,1,0.22,1).
|
|
63
|
+
2. Case-panel grid stagger reveal — each brand panel enters from opacity 0 + translateY(12px) with 80ms stagger, 600ms cubic-bezier per panel.
|
|
64
|
+
3. Case-panel hover — subtle 1.01 scale + 200ms cubic-bezier transition. On hover the panel's brand-color darkens 8% so it reads as clickable without changing character.
|
|
65
|
+
4. Nav client-rotator (small marquee-adjacent) — a rotating "trusted by" list of client brand names cycles vertically (roll every 2.5s per name, 400ms cubic-bezier easing). Small text only, no huge marquee — this is a subtle nav ornament, not a hero move.
|
|
66
|
+
5. Filter-chip active state — the category chips on the right rail highlight one-at-a-time when clicked; grid re-renders filtered instantly (no cross-fade transition, no loading state — instant like a filter should be).
|
|
67
|
+
6. FAQ accordion — each FAQ row expands 400ms cubic-bezier on click, chevron rotates 180deg. Only one open at a time (accordion, not multi-open).
|
|
68
|
+
7. Featured-news card hover — subtle image scale(1.03) + 400ms cubic-bezier. Card frame stays flat; only the image inside moves.
|
|
69
|
+
8. prefers-reduced-motion: reduce — all keyframe animations disabled, hero at final state, stagger disabled, hover transitions instant, client-rotator paused. State changes still fire (they're content, not decoration).
|
|
70
|
+
|
|
71
|
+
Customer installs these as dependencies for the deeper motion tier:
|
|
72
|
+
- Lenis — smooth inertial scroll (the section rhythm needs inertial scroll to feel considered at agency-tier polish).
|
|
73
|
+
- GSAP ScrollTrigger — the hero reveal + case-panel stagger + featured-news scroll-reveal all benefit from orchestrated timelines.
|
|
74
|
+
- Custom branded preloader with the studio wordmark drawing in from small to large over the white ground.
|
|
75
|
+
|
|
76
|
+
Motion character: precise, considered, professional. Custom cubic-bezier(0.19,1,0.22,1) (ease-out-expo) for reveal easings. Nothing bouncy, nothing playful — the studio speaks with restraint so client work can shout.
|
|
77
|
+
|
|
78
|
+
signature: |
|
|
79
|
+
Big bold sans-serif hero at 74px, letter-spacing crushed to -0.04em,
|
|
80
|
+
set on pure white canvas. A small dark navy pill sits ABOVE the hero
|
|
81
|
+
("Parable is a global branding and UX design agency" — the studio's
|
|
82
|
+
positioning line, treated as a floating badge not a headline).
|
|
83
|
+
The signature move sits BELOW the hero: a bento-style grid of 8-12
|
|
84
|
+
case-study panels, each a full-bleed brand-colored rectangle
|
|
85
|
+
representing a fictional client.
|
|
86
|
+
Panels alternate: some are pure color-plus-brand-name (in the
|
|
87
|
+
client's own imagined typeface, big and centered), others hold a
|
|
88
|
+
small product screenshot with the brand name at the corner, others
|
|
89
|
+
hold a lifestyle photograph. Panel sizes vary 2x1 / 1x1 / 3x2 to
|
|
90
|
+
break the uniform-grid slop. On the right rail of the hero, a
|
|
91
|
+
vertical stack of category filter chips (Branding / Digital
|
|
92
|
+
Features / Websites / Development / Content / Generative AI). Below
|
|
93
|
+
the case grid, a workflow strip with 4 numbered process steps in
|
|
94
|
+
large bold type. Featured News section with 3 image-headed cards.
|
|
95
|
+
Dark navy `#171921` FAQ band with white text — accordion rows,
|
|
96
|
+
chevron rotates on expand. Cream/tan `#F3F4F6` footer band with
|
|
97
|
+
wordmark + column navigation. Border-radius 0 everywhere — no
|
|
98
|
+
rounded cards, buttons, inputs, media. Brand character sits in the
|
|
99
|
+
case-panel grid (the client work IS the design) and the studio's
|
|
100
|
+
restraint (nav, headers, chrome all step aside) — not in
|
|
101
|
+
decoration, not in mono-caps eyebrows, not in stat-card triads.
|
|
102
|
+
|
|
103
|
+
imagery: |
|
|
104
|
+
Full-bleed brand-colored rectangles as the primary imagery — each
|
|
105
|
+
case panel is a fictional client's brand identity rendered at scale.
|
|
106
|
+
Some panels are pure color + client wordmark (imagined typeface, big
|
|
107
|
+
and centered on the color field). Others show product screenshots
|
|
108
|
+
(fictional app mockups, mobile UI cards) on the client's brand
|
|
109
|
+
color. Others show photographic lifestyle shots (portraits, product
|
|
110
|
+
photography, environmental). Featured News cards use small
|
|
111
|
+
photograph-plus-headline layout. Workflow strip images are candid
|
|
112
|
+
studio photography (people at desks, whiteboards, screens). NO
|
|
113
|
+
gradient blobs, NO glassmorphism, NO stock illustrations, NO
|
|
114
|
+
emoji — this is a design AGENCY, not a SaaS product. All FPO
|
|
115
|
+
imagery uses colored rectangles with clearly-labeled placeholders
|
|
116
|
+
("FPO / Client X — product hero") so the composition reads as a
|
|
117
|
+
showcase-in-progress without shipping stock assets.
|
|
118
|
+
|
|
119
|
+
best_for:
|
|
120
|
+
- Design-agency portfolio sites (branding studios, digital agencies, creative shops)
|
|
121
|
+
- Case-study showcases for freelance designers with 5-15 named clients
|
|
122
|
+
- Studio-launch marketing pages where the client roster IS the pitch
|
|
123
|
+
- Consultancy / advisory portfolios that trade on named clients + case studies
|
|
124
|
+
- Photographer or director portfolio sites where the work grid is the composition
|
|
125
|
+
- Design-focused SaaS marketing pages that want to feel like an agency-tier launch, not a product tour
|
|
126
|
+
|
|
127
|
+
avoid:
|
|
128
|
+
- "Border-radius greater than 0px anywhere on the page — sharp corners are core to the identity"
|
|
129
|
+
- "Rounded pill buttons or fully-rounded CTAs — buttons are sharp-cornered with 0 radius, that's it"
|
|
130
|
+
- "Serif or condensed display type — display face must be humanist bold sans (UniversalSans or Inter Display), never a serif, never Anton condensed"
|
|
131
|
+
- "Mono type as a decorative label voice on consumer surfaces — mono has NO legitimate role here"
|
|
132
|
+
- "Warm color palettes as the canvas — this register is COOL and NEUTRAL (white paper, near-black ink), never espresso/cream/amber flooding"
|
|
133
|
+
- "Corporate polish on the studio chrome — no drop-shadow-md cards, no soft-glow panels, no gradient backgrounds. Chrome is FLAT so client brands can shout."
|
|
134
|
+
- "Uniform three-column feature grid for case studies — the case-panel grid MUST vary panel sizes (2x1 / 1x1 / 3x2) so it reads as considered composition, not template output"
|
|
135
|
+
- "Center-aligned hero everything — hero is left-weighted, agency-badge floats above the display type, category filter chips align RIGHT"
|
|
136
|
+
- "Multiple accent colors — browser-blue #0000EE is the ONE studio accent (CTAs, hover states, small inline glyphs only). The case-panel colors are CLIENT brands, not studio accents."
|
|
137
|
+
- "Auto-advancing hero sliders / cycling headline words — refused"
|
|
138
|
+
- "Stat-card triads (100K CLIENTS / 4.9 STAR / 12 YEARS) — the case grid speaks for the studio's scale, no stat cards needed"
|
|
139
|
+
- "Grain overlay on any surface — this register is CRISP paper, not textured"
|
|
140
|
+
- "Studio-name mono-caps corner tag anywhere on the page — the studio's brand shows up ONCE as a nav wordmark and ONCE as a footer wordmark, that's it"
|
|
141
|
+
- "Emoji or decorative unicode glyphs — inline marks are bespoke SVG shapes only"
|
|
142
|
+
|
|
143
|
+
banned_defaults:
|
|
144
|
+
# Global blocklist from BESPOKE_THEME_SYSTEM.md
|
|
145
|
+
- "claude-cream (#F4F1EA + serif + #D97757)"
|
|
146
|
+
- "void+acid (near-black bg + single bright acid-green or vermilion accent)"
|
|
147
|
+
- "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)"
|
|
148
|
+
- "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
|
|
149
|
+
- "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
|
|
150
|
+
# Base-specific
|
|
151
|
+
- "studio-brand-as-accent (the case-panel colors are CLIENT brands. The moment you use one of them as the studio's accent, the register collapses — studio chrome stays neutral, only browser-blue is the studio accent.)"
|
|
152
|
+
- "case-panels-in-uniform-grid (the panel bento must break sizes 2x1 / 1x1 / 3x2. A uniform 3-col grid of same-size panels reads as a template-generic 'Our Work' page, not a considered showcase.)"
|
|
153
|
+
- "agency-badge-in-hero-headline (the studio positioning line is a SMALL floating pill above the hero. Rendering it as the hero H1 collapses the composition into every-agency-website — 'we are a global design agency that transforms brands' as the headline.)"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
|
|
2
|
+
|
|
3
|
+
export const tokens = {
|
|
4
|
+
slug: "case-panel",
|
|
5
|
+
family: "C",
|
|
6
|
+
base: "27",
|
|
7
|
+
palette: {
|
|
8
|
+
"bg": "#FFFFFF",
|
|
9
|
+
"surface": "#F3F4F6",
|
|
10
|
+
"ink": "#06070A",
|
|
11
|
+
"accent": "#0000EE",
|
|
12
|
+
"mute": "#7F8694",
|
|
13
|
+
"invertedBg": "#171921",
|
|
14
|
+
"invertedInk": "#FFFFFF"
|
|
15
|
+
},
|
|
16
|
+
typography: {
|
|
17
|
+
"display": "UniversalSans (paid, from TypeMates equivalent) or Inter Display / General Sans as broader-market fallback — weight 700 (very bold, \"740-headline\" in the reference maps to Inter Display 800-900 in practice), letter-spacing -0.04em at hero scale (-2.96px at 74px). At scale — 74px hero-headline, 52px section-title, 40px subhead, 28-30px case-panel title inside each brand panel. UniversalSans is the reference face (its tight negative tracking + bold weight is the exact register); Inter Display is the safest free approximation with similar bold-sans proportions.",
|
|
18
|
+
"body": "UniversalSans-500 same family — 500 weight, 15-18px body copy, line-height 1.5. This theme's discipline is ONE type family across display + body (the studio's chrome speaks quietly so client brands dominate), but the body uses the LIGHTER weight to contrast with the hero's very-bold.",
|
|
19
|
+
"mono": "none. Case Panel is a consumer-portfolio surface — mono has no legitimate role here. Numbered indices (01, 02, 03) use the body face at bold weight, NOT a mono variant.",
|
|
20
|
+
"scale": "1.414 (augmented fourth — deliberately wide contrast so bold display shouts and the light body captions settle)"
|
|
21
|
+
},
|
|
22
|
+
surface: "web",
|
|
23
|
+
density: "balanced",
|
|
24
|
+
motion: "Ships live in the section renderer (no external dependencies):\n1. Hero headline scroll-triggered reveal via IntersectionObserver — bottom-up + fade, 700ms cubic-bezier(0.19,1,0.22,1).\n2. Case-panel grid stagger reveal — each brand panel enters from opacity 0 + translateY(12px) with 80ms stagger, 600ms cubic-bezier per panel.\n3. Case-panel hover — subtle 1.01 scale + 200ms cubic-bezier transition. On hover the panel's brand-color darkens 8% so it reads as clickable without changing character.\n4. Nav client-rotator (small marquee-adjacent) — a rotating \"trusted by\" list of client brand names cycles vertically (roll every 2.5s per name, 400ms cubic-bezier easing). Small text only, no huge marquee — this is a subtle nav ornament, not a hero move.\n5. Filter-chip active state — the category chips on the right rail highlight one-at-a-time when clicked; grid re-renders filtered instantly (no cross-fade transition, no loading state — instant like a filter should be).\n6. FAQ accordion — each FAQ row expands 400ms cubic-bezier on click, chevron rotates 180deg. Only one open at a time (accordion, not multi-open).\n7. Featured-news card hover — subtle image scale(1.03) + 400ms cubic-bezier. Card frame stays flat; only the image inside moves.\n8. prefers-reduced-motion: reduce — all keyframe animations disabled, hero at final state, stagger disabled, hover transitions instant, client-rotator paused. State changes still fire (they're content, not decoration).\n\nCustomer installs these as dependencies for the deeper motion tier:\n- Lenis — smooth inertial scroll (the section rhythm needs inertial scroll to feel considered at agency-tier polish).\n- GSAP ScrollTrigger — the hero reveal + case-panel stagger + featured-news scroll-reveal all benefit from orchestrated timelines.\n- Custom branded preloader with the studio wordmark drawing in from small to large over the white ground.\n\nMotion character: precise, considered, professional. Custom cubic-bezier(0.19,1,0.22,1) (ease-out-expo) for reveal easings. Nothing bouncy, nothing playful — the studio speaks with restraint so client work can shout.\n",
|
|
25
|
+
signature: "Big bold sans-serif hero at 74px, letter-spacing crushed to -0.04em,\nset on pure white canvas. A small dark navy pill sits ABOVE the hero\n(\"Parable is a global branding and UX design agency\" — the studio's\npositioning line, treated as a floating badge not a headline).\nThe signature move sits BELOW the hero: a bento-style grid of 8-12\ncase-study panels, each a full-bleed brand-colored rectangle\nrepresenting a fictional client.\nPanels alternate: some are pure color-plus-brand-name (in the\nclient's own imagined typeface, big and centered), others hold a\nsmall product screenshot with the brand name at the corner, others\nhold a lifestyle photograph. Panel sizes vary 2x1 / 1x1 / 3x2 to\nbreak the uniform-grid slop. On the right rail of the hero, a\nvertical stack of category filter chips (Branding / Digital\nFeatures / Websites / Development / Content / Generative AI). Below\nthe case grid, a workflow strip with 4 numbered process steps in\nlarge bold type. Featured News section with 3 image-headed cards.\nDark navy `#171921` FAQ band with white text — accordion rows,\nchevron rotates on expand. Cream/tan `#F3F4F6` footer band with\nwordmark + column navigation. Border-radius 0 everywhere — no\nrounded cards, buttons, inputs, media. Brand character sits in the\ncase-panel grid (the client work IS the design) and the studio's\nrestraint (nav, headers, chrome all step aside) — not in\ndecoration, not in mono-caps eyebrows, not in stat-card triads.\n",
|
|
26
|
+
} as const;
|
|
27
|
+
|
|
28
|
+
export type Tokens = typeof tokens;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Design Direction — Cinematic-Dark
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Tesla blackout · Cybertruck steel · Masters/Rolex luxury · Nike type · Mercedes engineered minimalism
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Near-black backgrounds with restrained brand-green and Rolex-gold accents. Condensed display type, cinematic film-grain texture, slow ambient motion. Reads like a Tesla launch site or a premium product film, not like an app.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Tesla** → blackout marketing site. The void is the canvas; product is the only light source.
|
|
11
|
+
- **Cybertruck** → raw stainless steel. Surface honesty, visible panel gaps, no decoration.
|
|
12
|
+
- **Masters Tournament** → restrained heritage green. The single saturated color, used sparingly.
|
|
13
|
+
- **Rolex** → champagne gold accents. Focus rings, sheens, gradient text — the luxury detail.
|
|
14
|
+
- **Nike** → condensed all-caps display type. Broadcast-poster headlines, athletic confidence.
|
|
15
|
+
- **Mercedes-Benz** → engineered minimalism. Hairline borders as panel gaps, nothing arbitrary.
|
|
16
|
+
|
|
17
|
+
## Tokens
|
|
18
|
+
HSL triples in `src/index.css`. Every token's `from:` comment names its brand origin — untraceable tokens fail review. Brand tokens: `--gold` (Rolex 41 champagne), `--gold-deep` (Rolex engraved-bezel anchor for gradients), `--tech-blue` (Tesla HUD), `--steel` (Cybertruck stainless), `--ink` (the blackout itself).
|
|
19
|
+
|
|
20
|
+
Surface stack steps in 3-4% lightness from `bg → card → popover → secondary → muted → accent`, holding a constant `220` blue-biased hue. Depth comes from **hairline borders and glow utilities**, not from fill contrast.
|
|
21
|
+
|
|
22
|
+
Pure black is forbidden; `--background` is `220 18% 4%` (near-black with a slight blue bias — Tesla blackout, not OLED-off). Pure white is forbidden; `--foreground` is `40 30% 96%` (warm film-print off-white).
|
|
23
|
+
|
|
24
|
+
## Typography
|
|
25
|
+
- **Display:** Anton (Nike condensed headline feel). Single weight 400 — Anton ships as one cut. All-caps friendly, positive tracking required.
|
|
26
|
+
- **Body:** Manrope (Tesla/Mercedes engineered geometric sans). Weights 400/500/600/700.
|
|
27
|
+
- **Mono:** JetBrains Mono. Reserved for tabular numerics — stats, specs, lap-times, prices. Instrument cluster heritage.
|
|
28
|
+
|
|
29
|
+
Heading tracking is **`0.04em`** — positive, because condensed display in dark mode needs the air. Body tracking is `0.01em`. Font features: `"ss01", "ss02", "tnum", "cv11"`. H1 uses `clamp(3rem, 9vw, 7.5rem)` — cinematic title-card scale. Display headings should default to `text-transform: uppercase`.
|
|
30
|
+
|
|
31
|
+
## Spacing
|
|
32
|
+
- **Container:** `max-w-7xl px-6 lg:px-10` — wide. Hero video and 21:9 cinematic stills demand the screen.
|
|
33
|
+
- **Section padding tiers:**
|
|
34
|
+
- Hero: `pt-24 pb-16 lg:pt-36 lg:pb-24` — generous, the title card breathes
|
|
35
|
+
- Default: `py-20 lg:py-32`
|
|
36
|
+
- Tight: `py-12 lg:py-16`
|
|
37
|
+
- **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 80 96 128 160. Medium density — engineered, not crammed, not airy.
|
|
38
|
+
|
|
39
|
+
## Color
|
|
40
|
+
No hex anywhere in component files. All color via tokens. Opacity via `/N` modifier on token. The green (`--primary`) and the gold (`--gold`) are **never used together at full saturation on the same surface** — they fight. Convention: gold for accents, focus, and luxury detail; green for status, brand mark, and rare CTA dots only.
|
|
41
|
+
|
|
42
|
+
## Radius
|
|
43
|
+
`--radius: 0.4rem`. **Tight, engineered chamfer — not soft, not knife-edge.** Pills are disallowed (`pillsAllowed: false`) — pills read SaaS dashboard; cinematic UI uses rectangles with precise corners.
|
|
44
|
+
|
|
45
|
+
## Shadows
|
|
46
|
+
**Glow style.** Two utilities, both for media-rich surfaces:
|
|
47
|
+
- `.glow-gold` — `0 0 0 1px gold/0.35, 0 8px 24px gold/0.18, 0 40px 120px gold/0.22`. Multi-layer big-blur ambient halo plus a 1px gold hairline ring. Use on hero product cards, framed video tiles, gallery features.
|
|
48
|
+
- `.glow-cyan` — same construction with `--tech-blue`. Use on tech/spec cards, HUD-style data callouts, anything that should feel instrumented.
|
|
49
|
+
|
|
50
|
+
Conventional drop shadows are forbidden. The glow IS the elevation language.
|
|
51
|
+
|
|
52
|
+
## Motion
|
|
53
|
+
Six keyframes. Durations cluster at **0.9s (reveal), 2-3s (loops), 24-36s (ambient)**:
|
|
54
|
+
- `rise-in` (900ms once) — opacity + 32px translate. Section entrance, title cards, product reveals.
|
|
55
|
+
- `marquee` (36000ms infinite) — `translateX(0 → -50%)`. Logo/spec strip, broadcast lower-third pace.
|
|
56
|
+
- `ken-burns` (24000ms infinite) — scale 1.05 → 1.18 with subtle translate. Hero still drift, cinematic camera push.
|
|
57
|
+
- `bob` (3000ms infinite) — 6px vertical sway. Scroll-hint and floating product call-outs.
|
|
58
|
+
- `pulse-glow` (2400ms infinite) — expanding gold box-shadow ring. Heartbeat for the single hero CTA, **one per page max**.
|
|
59
|
+
- `sheen` (2200ms infinite) — background-position sweep. Gradient-gold text and border light-sweep, Rolex caseback feel.
|
|
60
|
+
|
|
61
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — every keyframe is wrapped in the media query and ambient loops drop to a static frame.
|
|
62
|
+
|
|
63
|
+
## Component patterns
|
|
64
|
+
- **Buttons:** text-link CTAs by default (foreground color, underline on hover). Tertiary CTAs use the **gradient-gold utility** (`--gold` → `--gold-deep`) on the text itself. The **single hero action per page** is allowed solid — and the canonical TGA implementation is an **App Store badge image**, not a custom fill button. **Never a green-fill button** — brand-mark green is too saturated for button faces and reads cheap.
|
|
65
|
+
- **Cards:** sharp `rounded-[0.4rem]` corners, hairline `--border`, `bg-card` one stop above blackout. Padding `p-6 lg:p-10`. Optional `.glow-gold` or `.glow-cyan` for hero or feature cards holding rich media.
|
|
66
|
+
- **Inputs:** thin all-around border (1px `--border`) plus emphasized bottom border, `bg-card`, `rounded-[0.4rem]`. Label above in condensed display, `tracking-[0.08em] uppercase`. Focus ring is **gold, 1px** — not green.
|
|
67
|
+
- **CTAs:** text-link with gradient-gold for tertiary; App Store badge image for the single hero action. Never a green rectangle. `pulse-glow` ring permitted on the one hero CTA only.
|
|
68
|
+
|
|
69
|
+
## Recommended rich media
|
|
70
|
+
Cover: 4K background video loops (drone shots of mountains/architecture, slow machinery, sport footage), 21:9 cinematic still photography with film-grain overlay, color grading toward **teal-and-amber** (Hollywood blockbuster palette), gold-tinted product shots.
|
|
71
|
+
|
|
72
|
+
**AI tool recommendations:**
|
|
73
|
+
- **Sora / Runway / Pika** — hero video loops at 21:9. Prompt with shot language: "drone push-in," "anamorphic lens flare-free," "slow-motion machinery."
|
|
74
|
+
- **Midjourney / Flux** — stills. Include in every prompt: `cinematic film grain, anamorphic lens, teal and amber color grade, 21:9`.
|
|
75
|
+
- **Topaz Video AI** — upscaling and frame-interpolation for stock or AI-generated footage that needs to hit 4K.
|
|
76
|
+
|
|
77
|
+
**Aspect ratios:** hero videos **21:9 or 16:9**, never vertical except for phone-mockup product shots. Galleries: 21:9 stills mixed with 4:5 portraits — the deck is wide.
|
|
78
|
+
|
|
79
|
+
**Performance:** hero videos **≤6 MB**, encoded **AV1 or H.265**, `autoplay muted loop playsinline`. Mobile fallback to the still poster — never ship a video to small screens.
|
|
80
|
+
|
|
81
|
+
**Avoid:** bright/saturated stock photography (kills the blackout), vertical 9:16 video (TikTok aesthetic, not cinematic), lens-flare overlays (Y2K aesthetic, not cinematic), drop-shadow product cutouts on bg (use glow instead).
|
|
82
|
+
|
|
83
|
+
**Accessibility:** every video has a still **poster** attribute; every still has descriptive alt-text naming the cinematic feel ("aerial drone shot of fog rolling over mountain ridge at dawn"). Captions on any video with dialogue or scored narration.
|
|
84
|
+
|
|
85
|
+
## Component families
|
|
86
|
+
None at install time. Family conventions emerge as the project grows; the Director appends them here as they're established. Likely first families: `HeroVideoCard`, `SpecGrid` (mono numerics + gold dividers), `MarqueeStrip`, `GoldGradientText`.
|
|
87
|
+
|
|
88
|
+
## Details
|
|
89
|
+
- **Selection:** `hsl(var(--gold) / 0.3)` background, foreground text. Gold, not green — selection is a luxury accent, not a status.
|
|
90
|
+
- **Focus ring:** `1px solid hsl(var(--gold))`. Thin, warm — engineered, not loud.
|
|
91
|
+
- **Scrollbar:** thin.
|
|
92
|
+
|
|
93
|
+
## Exceptions
|
|
94
|
+
None yet. When an intentional one-of-one violation lands, add it here with the reason.
|
|
95
|
+
|
|
96
|
+
## Revisions
|
|
97
|
+
- Initial direction, generated at install time.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
export const cinematicDark: Direction = {
|
|
4
|
+
name: "cinematic-dark",
|
|
5
|
+
ethos: "Tesla blackout · Cybertruck steel · Masters/Rolex luxury · Nike type",
|
|
6
|
+
references: [
|
|
7
|
+
{ brand: "Tesla", trait: "blackout marketing site" },
|
|
8
|
+
{ brand: "Cybertruck", trait: "raw stainless steel surface" },
|
|
9
|
+
{ brand: "Masters Tournament", trait: "restrained heritage green" },
|
|
10
|
+
{ brand: "Rolex", trait: "champagne gold accents" },
|
|
11
|
+
{ brand: "Nike", trait: "condensed all-caps display type" },
|
|
12
|
+
{ brand: "Mercedes-Benz", trait: "engineered minimalism" },
|
|
13
|
+
],
|
|
14
|
+
feel:
|
|
15
|
+
"Near-black backgrounds with restrained brand-green and Rolex-gold accents. " +
|
|
16
|
+
"Condensed display type, cinematic film-grain texture, slow ambient motion. " +
|
|
17
|
+
"Reads like a Tesla launch site or a premium product film, not like an app.",
|
|
18
|
+
|
|
19
|
+
fonts: {
|
|
20
|
+
display: {
|
|
21
|
+
family: "Anton",
|
|
22
|
+
fallback: ["Oswald", "Impact", "Haettenschweiler", "Arial Narrow Bold", "sans-serif"],
|
|
23
|
+
from: "Nike condensed headline feel — all-caps friendly, broadcast-poster weight",
|
|
24
|
+
googleFont: "Anton",
|
|
25
|
+
weights: [400],
|
|
26
|
+
},
|
|
27
|
+
body: {
|
|
28
|
+
family: "Manrope",
|
|
29
|
+
fallback: ["Inter", "system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
30
|
+
from: "geometric modern sans — Tesla/Mercedes engineered-feel body copy",
|
|
31
|
+
googleFont: "Manrope",
|
|
32
|
+
weights: [400, 500, 600, 700],
|
|
33
|
+
},
|
|
34
|
+
mono: {
|
|
35
|
+
family: "JetBrains Mono",
|
|
36
|
+
fallback: ["Berkeley Mono", "ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
37
|
+
from: "tabular numerics for stats, specs, lap-times — instrument cluster heritage",
|
|
38
|
+
googleFont: "JetBrains+Mono",
|
|
39
|
+
weights: [400, 500],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
typography: {
|
|
44
|
+
headingTracking: "0.04em", // condensed display reads better with positive tracking — broadcast feel
|
|
45
|
+
bodyTracking: "0.01em",
|
|
46
|
+
fontFeatureSettings: '"ss01", "ss02", "tnum", "cv11"',
|
|
47
|
+
h1ScaleClamp: "clamp(3rem, 9vw, 7.5rem)", // oversized — cinematic title-card scale
|
|
48
|
+
bodyBaseSize: "1rem", // 16px — comfortable on dark surfaces
|
|
49
|
+
bodyLineHeight: "1.6",
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
colors: {
|
|
53
|
+
background: { hsl: "220 18% 4%", from: "Tesla blackout — near-black with a slight blue bias" },
|
|
54
|
+
foreground: { hsl: "40 30% 96%", from: "warm off-white — film-print white, never pure" },
|
|
55
|
+
card: { hsl: "220 16% 7%", from: "elevated surface, one stop up from blackout" },
|
|
56
|
+
popover: { hsl: "220 14% 9%", from: "popover/menu surface, two stops up" },
|
|
57
|
+
primary: { hsl: "150 64% 42%", from: "Masters green, restrained — heritage tournament mark" },
|
|
58
|
+
primaryForeground: { hsl: "220 18% 4%", from: "blackout on Masters green" },
|
|
59
|
+
secondary: { hsl: "220 12% 12%", from: "Cybertruck shadowed-steel, deeper tier" },
|
|
60
|
+
secondaryForeground: { hsl: "40 30% 96%", from: "warm white on dark steel" },
|
|
61
|
+
muted: { hsl: "220 10% 14%", from: "muted surface — same family as secondary, fractionally lighter" },
|
|
62
|
+
mutedForeground: { hsl: "40 12% 68%", from: "warm-tinted secondary text — film-still gray" },
|
|
63
|
+
accent: { hsl: "220 10% 16%", from: "hover surface, Cybertruck brushed-steel highlight" },
|
|
64
|
+
accentForeground: { hsl: "40 30% 96%", from: "warm white on accent steel" },
|
|
65
|
+
border: { hsl: "220 10% 18%", from: "Mercedes hairline panel-gap — engineered, visible only on inspection" },
|
|
66
|
+
input: { hsl: "220 10% 18%", from: "same as border — single hairline language" },
|
|
67
|
+
ring: { hsl: "41 62% 58%", from: "Rolex gold — focus ring is the luxury accent, never green" },
|
|
68
|
+
destructive: { hsl: "8 78% 52%", from: "Tesla brake-light red — warning lamp, not decoration" },
|
|
69
|
+
destructiveForeground: { hsl: "40 30% 96%", from: "warm white on brake-light red" },
|
|
70
|
+
brand: {
|
|
71
|
+
gold: { hsl: "41 62% 58%", from: "Rolex 41 — champagne dial, the canonical luxury accent" },
|
|
72
|
+
"gold-deep": { hsl: "38 55% 46%", from: "Rolex deeper gold — engraved bezel, gradient anchor" },
|
|
73
|
+
"tech-blue": { hsl: "205 100% 60%", from: "Tesla HUD blue — instrument cluster, autopilot lane lines" },
|
|
74
|
+
steel: { hsl: "220 9% 66%", from: "Cybertruck raw stainless — exoskeleton surface tone" },
|
|
75
|
+
ink: { hsl: "220 18% 4%", from: "the blackout — semantic background, also the void behind hero video" },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
spacing: {
|
|
80
|
+
base: 4,
|
|
81
|
+
scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160], // medium density — room for cinematic breathing
|
|
82
|
+
containerMax: "max-w-7xl", // wide — hero video and 21:9 stills need it
|
|
83
|
+
containerPadding: "px-6 lg:px-10",
|
|
84
|
+
sectionPadding: {
|
|
85
|
+
hero: "pt-24 pb-16 lg:pt-36 lg:pb-24",
|
|
86
|
+
default: "py-20 lg:py-32",
|
|
87
|
+
tight: "py-12 lg:py-16",
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
radius: {
|
|
92
|
+
base: "0.4rem", // tight, not soft — engineered chamfer, not pillow
|
|
93
|
+
pillsAllowed: false, // pills read app/dashboard; cinematic UI uses rectangles
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
shadows: {
|
|
97
|
+
style: "glow",
|
|
98
|
+
utilities: {
|
|
99
|
+
"glow-gold":
|
|
100
|
+
"0 0 0 1px hsl(var(--gold) / 0.35), " +
|
|
101
|
+
"0 8px 24px hsl(var(--gold) / 0.18), " +
|
|
102
|
+
"0 40px 120px hsl(var(--gold) / 0.22)",
|
|
103
|
+
"glow-cyan":
|
|
104
|
+
"0 0 0 1px hsl(var(--tech-blue) / 0.4), " +
|
|
105
|
+
"0 8px 24px hsl(var(--tech-blue) / 0.22), " +
|
|
106
|
+
"0 40px 120px hsl(var(--tech-blue) / 0.28)",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
motion: {
|
|
111
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
112
|
+
durations: {
|
|
113
|
+
reveal: 900, // rise-in, sheen — the entrance gesture
|
|
114
|
+
loop: 2400, // bob, pulse-glow — short ambient loops
|
|
115
|
+
ambient: 30000, // ken-burns, marquee — slow scene motion
|
|
116
|
+
},
|
|
117
|
+
keyframes: {
|
|
118
|
+
"marquee": {
|
|
119
|
+
css:
|
|
120
|
+
"from { transform: translateX(0); }\n" +
|
|
121
|
+
"to { transform: translateX(-50%); }",
|
|
122
|
+
defaultDuration: 36000,
|
|
123
|
+
iteration: "infinite",
|
|
124
|
+
purpose: "horizontal logo/spec strip — broadcast lower-third, very slow",
|
|
125
|
+
},
|
|
126
|
+
"ken-burns": {
|
|
127
|
+
css:
|
|
128
|
+
"0% { transform: scale(1.05) translate(0, 0); }\n" +
|
|
129
|
+
"100% { transform: scale(1.18) translate(-2%, -1%); }",
|
|
130
|
+
defaultDuration: 24000,
|
|
131
|
+
iteration: "infinite",
|
|
132
|
+
purpose: "hero still-image drift — cinematic camera push, 21:9 photography",
|
|
133
|
+
},
|
|
134
|
+
"rise-in": {
|
|
135
|
+
css:
|
|
136
|
+
"from { opacity: 0; transform: translateY(32px); }\n" +
|
|
137
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
138
|
+
defaultDuration: 900,
|
|
139
|
+
iteration: "once",
|
|
140
|
+
purpose: "section entrance — title cards and product reveals",
|
|
141
|
+
},
|
|
142
|
+
"bob": {
|
|
143
|
+
css:
|
|
144
|
+
"0%, 100% { transform: translateY(0); }\n" +
|
|
145
|
+
"50% { transform: translateY(-6px); }",
|
|
146
|
+
defaultDuration: 3000,
|
|
147
|
+
iteration: "infinite",
|
|
148
|
+
purpose: "scroll-hint indicator and floating product call-outs",
|
|
149
|
+
},
|
|
150
|
+
"pulse-glow": {
|
|
151
|
+
css:
|
|
152
|
+
"0%, 100% { box-shadow: 0 0 0 0 hsl(var(--gold) / 0.5); }\n" +
|
|
153
|
+
"50% { box-shadow: 0 0 0 12px hsl(var(--gold) / 0); }",
|
|
154
|
+
defaultDuration: 2400,
|
|
155
|
+
iteration: "infinite",
|
|
156
|
+
purpose: "single primary CTA highlight — heartbeat ring, never on more than one element per page",
|
|
157
|
+
},
|
|
158
|
+
"sheen": {
|
|
159
|
+
css:
|
|
160
|
+
"0% { background-position: -200% 0; }\n" +
|
|
161
|
+
"100% { background-position: 200% 0; }",
|
|
162
|
+
defaultDuration: 2200,
|
|
163
|
+
iteration: "infinite",
|
|
164
|
+
purpose: "gradient-gold text/border sheen — Rolex caseback light sweep",
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
respectsReducedMotion: true,
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
density: "medium",
|
|
171
|
+
|
|
172
|
+
patterns: {
|
|
173
|
+
button:
|
|
174
|
+
"Text-link CTAs by default (foreground color, underline-on-hover). " +
|
|
175
|
+
"Tertiary CTAs may use the gradient-gold utility (gold → gold-deep) on the text itself. " +
|
|
176
|
+
"The SINGLE hero action per page is allowed solid — and the canonical TGA implementation is an App Store badge image, not a fill button. " +
|
|
177
|
+
"Never a green-fill button: brand-mark green is too saturated for button faces and reads cheap.",
|
|
178
|
+
card:
|
|
179
|
+
"Sharp 0.4rem corners, hairline border (--border), bg-card one stop above blackout. " +
|
|
180
|
+
"Padding p-6 lg:p-10. Optional glow-gold or glow-cyan utility for hero/feature cards holding rich media.",
|
|
181
|
+
input:
|
|
182
|
+
"Bottom border + thin all-around border (1px --border), bg-card, 0.4rem radius. " +
|
|
183
|
+
"Label sits above in condensed display, tracking 0.08em uppercase. Focus ring is gold, 1px.",
|
|
184
|
+
cta:
|
|
185
|
+
"Text-link with gradient-gold utility for tertiary, App Store badge image for the single hero action. " +
|
|
186
|
+
"Never a green rectangle. Pulse-glow ring is allowed on the one hero CTA only.",
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
details: {
|
|
190
|
+
selectionBg: "hsl(var(--gold) / 0.3)",
|
|
191
|
+
selectionFg: "hsl(var(--foreground))",
|
|
192
|
+
focusRing: "1px solid hsl(var(--gold))",
|
|
193
|
+
scrollbarStyle: "thin",
|
|
194
|
+
},
|
|
195
|
+
};
|