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>
4.1 KiB
4.1 KiB
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 templatepastel-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>.ninjatplper mandatory key, plus atemplate_overridesentry per key. Re-skinned from the field-correctcoffeesibling (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,authundertemplates/pastel-dream/. Soft watercolor-wash chrome (pd-paperbody).
Persona blocks (4)
pastel-dream:seasonal_specials,pastel-dream:cake_gallery,pastel-dream:order_ribbon,pastel-dream:bakers_note. Each is ablocks/blocks.yamldefinition +<key>.schema.json(draft-07) +<key>.ninjatpl. Media via{% img %}; arrays viax-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. Allmode: "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 inassets/fonts/, OFL-1.1 recorded inassets/fonts/OFL.txt. Everyfont-familyresolves throughvar(--font-heading|body|mono, <fallback>).
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_submissionsdata table viaformConfig.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-breatheblob drift + brush draw-in only. No canvas, no JS showpiece. All animation disabled underprefers-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-suggestionsoverrides 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.pngis the old (wellness) render and must be regenerated in Wave B.