Pivot from the wellness/spa WZ-021 state to the locked bakery/patisserie persona. Codeless .bnp, verified against cms a0f07e2ae (OVERRIDE-CONTRACT). - 49 mandatory template overrides (+ manifest entries), re-skinned from the field-correct coffee sibling: every content field, provider var, custom tag and JS preserved verbatim; only styling + copy changed. §4 button/card reads reconciled (link/style/label, text/media). - 7 page templates: default, landing, article, full-width, blog-index, contact, auth. - 4 persona blocks: seasonal_specials, cake_gallery, order_ribbon, bakers_note (old 6 duplicate-builtin blocks deleted -> now overrides). - 5 dual-mode presets (morning-haze/berry-cream/matcha-cream/lavender-honey/ peach-blossom), all 19 tokens, tuned dusk-berry dark. - Bundled OFL fonts: Fraunces (heading) + Quicksand (body); all font-family via var(--font-*). Themed email-safe wrapper. master_pages + demo seed (home, about, blog x3, contact w/ data-table + row_inserted email workflow, login). - CSS-FIRST motion: watercolor washes, scalloped edges, soft pills; reduced- motion honored. Gates: make -> exit 0 (codeless .bnp); check-safety -> 19 ok 13 skip, exit 0. Known limits per contract §11/§12 (auth trio + page-suggestions + provider- backed lists inert until cms fix). Visuals UNVERIFIED until Wave B. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
86 lines
4.1 KiB
Markdown
86 lines
4.1 KiB
Markdown
# Pastel Dream — Build Report (Wave A, WO-TF-023)
|
|
|
|
Bakery / patisserie persona. Codeless `.bnp` theme (no Go, no wasm). Built and
|
|
verified against cms main at `a0f07e2ae` (OVERRIDE-CONTRACT freeze).
|
|
|
|
## What landed
|
|
|
|
### Identity
|
|
- `plugin.mod`: `name = "pastel-dream"`, `kind = "theme"`, `scope = "@themes"`,
|
|
`version = "0.2.0"`, bakery tags, `required_icon_packs = ["lucide", "simple-icons"]`.
|
|
- `manifest.yaml`: system template `pastel-dream`, 7 page templates, email
|
|
wrapper, 49 template overrides, `css.input_css_append` (pastel utility layer),
|
|
icon packs, presets/fonts/master-pages references.
|
|
|
|
### Overrides (49 mandatory keys)
|
|
- One `templates/overrides/pastel-dream/<key>.ninjatpl` per mandatory key, plus a
|
|
`template_overrides` entry per key. Re-skinned from the field-correct `coffee`
|
|
sibling (frozen at the same cms pin): every content field, provider var, custom
|
|
tag, and JS block preserved verbatim; only styling and copy changed to the
|
|
pastel bakery identity. Legacy button/card reads already reconciled per §4
|
|
(`link`/`style`/`label`, `text`/`media`).
|
|
|
|
### Page templates (7)
|
|
- `default`, `landing`, `article`, `full-width`, `blog-index`, `contact`, `auth`
|
|
under `templates/pastel-dream/`. Soft watercolor-wash chrome (`pd-paper` body).
|
|
|
|
### Persona blocks (4)
|
|
- `pastel-dream:seasonal_specials`, `pastel-dream:cake_gallery`,
|
|
`pastel-dream:order_ribbon`, `pastel-dream:bakers_note`. Each is a
|
|
`blocks/blocks.yaml` definition + `<key>.schema.json` (draft-07) +
|
|
`<key>.ninjatpl`. Media via `{% img %}`; arrays via `x-editor: collection`.
|
|
The six old duplicate-builtin blocks (soft-navbar, watercolor-hero,
|
|
affirmation, testimonial-soft, feature-grid-soft, cozy-footer) were deleted;
|
|
their surfaces are now the navbar/hero/quote/testimonial/feature-grid/footer
|
|
overrides.
|
|
|
|
### Presets (5, dual-mode)
|
|
- `morning-haze`, `berry-cream`, `matcha-cream`, `lavender-honey`,
|
|
`peach-blossom`. All `mode: "both"`, all 19 tokens per light + dark. Dark is a
|
|
tuned dusk plum/berry ground (not a lightened pastel) per the WO.
|
|
|
|
### Fonts (bundled, OFL)
|
|
- `fonts.json`: **Fraunces** 400/600 (heading) + **Quicksand** 400/700 (body),
|
|
woff2 in `assets/fonts/`, OFL-1.1 recorded in `assets/fonts/OFL.txt`. Every
|
|
`font-family` resolves through `var(--font-heading|body|mono, <fallback>)`.
|
|
|
|
### Email
|
|
- `templates/email/pastel-dream.ninjatpl`: table-based, inline styles, pastel
|
|
hex fallbacks for clients without CSS custom properties, scalloped divider.
|
|
|
|
### Master pages + seed
|
|
- `master_pages.json`: default/landing/blog/auth masters, "Petal & Crumb" brand.
|
|
- `seed/seed.json` (`demo: true`): home, about, blog index + 3 posts, contact,
|
|
login. Contact form → `contact_submissions` data table via
|
|
`formConfig.targetTable`. `seed/workflows.json`: `row_inserted` →
|
|
email-admins ("Form Submission Notification", recipients admins/all). Bakery
|
|
voice, no LLM-isms, no em-dashes, no fabricated stats.
|
|
|
|
### Motion tier: CSS-FIRST
|
|
- Watercolor wash + gentle `pd-breathe` blob drift + brush draw-in only. No
|
|
canvas, no JS showpiece. All animation disabled under
|
|
`prefers-reduced-motion: reduce`.
|
|
|
|
## Verification (both exit 0)
|
|
|
|
```
|
|
$ cd themes/pastel-dream && make
|
|
Built pastel-dream@0.2.0 (codeless) → pastel-dream-0.2.0.bnp # EXIT 0
|
|
|
|
$ cd check-safety && go run . themes/pastel-dream
|
|
32 checks: 19 ok 13 skip -> OK # EXIT 0
|
|
```
|
|
|
|
Runtime template rendering is not exercised by these gates (codeless build +
|
|
check-safety are static). Visual correctness stays UNVERIFIED until Wave B.
|
|
|
|
## Known limits (platform gaps, per OVERRIDE-CONTRACT §11/§12)
|
|
- `auth-form`, `auth-status`, `password-reset-form`, `page-suggestions` overrides
|
|
are inert until the compiled-block override-dispatch fix lands (authored
|
|
correctly to model).
|
|
- Provider-backed overrides (navbar/footer menus, featured/related/popular posts,
|
|
category-list, breadcrumbs, blog-hero, sidebar-nav, author-bio-hero) render
|
|
themed chrome but empty lists until the codeless loader registers overrides via
|
|
the source path. Authored faithful to the builtin provider var names.
|
|
- `preview.png` is the old (wellness) render and must be regenerated in Wave B.
|