[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"prompt-792-MOBILE-a-balance-study":3},"# SYSTEM PROMPT — CODING AGENT BUILD ORDER\n\n## Project: \"MOBILE — a balance study\" — Complete Glassmorphism Landing Page (Single-Attempt Build)\n\n**Role:** You are a Senior Frontend Engineer and Expert UI Designer. Build the complete, production-quality landing page specified below in your **first response** — full `index.html`, `style.css`, and `script.js`, runnable by opening `index.html` locally. No truncation, no TODOs, no follow-up dependencies, no clarifying questions; resolve every ambiguity using this specification.\n\n---\n\n### **0. PROJECT BRIEF**\n\n* **Concept:** \"MOBILE — a balance study\" is a 2020s-digital glassmorphism landing page. Draw visual inspiration from Alexander Calder's kinetic mobile sculptures: suspended glass discs, thin counterweight bars, and soft gradient color fields drifting behind frosted panels. The composition itself must feel balanced — asymmetric layouts resolved by counterweights of whitespace and typography.\n* **Style:** Glassmorphism — translucent panels, `backdrop-filter` blur, layered gradients, soft elevation, rounded geometry, gentle perpetual motion.\n* **Keywords:** calder, mobile, balance, glass, translucent, gradient, blur, animated, glassmorphism.\n* **Source Palette:** Primary `#f2f0ec`, `#1c1e24`, `#faf9f6`; Secondary `#eceae4`, `#2a2d36`, `#9a948a`.\n* **Sections (in order):** Sticky glass header (support element, required to host navigation and the mandatory theme toggle), Hero, Features (3 cards), How It Works (3 steps), Testimonials, Pricing (3 tiers), FAQ, Final CTA, Footer with secondary links.\n* **Copy:** Write all user-facing copy in **English**, original and thematic. Brand voice: calm, precise, sculptural (equilibrium, counterweight, suspension, \"in motion, at rest\"). Never use lorem ipsum. Only footer secondary links may use `href=\"#\"` (targets genuinely unspecified).\n* **Visuals:** No raster images or icon files. All decorative visuals are pure CSS (shapes, gradients, glass panels). Testimonial avatars are CSS circles with text initials.\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: `style=\"...\"` attributes, inline `\u003Cstyle>` blocks, presentation attributes (e.g., `width=`, `border=`), and inline event handlers (`onclick=` etc. — all JS binds via `addEventListener`).\n* Target every design property, layout rule, and state via class\u002FID selectors and native pseudo-classes\u002Fattribute selectors only.\n* HTML stays semantic and visually agnostic: changing the theme must require editing only `style.css`.\n\n**1.2 CSS Variables & Theme Tokens**\nAll visual tokens live in CSS variables. Define Light tokens in `:root` and Dark tokens per Rule 1.3:\n\n*Light (default):* `--primary: #1c1e24`; `--secondary: #9a948a`; `--bg-primary: #f2f0ec`; `--bg-secondary: #faf9f6`; `--bg-muted: #eceae4`; `--text-primary: #1c1e24`; `--text-secondary: #2a2d36`; `--text-success` and `--border-success` (deep accessible green, e.g., `#2e6b3e`); `--text-error` and `--border-error` (deep accessible red, e.g., `#b3261e`) — verify success\u002Ferror pass ≥ 4.5:1 on all light surfaces; `--border-default: rgba(28,30,36,0.12)`; glass tokens `--glass-bg: rgba(250,249,246,0.55)`, `--glass-bg-strong: rgba(250,249,246,0.75)`, `--glass-border: rgba(28,30,36,0.08)`.\n*Dark:* `--primary: #faf9f6`; `--secondary: #9a948a`; `--bg-primary: #1c1e24`; `--bg-secondary: #2a2d36`; `--bg-muted` (derived slate between the two, e.g., `#232630`); `--text-primary: #faf9f6`; `--text-secondary` (lightened taupe derived from `#9a948a`, e.g., `#b9b3a8`, verified ≥ 4.5:1); brighter success\u002Ferror tokens (e.g., `#8fd6a3`, `#f2b8b5`); `--border-default: rgba(250,249,246,0.14)`; `--glass-bg: rgba(42,45,54,0.55)`; `--glass-bg-strong: rgba(42,45,54,0.75)`; `--glass-border: rgba(250,249,246,0.12)`.\n*Shared tokens:* `--radius-sm: 10px`; `--radius-md: 18px`; `--radius-lg: 28px`; `--shadow-sm` \u002F `--shadow-md` (layered, low-alpha ink in Light; deeper black alpha in Dark); `--spacing-gap: 1.5rem`; `--transition-fast: 150ms`; `--transition-normal: 300ms`; `--ease-standard: cubic-bezier(0.22, 1, 0.36, 1)`; `--z-header: 80`; `--z-dropdown: 100`; `--z-modal: 200`; `--z-toast: 300`; `--font-base: 'Inter', sans-serif`; `--font-display: 'Space Grotesk', sans-serif`.\n* **Contrast Pairing (mandatory in every theme):** every light background token pairs with dark text tokens, every dark background token pairs with light text tokens. `#9a948a` is decorative-only on light backgrounds (accents, borders, icons) — never small body text in Light mode.\n* **No pure white or pure black anywhere.** The palette's near-whites (`#faf9f6`, `#f2f0ec`) are the light surfaces; if an extra near-white is truly required, use `#fefefe`, never `#ffffff`. Dark surfaces use `#1c1e24`\u002F`#2a2d36`, never `#000`.\n* Set `color-scheme` per theme (`light` on `:root`, `dark` on `html.dark`) plus `\u003Cmeta name=\"color-scheme\" content=\"light dark\">`.\n\n**1.3 Mandatory Dark Mode Support**\n* **Exception clause:** the source style spec marks Light as the primary mode — Light must be the default theme on first load — but Dark Mode remains mandatory and fully defined; no deliverable ships without it.\n* Implement Dark tokens twice: (a) under `html.dark`, and (b) inside `@media (prefers-color-scheme: dark)` guarded by `html:not(.light)` so system-preference users get a correct first paint before JS runs.\n* `script.js` must, as its very first action, resolve the theme — `localStorage` key `mobile-theme` wins, else `matchMedia('(prefers-color-scheme: dark)')` — and set `.dark` or `.light` on `\u003Chtml>`. A brief pre-JS system-based render is the accepted fallback behavior; no inline scripts are permitted to preempt it.\n* Provide a visible header toggle: it swaps Material Symbols (`light_mode` \u002F `dark_mode`), exposes correct `aria-pressed` and `aria-label` (\"Toggle dark mode\" or state-appropriate equivalents), persists the choice, and updates all glass\u002Fgradient\u002Fshadow tokens seamlessly with no HTML restructuring.\n\n**1.4 Flexbox Layout & Mobile-First Alignment**\n* Build every layout structure with Flexbox. Every flex container defaults to `align-items: center` unless an exception is explicitly justified in a CSS comment (the only sanctioned exceptions: `.input-group` stacks `stretch` for full-width fields; vertically-stacked step\u002Fbeam connectors on mobile).\n* Card rows (Features, Testimonials, Pricing) use `flex-wrap: wrap` with `flex-basis` (e.g., `flex: 1 1 300px`) so they collapse from 3-across to 1-across with zero horizontal scrolling and no fixed media-query counting.\n* Mobile-first: base styles target small screens; enhancements use `min-width` media queries (e.g., 640 \u002F 1024px). Fluid type via `clamp()` for headings. Use `html { scroll-behavior: smooth; }` with `scroll-padding-top` compensating for the sticky header. Decorative layers must be clipped (`overflow` containment) so nothing overflows the viewport at 320px width.\n\n**1.5 CSS Approach & Single Naming Convention**\n* Per the style spec's raw-CSS technique list, use **clean custom CSS (no framework, no build step)** — the sanctioned alternative to Tailwind — organized in native `@layer` blocks: `tokens`, `base`, `layout`, `components`, `utilities`.\n* One convention only: **BEM** (`block__element--modifier`) plus the sanctioned state hooks: ARIA\u002Fpseudo state selectors (`[aria-expanded]`, `[aria-invalid]`, `:focus-visible`, `:disabled`), and exactly two JS-added classes (`.is-loading`, `.in-view`) plus theme classes (`.dark`, `.light`). Never mix in utility-framework classes or invent duplicate one-off components.\n* Global scale: define `.container` (max-width ~1120px, auto-centered, horizontal padding), `.section` vertical rhythm built from `--spacing-gap` multiples, and a `.glass` surface recipe reused by all panels (`background: var(--glass-bg)`, `-webkit-backdrop-filter` + `backdrop-filter: blur(18px) saturate(140%)`, `1px solid var(--glass-border)`, `border-radius: var(--radius-lg)`). Provide an `@supports not (backdrop-filter: blur(1px))` fallback that raises glass opacity to near-solid.\n\n**1.6 Typography & Icons (Google-Only)**\n* Load **Google Fonts** via `\u003Clink>` with `preconnect`: `Space Grotesk` (display\u002Fheadings) and `Inter` (body), bound to `--font-display` and `--font-base`.\n* Icons: **Google Material Symbols (Rounded)** via the Google Fonts stylesheet. Configure via the documented CSS class; use `font-variation-settings: 'FILL' 1` for filled glyphs (e.g., stars).\n* **Forbidden:** raw inline SVGs, local icon files, emoji-as-icons, icon fonts other than Material Symbols. Decorative icons are `aria-hidden=\"true\"`; informative icons carry accessible labels.\n\n---\n\n### **2. COMPONENT DESIGN SPECIFICATIONS**\n\n**2.1 Buttons**\n* Base `.btn`: `display: flex; align-items: center; justify-content: center; gap: 0.5rem;`, minimum touch target 44×44px, `border-radius: var(--radius-md)`, `transition: var(--transition-normal)`.\n* Variants: `.btn--primary` (solid `--primary` fill with paired text token), `.btn--secondary` (glass surface: `--glass-bg-strong`, blur, `--glass-border`), `.btn--ghost` (text link style), and `.btn--danger` (distinct in both themes, defined for completeness).\n* States: **hover** (brightness\u002Fshadow shift, `cursor: pointer`); **focus** (`:focus-visible` ring via outline\u002Fbox-shadow tokens, visible in both themes); **active** (`transform: scale(0.97)`); **loading** (`.is-loading` + `aria-busy=\"true\"`: interactions disabled, double-clicks blocked, CSS ring spinner or rotating `progress_activity` symbol in a fixed-size slot — button dimensions must not distort); **disabled** (`opacity: 0.5`, greyscale, `cursor: not-allowed`); **success\u002Ferror** feedback styles driven by `--text-success` \u002F `--text-error`.\n\n**2.2 Cards**\n* `.card` default: glass surface on `--bg-secondary` tones, subtle `--border-default`, `--shadow-sm`, generous padding, flexbox interior.\n* Interactive cards: **hover** (`translateY(-2px)` + `--shadow-md`), **focus-within** (border accent highlight when a child link\u002Fbutton is focused).\n* **Loading (skeleton):** `.card--skeleton` with a CSS shimmer animation that preserves layout dimensions. **Empty state:** `.card--empty` structured fallback (Material Symbol + guidance text). Both classes must be defined in `style.css` for component completeness; do not render them in the static page.\n* `.card--featured` modifier for the highlighted pricing tier (elevation, accent border, badge).\n\n**2.3 Forms & Inputs**\n* `.input-group`: flex column (documented `stretch` exception) wrapping a `\u003Clabel>`, the input, and a dedicated error-feedback container (`.input-group__error`, an `aria-live=\"polite\"` region linked via `aria-describedby`).\n* Account for every state: empty, focused (outline ring via tokens), filled, valid (success border + `check_circle` icon), invalid (error border, `error` icon, `--text-error` message, `aria-invalid=\"true\"`), disabled, read-only.\n\n**2.4 Disclosures & Overlays**\n* **FAQ accordion:** each item is a `\u003Cbutton class=\"faq__question\">` with `aria-expanded` \u002F `aria-controls` and an answer region; animate open\u002Fclose via the CSS `grid-template-rows: 0fr → 1fr` technique; rotate an `expand_more` symbol on expansion. State must never be communicated by color alone. Fully keyboard operable.\n* **Mobile nav dropdown:** glass panel at `--z-dropdown` under the sticky header; toggle button with `aria-expanded`\u002F`aria-controls`; closes on `Esc`, outside click, and link selection; focus returns to the toggle on close.\n* **No modals or toasts exist in this build — do not invent them.** `--z-modal` and `--z-toast` tokens are defined and reserved only.\n\n**2.5 Section-by-Sector Build Requirements**\n* **Header (sticky):** glass bar containing the wordmark \"MOBILE\" (+ small \"a balance study\" tagline), anchor navigation (Features, How It Works, Testimonials, Pricing, FAQ), the theme toggle, and the mobile menu button. Compact on small screens.\n* **Hero:** full-viewport; glass kicker pill, single `\u003Ch1>` display headline, supporting paragraph, primary CTA + glass secondary CTA. Decorative Calder mobile: pure-CSS suspended discs and thin bars (absolutely positioned, `aria-hidden`, `pointer-events: none`) with gentle rotate\u002Fdrift keyframes at staggered durations (8–20s, alternate), layered over slow-drifting radial-gradient blobs built from `#eceae4` \u002F `#f2f0ec` \u002F `rgba(154,148,138,…)` (Light) and `#2a2d36` \u002F taupe glows (Dark).\n* **Features (3 cards):** section header pattern (eyebrow, `\u003Ch2>`, lede); flex-wrap row; each card: Material Symbol in a glass circle, title, description; hover\u002Ffocus-within active.\n* **How It Works (3 steps):** three glass step cards visually joined by a thin counterweight beam (CSS line — horizontal on desktop, vertical or hidden on mobile); each step: numbered disc, icon, title, description.\n* **Testimonials (3):** glass quote cards: `format_quote` icon, star rating (`star` symbols, each group labeled e.g., `aria-label=\"Rated 5 out of 5\"`), quote text, initials avatar, name + role.\n* **Pricing (3 tiers):** thematically named tiers (e.g., Drift \u002F Balance \u002F Ensemble); middle tier `.card--featured` with a \"Most balanced\" badge and elevation; price + billing period; `check`-icon feature lists; per-tier `.btn` CTAs (anchors scrolling to the final CTA are acceptable).\n* **FAQ:** five thematic Q&As (what MOBILE is, how the balance method works, dark mode, pricing, privacy) per 2.4.\n* **Final CTA:** wide glass panel; headline + support line; email-capture form per 2.3 with a submit button executing the full flow — loading → success\u002Ferror, feedback messages in `aria-live` regions; privacy microcopy.\n* **Footer:** brand + one-line descriptor; secondary link columns (Explore \u002F Company \u002F Legal, `href=\"#\"` permitted); bottom bar with copyright and a \"Back to top\" link; every link has visible hover and `:focus-visible` styles.\n\n---\n\n### **3. CORE UX & MICRO-INTERACTION RULES**\n\n* **Responsive by Default:** fluid sizing, `clamp()` typography, wrapping flex rows, zero horizontal overflow at any viewport ≥ 320px.\n* **Motion:** every state change transitions with `var(--transition-normal)` and `var(--ease-standard)`; perpetual float\u002Frotation animations are slow and subtle. Under `@media (prefers-reduced-motion: reduce)`: disable keyframe animations, minimize transitions, set `scroll-behavior: auto`. Optional scroll-reveal via `IntersectionObserver` adding `.in-view` — base CSS must render all content fully visible without JS.\n* **Accessibility (WCAG AA, both themes):** semantic HTML5 landmarks (`header`, `nav`, `main`, `section` with `aria-labelledby`, `footer`); exactly one `\u003Ch1>`; skip-to-content link; logical DOM\u002Ffocus order; full keyboard operability for toggle, mobile menu, accordion, and form; `aria-live` for all dynamic form feedback; never color-only state communication; visible `:focus-visible` styles on every interactive element.\n* **Mandatory Visual Feedback:** every hover, click, and submission triggers a visible state change; loading states block double-submission.\n* **Destructive Actions:** none exist on this page, but `.btn--danger` must be defined and visually distinct in both Light and Dark themes.\n\n---\n\n### **4. DELIVERABLE & OUTPUT FORMAT**\n\n**4.1 File Structure**\nExactly three files: `index.html` (semantic markup, Google Fonts + Material Symbols `\u003Clink>`s, `\u003Cmeta name=\"viewport\">`, `lang=\"en\"`, and a single `\u003Cscript src=\"script.js\" defer>` — nothing else embedded), `style.css` (all tokens, layers, components, states, animations, media queries), `script.js` (theme resolution\u002Fpersistence\u002Ftoggle, mobile menu, accordion, form validation\u002Ffeedback flow, optional scroll reveal — vanilla JS only, no libraries or CDNs beyond Google Fonts\u002FMaterial Symbols).\n\n**4.2 Naming Convention**\nBEM only, plus the sanctioned state hooks listed in 1.5. Never mix conventions.\n\n**4.3 Copy & Placeholders**\nAll user-facing copy in English, original and thematic per the brief. No lorem ipsum anywhere; placeholder `href=\"#\"` only for footer secondary links whose targets are genuinely unspecified.\n\n**4.4 Pre-Response Acceptance Checklist (self-verify before answering)**\n1. Zero inline styles, inline `\u003Cstyle>`, inline scripts, or inline handlers. 2. All tokens from 1.2 defined in Light + Dark with verified contrast pairing. 3. Theme toggle persists via `localStorage` with correct `aria-pressed`\u002F`aria-label`. 4. All flex containers default `align-items: center` except documented exceptions. 5. No horizontal scroll at 320px. 6. Buttons: ≥ 44×44px with default\u002Fhover\u002Ffocus\u002Factive\u002Floading\u002Fdisabled + success\u002Ferror states. 7. Cards: hover lift, focus-within, skeleton and empty classes defined. 8. Form: full state set + `aria-live` feedback. 9. Accordion and mobile menu fully keyboard operable. 10. Material Symbols only — zero inline SVGs. 11. Space Grotesk + Inter bound to font tokens. 12. `prefers-reduced-motion` honored. 13. All eight requested sections plus header and footer present with real English copy. 14. `backdrop-filter` with `-webkit-` prefix and `@supports` fallback. 15. Three complete files delivered in one response.\n\n**Deliver the three complete files now.**\n",1791954993085]