/* Loops — shared product screenshot gallery (carousel) for use-case pages. Self-contained phone frame + carousel. Exported to window as LoopsGallery. */ const LG_SHOTS = [ { src: "/uploads/loops-1-3b9f7754.jpg", label: "Today", caption: "One clear list. Just today's loops, nothing else shouting for your attention." }, { src: "/uploads/loops-2-33388d17.jpg", label: "Coach", caption: "A coach that talks like a person, not a chatbot, and already knows your goals." }, { src: "/uploads/loops-3-a4dfc3d2.jpg", label: "Reflect", caption: "Gentle questions to reflect on, for the moments you need to think, not just do." }, { src: "/uploads/loops-5-79987913.jpg", label: "Suggested loops", caption: "Ask for ideas and get specific, doable loops tied to what matters to you." }, { src: "/uploads/loops-4-491859cd.jpg", label: "Coaching skills", caption: "Coaching tuned to the parts of life you're actually working on." }, { src: "/uploads/loops-6-7f5c9e5c.jpg", label: "Journal", caption: "A weekly journal for what worked, what didn't, and the patterns underneath." }, { src: "/uploads/loops-7-e04b9627.jpg", label: "Ideas", caption: "Capture an idea the moment it strikes. Act on it when you're ready, not before." }, ]; const LgPhone = ({ src, alt }) => (
{alt}
); const LoopsGalleryPhone = () => { const [i, setI] = React.useState(0); const n = LG_SHOTS.length; const go = (d) => setI((p) => (p + d + n) % n); const shot = LG_SHOTS[i]; return (
{shot.label}

{shot.caption}

{LG_SHOTS.map((s, idx) => ( ))}
); }; Object.assign(window, { LoopsGalleryPhone, LgPhone }); /* ---------------- Shared pricing (monthly/annual toggle, default monthly) ---------------- */ const LoopsPricing = ({ bg = "bg-soft" }) => { const [annual, setAnnual] = React.useState(false); const plans = [ { name: "Solo", price: "\u00A36.99", per: "/mo", note: null, blurb: "Everything: your goal, loops, rewards and coach. Just you, one day at a time.", featured: false, toggles: false }, { name: "Duo", price: annual ? "\u00A349" : "\u00A37.99", per: annual ? "/yr" : "/mo", note: null, blurb: "Everything, for two. You and your person, both with the full app, on one bill.", featured: true, toggles: true }, ]; return (
Pricing

Better with your person. Built for it.

{plans.map((p) => (
{p.featured ? The one we'd pick : null}

{p.name}

{p.price} {p.per}
{p.toggles && !p.note ? (annual ? "Billed yearly." : "Billed monthly.") : p.note || ""}

{p.blurb}

))}
); }; Object.assign(window, { LoopsPricing });