# Handover — Goldstones Family Farm

Standalone HTML and CSS. No build step, no framework, no dependency beyond two
Google Fonts (Cabin and Bitter). Open any file directly in a browser.

## Files

| File | What it is |
|---|---|
| `index.html` | **Start here** — one door to every file below. |
| `tokens.json` | Every design token as structured data. Custom-property names match `tokens.css` exactly, so extraction is programmatic. |
| `tokens.css` | The same tokens as CSS custom properties, plus the base layer and every component class. **This is the only stylesheet.** |
| `components.html` | Every component in every state, rendered. Default, hover, focus, active, disabled, loading, empty, error. |
| 13 page templates | `home` · `fish` · `shop` · `product` · `stay` · `cottage` · `contracting` · `about` · `contact` · `shoots` · `thank-you-enquiry` · `thank-you-order` · `404`. Each standalone and responsive. |
| `breakpoints.html` | Every template at 375 / 768 / 1440 in live viewports. Start here. |
| `block6-extremes.html` | Block 6 hardening — each content extreme rendered, not described. |
| `home-breakpoints.html` | Home alone at the three widths. |
| `INVENTORY.md` | Every component by name, which pages use it, post-freeze additions flagged. |
| `NOTES.md` | Decisions taken during the build that were not in the brief. **Read this first.** |

## Start here

1. **`NOTES.md` §1** lists values that were invented during the build because §0 of the
   brief arrived empty. Roughly a dozen colours need a yes or a correction — the
   interpolated mid-tones in particular are now referenced by nearly every component.
2. **`components.html`** is the reference implementation. Copy classes from here rather
   than re-deriving them.
3. **`INVENTORY.md`** flags the two post-freeze components and the three deleted ones.

## Assets

Self-contained. The nineteen photographs the templates use are in `assets/` inside this
folder, referenced as `assets/…`, so the package works offline as it stands — open
`index.html` in any browser.

They are the working set only, not the full library. The farm's remaining photography sits
outside this package.

## Target stack

**Astro** (`output: 'server'`, adapter `@astrojs/cloudflare`) on **Cloudflare Workers**,
with **Sanity** as CMS and **Stripe Checkout** for payments.

> An earlier revision of this README carried Divi 5 / WooCommerce build notes. That was a
> superseded stack assumption, not a decision — it has been removed. Do not build a
> WordPress theme from this package.

### Build notes

- `tokens.css` is the only stylesheet. Import it once in the base layout; the `:root`
  block and the component classes travel together.
- Component classes are prefixed `gs-` throughout. They are the contract between design
  and build — keep the class names when converting markup into `.astro` components.
- `components.html` is the reference implementation. Copy from it rather than
  re-deriving.
- **The commerce components are static markup here.** Product card, basket,
  delivery/collection choice and the Stripe hand-off panel all need wiring to real
  endpoints. Prices must resolve server-side from `stripePriceId` on the Sanity product
  document — the browser sends product IDs and quantities only, never a price.
- `export const prerender = true` belongs on every page except the payment endpoints.
- Photography in `assets/` should move to Astro's `src/assets/` so it goes through the
  image pipeline, rather than being copied to `public/` unoptimised.

## Known state

All thirteen templates are built and Block 6 hardening has been run — see
`block6-extremes.html`. Nothing was invented at page level; every page is assembled from
`components.html`.

Two open content items, both marked in the UI rather than hidden: the cottage
differentiator (freestanding bath vs walk-in shower room) is inferred from the
photographs and needs confirming, and the lake names "Top lake" and "Bottom lake" are
placeholders.

All copy is real, in the farm's voice, no lorem. It is written but **not approved** —
treat it as a first draft. Confirmed facts and provisional values are both listed in
`tokens.json`.
