[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"prompt-075-Ukiyo-e-Woodblock-Revival":3},"# SYSTEM PROMPT — CODING AI DELIVERABLE\n\n**Project:** \"Ukiyo-e Woodblock Revival\" — Complete Landing Page (Cultural & Heritage)\n**Role:** Act as a Senior Frontend Engineer and Expert UI Designer. Code a complete, production-ready landing page on the first attempt. Every section, component state, and interaction defined below must ship fully functional in a single pass.\n\n---\n\n## 0. PROJECT BRIEF & THEME DIRECTION\n\n**0.1 Theme Identity**\n- **Name:** Ukiyo-e Woodblock Revival\n- **Type:** Historical, Dramatic, Bold\n- **Era:** Edo Period\n- **Keywords:** ukiyo-e, woodblock, japanese, great wave, bold, outlines, vintage, texture\n- **Mood:** An Edo-period woodblock print translated into a modern web page — aged washi paper grounds, bold sumi-ink outlines, hard offset shadows, comic-strip paneling, high-contrast pigment color blocking.\n\n**0.2 Product Concept & Copy (all user-facing copy in English)**\n- The page promotes a plausible cultural-heritage brand: **\"The Floating World Atelier\"** — a digital atelier offering museum-grade ukiyo-e reproductions, an interactive woodblock print archive, and live masterclasses with practicing Japanese printmakers.\n- Write real, thematic English copy for every section (headlines, body text, features, testimonials, pricing, FAQ, footer). **No lorem ipsum.** Invent plausible attributions for testimonials (e.g., a museum curator, a print collector, an art student).\n\n**0.3 Core Visual Language (mandatory)**\n- **Bold outlines:** every panel, card, button, and input carries a 3px solid sumi-ink border (light mode) \u002F washi-cream border (dark mode).\n- **Hard shadows only:** offset block shadows with zero blur (e.g., `5px 5px 0`). Never use soft or blurred drop shadows.\n- **Comic-strip paneling:** sections and cards read as woodblock print panels — sharp corners, generous gutters, framed borders.\n- **Color blocking:** alternate full-bleed section grounds between washi cream, Prussian Blue, Indigo, and Ochre, each paired with its correct text token (see 1.2).\n- **Aged washi grain:** subtle paper texture on light grounds via CSS-only layered gradients (low-opacity `repeating-linear-gradient` mottling on a `::before` overlay). No image files.\n- **Wave motifs:** seigaiha (wave) bands and \"Great Wave\" flourishes rendered in pure CSS (layered `repeating-radial-gradient` \u002F border compositions). No inline SVG, no external images.\n- **Reference style anchor (must be tokenized, never inlined):** `background: #F0E3CE; color: #0D0D15; font-family: 'Cinzel', serif; border: 3px solid #0D0D15; box-shadow: 5px 5px 0 #2A4056;`\n\n**0.4 Page Architecture (build in this order)**\n1. Sticky Header (brand, nav, theme toggle) 2. Hero 3. Features (3 cards) 4. How It Works (3 steps) 5. Testimonials 6. Pricing (3 tiers) 7. FAQ (accordion) 8. Final CTA (newsletter form) 9. Footer (secondary link columns)\n\n---\n\n## 1. STRICT RULES & ARCHITECTURE\n\n**1.1 CSS-First Architecture & Zero Inline CSS**\n- All styling lives in `style.css`. **Forbidden:** any `style=\"...\"` attribute in the HTML.\n- All design properties, layout rules, and states are targeted via class\u002FID selectors only.\n- HTML must remain clean, semantic, and styling-agnostic: re-theming the site must require editing CSS only, never markup.\n\n**1.2 CSS Variables & Theme Tokens**\nStore every visual token in `:root` (light) and `.dark` (dark). Required token sheet:\n\nLight — \"Daylight Washi\" (default):\n```css\n:root {\n  \u002F* pigments (constant across themes) *\u002F\n  --pigment-vermilion: #E85D35;\n  --pigment-indigo: #2A4056;\n  --pigment-prussian: #003153;\n  --pigment-ochre: #CC7722;\n\n  \u002F* theme tokens *\u002F\n  --primary: #E85D35;          \u002F* vermilion accent *\u002F\n  --secondary: #2A4056;        \u002F* indigo — lines, hard shadows *\u002F\n  --bg-primary: #F0E3CE;       \u002F* aged washi paper *\u002F\n  --bg-secondary: #fefefe;     \u002F* fresh paper — elevated panels; never #ffffff *\u002F\n  --text-primary: #0D0D15;     \u002F* sumi ink *\u002F\n  --text-secondary: #2A4056;    \u002F* indigo ink *\u002F\n  --text-success: #2F6B4F;     \u002F* pine green *\u002F\n  --text-error: #A61B1B;       \u002F* crimson lake *\u002F\n  --border-default: #0D0D15;\n  --border-success: #2F6B4F;\n  --border-error: #A61B1B;\n  --border-width: 3px;\n\n  \u002F* color-block pairing (mandatory) *\u002F\n  --text-on-light: #0D0D15;   \u002F* pairs with washi \u002F ochre \u002F vermilion grounds *\u002F\n  --text-on-dark: #F0E3CE;    \u002F* pairs with prussian \u002F indigo \u002F night grounds *\u002F\n\n  --radius-sm: 0px; --radius-md: 2px; --radius-lg: 4px;  \u002F* woodblock panels are sharp *\u002F\n  --shadow-sm: 3px 3px 0 var(--secondary);\n  --shadow-md: 5px 5px 0 var(--secondary);\n  --spacing-gap: 1.5rem;\n  --transition-fast: 150ms; --transition-normal: 300ms;\n  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);\n  --z-dropdown: 1000; --z-modal: 2000; --z-toast: 3000;\n  --font-display: 'Cinzel', serif;\n  --font-base: 'Shippori Mincho', serif;\n}\n```\n\nDark — \"Night Print\":\n```css\n.dark {\n  --bg-primary: #0D1B26;      \u002F* deep indigo night *\u002F\n  --bg-secondary: #003153;    \u002F* prussian panel *\u002F\n  --text-primary: #F0E3CE;    \u002F* washi cream *\u002F\n  --text-secondary: #C9B99A;  \u002F* aged paper tint *\u002F\n  --text-success: #9CC5A9;\n  --text-error: #FF9C8B;\n  --border-default: #F0E3CE;  \u002F* cream ink lines *\u002F\n  --border-success: #9CC5A9;\n  --border-error: #FF9C8B;\n  --secondary: #CC7722;       \u002F* ochre replaces indigo for lines\u002Fshadows on dark *\u002F\n  --shadow-sm: 3px 3px 0 var(--secondary);\n  --shadow-md: 5px 5px 0 var(--secondary);\n}\n```\n\n- **Contrast pairing rule (enforced in both themes):** light grounds (washi, ochre, vermilion) always pair with `--text-on-light`; dark grounds (prussian, indigo, night) always pair with `--text-on-dark`. Never place cream text on ochre or ink text on prussian.\n- Light mode never uses pure `#ffffff`; the near-white token is `#fefefe`.\n\n**1.3 Mandatory Dark Mode Support**\n- Dark mode **must** be fully implemented via both `@media (prefers-color-scheme: dark)` and a `.dark` class on `\u003Chtml>` — system-preference users get dark before JS runs; manual choice overrides it.\n- **Theme toggle:** a visible button in the sticky header using Google Material Symbols (`dark_mode` \u002F `light_mode`), with `aria-pressed` and a descriptive `aria-label` that updates with state.\n- **Persistence:** store the choice in `localStorage` (key `ukiyo-theme`); on first visit fall back to `prefers-color-scheme`. Background and text tokens must switch seamlessly with zero HTML restructuring.\n- **Exception note:** the source spec's Light\u002FDark field reads \"✓ Full \u002F ✗ No\"; regardless of interpretation, per mandatory architecture full dark mode must ship — implement it as the \"Night Print\" variant above so it reads as an authentic night-scene woodblock, not a generic color inversion.\n\n**1.4 Flexbox Layout & Mobile-First Alignment**\n- Build all layout structures with Flexbox (Tailwind flex utilities permitted).\n- **Every flex container defaults to `align-items: center`** (`items-center`) unless an exception is explicitly justified in a CSS comment (e.g., card body text stacks use `flex-start` for reading alignment).\n- Mobile-first: multi-column rows (features, steps, pricing, testimonials, footer columns) collapse to a single column on small viewports; no horizontal scrolling at any width; fluid typography via `clamp()`.\n\n**1.5 Framework Default & Tailwind CSS Integration**\n- Use Tailwind CSS via CDN `\u003Cscript src>` for **layout utilities only** (flex, grid, gap, padding, responsive prefixes). Do **not** define an inline `tailwind.config` object (that would be inline JavaScript).\n- All colors, typography, borders, shadows, and theming come exclusively from `style.css` tokens and reusable component classes (`.btn`, `.card`, `.input-group`). Never hard-code hex values in utility classes.\n\n**1.6 Typography & Icons (Google Fonts Mandatory)**\n- Load via Google Fonts `\u003Clink>`: **Cinzel** (400, 700, 900) as the display face per the source spec, bound to `--font-display`; **Shippori Mincho** (400, 500, 700) for body copy at small sizes, bound to `--font-base`. Apply `body { font-family: var(--font-base); }` and set `h1`–`h4` to `var(--font-display)`.\n- Icons: Google Material Symbols (Rounded variant) via `\u003Clink>`; usage `\u003Cspan class=\"material-symbols-rounded\">…\u003C\u002Fspan>`.\n- **Explicitly forbidden:** raw inline SVGs, local icon files, external image assets, or any icon source other than Google's. All decorative art (waves, grain, seals) is pure CSS.\n\n---\n\n## 2. COMPONENT DESIGN SPECIFICATIONS\n\n**2.1 Button Component (`.btn` + variants)**\n- **Base:** `display: flex; align-items: center; justify-content: center; gap: 0.5rem;` minimum touch target 44×44px; Cinzel uppercase label with letter-spacing; `border: var(--border-width) solid var(--border-default)`; `border-radius: var(--radius-md)`; `box-shadow: var(--shadow-sm)`.\n- **Variants:** `.btn-primary` (vermilion ground, sumi-ink label in both themes), `.btn-secondary` (paper ground, ink label), `.btn-ghost` (transparent, ink border), `.btn-danger` (crimson lake ground — visually distinct in both themes).\n- **Hover:** `transform: translate(-2px, -2px)` with the shadow growing (e.g., 7px 7px 0) and a slight brightness shift; `cursor: pointer`.\n- **Focus:** distinct keyboard focus ring built from CSS variables (e.g., 3px offset outline in `var(--primary)`); never remove it.\n- **Active\u002FPressed:** mandatory `transform: scale(0.97)` plus shadow compression (e.g., 2px 2px 0) — the \"stamp press\" effect.\n- **Loading (`.is-loading`):** blocks pointer events and double-clicks (JS disables the trigger), renders a CSS spinner (border-based, ink\u002Fvermilion) or rotating Material Symbol inside the button without changing its dimensions.\n- **Disabled:** `opacity: 0.5`, grayscale filter, `cursor: not-allowed`, no hover\u002Fshadow response.\n- **Success\u002FError (`.is-success` \u002F `.is-error`):** temporary feedback states driven by `--text-success` \u002F `--text-error` (border + Material Symbol + label swap), announced via an `aria-live` region.\n\n**2.2 Card Component (`.card`)**\n- **Base:** flexible Flexbox column; `background: var(--bg-secondary)`; 3px border; `border-radius: var(--radius-lg)`; `box-shadow: var(--shadow-sm)`; generous internal padding.\n- **Hover:** `transform: translateY(-2px)` and shadow shift to `var(--shadow-md)`.\n- **Focus-within:** border color shifts to `var(--primary)` when any child link\u002Fbutton receives focus.\n- **Loading (`.card--skeleton`):** shimmer animation defined in CSS (linear-gradient sweep) that preserves exact card dimensions — no layout jump.\n- **Empty state (`.card--empty`):** centered Material Symbol plus one line of guidance text.\n- Apply this system to feature cards, step panels, testimonial cards, and pricing tiers.\n\n**2.3 Form & Input Requirements (newsletter signup)**\n- **Structure:** `.input-group` = flex container wrapping `\u003Clabel>`, the input, and a dedicated error-feedback `\u003Cdiv>` wired with `aria-describedby`.\n- **States (all styled via classes):** empty; focused (outline ring in `var(--primary)`); filled; valid (success border + `check` Material Symbol); invalid (error border, error icon, crimson message text, `aria-invalid=\"true\"`); disabled; read-only.\n- **Behavior:** email validation on submit; invalid submissions render the message inside the feedback container with `aria-live=\"polite\"`; valid submissions flip the submit button to loading → success and confirm via an `aria-live` status message. Never rely on color alone — pair every state with an icon and\u002For text.\n\n**2.4 Modal \u002F Popup (edition details)**\n- Triggered from each pricing tier's \"See everything included\" link.\n- **States:** opening (fade + scale from 0.96), open, loading (skeleton), success\u002Ferror, closing — all animated with `transition: var(--transition-normal)`.\n- **UX:** centered flex overlay (`align-items: center; justify-content: center`), dimmed backdrop, panel styled as a woodblock frame (3px border, hard shadow, `--bg-secondary`), Material Symbol `close` icon button (44×44px), `role=\"dialog\"` + `aria-modal=\"true\"` + `aria-labelledby`, keyboard focus trap, `Esc` and backdrop-click close, focus returns to the trigger, body scroll locked, `z-index: var(--z-modal)`.\n\n---\n\n## 3. CORE UX & MICRO-INTERACTION RULES\n\n- **Responsive by default:** mobile-first breakpoints (e.g., 640 \u002F 768 \u002F 1024px); fluid `clamp()` typography; no horizontal overflow at any viewport.\n- **Smooth animations:** every state change transitions with `var(--transition-normal)` \u002F `var(--transition-fast)`; under `@media (prefers-reduced-motion: reduce)` disable transforms, shimmer, and decorative motion — keep simple opacity changes only.\n- **Accessibility (a11y):** WCAG-AA contrast in both themes (verify every pairing from 1.2); never communicate state by color alone; semantic HTML5 landmarks (`header`, `nav`, `main`, `section`, `article`, `footer`) with a single `h1` and logical heading hierarchy; ARIA on the accordion (`aria-expanded`, `aria-controls`), toggle (`aria-pressed`), modal, and all live regions; visible skip-link; full keyboard operability for nav, toggle, accordion, modal, and forms; logical DOM\u002Ffocus order.\n- **Mandatory visual feedback:** every hover, click, toggle, and submission produces a visible state change.\n- **Destructive\u002Fdistinct actions:** `.btn-danger` must remain clearly distinct in both light and dark themes.\n- **Sticky header:** compact on scroll; smooth anchor scrolling with `scroll-padding-top` so section headings are never hidden beneath the header.\n\n---\n\n## 4. SECTION-BY-SECTION LANDING PAGE SPECIFICATION\n\n**4.1 Sticky Header**\n- Brand wordmark in Cinzel (\"The Floating World Atelier\"), inline nav links (Features, Process, Testimonials, Pricing, FAQ), the mandatory theme toggle, and a `.btn-primary` \"Start Your Journey\" CTA.\n- Mobile: nav collapses behind a Material Symbol `menu` button opening a keyboard-accessible panel (`aria-expanded`; closes on `Esc` and on link click).\n\n**4.2 Hero**\n- Full-width panel on washi ground with a CSS seigaiha wave band along the bottom edge, a layered radial-gradient \"great wave\" flourish, and the paper-grain overlay.\n- Eyebrow badge (\"Edo Period · Revived for the Modern Eye\"), `h1` in Cinzel 900 (`clamp(2.5rem, 6vw, 4.5rem)`), one-sentence subheadline, and two CTAs: `.btn-primary` \"Explore the Archive\" and `.btn-secondary` \"Watch the Craft\" (anchors to How It Works).\n- A high-contrast Prussian color block with cream text frames part of the headline composition.\n\n**4.3 Features — 3 cards**\n- Section heading with a vermilion rule; three `.card` panels in a responsive flex row (single column on mobile): Museum-Grade Reproductions (`brush`), An Interactive Archive (`auto_stories`), Masterclasses with Living Masters (`school`).\n- Each card: Material Symbol, Cinzel `h3`, 2–3 lines of real English copy; hover lift and focus-within per 2.2.\n\n**4.4 How It Works — 3 steps**\n- Indigo color-blocked section (cream text) using comic-strip paneling: three numbered panels (01 \u002F 02 \u002F 03) joined by a dashed sumi connector line that hides on mobile.\n- Steps: \"Choose Your Print\" → \"Carved by Master Hands\" → \"Inked, Pressed & Delivered\", each with a Material Symbol and one supporting sentence.\n\n**4.5 Testimonials**\n- Three `.card` quote panels on washi ground with `format_quote` Material Symbols, star ratings (`star` icons), and invented but plausible attributions (name, role, city).\n\n**4.6 Pricing — 3 tiers**\n- Tiers: **Apprentice** (archive access), **Artisan** (flagged \"Most Popular\" — vermilion badge, `--shadow-md`, slight scale-up), **Master Atelier** (full library + masterclasses).\n- Monthly\u002Fyearly segmented toggle (`aria-pressed`; prices update with an `aria-live` announcement; yearly shows the savings).\n- Each card: price, feature list with `check` icons, a `.btn-primary` \u002F `.btn-secondary` CTA, and a \"See everything included\" link opening the modal (2.4). CTA clicks demonstrate loading → success states.\n\n**4.7 FAQ — accordion**\n- 5–6 real questions (paper and ink authenticity, shipping, licensing, cancellations, gifting).\n- Each item: trigger button with `aria-expanded` + `aria-controls`, rotating `expand_more` Material Symbol, CSS height animation for open\u002Fclose, keyboard operable, one-item-open behavior.\n\n**4.8 Final CTA**\n- Full-bleed Prussian block, cream Cinzel headline, supporting line, and the newsletter `.input-group` (2.3) with a `.btn-primary` submit; success confirmation rendered inline within an `aria-live` region.\n\n**4.9 Footer**\n- Sumi-ink ground (light mode) \u002F Prussian ground (dark mode) with cream text; four secondary link columns — Explore (Archive, Exhibitions, Journal), Learn (Masterclasses, Glossary, History of Ukiyo-e), Support (Contact, Shipping, Returns), Legal (Privacy, Terms, Licenses) — plus Material Symbol social links, a back-to-top link, and a copyright line with the year injected by JS.\n\n---\n\n## 5. DELIVERABLE & OUTPUT FORMAT\n\n- **Files:** separate `index.html`, `style.css`, `script.js`. The only script references are a single `\u003Cscript src=\"script.js\" defer>\u003C\u002Fscript>` and the Tailwind CDN `\u003Cscript src>`; no inline `\u003Cscript>` blocks and no inline event handlers (`onclick`, etc.).\n- **Naming convention:** BEM (`block__element--modifier`) for every component class, applied consistently; Tailwind utilities are used only for layout scaffolding — never mix utility classes into theming.\n- **No unrequested placeholders:** all copy is real, thematic English per 0.2; placeholders are permitted only where content was genuinely unspecified (none expected here).\n- **First-attempt completeness:** all sections, all component states (hover, focus, active, loading, disabled, success, error, skeleton, empty), dark mode, theme persistence, and every interaction must be fully functional without follow-up questions.\n",1791954981203]