/* ============================================================
Shared parts: icons, phone frame, store badges, check items
Exposed on window for the other babel scripts.
============================================================ */
/* ---------- Lucide-style inline icons (1.75 stroke, 24 grid) ---------- */
function Ic({ name, size = 24, color = "currentColor", sw = 1.75, style }) {
const p = {
width: size, height: size, viewBox: "0 0 24 24", fill: "none",
stroke: color, strokeWidth: sw, strokeLinecap: "round", strokeLinejoin: "round",
style,
};
const paths = {
"graduation-cap": <>>,
"list-checks": <>>,
"play": <>>,
"play-circle": <>>,
"bell": <>>,
"calendar": <>>,
"lock": <>>,
"arrow-right": <>>,
"check": <>>,
"folder": <>>,
"trophy": <>>,
"target": <>>,
"wifi": <>>,
"book-open": <>>,
"sparkles": <>>,
"puzzle": <>>,
"menu": <>>,
"x": <>>,
};
return ;
}
/* ---------- store glyphs ---------- */
function AppleGlyph({ s = 20, c = "#fff" }) {
return (
);
}
function PlayGlyph({ s = 20 }) {
return (
);
}
function ChromeGlyph({ s = 20 }) {
return (
);
}
/* ---------- store badge ---------- */
const STORE_META = {
apple: { glyph: AppleGlyph, t: "Download on the", b: "App Store" },
google: { glyph: PlayGlyph, t: "GET IT ON", b: "Google Play" },
chrome: { glyph: ChromeGlyph, t: "Available in the", b: "Chrome Web Store" },
};
function StoreBadge({ store, href, ghost = false, size = 20 }) {
const m = STORE_META[store];
const G = m.glyph;
return (
{m.t}
{m.b}
);
}
/* ---------- phone frame with drop-in screenshot slot ---------- */
function PhoneFrame({ w = 258, id, placeholder = "Drop screenshot", island = true }) {
const screenH = Math.round(w * 2.04);
return (
);
}
/* ---------- check / feature item ---------- */
function CheckItem({ children, tone = "forest" }) {
const bg = tone === "sand" ? "var(--tss-sand)" : "var(--tss-forest-100)";
const fg = tone === "sand" ? "var(--tss-pine)" : "var(--tss-forest)";
return (
{children}
);
}
function FeatureRow({ icon, title, body, tone = "forest" }) {
const onDark = tone === "sand";
const bg = onDark ? "rgba(217,198,171,0.22)" : "var(--tss-forest-100)";
const fg = onDark ? "var(--tss-sand-200)" : "var(--tss-forest)";
const titleColor = onDark ? "#FFFFFF" : "var(--tss-pine)";
const bodyColor = onDark ? "rgba(255,255,255,0.78)" : "var(--tss-fg-muted)";
return (
);
}
Object.assign(window, { Ic, AppleGlyph, PlayGlyph, ChromeGlyph, StoreBadge, PhoneFrame, CheckItem, FeatureRow, STORE_META });