# Project instructions

## Working style — no narration, no self-correction theater (binding)
- Never write meta-narration about my own process: no "Let me do it properly instead of…", "You're right, let me actually…", "Found the bug", "Now I'll…". This is not tolerated, ever.
- Do the work silently. State only the outcome in one or two plain sentences, or ask a focused question. No play-by-play, no apologizing, no re-explaining what I just did.
- When the user states a preference or a behavioral correction, write it into this CLAUDE.md immediately — do not just acknowledge it in chat and move on.
- One change at a time, exactly what was asked. Do not add, "improve", or revert anything I wasn't asked to touch.

## NO GUESSING — look into the codebase first (binding)
Banned from guessing. Every time I get an ask — especially a "fix this" — I do NOT theorize about the cause from memory or from a thumbnail. I open the actual rendered element and the actual source and READ it until I can see the defect with certainty, THEN change exactly that. If I cannot see the element in a screenshot (html-to-image renders from document top and ignores scroll), I isolate it: clone or temporarily `position:fixed;top:0;left:0;z-index:99999` the node, screenshot, inspect, then revert. No "probably", no "likely", no fix shipped on a hunch.

## Never ship a blank screen — render verification routine (binding)
The recurring failure in this project is a page that loads **blank** even when the code looks right. Run this EVERY time I touch code, before saying I'm done:

1. **Re-serve fresh** with `ready_for_verification` (opens it in the user's tab + checks load). Never rely on my own already-warm preview — a warm iframe hides cold-load failures.
2. **Confirm real content paints**, not just "no console errors": check the expected root element exists AND has visible children, the hero/first section has non-zero height, `<img>`s report `naturalWidth>0`, and linked `support.js` + token CSS (`type.css`→`@import palette.css`,`shape.css`) all exist and resolve.
3. **If blank**, the known causes & fixes (this is how it was fixed before):
   - **Theme/styles via template `{{ holes }}`** in `style=`/`data-*` → they're empty during stream/edit and the page collapses. FIX: apply theme imperatively to the live DOM (static inline defaults that paint before JS, then `getElementById`/`setProperty` in `componentDidMount`/`Update`). Never theme through holes.
   - **A React `ref` on the DC root node** → breaks mounting. FIX: no ref on the root; find inner nodes via `getElementById`/`closest`.
   - **Missing/wrong relative links** → `./support.js` and the token CSS must exist at the referenced paths.
   - **Stale preview pane** → re-open with `ready_for_verification`; if still blank, ask the user to hard-reload (Cmd+Shift+R).
4. Only declare done once content is confirmed on screen.

## Never use the real property name or location
**Do not use the real property name or its real location (e.g. the real pond name) anywhere** in any deliverable — not in copy, headers, logos, alt text, comments, or filenames. Use a clearly-placeholder sample name instead (current placeholder: **"Loon Cottage"**, location **"Central Maine"**). Standing agreement with the user.

## No decorative accent lines
Do not add the small coral/accent dash or rule before eyebrows/headings, or similar decorative lines. The user finds them noise.

## Always apply these skills
On every piece of work in this project, use the **Frontend design** and **Interactive prototype** skills by default:

- **Frontend design** — commit to a bold, intentional aesthetic direction; distinctive type, cohesive color, atmosphere/depth, considered motion and spatial composition. (Note: when work is governed by the bound Lazy Vacations design system, follow that system first and apply Frontend-design craft within its constraints.)
- **Interactive prototype** — build real, working interactivity: state with React, hover/press states, form validation, animated transitions, multi-step flows. Make it feel like a real app, not a static mockup, wherever the artifact supports interaction.

Default to both being "on." If a given deliverable genuinely can't use one (e.g. a print-only static document), apply what fits and say so briefly.

## Tokens-first rule (binding)
**Every visual change happens in a token unless we explicitly agree otherwise in the conversation first.**

- Change the token value (in `palette.css` / `type.css` / `shape.css`, or `lazyapp.css` for editor chrome) and let it cascade — never hard-code a hex, size, font, radius, or spacing where a token exists.
- Do not edit `.t-*` / `.la-*` role classes or add one-off inline style overrides to achieve a visual change. Adjust the token the class already reads.
- If something genuinely cannot be expressed as a token, **stop and propose it** — we decide together before any non-token change is made.
- Token reference: **`TOKENS.md`**. Architecture, logic, and component catalog: **`DEVELOPMENT.md`**.
