/* === 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 ? (

) : (
{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) => (
))}
);
}
function MarqueeStrip({ items }) {
const inner = {items.map((t, i) => {t})};
return (
);
}
function PhoneMock({ src, alt = "" }) {
return (
{src ? (

) : (
Ü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 });