/* ============================================================ 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 (
{island &&
}
); } /* ---------- 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 (
{title}
{body}
); } Object.assign(window, { Ic, AppleGlyph, PlayGlyph, ChromeGlyph, StoreBadge, PhoneFrame, CheckItem, FeatureRow, STORE_META });