// =====================================================
// HOME PAGE
// =====================================================
const { useState: useStateP, useEffect: useEffectP, useRef: useRefP } = React;
function Home({ lang, accent }) {
const t = useT(lang);
const T = window.I18N;
return (
);
}
function Hero({ lang }) {
const t = useT(lang);
const T = window.I18N;
const stats = T.hero.stats;
return (
{t(T.hero.eyebrow)}
{t(T.hero.estd)} · 41° N
{t(T.hero.line1)}
{t(T.hero.line2)}
{t(T.hero.line3)} {t(T.hero.line4)}
{t(T.hero.sub)}
{stats.map((s, i) => (
{s.num}{s.unit}
{t(s.lbl)}
))}
);
}
function Marquee() {
const items = ["STRENGTH", "DISCIPLINE", "COMMUNITY", "RECOVERY", "ATHLETICS", "MOBILITY", "MINDSET"];
const renderRow = () => items.map((it, i) => (
{it}
));
return (
{renderRow()}
{renderRow()}
{renderRow()}
{renderRow()}
);
}
function About({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.about.eyebrow)}
{t(T.about.headline)}
{t(T.about.p1)}
{t(T.about.p2)}
{T.about.pillars.map((p, i) => (
))}
);
}
function Facilities({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.facilities.eyebrow)}
{t(T.facilities.headline)}
{t(T.facilities.sub)}
{T.facilities.tags.map((tag, i) => {t(tag)})}
);
}
function Programs({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.programs.eyebrow)}
{t(T.programs.headline)}
{t(T.programs.sub)}
);
}
function Pricing({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.pricing.eyebrow)}
{t(T.pricing.headline)}
{t(T.pricing.sub)}
{T.pricing.plans.map((p, i) => (
{p.badge &&
{t(p.badge)}
}
{t(p.name)}
{t(p.tag)}
{p.price}
{t(T.pricing.cur)}
{t(T.pricing[p.per])}
{p.features.map((f, j) => - {t(f)}
)}
{p.muted.map((f, j) => - — {t(f)}
)}
{t(p.cta)} →
))}
);
}
function TrainersGrid({ lang }) {
const t = useT(lang);
const T = window.I18N;
return (
{t(T.trainers.eyebrow)}
{t(T.trainers.headline)}
{t(T.trainers.sub)}
);
}
function Contact({ lang }) {
const t = useT(lang);
const T = window.I18N;
const [sent, setSent] = useStateP(false);
const submit = (e) => {
e.preventDefault();
setSent(true);
setTimeout(() => setSent(false), 4000);
};
return (
);
}
// =====================================================
// TRAINER DETAIL PAGE
// =====================================================
function TrainerDetail({ slug, lang }) {
const t = useT(lang);
const T = window.I18N;
const tr = T.trainerData.find((x) => x.slug === slug);
useEffectP(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [slug]);
if (!tr) {
return ;
}
const days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"];
const dayLabels = {
mk: ["ПОН","ВТО","СРЕ","ЧЕТ","ПЕТ","САБ","НЕД"],
sq: ["HËN","MAR","MËR","ENJ","PRE","SHT","DIE"],
en: ["MON","TUE","WED","THU","FRI","SAT","SUN"],
};
const waNum = tr.whatsapp.replace(/[^0-9]/g, "");
const waText = `Hello ${tr.first}, I'd like to book a session at Alpha Gym.`;
const waUrl = `https://wa.me/${waNum}?text=${encodeURIComponent(waText)}`;
const mailUrl = `mailto:${tr.email}?subject=Training inquiry — Alpha Gym&body=Hello ${tr.first},%0D%0A%0D%0AI'd like to learn more about your training.%0D%0A`;
return (
← {t(T.trainers.backTo)}
0{T.trainerData.findIndex(x => x.slug === tr.slug) + 1} · {t(T.trainers.eyebrow)}
{tr.first}
{tr.last}
{t(tr.role)}
{t(tr.bio)}
{t(T.trainers.spec)}
{t(tr.spec)}
{t(T.trainers.exp)}
{tr.years}{t(T.trainers.yrs)}
{t(T.trainers.clients)}
{tr.clients}{t(T.trainers.sessionsLabel)}
{t(T.trainers.approach)}
{t({ mk: "Како работам", sq: "Si punoj", en: "How I work" })}
{tr.approach.map((a, i) => (
))}
{t(T.trainers.creds)}
{t({ mk: "Сертификати", sq: "Certifikatat", en: "Credentials" })}
{tr.creds.map((c, i) => (
))}
{t(T.trainers.schedule)}
{tr.sched.map((s, i) => {
const off = s === "off";
const peak = !off && (s.startsWith("16") || s.startsWith("14") || s.startsWith("12-20"));
return (
{(dayLabels[lang] || dayLabels.en)[i]}
{off ? "—" : s}
);
})}
{t(tr.quote)}
— {tr.first} {tr.last}
{t({ mk: "Други тренери", sq: "Trajnerë të tjerë", en: "Other coaches" })}
{t({ mk: "Запознај го тимот", sq: "Njohu me ekipin", en: "Meet the team" })}
);
}
Object.assign(window, { Home, TrainerDetail, Hero, About, Facilities, Programs, Pricing, TrainersGrid, Contact });