/* === Shared UI components === */ const { useState, useEffect, useRef } = React; const ICONS = { arrow: , arrowUp: , plus: , check: , phone: , mail: , pin: , clock: , }; function Placeholder({ label, className = "", style = {}, variant = "wide", src, alt = "" }) { return (
{src ? ( {alt ) : (
{label}
)}
); } function Button({ children, variant = "primary", href, onClick, ...rest }) { const cls = `btn btn--${variant}`; const content = <>{children}{ICONS.arrow}; if (href) return {content}; return ; } function Eyebrow({ children }) { return {children}; } function SectionHead({ num, kicker, title, lede, className = "" }) { return (
{kicker}

{title}

{lede &&

{lede}

}
); } function Tag({ children, accent }) { return {children}; } function FAQ({ items }) { const [open, setOpen] = useState(0); return (
{items.map((it, i) => (

{it.a}

))}
); } function MarqueeStrip({ items }) { const inner = {items.map((t, i) => {t})}; return (
{inner}{inner}{inner}
); } function PhoneMock({ src, alt = "" }) { return (
{src ? ( {alt} ) : (
Mein Plan · Mo
4 / 6
Übung 04
Skapula-Stabilität
3 × 12 · 60s Pause
{["Aufwärmen · 5 min", "Außenrotation · 3×12", "Skapula-Retraktion", "Cool-Down"].map((t, i) => (
{t} {i < 2 ? "✓" : "○"}
))}
)}
); } Object.assign(window, { Placeholder, Button, Eyebrow, SectionHead, Tag, FAQ, MarqueeStrip, PhoneMock, ICONS });