/* TDD — root app + Tweaks integration */ const { useState: useSt, useEffect: useEf, useRef: useRf } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "brass-moss", "displayFont": "Cormorant Garamond", "audience": "trade", "heroImage": "orange", "density": "editorial" }/*EDITMODE-END*/; const PALETTES = { "brass-moss": { name: "Brass + Moss", swatches: ["#9A7A3E", "#38483A", "#B25A66"], vars: { "--brass": "#9A7A3E", "--brass-deep": "#6F5828", "--moss": "#38483A", "--rose": "#B25A66" }, }, "teal-rose": { name: "Teal + Rose", swatches: ["#2E6E6A", "#234B49", "#B65C6A"], vars: { "--brass": "#2E6E6A", "--brass-deep": "#234B49", "--moss": "#3A2F36", "--rose": "#B65C6A" }, }, "terracotta-sage": { name: "Terracotta + Sage", swatches: ["#B86A4A", "#5B6B52", "#C09553"], vars: { "--brass": "#B86A4A", "--brass-deep": "#8A4D32", "--moss": "#3F4D38", "--rose": "#C09553" }, }, "ink-cream": { name: "Ink + Cream", swatches: ["#2A2620", "#6E6253", "#B25A66"], vars: { "--brass": "#6E6253", "--brass-deep": "#3A332B", "--moss": "#26221C", "--rose": "#B25A66" }, }, }; const FONT_OPTIONS = [ { key: "Cormorant Garamond", label: "Cormorant" }, { key: "Fraunces", label: "Fraunces" }, { key: "Playfair Display", label: "Playfair" }, ]; function TweaksPanel({ tweaks, setTweak, onClose }) { return (
Tweaks
Palette
{Object.entries(PALETTES).map(([k, p]) => ( ))}
Display font
{FONT_OPTIONS.map(f => ( ))}
Audience-first copy
Hero scene
Density
); } function App() { const [route, setRoute] = useSt("home"); const [brandSlug, setBrandSlug] = useSt(null); const [locale, setLocale] = useSt("en"); const [tweaks, setTweaks] = useSt(TWEAK_DEFAULTS); const [tweaksOpen, setTweaksOpen] = useSt(false); const dir = locale === "ar" ? "rtl" : "ltr"; // Sync palette + font + density to CSS vars useEf(() => { const p = PALETTES[tweaks.palette] || PALETTES["brass-moss"]; Object.entries(p.vars).forEach(([k, v]) => document.documentElement.style.setProperty(k, v)); document.documentElement.style.setProperty("--serif", `"${tweaks.displayFont}", "EB Garamond", Georgia, serif`); document.documentElement.setAttribute("dir", dir); document.body.style.fontFamily = locale === "ar" ? "var(--arabic)" : "var(--sans)"; // Density if (tweaks.density === "compact") { document.documentElement.style.setProperty("--section-y", "70px"); } else { document.documentElement.style.setProperty("--section-y", "110px"); } }, [tweaks, locale, dir]); // Edit mode protocol (Tweaks) useEf(() => { function onMsg(e) { if (!e.data || typeof e.data !== "object") return; if (e.data.type === "__activate_edit_mode") setTweaksOpen(true); if (e.data.type === "__deactivate_edit_mode") setTweaksOpen(false); } window.addEventListener("message", onMsg); window.parent.postMessage({ type: "__edit_mode_available" }, "*"); return () => window.removeEventListener("message", onMsg); }, []); function setTweak(k, v) { setTweaks(t => { const next = { ...t, [k]: v }; window.parent.postMessage({ type: "__edit_mode_set_keys", edits: { [k]: v } }, "*"); return next; }); } function navigate(r) { setRoute(r); setBrandSlug(null); window.scrollTo({ top: 0, behavior: "smooth" }); } function openBrand(slug) { setBrandSlug(slug); setRoute("brand"); window.scrollTo({ top: 0, behavior: "smooth" }); } function closeTweaks() { setTweaksOpen(false); window.parent.postMessage({ type: "__edit_mode_dismissed" }, "*"); } const audience = tweaks.audience; const setAudience = (a) => setTweak("audience", a); let page; if (route === "home") page = ; else if (route === "brands") page = ; else if (route === "brand") page = ; else if (route === "materials") page = ; else if (route === "studio") page = navigate("contact")} />; else if (route === "about") page = ; else if (route === "contact") page = ; return ( <>