// Page components in the BECoach visual language. Each receives `c` (language-resolved) and `go`.
const SECTION_PAD = "clamp(64px, 8vw, 104px) clamp(20px, 5vw, 56px)";
const MAXW = 1180;

function PageTitle({ kicker, title, intro, align = "left" }) {
  return (
    <div style={{ maxWidth: align === "center" ? 760 : 820, margin: align === "center" ? "0 auto" : 0, textAlign: align }}>
      <div style={{ display: "inline-flex" }}><Kicker>{kicker}</Kicker></div>
      <h1 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(34px, 4.6vw, 54px)", lineHeight: 1.1, color: "var(--ink)", margin: 0, letterSpacing: "-0.015em" }}>{title}</h1>
      {intro && <p style={{ fontFamily: "var(--font-rounded)", fontSize: "clamp(15px, 1.4vw, 18px)", lineHeight: 1.6, color: "var(--ink-soft)", marginTop: 20, maxWidth: 660, marginLeft: align === "center" ? "auto" : 0, marginRight: align === "center" ? "auto" : 0, textWrap: "pretty" }}>{intro}</p>}
    </div>
  );
}

/* ---------------- HOME ---------------- */
function HomePage({ c, go }) {
  const h = c.home;
  return (
    <div>
      {/* Hero */}
      <section style={{ position: "relative", padding: "clamp(48px, 7vw, 88px) clamp(20px, 5vw, 56px) clamp(48px, 6vw, 72px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto", display: "grid", gridTemplateColumns: "1.08fr 0.92fr", gap: "clamp(32px, 5vw, 64px)", alignItems: "center" }} className="apex-hero-grid">
          <div>
            <div style={{ marginBottom: 22 }}><Badge>{c.badge}</Badge></div>
            <h1 style={{ fontFamily: "var(--font-rounded)", fontWeight: 800, fontSize: "clamp(38px, 5vw, 62px)", lineHeight: 1.08, color: "var(--ink)", margin: 0, letterSpacing: "-0.02em", whiteSpace: "pre-line" }}>{h.title}</h1>
            <p style={{ fontFamily: "var(--font-rounded)", fontSize: "clamp(16px, 1.5vw, 18px)", lineHeight: 1.6, color: "var(--ink-soft)", marginTop: 24, maxWidth: 520, textWrap: "pretty" }}>{h.subtitle}</p>
            <div style={{ display: "flex", flexWrap: "wrap", gap: 13, marginTop: 34 }}>
              <Button size="lg" onClick={() => go("meetings")}>{h.ctaPrimary} →</Button>
              <Button size="lg" variant="outline" onClick={() => go("about")}>{h.ctaSecondary}</Button>
            </div>
          </div>
          <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: 22 }}>
            <div style={{ position: "relative", display: "flex", justifyContent: "center" }}>
              <div style={{ position: "absolute", width: "78%", height: "78%", top: "11%", borderRadius: "50%", background: "var(--glow-a)", filter: "blur(20px)" }} />
              <Mandala size={330} labels={c.mandala.pillars} center={c.mandala.center} />
            </div>
            <p style={{ fontFamily: "var(--font-serif)", fontSize: 15, lineHeight: 1.55, color: "var(--ink-soft)", textAlign: "center", maxWidth: 340, margin: 0, textWrap: "pretty" }}>{c.mandala.caption}</p>
          </div>
        </div>
      </section>

      {/* Stats */}
      <section style={{ padding: "0 clamp(20px, 5vw, 56px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}>
          <GlassCard pad={0} radius="var(--radius-xl)" style={{ overflow: "hidden" }}>
            <div style={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)" }} className="apex-stats">
              {h.statValue.map((v, i) => (
                <div key={i} style={{ padding: "30px 18px", textAlign: "center", borderLeft: i === 0 ? "none" : "1px solid var(--surface-border)" }} className="apex-stat-cell">
                  <div style={{ fontFamily: "var(--font-rounded)", fontSize: "clamp(28px, 3.2vw, 40px)", fontWeight: 800, color: "var(--ink)" }}>{v}</div>
                  <div style={{ fontFamily: "var(--font-rounded)", fontSize: 13, color: "var(--ink-soft)", marginTop: 6 }}>{h.statLabel[i]}</div>
                </div>
              ))}
            </div>
          </GlassCard>
        </div>
      </section>

      {/* Values */}
      <section style={{ padding: SECTION_PAD }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}>
          <Kicker>{h.valuesKicker}</Kicker>
          <h2 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(28px, 3.6vw, 44px)", lineHeight: 1.15, color: "var(--ink)", margin: "0 0 44px", maxWidth: 680, letterSpacing: "-0.01em" }}>{h.valuesTitle}</h2>
          <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 20 }} className="apex-cards-3">
            {h.values.map((v, i) => (
              <GlassCard key={i} pad={32}>
                <div style={{ width: 52, height: 52, borderRadius: "50%", background: PILLAR_COLORS[i] + "2E", display: "flex", alignItems: "center", justifyContent: "center", marginBottom: 22 }}>
                  <span style={{ fontFamily: "var(--font-rounded)", fontSize: 20, fontWeight: 700, color: PILLAR_COLORS[i] }}>{String(i + 1).padStart(2, "0")}</span>
                </div>
                <h3 style={{ fontFamily: "var(--font-rounded)", fontSize: 22, fontWeight: 700, color: "var(--ink)", margin: "0 0 12px" }}>{v.t}</h3>
                <p style={{ fontFamily: "var(--font-rounded)", fontSize: 15, lineHeight: 1.6, color: "var(--ink-soft)", margin: 0, textWrap: "pretty" }}>{v.d}</p>
              </GlassCard>
            ))}
          </div>
        </div>
      </section>

      {/* Teaser */}
      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(64px, 8vw, 104px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}>
          <GlassCard pad="clamp(36px, 5vw, 60px)" radius="var(--radius-xxl)" style={{ position: "relative", overflow: "hidden" }}>
            <div style={{ position: "absolute", inset: 0, background: "var(--glow-a)", pointerEvents: "none" }} />
            <div style={{ position: "relative", display: "grid", gridTemplateColumns: "1.4fr 0.9fr", gap: 36, alignItems: "center" }} className="apex-teaser-grid">
              <div>
                <div style={{ display: "inline-flex" }}><Kicker>{h.teaserKicker}</Kicker></div>
                <h2 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(28px, 3.4vw, 42px)", lineHeight: 1.12, color: "var(--ink)", margin: "0 0 16px" }}>{h.teaserTitle}</h2>
                <p style={{ fontFamily: "var(--font-rounded)", fontSize: 16.5, lineHeight: 1.6, color: "var(--ink-soft)", margin: 0, maxWidth: 480, textWrap: "pretty" }}>{h.teaserBody}</p>
              </div>
              <div style={{ display: "flex", justifyContent: "flex-end" }} className="apex-teaser-cta">
                <Button size="lg" onClick={() => go("meetings")}>{h.teaserCta} →</Button>
              </div>
            </div>
          </GlassCard>
        </div>
      </section>
    </div>
  );
}

/* ---------------- ABOUT ---------------- */
function AboutPage({ c, go }) {
  const a = c.about;
  return (
    <div>
      <section style={{ padding: "clamp(48px, 6vw, 84px) clamp(20px, 5vw, 56px) clamp(36px, 5vw, 56px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}><PageTitle kicker={a.kicker} title={a.title} intro={a.intro} /></div>
      </section>

      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(48px, 6vw, 80px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto", display: "grid", gridTemplateColumns: "0.9fr 1.1fr", gap: "clamp(32px, 5vw, 56px)", alignItems: "start" }} className="apex-about-grid">
          <div style={{ position: "sticky", top: 90 }}>
            <h2 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(24px, 2.8vw, 34px)", lineHeight: 1.18, color: "var(--ink)", margin: "0 0 16px" }}>{a.howTitle}</h2>
            <p style={{ fontFamily: "var(--font-rounded)", fontSize: 16, lineHeight: 1.65, color: "var(--ink-soft)", margin: "0 0 28px", textWrap: "pretty" }}>{a.howBody}</p>
            <GlassCard pad={32} style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: 18 }}>
              <Mandala size={188} labels={c.mandala.pillars} center={c.mandala.center} />
              <p style={{ fontFamily: "var(--font-serif)", fontSize: 14.5, lineHeight: 1.5, color: "var(--ink-soft)", textAlign: "center", margin: 0, textWrap: "pretty" }}>{c.mandala.caption}</p>
            </GlassCard>
          </div>
          <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 16 }} className="apex-roles-grid">
            {a.roles.map((r, i) => (
              <GlassCard key={i} pad={24} radius="var(--radius-lg)">
                <div style={{ fontFamily: "var(--font-mono)", fontSize: 12, fontWeight: 700, color: PILLAR_COLORS[i % 4], marginBottom: 12, letterSpacing: "0.06em" }}>{String(i + 1).padStart(2, "0")}</div>
                <h3 style={{ fontFamily: "var(--font-rounded)", fontSize: 19, fontWeight: 700, color: "var(--ink)", margin: "0 0 8px" }}>{r.t}</h3>
                <p style={{ fontFamily: "var(--font-rounded)", fontSize: 14, lineHeight: 1.55, color: "var(--ink-soft)", margin: 0, textWrap: "pretty" }}>{r.d}</p>
              </GlassCard>
            ))}
          </div>
        </div>
      </section>

      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(64px, 8vw, 104px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}>
          <GlassCard pad="clamp(32px, 5vw, 56px)" radius="var(--radius-xxl)">
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 44, alignItems: "center" }} className="apex-path-grid">
              <div>
                <Kicker>{a.pathwaysKicker}</Kicker>
                <h2 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(26px, 3.2vw, 40px)", lineHeight: 1.12, color: "var(--ink)", margin: "0 0 18px" }}>{a.pathwaysTitle}</h2>
                <p style={{ fontFamily: "var(--font-rounded)", fontSize: 16, lineHeight: 1.65, color: "var(--ink-soft)", margin: "0 0 28px", textWrap: "pretty" }}>{a.pathwaysBody}</p>
                <Button onClick={() => go("join")}>{c.nav.cta} →</Button>
              </div>
              <div style={{ display: "grid", gap: 4 }}>
                {["11", "5", "∞"].map((n, i) => {
                  const labs = c.locale === "zh" ? ["条专业学习路径", "个进阶等级", "次重新尝试的机会"] : ["specialized paths", "proficiency levels", "chances to try again"];
                  return (
                    <div key={i} style={{ display: "flex", alignItems: "baseline", gap: 18, padding: "18px 0", borderBottom: i < 2 ? "1px solid var(--surface-border)" : "none" }}>
                      <span style={{ fontFamily: "var(--font-rounded)", fontSize: 42, fontWeight: 800, color: "var(--gold)", minWidth: 60 }}>{n}</span>
                      <span style={{ fontFamily: "var(--font-rounded)", fontSize: 15.5, color: "var(--ink-soft)" }}>{labs[i]}</span>
                    </div>
                  );
                })}
              </div>
            </div>
          </GlassCard>
        </div>
      </section>
    </div>
  );
}

/* ---------------- MEETINGS ---------------- */
function MeetingsPage({ c, go }) {
  const m = c.meetings;
  const InfoRow = ({ icon, title, note }) => (
    <div style={{ display: "flex", gap: 16, padding: "22px 0", borderBottom: "1px solid var(--surface-border)", alignItems: "flex-start" }}>
      <div style={{ flexShrink: 0, width: 46, height: 46, borderRadius: "var(--radius-md)", background: "var(--surface)", border: "1px solid var(--surface-border)", display: "flex", alignItems: "center", justifyContent: "center", color: "var(--gold)" }}>{icon}</div>
      <div style={{ flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: 5 }}>
        <div style={{ fontFamily: "var(--font-rounded)", fontSize: 20, fontWeight: 700, color: "var(--ink)", lineHeight: 1.3 }}>{title}</div>
        {note && <div style={{ fontFamily: "var(--font-rounded)", fontSize: 14, color: "var(--ink-soft)", lineHeight: 1.5 }}>{note}</div>}
      </div>
    </div>
  );
  return (
    <div>
      <section style={{ padding: "clamp(48px, 6vw, 84px) clamp(20px, 5vw, 56px) clamp(32px, 4vw, 48px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}><PageTitle kicker={m.kicker} title={m.title} /></div>
      </section>
      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(48px, 6vw, 80px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto", display: "grid", gridTemplateColumns: "1fr 1fr", gap: "clamp(28px, 5vw, 52px)", alignItems: "start" }} className="apex-meet-grid">
          <div>
            <InfoRow icon={<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><circle cx="12" cy="12" r="9" /><path d="M12 7v5l3 2" /></svg>} title={m.when} note={m.whenNote} />
            <InfoRow icon={<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><path d="M12 21s-7-5.2-7-11a7 7 0 1114 0c0 5.8-7 11-7 11z" /><circle cx="12" cy="10" r="2.5" /></svg>} title={m.where} note={m.whereNote} />
            <InfoRow icon={<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6"><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M3 9h18" /></svg>} title={m.format} note="" />
            <div style={{ marginTop: 30 }}><Button size="lg" onClick={() => go("assistant")}>{m.cta} →</Button></div>
          </div>
          <div>
            <GlassCard pad={32}>
              <h3 style={{ fontFamily: "var(--font-rounded)", fontSize: 22, fontWeight: 700, color: "var(--ink)", margin: "0 0 22px" }}>{m.expectTitle}</h3>
              <div style={{ display: "flex", flexDirection: "column", gap: 15 }}>
                {m.expect.map((e, i) => (
                  <div key={i} style={{ display: "flex", gap: 13, alignItems: "flex-start" }}>
                    <span style={{ flexShrink: 0, marginTop: 1, color: "var(--accent)" }}><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2"><path d="M5 12l5 5L20 6" /></svg></span>
                    <span style={{ fontFamily: "var(--font-rounded)", fontSize: 15, lineHeight: 1.55, color: "var(--ink-soft)", textWrap: "pretty" }}>{e}</span>
                  </div>
                ))}
              </div>
            </GlassCard>
            <div style={{ marginTop: 20 }}>
              <MapRoute c={c} />
              <div style={{ marginTop: 18, display: "flex", flexDirection: "column", gap: 12 }}>
                {m.map.legend.map((step, i) => (
                  <div key={i} style={{ display: "flex", gap: 12, alignItems: "flex-start" }}>
                    <span style={{ flexShrink: 0, width: 22, height: 22, borderRadius: "50%", background: "var(--accent-grad)", color: "var(--on-accent)", fontFamily: "var(--font-rounded)", fontSize: 12, fontWeight: 800, display: "flex", alignItems: "center", justifyContent: "center" }}>{i + 1}</span>
                    <span style={{ fontFamily: "var(--font-rounded)", fontSize: 14, lineHeight: 1.5, color: "var(--ink-soft)", textWrap: "pretty" }}>{step}</span>
                  </div>
                ))}
                <div style={{ display: "flex", gap: 12, alignItems: "flex-start", marginTop: 2 }}>
                  <span style={{ flexShrink: 0, width: 22, height: 22, borderRadius: "50%", border: "1.5px dashed var(--ink-faint)", color: "var(--ink-faint)", display: "flex", alignItems: "center", justifyContent: "center" }}>
                    <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4"><path d="M12 21s-7-5.2-7-11a7 7 0 1114 0c0 5.8-7 11-7 11z" /></svg>
                  </span>
                  <span style={{ fontFamily: "var(--font-rounded)", fontSize: 13, lineHeight: 1.5, color: "var(--ink-faint)", textWrap: "pretty" }}>{m.map.altNote}</span>
                </div>
              </div>
            </div>
          </div>
        </div>
      </section>
    </div>
  );
}

/* ---------------- JOIN ---------------- */
function JoinPage({ c, go }) {
  const j = c.join;
  return (
    <div>
      <section style={{ padding: "clamp(48px, 6vw, 84px) clamp(20px, 5vw, 56px) clamp(40px, 5vw, 64px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}><PageTitle kicker={j.kicker} title={j.title} align="center" /></div>
      </section>
      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(48px, 6vw, 80px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto", display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 20 }} className="apex-cards-3">
          {j.steps.map((s, i) => (
            <GlassCard key={i} pad={34}>
              <div style={{ fontFamily: "var(--font-rounded)", fontSize: 52, fontWeight: 800, lineHeight: 1, background: "var(--accent-grad)", WebkitBackgroundClip: "text", backgroundClip: "text", WebkitTextFillColor: "transparent", color: "var(--accent)" }}>{s.n}</div>
              <h3 style={{ fontFamily: "var(--font-rounded)", fontSize: 23, fontWeight: 700, color: "var(--ink)", margin: "18px 0 10px" }}>{s.t}</h3>
              <p style={{ fontFamily: "var(--font-rounded)", fontSize: 15, lineHeight: 1.6, color: "var(--ink-soft)", margin: 0, textWrap: "pretty" }}>{s.d}</p>
            </GlassCard>
          ))}
        </div>
      </section>
      <section style={{ padding: "0 clamp(20px, 5vw, 56px) clamp(64px, 8vw, 104px)" }}>
        <div style={{ maxWidth: MAXW, margin: "0 auto" }}>
          <GlassCard pad="clamp(36px, 5vw, 60px)" radius="var(--radius-xxl)" style={{ position: "relative", overflow: "hidden", textAlign: "center" }}>
            <div style={{ position: "absolute", inset: 0, background: "var(--glow-a)", pointerEvents: "none" }} />
            <div style={{ position: "relative", maxWidth: 620, margin: "0 auto" }}>
              <div style={{ display: "inline-flex" }}><Kicker>{j.feeKicker}</Kicker></div>
              <h2 style={{ fontFamily: "var(--font-rounded)", fontWeight: 700, fontSize: "clamp(26px, 3.2vw, 40px)", lineHeight: 1.12, color: "var(--ink)", margin: "0 0 16px" }}>{j.feeTitle}</h2>
              <p style={{ fontFamily: "var(--font-rounded)", fontSize: 16.5, lineHeight: 1.65, color: "var(--ink-soft)", margin: "0 0 14px", textWrap: "pretty" }}>{j.feeBody}</p>
              <p style={{ fontFamily: "var(--font-rounded)", fontSize: 14, color: "var(--gold)", margin: "0 0 30px", fontWeight: 600 }}>{j.feeNote}</p>
              <Button size="lg" onClick={() => go("assistant")}>{j.cta} →</Button>
            </div>
          </GlassCard>
        </div>
      </section>
    </div>
  );
}

/* ---------------- CONTACT ---------------- */
function ContactPage({ c, go }) {
  const k = c.contact;
  const [sent, setSent] = React.useState(false);
  const field = { fontFamily: "var(--font-rounded)", fontSize: 15, width: "100%", padding: "13px 15px", background: "var(--panel)", border: "1px solid var(--surface-border)", borderRadius: "var(--radius-md)", color: "var(--ink)", outline: "none", boxSizing: "border-box" };
  const lab = { fontFamily: "var(--font-rounded)", fontSize: 13, fontWeight: 600, color: "var(--ink-soft)", marginBottom: 8, display: "block" };
  return (
    <section style={{ padding: "clamp(48px, 6vw, 84px) clamp(20px, 5vw, 56px) clamp(64px, 8vw, 104px)" }}>
      <div style={{ maxWidth: 1000, margin: "0 auto", display: "grid", gridTemplateColumns: "0.85fr 1.15fr", gap: "clamp(32px, 5vw, 56px)", alignItems: "start" }} className="apex-contact-grid">
        <div>
          <PageTitle kicker={k.kicker} title={k.title} intro={k.body} />
          <div style={{ marginTop: 32, display: "flex", flexDirection: "column", gap: 20 }}>
            <div>
              <div style={{ fontFamily: "var(--font-rounded)", fontSize: 11.5, fontWeight: 700, letterSpacing: "0.16em", textTransform: "uppercase", color: "var(--gold)", marginBottom: 8 }}>{k.emailLabel}</div>
              <a href={"mailto:" + k.email} style={{ fontFamily: "var(--font-rounded)", fontSize: 18, fontWeight: 600, color: "var(--ink)", textDecoration: "none" }}>{k.email}</a>
            </div>
            <div>
              <div style={{ fontFamily: "var(--font-rounded)", fontSize: 11.5, fontWeight: 700, letterSpacing: "0.16em", textTransform: "uppercase", color: "var(--gold)", marginBottom: 8 }}>{k.locLabel}</div>
              <div style={{ fontFamily: "var(--font-rounded)", fontSize: 18, fontWeight: 600, color: "var(--ink)" }}>{k.loc}</div>
            </div>
          </div>
        </div>
        <GlassCard pad="clamp(26px, 4vw, 40px)">
          {sent ? (
            <div style={{ minHeight: 320, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", textAlign: "center", gap: 18 }}>
              <div style={{ width: 64, height: 64, borderRadius: "50%", background: "var(--accent-grad)", color: "var(--on-accent)", display: "flex", alignItems: "center", justifyContent: "center", boxShadow: "var(--glow)" }}>
                <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4"><path d="M5 12l5 5L20 6" /></svg>
              </div>
              <p style={{ fontFamily: "var(--font-rounded)", fontSize: 22, fontWeight: 600, color: "var(--ink)", margin: 0 }}>{k.thanks}</p>
            </div>
          ) : (
            <form onSubmit={(e) => { e.preventDefault(); setSent(true); }} style={{ display: "flex", flexDirection: "column", gap: 18 }}>
              <div><label style={lab}>{k.formName}</label><input style={field} required /></div>
              <div><label style={lab}>{k.formEmail}</label><input type="email" style={field} required /></div>
              <div><label style={lab}>{k.formMsg}</label><textarea rows={5} style={{ ...field, resize: "vertical" }} required /></div>
              <Button type="submit" size="lg">{k.formSend} →</Button>
            </form>
          )}
        </GlassCard>
      </div>
    </section>
  );
}

Object.assign(window, { HomePage, AboutPage, MeetingsPage, JoinPage, ContactPage, PageTitle });
