// AI Strategy Intensive — landing page components
const { useState, useEffect, useMemo } = React;
const Icon = ({ path, size = 20, ...rest }) => (
);
const I = {
spark: <>>,
arrowRight: <>>,
check: ,
x: <>>,
plus: <>>,
minus: ,
compass: <>>,
target: <>>,
map: <>>,
layers: <>>,
zap: ,
dollar: <>>,
users: <>>,
briefcase: <>>,
mic: <>>,
building: <>>,
dot: ,
clock: <>>,
calendar: <>>,
mail: <>>,
moon: ,
sun: <>>,
sliders: <>>,
};
// ---------- Header ----------
function Header({ L, t }) {
const [scrolled, setScrolled] = useState(false);
useEffect(() => {
const on = () => setScrolled(window.scrollY > 20);
window.addEventListener("scroll", on, { passive: true });
return () => window.removeEventListener("scroll", on);
}, []);
return (
);
}
// ---------- Hero ----------
function Hero({ t, L }) {
return (
{t.hero.badge}
{t.hero.h1pre}{" "}
{t.hero.h1post}
{t.hero.lead}
{t.hero.meta.map((m, i) => (
{m}
))}
{/* Visual showcase block */}
Input
{t.hero.h1pre}
Noise · Hype · Fragments
Output
{(L === "en"
? [
{ t: "Applicability map", c: "from-purple-500 to-purple-600" },
{ t: "Priorities", c: "from-blue-500 to-blue-600" },
{ t: "Roadmap", c: "from-teal-500 to-teal-600" },
{ t: "ROI frame", c: "from-amber-500 to-orange-500" },
]
: [
{ t: "Карта применимости", c: "from-purple-500 to-purple-600" },
{ t: "Приоритеты", c: "from-blue-500 to-blue-600" },
{ t: "Дорожная карта", c: "from-teal-500 to-teal-600" },
{ t: "ROI-рамка", c: "from-amber-500 to-orange-500" },
]
).map((r, i) => (
))}
);
}
// ---------- Audience ----------
function Audience({ t }) {
const icons = [I.briefcase, I.users, I.target, I.mic];
return (
{t.audience.eyebrow}
{t.audience.title}{" "}
{t.audience.titleHighlight}
{t.audience.groups.map((g, i) => (
))}
);
}
// ---------- Problem ----------
function Problem({ t }) {
return (
{t.problem.eyebrow}
{t.problem.title}{" "}
{t.problem.titleMuted}
{t.problem.sub}
{t.problem.cards.map((p, i) => (
))}
);
}
// ---------- Outcomes ----------
function Outcomes({ t }) {
const icons = [I.map, I.target, I.dollar, I.users, I.compass, I.zap];
const colors = [
"from-purple-500 to-purple-600",
"from-blue-500 to-blue-600",
"from-teal-500 to-teal-600",
"from-orange-500 to-red-500",
"from-pink-500 to-rose-500",
"from-indigo-500 to-violet-500",
];
return (
{t.outcomes.eyebrow}
{t.outcomes.title}{" "}
{t.outcomes.titleHighlight}
{t.outcomes.sub}
{t.outcomes.items.map((it, i) => (
))}
);
}
// ---------- Not this ----------
function NotThis({ t }) {
return (
{t.notThis.eyebrow}
{t.notThis.title}
{t.notThis.items.map((it, i) => (
))}
);
}
// ---------- Format ----------
function Format({ t }) {
const icons = [I.briefcase, I.users, I.map];
const colors = [
"from-purple-500 to-purple-600",
"from-blue-500 to-blue-600",
"from-teal-500 to-teal-600",
];
return (
);
}
// ---------- About ----------
function About({ t }) {
const a = t.about;
return (
{a.eyebrow}
{a.title}{" "}
{a.titleHighlight}
{/* Photo column */}
{a.name.split(" ").map(s => s[0]).join("")}
{/* Bio column */}
{a.role}
{a.name}
{a.bio.map((p, i) => (
{p}
))}
{/* Stats */}
{a.stats.map((s, i) => (
))}
{/* Credentials */}
{a.credentials.map((c, i) => (
-
{c}
))}
{a.ctaMore}
);
}
// ---------- Industries ----------
function Industries({ t }) {
return (
{t.industries.eyebrow}
{t.industries.title}
{t.industries.sub}
{t.industries.list.map((ind, i) => (
))}
);
}
// ---------- Pricing ----------
function Pricing({ t }) {
return (
{t.pricing.eyebrow}
{t.pricing.title}{" "}
{t.pricing.titleHighlight}
{t.pricing.sub}
{t.pricing.plans.map((p, i) => (
{p.badge && (
{p.badge}
)}
{p.desc}
{p.feats.map((f, j) => (
-
{f}
))}
{p.cta}
))}
{t.pricing.note}
);
}
// ---------- Not For ----------
function NotFor({ t }) {
return (
{t.notFor.eyebrow}
{t.notFor.title}
{t.notFor.items.map((it, i) => (
))}
);
}
// ---------- FAQ ----------
function FAQ({ t }) {
const [open, setOpen] = useState(0);
return (
{t.faq.eyebrow}
{t.faq.title}
{t.faq.items.map((it, i) => {
const isOpen = open === i;
return (
{isOpen && (
)}
);
})}
);
}
// ---------- Final CTA ----------
function FinalCTA({ t }) {
return (
1 form · 48h reply
{t.cta.title}
{t.cta.sub}
{t.cta.small}
);
}
// ---------- Footer ----------
function Footer({ t }) {
return (
);
}
// ---------- Tweaks panel ----------
function TweaksPanel({ lang, setLang, dark, setDark, onClose }) {
return (
Language
{["ru", "en"].map(l => (
))}
Theme
);
}
// ---------- App ----------
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"lang": "en",
"dark": true
}/*EDITMODE-END*/;
function App() {
const [lang, setLang] = useState(TWEAK_DEFAULTS.lang);
const [dark, setDark] = useState(TWEAK_DEFAULTS.dark);
const [tweaksOpen, setTweaksOpen] = useState(false);
const t = useMemo(() => window.DATA[lang], [lang]);
useEffect(() => {
document.documentElement.classList.toggle("dark", dark);
document.documentElement.setAttribute("lang", lang);
}, [dark, lang]);
// Persist tweaks to file + notify parent
const pushEdit = (key, val) => {
try {
window.parent.postMessage({ type: "__edit_mode_set_keys", edits: { [key]: val } }, "*");
} catch (e) {}
};
useEffect(() => {
const 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);
try { window.parent.postMessage({ type: "__edit_mode_available" }, "*"); } catch (e) {}
return () => window.removeEventListener("message", onMsg);
}, []);
const handleSetLang = (l) => { setLang(l); pushEdit("lang", l); };
const handleSetDark = (d) => { setDark(d); pushEdit("dark", d); };
return (
<>
{tweaksOpen && (
setTweaksOpen(false)}
/>
)}
>
);
}
ReactDOM.createRoot(document.getElementById("root")).render();