[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"prompt-691-Astryx-Stone":3},"# CODING AGENT SYSTEM PROMPT — LANDING PAGE BUILD: \"ASTRYX STONE\"\n\n**Your Role:** Senior Frontend Engineer and Expert UI Designer.\n**Objective:** Build a complete, production-ready landing page in your first response — full `index.html`, `style.css`, and `script.js`. Do not ask clarifying questions. Where this spec leaves details open, make expert decisions that stay consistent with the theme. Every rule below is mandatory.\n\n---\n\n## 0. PROJECT BRIEF — THEME IDENTITY: \"ASTRYX STONE\"\n\n- **Style:** Elegant mineral — bold geometric display typography over stone-toned surfaces. Corporate, solid, refined.\n- **Keywords:** stone, slate, gray, mineral, montserrat, corporate, solid, elegant, warm-gray, astryx.\n- **Aesthetic Era:** 2026 Meta — warm-gray executive feel, architecture-portfolio sophistication, generous whitespace, confident geometry.\n- **Color Modes:** Full light mode + full dark mode. Both are mandatory and must be equally polished.\n- **Motion Signature:** All transitions use `cubic-bezier(0.24, 1, 0.4, 1)`; fast = 175ms, normal = 410ms.\n- **Visual Devices:** Subtle mineral textures and slate-toned shadows. Build **every** texture and decorative visual with pure CSS (layered gradients, shadows). No external image files, no `\u003Cimg>` elements.\n- **Base Technicals:** Body font 'Figtree'; display font 'Montserrat'; base border-radius 12px; light background #F4F2EF with text #2C3640.\n\n**Sections to build (in DOM order):**\n1. Sticky Header (logo, nav, theme toggle, CTA)\n2. Hero\n3. Features (3 cards)\n4. How It Works (3 steps)\n5. Testimonials (3 quotes)\n6. Pricing (3 tiers)\n7. FAQ (accordion)\n8. Final CTA (email capture)\n9. Footer with secondary links\n\n**Copy:** All user-facing copy must be written in **English**. Do not use lorem ipsum anywhere. Invent a coherent product narrative for the \"Astryx Stone\" brand (e.g., a sophisticated project\u002Fmaterials platform for architecture and design firms) and keep names, tone, and claims consistent across every section. Voice: assured, architectural, minimal — no hype words.\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`. The `style=\"...\"` attribute is **forbidden** anywhere in the HTML.\n- Every rule targets a class or ID selector. No element-only styling outside of base resets\u002Ftypography in the base layer.\n- HTML must remain semantic and structure-only: changing the site's look must never require markup edits.\n- No inline event handlers (`onclick`, `onsubmit`, etc.) — all behavior is attached via listeners in `script.js`.\n\n**1.2 CSS Variables & Theme Tokens**\nDefine all visual tokens as CSS variables. Color map (exact values):\n\n| Token | Light Mode | Dark Mode |\n|---|---|---|\n| `--primary` | `#647685` (Stone Gray) | `#8494A3` (Slate) |\n| `--primary-strong` (hover\u002Fpressed) | `#556473` | `#97A6B4` |\n| `--primary-ink` (text\u002Ficons on primary) | `#F4F2EF` | `#1E272F` |\n| `--secondary` | `#8494A3` | `#647685` |\n| `--accent-soft` (tints, borders, stars) | `#B8C4CE` (Light Stone) | `#B8C4CE` |\n| `--bg-primary` | `#F4F2EF` (Warm White — never `#ffffff`) | `#1E272F` (Charcoal) |\n| `--bg-secondary` | `#E9E6E0` (warm stone step) | `#25303A` |\n| `--bg-elevated` | `#FEFEFE` (never `#ffffff`) | `#2C3640` (Warm Dark) |\n| `--text-primary` | `#2C3640` (Warm Dark) | `#F4F2EF` |\n| `--text-secondary` | `#56656F` (Stone Gray darkened to hit 4.5:1) | `#B8C4CE` |\n| `--text-success` | `#3E7A5F` | `#7CB99B` |\n| `--text-error` | `#B0483F` | `#E58C85` |\n| `--border-default` | `#D9D5CD` | `rgba(184,196,206,0.18)` |\n| `--border-strong` | `#B8C4CE` | `rgba(184,196,206,0.35)` |\n| `--border-success` | `#3E7A5F` | `#7CB99B` |\n| `--border-error` | `#B0483F` | `#E58C85` |\n| `--surface-inverse` (CTA band) | `#2C3640` | `#2C3640` with `--border-strong` |\n| `--text-on-inverse` | `#F4F2EF` | `#F4F2EF` |\n\nNon-color tokens (single definitions, theme-agnostic):\n- `--font-base: 'Figtree', sans-serif;` and `--display-font: 'Montserrat', sans-serif;`\n- `--radius-sm: 8px; --radius-md: 12px; --radius-lg: 20px;`\n- `--shadow-sm: 0 1px 2px rgba(44,54,64,0.10), 0 4px 12px rgba(44,54,64,0.06);` and `--shadow-md: 0 12px 32px rgba(44,54,64,0.16);` — slate-tinted shadows. In dark mode, deepen both (e.g., `rgba(10,14,18,0.5)`).\n- `--spacing-gap: 1.5rem;` plus a consistent 4\u002F8-based spacing scale.\n- `--transition-fast: 175ms; --transition-normal: 410ms; --ease-standard: cubic-bezier(0.24, 1, 0.4, 1);` — the global default for interactive elements is `transition: all var(--transition-normal) var(--ease-standard);`; hover\u002Ffocus micro-feedback may use `--transition-fast`.\n- `--z-dropdown: 100; --z-modal: 1000; --z-toast: 1100;`\n\n**Contrast Pairing (mandatory in every theme):** every light background token pairs with a dark text token, every dark background token pairs with a light text token. Verify ≥ 4.5:1 for body text and ≥ 3:1 for large text, borders, and UI components in **both** modes.\n\n**1.3 Mandatory Dark Mode Support**\n- Dual mechanism in `style.css`, in this exact order: light tokens in `:root` → dark tokens under `@media (prefers-color-scheme: dark)` → explicit `html.dark` (dark tokens) and `html.light` (light tokens) override blocks **after** the media query, so a stored user preference always beats the system setting.\n- Set `color-scheme: light` \u002F `dark` correctly per mode so native widgets match.\n- **Theme toggle:** a visible button in the header using Material Symbols `dark_mode` \u002F `light_mode`. It must expose `aria-pressed` (`true` = dark active) and a dynamic `aria-label` (\"Switch to dark theme\" \u002F \"Switch to light theme\"). Minimum 44×44px touch target.\n- **Persistence:** store the choice in `localStorage` under key `astryx-stone-theme` (`\"light\"` or `\"dark\"`); fall back to `prefers-color-scheme` on first visit; listen to system changes only when no stored value exists. Apply the class at the very top of `script.js` execution to minimize flash of wrong theme. No inline `\u003Cscript>` boot snippet — the media-query fallback covers first paint.\n\n**1.4 Flexbox Layout & Mobile-First Alignment**\n- Build all layout structures with Flexbox. Every flex container **defaults to `align-items: center`** unless an exception is explicitly justified in a CSS comment (the only allowed default exception: equal-height card grids using `align-items: stretch`).\n- Mobile-first: single-column stacks below 768px, multi-column grids ≥ 768px. Zero horizontal scrolling from 320px to 1920px. Fluid type and spacing via `clamp()`.\n\n**1.5 Framework Default & Layered Custom CSS**\n- Do **not** link any CDN or build framework (only one script tag is allowed — see Section 4). Use clean, hand-authored CSS in `style.css`, organized into commented layers: `\u002F* BASE *\u002F`, `\u002F* COMPONENTS *\u002F`, `\u002F* SECTIONS *\u002F`, `\u002F* UTILITIES *\u002F`.\n- All classes map back to the CSS variables and a fixed set of generic, reusable component names: `.btn`, `.card`, `.input-group`, `.chip`, `.container`, `.section`.\n\n**1.6 Typography & Icons (Google Fonts Mandatory)**\n- Load via Google Fonts `\u003Clink>` tags (with `preconnect`): **Figtree** (400, 500, 600, 700) for body\u002FUI and **Montserrat** (600, 700, 800) for display headings, with `display=swap`. Bind them to `--font-base` \u002F `--display-font`.\n- Icons: **Google Material Symbols (Rounded)** stylesheet. Mark up icons as `\u003Cspan class=\"material-symbols-rounded\" aria-hidden=\"true\">icon_name\u003C\u002Fspan>`. Configure `font-variation-settings: 'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 24` (use `'FILL' 1` for filled star ratings).\n- **Forbidden:** raw inline SVGs, local icon files, emoji used as icons.\n\n---\n\n## 2. COMPONENT DESIGN SPECIFICATIONS\n\n**2.1 Button Component (`.btn`)**\n- **Default:** `display: flex; align-items: center; justify-content: center; gap: 0.5rem;` Minimum 44×44px touch target. Montserrat 600 label, `--radius-md`, global transition token. Variants: `.btn--primary` (`--primary` bg + `--primary-ink` text), `.btn--ghost` (transparent, `--border-strong`, `--text-primary`), `.btn--inverse` (for the dark CTA band), `.btn--danger` (visually distinct in **both** themes).\n- **Hover:** `--primary-strong` background shift (or `brightness`) + `--shadow-sm`; `cursor: pointer`.\n- **Focus:** visible `:focus-visible` ring — `outline: 2px solid var(--primary); outline-offset: 2px` — never removed.\n- **Active:** `transform: scale(0.97)` click feedback.\n- **Loading (`.is-loading` + `aria-busy=\"true\"`):** interactions disabled (prevents double-clicks\u002Fdouble submits); render a rotating Material `progress_activity` icon or CSS spinner; **button dimensions must not change**.\n- **Disabled:** `opacity: 0.5`, grayscale, `cursor: not-allowed`, no hover\u002Factive transforms.\n- **Success\u002FError:** temporary feedback classes colored by `--text-success` \u002F `--text-error`, announced through an `aria-live` region.\n\n**2.2 Card Component (`.card`)** — reused by Features, Testimonials, Pricing.\n- **Default:** flex column, `--bg-elevated` surface, 1px `--border-default`, `--radius-md`, `--shadow-sm`, spacing-scale padding.\n- **Hover:** `transform: translateY(-2px)` + `--shadow-md`.\n- **Focus-within:** border shifts to `--primary` when a child link\u002Fbutton receives focus.\n- **Loading (skeleton):** define a `.card--skeleton` shimmer (animated light-sweep gradient) with fixed dimensions to prevent layout jumps. **Demonstrate it:** the Testimonials section simulates a brief async load on first visit — 3 skeleton cards (present in HTML, hidden by default, `aria-hidden=\"true\"`) are shown for ~700ms before real content appears. Skip the simulation entirely under `prefers-reduced-motion`; with JS disabled, real content must be visible immediately.\n- **Empty state:** define `.card--empty` (Material icon + concise guidance text) and **use it** as the confirmation surface of the Final CTA form after successful submission (e.g., `mark_email_read` icon + confirmation message).\n\n**2.3 Form & Input (`.input-group`)** — used by the Final CTA capture and Footer newsletter.\n- **Structure:** flex column wrapper containing `\u003Clabel>`, the `\u003Cinput>` (min-height 44px), and a dedicated error `\u003Cp>` wired via `aria-describedby` and `aria-live=\"polite\"`.\n- **States, all via CSS classes:** empty, focused (outline ring in `--primary`), filled, valid (`.input-group--valid`: success border + `check` icon), invalid (`.input-group--invalid`: error border, `--text-error` message, `error` icon), disabled, read-only.\n- **Behavior (in `script.js`):** client-side email validation on submit; invalid → inline error message in the live region; valid → button enters loading state ~1.1s, then success (CTA form swaps to the empty-state confirmation card; footer form shows a success toast). Never fake success on invalid input.\n\n**2.4 Modal \u002F Popup & Overlay Drawer** — applies to the mobile navigation drawer (and any modal you choose to add).\n- **States:** opening, open, closing — all animated with `--transition-normal` + `--ease-standard` (opacity + translate). Backdrop: slate-tinted `rgba(30,39,47,0.5)` overlay.\n- **UX:** centered\u002Ffitted flex container, close via Esc key, overlay click, and a Material `close` icon button; keyboard focus trapped inside while open; focus restored to the trigger on close; body scroll locked; `role=\"dialog\"` + `aria-modal=\"true\"`; layered at `--z-modal`.\n\n**2.5 FAQ Accordion (`.faq-item`)**\n- Each item: `\u003Cbutton class=\"faq-item__trigger\">` holding the question + `expand_more` icon, with `aria-expanded` and `aria-controls`; answer panel with `role=\"region\"`.\n- Smooth height animation via the `grid-template-rows: 0fr → 1fr` technique (inner wrapper `overflow: hidden`), `--transition-normal`; icon rotates 180° when open; open item highlighted with `--primary` border or `--bg-secondary` surface.\n- One item open at a time, all closed initially. Fully keyboard operable via native buttons.\n\n**2.6 Header, Theme Toggle & Toast**\n- Sticky header with `backdrop-filter: blur(12px)` over a translucent `--bg-primary` alpha layer, bottom border, logo wordmark in Montserrat 800, anchor nav, theme toggle (per 1.3), and a ghost CTA.\n- Smooth in-page scrolling (`scroll-behavior: smooth` + `scroll-margin-top` on all sections to clear the sticky header).\n- Toast (`.toast`): fixed bottom-right, `--z-toast`, `role=\"status\"` + `aria-live=\"polite\"`, Material icon + message, entrance\u002Fexit transitions, auto-dismiss after 4s, single-instance (a new toast replaces the previous).\n\n---\n\n## 3. CORE UX & MICRO-INTERACTION RULES\n\n- **Responsive by default:** fluid `clamp()` type and spacing; breakpoints at 640\u002F768\u002F1024px; no horizontal overflow at any width.\n- **Smooth animations:** every state change transitions with the motion tokens. Under `@media (prefers-reduced-motion: reduce)`: disable transforms\u002Fanimations, set `scroll-behavior: auto`, make reveal elements instantly visible, and skip the skeleton simulation.\n- **Accessibility (a11y):** semantic landmarks (`header`, `main`, `footer`, `nav`, `section` with `aria-labelledby`); exactly one `\u003Ch1>`; a visually hidden skip-to-content link that appears on focus; logical focus order; every interaction keyboard operable; state never communicated by color alone (always pair color with an icon, text, or shape); `aria-live` for all dynamic feedback (form errors, toasts, loading).\n- **Mandatory visual feedback:** every click, hover, and submission triggers a visible state change (nav link underline slide, card lift, button states, toast, confirmation card).\n- **Destructive actions:** the `.btn--danger` pattern must be defined and visually distinct in both light and dark themes.\n\n---\n\n## 4. DELIVERABLE & OUTPUT FORMAT\n\n- **Files:** exactly three — `index.html`, `style.css`, `script.js`. Only one script tag in the entire HTML: `\u003Cscript src=\"script.js\" defer>\u003C\u002Fscript>`. No other scripts, no CDN links, no inline code blocks.\n- **Naming convention:** one consistent **BEM** convention everywhere (`block__element--modifier`), built on the generic bases `.btn`, `.card`, `.input-group`, `.chip`, `.container`, `.section` (e.g., `.btn--primary`, `.feature-card__icon`, `.pricing-card--featured`, `.faq-item__trigger`, `.input-group__error`). Never mix conventions; no utility-class soup.\n- **Head requirements:** title, meta description, `\u003Cmeta name=\"theme-color\">` for both light and dark schemes, Google Fonts and Material Symbols links with `preconnect`.\n- **No unrequested placeholders:** no lorem ipsum — all copy authored, on-brand, in English. Demo-only `href=\"#\"` links are acceptable only for links that have no in-page target, and must keep descriptive link text.\n\n---\n\n## 5. PAGE STRUCTURE — SECTION-BY-SECTION SPECIFICATIONS\n\n**5.1 Sticky Header**\nFlex row, space-between, `align-items: center`, ~64–72px tall. Wordmark \"Astryx Stone\" (Montserrat 800; consider \"ASTRYX\" bold + \"STONE\" lighter). Nav anchors: Features, How It Works, Testimonials, Pricing, FAQ. Below 768px, nav collapses behind a `menu` icon button opening the drawer (Section 2.4). Theme toggle + `.btn--ghost` \"Get started\" → `#pricing`.\n\n**5.2 Hero**\nTwo-column ≥ 1024px (copy left, CSS-composed visual right), stacked below. Eyebrow chip (uppercase Montserrat, letter-spaced), `\u003Ch1>` Montserrat 800 `clamp(2.5rem, 5.5vw, 4.25rem)` line-height ~1.05, sub-paragraph in Figtree, CTA pair: `.btn--primary` → `#pricing`, `.btn--ghost` → `#how-it-works`. Trust stats row (e.g., \"2,400+ firms · 99.98% uptime · 38 countries\") with slate separators. Background: subtle mineral texture — layered CSS gradients (faint dot-grid + soft slate radial glows at low opacity, variants for both themes) plus decorative CSS \"stone slab\" shapes (layered rounded rectangles with slate gradients and slate shadows).\n\n**5.3 Features (3 cards)**\nShared section header pattern: eyebrow, `\u003Ch2>` Montserrat 700, lead paragraph. Grid 1 → 3 columns, gap `--spacing-gap`. Each `.feature-card`: icon tile (Material Symbols — e.g., `layers`, `architecture`, `insights` — in a `--primary`-tinted rounded square), `\u003Ch3>`, body copy, and a \"Learn more\" text link with `arrow_forward`. Full card states per Section 2.2.\n\n**5.4 How It Works (3 steps)**\nThree steps with oversized outlined step numerals (\"01\u002F02\u002F03\", Montserrat 800, slate color), Material icon, `\u003Ch3>`, paragraph. Connect steps with a horizontal slate connector line on desktop (CSS `::after`), hidden on mobile. Suggested flow: `design_services` → `tune` → `verified`.\n\n**5.5 Testimonials (3 cards)**\nEach: `format_quote` icon, quote in Figtree italic, divider, avatar circle with the person's initials (Montserrat), name, role in `--text-secondary`, and a 5-star rating using filled `star` symbols in slate (`--secondary`\u002F`--accent-soft`) — stay on-palette, no gold. Includes the skeleton loading simulation per Section 2.2.\n\n**5.6 Pricing (3 tiers)**\nTiers named **Slate \u002F Granite \u002F Obsidian** with invented realistic prices (e.g., $0 \u002F $59\u002Fmo \u002F $199\u002Fmo) and \"billed annually\" fine print. Each `.pricing-card`: tier name (Montserrat 700), price (Montserrat 800), short description, 5-item feature list with `check` icons, CTA button. The middle tier is `.pricing-card--featured`: \"Most popular\" chip (`--primary` bg + `--primary-ink`), 2px `--primary` border, `--shadow-md`, subtle desktop lift. CTA clicks run the loading → success flow with a toast (e.g., \"Thanks — we'll be in touch shortly\").\n\n**5.7 FAQ**\nCentered column (max-width ~720px), 5–6 authored Q&As covering the product, pricing\u002Fbilling, security, migration\u002Fsupport, and cancellation. Accordion behavior per Section 2.5.\n\n**5.8 Final CTA**\nFull-width band on `--surface-inverse` with `--text-on-inverse` copy, a faint mineral-texture overlay, centered flex column: `\u003Ch2>`, supporting sentence, `.input-group` email capture (Section 2.3) + `.btn--inverse` \"Request access\", and a short legal microcopy line. On success, swap the form for the `.card--empty` confirmation per Section 2.2.\n\n**5.9 Footer with secondary links**\nTop area: brand block (wordmark + one-line tagline) plus three link columns (Product, Company, Resources — e.g., Features, Pricing, FAQ \u002F About, Careers, Contact \u002F Documentation, Guides, Support). Secondary link style: `--text-secondary`, hover to `--text-primary` with animated underline. A compact newsletter `.input-group` per Section 2.3. Bottom bar: `© 2026 Astryx Stone. All rights reserved.`, Privacy\u002FTerms links, and a \"Back to top\" control with `arrow_upward`. Social presence as styled text links only (Material Symbols has no brand glyphs — do not substitute inline SVG).\n\n---\n\n## 6. ACCEPTANCE CHECKLIST (verify before output)\n\n- Zero `style=\"\"` attributes, zero inline SVGs, zero emoji icons, zero lorem ipsum, zero inline event handlers.\n- Exactly three files; exactly one deferred script tag; no CDN\u002Fbuild dependencies.\n- Theme toggle works, persists via `localStorage`, falls back to `prefers-color-scheme`, and both modes pass contrast requirements.\n- Every interactive element has hover, focus-visible, and active feedback; the full page is operable with keyboard only (including drawer focus trap, accordion, forms).\n- No horizontal scroll from 320px to 1920px; `prefers-reduced-motion` fully honored.\n- All copy is authored English on the \"Astryx Stone\" narrative; BEM naming is consistent throughout; only Google Fonts + Material Symbols are used.\n",1791954991213]