// sections.jsx — page sections for the HOTMESS brand site
const { useState: useStateS } = React;

// ─────────────────────────────────────────────────────────────────────────────
function Nav() {
  return (
    <header className="nav">
      <div className="nav-inner">
        <a href="#top" aria-label="HOTMESS home">
          <Wordmark />
        </a>
        <nav className="nav-links">
          <a href="#what">What</a>
          <a href="#why">Why</a>
          <a href="#pulse">Pulse</a>
          <a href="#safety">Safety</a>
          <a href="#hnh">HNH</a>
          <a href="#recovery">Hand in Hand</a>
          <a href="#members">Members</a>
          <a href="#partners">Partners</a>
        </nav>
        <a href="/partners/apply" className="nav-cta">Claim your spot ↗</a>
      </div>
    </header>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Hero({ variant = "wordmark" }) {
  return (
    <section id="top" className="hero wrap">
      <div className="hero-top">
        <div className="ch-no">§00<br/>OPEN</div>
        <div className="hero-meta">
          <div>HOTMESS · LONDON · EST. 2024</div>
          <div>QUEER-LED · NIGHTLIFE · RADIO · COMMUNITY-SAFETY</div>
          <div>FOUNDING COHORT — <b>OPEN</b></div>
        </div>
      </div>

      <div style={{ display: "flex", alignItems: "center", justifyContent: "center", flex: 1, padding: "40px 0" }}>
        {variant === "wordmark" && <Wordmark animated />}
        {variant === "manifesto" && (
          <div className="serif" style={{ fontSize: "clamp(36px, 6vw, 96px)", maxWidth: "20ch", textAlign: "left" }}>
            We built the platform queer&nbsp;nightlife was already running on. Just&nbsp;— now it&nbsp;exists.
          </div>
        )}
        {variant === "globe" && (
          <div style={{ position: "relative", display: "flex", justifyContent: "center", alignItems: "center", width: "100%" }}>
            <div aria-hidden="true" style={{
              position: "absolute", inset: "-4% -10%",
              background: "radial-gradient(ellipse at center, rgba(200,150,44,0.28) 0%, rgba(200,150,44,0) 65%)",
              pointerEvents: "none", filter: "blur(8px)",
            }}></div>
            <img
              loading="lazy"
              src="assets/pulse-globe.jpg"
              alt="HOTMESS Pulse — live globe view"
              style={{
                position: "relative",
                maxHeight: "min(70vh, 640px)", width: "auto",
                borderRadius: 32,
                border: "1px solid var(--line-2)",
                boxShadow: "0 30px 100px rgba(0,0,0,0.65)",
              }}
            />
          </div>
        )}
      </div>

      <div className="hero-foot">
        <div className="mono" style={{ color: "var(--ink-3)" }}>SCROLL ↓</div>
        <div className="hero-tag">
          Queer London. <span style={{ color: "var(--gold)" }}>Live. Together.</span><br/>
          Queer-led infrastructure for nightlife, radio, retail and community-safety. Founding cohort opens this week.
        </div>
        <div className="hero-status">
          <div><span className="dot"></span>LIVE FROM LONDON · SHIPPING SLOWLY · IN PUBLIC</div>
          <div style={{ color: "var(--ink-3)", marginTop: 4 }}>BETA · 154 IN · NEXT WAVE OPENING</div>
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Definition() {
  return (
    <section id="what" className="wrap">
      <div className="ch">
        <div className="ch-no">§01<br/>DEFINITION</div>
        <div className="ch-head">
          <div className="ch-title">What HOTMESS is.</div>
          <div className="ch-meta">ONE PARAGRAPH · NO HEDGING</div>
        </div>
      </div>

      <Reveal>
        <p className="lede" style={{ maxWidth: "22ch", marginTop: 24 }}>
          HOTMESS is a queer-led platform for the things nightlife was already&nbsp;doing without a&nbsp;platform —
          <span style={{ color: "var(--gold)" }}> finding each other</span>,
          <span style={{ color: "var(--gold)" }}> getting home safe</span>,
          <span style={{ color: "var(--gold)" }}> staying connected to recovery</span>,
          <span style={{ color: "var(--gold)" }}> hearing the right song at the right hour</span>.
        </p>
      </Reveal>

      <Reveal delay={2}>
        <div className="row-96" style={{ marginTop: 64, paddingTop: 32, borderTop: "1px solid var(--line)" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>WHAT RUNS<br/>THROUGH IT</div>
          <ul style={{ listStyle: "none", padding: 0, margin: 0, display: "grid", gap: 6 }}>
            {[
              "Movement.",
              "Music.",
              "Recovery.",
              "Doors.",
              "People getting home.",
              "The right song at the right hour.",
              "Signals from the room that's actually open.",
              "Care that doesn't disappear at 4am.",
            ].map((line, i) => (
              <li key={i} className="serif" style={{
                fontSize: "clamp(22px, 2.8vw, 36px)",
                lineHeight: 1.15,
                letterSpacing: "-0.01em",
                color: i % 2 === 0 ? "var(--ink)" : "var(--ink-2)",
              }}>
                {line}
              </li>
            ))}
          </ul>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Why() {
  return (
    <section id="why" className="wrap" style={{ marginTop: 80 }}>
      <div className="ch">
        <div className="ch-no">§02<br/>WHY</div>
        <div className="ch-head">
          <div className="ch-title">The thing nightlife was already&nbsp;running&nbsp;on.</div>
          <div className="ch-meta">DOCUMENTED · FOUR WHATSAPP GROUPS · LONDON</div>
        </div>
      </div>

      {/* Big number moment — full-bleed */}
      <Reveal>
        <div className="row-96" style={{
          marginTop: 32, padding: "56px 0 40px", borderTop: "1px solid var(--line)",
          borderBottom: "1px solid var(--line)",
        }}>
          <div className="mono" style={{ color: "var(--gold)" }}>FIG.&nbsp;00</div>
          <div>
            <div style={{
              fontFamily: "var(--display)", fontSize: "clamp(96px, 18vw, 280px)",
              lineHeight: 0.86, letterSpacing: "-0.03em", color: "var(--gold)",
            }}>2,616</div>
            <p className="serif" style={{ fontSize: "clamp(28px, 3.6vw, 48px)", lineHeight: 1.1, marginTop: 12, maxWidth: "22ch" }}>
              people in four queer London WhatsApp groups, coordinating their nights with their&nbsp;<span style={{ color: "var(--gold)" }}>thumbs</span>.
            </p>
          </div>
        </div>
      </Reveal>

      {/* Body — observational lines instead of analytics */}
      <div className="grid-2" style={{ marginTop: 56, alignItems: "start", gap: 56 }}>
        <Reveal>
          <p style={{ fontSize: 19, lineHeight: 1.55, color: "var(--ink-2)", maxWidth: "44ch" }}>
            Where they're going. Who's around. Where to find tickets. What's on. Whether the guy from last night made it&nbsp;home. They've been running infrastructure with their thumbs because nobody built them a&nbsp;platform.
          </p>
          <p className="serif" style={{ fontSize: "clamp(36px, 4.4vw, 64px)", lineHeight: 1.05, marginTop: 32, color: "var(--ink)", maxWidth: "18ch" }}>
            HOTMESS is that&nbsp;<span style={{ color: "var(--gold)" }}>platform</span>.
          </p>
        </Reveal>

        <Reveal delay={2}>
          <div style={{ paddingTop: 8 }}>
            <div className="mono" style={{ color: "var(--gold)", marginBottom: 24 }}>WHAT IT LOOKS LIKE FROM THE INSIDE</div>
            <ul style={{ listStyle: "none", padding: 0, margin: 0, display: "grid", gap: 14 }}>
              {[
                "Flyers in the chat.",
                "Voice notes at 1am.",
                "Three people asking who's still out.",
                "One person asking if somebody got home.",
                ["The infrastructure already existed.", true],
                ["It just never had a place to live.", true],
              ].map((entry, i) => {
                const [line, highlight] = Array.isArray(entry) ? entry : [entry, false];
                return (
                  <li key={i} className="serif" style={{
                    fontSize: "clamp(20px, 2.4vw, 30px)",
                    lineHeight: 1.2, letterSpacing: "-0.01em",
                    color: highlight ? "var(--gold)" : "var(--ink)",
                  }}>
                    {line}
                  </li>
                );
              })}
            </ul>
          </div>
        </Reveal>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Principles() {
  const lines = [
    "Care isn't a feature. It's infrastructure.",
    "If a night ends badly, we examine what the platform could have done better.",
    "Visibility is opt-in. Ghosted is the default for anything that matters.",
    "Recovery sits on the globe. Not in a settings menu.",
    "The platform never charges anyone for staying safe.",
    "We don't gamify nightlife. We don't rank queer people.",
    "What we will and won't do is written in public \u2014 so it can't drift.",
  ];
  return (
    <section className="wrap" style={{ marginTop: 96 }}>
      <div className="ch">
        <div className="ch-no">§03<br/>DOCTRINE</div>
        <div className="ch-head">
          <div className="ch-title">Seven things we will&nbsp;not&nbsp;move&nbsp;on.</div>
          <div className="ch-meta">FOUNDER COMPLIANCE · PUBLIC · NON-NEGOTIABLE</div>
        </div>
      </div>

      <ol style={{ listStyle: "none", padding: 0, margin: "32px 0 0", display: "grid", gap: 0 }}>
        {lines.map((l, i) => (
          <Reveal key={i} delay={Math.min(i + 1, 6)}>
            <li className="row-96" style={{
              padding: "26px 0", borderTop: "1px solid var(--line)", alignItems: "baseline",
            }}>
              <div className="mono" style={{ color: "var(--gold)" }}>{String(i + 1).padStart(2, "0")}</div>
              <div className="serif" style={{ fontSize: "clamp(26px, 3.4vw, 44px)", letterSpacing: "-0.01em" }}>{l}</div>
            </li>
          </Reveal>
        ))}
      </ol>

      <Reveal>
        <p className="mono" style={{
          color: "var(--ink-3)", marginTop: 48, textAlign: "right",
          textTransform: "none", letterSpacing: "0.06em", fontSize: 12, fontFamily: "var(--sans)", fontStyle: "italic",
        }}>
          This is the spine. The dedication is the&nbsp;why.
        </p>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function PulseSection() {
  return (
    <section id="pulse" className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§04<br/>PULSE</div>
        <div className="ch-head">
          <div className="ch-title">The globe shows where the&nbsp;night&nbsp;is&nbsp;moving.</div>
          <div className="ch-meta">ATMOSPHERE · NOT INDIVIDUALS · OPT-IN · OBFUSCATED COORDS</div>
        </div>
      </div>

      <div className="grid-2" style={{ alignItems: "center", marginTop: 32, gap: 56 }}>
        <Reveal>
          <div>
            <p className="lede" style={{ fontSize: "clamp(24px, 2.8vw, 38px)", maxWidth: "20ch", marginBottom: 24 }}>
              Pulse is not a map. It's a&nbsp;<span style={{color:"var(--gold)"}}>signal</span>.
            </p>
            <p style={{ fontSize: 17, color: "var(--ink-2)", lineHeight: 1.6, maxWidth: "46ch" }}>
              Venues, promoters and members surface in real time when there's energy in the area. Calm signal for recovery mode. Pulsing signal for the room that's actually open. No "users near you" creep — your presence is fuzzed by default and visible only at the granularity you've chosen.
            </p>
            <ul style={{ listStyle: "none", padding: 0, margin: "28px 0 0", display: "grid", gap: 10 }}>
              {[
                ["BEACONS", "The pulses you see when a room is alive. Drop one yourself if the night is your own."],
                ["GHOSTED MODE", "Toggle invisible. Ghosted removes you from public visibility."],
              ].map(([k, v]) => (
                <li key={k} className="mono" style={{ display: "grid", gridTemplateColumns: "140px 1fr", gap: 16, color: "var(--ink-2)", fontSize: 11, lineHeight: 1.6 }}>
                  <span style={{ color: "var(--gold)" }}>{k}</span>
                  <span style={{ textTransform: "none", fontFamily: "var(--sans)", letterSpacing: 0, fontSize: 14, color: "var(--ink-2)" }}>{v}</span>
                </li>
              ))}
            </ul>

            {/* Energy states — chip row */}
            <div style={{ marginTop: 28 }}>
              <div className="mono" style={{ color: "var(--gold)", marginBottom: 12 }}>ENERGY STATES</div>
              <div style={{ display: "flex", flexWrap: "wrap", gap: 8 }}>
                {["loud","open","locked in","soft","afters","calm","grounded","floating","home","ghosted"].map((s) => (
                  <span key={s} className="mono" style={{
                    padding: "7px 12px",
                    border: "1px solid var(--line-2)",
                    color: "var(--ink-2)",
                    textTransform: "none",
                    letterSpacing: "0.04em",
                    fontSize: 11,
                  }}>{s}</span>
                ))}
              </div>
            </div>
          </div>
        </Reveal>

        <Reveal delay={2}>
          <div style={{ display: "flex", flexDirection: "column", gap: 12, alignItems: "stretch" }}>
            <div className="mono" style={{ color: "var(--ink-3)", textAlign: "right" }}>FIG. 01 — LIVE FROM THE APP</div>
            <div style={{ position: "relative", display: "flex", justifyContent: "center" }}>
              {/* Halo behind the device */}
              <div aria-hidden="true" style={{
                position: "absolute", inset: "-8% -12%",
                background: "radial-gradient(ellipse at 50% 55%, rgba(200,150,44,0.22) 0%, rgba(200,150,44,0) 60%)",
                pointerEvents: "none", filter: "blur(8px)",
              }}></div>
              {/* Real product screenshot */}
              <img
                loading="lazy"
                src="assets/pulse-globe.jpg"
                alt="HOTMESS Pulse — live globe view"
                style={{
                  position: "relative",
                  width: "100%",
                  maxWidth: 360,
                  height: "auto",
                  borderRadius: 32,
                  border: "1px solid var(--line-2)",
                  boxShadow: "0 30px 80px rgba(0,0,0,0.55), 0 0 0 1px rgba(255,255,255,0.04) inset",
                  display: "block",
                }}
              />
            </div>
            <div className="mono" style={{ color: "var(--gold)", textAlign: "left" }}>
              <span style={{display:"inline-block",width:8,height:8,borderRadius:"50%",background:"#3ee07a",marginRight:8,verticalAlign:"1px",animation:"blink 1.6s ease-in-out infinite"}}></span>SHIPPED · IN-APP TODAY
            </div>
          </div>
        </Reveal>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function SafetySection() {
  const primitives = [
    ["01", "SILENT SOS", "Hold-to-send. No siren, no flashing screen. Trusted contacts get your coords and 30s of audio. Routed via Twilio."],
    ["02", "FAKE CALL", "Triggers a believable incoming call from a contact you pick. Buys you the exit. No questions at the door."],
    ["03", "CHECK-IN TIMER", "If you don't tap by 03:30, the timer escalates on your behalf — first to your guardian, then to the venue."],
    ["04", "HELP BEACON", "Venue-side beacon brings staff to your exact spot. Silently. The room never notices."],
  ];
  return (
    <section id="safety" className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§05<br/>SAFETY SUITE</div>
        <div className="ch-head">
          <div className="ch-title">Documented harm reduction.<br/>Live today.</div>
          <div className="ch-meta">FOUR PRIMITIVES · TWILIO-ROUTED · PRIVACY-PROTECTED COORDS</div>
        </div>
      </div>

      {/* Pull-quote pre-amble — user-facing */}
      <Reveal>
        <p className="serif" style={{ fontSize: "clamp(28px, 3.8vw, 48px)", lineHeight: 1.1, maxWidth: "26ch", marginTop: 32, color: "var(--ink)" }}>
          Built for the moment the&nbsp;<span style={{ color: "var(--gold)" }}>night&nbsp;turns</span>.<br/>
          Silent. No siren, no flashing screen.
        </p>
      </Reveal>

      {/* Phone front-and-center on dark band */}
      <Reveal delay={2}>
        <div style={{
          marginTop: 56, padding: "56px clamp(20px,4vw,40px)",
          background: "radial-gradient(ellipse at center, rgba(200,150,44,0.08) 0%, rgba(0,0,0,0) 60%), var(--bg-2)",
          border: "1px solid var(--line)",
          display: "flex", flexDirection: "column", alignItems: "center", gap: 28,
        }}>
          <div className="mono" style={{ color: "var(--gold)" }}>
            <span style={{ display: "inline-block", width: 8, height: 8, borderRadius: "50%", background: "#3ee07a", marginRight: 8, verticalAlign: "1px", animation: "blink 1.6s ease-in-out infinite" }}></span>
            INTERACTIVE — HOLD 1.4S TO ARM, OR TAP FAKE CALL
          </div>
          <SafetyDemo />
          <div className="mono" style={{ color: "var(--ink-4)", textAlign: "center", maxWidth: "44ch", lineHeight: 1.6, textTransform: "none", letterSpacing: 0, fontSize: 12 }}>
            This is the actual flow. Designed for real nightlife conditions — minimal friction at the door, in the&nbsp;dark, on a&nbsp;dying battery.
          </div>
        </div>
      </Reveal>

      {/* Four primitives — full 4-up grid */}
      <div className="grid-4" style={{ marginTop: 56 }}>
        {primitives.map(([n, k, v], i) => (
          <Reveal key={k} delay={Math.min(i + 1, 4)}>
            <div className="panel" style={{ height: "100%", display: "flex", flexDirection: "column", gap: 14 }}>
              <div className="mono" style={{ color: "var(--gold)" }}>{n} · {k}</div>
              <p style={{ marginTop: 0, fontSize: 14, lineHeight: 1.55 }}>{v}</p>
            </div>
          </Reveal>
        ))}
      </div>

      {/* Coverage strip */}
      <Reveal>
        <div className="row-96" style={{ marginTop: 40, paddingTop: 24, borderTop: "1px solid var(--line)" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>COVERAGE</div>
          <div style={{ display: "flex", gap: 14, flexWrap: "wrap" }}>
            {["TWILIO-ROUTED", "COORDS FUZZED", "AUDIO 30S", "TRUSTED CONTACTS", "GUARDIAN ESCALATION", "HELP BEACON", "STEALTH MODE", "EVIDENCE HANDLING"].map((s) => (
              <span key={s} className="mono" style={{ padding: "8px 12px", border: "1px solid var(--line-2)", color: "var(--ink-2)" }}>{s}</span>
            ))}
          </div>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function TapPackSection() {
  return (
    <section className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§06<br/>TAP-PACK</div>
        <div className="ch-head">
          <div className="ch-title">Phone, meet&nbsp;door.</div>
          <div className="ch-meta">QR + NFC · VENUE-INSTALLED · NO APP STORE FRICTION</div>
        </div>
      </div>

      <div className="grid-2" style={{ alignItems: "stretch", marginTop: 32, gap: 56 }}>
        <Reveal>
          <p className="lede" style={{ fontSize: "clamp(24px, 2.8vw, 34px)", maxWidth: "22ch" }}>
            For your door. <span style={{ color: "var(--gold)" }}>Tap, not download.</span>
          </p>
          <p style={{ fontSize: 16, color: "var(--ink-2)", lineHeight: 1.6, maxWidth: "44ch", marginTop: 18 }}>
            One NFC sticker. One printed QR card. Customers tap their phone the way they pay — verified arrival count for you, safety primitives primed for&nbsp;them. No app store. No kiosk. No staff training.
          </p>
          <div style={{ display: "flex", gap: 12, marginTop: 24, flexWrap: "wrap" }}>
            <span className="mono" style={{ padding: "10px 14px", border: "1px solid var(--gold)", color: "var(--gold)" }}>NFC STICKER · 25MM</span>
            <span className="mono" style={{ padding: "10px 14px", border: "1px solid var(--line-2)", color: "var(--ink-2)" }}>QR CARD · A6 · MATTE</span>
            <span className="mono" style={{ padding: "10px 14px", border: "1px solid var(--line-2)", color: "var(--ink-2)" }}>BAR-TOP PUCK · OPTIONAL</span>
          </div>
        </Reveal>

        <Reveal delay={2}>
          <div className="panel" style={{ padding: 0, overflow: "hidden", background: "#0a0a0d" }}>
            <img
              loading="lazy"
              src="assets/tap-pack.png"
              alt="HOTMESS Tap-Pack — NFC sticker, QR card, bar puck"
              style={{ width: "100%", height: "auto", display: "block" }}
            />
            <div style={{ padding: "16px 20px", borderTop: "1px solid var(--line)" }}>
              <div className="mono" style={{ color: "var(--gold)" }}>FIG. 02 — TAP-PACK</div>
              <div className="mono" style={{ color: "var(--ink-3)", marginTop: 4 }}>SHIPPED WITH EVERY FOUNDING PARTNER PACK</div>
            </div>
          </div>
        </Reveal>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function RadioSection() {
  return (
    <section id="radio" className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§07<br/>RADIO</div>
        <div className="ch-head">
          <div className="ch-title">The thing the room is&nbsp;listening&nbsp;to.</div>
          <div className="ch-meta">HOTMESS RADIO · 24/7 · QUEER-OWNED · QUEER-PROGRAMMED</div>
        </div>
      </div>

      <Reveal>
        <p className="serif" style={{
          fontSize: "clamp(28px, 3.8vw, 48px)", lineHeight: 1.1, letterSpacing: "-0.01em",
          maxWidth: "22ch", marginTop: 40, color: "var(--ink)",
        }}>
          Always too much, yet&nbsp;<span style={{ color: "var(--gold)" }}>never enough</span>.
        </p>
      </Reveal>

      <div className="grid-2" style={{ marginTop: 48, gap: 56, alignItems: "center" }}>
        <Reveal>
          <p style={{ fontSize: 17, color: "var(--ink-2)", lineHeight: 1.6, maxWidth: "44ch" }}>
            HOTMESS Radio scores the platform — calm in the morning, builds toward midnight, holds the room from 1am to 4. Resident DJs from the venues we partner with. Original productions released directly on the station. Atmosphere-programmed, not algorithmically fed.
          </p>
          <p style={{ fontSize: 14, color: "var(--ink-3)", lineHeight: 1.6, maxWidth: "44ch", marginTop: 16, fontStyle: "italic" }}>
            The founder owns the station; he doesn't DJ on it. He produces for it. Different chairs.
          </p>
          <div style={{ marginTop: 28, padding: "18px 20px", border: "1px solid var(--gold)", display: "flex", alignItems: "center", gap: 16 }}>
            <div style={{ width: 36, height: 36, borderRadius: "50%", background: "var(--gold)", color: "var(--bg)", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 14 }}>▶</div>
            <div style={{ flex: 1, minWidth: 0 }}>
              <div className="mono" style={{ color: "var(--gold)" }}><span style={{ display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: "#ff3b30", marginRight: 8, verticalAlign: "1px", animation:"blink 1.6s ease-in-out infinite" }}></span>ON AIR · RESIDENT MIX</div>
              <div style={{ fontFamily: "var(--sans)", fontSize: 13, color: "var(--ink-3)", marginTop: 4, letterSpacing: 0 }}>Listening live, 24/7.</div>
            </div>
            <div className="mono" style={{ color: "var(--ink-3)" }}>02:47:18</div>
          </div>
          <a href="https://listen.radioking.com/radio/hotmess-radio" target="_blank" rel="noreferrer" className="mono" style={{ display: "inline-block", marginTop: 18, color: "var(--gold)", borderBottom: "1px solid var(--gold)", paddingBottom: 4 }}>
            LISTEN — LISTEN.RADIOKING.COM/RADIO/HOTMESS-RADIO ↗
          </a>

          {/* SUNDAYS · HAND IN HAND show callout */}
          <div style={{
            marginTop: 32,
            padding: "22px 24px",
            border: "1px solid rgba(232,163,60,0.35)",
            background: "rgba(232,163,60,0.04)",
          }}>
            <div className="mono" style={{ color: "#E8A33C" }}>SUNDAYS · HAND IN HAND</div>
            <p className="serif" style={{ fontSize: 22, lineHeight: 1.2, marginTop: 10, marginBottom: 0, color: "var(--ink)" }}>
              For the people still&nbsp;awake.
            </p>
            <p style={{ fontSize: 14, color: "var(--ink-2)", lineHeight: 1.6, marginTop: 12, marginBottom: 0 }}>
              The comedown show. The aftercare broadcast. The room after the room.<br/>
              Slow music. Soft landings. No performance required.
            </p>
          </div>

          {/* First release on RAW CONVICT */}
          <div style={{
            marginTop: 20,
            padding: "16px 18px",
            border: "1px solid rgba(255,59,48,0.45)",
            background: "rgba(255,59,48,0.04)",
            display: "flex", alignItems: "center", gap: 16,
          }}>
            <img
              loading="lazy"
              src="assets/raw001-hotmess.jpeg"
              alt="RAW001 — Hot Mess by Paul King ft Stewart Whoo"
              style={{ width: 88, height: 88, flexShrink: 0, display: "block", border: "1px solid rgba(255,59,48,0.3)" }}
            />
            <div style={{ flex: 1, minWidth: 0 }}>
              <div className="mono" style={{ color: "#ff5b50" }}>RAW001 · DEBUT RELEASE</div>
              <div className="serif" style={{ fontSize: 20, lineHeight: 1.15, marginTop: 4, color: "var(--ink)" }}>
                "Hot Mess" — Paul King ft Stewart Whoo
              </div>
              <div className="mono" style={{ color: "var(--ink-3)", marginTop: 6, fontSize: 10 }}>OUT NOW ON RAW CONVICT</div>
            </div>
          </div>
        </Reveal>

        <Reveal delay={2}>
          <div className="panel" style={{ padding: 0, overflow: "hidden", position: "relative" }}>
            <img
              loading="lazy"
              src="assets/hotmess-radio.png"
              alt="HOTMESS RADIO — always too much, yet never enough."
              style={{ width: "100%", height: "auto", display: "block" }}
            />
            <div className="mono" style={{
              position: "absolute", top: 18, left: 20,
              padding: "5px 10px", background: "rgba(0,0,0,0.55)",
              backdropFilter: "blur(6px)",
              border: "1px solid rgba(255,255,255,0.12)",
              color: "#fff", borderRadius: 999,
            }}>
              <span style={{ display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: "#ff3b30", marginRight: 8, verticalAlign: "1px", animation: "blink 1.6s ease-in-out infinite" }}></span>
              ON AIR
            </div>
          </div>
        </Reveal>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// HNH MESS — the landing
// Hand N Hand is the only place to land.
// Sits between Radio (atmosphere) and Recovery (doctrine).
function HNHMessSection() {
  // Stylized QR code — fixed pattern, not a real scannable code
  const qrPattern = [
    "1110111011",
    "1000101001",
    "1011101101",
    "1000000011",
    "1011011010",
    "1100110100",
    "1011101011",
    "1000001001",
    "1011101111",
    "1100100100",
  ];

  return (
    <section id="hnh" className="wrap" style={{ marginTop: 140 }}>
      <div className="ch">
        <div className="ch-no">§08<br/>HNH<br/>MESS</div>
        <div className="ch-head">
          <div className="ch-title">The room after the&nbsp;room.</div>
          <div className="ch-meta">LUBE · SUNDAY RADIO · LANDING · NOT WELLNESS</div>
        </div>
      </div>

      {/* Three observational lines — what HNH MESS actually is */}
      <Reveal>
        <ul style={{ listStyle: "none", padding: 0, margin: "48px 0 0", display: "grid", gap: 18, maxWidth: "26ch" }}>
          {[
            "The bottle on the bedside table.",
            "The Sunday radio show after the weekend.",
            "The room you land in after the night turns strange.",
          ].map((line, i) => (
            <li key={i} className="serif" style={{
              fontSize: "clamp(28px, 4.4vw, 56px)",
              lineHeight: 1.08, letterSpacing: "-0.01em",
              color: i === 2 ? "var(--ink)" : "var(--ink-2)",
            }}>
              {line}
            </li>
          ))}
        </ul>
      </Reveal>

      {/* Image + activation panel */}
      <div className="grid-2" style={{ marginTop: 72, gap: 48, alignItems: "stretch" }}>
        <Reveal>
          <div style={{
            position: "relative", overflow: "hidden",
            border: "1px solid rgba(232,163,60,0.25)",
            background: "#0a0805",
            aspectRatio: "3/4",
          }}>
            <img
              loading="lazy"
              src="assets/hnh-mess.png"
              alt="HNH MESS — Hand in Hand"
              style={{
                width: "100%", height: "100%", objectFit: "cover", display: "block",
                filter: "contrast(1.05) saturate(1.05)",
              }}
            />
            <div aria-hidden="true" style={{
              position: "absolute", inset: 0,
              background: "linear-gradient(to top, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0) 35%), radial-gradient(ellipse at 70% 30%, rgba(232,163,60,0.18) 0%, rgba(0,0,0,0) 60%)",
              pointerEvents: "none",
            }}></div>
            <div className="mono" style={{
              position: "absolute", left: 18, bottom: 16, color: "rgba(255,255,255,0.78)",
              textShadow: "0 1px 4px rgba(0,0,0,0.6)",
            }}>
              HNH MESS · 250ML · WATER BASED
            </div>
          </div>
        </Reveal>

        <Reveal delay={2}>
          <div style={{ display: "flex", flexDirection: "column", justifyContent: "space-between", gap: 28 }}>

            {/* QR moment with full activation copy */}
            <div>
              <p style={{ fontSize: 17, color: "var(--ink-2)", lineHeight: 1.55, margin: 0, maxWidth: "36ch" }}>
                Scan the QR on the bottle and drop into <b style={{ color: "var(--ink)" }}>Hand in Hand</b>:
              </p>

              <ul style={{ listStyle: "none", padding: 0, margin: "20px 0 0", display: "grid", gap: 10 }}>
                {[
                  "recovery links",
                  "calm rooms",
                  "check-ins",
                  "music made for the comedown",
                  "and people still awake.",
                ].map((line, i) => (
                  <li key={i} style={{
                    fontFamily: "var(--serif)", fontStyle: "italic",
                    fontSize: "clamp(20px, 2.4vw, 28px)", lineHeight: 1.25,
                    color: i === 4 ? "#E8A33C" : "var(--ink)",
                    display: "grid", gridTemplateColumns: "16px 1fr", gap: 8, alignItems: "baseline",
                  }}>
                    <span className="mono" style={{ color: "var(--ink-4)", paddingTop: 4 }}>·</span>
                    <span>{line}</span>
                  </li>
                ))}
              </ul>
            </div>

            {/* QR + scan label */}
            <div style={{ display: "flex", gap: 20, alignItems: "center", paddingTop: 8, flexWrap: "wrap" }}>
              <div style={{
                width: 110, height: 110, padding: 8,
                background: "#fff",
                display: "grid", gridTemplateColumns: `repeat(${qrPattern[0].length}, 1fr)`,
                gridTemplateRows: `repeat(${qrPattern.length}, 1fr)`, gap: 1,
                flexShrink: 0,
              }} aria-label="QR — scan to land">
                {qrPattern.flatMap((row, r) => row.split("").map((c, k) => (
                  <span key={`${r}-${k}`} style={{ background: c === "1" ? "#000" : "transparent" }} />
                )))}
              </div>
              <div>
                <div className="display" style={{ fontSize: 32, lineHeight: 0.95, color: "var(--ink)" }}>
                  SCAN TO&nbsp;<span style={{ color: "#E8A33C" }}>LAND</span>.
                </div>
                <div className="mono" style={{ color: "var(--ink-3)", marginTop: 8 }}>ON EVERY BOTTLE</div>
              </div>
            </div>
          </div>
        </Reveal>
      </div>

      {/* Thesis line — the closing punch */}
      <Reveal>
        <div style={{
          marginTop: 96, paddingTop: 64, paddingBottom: 8,
          borderTop: "1px solid var(--line)", textAlign: "center",
        }}>
          <p className="serif" style={{
            fontSize: "clamp(40px, 7.2vw, 104px)", lineHeight: 0.98, letterSpacing: "-0.015em",
            color: "var(--ink)", margin: 0, maxWidth: "18ch", marginLeft: "auto", marginRight: "auto",
          }}>
            Hand in Hand is the only place to&nbsp;<span style={{ color: "#E8A33C" }}>land</span>.
          </p>
        </div>
      </Reveal>

      {/* Architecture diagram — quiet footnote, no longer the lede */}
      <Reveal delay={2}>
        <div className="row-96" style={{ marginTop: 64, paddingTop: 24, borderTop: "1px solid var(--line)" }}>
          <div className="mono" style={{ color: "var(--ink-3)" }}>WHERE IT SITS</div>
          <div style={{ display: "grid", gap: 6, fontFamily: "var(--mono)", fontSize: 12, letterSpacing: "0.08em" }}>
            {[
              ["HOTMESS",  "THE NIGHT"],
              ["PULSE",    "MOVEMENT"],
              ["SAFETY",   "PROTECTION"],
              ["RADIO",    "ATMOSPHERE"],
              ["HNH MESS", "THE LANDING"],
            ].map(([k, v], i) => {
              const isHNH = k === "HNH MESS";
              return (
                <div key={k} style={{
                  display: "grid", gridTemplateColumns: "max-content auto 1fr", alignItems: "center", gap: 12,
                  color: isHNH ? "#E8A33C" : "var(--ink-3)",
                  paddingTop: i === 4 ? 8 : 0,
                  borderTop: i === 4 ? "1px solid var(--line)" : "none",
                  marginTop: i === 4 ? 2 : 0,
                }}>
                  <span>{k}</span>
                  <span style={{ color: "var(--ink-4)" }}>→</span>
                  <span>{v}</span>
                </div>
              );
            })}
          </div>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function RecoverySection() {
  return (
    <section id="recovery" className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§09<br/>HAND IN<br/>HAND</div>
        <div className="ch-head">
          <div className="ch-title">The only place to&nbsp;land.</div>
          <div className="ch-meta">FREE FOREVER · NO PAID TIER · NOT WELLNESS</div>
        </div>
      </div>

      {/* The cinematic landing — what happens after the QR scan */}
      <Reveal>
        <div style={{
          marginTop: 48,
          padding: "56px clamp(20px, 4vw, 56px)",
          border: "1px solid rgba(232,163,60,0.25)",
          background: "radial-gradient(ellipse at 50% 0%, rgba(232,163,60,0.06) 0%, rgba(0,0,0,0) 60%), #060406",
        }}>
          <div className="mono" style={{ color: "rgba(232,163,60,0.7)", textAlign: "center" }}>
            <span style={{ display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: "#3ee07a", marginRight: 8, verticalAlign: "1px", animation: "blink 1.6s ease-in-out infinite" }}></span>
            THE ROOM IS STILL OPEN
          </div>

          <p className="serif" style={{
            fontSize: "clamp(28px, 4.4vw, 56px)", lineHeight: 1.1, letterSpacing: "-0.01em",
            color: "var(--ink)", textAlign: "center", maxWidth: "20ch",
            margin: "32px auto 0",
          }}>
            You made it through the&nbsp;night.
          </p>

          <ul style={{ listStyle: "none", padding: 0, margin: "32px auto 0", display: "grid", gap: 8, textAlign: "center", maxWidth: "26ch" }}>
            {[
              "Drink water.",
              "Breathe slower.",
              "Stay here for a minute.",
            ].map((l, i) => (
              <li key={i} className="serif" style={{
                fontSize: "clamp(20px, 2.4vw, 28px)", lineHeight: 1.3,
                color: "var(--ink-2)",
              }}>
                {l}
              </li>
            ))}
          </ul>

          {/* Action chips — what the landing room actually offers */}
          <div style={{
            marginTop: 48, paddingTop: 32,
            borderTop: "1px solid var(--line)",
            display: "flex", flexWrap: "wrap", gap: 10, justifyContent: "center",
          }}>
            {[
              "RECOVERY MODE",
              "CHECK IN WITH SOMEONE",
              "PLAY SUNDAY RADIO",
              "FIND A MEETING",
              "STAY GHOSTED",
              "SLOW THE LIGHTS",
              "MESSAGE HOME",
              "I'M SAFE",
            ].map((c) => (
              <span key={c} className="mono" style={{
                padding: "12px 16px",
                border: "1px solid rgba(232,163,60,0.4)",
                color: "var(--ink)",
                background: "rgba(0,0,0,0.4)",
              }}>
                {c}
              </span>
            ))}
          </div>
        </div>
      </Reveal>

      {/* Doctrine — the why, restated quietly */}
      <Reveal delay={2}>
        <div className="row-96" style={{
          marginTop: 64,
          padding: "32px 36px",
          borderLeft: "2px solid var(--gold)",
          background: "rgba(200,150,44,0.04)",
        }}>
          <div className="mono" style={{ color: "var(--gold)" }}>COMMITMENT</div>
          <div>
            <p style={{ fontSize: 17, lineHeight: 1.6, color: "var(--ink)", margin: 0, maxWidth: "60ch" }}>
              Landing on HOTMESS will be&nbsp;<b style={{ color: "var(--gold)" }}>free, forever</b>. There is no paid tier. There never will be. That's the principle the platform is built around.
            </p>
            <p className="mono" style={{ marginTop: 14, color: "var(--ink-3)" }}>WRITTEN INTO FOUNDER COMPLIANCE · NOT CONTINGENT ON ANY PARTNERSHIP</p>
          </div>
        </div>
      </Reveal>

      {/* Services we respect — NOT partners, NOT confirmed */}
      <Reveal>
        <div className="row-96" style={{ marginTop: 64, paddingTop: 28, borderTop: "1px solid var(--line)" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>FORMING</div>
          <div>
            <div className="mono" style={{ color: "var(--ink-3)" }}>QUEER-FRIENDLY RECOVERY + SEXUAL-HEALTH SERVICES</div>
            <p style={{ marginTop: 12, fontSize: 15, color: "var(--ink-2)", lineHeight: 1.6, maxWidth: "60ch" }}>
              Existing London services we look to, learn from, and design around. None of these are HOTMESS partners — they're public infrastructure that's already doing the&nbsp;work.
            </p>
            <div style={{ marginTop: 18, display: "flex", gap: 14, flexWrap: "wrap" }}>
              {["LONDON FRIEND", "56 DEAN STREET", "LGBT FOUNDATION"].map((p) => (
                <span key={p} className="mono" style={{ padding: "10px 16px", border: "1px solid var(--line-2)", color: "var(--ink-2)" }}>{p}</span>
              ))}
            </div>
            <p className="mono" style={{ marginTop: 22, color: "var(--ink-4)", lineHeight: 1.7, textTransform: "none", letterSpacing: 0, fontSize: 13, fontFamily: "var(--sans)" }}>
              Recovery-org leadership in London or further afield — there's a free-tier relationship waiting if you want one. Write to&nbsp;
              <a href="mailto:care@hotmessldn.com" style={{ color: "var(--gold)" }}>care@hotmessldn.com</a>.
            </p>
          </div>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Dedication() {
  return (
    <section aria-label="In memory" style={{ marginTop: 160 }}>
      <div className="wrap">
        <div style={{
          padding: "120px 0 100px",
          borderTop: "1px solid var(--line)",
          borderBottom: "1px solid var(--line)",
          textAlign: "center",
          position: "relative",
        }}>
          <div className="mono" style={{ color: "var(--ink-3)", marginBottom: 28 }}>IN MEMORY</div>
          <div className="display" style={{ fontSize: "clamp(48px, 8vw, 128px)", lineHeight: 0.9, letterSpacing: "-0.02em" }}>
            <span style={{ color: "var(--gold)" }}>DJ LEE HARRIS</span>
          </div>
          <p className="mono" style={{ color: "var(--ink-3)", marginTop: 18 }}>CO-FOUNDER · IN SPIRIT</p>

          <div style={{
            margin: "64px auto 0", maxWidth: "22ch",
            paddingTop: 48, borderTop: "1px solid var(--line)",
          }}>
            <p className="serif" style={{
              fontSize: "clamp(36px, 6vw, 84px)",
              lineHeight: 1.05, letterSpacing: "-0.01em",
              color: "var(--ink)", margin: 0,
            }}>
              Gay men aren't coming home.<br/>
              <span style={{ color: "var(--gold)" }}>They're slipping.</span>
            </p>
          </div>

          <p style={{ fontSize: "clamp(17px, 1.7vw, 21px)", color: "var(--ink-2)", marginTop: 56, maxWidth: "40ch", marginLeft: "auto", marginRight: "auto", lineHeight: 1.6, fontStyle: "italic" }}>
            The chemsex rooms in zone&nbsp;2 where people I love are still waiting for someone to find&nbsp;them. The Saturday-night messages that go quiet on Sunday&nbsp;afternoon.
          </p>

          <p style={{ fontSize: 15, color: "var(--ink-3)", marginTop: 32, maxWidth: "44ch", marginLeft: "auto", marginRight: "auto", lineHeight: 1.7 }}>
            That's why care is infrastructure. That's why recovery is free. This is the line we&nbsp;don't&nbsp;move.
          </p>
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function MembersSection() {
  return (
    <section id="members" className="wrap" style={{ marginTop: 120 }}>
      <div className="ch">
        <div className="ch-no">§11<br/>MEMBERS</div>
        <div className="ch-head">
          <div className="ch-title">Three founding cohorts.<br/>For the people who'll&nbsp;use&nbsp;it.</div>
          <div className="ch-meta">FREE · INDIVIDUALS · ARCHIVAL · STEWARDSHIP</div>
        </div>
      </div>

      <Reveal>
        <p className="serif" style={{ fontSize: "clamp(26px, 3.2vw, 40px)", lineHeight: 1.1, maxWidth: "32ch", marginTop: 32, color: "var(--ink)" }}>
          A founding cohort of 250 people. Not collectible status — <span style={{ color: "var(--gold)" }}>historical participation</span> in something&nbsp;new.
        </p>
      </Reveal>

      <div className="grid-3" style={{ marginTop: 40 }}>
        {[
          { tag: "ORIGINAL 50", title: "ORIGINAL 50", total: 50, taken: 18, lines: ["Earliest stewardship — preserved in the founding archive.", "Connected tier included for life.", "Your username preserved alongside it.", "Your name in the platform credits.", "Direct line to Phil for the first month."] },
          { tag: "FOUNDING 100", title: "FOUNDING 100", total: 100, taken: 41, lines: ["Founding cohort — preserved in the founding archive.", "Hotmess tier included for life.", "Your username preserved alongside it.", "Early access to features as they ship."] },
          { tag: "EARLY 100",    title: "EARLY 100",    total: 100, taken: 67, lines: ["Early cohort — preserved in the founding archive.", "Six months of Hotmess tier included.", "Your username preserved alongside it."] },
        ].map((m) => (
          <Reveal key={m.tag} delay={2}>
            <div className="panel" style={{ height: "100%", display: "flex", flexDirection: "column", gap: 14 }}>
              <div className="mono" style={{ color: "var(--gold)" }}>{m.tag}</div>
              <div className="display" style={{ fontSize: 56, lineHeight: 0.9 }}>{m.title}</div>
              <SpotsCounter total={m.total} taken={m.taken} />
              <ul style={{ listStyle: "none", padding: 0, margin: "8px 0 0", display: "grid", gap: 8 }}>
                {m.lines.map((l, i) => (
                  <li key={i} style={{ display: "grid", gridTemplateColumns: "14px 1fr", gap: 8, fontSize: 14, color: "var(--ink-2)", lineHeight: 1.4 }}>
                    <span style={{ color: "var(--gold)" }}>·</span><span>{l}</span>
                  </li>
                ))}
              </ul>
              <div className="mono" style={{ color: "var(--ink-4)", marginTop: "auto", paddingTop: 14, fontSize: 10 }}>FREE · WAITLIST</div>
            </div>
          </Reveal>
        ))}
      </div>

      <Reveal>
        <div className="row-96-2" style={{ marginTop: 56, paddingTop: 32, borderTop: "1px solid var(--line)", alignItems: "center" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>JOIN</div>
          <div>
            <div className="display" style={{ fontSize: 36, lineHeight: 0.95 }}>Claim your&nbsp;place.</div>
            <p style={{ color: "var(--ink-3)", marginTop: 8, fontSize: 14, lineHeight: 1.6, maxWidth: "44ch" }}>
              Drop an email. No payment, no card. We'll write back from welcome@hotmessldn.com with a portal link when your cohort opens.
            </p>
          </div>
          <MemberForm />
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function PartnersSection() {
  // slug values MUST match the PartnerTier keys in lib/tiers.ts so the
  // /partners/apply page and /api/partners/checkout route resolve them.
  const tiers = [
    { slug: "founding_venue",    name: "FOUNDING VENUE",    price: "£250",   cap: 50, taken: 14, blurb: "Standard globe pin · 2 beacons/quarter · 1 NFC + 2 QR Tap-Pack.", note: "ANNUAL" },
    { slug: "founding_signal",   name: "FOUNDING SIGNAL",   price: "£500",   cap: 25, taken: 9,  blurb: "Pulsing globe pin · 4 beacons/qtr · 2 NFC + 4 QR · Licensing Letter.", note: "ANNUAL" },
    { slug: "founding_anchor",   name: "FOUNDING ANCHOR",   price: "£1,000", cap: 10, taken: 3,  blurb: "Persistent named label · 8+1 beacons/qtr · co-branded Tap-Pack · monthly call · postcode exclusivity.", note: "ANNUAL · EXCLUSIVITY", featured: true },
    { slug: "founding_promoter", name: "FOUNDING PROMOTER", price: "£350",   cap: 15, taken: 6,  blurb: "Movable globe pin · unlimited events · portable NFC fob + QR · 4 beacons/qtr.", note: "FLAT" },
    { slug: "founding_chain",    name: "FOUNDING CHAIN",    price: "£750",   cap: 5,  taken: 1,  blurb: "Multi-site operator. Base covers 3 locations; +£200 per additional location. Pooled beacons.", note: "ANNUAL · MULTI-SITE" },
    { slug: "founding_wellness", name: "FOUNDING WELLNESS", price: "£400",   cap: 10, taken: 2,  blurb: "Calm globe pin (recovery-aware visual) · 1 NFC + QR · Licensing Letter · Recovery-network adjacent.", note: "ANNUAL" },
  ];

  return (
    <section id="partners" className="wrap" style={{ marginTop: 140 }}>
      <div className="ch">
        <div className="ch-no">§12<br/>FOUNDING<br/>PARTNERS</div>
        <div className="ch-head">
          <div className="ch-title">Claim your spot on the globe.</div>
          <div className="ch-meta">VENUES · PROMOTERS · RETAILERS · WELLNESS · MULTI-SITE</div>
        </div>
      </div>

      <Reveal>
        <p className="serif" style={{ fontSize: "clamp(28px, 3.8vw, 48px)", lineHeight: 1.05, maxWidth: "26ch", marginTop: 32, color: "var(--ink)" }}>
          Founding venue participation. Six tiers, six commitments. <span style={{ color: "var(--gold)" }}>Capped. First in, first&nbsp;named.</span>
        </p>
      </Reveal>

      <Reveal delay={2}>
        <div className="row-96" style={{ marginTop: 32, padding: "20px 24px", border: "1px solid var(--line)", background: "rgba(255,255,255,0.015)" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>WHAT YOU GET</div>
          <div style={{ display: "flex", flexWrap: "wrap", gap: 10 }}>
            {[
              "PIN ON THE PULSE GLOBE",
              "BEACON ALLOCATION",
              "TAP-PACK HARDWARE",
              "LICENSING LETTER (HOTMESS LETTERHEAD)",
              "FOUNDING PARTNER BADGE",
              "POSTCODE EXCLUSIVITY (ANCHOR)",
              "DIRECT LINE TO PHIL",
            ].map((s) => (
              <span key={s} className="mono" style={{ padding: "8px 12px", border: "1px solid var(--line-2)", color: "var(--ink-2)" }}>{s}</span>
            ))}
          </div>
        </div>
      </Reveal>

      {/* Six tier cards */}
      <div className="grid-3" style={{ marginTop: 32 }}>
        {tiers.map((t) => (
          <Reveal key={t.name} delay={2}>
            <article className={`panel ${t.featured ? "gold" : ""}`} style={{ height: "100%", display: "flex", flexDirection: "column", gap: 14, position: "relative" }}>
              {t.featured && (
                <span className="mono" style={{ position: "absolute", top: -10, left: 18, padding: "4px 10px", background: "var(--gold)", color: "var(--bg)", letterSpacing: "0.16em" }}>FLAGSHIP</span>
              )}
              <div className="mono" style={{ color: "var(--gold)" }}>{t.name}</div>
              <div style={{ display: "flex", alignItems: "baseline", gap: 10 }}>
                <span className="display" style={{ fontSize: 64, lineHeight: 0.9 }}>{t.price}</span>
                <span className="mono" style={{ color: "var(--ink-4)" }}>{t.note}</span>
              </div>
              <SpotsCounter total={t.cap} taken={t.taken} />
              <p style={{ marginTop: 4, fontSize: 14, lineHeight: 1.55, color: "var(--ink-2)" }}>{t.blurb}</p>
              <div style={{ marginTop: "auto", display: "flex", gap: 10, flexWrap: "wrap", paddingTop: 8 }}>
                <a
                  href={`/partners/apply?tier=${t.slug}`}
                  className={`btn ${t.featured ? "btn-solid" : ""}`}
                  style={{ padding: "11px 16px", fontSize: 10 }}
                >
                  Claim spot ↗
                </a>
                <a
                  href="/HOTMESS_FOUNDING_OFFER.pdf"
                  target="_blank"
                  rel="noreferrer"
                  className="btn btn-ghost"
                  style={{ padding: "11px 16px", fontSize: 10 }}
                >
                  Brief PDF ↓
                </a>
              </div>
            </article>
          </Reveal>
        ))}
      </div>

      {/* How it works strip */}
      <Reveal>
        <div id="partners-info" style={{ marginTop: 64, paddingTop: 32, borderTop: "1px solid var(--line)" }}>
          <div className="mono" style={{ color: "var(--gold)" }}>HOW IT WORKS</div>
          <div className="grid-4" style={{ marginTop: 18, gap: 18 }}>
            {[
              ["01", "Pick a tier", "Six tiers. Each one capped. Anchor includes postcode exclusivity."],
              ["02", "Stripe checkout", "Card or invoice. GBP. Receipt issued immediately."],
              ["03", "Tap-Pack ships", "NFC + QR hardware in the post within 5 working days."],
              ["04", "You're live on the globe", "Pin goes up the day funds clear. Beacons unlocked. Licensing Letter emailed."],
            ].map(([n, k, v]) => (
              <div key={n}>
                <div className="mono" style={{ color: "var(--gold)" }}>{n}</div>
                <div className="display" style={{ fontSize: 20, lineHeight: 1, marginTop: 6, textTransform: "uppercase" }}>{k}</div>
                <p style={{ marginTop: 8, color: "var(--ink-2)", fontSize: 13, lineHeight: 1.5 }}>{v}</p>
              </div>
            ))}
          </div>
        </div>
      </Reveal>

      <Reveal>
        <div style={{ marginTop: 48, padding: "26px 28px", border: "1px solid var(--gold)", background: "rgba(200,150,44,0.05)", display: "flex", justifyContent: "space-between", flexWrap: "wrap", gap: 20, alignItems: "center" }}>
          <div>
            <div className="display" style={{ fontSize: 32, lineHeight: 0.95 }}>Talk to a human first.</div>
            <p style={{ marginTop: 8, color: "var(--ink-2)", fontSize: 14, lineHeight: 1.55, maxWidth: "52ch" }}>
              Founding-partner status carries a Licensing Letter and postcode commitments. We'd rather you book 20 minutes than guess.
            </p>
          </div>
          <div style={{ display: "flex", gap: 12, flexWrap: "wrap" }}>
            <a href="mailto:vendors@hotmessldn.com?subject=Founding%20Partner%20-%20Call%20request" className="btn btn-solid">Request a call ↗</a>
            <a href="mailto:vendors@hotmessldn.com" className="btn">vendors@hotmessldn.com</a>
            <a href="/HOTMESS_FOUNDING_OFFER.pdf" className="btn btn-ghost">One-page PDF ↓</a>
          </div>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function FounderNote() {
  return (
    <section className="wrap" style={{ marginTop: 140 }}>
      <div className="ch">
        <div className="ch-no">§10<br/>FOUNDER</div>
        <div className="ch-head">
          <div className="ch-title">A note from&nbsp;Phil.</div>
          <div className="ch-meta">FOUNDER · WRITTEN OUT · NO INVESTORS · NO BOARD · NO TEAM</div>
        </div>
      </div>

      {/* Pull-quote opener */}
      <Reveal>
        <p className="serif" style={{
          fontSize: "clamp(34px, 5.4vw, 76px)", lineHeight: 1.05, letterSpacing: "-0.01em",
          maxWidth: "22ch", marginTop: 40, color: "var(--ink)",
        }}>
          HOTMESS is the platform I needed to exist before I&nbsp;<span style={{ color: "var(--gold)" }}>cleaned&nbsp;up</span>.
        </p>
      </Reveal>

      <div className="grid-2" style={{ marginTop: 56, alignItems: "start", gap: 56 }}>
        <Reveal>
          <div style={{ position: "relative" }}>
            <img loading="lazy" src="assets/founder-1.jpg" alt="Phil Gizzie, founder — a.k.a. SMASH DADDY" style={{ width: "100%", height: "auto", display: "block", border: "1px solid var(--line)" }} />
            <div className="mono" style={{ position: "absolute", bottom: -28, left: 0, color: "var(--ink-3)" }}>PHIL GIZZIE · A.K.A. SMASH DADDY · KOH SAMUI</div>
          </div>

          {/* Side meta — fact card */}
          <div style={{ marginTop: 56, padding: "20px 22px", border: "1px solid var(--line)" }}>
            <div className="mono" style={{ color: "var(--gold)" }}>WHO BUILT THIS</div>
            <ul style={{ listStyle: "none", padding: 0, margin: "14px 0 0", display: "grid", gap: 10, color: "var(--ink-2)", fontSize: 14, lineHeight: 1.5 }}>
              <li><b style={{ color: "var(--ink)" }}>Phil Gizzie</b> — founder, solo</li>
              <li><b style={{ color: "var(--ink)" }}>SMASH DADDY</b> — DJ + audio tools, Koh Samui</li>
              <li><b style={{ color: "var(--ink)" }}>HOTMESS</b> — clothing brand, then the OS</li>
              <li><b style={{ color: "var(--ink)" }}>RAW CONVICT</b> — record label, sister project</li>
              <li><b style={{ color: "var(--ink)" }}>HOTMESS Radio</b> — owned, not DJ'd by Phil; produced for</li>
            </ul>
            <div className="mono" style={{ color: "var(--ink-4)", marginTop: 18, lineHeight: 1.6, textTransform: "none", letterSpacing: 0, fontSize: 12, fontFamily: "var(--sans)" }}>
              Collaborator notes: works with DJ legends incl. <b>Paul King (F1)</b> — names most artists don't get a phone call back&nbsp;from.
            </div>
          </div>
        </Reveal>

        <Reveal delay={2}>
          <div className="serif" style={{ fontSize: "clamp(20px, 2.1vw, 24px)", lineHeight: 1.45, color: "var(--ink)" }}>
            <p style={{ margin: 0 }}>
              I'm Phil. Almost three decades in London's queer nightlife — promoting, DJing, building, breaking,&nbsp;recovering.
            </p>

            <p style={{ marginTop: 22 }}>
              The bigger version of me — the one on the decks, the one most days now in the sun on Koh&nbsp;Samui — goes by <b style={{ color: "var(--gold)" }}>SMASH DADDY</b>. That side push is newer; London doesn't fully know him yet. He's positive. He's part of how I stayed&nbsp;alive.
            </p>

            <p style={{ marginTop: 22 }}>
              The HOTMESS side started differently. Two years ago I launched a small clothing brand and a record label. Both deliberately provocative. Both built to hold an open, humour-laced narrative around chem use in the community — because the alternative was the silence I'd watched cost people I&nbsp;loved.
            </p>

            <p style={{ marginTop: 22 }}>
              One year in, on the launch week of the clothing brand, <b style={{ color: "var(--gold)" }}>DJ Lee Harris</b> — friend, scene legend, the man this project belongs&nbsp;to — took his own&nbsp;life.
            </p>

            <p style={{ marginTop: 22 }}>
              My world crashed. The launch crashed. Every business plan I had&nbsp;crashed. Every day and every night after was either thinking about Lee or using&nbsp;chems.
            </p>

            {/* Stand-alone moment */}
            <p className="display" style={{
              fontSize: "clamp(40px, 6vw, 88px)", lineHeight: 0.95, marginTop: 36, marginBottom: 8,
              color: "var(--ink)", letterSpacing: "-0.015em",
            }}>
              Then it became<br/>
              <span style={{ color: "var(--gold)" }}>code over chems.</span>
            </p>

            <p style={{ marginTop: 24 }}>
              I'd never been a coder. I'd never been a "tech"&nbsp;person. But sitting at a laptop building HOTMESS badly — then a little less badly, then for hours every&nbsp;night — was the one thing I had that wasn't him being gone and wasn't me getting&nbsp;high.
            </p>

            <p style={{ marginTop: 22 }}>
              That's how HOTMESS OS got&nbsp;born. A grief project that wouldn't stop expanding because I have ADHD and the architecture got bigger every&nbsp;week. One year on — here we&nbsp;are.
            </p>

            <p style={{ marginTop: 22 }}>
              The clothing brand is now HOTMESS. The record label is <b>RAW CONVICT</b>. The OS is what you're looking&nbsp;at. SMASH DADDY is still on the decks, still in the sun, <span style={{ color: "var(--gold)" }}>still part of the proof that men like us can&nbsp;live</span>.
            </p>

            {/* Final standalone line */}
            <p className="serif" style={{
              fontSize: "clamp(22px, 2.6vw, 32px)", lineHeight: 1.3, marginTop: 36,
              paddingTop: 28, borderTop: "1px solid var(--line)",
              color: "var(--ink-2)",
            }}>
              I built all of it solo. No investors. No board. No team.<br/>
              <span style={{ color: "var(--gold)" }}>Just me, ADHD, grief and code.</span>
            </p>
          </div>

          <div style={{ marginTop: 36, display: "flex", gap: 14, alignItems: "center", flexWrap: "wrap" }}>
            <span className="display" style={{ fontSize: 36, lineHeight: 1 }}>— PHIL.</span>
            <a href="mailto:phil@hotmessldn.com" className="mono" style={{ color: "var(--gold)" }}>PHIL@HOTMESSLDN.COM</a>
            <a href="https://instagram.com/hotmessldn" className="mono" style={{ color: "var(--ink-3)" }}>@HOTMESSLDN</a>
          </div>
        </Reveal>
      </div>

      {/* Bridge into the practical sections */}
      <Reveal>
        <div className="row-96" style={{
          marginTop: 96, paddingTop: 40, borderTop: "1px solid var(--line)",
          alignItems: "baseline",
        }}>
          <div className="mono" style={{ color: "var(--gold)" }}>NEXT</div>
          <div>
            <p className="serif" style={{
              fontSize: "clamp(24px, 3vw, 38px)", lineHeight: 1.15, margin: 0,
              color: "var(--ink)", maxWidth: "32ch",
            }}>
              If you've read this far, the founding cohort opens this&nbsp;week. Find your row&nbsp;below.
            </p>
            <div style={{ marginTop: 22, display: "flex", gap: 12, flexWrap: "wrap" }}>
              <a href="#members" className="btn btn-ghost">For people&nbsp;↓</a>
              <a href="#partners" className="btn">For venues + brands&nbsp;↓</a>
            </div>
          </div>
        </div>
      </Reveal>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Marquee() {
  const items = ["PULSE", "SAFETY", "RECOVERY", "RADIO", "TAP-PACK", "GHOSTED", "BEACONS", "CARE", "QUEER-LED", "LONDON"];
  const row = [...items, ...items];
  return (
    <div className="marquee" style={{ marginTop: 120 }}>
      <div className="marquee-track">
        {row.map((w, i) => (
          <span key={i} className={i % 4 === 1 ? "gold" : ""}>{w} <span style={{ color: "var(--ink-4)", padding: "0 6px" }}>·</span></span>
        ))}
      </div>
    </div>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
function Footer() {
  return (
    <footer>
      <div className="wrap">
        <div className="row-96-3">
          <div className="mono" style={{ color: "var(--gold)" }}>§∞<br/>CONTACT</div>

          <div>
            <div className="mono" style={{ color: "var(--ink-3)" }}>MEMBERS · MEDIA</div>
            <div style={{ display: "grid", gap: 6, marginTop: 10 }}>
              <a className="mono" href="mailto:welcome@hotmessldn.com" style={{ color: "var(--ink)" }}>welcome@hotmessldn.com</a>
              <a className="mono" href="mailto:pr@hotmessldn.com" style={{ color: "var(--ink)" }}>pr@hotmessldn.com</a>
            </div>
          </div>

          <div>
            <div className="mono" style={{ color: "var(--ink-3)" }}>VENDORS · CARE</div>
            <div style={{ display: "grid", gap: 6, marginTop: 10 }}>
              <a className="mono" href="mailto:vendors@hotmessldn.com" style={{ color: "var(--ink)" }}>vendors@hotmessldn.com</a>
              <a className="mono" href="mailto:care@hotmessldn.com" style={{ color: "var(--ink)" }}>care@hotmessldn.com</a>
            </div>
          </div>

          <div>
            <div className="mono" style={{ color: "var(--ink-3)" }}>LISTEN · FOLLOW</div>
            <div style={{ display: "grid", gap: 6, marginTop: 10 }}>
              <a className="mono" href="https://listen.radioking.com/radio/hotmess-radio" style={{ color: "var(--ink)" }}>HOTMESS RADIO ↗</a>
              <a className="mono" href="https://rawconvict.com" style={{ color: "var(--ink)" }}>RAW CONVICT — LABEL ↗</a>
              <a className="mono" href="https://instagram.com/hotmessldn" style={{ color: "var(--ink)" }}>@HOTMESSLDN</a>
            </div>
          </div>
        </div>

        {/* Tagline + memorial strip */}
        <div style={{ marginTop: 56, padding: "32px 0", borderTop: "1px solid var(--line)", borderBottom: "1px solid var(--line)", textAlign: "center" }}>
          <p className="serif" style={{ fontSize: "clamp(20px, 2.4vw, 30px)", color: "var(--ink)", margin: 0 }}>
            Queer infrastructure, live since&nbsp;<span style={{ color: "var(--gold)" }}>2026</span>.
          </p>
          <p className="mono" style={{ marginTop: 18, color: "var(--ink-3)" }}>
            IN MEMORY OF <span style={{ color: "var(--gold)" }}>DJ LEE HARRIS</span> · CO-FOUNDER, IN SPIRIT
          </p>
        </div>

        <div className="foot-mark" style={{ marginTop: 56 }}>
          <span>HOT</span><span style={{ color: "var(--gold)" }}>MESS</span>
        </div>

        {/* Compliance + Cookies — substantive block, not just links */}
        <div style={{ marginTop: 28, paddingTop: 28, borderTop: "1px solid var(--line)" }}>
          <div className="row-96-2" style={{ gap: 32 }}>
            <div className="mono" style={{ color: "var(--gold)" }}>§∞.1<br/>COMPLIANCE</div>

            <div>
              <div className="mono" style={{ color: "var(--gold)", marginBottom: 10 }}>DATA + GDPR</div>
              <p style={{ fontSize: 13, lineHeight: 1.55, color: "var(--ink-2)", margin: 0, maxWidth: "50ch" }}>
                We collect only what's needed to ship the feature you asked for. No third-party analytics. No ad-tech.
                No lookalike audiences. Location is anonymised on capture, never reverse-lookupable to addresses.
                Logs expire on platform default. Beacons expire in 24h. Full posture:{" "}
                <a className="mono" href="mailto:compliance@hotmessldn.com" style={{ color: "var(--gold)", textDecoration: "underline" }}>compliance@hotmessldn.com</a>.
              </p>
              <p style={{ fontSize: 13, lineHeight: 1.55, color: "var(--ink-2)", marginTop: 10, maxWidth: "50ch" }}>
                <b style={{ color: "var(--ink)" }}>Data subject access requests:</b>{" "}
                <a className="mono" href="mailto:compliance@hotmessldn.com?subject=Subject%20Access%20Request" style={{ color: "var(--gold)", textDecoration: "underline" }}>compliance@hotmessldn.com</a>.
                Responded within 30 days (UK GDPR Art. 12). Smash Daddys Ltd is the data controller.
              </p>
            </div>

            <div>
              <div className="mono" style={{ color: "var(--gold)", marginBottom: 10 }}>COOKIES</div>
              <p style={{ fontSize: 13, lineHeight: 1.55, color: "var(--ink-2)", margin: 0, maxWidth: "50ch" }}>
                This site uses <b style={{ color: "var(--ink)" }}>only first-party cookies</b> strictly necessary to keep you logged in
                and to persist your tweaks panel state. No tracking pixels (no GA, no Meta, no LinkedIn).
                No third-party scripts beyond the React + Babel CDN.
              </p>
              <p style={{ fontSize: 13, lineHeight: 1.55, color: "var(--ink-2)", marginTop: 10, maxWidth: "50ch" }}>
                Because we set <i>only</i> strictly-necessary cookies, no consent banner is shown
                (PECR Regulation 6(4) exception). If we ever ship non-essential cookies,
                a banner appears <i>before</i> they fire.
              </p>
            </div>
          </div>

          {/* Hard rules strip */}
          <div style={{ marginTop: 24, padding: "16px 18px", border: "1px solid var(--gold)", background: "rgba(200,150,44,0.04)" }}>
            <div className="mono" style={{ color: "var(--gold)", marginBottom: 8, fontSize: 10, letterSpacing: "0.18em" }}>WHAT WE DON'T DO</div>
            <p style={{ fontSize: 12, lineHeight: 1.5, color: "var(--ink-2)", margin: 0 }}>
              No sale of partner data · No aggregation to outsiders · No ethnicity filters · No behavioural ad-tech ·
              No XP / levels / streaks / leaderboards · No "Right Now" 1-hour expiring posts · No third-party trackers ·
              No surveillance dressed as care.
            </p>
          </div>

          {/* Legal links row */}
          <div style={{ marginTop: 24, display: "flex", flexWrap: "wrap", gap: 18 }}>
            <a className="mono" href="/terms/members" style={{ color: "var(--ink-2)", borderBottom: "1px solid var(--line-2)", paddingBottom: 2 }}>TERMS — MEMBERS</a>
            <a className="mono" href="/terms/partners" style={{ color: "var(--ink-2)", borderBottom: "1px solid var(--line-2)", paddingBottom: 2 }}>TERMS — PARTNERS</a>
            <a className="mono" href="/privacy" style={{ color: "var(--ink-2)", borderBottom: "1px solid var(--line-2)", paddingBottom: 2 }}>PRIVACY POLICY</a>
            <a className="mono" href="/cookies" style={{ color: "var(--ink-2)", borderBottom: "1px solid var(--line-2)", paddingBottom: 2 }}>COOKIES POLICY</a>
            <a className="mono" href="mailto:compliance@hotmessldn.com" style={{ color: "var(--ink-2)", borderBottom: "1px solid var(--line-2)", paddingBottom: 2 }}>COMPLIANCE ↗</a>
            <span className="mono" style={{ color: "var(--gold)", border: "1px solid var(--gold)", padding: "3px 9px" }}>18+ ONLY</span>
          </div>
        </div>

        <div style={{ marginTop: 16, display: "flex", justifyContent: "space-between", flexWrap: "wrap", gap: 12 }}>
          <div className="mono" style={{ color: "var(--ink-4)" }}>© 2026 SMASH DADDYS LTD · REGISTERED IN ENGLAND · QUEER-LED</div>
          <div className="mono" style={{ color: "var(--ink-4)" }}>BUILT SOLO FROM KOH SAMUI · FOR LONDON</div>
        </div>
      </div>
    </footer>
  );
}

// Share
Object.assign(window, {
  Nav, Hero, Definition, Why, Principles, PulseSection, SafetySection,
  TapPackSection, RadioSection, HNHMessSection, RecoverySection, Dedication,
  MembersSection, PartnersSection, FounderNote, Marquee, Footer,
});
