/* Loops — shared pricing (plans + credit top-ups). Single source of truth for prices. */ const LOOPS_PLANS = [ { id: "monthly", name: "Loops Solo", cadence: "Monthly", price: "$6.99", per: "/ month", lede: "1 week free, then $6.99 a month.", blurb: "Your coach, your loops and your streaks. Month to month, cancel whenever.", featured: false, }, { id: "annual", name: "Loops Solo", cadence: "Annual", price: "$42.99", per: "/ year", lede: "Works out at $3.58 a month.", blurb: "Your coach and your streaks, for a year. Roughly half the monthly price.", featured: true, tag: "Best value", }, ]; const LOOPS_CREDITS = [ { qty: "100", price: "$3.99", note: "100 coach message credits" }, { qty: "300", price: "$9.99", note: "300 coach message credits" }, { qty: "1,000", price: "$29.99", note: "1,000 coach message credits", tag: "Best rate" }, ]; const LOOPS_ASSURANCES = [ "100 coach messages every month. Free gets 30.", "Nothing rolls over, nothing is wasted. It just resets.", "Cancel anytime.", ]; const PlanTick = ({ className = "" }) => ( ); const LoopsPlanCards = ({ ctaLabel = "Get Early Access", ctaHref = "#start", className = "" }) => (
{LOOPS_PLANS.map((p) => (
{p.tag ? {p.tag} : null}

{p.name}

{p.cadence}
{p.price} {p.per}
{p.lede}

{p.blurb}

))}
); const LoopsCreditPacks = ({ className = "" }) => (

Or top up

One-off packs. These credits never expire.

{LOOPS_CREDITS.map((c) => (
{c.qty}
credits
{c.note}
{c.tag ?
{c.tag}
: null}
{c.price}
))}
); const LoopsPricingSection = ({ id = "pricing", align = "left", className = "bg-soft", kicker = "Pricing", title = "Choose your plan", body = "One small subscription for the coach, the loops and the streaks. Or buy credits when you need them and nothing else.", ctaLabel = "Get Early Access", ctaHref = "#start", footnote = "Every plan starts with a week free. On iOS for now.", }) => { const centred = align === "center"; return (
    {LOOPS_ASSURANCES.map((a) => (
  • {a}
  • ))}
{footnote ? (

{footnote}

) : null}
); }; Object.assign(window, { LOOPS_PLANS, LOOPS_CREDITS, LoopsPlanCards, LoopsCreditPacks, LoopsPricingSection });