@stylecrib/cli 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -9
- package/agents/MANIFEST.yml +136 -0
- package/agents/README.md +75 -0
- package/agents/art-director.md +168 -0
- package/agents/audacity-director.md +109 -0
- package/agents/brand-identity.md +179 -0
- package/agents/brand-precedent.md +119 -0
- package/agents/brief-enforcer.md +136 -0
- package/agents/component-qa.md +167 -0
- package/agents/cto.md +49 -0
- package/agents/design-director.md +184 -0
- package/agents/design-systems-engineer.md +162 -0
- package/agents/direction-curator.md +133 -0
- package/agents/homogeneity-detector.md +104 -0
- package/agents/logo-designer.md +240 -0
- package/agents/marketing-designer.md +156 -0
- package/agents/media-curator.md +165 -0
- package/agents/motion-engineer.md +270 -0
- package/agents/qa-conductor.md +143 -0
- package/agents/render-qa.md +133 -0
- package/agents/upgrade-simulator.md +123 -0
- package/agents/vp-architecture.md +49 -0
- package/agents/vp-engineering.md +49 -0
- package/dist/index.js +1577 -463
- package/package.json +11 -4
- package/themes/README.md +70 -0
- package/themes/acrylic-soft/THEME.md +142 -0
- package/themes/acrylic-soft/tokens.ts +180 -0
- package/themes/agency-creative/THEME.md +91 -0
- package/themes/agency-creative/tokens.ts +202 -0
- package/themes/agency-portfolio/THEME.md +109 -0
- package/themes/agency-portfolio/tokens.ts +159 -0
- package/themes/ai-startup/THEME.md +95 -0
- package/themes/ai-startup/tokens.ts +162 -0
- package/themes/airline-modern/THEME.md +104 -0
- package/themes/airline-modern/tokens.ts +179 -0
- package/themes/arc-stack/.anchor-render.png +0 -0
- package/themes/arc-stack/THEME.md +125 -0
- package/themes/arc-stack/audit.log.jsonl +6 -0
- package/themes/arc-stack/dismissals.jsonl +3 -0
- package/themes/arc-stack/tailwind.snippet.ts +17 -0
- package/themes/arc-stack/theme.yml +153 -0
- package/themes/arc-stack/tokens.ts +29 -0
- package/themes/architectural/THEME.md +102 -0
- package/themes/architectural/tokens.ts +159 -0
- package/themes/atelier-radiance/THEME.md +93 -0
- package/themes/atelier-radiance/audit.log.jsonl +1 -0
- package/themes/atelier-radiance/tailwind.snippet.ts +15 -0
- package/themes/atelier-radiance/theme.yml +130 -0
- package/themes/atelier-radiance/tokens.ts +29 -0
- package/themes/automotive-ev/THEME.md +87 -0
- package/themes/automotive-ev/tokens.ts +183 -0
- package/themes/automotive-luxury/THEME.md +88 -0
- package/themes/automotive-luxury/tokens.ts +175 -0
- package/themes/baby-modern/THEME.md +79 -0
- package/themes/baby-modern/tokens.ts +184 -0
- package/themes/banking-gravity/THEME.md +171 -0
- package/themes/banking-gravity/tokens.ts +169 -0
- package/themes/beauty-clean/THEME.md +92 -0
- package/themes/beauty-clean/tokens.ts +176 -0
- package/themes/beauty-luxury/THEME.md +96 -0
- package/themes/beauty-luxury/tokens.ts +178 -0
- package/themes/bento-modular/.anchor-render.png +0 -0
- package/themes/bento-modular/BUILD_BRIEF.md +171 -0
- package/themes/bento-modular/THEME.md +80 -0
- package/themes/bento-modular/audit.log.jsonl +3 -0
- package/themes/bento-modular/dismissals.jsonl +1 -0
- package/themes/bento-modular/tailwind.snippet.ts +17 -0
- package/themes/bento-modular/theme.yml +83 -0
- package/themes/bento-modular/tokens.ts +27 -0
- package/themes/bookstore-indie/THEME.md +78 -0
- package/themes/bookstore-indie/tokens.ts +147 -0
- package/themes/brutalist/THEME.md +96 -0
- package/themes/brutalist/tokens.ts +151 -0
- package/themes/business-tiles/THEME.md +141 -0
- package/themes/business-tiles/tokens.ts +178 -0
- package/themes/cabana-poster/THEME.md +158 -0
- package/themes/cabana-poster/audit.log.jsonl +1 -0
- package/themes/cabana-poster/tailwind.snippet.ts +16 -0
- package/themes/cabana-poster/theme.yml +221 -0
- package/themes/cabana-poster/tokens.ts +34 -0
- package/themes/case-panel/THEME.md +126 -0
- package/themes/case-panel/audit.log.jsonl +2 -0
- package/themes/case-panel/tailwind.snippet.ts +15 -0
- package/themes/case-panel/theme.yml +153 -0
- package/themes/case-panel/tokens.ts +28 -0
- package/themes/cinematic-dark/THEME.md +97 -0
- package/themes/cinematic-dark/tokens.ts +195 -0
- package/themes/classic-car/THEME.md +86 -0
- package/themes/classic-car/tokens.ts +173 -0
- package/themes/cloud-friendly/THEME.md +152 -0
- package/themes/cloud-friendly/tokens.ts +181 -0
- package/themes/community-niche/THEME.md +102 -0
- package/themes/community-niche/tokens.ts +177 -0
- package/themes/corporate-grid/THEME.md +154 -0
- package/themes/corporate-grid/tokens.ts +182 -0
- package/themes/couture-luxury/THEME.md +85 -0
- package/themes/couture-luxury/tokens.ts +146 -0
- package/themes/creator-social/THEME.md +131 -0
- package/themes/creator-social/tokens.ts +249 -0
- package/themes/crypto-onchain/THEME.md +100 -0
- package/themes/crypto-onchain/tokens.ts +207 -0
- package/themes/cycling-brand/THEME.md +78 -0
- package/themes/cycling-brand/tokens.ts +185 -0
- package/themes/dating-friendly/THEME.md +102 -0
- package/themes/dating-friendly/tokens.ts +178 -0
- package/themes/dense-utility/THEME.md +85 -0
- package/themes/dense-utility/tokens.ts +155 -0
- package/themes/devtool-cli/THEME.md +100 -0
- package/themes/devtool-cli/tokens.ts +195 -0
- package/themes/devtool-docs/THEME.md +105 -0
- package/themes/devtool-docs/tokens.ts +177 -0
- package/themes/editorial/THEME.md +129 -0
- package/themes/editorial/audit.log.jsonl +2 -0
- package/themes/editorial/tailwind.snippet.ts +15 -0
- package/themes/editorial/theme.yml +173 -0
- package/themes/editorial/tokens.ts +29 -0
- package/themes/education-formal/THEME.md +154 -0
- package/themes/education-formal/audit.log.jsonl +1 -0
- package/themes/education-formal/tailwind.snippet.ts +15 -0
- package/themes/education-formal/theme.yml +186 -0
- package/themes/education-formal/tokens.ts +29 -0
- package/themes/education-warm/THEME.md +91 -0
- package/themes/education-warm/tokens.ts +185 -0
- package/themes/ember-poster/README.md +79 -0
- package/themes/ember-poster/THEME.md +101 -0
- package/themes/ember-poster/audit.log.jsonl +17 -0
- package/themes/ember-poster/package.json +34 -0
- package/themes/ember-poster/tailwind.snippet.ts +17 -0
- package/themes/ember-poster/theme.yml +109 -0
- package/themes/ember-poster/tokens.ts +27 -0
- package/themes/enterprise-cloud/THEME.md +139 -0
- package/themes/enterprise-cloud/tokens.ts +179 -0
- package/themes/enterprise-tech/.anchor-render.png +0 -0
- package/themes/enterprise-tech/THEME.md +167 -0
- package/themes/enterprise-tech/audit.log.jsonl +1 -0
- package/themes/enterprise-tech/tailwind.snippet.ts +15 -0
- package/themes/enterprise-tech/theme.yml +202 -0
- package/themes/enterprise-tech/tokens.ts +29 -0
- package/themes/ev-charging/THEME.md +94 -0
- package/themes/ev-charging/tokens.ts +185 -0
- package/themes/farm-direct/THEME.md +92 -0
- package/themes/farm-direct/tokens.ts +180 -0
- package/themes/fintech-card/THEME.md +96 -0
- package/themes/fintech-card/tokens.ts +191 -0
- package/themes/fintech-trust/THEME.md +94 -0
- package/themes/fintech-trust/tokens.ts +192 -0
- package/themes/food-blog/THEME.md +98 -0
- package/themes/food-blog/tokens.ts +183 -0
- package/themes/forum-classic/THEME.md +100 -0
- package/themes/forum-classic/tokens.ts +168 -0
- package/themes/fresh-plate/.anchor-render.png +0 -0
- package/themes/fresh-plate/THEME.md +144 -0
- package/themes/fresh-plate/audit.log.jsonl +2 -0
- package/themes/fresh-plate/dismissals.jsonl +3 -0
- package/themes/fresh-plate/tailwind.snippet.ts +16 -0
- package/themes/fresh-plate/theme.yml +189 -0
- package/themes/fresh-plate/tokens.ts +30 -0
- package/themes/furniture-modern/THEME.md +94 -0
- package/themes/furniture-modern/tokens.ts +176 -0
- package/themes/gaming-esports/THEME.md +146 -0
- package/themes/gaming-esports/tokens.ts +199 -0
- package/themes/gaming-streamer/THEME.md +139 -0
- package/themes/gaming-streamer/tokens.ts +201 -0
- package/themes/glassmorphic-modern/THEME.md +119 -0
- package/themes/glassmorphic-modern/tokens.ts +174 -0
- package/themes/government-civic/THEME.md +138 -0
- package/themes/government-civic/tokens.ts +164 -0
- package/themes/gym-chain/THEME.md +79 -0
- package/themes/gym-chain/tokens.ts +196 -0
- package/themes/healthcare-bright/THEME.md +95 -0
- package/themes/healthcare-bright/tokens.ts +184 -0
- package/themes/home-decor/THEME.md +94 -0
- package/themes/home-decor/tokens.ts +177 -0
- package/themes/hotel-boutique/THEME.md +110 -0
- package/themes/hotel-boutique/tokens.ts +179 -0
- package/themes/hyperminimal-mono/THEME.md +91 -0
- package/themes/hyperminimal-mono/tokens.ts +150 -0
- package/themes/indie-art-game/THEME.md +107 -0
- package/themes/indie-art-game/tokens.ts +216 -0
- package/themes/insurance-legacy/THEME.md +101 -0
- package/themes/insurance-legacy/tokens.ts +182 -0
- package/themes/insurance-modern/THEME.md +103 -0
- package/themes/insurance-modern/tokens.ts +192 -0
- package/themes/kaiju-reveal/THEME.md +97 -0
- package/themes/kaiju-reveal/tokens.ts +185 -0
- package/themes/kinetic-data/THEME.md +172 -0
- package/themes/kinetic-data/audit.log.jsonl +1 -0
- package/themes/kinetic-data/tailwind.snippet.ts +16 -0
- package/themes/kinetic-data/theme.yml +207 -0
- package/themes/kinetic-data/tokens.ts +30 -0
- package/themes/kinetic-headline/.anchor-render.png +0 -0
- package/themes/kinetic-headline/BUILD_BRIEF.md +156 -0
- package/themes/kinetic-headline/THEME.md +78 -0
- package/themes/kinetic-headline/audit.log.jsonl +4 -0
- package/themes/kinetic-headline/dismissals.jsonl +1 -0
- package/themes/kinetic-headline/tailwind.snippet.ts +16 -0
- package/themes/kinetic-headline/theme.yml +81 -0
- package/themes/kinetic-headline/tokens.ts +26 -0
- package/themes/law-firm/THEME.md +108 -0
- package/themes/law-firm/tokens.ts +158 -0
- package/themes/lawtech-modern/THEME.md +107 -0
- package/themes/lawtech-modern/tokens.ts +192 -0
- package/themes/linkedin-pro/THEME.md +102 -0
- package/themes/linkedin-pro/tokens.ts +174 -0
- package/themes/logistics-modern/THEME.md +94 -0
- package/themes/logistics-modern/tokens.ts +187 -0
- package/themes/magazine-glossy/THEME.md +74 -0
- package/themes/magazine-glossy/tokens.ts +158 -0
- package/themes/marker-mag/THEME.md +128 -0
- package/themes/marker-mag/audit.log.jsonl +1 -0
- package/themes/marker-mag/tailwind.snippet.ts +15 -0
- package/themes/marker-mag/theme.yml +159 -0
- package/themes/marker-mag/tokens.ts +27 -0
- package/themes/marketplace-modern/THEME.md +135 -0
- package/themes/marketplace-modern/tokens.ts +186 -0
- package/themes/marketplace-vintage/THEME.md +110 -0
- package/themes/marketplace-vintage/tokens.ts +185 -0
- package/themes/maximalist/THEME.md +96 -0
- package/themes/maximalist/tokens.ts +168 -0
- package/themes/mid-century/THEME.md +109 -0
- package/themes/mid-century/tokens.ts +162 -0
- package/themes/motorcycle-brand/THEME.md +86 -0
- package/themes/motorcycle-brand/tokens.ts +174 -0
- package/themes/museum/THEME.md +83 -0
- package/themes/museum/tokens.ts +147 -0
- package/themes/music-streaming/THEME.md +101 -0
- package/themes/music-streaming/tokens.ts +187 -0
- package/themes/music-vinyl/THEME.md +98 -0
- package/themes/music-vinyl/tokens.ts +167 -0
- package/themes/nature-distilled/.anchor-render.png +0 -0
- package/themes/nature-distilled/BUILD_BRIEF.md +158 -0
- package/themes/nature-distilled/THEME.md +81 -0
- package/themes/nature-distilled/audit.log.jsonl +2 -0
- package/themes/nature-distilled/tailwind.snippet.ts +16 -0
- package/themes/nature-distilled/theme.yml +91 -0
- package/themes/nature-distilled/tokens.ts +26 -0
- package/themes/news-tabloid/THEME.md +72 -0
- package/themes/news-tabloid/tokens.ts +158 -0
- package/themes/news-tech/THEME.md +75 -0
- package/themes/news-tech/tokens.ts +149 -0
- package/themes/newsletter/THEME.md +82 -0
- package/themes/newsletter/tokens.ts +138 -0
- package/themes/newspaper-classic/THEME.md +74 -0
- package/themes/newspaper-classic/tokens.ts +159 -0
- package/themes/nonprofit-arts/THEME.md +78 -0
- package/themes/nonprofit-arts/tokens.ts +157 -0
- package/themes/nonprofit-warm/THEME.md +105 -0
- package/themes/nonprofit-warm/tokens.ts +188 -0
- package/themes/outdoor-adventure/THEME.md +113 -0
- package/themes/outdoor-adventure/tokens.ts +181 -0
- package/themes/overland-broadside/THEME.md +119 -0
- package/themes/overland-broadside/audit.log.jsonl +1 -0
- package/themes/overland-broadside/tailwind.snippet.ts +17 -0
- package/themes/overland-broadside/theme.yml +138 -0
- package/themes/overland-broadside/tokens.ts +27 -0
- package/themes/performance-engineered/THEME.md +162 -0
- package/themes/performance-engineered/audit.log.jsonl +1 -0
- package/themes/performance-engineered/tailwind.snippet.ts +15 -0
- package/themes/performance-engineered/theme.yml +193 -0
- package/themes/performance-engineered/tokens.ts +29 -0
- package/themes/pet-food/THEME.md +78 -0
- package/themes/pet-food/tokens.ts +185 -0
- package/themes/pharma-clinical/THEME.md +164 -0
- package/themes/pharma-clinical/audit.log.jsonl +1 -0
- package/themes/pharma-clinical/tailwind.snippet.ts +15 -0
- package/themes/pharma-clinical/theme.yml +201 -0
- package/themes/pharma-clinical/tokens.ts +29 -0
- package/themes/pill-editorial/THEME.md +125 -0
- package/themes/pill-editorial/audit.log.jsonl +1 -0
- package/themes/pill-editorial/tailwind.snippet.ts +15 -0
- package/themes/pill-editorial/theme.yml +168 -0
- package/themes/pill-editorial/tokens.ts +31 -0
- package/themes/podcast-warm/THEME.md +103 -0
- package/themes/podcast-warm/tokens.ts +192 -0
- package/themes/publisher-indie/THEME.md +78 -0
- package/themes/publisher-indie/tokens.ts +148 -0
- package/themes/raw-concrete/BUILD_BRIEF.md +157 -0
- package/themes/raw-concrete/THEME.md +76 -0
- package/themes/raw-concrete/audit.log.jsonl +10 -0
- package/themes/raw-concrete/tailwind.snippet.ts +16 -0
- package/themes/raw-concrete/theme.yml +88 -0
- package/themes/raw-concrete/tokens.ts +27 -0
- package/themes/realestate-luxury/THEME.md +94 -0
- package/themes/realestate-luxury/tokens.ts +169 -0
- package/themes/realestate-marketplace/THEME.md +106 -0
- package/themes/realestate-marketplace/tokens.ts +183 -0
- package/themes/restaurant-modern/THEME.md +109 -0
- package/themes/restaurant-modern/tokens.ts +172 -0
- package/themes/runway-fashion/THEME.md +99 -0
- package/themes/runway-fashion/tokens.ts +167 -0
- package/themes/saturday-morning/THEME.md +117 -0
- package/themes/saturday-morning/tokens.ts +281 -0
- package/themes/schema.ts +235 -0
- package/themes/signal-dark/BUILD_BRIEF.md +168 -0
- package/themes/signal-dark/THEME.md +107 -0
- package/themes/signal-dark/tokens.ts +181 -0
- package/themes/soft-modern/THEME.md +91 -0
- package/themes/soft-modern/tokens.ts +166 -0
- package/themes/solar-residential/THEME.md +92 -0
- package/themes/solar-residential/tokens.ts +176 -0
- package/themes/sports-league/THEME.md +180 -0
- package/themes/sports-league/audit.log.jsonl +1 -0
- package/themes/sports-league/tailwind.snippet.ts +15 -0
- package/themes/sports-league/theme.yml +213 -0
- package/themes/sports-league/tokens.ts +32 -0
- package/themes/stadium-sport/THEME.md +114 -0
- package/themes/stadium-sport/tokens.ts +187 -0
- package/themes/streetwear-hype/THEME.md +100 -0
- package/themes/streetwear-hype/tokens.ts +174 -0
- package/themes/studio-architect/THEME.md +108 -0
- package/themes/studio-architect/tokens.ts +162 -0
- package/themes/studio-photographer/THEME.md +88 -0
- package/themes/studio-photographer/tokens.ts +164 -0
- package/themes/team-kanban/.anchor-render.png +0 -0
- package/themes/team-kanban/THEME.md +167 -0
- package/themes/team-kanban/audit.log.jsonl +2 -0
- package/themes/team-kanban/dismissals.jsonl +1 -0
- package/themes/team-kanban/tailwind.snippet.ts +15 -0
- package/themes/team-kanban/theme.yml +209 -0
- package/themes/team-kanban/tokens.ts +35 -0
- package/themes/telehealth-modern/THEME.md +95 -0
- package/themes/telehealth-modern/tokens.ts +197 -0
- package/themes/tourism-board/THEME.md +111 -0
- package/themes/tourism-board/tokens.ts +173 -0
- package/themes/toys-modern/THEME.md +79 -0
- package/themes/toys-modern/tokens.ts +200 -0
- package/themes/travel-luxury/THEME.md +95 -0
- package/themes/travel-luxury/tokens.ts +162 -0
- package/themes/vacation-rental/THEME.md +105 -0
- package/themes/vacation-rental/tokens.ts +174 -0
- package/themes/vault-reel/THEME.md +134 -0
- package/themes/vault-reel/audit.log.jsonl +3 -0
- package/themes/vault-reel/tailwind.snippet.ts +16 -0
- package/themes/vault-reel/theme.yml +167 -0
- package/themes/vault-reel/tokens.ts +30 -0
- package/themes/vet-modern/THEME.md +79 -0
- package/themes/vet-modern/tokens.ts +194 -0
- package/themes/web3-restraint/THEME.md +87 -0
- package/themes/web3-restraint/tokens.ts +154 -0
- package/themes/wellness-active/THEME.md +102 -0
- package/themes/wellness-active/tokens.ts +203 -0
- package/themes/wellness-spa/THEME.md +93 -0
- package/themes/wellness-spa/tokens.ts +173 -0
- package/themes/y2k-chrome/THEME.md +118 -0
- package/themes/y2k-chrome/tokens.ts +249 -0
- package/themes/yoga-studio/THEME.md +76 -0
- package/themes/yoga-studio/tokens.ts +163 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Raw-Concrete — Build Brief
|
|
2
|
+
|
|
3
|
+
> The contract this theme ships with. Read at commit time by the
|
|
4
|
+
> brief-enforcer subagent; handed to Claude Code via the Copy-for-Claude
|
|
5
|
+
> button on the theme detail page.
|
|
6
|
+
>
|
|
7
|
+
> This theme is intentionally the LEAST polished theme in the library.
|
|
8
|
+
> Its whole register is refusing polish. That means several rules in
|
|
9
|
+
> the SLOP-BLOCKLIST are the OPPOSITE of what other themes forbid — do
|
|
10
|
+
> NOT smooth this one into a modern SaaS composition.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## MANDATORY BUILD DIRECTIVE — you MUST
|
|
15
|
+
|
|
16
|
+
1. **Radius 0 everywhere.** No `borderRadius: 4`, no `12`, no `999`,
|
|
17
|
+
no pill CTAs. Every button, every card, every input is a square.
|
|
18
|
+
The palette picker corners are `borderRadius: 0` too.
|
|
19
|
+
2. **Box-shadow `none` everywhere.** Every card, every button, every
|
|
20
|
+
div. Depth is suggested by 1px `#C0C0C0` hairline borders, nothing
|
|
21
|
+
else.
|
|
22
|
+
3. **Monospace family throughout the body.** `Berkeley Mono`,
|
|
23
|
+
`JetBrains Mono`, `Menlo` — one family. Body copy in mono at 14px
|
|
24
|
+
line-height 1.5. Headings in mono at slightly larger sizes but same
|
|
25
|
+
family. No display sans, no display serif.
|
|
26
|
+
4. **Native `#0000EE` link color** on light canvas, `#8CB4FF` on dark.
|
|
27
|
+
Never override link color to match the palette accent. That IS the
|
|
28
|
+
theme's brand register.
|
|
29
|
+
5. **Native `#551A8B` visited-link color** (dark canvas: `#D0ADF0`).
|
|
30
|
+
Users must be able to tell what they've already read.
|
|
31
|
+
6. **Section numbers as `[01]`, `[02]`, `[03]`.** Every h2 opens with a
|
|
32
|
+
square-bracketed section number. This is the arxiv-preprint tell.
|
|
33
|
+
7. **All images have visible captions** with `<figcaption>` in the
|
|
34
|
+
format `**fig. N.** <sentence>`. Never a photo without a caption.
|
|
35
|
+
This is the arxiv-figure register.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## SLOP-BLOCKLIST — you MUST NOT
|
|
40
|
+
|
|
41
|
+
- **ANY border-radius > 0.** Pills, rounded cards, rounded buttons, all
|
|
42
|
+
banned. Fingerprint: `borderRadius: [1-9]` anywhere in the section.
|
|
43
|
+
- **ANY box-shadow.** Fingerprint: `boxShadow:` with a non-`none`
|
|
44
|
+
value. No drop shadow, no glow, no elevation.
|
|
45
|
+
- **ANY `transition:` on hover states.** Native links, native focus
|
|
46
|
+
rings, browser defaults only.
|
|
47
|
+
- **Sans-serif or serif display fonts.** No Inter, no Fraunces, no
|
|
48
|
+
Bricolage. Monospace only.
|
|
49
|
+
- **Override of the native link color.** The palette variant swaps
|
|
50
|
+
the LINK hue (that IS the theme's palette), but the CSS property
|
|
51
|
+
is always native link color, never a custom accent bg on a
|
|
52
|
+
span-as-link.
|
|
53
|
+
- **Underline REMOVAL from links.** Every link stays underlined.
|
|
54
|
+
- **Cycling headline words** or auto-advancing content.
|
|
55
|
+
- **Purple/indigo/pink gradient backgrounds.** No gradients at all.
|
|
56
|
+
- **CSS `filter:` treatments** on photos (no `brightness()`,
|
|
57
|
+
`contrast()`, `saturate()`). Photos rendered raw.
|
|
58
|
+
- **Section-numbered content presented as marketing feature cards.**
|
|
59
|
+
Section `[01] Recent posts` is a numbered LIST, not a card grid.
|
|
60
|
+
- **Roman-numeral copyright** (`MMXXVI`). Native `©` + Arabic year.
|
|
61
|
+
- **Attribution of influence in visible copy** — vitalik.eth.limo,
|
|
62
|
+
arxiv.org, brutalistwebsites.com are studied but NEVER NAMED in
|
|
63
|
+
slug, copy, or UI.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## CHROME INVENTORY — the allow-list
|
|
68
|
+
|
|
69
|
+
- **Sticky picker strip in native-link register** — canvas + link-color
|
|
70
|
+
pickers as underlined `[dark]` / `[light]` and `[default]` / `[kelp]`
|
|
71
|
+
bracket-prefixed links. NO button chrome. Body font (monospace).
|
|
72
|
+
- **Table-based masthead nav** — `<table>` with 1px borderCollapse.
|
|
73
|
+
Left cell: `raw-concrete.txt` in bold. Right cell: 5-6 nav items as
|
|
74
|
+
underlined links separated by ` · `.
|
|
75
|
+
- **Document masthead / [00] hero** — H1 in mono at 28px, weight 500;
|
|
76
|
+
1-3 paragraphs of body prose with inline underlined links; maintained
|
|
77
|
+
by / last-modified / content-type meta line (content-level `·` is
|
|
78
|
+
allowed here — it's arxiv-native).
|
|
79
|
+
- **[N] Section headings** — h2 in mono at 18px, weight 500, prefixed
|
|
80
|
+
with `[01]`, `[02]`, etc. 1px underline via `borderBottom`.
|
|
81
|
+
- **Numbered `<ol>` post lists** — indent 24px, mono body 14px.
|
|
82
|
+
- **`<figure>` with photo + `<figcaption>`** — 1px black border on
|
|
83
|
+
image, caption below in mono 12px starting with `**fig. N.**`.
|
|
84
|
+
- **`<table>` for spec + archive** — `borderCollapse: collapse`, 1px
|
|
85
|
+
border on every cell, mono 13px content, no zebra striping.
|
|
86
|
+
- **`<blockquote>` for manifesto** — 3px left border, mono body 14px
|
|
87
|
+
in `normal` (not italic).
|
|
88
|
+
- **Native `<input type="email">` + `<button>` for the subscribe
|
|
89
|
+
section.** No custom styling beyond 1px black border, radius 0.
|
|
90
|
+
- **`©` copyright line in mono 12px.** No trademark ornaments.
|
|
91
|
+
- **Palette picker labels use body font (monospace), sentence-case,
|
|
92
|
+
no textTransform.**
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## SIGNATURE MOVES — verbs, not adjectives
|
|
97
|
+
|
|
98
|
+
- **Number every section with `[NN]` in square brackets.** This is
|
|
99
|
+
the arxiv-preprint tell. The reader should feel they're reading a
|
|
100
|
+
document, not browsing an app.
|
|
101
|
+
- **Set every link in `#0000EE` on cream** (or `#8CB4FF` on dark).
|
|
102
|
+
Visited links go `#551A8B`. Users must be able to tell what they've
|
|
103
|
+
already read. This is the ONE color that varies per palette.
|
|
104
|
+
- **Wrap every image in `<figure>` with a `<figcaption>` starting
|
|
105
|
+
`fig. N.`** — never a bare `<img>`. If the image doesn't have a
|
|
106
|
+
caption, it doesn't belong on this theme.
|
|
107
|
+
- **Use `<table>` for tabular data** — the spec table AND the archive
|
|
108
|
+
year list are real `<table>` elements with visible cell borders.
|
|
109
|
+
Refuse a `grid-cols-*` grid; this is the native-web tell.
|
|
110
|
+
- **Render `<blockquote>` with a 3px left border** and mono body in
|
|
111
|
+
`fontStyle: "normal"` — NEVER italic. Italic blockquotes are the
|
|
112
|
+
Medium-blog register; the raw-concrete register is pre-CSS HTML.
|
|
113
|
+
- **Sign off the colophon with an honest `view-source` link** — the
|
|
114
|
+
footer's last three links are `rss` + `atom` + `view-source` +
|
|
115
|
+
`colophon`. That IS the register.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## COLOR TOKENS
|
|
120
|
+
|
|
121
|
+
**Light canvas** — `bg: #FFFFFF` / `ink: #000000` / `border: #C0C0C0`.
|
|
122
|
+
Native link `#0000EE`, visited `#551A8B`.
|
|
123
|
+
|
|
124
|
+
**Dark canvas** — `bg: #111111` / `ink: #E8E6E3` / `border: #404040`.
|
|
125
|
+
Native link (per browser default in dark UA): `#8CB4FF` / visited
|
|
126
|
+
`#D0ADF0`. This ISN'T pure black bg — the register is "dark browser
|
|
127
|
+
default," not black-void.
|
|
128
|
+
|
|
129
|
+
**Palette variant** — 10 link-color variants (default, kelp, vermilion,
|
|
130
|
+
aubergine, ochre, cobalt, moss, ink, hazard, cyan). Only link + visited
|
|
131
|
+
values change per palette. Everything else stays FIXED across variants.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## TYPOGRAPHY
|
|
136
|
+
|
|
137
|
+
- **Display / body / mono:** ONE family. Berkeley Mono (fallback
|
|
138
|
+
JetBrains Mono, Menlo, Courier New). No secondary font.
|
|
139
|
+
- **Sizes:** h1 = 28px weight 500; h2 = 18px weight 500 (with `[NN]`
|
|
140
|
+
prefix); body = 14px line-height 1.5; caption = 12px.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## SECTION SKELETON
|
|
145
|
+
|
|
146
|
+
1. Sticky picker strip (native-link register).
|
|
147
|
+
2. Table-based masthead nav.
|
|
148
|
+
3. `[00]` Document masthead / hero.
|
|
149
|
+
4. `[01]` Recent posts (numbered list).
|
|
150
|
+
5. `[02]` Figures (3-up with captions).
|
|
151
|
+
6. `[03]` Spec table.
|
|
152
|
+
7. `[04]` Manifesto blockquote.
|
|
153
|
+
8. `[05]` Fig. 4 full-bleed figure with caption.
|
|
154
|
+
9. `[06]` Archive (year table).
|
|
155
|
+
10. `[07]` Colophon (photo + text side-by-side).
|
|
156
|
+
11. `[08]` Subscribe (native form).
|
|
157
|
+
12. Footer with copyright + rss/atom/view-source/colophon links.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Raw Concrete
|
|
2
|
+
|
|
3
|
+
> Web brutalism — system defaults weaponized, honest structure, monospace throughout.
|
|
4
|
+
|
|
5
|
+
**Slug:** `raw-concrete` — **Surface:** web — **Density:** dense
|
|
6
|
+
|
|
7
|
+
## Influence
|
|
8
|
+
|
|
9
|
+
Web brutalism (brutalistwebsites.com era). Kate Moross print, Vitalik's blog, the original Craigslist, arxiv.org paper listings.
|
|
10
|
+
|
|
11
|
+
## Signature move
|
|
12
|
+
|
|
13
|
+
Every link is `#0000EE`. Every visited link is `#551A8B`. Every border is a
|
|
14
|
+
`1px solid #C0C0C0` hairline. No border-radius anywhere — every corner is
|
|
15
|
+
90°. No box-shadow ever. Tables render as tables (visible cell borders).
|
|
16
|
+
Buttons look like `<button>` elements pre-CSS. Underlines on links stay.
|
|
17
|
+
The composition is unmistakably "the browser did this, not a designer."
|
|
18
|
+
|
|
19
|
+
## Palette
|
|
20
|
+
|
|
21
|
+
- **bg:** `#FFFFFF`
|
|
22
|
+
- **surface:** `#FFFFFF`
|
|
23
|
+
- **ink:** `#000000`
|
|
24
|
+
- **accent:** `#0000EE`
|
|
25
|
+
- **secondary:** `#C0C0C0`
|
|
26
|
+
|
|
27
|
+
## Typography
|
|
28
|
+
|
|
29
|
+
- **Display:** Berkeley Mono (paid) or JetBrains Mono (free) — 500 weight for headings, no display face beyond this
|
|
30
|
+
- **Body:** same as display — Berkeley Mono or JetBrains Mono, 400 weight, 15px
|
|
31
|
+
- **Mono:** same as display and body — the whole theme is monospace, one family, three weights
|
|
32
|
+
- **Scale:** 1.2 (minor third — deliberately shallow contrast; body and heading feel close)
|
|
33
|
+
|
|
34
|
+
## Motion
|
|
35
|
+
|
|
36
|
+
none — no transitions, no scroll reveals, no hover animations. The absence IS the register.
|
|
37
|
+
|
|
38
|
+
## Imagery
|
|
39
|
+
|
|
40
|
+
Photographs render at native aspect ratio with a 1px black border and no
|
|
41
|
+
cropping. No filters, no gradients, no vignettes. Illustrations are ASCII
|
|
42
|
+
or single-color line drawings. No 3D, no rendered shapes, no icons beyond
|
|
43
|
+
what unicode provides.
|
|
44
|
+
|
|
45
|
+
## Best for
|
|
46
|
+
|
|
47
|
+
- Personal blogs (Vitalik-register)
|
|
48
|
+
- Academic paper listings (arxiv-register)
|
|
49
|
+
- Indie developer portfolios that want to feel earned
|
|
50
|
+
- Manifestos and long-form essays
|
|
51
|
+
- Art projects that trade on refusal-of-polish
|
|
52
|
+
- Craigslist-shaped marketplaces
|
|
53
|
+
|
|
54
|
+
## Reject if
|
|
55
|
+
|
|
56
|
+
_Director grades each of the following as a pass/fail check. Any violation blocks the theme._
|
|
57
|
+
|
|
58
|
+
- Border-radius greater than 0px anywhere on the page
|
|
59
|
+
- Any box-shadow — hover, focus, or decorative
|
|
60
|
+
- CSS transitions or animations of any kind
|
|
61
|
+
- Prettified link colors — links must render as browser-default #0000EE
|
|
62
|
+
- Sans-serif or serif faces — monospace only, one family throughout
|
|
63
|
+
- Rounded buttons or pill-shaped controls
|
|
64
|
+
- Gradient backgrounds or gradient text
|
|
65
|
+
- Icon fonts or SVG icons — unicode symbols only (▲ ▼ · × → ←)
|
|
66
|
+
- Padding standardization — deliberately inconsistent, exposed structure
|
|
67
|
+
- Hover states other than the browser default underline / link-color-change
|
|
68
|
+
|
|
69
|
+
## Banned defaults (inherited + theme-specific)
|
|
70
|
+
|
|
71
|
+
- claude-cream (#F4F1EA + serif + #D97757)
|
|
72
|
+
- void+acid (near-black bg + single bright acid-green or vermilion accent)
|
|
73
|
+
- broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)
|
|
74
|
+
- tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)
|
|
75
|
+
- uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)
|
|
76
|
+
- brutalism-as-decoration (visible borders + monospace applied as decoration to an otherwise polished SaaS layout — Raw Concrete must refuse polish structurally, not aesthetically)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T07:49:34.733Z"}],"overall":"PASS","ran_at":"2026-07-03T07:49:34.733Z"}
|
|
2
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T07:54:56.618Z"},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T07:54:56.625Z"}],"overall":"PASS","ran_at":"2026-07-03T07:54:56.618Z"}
|
|
3
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T07:55:58.958Z"},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T07:55:58.965Z"}],"overall":"PASS","ran_at":"2026-07-03T07:55:58.958Z"}
|
|
4
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T07:59:21.722Z"},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T07:59:55.854Z"}],"overall":"PASS","ran_at":"2026-07-03T07:59:21.722Z"}
|
|
5
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:10.642Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:10.650Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T15:57:10.650Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-03T15:57:10.642Z"}
|
|
6
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:10.955Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":false,"failures":[{"rule":"REG-0001","severity":"block","evidence":"#0000EE in palette within 5 of #0000EE — regressed pattern: Synthetic test — matches raw-concrete's accent, expect BLOCK"}]},"ran_at":"2026-07-03T15:57:10.964Z","dismissed":[]}],"overall":"BLOCK","ran_at":"2026-07-03T15:57:10.955Z"}
|
|
7
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:11.255Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:11.266Z","dismissed":[{"rule":"REG-0001","severity":"block","evidence":"#0000EE in palette within 5 of #0000EE — regressed pattern: Synthetic test — matches raw-concrete's accent, expect BLOCK","dismissed":true,"dismissal":{"scope":"this_run","reason":"Synthetic test — removing after verification","dismissed_at":"2026-07-03T15:57:11.111Z"}}]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T15:57:11.266Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-03T15:57:11.255Z"}
|
|
8
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:11.398Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T15:57:11.410Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T15:57:11.410Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-03T15:57:11.398Z"}
|
|
9
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T16:48:54.397Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T16:48:54.405Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T16:49:24.697Z","dismissed":[]},{"gate":"anchor-compare","verdict":{"passed":true,"failures":[],"skipped":"Family A has no golden-set anchor yet — anchor-compare skipped (per Mat's Path B decision, families A+G bootstrap from their own first-authored theme)."},"ran_at":"2026-07-03T16:49:24.698Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-03T16:48:54.397Z"}
|
|
10
|
+
{"slug":"raw-concrete","gates":[{"gate":"slop-blocklist","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T22:52:07.650Z","dismissed":[]},{"gate":"regression-scan","verdict":{"passed":true,"failures":[]},"ran_at":"2026-07-03T22:52:07.658Z","dismissed":[]},{"gate":"avoid-rubric","verdict":{"passed":true,"failures":[],"skipped":"ANTHROPIC_API_KEY not set — avoid-rubric gate skipped. Set the key to grade against theme.avoid array."},"ran_at":"2026-07-03T22:52:07.658Z","dismissed":[]},{"gate":"anchor-compare","verdict":{"passed":true,"failures":[],"skipped":"Family A has no golden-set anchor yet — anchor-compare skipped (per Mat's Path B decision, families A+G bootstrap from their own first-authored theme)."},"ran_at":"2026-07-03T22:52:07.659Z","dismissed":[]}],"overall":"PASS","ran_at":"2026-07-03T22:52:07.650Z"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Generated from theme.yml. Merge into your tailwind.config.ts under theme.extend.
|
|
2
|
+
// slug: raw-concrete
|
|
3
|
+
export const rawConcreteTailwindExtend = {
|
|
4
|
+
colors: {
|
|
5
|
+
bg: "#FFFFFF",
|
|
6
|
+
surface: "#FFFFFF",
|
|
7
|
+
ink: "#000000",
|
|
8
|
+
accent: "#0000EE",
|
|
9
|
+
secondary: "#C0C0C0",
|
|
10
|
+
},
|
|
11
|
+
fontFamily: {
|
|
12
|
+
display: ["Berkeley Mono (paid) or JetBrains Mono (free) — 500 weight for headings, no display face beyond this"],
|
|
13
|
+
body: ["same as display — Berkeley Mono or JetBrains Mono, 400 weight, 15px"],
|
|
14
|
+
mono: ["same as display and body — the whole theme is monospace, one family, three weights"],
|
|
15
|
+
},
|
|
16
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Base 06 Raw Concrete — the first flagship theme authored under the v2 arc.
|
|
2
|
+
#
|
|
3
|
+
# Per SURVIVOR_MAPPING.md, Family A (Art & Design Movements) has zero
|
|
4
|
+
# survivor precedent. Raw Concrete is chosen as theme #1 specifically
|
|
5
|
+
# because its signature move is "unstyled honesty" — default link colors,
|
|
6
|
+
# visible borders, exposed structure. That's hard to slop up: the failure
|
|
7
|
+
# mode is over-styling, not under-styling. Good forcing function for a
|
|
8
|
+
# harness whose gates are looking for slop patterns.
|
|
9
|
+
#
|
|
10
|
+
# See site/design-system/BESPOKE_THEME_SYSTEM.md #06 for the source
|
|
11
|
+
# entry. This file expands that one line into the full YAML schema.
|
|
12
|
+
|
|
13
|
+
name: Raw Concrete
|
|
14
|
+
concept: Web brutalism — system defaults weaponized, honest structure, monospace throughout.
|
|
15
|
+
influence: Web brutalism (brutalistwebsites.com era). Kate Moross print, Vitalik's blog, the original Craigslist, arxiv.org paper listings.
|
|
16
|
+
|
|
17
|
+
# v2 metadata — for anchor-compare + regression-scan scoping.
|
|
18
|
+
family: A
|
|
19
|
+
base_number: 6
|
|
20
|
+
|
|
21
|
+
# Where the theme renders live. anchor-compare fetches this URL and
|
|
22
|
+
# passes the rendered screenshot to Director for grading. Anchor-compare
|
|
23
|
+
# is skipped for Family A + G in MVP (no survivor precedent) but the URL
|
|
24
|
+
# is here so the site-integration path is stable across families.
|
|
25
|
+
render_url: http://localhost:5173/themes/raw-concrete
|
|
26
|
+
|
|
27
|
+
surface: web
|
|
28
|
+
|
|
29
|
+
typography:
|
|
30
|
+
display: Berkeley Mono (paid) or JetBrains Mono (free) — 500 weight for headings, no display face beyond this
|
|
31
|
+
body: same as display — Berkeley Mono or JetBrains Mono, 400 weight, 15px
|
|
32
|
+
mono: same as display and body — the whole theme is monospace, one family, three weights
|
|
33
|
+
scale: 1.2 (minor third — deliberately shallow contrast; body and heading feel close)
|
|
34
|
+
|
|
35
|
+
palette:
|
|
36
|
+
bg: "#FFFFFF"
|
|
37
|
+
surface: "#FFFFFF"
|
|
38
|
+
ink: "#000000"
|
|
39
|
+
accent: "#0000EE" # default browser link blue — used as-is, not "our brand blue"
|
|
40
|
+
secondary: "#C0C0C0" # default table border gray
|
|
41
|
+
visited: "#551A8B" # default visited link purple — used as-is
|
|
42
|
+
|
|
43
|
+
density: dense
|
|
44
|
+
|
|
45
|
+
motion: none — no transitions, no scroll reveals, no hover animations. The absence IS the register.
|
|
46
|
+
|
|
47
|
+
signature: |
|
|
48
|
+
Every link is `#0000EE`. Every visited link is `#551A8B`. Every border is a
|
|
49
|
+
`1px solid #C0C0C0` hairline. No border-radius anywhere — every corner is
|
|
50
|
+
90°. No box-shadow ever. Tables render as tables (visible cell borders).
|
|
51
|
+
Buttons look like `<button>` elements pre-CSS. Underlines on links stay.
|
|
52
|
+
The composition is unmistakably "the browser did this, not a designer."
|
|
53
|
+
|
|
54
|
+
imagery: |
|
|
55
|
+
Photographs render at native aspect ratio with a 1px black border and no
|
|
56
|
+
cropping. No filters, no gradients, no vignettes. Illustrations are ASCII
|
|
57
|
+
or single-color line drawings. No 3D, no rendered shapes, no icons beyond
|
|
58
|
+
what unicode provides.
|
|
59
|
+
|
|
60
|
+
best_for:
|
|
61
|
+
- Personal blogs (Vitalik-register)
|
|
62
|
+
- Academic paper listings (arxiv-register)
|
|
63
|
+
- Indie developer portfolios that want to feel earned
|
|
64
|
+
- Manifestos and long-form essays
|
|
65
|
+
- Art projects that trade on refusal-of-polish
|
|
66
|
+
- Craigslist-shaped marketplaces
|
|
67
|
+
|
|
68
|
+
avoid:
|
|
69
|
+
- "Border-radius greater than 0px anywhere on the page"
|
|
70
|
+
- "Any box-shadow — hover, focus, or decorative"
|
|
71
|
+
- "CSS transitions or animations of any kind"
|
|
72
|
+
- "Prettified link colors — links must render as browser-default #0000EE"
|
|
73
|
+
- "Sans-serif or serif faces — monospace only, one family throughout"
|
|
74
|
+
- "Rounded buttons or pill-shaped controls"
|
|
75
|
+
- "Gradient backgrounds or gradient text"
|
|
76
|
+
- "Icon fonts or SVG icons — unicode symbols only (▲ ▼ · × → ←)"
|
|
77
|
+
- "Padding standardization — deliberately inconsistent, exposed structure"
|
|
78
|
+
- "Hover states other than the browser default underline / link-color-change"
|
|
79
|
+
|
|
80
|
+
banned_defaults:
|
|
81
|
+
# Global blocklist (inherited from BESPOKE_THEME_SYSTEM.md's global slop-blocklist)
|
|
82
|
+
- "claude-cream (#F4F1EA + serif + #D97757)"
|
|
83
|
+
- "void+acid (near-black bg + single bright acid-green or vermilion accent)"
|
|
84
|
+
- "broadsheet-on-noneditorial (hairline rules + zero border-radius + newspaper columns on non-editorial content)"
|
|
85
|
+
- "tech-bro purple gradient (purple→blue gradient hero + centered headline + double CTA + emoji icons)"
|
|
86
|
+
- "uniform-everything (identical padding + one weight of one sans doing every job + rounded-2xl + shadow-md cards)"
|
|
87
|
+
# Base-specific: Raw Concrete has its OWN slop failure mode
|
|
88
|
+
- "brutalism-as-decoration (visible borders + monospace applied as decoration to an otherwise polished SaaS layout — Raw Concrete must refuse polish structurally, not aesthetically)"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Generated from theme.yml. Do not edit by hand — edit theme.yml + re-materialize.
|
|
2
|
+
|
|
3
|
+
export const tokens = {
|
|
4
|
+
slug: "raw-concrete",
|
|
5
|
+
family: "A",
|
|
6
|
+
base: "06",
|
|
7
|
+
palette: {
|
|
8
|
+
"bg": "#FFFFFF",
|
|
9
|
+
"surface": "#FFFFFF",
|
|
10
|
+
"ink": "#000000",
|
|
11
|
+
"accent": "#0000EE",
|
|
12
|
+
"secondary": "#C0C0C0",
|
|
13
|
+
"visited": "#551A8B"
|
|
14
|
+
},
|
|
15
|
+
typography: {
|
|
16
|
+
"display": "Berkeley Mono (paid) or JetBrains Mono (free) — 500 weight for headings, no display face beyond this",
|
|
17
|
+
"body": "same as display — Berkeley Mono or JetBrains Mono, 400 weight, 15px",
|
|
18
|
+
"mono": "same as display and body — the whole theme is monospace, one family, three weights",
|
|
19
|
+
"scale": "1.2 (minor third — deliberately shallow contrast; body and heading feel close)"
|
|
20
|
+
},
|
|
21
|
+
surface: "web",
|
|
22
|
+
density: "dense",
|
|
23
|
+
motion: "none — no transitions, no scroll reveals, no hover animations. The absence IS the register.",
|
|
24
|
+
signature: "Every link is `#0000EE`. Every visited link is `#551A8B`. Every border is a\n`1px solid #C0C0C0` hairline. No border-radius anywhere — every corner is\n90°. No box-shadow ever. Tables render as tables (visible cell borders).\nButtons look like `<button>` elements pre-CSS. Underlines on links stay.\nThe composition is unmistakably \"the browser did this, not a designer.\"\n",
|
|
25
|
+
} as const;
|
|
26
|
+
|
|
27
|
+
export type Tokens = typeof tokens;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Design Direction — Realestate-Luxury
|
|
2
|
+
|
|
3
|
+
## Ethos
|
|
4
|
+
Sotheby's cream listing-book · Compass deep navy · Modern House serif · The Agency cinematic listings · 1stDibs editorial luxury
|
|
5
|
+
|
|
6
|
+
## Feel
|
|
7
|
+
An eight-figure listing book delivered through the browser. Deep cream backgrounds carry full-bleed property cinematography, high-contrast serif headlines name the address as if it were a chapter title, and a single deep navy accent does all the interaction work. Burgundy is the second luxury accent — focus rings, selection, the occasional vertical rule on a spec table. Reads as a bound real estate catalog, not as a marketplace search experience.
|
|
8
|
+
|
|
9
|
+
## Reference brands
|
|
10
|
+
- **Sotheby's Realty** → cream paper + Cormorant-feel serif + listing-as-portrait photography. The headline IS the address; the photograph IS the listing.
|
|
11
|
+
- **Compass** → deep navy mark + clean sans + structured global search. Navy is the canonical action color; nothing else competes.
|
|
12
|
+
- **Modern House (London)** → cream + serif + architectural full-bleed photography. The page is a quiet frame for the property.
|
|
13
|
+
- **The Agency** → deep cream + restrained nav + cinematic listing reels. Motion is slow ken-burns over stills, never UI animation for its own sake.
|
|
14
|
+
- **1stDibs Estate** → warm cream + editorial serif + provenance copy. Long-form descriptive prose is welcome — the listing has a story.
|
|
15
|
+
|
|
16
|
+
## Tokens
|
|
17
|
+
All tokens live in `src/index.css` as HSL triples. Every token's `from:` comment names its brand origin. Do not introduce numbered or generic tokens — if a new color is needed, name a brand it traces to.
|
|
18
|
+
|
|
19
|
+
Surface stack is **deep cream** (background) → **lifted cream** (card) → **deeper cream** (secondary/muted/accent). Depth comes from hairline borders on a warm hairline color, never from drop shadows or fill differentiation. Pure white is forbidden — `--paper`/`--cream` replace it; pure black is forbidden — `--navy-ink` replaces it.
|
|
20
|
+
|
|
21
|
+
Brand tokens: `--cream`, `--cream-deep`, `--navy`, `--navy-ink`, `--burgundy`, `--brass`. Primary is deep navy. Burgundy is reserved for focus, selection, and the occasional editorial rule. Brass is reserved for hardware-feeling accents — spec-table rules, divider dots — never as a button face.
|
|
22
|
+
|
|
23
|
+
## Typography
|
|
24
|
+
- **Display:** Cormorant Garamond (Sotheby's listing-book serif feel). h1–h4. Tracking `-0.012em` — Garalde display wants near-zero, just shy of it.
|
|
25
|
+
- **Body:** Inter (Compass clean sans). Body base **17px** with **line-height 1.65** — catalog-comfortable, never marketplace-dense.
|
|
26
|
+
- **Mono:** JetBrains Mono. Price, lot size, sqft, MLS number, dateline. Always `font-variant-numeric: tabular-nums` so prices align column-wise.
|
|
27
|
+
|
|
28
|
+
H1 uses `clamp(2.75rem, 7vw, 6rem)` — the address-as-title scale. Font features: `"liga"`, `"dlig"`, `"tnum"`, `"ss01"` — discretionary ligatures on the display serif, tabular numerics on body and mono.
|
|
29
|
+
|
|
30
|
+
## Spacing
|
|
31
|
+
- **Container:** `max-w-7xl px-6 lg:px-12` — wide enough for full-bleed photography and 21:9 hero stills, with generous outer gutters.
|
|
32
|
+
- **Section padding tiers:**
|
|
33
|
+
- Hero: `pt-24 pb-20 lg:pt-32 lg:pb-28`
|
|
34
|
+
- Default: `py-20 lg:py-32`
|
|
35
|
+
- Tight: `py-12 lg:py-20`
|
|
36
|
+
- **Allowed scale values:** 4 8 12 16 20 24 32 40 48 64 96 128. No arbitrary spacing. Density tier is **low** — catalog breathing, never marketplace density.
|
|
37
|
+
|
|
38
|
+
## Color
|
|
39
|
+
No hex in component files. All color via tokens. Opacity via `/N` modifier. White and pure black are forbidden — `--cream` and `--navy-ink` replace them. The palette is intentionally small: cream, navy, burgundy, brass, and the cream-family neutrals. If a designer needs a new color, the answer is almost always a wider use of one of the six brand tokens, not a new one.
|
|
40
|
+
|
|
41
|
+
## Radius
|
|
42
|
+
`--radius: 0`. **Sharp corners only.** Pills are disallowed (`pillsAllowed: false`) — they read marketplace. Every listing card, every input, every button has catalog-page corners.
|
|
43
|
+
|
|
44
|
+
## Shadows
|
|
45
|
+
**Minimal.** Two utilities:
|
|
46
|
+
- `.hairline-bottom` — `inset 0 -1px 0 hsl(var(--border))`, the divider rule between listing sections.
|
|
47
|
+
- `.shadow-listing` — `0 1px 2px hsl(var(--navy-ink) / 0.04), 0 8px 24px hsl(var(--navy-ink) / 0.06)`, used only on listing-card hover.
|
|
48
|
+
|
|
49
|
+
No glows. No colored shadows. The cream paper absorbs depth gracefully through hairlines and full-bleed photography.
|
|
50
|
+
|
|
51
|
+
## Motion
|
|
52
|
+
Three keyframes:
|
|
53
|
+
- `fade-rise` — 1000ms opacity + 20px translate, the standard entrance. Slow on purpose: catalog pacing.
|
|
54
|
+
- `ken-burns` — 32000ms infinite scale + translate on hero stills, the architectural camera push.
|
|
55
|
+
- `underline-sweep` — 600ms scaleX 0→1 from left origin, the text-link hover.
|
|
56
|
+
|
|
57
|
+
Easing: `cubic-bezier(0.22, 1, 0.36, 1)`. `prefers-reduced-motion` is honored — wrapped in a media query in every motion utility. **No marquee. No parallax. No UI bounce. No glow pulse.** This direction does not perform.
|
|
58
|
+
|
|
59
|
+
## Component patterns
|
|
60
|
+
- **Buttons:** Text-link CTAs by default, navy color, underline-sweep on hover. Solid-fill is reserved for the single hero action per page — navy bg, cream text, sharp corners. Secondary actions are hairline-outlined ghost buttons in navy. **No pill shapes. No burgundy buttons** — burgundy is focus-only.
|
|
61
|
+
- **Cards:** Sharp 0 corners, hairline border on `--cream` card surface. Internal padding `p-8 lg:p-12`. Listing cards lead with full-width photography (4:5 portrait or 3:2 landscape), address in Cormorant display, spec line in mono. Hover lifts to `shadow-listing`.
|
|
62
|
+
- **Inputs:** Border-bottom only (1px `--border`) on the cream surface. No full box. Label sits above in mono-uppercase, tracking `0.12em`. Focus shifts border to burgundy.
|
|
63
|
+
- **CTA links:** Text-link with underline-sweep for the catalog body. Solid navy rectangle for the single hero CTA (Request Viewing). **Never a pill, never a gradient, never a glow.**
|
|
64
|
+
|
|
65
|
+
## Recommended rich media
|
|
66
|
+
Realestate-Luxury is a photography-driven language. The lead asset on any listing is **environmental architectural photography, color-graded toward Architectural Digest warmth** — golden-hour interior light, cool blue-grey exterior shadow, no HDR halos, no overly-corrected verticals. Real estate hero stills should feel like Helene Binet or Iwan Baan, not like MLS phone photography.
|
|
67
|
+
|
|
68
|
+
Twilight exteriors are the canonical hero treatment — lights on inside, sky still holding cobalt, no people in frame. Interior shots are staged and styled (a single book on the bench, a vase of olive branches, never a family photo). Drone aerials are welcome for estates with land; never use drone footage of suburban subdivisions — it reads marketplace.
|
|
69
|
+
|
|
70
|
+
**AI tool recommendations:** **Midjourney v6+** with prompts like *"architectural photography, twilight exterior, Iwan Baan style, warm interior light, cobalt sky, medium format, 50mm, no people"* for hero stills; *"interior architectural photography, AD magazine, golden hour, Hasselblad, natural light, styled interior"* for interiors. Avoid Midjourney's default "luxury real estate" prompt — it produces glossy, over-saturated McMansion renders. Explicitly prompt for medium format and architectural authorship.
|
|
71
|
+
|
|
72
|
+
**Aspect ratios:** 21:9 cinematic for the hero (full-bleed, the cinematic real-estate frame); 4:5 portrait for vertical environmental shots; 3:2 for inline catalog photography. **Never 1:1 square** — that reads Instagram listing, not catalog.
|
|
73
|
+
|
|
74
|
+
**Video:** A single autoplay-muted hero reel of the property is welcome — slow drone push, slow interior tracking, 18–24 second loop. No music in autoplay. Full property tour videos sit behind a play-button poster image. ≤6 MB per hero loop, H.265 or AV1.
|
|
75
|
+
|
|
76
|
+
**Performance:** hero image ≤180 KB AVIF at 2400w; inline catalog photography ≤120 KB at 1600w. LCP under 2.2s with hero image — if it slips, optimize the image; do not strip the photography.
|
|
77
|
+
|
|
78
|
+
**Avoid:** MLS-style 14-photo carousels (marketplace territory), red SOLD overlays (Redfin territory), price-drop badges (marketplace territory), virtual-tour glasses iconography (gimmicky), AI-generated "luxury homes" (the uncanny-valley grass tells), drone footage of cookie-cutter subdivisions.
|
|
79
|
+
|
|
80
|
+
**Accessibility:** alt-text describes the property as a Sotheby's catalog would — *"Hudson Valley farmhouse with limestone exterior, cedar-shingle roof, and a maple grove descending to the river at golden hour"*. Address + property type alone is not enough.
|
|
81
|
+
|
|
82
|
+
## Component families
|
|
83
|
+
None at install time. Family conventions emerge as the project grows; the Director appends them here as they're established. First likely families: listing-card, spec-table, agent-attribution, neighborhood-frame.
|
|
84
|
+
|
|
85
|
+
## Details
|
|
86
|
+
- **Selection:** `hsl(var(--brand-burgundy) / 0.22)` background, foreground text. Burgundy doing its second-accent job.
|
|
87
|
+
- **Focus ring:** `1px solid hsl(var(--ring))` — thin burgundy. Quiet, considered, never a 2px blue web-app ring.
|
|
88
|
+
- **Scrollbar:** thin.
|
|
89
|
+
|
|
90
|
+
## Exceptions
|
|
91
|
+
None yet. When an intentional one-of-one violation lands, add it here with the reason. The Director's consistency pass lists all exceptions for human review.
|
|
92
|
+
|
|
93
|
+
## Revisions
|
|
94
|
+
- Initial direction, generated at install time.
|