@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,187 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// logistics-modern — Shippo / ShipBob / Flexport clean fulfillment dashboard.
|
|
4
|
+
// Cool-white canvas, signal blue, dense rate-comparison tables, network-map
|
|
5
|
+
// gravity. Reads like a logistics-ops console — productive, never decorative.
|
|
6
|
+
|
|
7
|
+
export const logisticsModern: Direction = {
|
|
8
|
+
name: "logistics-modern" as Direction["name"],
|
|
9
|
+
ethos:
|
|
10
|
+
"Shippo cool-white + carrier-tile chrome · ShipBob warm-blue dashboard density · Flexport ocean-navy + cargo-grid · " +
|
|
11
|
+
"ShipStation rate-table density · Easyship friendly carrier-comparison cards",
|
|
12
|
+
references: [
|
|
13
|
+
{ brand: "Shippo", trait: "cool-white canvas + carrier-tile rate cards" },
|
|
14
|
+
{ brand: "ShipBob", trait: "warm-blue dashboard density + fulfillment-network map" },
|
|
15
|
+
{ brand: "Flexport", trait: "ocean-navy + cargo-grid, freight-forwarding clarity" },
|
|
16
|
+
{ brand: "ShipStation", trait: "dense rate-table comparison, tabular numerics" },
|
|
17
|
+
{ brand: "Easyship", trait: "friendly carrier-comparison cards, integration-logo strip" },
|
|
18
|
+
],
|
|
19
|
+
feel:
|
|
20
|
+
"A logistics-ops console. Cool-white canvas, a single signal-blue accent, hairline borders carrying the structure. " +
|
|
21
|
+
"Rate-comparison tables are the hero — carriers × service-levels at a glance, prices in mono tabular. " +
|
|
22
|
+
"The fulfillment-network map is a working chart, not a decorative globe. Integration-logo strips read as proof, not " +
|
|
23
|
+
"social validation. The page is what an ops manager opens on a Tuesday at 8am.",
|
|
24
|
+
|
|
25
|
+
fonts: {
|
|
26
|
+
display: {
|
|
27
|
+
family: "Inter",
|
|
28
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
29
|
+
from: "Shippo / Flexport marketing display — Inter at semi-heavy weights",
|
|
30
|
+
googleFont: "Inter",
|
|
31
|
+
weights: [500, 600, 700],
|
|
32
|
+
},
|
|
33
|
+
body: {
|
|
34
|
+
family: "Inter",
|
|
35
|
+
fallback: ["system-ui", "-apple-system", "BlinkMacSystemFont", "sans-serif"],
|
|
36
|
+
from: "ShipBob / ShipStation body — Inter 14px, dashboard density",
|
|
37
|
+
googleFont: "Inter",
|
|
38
|
+
weights: [400, 500, 600],
|
|
39
|
+
},
|
|
40
|
+
mono: {
|
|
41
|
+
family: "IBM Plex Mono",
|
|
42
|
+
fallback: ["JetBrains Mono", "ui-monospace", "SFMono-Regular", "monospace"],
|
|
43
|
+
from: "rate tables, tracking numbers, weight/dim units — Plex Mono scans at row height",
|
|
44
|
+
googleFont: "IBM+Plex+Mono",
|
|
45
|
+
weights: [400, 500],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
typography: {
|
|
50
|
+
headingTracking: "-0.022em",
|
|
51
|
+
bodyTracking: "0",
|
|
52
|
+
fontFeatureSettings: '"tnum", "cv11", "ss01", "ss03"',
|
|
53
|
+
h1ScaleClamp: "clamp(2rem, 4vw, 3rem)",
|
|
54
|
+
bodyBaseSize: "0.9rem",
|
|
55
|
+
bodyLineHeight: "1.5",
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
colors: {
|
|
59
|
+
background: { hsl: "210 25% 98%", from: "Shippo cool-white — barely-blue canvas, not Mercury cream" },
|
|
60
|
+
foreground: { hsl: "215 35% 12%", from: "deep navy-ink — Flexport ops-console ink" },
|
|
61
|
+
card: { hsl: "0 0% 100%", from: "pure white card — lifts off cool-white background" },
|
|
62
|
+
popover: { hsl: "0 0% 100%", from: "same as card" },
|
|
63
|
+
primary: { hsl: "218 88% 46%", from: "ShipBob signal-blue — the one accent for CTA and selected state" },
|
|
64
|
+
primaryForeground: { hsl: "0 0% 100%", from: "white on signal-blue" },
|
|
65
|
+
secondary: { hsl: "210 22% 95%", from: "cool gray surface — table headers, inset panels" },
|
|
66
|
+
secondaryForeground: { hsl: "215 35% 12%", from: "ink on cool gray" },
|
|
67
|
+
muted: { hsl: "210 20% 94%", from: "muted cool gray — disabled rows" },
|
|
68
|
+
mutedForeground: { hsl: "215 12% 42%", from: "slate gray — table meta, weight units, timestamps" },
|
|
69
|
+
accent: { hsl: "218 70% 96%", from: "pale signal-blue hover — selected-row highlight" },
|
|
70
|
+
accentForeground: { hsl: "218 88% 28%", from: "deep signal-blue ink on pale" },
|
|
71
|
+
border: { hsl: "215 16% 86%", from: "cool hairline — the structural line in every table and card" },
|
|
72
|
+
input: { hsl: "215 16% 86%", from: "same as border" },
|
|
73
|
+
ring: { hsl: "218 88% 46%", from: "primary signal-blue — focus ring" },
|
|
74
|
+
destructive: { hsl: "356 72% 50%", from: "alert red — distinct from any blue accent, used for failed-delivery/error" },
|
|
75
|
+
destructiveForeground: { hsl: "0 0% 100%", from: "white on alert red" },
|
|
76
|
+
brand: {
|
|
77
|
+
"signal-blue": { hsl: "218 88% 46%", from: "= primary; ShipBob signal" },
|
|
78
|
+
"signal-blue-deep": { hsl: "218 84% 32%", from: "hover, gradient anchor, sidebar surface" },
|
|
79
|
+
"signal-blue-soft": { hsl: "218 70% 96%", from: "selected-row bg, network-line halo" },
|
|
80
|
+
"ocean-navy": { hsl: "212 60% 22%", from: "Flexport ocean-navy — used on sidebar and map basemap" },
|
|
81
|
+
"freight-amber": { hsl: "32 92% 52%", from: "transit-in-progress amber — semantic only" },
|
|
82
|
+
"delivered-green": { hsl: "146 60% 38%", from: "delivered/active status — semantic only" },
|
|
83
|
+
"map-land": { hsl: "210 22% 93%", from: "map basemap land — recessive" },
|
|
84
|
+
"map-route": { hsl: "218 88% 46%", from: "shipment route line — same as primary signal" },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
spacing: {
|
|
89
|
+
base: 4,
|
|
90
|
+
scale: [2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 32, 40, 48, 64],
|
|
91
|
+
containerMax: "max-w-7xl",
|
|
92
|
+
containerPadding: "px-4 lg:px-6",
|
|
93
|
+
sectionPadding: {
|
|
94
|
+
hero: "pt-12 pb-8 lg:pt-16 lg:pb-12",
|
|
95
|
+
default: "py-10 lg:py-14",
|
|
96
|
+
tight: "py-6 lg:py-10",
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
radius: {
|
|
101
|
+
base: "0.375rem",
|
|
102
|
+
pillsAllowed: true,
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
shadows: {
|
|
106
|
+
style: "minimal",
|
|
107
|
+
utilities: {
|
|
108
|
+
"shadow-card":
|
|
109
|
+
"0 1px 2px hsl(215 35% 12% / 0.04), 0 1px 2px hsl(215 35% 12% / 0.03)",
|
|
110
|
+
"shadow-popover":
|
|
111
|
+
"0 4px 14px hsl(215 35% 12% / 0.08), 0 1px 2px hsl(215 35% 12% / 0.06)",
|
|
112
|
+
"shadow-table-row":
|
|
113
|
+
"inset 0 -1px 0 hsl(var(--border))",
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
motion: {
|
|
118
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
119
|
+
durations: {
|
|
120
|
+
reveal: 200,
|
|
121
|
+
loop: 1400,
|
|
122
|
+
ambient: 2400,
|
|
123
|
+
},
|
|
124
|
+
keyframes: {
|
|
125
|
+
"fade-in": {
|
|
126
|
+
css:
|
|
127
|
+
"from { opacity: 0; }\n" +
|
|
128
|
+
"to { opacity: 1; }",
|
|
129
|
+
defaultDuration: 200,
|
|
130
|
+
iteration: "once",
|
|
131
|
+
purpose: "table-row and carrier-card entrance — opacity only",
|
|
132
|
+
},
|
|
133
|
+
"route-dash": {
|
|
134
|
+
css:
|
|
135
|
+
"from { stroke-dashoffset: 0; }\n" +
|
|
136
|
+
"to { stroke-dashoffset: -24; }",
|
|
137
|
+
defaultDuration: 1400,
|
|
138
|
+
iteration: "infinite",
|
|
139
|
+
purpose: "in-transit shipment routes on the network map flow with a dashed line",
|
|
140
|
+
},
|
|
141
|
+
"row-hover": {
|
|
142
|
+
css:
|
|
143
|
+
"from { background-color: transparent; }\n" +
|
|
144
|
+
"to { background-color: hsl(var(--accent)); }",
|
|
145
|
+
defaultDuration: 120,
|
|
146
|
+
iteration: "once",
|
|
147
|
+
purpose: "rate-table row hover transition — almost imperceptible",
|
|
148
|
+
},
|
|
149
|
+
"shimmer": {
|
|
150
|
+
css:
|
|
151
|
+
"0% { background-position: -200% 0; }\n" +
|
|
152
|
+
"100% { background-position: 200% 0; }",
|
|
153
|
+
defaultDuration: 1400,
|
|
154
|
+
iteration: "infinite",
|
|
155
|
+
purpose: "loading skeleton for rate-comparison cells while carriers respond",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
respectsReducedMotion: true,
|
|
159
|
+
},
|
|
160
|
+
|
|
161
|
+
density: "high",
|
|
162
|
+
|
|
163
|
+
patterns: {
|
|
164
|
+
button:
|
|
165
|
+
"Solid signal-blue primary (rounded-md, shadow-card) for the single commit — Buy label, Connect carrier. " +
|
|
166
|
+
"Secondary is ghost (border + foreground). Tertiary is text-link blue. " +
|
|
167
|
+
"Hover deepens fill to signal-blue-deep; no scale, no shadow growth.",
|
|
168
|
+
card:
|
|
169
|
+
"Rounded-md, 1px --border, bg-card, shadow-card. Padding p-4 lg:p-5. " +
|
|
170
|
+
"Carrier-rate card holds carrier logo, service level, price, ETA — modular, one purpose. " +
|
|
171
|
+
"Title in display sans, price in mono tabular.",
|
|
172
|
+
input:
|
|
173
|
+
"Full rounded-md box, 1px --input border, bg-card. Tracking-number input is mono. " +
|
|
174
|
+
"Focus = 2px signal-blue ring at 45% opacity. Weight/dim inputs right-aligned mono.",
|
|
175
|
+
cta:
|
|
176
|
+
"Primary signal-blue button for Buy label / Connect. " +
|
|
177
|
+
"Status pills: freight-amber for in-transit, delivered-green for delivered, destructive for failed. " +
|
|
178
|
+
"Rate-table selected row uses signal-blue-soft bg with a left-edge signal-blue accent bar.",
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
details: {
|
|
182
|
+
selectionBg: "hsl(var(--primary) / 0.22)",
|
|
183
|
+
selectionFg: "hsl(var(--foreground))",
|
|
184
|
+
focusRing: "2px solid hsl(var(--ring) / 0.45)",
|
|
185
|
+
scrollbarStyle: "thin",
|
|
186
|
+
},
|
|
187
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Design Direction — Magazine-Glossy
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Vogue cover masthead · Vanity Fair Hollywood-issue display Didone · Harper's Bazaar Brodovitch composition · T Magazine cream stock · Document Journal photo-essay strip
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
Cream paper stock with oversized Didone display headlines and a heavy reliance on full-bleed editorial photography. The page is a slow, considered glossy magazine spread — large image, single caption block, sparse type. Color is restrained to ink, cream, blush, and a single deep editorial accent (oxblood). Atmosphere over information density.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Vogue** → oversized Didone masthead, cover-line typography.
|
|
11
|
+
- **Vanity Fair** → Hollywood-issue feature openers, contributor portraits, oxblood accent.
|
|
12
|
+
- **Harper's Bazaar** → Brodovitch asymmetric photo composition, type married to image.
|
|
13
|
+
- **T Magazine** → cream stock + photographic full-bleed editorial.
|
|
14
|
+
- **Document Journal** → photo-essay strip, generous caption blocks.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
HSL triples in `src/index.css`. Brand tokens: `--ink`, `--cream`, `--oxblood`, `--blush`, `--ink-soft`, `--photo-frame`. The warm ink (`hsl(20 25% 10%)`) has a deliberate brown undertone — pure black reads dot-matrix; this reads Bodoni-printed.
|
|
18
|
+
|
|
19
|
+
Primary accent is **Vanity Fair oxblood** (`hsl(350 35% 30%)`) — one deep editorial color. Blush (`hsl(16 35% 84%)`) is the Bazaar page-trim accent, used for hover and inset panels.
|
|
20
|
+
|
|
21
|
+
## Typography
|
|
22
|
+
- **Display:** Bodoni Moda (Vogue/Vanity Fair high-contrast Didone). Tracking `-0.025em` — very tight, masthead feel.
|
|
23
|
+
- **Body:** Cormorant Garamond (T Magazine body serif). 17px / `line-height: 1.7` — magazine pacing.
|
|
24
|
+
- **Mono:** JetBrains Mono. Photo credits, contributor titles, captions — always small-caps with positive tracking.
|
|
25
|
+
|
|
26
|
+
H1 uses `clamp(3.5rem, 10vw, 8rem)` — oversized cover-line scale.
|
|
27
|
+
|
|
28
|
+
## Spacing
|
|
29
|
+
- **Container:** `max-w-6xl px-6 lg:px-12` — full-bleed photography needs the width.
|
|
30
|
+
- **Section padding:** hero `pt-24 pb-16 lg:pt-36 lg:pb-24`; default `py-20 lg:py-32`; tight `py-12 lg:py-16`.
|
|
31
|
+
- **Scale:** 4 6 8 12 16 20 24 32 48 64 96 128. Glossy breathes.
|
|
32
|
+
|
|
33
|
+
## Color
|
|
34
|
+
No hex in components. Color belongs to the photography, not the chrome. White is forbidden — `--cream` replaces it. The four colors of the page are ink, cream, blush, oxblood.
|
|
35
|
+
|
|
36
|
+
## Radius
|
|
37
|
+
`--radius: 0`. **Sharp corners only.** Photo frames are rectangles. Pills disallowed — every glossy magazine spread frames its image with a straight rule.
|
|
38
|
+
|
|
39
|
+
## Shadows
|
|
40
|
+
Soft. Two utilities: `.photo-frame` (single bottom hairline beneath captions) and `.page-lift` (a subtle 8px / 32px glossy-paper lift). Glows are forbidden — atmosphere is photographic, not luminous.
|
|
41
|
+
|
|
42
|
+
## Motion
|
|
43
|
+
Two keyframes. `fade-rise` (1100ms) — slow magazine-spread settle. `image-breathe` (24,000ms infinite) — very slow ken-burns on hero photography, honors reduced-motion by pausing.
|
|
44
|
+
|
|
45
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`.
|
|
46
|
+
|
|
47
|
+
## Component patterns
|
|
48
|
+
- **Buttons:** text-link CTAs in `--ink`, underline on hover. The single Subscribe is the only solid: `--ink` bg + `--cream` fg, sharp rect, no radius. Never a colored fill — color is for photography.
|
|
49
|
+
- **Cards:** top + bottom hairlines only. Background `--cream`. Title in Bodoni, kicker in mono caps. Padding `p-8 lg:p-12`. Captions live in mono italic.
|
|
50
|
+
- **Inputs:** border-bottom only. Mono small-caps label above, Cormorant italic placeholder.
|
|
51
|
+
- **CTA links:** text-link in `--ink`, underline on hover. **Never a colored chip.**
|
|
52
|
+
|
|
53
|
+
## Bespoke section
|
|
54
|
+
Featured-story photo-essay strip (one big full-bleed image with a generous caption block: image-credit, story-kicker, title, deck) + a contributor strip with four writers / photographers each with a circular portrait, name in Bodoni, role + contribution count in mono caps + a subscriber-prompt card with email-capture + tier-label. The composition is asymmetric — Bazaar/Brodovitch tradition — not a centered hero with three pillars.
|
|
55
|
+
|
|
56
|
+
## Recommended rich media
|
|
57
|
+
Photography is everything. Editorial portraiture (Annie Leibovitz lighting), fashion shoots (Steven Meisel composition), or Brodovitch-style high-contrast b&w. Always full-bleed within the photo frame; captions sit *under* the image with credits in mono italic.
|
|
58
|
+
|
|
59
|
+
**AI tool recommendations:** Midjourney prompts like *"Vogue cover portrait, Steven Meisel lighting, 85mm, Kodak Portra 400, magazine-glossy print"*. For abstract atmospheric shots: *"Harper's Bazaar Brodovitch, high-contrast b&w, asymmetric composition"*. Avoid newsroom photojournalism (newspaper-classic territory) and tech-product renders.
|
|
60
|
+
|
|
61
|
+
**Aspect ratios:** 4:5 portrait (the magazine page) or 3:2 landscape. Never 16:9. Captions are mandatory, in mono italic: *"Photographed by Helmut Newton, Paris, 1975."*
|
|
62
|
+
|
|
63
|
+
**Avoid:** stock photography, animated GIFs, dark moody product shots, gradient backgrounds, glassmorphic anything, pill-shaped chips, drop shadows, lens flare, AI photos with uncanny features.
|
|
64
|
+
|
|
65
|
+
## Details
|
|
66
|
+
- **Selection:** `hsl(var(--primary) / 0.18)` (oxblood at 18%).
|
|
67
|
+
- **Focus ring:** `1px solid hsl(var(--ring))`.
|
|
68
|
+
- **Scrollbar:** thin.
|
|
69
|
+
|
|
70
|
+
## Exceptions
|
|
71
|
+
None yet.
|
|
72
|
+
|
|
73
|
+
## Revisions
|
|
74
|
+
- Initial direction.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { Direction } from "../schema";
|
|
2
|
+
|
|
3
|
+
// Note: "magazine-glossy" is not yet in the Direction["name"] enum.
|
|
4
|
+
// The schema is closed; until it is extended this file casts the name.
|
|
5
|
+
|
|
6
|
+
export const magazineGlossy: Direction = {
|
|
7
|
+
name: "magazine-glossy" as Direction["name"],
|
|
8
|
+
ethos: "Vogue cover masthead · Vanity Fair Hollywood-issue display Didone · Harper's Bazaar Brodovitch composition · T Magazine cream stock · Document Journal photo-essay strip",
|
|
9
|
+
references: [
|
|
10
|
+
{ brand: "Vogue", trait: "oversized Didone masthead, cover-line typography" },
|
|
11
|
+
{ brand: "Vanity Fair", trait: "Hollywood-issue feature openers, contributor portraits" },
|
|
12
|
+
{ brand: "Harper's Bazaar", trait: "Brodovitch asymmetric photo composition, type married to image" },
|
|
13
|
+
{ brand: "T Magazine (NYT)", trait: "cream stock + photographic full-bleed editorial" },
|
|
14
|
+
{ brand: "Document Journal", trait: "photo-essay strip, generous caption blocks" },
|
|
15
|
+
],
|
|
16
|
+
feel:
|
|
17
|
+
"Cream paper stock with oversized Didone display headlines and a heavy reliance on full-bleed editorial photography. " +
|
|
18
|
+
"The page is a slow, considered glossy magazine spread — large image, single caption block, sparse type. " +
|
|
19
|
+
"Color is restrained to ink, cream, blush, and a single deep editorial accent. Atmosphere over information density.",
|
|
20
|
+
|
|
21
|
+
fonts: {
|
|
22
|
+
display: {
|
|
23
|
+
family: "Bodoni Moda",
|
|
24
|
+
fallback: ["Didot", "Bodoni 72", "Playfair Display", "Georgia", "serif"],
|
|
25
|
+
from: "Vogue/Vanity Fair high-contrast Didone — masthead cover-line feel",
|
|
26
|
+
googleFont: "Bodoni+Moda",
|
|
27
|
+
weights: [400, 500, 700, 900],
|
|
28
|
+
},
|
|
29
|
+
body: {
|
|
30
|
+
family: "Cormorant Garamond",
|
|
31
|
+
fallback: ["EB Garamond", "Iowan Old Style", "Georgia", "serif"],
|
|
32
|
+
from: "T Magazine body serif — humanist, breathes against Bodoni display",
|
|
33
|
+
googleFont: "Cormorant+Garamond",
|
|
34
|
+
weights: [400, 500, 600],
|
|
35
|
+
},
|
|
36
|
+
mono: {
|
|
37
|
+
family: "JetBrains Mono",
|
|
38
|
+
fallback: ["ui-monospace", "SFMono-Regular", "Consolas", "monospace"],
|
|
39
|
+
from: "photo credits, captions, contributor titles — small-cap mono instrument feel",
|
|
40
|
+
googleFont: "JetBrains+Mono",
|
|
41
|
+
weights: [400, 500],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
typography: {
|
|
46
|
+
headingTracking: "-0.025em", // Didone wants very tight — masthead feel
|
|
47
|
+
bodyTracking: "0.005em",
|
|
48
|
+
fontFeatureSettings: '"liga", "dlig", "onum"',
|
|
49
|
+
h1ScaleClamp: "clamp(3.5rem, 10vw, 8rem)", // oversized — cover-line scale
|
|
50
|
+
bodyBaseSize: "1.0625rem",
|
|
51
|
+
bodyLineHeight: "1.7",
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
colors: {
|
|
55
|
+
background: { hsl: "32 32% 94%", from: "T Magazine cream paper stock — warm, glossy" },
|
|
56
|
+
foreground: { hsl: "20 25% 10%", from: "deep warm ink — never pure black, has a brown undertone" },
|
|
57
|
+
card: { hsl: "32 32% 97%", from: "lighter cream card — sits on the paper" },
|
|
58
|
+
popover: { hsl: "32 32% 97%", from: "same as card; depth from caption rules" },
|
|
59
|
+
primary: { hsl: "350 35% 30%", from: "Vanity Fair deep oxblood — single editorial accent" },
|
|
60
|
+
primaryForeground: { hsl: "32 32% 94%", from: "cream on oxblood" },
|
|
61
|
+
secondary: { hsl: "32 25% 89%", from: "deeper cream — caption blocks and photo gutters" },
|
|
62
|
+
secondaryForeground: { hsl: "20 25% 10%", from: "ink on cream" },
|
|
63
|
+
muted: { hsl: "32 25% 89%", from: "same as secondary; differentiation by usage" },
|
|
64
|
+
mutedForeground: { hsl: "20 12% 36%", from: "secondary type — credits, contributor titles" },
|
|
65
|
+
accent: { hsl: "16 35% 84%", from: "blush — Harper's Bazaar pink page-trim, hover states only" },
|
|
66
|
+
accentForeground: { hsl: "20 25% 10%", from: "ink on blush" },
|
|
67
|
+
border: { hsl: "20 14% 78%", from: "caption-block rule — visible, gallery-frame style" },
|
|
68
|
+
input: { hsl: "20 14% 78%", from: "same as border" },
|
|
69
|
+
ring: { hsl: "350 35% 30%", from: "primary oxblood, focus only" },
|
|
70
|
+
destructive: { hsl: "0 60% 42%", from: "editorial alert red — different family from primary oxblood" },
|
|
71
|
+
destructiveForeground: { hsl: "32 32% 94%", from: "cream on alert" },
|
|
72
|
+
brand: {
|
|
73
|
+
ink: { hsl: "20 25% 10%", from: "= foreground; deep warm ink" },
|
|
74
|
+
cream: { hsl: "32 32% 94%", from: "= background; the glossy paper stock" },
|
|
75
|
+
oxblood: { hsl: "350 35% 30%", from: "= primary; Vanity Fair deep editorial accent" },
|
|
76
|
+
blush: { hsl: "16 35% 84%", from: "= accent; Bazaar page trim, soft pink" },
|
|
77
|
+
"ink-soft": { hsl: "20 20% 22%", from: "deck text, secondary headlines" },
|
|
78
|
+
"photo-frame": { hsl: "20 14% 78%", from: "= border; gallery-frame rule around full-bleed photos" },
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
spacing: {
|
|
83
|
+
base: 4,
|
|
84
|
+
scale: [4, 6, 8, 12, 16, 20, 24, 32, 48, 64, 96, 128], // glossy breathes
|
|
85
|
+
containerMax: "max-w-6xl", // wide — full-bleed photography needs the room
|
|
86
|
+
containerPadding: "px-6 lg:px-12",
|
|
87
|
+
sectionPadding: {
|
|
88
|
+
hero: "pt-24 pb-16 lg:pt-36 lg:pb-24",
|
|
89
|
+
default: "py-20 lg:py-32",
|
|
90
|
+
tight: "py-12 lg:py-16",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
radius: {
|
|
95
|
+
base: "0", // sharp — photo frames are rectangles
|
|
96
|
+
pillsAllowed: false,
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
shadows: {
|
|
100
|
+
style: "soft",
|
|
101
|
+
utilities: {
|
|
102
|
+
"photo-frame":
|
|
103
|
+
"0 1px 0 0 hsl(var(--border))", // single gallery-rule under captions
|
|
104
|
+
"page-lift":
|
|
105
|
+
"0 8px 32px hsl(var(--ink) / 0.08)", // subtle glossy-paper lift for feature cards
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
motion: {
|
|
110
|
+
easing: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
111
|
+
durations: {
|
|
112
|
+
reveal: 1100, // slow, magazine pacing
|
|
113
|
+
loop: 4000,
|
|
114
|
+
ambient: 24000,
|
|
115
|
+
},
|
|
116
|
+
keyframes: {
|
|
117
|
+
"fade-rise": {
|
|
118
|
+
css:
|
|
119
|
+
"from { opacity: 0; transform: translateY(28px); }\n" +
|
|
120
|
+
"to { opacity: 1; transform: translateY(0); }",
|
|
121
|
+
defaultDuration: 1100,
|
|
122
|
+
iteration: "once",
|
|
123
|
+
purpose: "feature entrance — slow rise, magazine spread settling onto the page",
|
|
124
|
+
},
|
|
125
|
+
"image-breathe": {
|
|
126
|
+
css:
|
|
127
|
+
"0%, 100% { transform: scale(1.02); }\n" +
|
|
128
|
+
"50% { transform: scale(1.05); }",
|
|
129
|
+
defaultDuration: 24000,
|
|
130
|
+
iteration: "infinite",
|
|
131
|
+
purpose: "very slow ken-burns on full-bleed editorial photography",
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
respectsReducedMotion: true,
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
density: "low",
|
|
138
|
+
|
|
139
|
+
patterns: {
|
|
140
|
+
button:
|
|
141
|
+
"Text-link CTAs in --ink with underline on hover. The single subscribe CTA may be a solid --ink fill with --cream text. " +
|
|
142
|
+
"Never a colored fill button — color belongs to the photography, not the controls.",
|
|
143
|
+
card:
|
|
144
|
+
"Top hairline + bottom hairline only. Background is --cream, no fill differentiation. " +
|
|
145
|
+
"Title in Bodoni Moda display, kicker in mono small caps. Padding p-8 lg:p-12. Captions live in mono.",
|
|
146
|
+
input:
|
|
147
|
+
"Border-bottom only (1px --ink-soft). Label in mono small caps above. Placeholder italic Cormorant.",
|
|
148
|
+
cta:
|
|
149
|
+
"Text-link with --ink, underline on hover. Subscribe is the only solid: --ink bg + --cream fg, sharp rect, no radius.",
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
details: {
|
|
153
|
+
selectionBg: "hsl(var(--primary) / 0.18)",
|
|
154
|
+
selectionFg: "hsl(var(--foreground))",
|
|
155
|
+
focusRing: "1px solid hsl(var(--ring))",
|
|
156
|
+
scrollbarStyle: "thin",
|
|
157
|
+
},
|
|
158
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Marker Mag
|
|
2
|
+
|
|
3
|
+
> Student-magazine DIY register — saturated hot canvas (hot pink by default, other saturated hues per palette variant) broken by dark charcoal header + footer bands, hand-drawn brush-lettered wordmark repeated top and bottom, big DIY cover-art tile featuring the current issue, editorial article grid of dark cards on the saturated canvas.
|
|
4
|
+
|
|
5
|
+
**Slug:** `marker-mag` — **Surface:** web — **Density:** dense
|
|
6
|
+
|
|
7
|
+
## Influence
|
|
8
|
+
|
|
9
|
+
Independent campus / student magazines (the register held by NZ / AU / UK campus quarterlies — Salient, Craccum, Palatinate, Isis at their most DIY). Also youth-culture editorial (Dazed at their most zine-adjacent, i-D at their most staple-bound, The Face relaunch when it leans DIY). Adjacent to punk photocopy zines but structured — brush lettering instead of ransom-note, editorial grid instead of collage anarchy.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Signature move
|
|
13
|
+
|
|
14
|
+
A hand-drawn BRUSH-LETTERED wordmark, rendered as bespoke SVG paths
|
|
15
|
+
(not a font), sits centered at the top of the composition on a dark
|
|
16
|
+
charcoal band and is REPEATED at the bottom of the composition in
|
|
17
|
+
the footer. The brush strokes carry a marker-on-paper texture — some
|
|
18
|
+
strokes are thicker, some thinner, some have visible ink pooling at
|
|
19
|
+
corners — so the word reads as "hand-drawn today" not "a font
|
|
20
|
+
someone bought." The main page canvas is a SATURATED band color
|
|
21
|
+
(hot pink by default, other saturated hues per palette) that
|
|
22
|
+
dominates every surface not covered by dark cards. Below the top
|
|
23
|
+
charcoal band, a big DIY COVER-ART tile shows the current issue's
|
|
24
|
+
cover in xeroxed / DIY-print texture: dark backdrop with a strong
|
|
25
|
+
central image (a fictional issue mascot or graphic), the issue's
|
|
26
|
+
volume + issue label in small caps on the cover, and a hand-drawn
|
|
27
|
+
border. Beside the cover, a FEATURED-INDEX list of the top articles
|
|
28
|
+
from the current issue — each row a small thumbnail + title + author
|
|
29
|
+
byline + "Read More »" link, all on the hot canvas. Below, a row of
|
|
30
|
+
category filter chips (Columns / Editorial / Entertainment /
|
|
31
|
+
Features / News / Reviews). Below the chips, a 12-tile editorial
|
|
32
|
+
grid arranged 3 columns wide, each tile a dark charcoal card with
|
|
33
|
+
the article's image on top, category badge overlay, title in
|
|
34
|
+
DM-Sans-800-capitalize, small italic author byline, body preview,
|
|
35
|
+
and "Read More »" link at bottom. Grid pagination row (1 2 3 4 5)
|
|
36
|
+
below the grid. Dark charcoal footer band with the wordmark
|
|
37
|
+
repeated + Instagram + Facebook + YouTube social icons. Border-
|
|
38
|
+
radius 0 everywhere. Brand character sits in the brush wordmark,
|
|
39
|
+
the saturated canvas, the DIY cover-art tile, and the disciplined
|
|
40
|
+
student-mag article-grid — not in decoration, not in mono-caps
|
|
41
|
+
eyebrows, not in stat-card triads.
|
|
42
|
+
|
|
43
|
+
## Palette
|
|
44
|
+
|
|
45
|
+
- **bg:** `#E35BA0`
|
|
46
|
+
- **surface:** `#2C2C2C`
|
|
47
|
+
- **ink:** `#FFFFFF`
|
|
48
|
+
- **accent:** `#0000EE`
|
|
49
|
+
|
|
50
|
+
## Typography
|
|
51
|
+
|
|
52
|
+
- **Display:** DM Sans (free, Google Fonts) at 800 weight — capitalize case, letter-spacing normal. At scale — 36-44px article-tile titles, 22-28px featured article titles, 20px section labels. DM Sans is the reference face itself (the source site literally uses it) and it's a Google-Fonts-shelf humanist sans that reads as youth-friendly without being loud. The BRUSH-LETTERED wordmark is NOT a font — it's a bespoke hand-drawn SVG (see signature).
|
|
53
|
+
- **Body:** DM Sans same family — 400 weight for body, 500 for card titles, 600 for filter chips. 14-16px body copy, line-height 1.5. Sentence case, not all caps. Small captions (author bylines) get 12-13px 500-weight.
|
|
54
|
+
- **Mono:** none. Marker Mag is a consumer editorial surface — mono has no legitimate role. Author bylines are in body-face italic 12px, NOT mono-caps (that's the universal-slop-blocklist fingerprint).
|
|
55
|
+
- **Scale:** 1.25 (major third — deliberately shallow contrast; the article-grid cards should feel evenly-weighted so no one card dominates. The magazine cover-art tile carries the hero volume through IMAGE, not through outsized type.)
|
|
56
|
+
|
|
57
|
+
## Motion
|
|
58
|
+
|
|
59
|
+
Ships live in the section renderer (no external dependencies):
|
|
60
|
+
1. Wordmark drop-in on first paint — the brush-lettered SVG wordmark strokes draw from opacity 0 → 1 with a 400ms cubic-bezier ease + 60ms stagger per letter, so it reads as "hand-drawn on the page in real time." Only fires once on load.
|
|
61
|
+
2. Cover-art tile hover — slight rotate(-1deg) + scale(1.02) on hover, 220ms cubic-bezier. Reads as "picking up a physical magazine off the desk."
|
|
62
|
+
3. Article card hover — the dark card lifts translateY(-4px) + the image inside scales(1.03) with 220ms cubic-bezier. Simultaneous "Read More »" arrow slides 4px right.
|
|
63
|
+
4. Category filter chips — click swaps active chip; grid re-renders filtered instantly (no cross-fade). Active chip has a solid white background with dark ink, inactive is transparent with hot-pink underline.
|
|
64
|
+
5. Pagination — click swaps active page number; grid scrolls to top of grid via smooth-scroll. Fast, no page-transition animation.
|
|
65
|
+
6. Featured-article-list rows in the editorial index — hover flips the row background from transparent to a subtle rgba(255,255,255,0.05) accent, 180ms transition.
|
|
66
|
+
7. prefers-reduced-motion: reduce — brush wordmark starts at final opacity; cover-tile hover disabled; card hover becomes instant. State changes still fire (they're content, not decoration).
|
|
67
|
+
|
|
68
|
+
Customer installs these as dependencies for the deeper motion tier:
|
|
69
|
+
- Lenis — smooth inertial scroll for the long article grid.
|
|
70
|
+
- GSAP DrawSVG — the brush wordmark stroke-draw could use DrawSVG for a more considered pen-on-paper reveal. The default CSS version is close enough for MVP.
|
|
71
|
+
- No preloader — student magazines land instantly, not with a splash screen.
|
|
72
|
+
|
|
73
|
+
Motion character: DIY, physical, tactile. Custom cubic-bezier(0.25,0.1,0.25,1) for reveals. Nothing electric, nothing corporate, nothing tech-bro-slick. The whole point of the DIY register is that it feels made by a human at a desk in a dorm, not by a design system.
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Imagery
|
|
77
|
+
|
|
78
|
+
DIY / xerox / punk photocopy aesthetic imagery. The cover-art tile
|
|
79
|
+
is the primary hero — a dark backdrop with a bold graphic (mascot,
|
|
80
|
+
illustration, photograph) that reads as a fictional student
|
|
81
|
+
magazine cover. Article-tile images use a mix of: (1) FPO
|
|
82
|
+
photograph rectangles with visible grain, (2) fake newspaper clip
|
|
83
|
+
scans, (3) colorful graphic panels with a fictional article-topic
|
|
84
|
+
hint. All FPO imagery has a slight rotation, an unfinished quality,
|
|
85
|
+
or a torn-edge treatment — because student magazines never ship
|
|
86
|
+
with polished stock photography. NO gradient blobs, NO glassmorphism,
|
|
87
|
+
NO clean brand-color panels (that's case-panel's move), NO
|
|
88
|
+
drop-shadow-md polish. The whole composition reads as printed +
|
|
89
|
+
photocopied + stapled.
|
|
90
|
+
|
|
91
|
+
## Best for
|
|
92
|
+
|
|
93
|
+
- Student / campus magazine sites (university quarterlies, college publications)
|
|
94
|
+
- Independent zines going from print to web (small-run editorial with a distinctive voice)
|
|
95
|
+
- Community publications with a youth or subculture voice
|
|
96
|
+
- Music / arts / culture writing sites that want DIY register instead of corporate polish
|
|
97
|
+
- Substack-alternative editorial platforms leaning into indie youth aesthetic
|
|
98
|
+
- Anything trading on "made by humans in a room, not a content team"
|
|
99
|
+
|
|
100
|
+
## Reject if
|
|
101
|
+
|
|
102
|
+
_Director grades each of the following as a pass/fail check. Any violation blocks the theme._
|
|
103
|
+
|
|
104
|
+
- Border-radius greater than 0px anywhere on the page — sharp corners are core to the identity
|
|
105
|
+
- Rounded pill buttons or fully-rounded CTAs — buttons and filter chips are sharp-cornered with 0 radius
|
|
106
|
+
- Serif or condensed display type — display face MUST be DM Sans or similar humanist sans, never Fraunces / Times / Playfair / Anton
|
|
107
|
+
- The wordmark rendered as a font — the wordmark MUST be hand-drawn bespoke SVG paths so it reads as marker-on-paper, not as a downloadable font
|
|
108
|
+
- Mono type as a decorative label voice — mono has no role on this consumer editorial surface
|
|
109
|
+
- Neutral canvas (white / cream / black / charcoal) as the primary background — the CANVAS IS ALWAYS SATURATED. Hot pink by default, other saturated hues per palette variant. A neutral canvas turns this into a generic dark-mode blog and the register dies.
|
|
110
|
+
- Corporate polish on the article cards — no drop-shadow-md, no soft-glow, no rounded 2xl. Cards are FLAT dark rectangles on the saturated canvas.
|
|
111
|
+
- Uniform 3-pillar / feature-triad layout for the article grid — the grid is a 3×N grid of same-size dark cards which is fine because that IS what magazines do, but the tiles must SHIP with real content variation (different images, different lengths, different categories) so it doesn't collapse into template output
|
|
112
|
+
- Center-aligned everything — hero cover art is LEFT of the featured-index, article grid is left-weighted
|
|
113
|
+
- Adding a second saturated accent color competing with the canvas — the canvas hue IS the accent. Blue #0000EE is reserved for interactive hover states only.
|
|
114
|
+
- Emoji or decorative unicode marks — the brush wordmark carries all the personality; nothing else decorative ships
|
|
115
|
+
- Auto-advancing hero sliders / cycling headline words — refused
|
|
116
|
+
- Grain overlay as a fake-DIY treatment on the whole canvas — DIY texture lives IN the cover-art tile and article-tile images, not smeared across the whole page
|
|
117
|
+
|
|
118
|
+
## Banned defaults (inherited + theme-specific)
|
|
119
|
+
|
|
120
|
+
- claude-cream (#F4F1EA + serif + #D97757)
|
|
121
|
+
- void+acid (near-black bg + single bright acid-green or vermilion accent)
|
|
122
|
+
- broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)
|
|
123
|
+
- tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)
|
|
124
|
+
- uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)
|
|
125
|
+
- wordmark-as-font (the brush-lettered wordmark MUST be bespoke SVG paths. The moment you replace it with a Google Fonts brush face like Caveat or Permanent Marker, the register collapses into generic-blog-hand-drawn slop.)
|
|
126
|
+
- neutral-canvas-with-pink-accent (the whole point is the SATURATED CANVAS. A white canvas with hot pink accents is a completely different register and collapses this theme into generic-editorial-slop.)
|
|
127
|
+
- corporate-article-cards (dark cards must be FLAT rectangles on the canvas. The moment you add rounded-2xl + shadow-md + hover-scale-1.05, the register becomes stock Medium / Substack / Ghost editorial slop.)
|
|
128
|
+
- generic-cover-art (the DIY cover-art tile must feel PRINTED + PHOTOCOPIED + STAPLED. The moment you replace it with a clean brand-panel or a gradient hero, the register collapses.)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
|
|
2
|
+
// slug: marker-mag
|
|
3
|
+
export const markerMagTailwindExtend = {
|
|
4
|
+
colors: {
|
|
5
|
+
bg: "#E35BA0",
|
|
6
|
+
surface: "#2C2C2C",
|
|
7
|
+
ink: "#FFFFFF",
|
|
8
|
+
accent: "#0000EE",
|
|
9
|
+
},
|
|
10
|
+
fontFamily: {
|
|
11
|
+
display: ["DM Sans (free, Google Fonts) at 800 weight — capitalize case, letter-spacing normal. At scale — 36-44px article-tile titles, 22-28px featured article titles, 20px section labels. DM Sans is the reference face itself (the source site literally uses it) and it's a Google-Fonts-shelf humanist sans that reads as youth-friendly without being loud. The BRUSH-LETTERED wordmark is NOT a font — it's a bespoke hand-drawn SVG (see signature)."],
|
|
12
|
+
body: ["DM Sans same family — 400 weight for body, 500 for card titles, 600 for filter chips. 14-16px body copy, line-height 1.5. Sentence case, not all caps. Small captions (author bylines) get 12-13px 500-weight."],
|
|
13
|
+
mono: ["none. Marker Mag is a consumer editorial surface — mono has no legitimate role. Author bylines are in body-face italic 12px, NOT mono-caps (that's the universal-slop-blocklist fingerprint)."],
|
|
14
|
+
},
|
|
15
|
+
};
|