// Sections.jsx — All page sections for the pre-launch landing.

const { useState: useSt, useEffect: useEf, useRef: useRf } = React;

// ── NAVBAR (phase-aware) ────────────────────────────────────
// Founding phase (week1 / week2): countdown pill + "Reserve my seat".
// Post-cohort: drop the urgency anchor, surface real navigation +
// "Start trial" CTA. The post-cohort design leans on:
//   - Hick's Law: fewer in-nav choices ⇒ faster decisions.
//   - Clear trial economics: $0 today, card on file, then Standard.
//   - Status-quo bias: a "Sign in" link reassures returning users
//     they didn't land on a sales page they can't escape.
window.NavBar = function NavBar({ onJoin }) {
  const phase = window.SCS_PHASE || {};
  const isPostCohort = phase.mode === "post-cohort";
  const isExpired = phase.mode === "expired";

  if (isPostCohort) {
    return <window.PostCohortNavBar />;
  }

  if (isExpired) {
    return <window.ExpiredNavBar />;
  }

  const c = window.useCountdown();
  return (
    <nav className="scs-nav" style={{
      display: "flex", alignItems: "center", justifyContent: "space-between",
      padding: "22px 40px", position: "relative", zIndex: 10,
      maxWidth: 1280, margin: "0 auto", gap: 20, flexWrap: "wrap",
    }}>
      <img src="assets/logos/SoloContentStudio_logo_onlight.svg" alt="The Solo Content Studio"
           style={{ height: 28, width: "auto" }} />

      <div style={{ display: "flex", alignItems: "center", gap: 14, flexWrap: "wrap", justifyContent: "flex-end" }}>
        {/* Inline countdown pill — orange-tinted, matches button height. Hidden on mobile via .scs-nav-countdown. */}
        <div className="scs-nav-countdown" style={{
          display: "inline-flex", alignItems: "center", gap: 10,
          height: 38, boxSizing: "border-box",
          minWidth: 360,
          padding: "0 14px", borderRadius: 999,
          background: "var(--orange-light)",
          border: "1.5px solid hsl(12 72% 55% / 0.55)",
          whiteSpace: "nowrap",
          justifyContent: "center",
        }}>
          <span style={{
            fontFamily: "var(--font-mono)", fontSize: 10,
            letterSpacing: "0.14em", textTransform: "uppercase",
            color: "var(--orange-deep)", opacity: 0.85,
          }}>Save $1,800<span className="scs-nav-countdown-onpro"> on Pro Plan</span> · ends in</span>
          {[["d", c.days], ["h", c.hours], ["m", c.mins], ["s", c.secs]].map(([u, n], i) => (
            <span key={u} style={{ display: "inline-flex", alignItems: "baseline", gap: 1 }}>
              <span style={{
                fontFamily: "var(--font-body)", fontSize: 14, fontWeight: 600,
                color: "var(--orange-deep)", letterSpacing: "0", lineHeight: 1,
                fontVariantNumeric: "tabular-nums",
              }}>{String(n).padStart(2, "0")}</span>
              <span style={{
                fontFamily: "var(--font-mono)", fontSize: 10,
                color: "var(--orange-deep)", letterSpacing: "0.08em", opacity: 0.7,
              }}>{u}</span>
              {i < 3 && <span style={{ color: "var(--orange)", opacity: 0.5, marginLeft: 4, fontSize: 11 }}>·</span>}
            </span>
          ))}
        </div>

        <window.SCSButton variant="primary" size="md" onClick={onJoin} style={{ whiteSpace: "nowrap" }}>
          <span style={{ display: "inline-flex", alignItems: "center", gap: 10, whiteSpace: "nowrap" }}>
            <span style={{
              width: 7, height: 7, borderRadius: "50%", background: "hsl(150, 100%, 75%)",
              boxShadow: "0 0 8px hsla(150, 100%, 75%, 0.8)",
              animation: "scsPulse 1.8s ease-in-out infinite",
              flexShrink: 0,
            }} />
            <span>Reserve my seat</span>
          </span>
        </window.SCSButton>
      </div>
    </nav>
  );
};

// ── EXPIRED NAVBAR ──────────────────────────────────────────
// Bridge state between the active cohort and the post-cohort 3-tier layout.
// Logo on the left, "Joining the cohort has expired" pill on the right with
// a frozen 0/0/0/0 countdown. No buy / reserve button — the founding window
// is closed.
window.ExpiredNavBar = function ExpiredNavBar() {
  return (
    <nav className="scs-nav scs-nav-expired" style={{
      display: "flex", alignItems: "center", justifyContent: "space-between",
      padding: "22px 40px", position: "relative", zIndex: 10,
      maxWidth: 1280, margin: "0 auto", gap: 20, flexWrap: "wrap",
    }}>
      <style>{`
        .scs-nav-expired-msg-short { display: none; }
        @media (max-width: 640px) {
          .scs-nav-expired-msg-full { display: none; }
          .scs-nav-expired-msg-short { display: inline; }
        }
      `}</style>
      <img src="assets/logos/SoloContentStudio_logo_onlight.svg" alt="The Solo Content Studio"
           style={{ height: 28, width: "auto" }} />

      <div className="scs-nav-expired-pill" style={{
        display: "inline-flex", alignItems: "center", gap: 12,
        height: 38, boxSizing: "border-box",
        padding: "0 16px", borderRadius: 999,
        background: "hsl(355 12% 94%)",
        border: "1.5px solid hsl(350 12% 84%)",
        whiteSpace: "nowrap",
      }}>
        <span style={{
          width: 7, height: 7, borderRadius: "50%",
          background: "hsl(350 10% 60%)", flexShrink: 0,
        }} />
        <span style={{
          fontFamily: "var(--font-mono)", fontSize: 11,
          letterSpacing: "0.14em", textTransform: "uppercase",
          color: "var(--ink-light)", fontWeight: 600,
        }}>
          <span className="scs-nav-expired-msg-full">Joining the cohort has expired</span>
          <span className="scs-nav-expired-msg-short">Cohort closed</span>
        </span>
        <span style={{
          fontFamily: "var(--font-body)", fontSize: 13, fontWeight: 600,
          color: "var(--muted)", letterSpacing: "0", lineHeight: 1,
          fontVariantNumeric: "tabular-nums",
          paddingLeft: 10,
          marginLeft: 4,
          borderLeft: "1px solid hsl(350 10% 80%)",
        }}>00d · 00h · 00m · 00s</span>
      </div>
    </nav>
  );
};

// ── POST-COHORT NAVBAR ──────────────────────────────────────
// Calmer, link-driven. Single primary CTA starts the email-first setup flow.
// Pricing link scrolls to #pricing.
window.PostCohortNavBar = function PostCohortNavBar() {
  const signupHref = window.SCS_SIGNUP_HREF || "/signup";
  // Sticky-on-scroll state. A rAF-throttled passive scroll listener toggles the
  // "stuck" treatment. This is the cross-browser path: the CSS scroll-state()
  // container query (@container scroll-state(stuck: top)) only ships in
  // Chromium today, so Safari / Firefox would otherwise get no floating pill.
  const [stuck, setStuck] = useSt(false);
  useEf(() => {
    let raf = 0;
    const apply = () => { raf = 0; setStuck(window.scrollY > 24); };
    const onScroll = () => { if (!raf) raf = requestAnimationFrame(apply); };
    apply(); // initialise (handles a reload partway down the page)
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => {
      window.removeEventListener("scroll", onScroll);
      if (raf) cancelAnimationFrame(raf);
    };
  }, []);

  // Mobile hamburger menu (phones only). Closed by default; closes on Escape,
  // outside click, link tap, or once the viewport grows past the breakpoint.
  const [menuOpen, setMenuOpen] = useSt(false);
  const navRef = useRf(null);
  useEf(() => {
    if (!menuOpen) return;
    const onKey = (e) => { if (e.key === "Escape") setMenuOpen(false); };
    const onDown = (e) => {
      if (navRef.current && !navRef.current.contains(e.target)) setMenuOpen(false);
    };
    const onResize = () => { if (window.innerWidth > 720) setMenuOpen(false); };
    document.addEventListener("keydown", onKey);
    document.addEventListener("mousedown", onDown);
    window.addEventListener("resize", onResize);
    return () => {
      document.removeEventListener("keydown", onKey);
      document.removeEventListener("mousedown", onDown);
      window.removeEventListener("resize", onResize);
    };
  }, [menuOpen]);

  const scrollToSection = (id) => (event) => {
    event.preventDefault();
    const el = document.getElementById(id);
    if (el) {
      el.scrollIntoView({ behavior: "smooth", block: "start" });
      window.history.replaceState(null, "", `#${id}`);
    }
  };
  // Mobile-panel link: run the normal action, then close the menu.
  const onMobileNav = (handler) => (event) => {
    if (handler) handler(event);
    setMenuOpen(false);
  };

  return (
    <div className={"scs-nav-sticky" + (stuck ? " is-stuck" : "")}>
      <style>{`
        /* Sticky wrapper: keeps the nav pinned on scroll. When stuck, its
           padding opens a gap so the inner bar reads as a floating pill. */
        .scs-nav-sticky {
          position: sticky;
          top: 0;
          z-index: 50;
          transition: padding 0.3s ease;
        }
        .scs-nav-sticky.is-stuck { padding: 12px 16px; }

        .scs-nav-pc {
          position: relative;          /* anchor for the mobile dropdown */
          display: flex;
          align-items: center;
          justify-content: space-between;
          gap: 20px;
          flex-wrap: wrap;
          max-width: 1280px;
          margin: 0 auto;
          padding: 22px 40px;
          border: 1px solid transparent;
          border-radius: 0;
          background: transparent;
          transition: max-width 0.3s ease, padding 0.3s ease, background 0.3s ease,
                      border-radius 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
        }
        /* Floating pill once scrolled. Warm translucent surface (matches the
           brand cream) with a blur so the dark logo + ink links stay legible
           over whichever section is scrolling behind it. */
        .scs-nav-sticky.is-stuck .scs-nav-pc {
          max-width: 56rem;
          padding: 14px 24px;
          background: hsl(35 38% 98% / 0.86);
          -webkit-backdrop-filter: blur(14px) saturate(1.3);
          backdrop-filter: blur(14px) saturate(1.3);
          border-radius: 14px;
          border-color: hsl(348 22% 88% / 0.7);
          box-shadow: 0 10px 34px hsl(348 45% 14% / 0.14);
        }

        .scs-nav-pc-logo {
          width: auto;
          display: block;
          transition: height 0.3s ease;
        }
        .scs-nav-pc-logo-full { height: 28px; }
        .scs-nav-sticky.is-stuck .scs-nav-pc-logo-full { height: 24px; }

        /* Inline actions — desktop + tablet (hidden on phones). */
        .scs-nav-pc-actions {
          display: flex;
          align-items: center;
          gap: 6px;
          flex-wrap: wrap;
          justify-content: flex-end;
        }
        .scs-nav-pc-link {
          font-family: var(--font-body);
          font-size: 14px;
          font-weight: 500;
          color: var(--ink);
          text-decoration: none;
          padding: 8px 12px;
          border-radius: 8px;
          transition: background 0.15s ease, color 0.15s ease;
        }
        .scs-nav-pc-link:hover {
          background: var(--orange-light);
          color: var(--orange-deep);
        }

        /* Hamburger toggle + dropdown panel: phones only (shown in the
           max-width: 720px block). Hidden elsewhere; the inline actions show. */
        .scs-nav-hamburger { display: none; }
        .scs-nav-mobile-menu { display: none; }

        /* Single row across tablet + phone (overrides the legacy column stack in
           colors_and_type.css). Tablet shows the inline actions incl. the Start
           trial button; phone shows the hamburger instead. */
        @media (max-width: 1024px) {
          .scs-nav.scs-nav-pc {
            flex-direction: row !important;
            flex-wrap: nowrap !important;
            justify-content: space-between !important;
            align-items: center !important;
          }
          /* Stuck = compact full-width rounded bar (no centered pill shrink). */
          .scs-nav-sticky.is-stuck { padding: 8px 10px; }
          .scs-nav-sticky.is-stuck .scs-nav-pc {
            max-width: 100%;
            border-radius: 12px;
            padding: 10px 16px !important;
            gap: 8px !important;
          }
        }

        /* Phones: hide the inline actions, show the full wordmark + hamburger,
           and drop a disclosure panel with every nav item below the bar. */
        @media (max-width: 720px) {
          .scs-nav-pc-actions { display: none !important; }
          .scs-nav-hamburger {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 44px;
            height: 44px;
            padding: 0;
            border: none;
            border-radius: 10px;
            background: transparent;
            color: var(--ink);
            cursor: pointer;
          }
          .scs-nav-hamburger:hover { background: var(--orange-light); color: var(--orange-deep); }

          .scs-nav-mobile-menu {
            position: absolute;
            top: calc(100% + 8px);
            /* Inset from the screen edges at the top of the page. Once stuck the
               floating pill already insets the bar, so the stuck rule below pins
               the panel back to the pill edges (same gap, no double inset). */
            left: 10px;
            right: 10px;
            display: flex;
            flex-direction: row;
            flex-wrap: wrap;
            align-items: center;
            justify-content: center;
            gap: 6px;
            padding: 10px 12px;
            background: var(--white);
            border: 1px solid hsl(348 22% 88% / 0.9);
            border-radius: 14px;
            box-shadow: 0 18px 44px hsl(348 45% 14% / 0.18);
            opacity: 0;
            visibility: hidden;
            transform: translateY(-8px);
            pointer-events: none;
            transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s 0.2s;
          }
          .scs-nav-sticky.is-stuck .scs-nav-mobile-menu { left: 0; right: 0; }
          .scs-nav-mobile-menu.is-open {
            opacity: 1;
            visibility: visible;
            transform: translateY(0);
            pointer-events: auto;
            transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s 0s;
          }
          .scs-nav-mobile-link {
            font-family: var(--font-body);
            font-size: 16px;
            font-weight: 500;
            color: var(--ink);
            text-decoration: none;
            padding: 10px 12px;
            border-radius: 10px;
          }
          .scs-nav-mobile-link:hover { background: var(--orange-light); color: var(--orange-deep); }
        }
      `}</style>

      <nav className="scs-nav scs-nav-pc" ref={navRef}>
        <img src="assets/logos/SoloContentStudio_logo_onlight.svg" alt="The Solo Content Studio"
             className="scs-nav-pc-logo scs-nav-pc-logo-full" />

        {/* Desktop + tablet inline actions. */}
        <div className="scs-nav-pc-actions">
          <div className="scs-nav-pc-links" style={{ display: "inline-flex", alignItems: "center", gap: 4 }}>
            <a href="#demo-video" onClick={scrollToSection("demo-video")} className="scs-nav-pc-link">Demo</a>
            <a href="#pricing" onClick={scrollToSection("pricing")} className="scs-nav-pc-link">Pricing</a>
          </div>
          <a href="/login" className="scs-nav-pc-link">Sign in</a>
          <window.SCSButton
            variant="primary"
            size="md"
            onClick={() => { window.location.href = signupHref; }}
            style={{ whiteSpace: "nowrap" }}
          >
            Start trial
          </window.SCSButton>
        </div>

        {/* Phone hamburger toggle. */}
        <button
          type="button"
          className="scs-nav-hamburger"
          aria-label={menuOpen ? "Close menu" : "Open menu"}
          aria-expanded={menuOpen}
          aria-controls="scs-mobile-menu"
          onClick={() => setMenuOpen((open) => !open)}
        >
          {menuOpen ? (
            <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor"
                 strokeWidth="2" strokeLinecap="round" aria-hidden="true">
              <line x1="5" y1="5" x2="19" y2="19" />
              <line x1="19" y1="5" x2="5" y2="19" />
            </svg>
          ) : (
            <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor"
                 strokeWidth="2" strokeLinecap="round" aria-hidden="true">
              <line x1="3" y1="6" x2="21" y2="6" />
              <line x1="3" y1="12" x2="21" y2="12" />
              <line x1="3" y1="18" x2="21" y2="18" />
            </svg>
          )}
        </button>

        {/* Phone dropdown menu, anchored under the bar (absolute so it overlays
            content instead of growing the sticky bar). */}
        <div id="scs-mobile-menu" className={"scs-nav-mobile-menu" + (menuOpen ? " is-open" : "")}>
          <a href="#demo-video" onClick={onMobileNav(scrollToSection("demo-video"))} className="scs-nav-mobile-link">Demo</a>
          <a href="#pricing" onClick={onMobileNav(scrollToSection("pricing"))} className="scs-nav-mobile-link">Pricing</a>
          <a href="/login" onClick={onMobileNav()} className="scs-nav-mobile-link">Sign in</a>
          <window.SCSButton
            variant="primary"
            size="md"
            onClick={() => { window.location.href = signupHref; }}
            style={{ whiteSpace: "nowrap" }}
          >
            Start trial
          </window.SCSButton>
        </div>
      </nav>
    </div>
  );
};

// ── COUNTDOWN STRIP (subtle, below nav) ─────────────────────
window.CountdownStrip = function CountdownStrip() {
  const c = window.useCountdown();
  const Cell = ({ n, l }) => (
    <div style={{ display: "flex", alignItems: "baseline", gap: 4 }}>
      <span style={{ fontFamily: "var(--font-display)", fontSize: 22, color: "var(--ink)", lineHeight: 1, minWidth: 32, textAlign: "right", letterSpacing: "0.04em" }}>
        {String(n).padStart(2, "0")}
      </span>
      <span style={{ fontFamily: "var(--font-mono)", fontSize: 10, color: "var(--muted)", textTransform: "uppercase", letterSpacing: "0.1em" }}>{l}</span>
    </div>
  );
  return (
    <div style={{
      display: "flex", alignItems: "center", justifyContent: "center", gap: 24,
      padding: "14px 20px",
      borderTop: "1px solid var(--border)", borderBottom: "1px solid var(--border)",
      background: "hsl(355 10% 97% / 0.6)",
    }}>
      <window.Eyebrow>Save $1,800 · ends in</window.Eyebrow>
      <Cell n={c.days}  l="days" />
      <span style={{ color: "var(--border)" }}>·</span>
      <Cell n={c.hours} l="hrs" />
      <span style={{ color: "var(--border)" }}>·</span>
      <Cell n={c.mins}  l="min" />
      <span style={{ color: "var(--border)" }}>·</span>
      <Cell n={c.secs}  l="sec" />
    </div>
  );
};

// ── ANNOUNCEMENT STRIP (under nav) ──────────────────────────
// Pre-order period messaging. Makes the buy / delivery contract explicit.
// Hidden in post-cohort phase: founding-window urgency is gone, and
// reusing the strip for evergreen value-prop messaging would be banner
// fatigue (the hero already carries the value prop). Cleaner page.
window.AnnouncementStrip = function AnnouncementStrip() {
  const phase = window.SCS_PHASE || {};
  if (phase.mode === "post-cohort" || phase.mode === "expired") return null;
  return (
    <>
      <style>{`
        @keyframes scsAnnouncePulse {
          0%, 100% { transform: scale(1); opacity: 1; }
          50%      { transform: scale(1.25); opacity: 0.65; }
        }
        @media (max-width: 640px) {
          .scs-announce-strip {
            padding: 12px 16px !important;
            gap: 10px !important;
          }
          .scs-announce-strip .scs-announce-body {
            font-size: 14px !important;
          }
          .scs-announce-strip .scs-announce-sep {
            display: none !important;
          }
        }
      `}</style>
      <div className="scs-announce-strip" style={{
        padding: "13px 24px",
        background: "var(--orange-light)",
        borderBottom: "1px solid hsl(12 60% 88%)",
        display: "flex", flexWrap: "wrap",
        justifyContent: "center", alignItems: "center",
        gap: 14, textAlign: "center",
      }}>
        <span style={{
          display: "inline-flex", alignItems: "center", gap: 9,
          fontFamily: "var(--font-mono)", fontSize: 11,
          fontWeight: 700, letterSpacing: "0.16em",
          textTransform: "uppercase", color: "var(--orange-deep)",
        }}>
          <span style={{
            width: 8, height: 8, borderRadius: "50%",
            background: "var(--orange)",
            animation: "scsAnnouncePulse 2.4s ease-in-out infinite",
          }} />
          Pre-order open
        </span>

        <span className="scs-announce-sep" style={{
          color: "hsl(12 50% 70%)", opacity: 0.6,
        }}>·</span>

        <span className="scs-announce-body" style={{
          fontFamily: "var(--font-emphasis)",
          fontSize: 16, color: "var(--ink)", lineHeight: 1.4,
        }}>
          Lock in founding access. The Studio is delivered{" "}
          <strong style={{
            fontWeight: 600,
            color: "var(--orange-deep)",
          }}>May 11</strong>.
        </span>
      </div>
    </>
  );
};

// ── SPECIALIST TICKER (hero-adjacent, horizontal scroll) ────
window.SpecialistTicker = function SpecialistTicker() {
  // Each specialist gets a tinted card with portrait + name/title.
  // Duplicate the list so the marquee loops seamlessly.
  const items = window.SPECIALISTS;
  const loop = [...items, ...items];

  return (
    <div className="scs-ticker-wrap" style={{
      position: "relative",
      marginTop: 72,
      marginInline: "calc(50% - 50vw)", // full-bleed out of the padded header
      overflow: "hidden",
      padding: "8px 0 2px",
      // soft fade at edges
      maskImage: "linear-gradient(to right, transparent 0, black 8%, black 92%, transparent 100%)",
      WebkitMaskImage: "linear-gradient(to right, transparent 0, black 8%, black 92%, transparent 100%)",
    }}>
      <div style={{
        display: "flex",
        gap: 14,
        width: "max-content",
        animation: "scsMarquee 60s linear infinite",
        paddingLeft: 14,
      }}>
        {loop.map((s, i) => (
          <div key={`${s.num}-${i}`} className="scs-ticker-card" style={{
            flex: "0 0 auto",
            width: 180,
            height: 158,
            background: `var(--${s.accent}-3)`,
            borderRadius: 20,
            padding: "14px 16px 14px",
            display: "flex",
            flexDirection: "column",
            alignItems: "center",
            justifyContent: "flex-end",
            position: "relative",
            border: "1px solid var(--border)",
          }}>
            <img src={s.portrait} alt="" className="scs-ticker-portrait" style={{
              position: "absolute",
              top: 12,
              left: "50%",
              transform: "translateX(-50%)",
              width: 118, height: 118, objectFit: "contain",
            }} />
            <div className="scs-ticker-title" style={{
              fontFamily: "var(--font-emphasis)", fontStyle: "italic",
              fontSize: 22, lineHeight: 1.1, color: "var(--ink)",
              textAlign: "center", marginTop: "auto",
              letterSpacing: "-0.01em",
            }}>
              {s.title}
            </div>
          </div>
        ))}
      </div>
    </div>
  );
};

// ── HERO — variant A: one-column editorial + specialist ticker ────
window.HeroA = function HeroA({ onJoin }) {
  return (
    <header className="scs-hero-a" style={{ position: "relative", overflow: "hidden", padding: "80px 32px 40px", textAlign: "center" }}>
      <window.MeshBg variant="warm" />

      <div style={{ position: "relative", maxWidth: 1000, margin: "0 auto" }}>
        <h1 style={{
          fontSize: "clamp(40px, 4.8vw, 72px)",
          lineHeight: 1.1, letterSpacing: "-0.03em",
          margin: "0 auto 28px", maxWidth: 900,
        }}>
          Build a one-person content studio<br />
          that produces like a <em>10-person team.</em>
        </h1>

        <p className="scs-hero-a-p" style={{
          fontSize: 22, lineHeight: 1.5, color: "var(--ink-light)",
          maxWidth: 680, margin: "0 auto 40px", fontWeight: 400,
        }}>
          Ten years ago, marketing a solo business meant a blog and a newsletter.
          Today, it's nine formats, four platforms, and a schedule that never stops.
          <br /><br />
          <span style={{ color: "var(--ink)", fontWeight: 700 }}>
            We're building you a way out.
          </span>
        </p>

        <div style={{ display: "flex", flexDirection: "column", alignItems: "center", gap: 14 }}>
          <window.SCSButton variant="primary" size="xl" onClick={onJoin}>
            Join the waitlist →
          </window.SCSButton>
          <span style={{
            fontFamily: "var(--font-mono)", fontSize: 11, color: "var(--muted)",
            letterSpacing: "0.12em", textTransform: "uppercase",
          }}>No spam · One email when doors open</span>
        </div>
      </div>

      {/* Specialist ticker */}
      <window.SpecialistTicker />
    </header>
  );
};

// ── HERO — variant B: "Studio, not Team" (split) ────────────
window.HeroB = function HeroB({ onJoin }) {
  return (
    <header className="scs-hero-a" style={{ position: "relative", overflow: "hidden", padding: "60px 32px 40px" }}>
      <window.MeshBg variant="warm" />
      <div className="scs-hero-b" style={{
        position: "relative", maxWidth: 1280, margin: "0 auto",
        display: "grid", gridTemplateColumns: "1.1fr 1fr", gap: 64, alignItems: "center",
      }}>
        <div>
          <div style={{ marginBottom: 28 }}>
            <window.Badge variant="coral">Pre-launch · April 27</window.Badge>
          </div>
          <h1 style={{
            fontSize: "clamp(40px, 4.6vw, 68px)",
            lineHeight: 0.95, letterSpacing: "-0.025em",
            margin: "0 0 28px",
          }}>
            Stop being a content team of one.<br />
            Become a content <em>studio</em> of one.
          </h1>
          <p style={{
            fontSize: 20, lineHeight: 1.55, color: "var(--ink-light)",
            maxWidth: 560, margin: "0 0 36px",
          }}>
            Ten content specialists. One tool. Your brand, your voice,
            <em style={{ fontSize: "1.1em" }}> running forever.</em>
          </p>
          <div style={{ display: "flex", flexDirection: "column", gap: 14, alignItems: "flex-start" }}>
            <window.WaitlistForm variant="light" size="lg" align="start" buttonLabel="Reserve your seat →" />
            <window.Eyebrow>Founding cohort · Limited</window.Eyebrow>
          </div>
        </div>
        <div className="scs-hero-b-tiles" style={{
          display: "grid", gridTemplateColumns: "repeat(3, 1fr)",
          gap: 10, transform: "rotate(-2deg)",
        }}>
          {window.SPECIALISTS.slice(0, 9).map((s, i) => (
            <div key={s.num} style={{
              aspectRatio: "1 / 1.1",
              background: `var(--${s.accent}-3)`,
              border: "1px solid var(--border)", borderRadius: 16,
              padding: 10, display: "flex", flexDirection: "column",
              alignItems: "center", justifyContent: "center",
              boxShadow: "var(--shadow-sm)",
              transform: `rotate(${(i % 2 ? -1 : 1) * 1.2}deg)`,
            }}>
              <img src={s.portrait} alt=""
                style={{ width: "85%", height: "auto", objectFit: "contain" }} />
              <div style={{
                fontFamily: "var(--font-mono)", fontSize: 9, color: `var(--${s.accent}-1)`,
                textTransform: "uppercase", letterSpacing: "0.08em", marginTop: 4,
                textAlign: "center",
              }}>{s.num} · {s.title.split(" ")[0]}</div>
            </div>
          ))}
        </div>
      </div>
    </header>
  );
};

// ── PROBLEM ACTS ────────────────────────────────────────────
window.ProblemActs = function ProblemActs() {
  const options = [
    { n: "01", t: "Hire freelancers", d: "You become the project manager. You chase and review instead of creating.", c: "$2–8k/mo" },
    { n: "02", t: "Agency on retainer", d: "They move at their pace. It still doesn't sound like you.", c: "$5–15k/mo" },
    { n: "03", t: "Use GPT/Claude", d: "Generic voice. Repeat your brand memory. Re-paste context indefinitely.", c: "Unreliable output" },
    { n: "04", t: "Do it all yourself", d: "Content always loses to \"urgent\" client work. Three months pass. Burnout cycle continues.", c: "Too much time and stress" },
  ];

  // Each "act" gets its own containerized card — stacked like three slides.
  const actCard = {
    borderRadius: 28,
    padding: "72px 56px",
    position: "relative",
    overflow: "hidden",
    marginBottom: 24,
  };

  return (
    <section className="scs-act-section" style={{ padding: "96px 32px", background: "var(--cream)", position: "relative" }}>
      {/* ── Lifted product hero (text + animated browser, no card, no CTA) ── */}
      <div style={{ maxWidth: 1280, margin: "0 auto 64px" }}>
        <window.HeroProductShot />
      </div>

      <div style={{ maxWidth: 1100, margin: "0 auto" }}>

        {/* ── ACT 1 — The problem (cream card, paper grain) ──────── */}
        <div className="scs-act-card scs-reveal" style={{
          ...actCard,
          background: "var(--white)",
          border: "1px solid var(--border)",
          boxShadow: "var(--shadow-sm)",
        }}>
          {/* Soft coral bloom */}
          <div style={{
            position: "absolute", inset: 0, pointerEvents: "none",
            background: "radial-gradient(ellipse 50% 50% at 50% 0%, hsla(12, 70%, 85%, 0.35), transparent 60%)",
          }} />
          <div style={{ position: "relative", textAlign: "center", maxWidth: 820, margin: "0 auto" }}>
            <window.Eyebrow style={{ marginBottom: 18, color: "var(--orange)" }}>Act 01 · The problem</window.Eyebrow>
            <h2 style={{ fontSize: "clamp(38px, 5vw, 68px)", lineHeight: 1.05, marginBottom: 28, letterSpacing: "-0.025em" }}>
              You're one person with a <em>ten-person workload.</em>
            </h2>
            <p style={{ fontSize: 21, color: "var(--ink-light)", lineHeight: 1.55, margin: 0 }}>
              The job is too big for one human.
              <br />
              The market tells solopreneurs this is a discipline problem.
              It isn't.
              <br />
              It's a <em style={{ fontSize: "1.15em", color: "var(--ink)" }}>volume problem.</em>
            </p>
          </div>
        </div>

        {/* ── ACT 2 — The bad options (tinted card) ──────────────── */}
        <div className="scs-act-card scs-reveal" style={{
          ...actCard,
          background: "var(--iris-3)",
          border: "1px solid var(--border)",
        }}>
          {/* subtle dot pattern */}
          <div style={{
            position: "absolute", inset: 0, pointerEvents: "none", opacity: 0.25,
            backgroundImage: "radial-gradient(circle, hsla(258, 30%, 50%, 0.25) 1px, transparent 1px)",
            backgroundSize: "18px 18px",
          }} />
          <div style={{ position: "relative" }}>
            <div style={{ textAlign: "center", marginBottom: 48, maxWidth: 720, marginInline: "auto" }}>
              <window.Eyebrow style={{ marginBottom: 18, color: "var(--iris-1)" }}>Act 02 · The bad options</window.Eyebrow>
              <h2 style={{ fontSize: "clamp(34px, 4.4vw, 58px)", lineHeight: 1.02, letterSpacing: "-0.02em", margin: 0 }}>
                What's a solopreneur <em>to do?</em>
              </h2>
            </div>
            <div style={{
              display: "grid",
              // Snap between 1 / 2 / 4 columns — never 3.
              gridTemplateColumns: "repeat(4, minmax(0, 1fr))",
              gap: 16,
            }}
            className="scs-act2-grid">
            
              {options.map((o) => (
                <div key={o.n} style={{
                  background: "var(--white)", border: "1px solid var(--border)",
                  borderRadius: 18, padding: "22px 20px",
                  display: "flex", flexDirection: "column", gap: 10,
                  boxShadow: "var(--shadow-sm)",
                }}>
                  <div style={{
                    fontFamily: "var(--font-mono)", fontSize: 10, fontWeight: 500,
                    letterSpacing: "0.14em", textTransform: "uppercase", color: "var(--iris-1)",
                  }}>Option {o.n}</div>
                  <h3 style={{ fontSize: 21, margin: 0, letterSpacing: "-0.01em", lineHeight: 1.15 }}>{o.t}</h3>
                  <p style={{ fontSize: 14, color: "var(--ink-light)", lineHeight: 1.5, margin: 0 }}>{o.d}</p>
                  <div style={{
                    fontFamily: "var(--font-emphasis)", fontStyle: "italic",
                    fontSize: 18, color: "var(--orange)", marginTop: "auto", paddingTop: 10,
                  }}>{o.c}</div>
                </div>
              ))}
            </div>
          </div>
        </div>

        {/* ── ACT 3 — the way out (dark card) ────────────────────── */}
        <div id="act-3-way-out" className="scs-act-card scs-reveal" style={{
          ...actCard,
          background: "var(--ink-deep)",
          color: "var(--white)",
          marginBottom: 0,
        }}>
          <div style={{
            position: "absolute", inset: 0,
            background: "radial-gradient(ellipse 60% 60% at 85% 15%, hsl(12 72% 55% / 0.25), transparent 60%), radial-gradient(ellipse 60% 60% at 15% 85%, hsl(12 72% 55% / 0.15), transparent 60%)",
            pointerEvents: "none",
          }} />
          <div style={{ position: "relative", textAlign: "center", maxWidth: 780, margin: "0 auto" }}>
            <window.Eyebrow style={{ marginBottom: 18, color: "var(--orange)" }}>Act 03 · The way out</window.Eyebrow>
            <h2 style={{
              fontSize: "clamp(38px, 5vw, 64px)", color: "var(--white)", lineHeight: 1.02, marginBottom: 24, letterSpacing: "-0.025em",
            }}>
              The better way <em>has arrived.</em>
            </h2>
            <p style={{ fontSize: 21, color: "hsl(350 15% 82%)", lineHeight: 1.55, marginBottom: 44 }}>
              Don't outsource your content to a team and pay the price.<br />
              <strong style={{ color: "var(--white)", fontWeight: 600 }}>Build your studio.</strong> One that knows your brand, your audience, and your voice.
            </p>

            <div style={{
              display: "flex", alignItems: "stretch", justifyContent: "center",
              gap: 0, marginTop: 48, flexWrap: "wrap",
            }}
            className="scs-act3-chain">
              {[
                {
                  num: "→ 01",
                  t: <>A studio of<br />ten specialists</>,
                  d: "Purpose-built craftspeople for every format you create. One for newsletters, one for sales pages, one for reels. Each pre-loaded with the best practices for their craft.",
                  icon: "/illustrations-icons/ten-specialists.png",
                },
                {
                  num: "→ 02",
                  t: <>Trained once on<br />your business</>,
                  d: "Business, brand, voice, audience, captured once in the context layers and used by every specialist. Never re-explain yourself again. Update in one place as your business evolves.",
                  icon: "/illustrations-icons/knows-you.png",
                },
                {
                  num: "→ 03",
                  t: <>Running<br />itself</>,
                  d: "Set your content cadence and The Studio fills the draft queue based on your topics. Content drafts arrive on schedule, ready for your human touch. You share on all your platforms.",
                  icon: "/illustrations-icons/runs-for-you.png",
                },
              ].map((p, i, arr) => (
                <React.Fragment key={i}>
                  <div style={{
                    flex: "1 1 0",
                    minWidth: 0,
                    padding: "28px 24px",
                    display: "flex", flexDirection: "column",
                    position: "relative",
                    textAlign: "left",
                  }}>
                    <div style={{
                      width: 96, height: 96, borderRadius: "50%",
                      background: `
                        radial-gradient(ellipse 90% 80% at 30% 25%, hsl(12 70% 94%) 0%, transparent 60%),
                        radial-gradient(ellipse 80% 80% at 75% 80%, hsl(38 75% 92%) 0%, transparent 55%),
                        var(--cream)
                      `,
                      border: "1px solid hsl(12 50% 86% / 0.6)",
                      display: "flex", alignItems: "center", justifyContent: "center",
                      marginBottom: 18,
                      boxShadow: "0 10px 28px hsl(345 58% 4% / 0.45)",
                    }}>
                      <img src={p.icon} alt="" style={{
                        width: 68, height: 68, objectFit: "contain",
                      }} />
                    </div>
                    <div style={{
                      fontFamily: "var(--font-mono)", fontSize: 11,
                      color: "var(--orange)", letterSpacing: "0.14em",
                      textTransform: "uppercase", marginBottom: 10,
                    }}>{p.num}</div>
                    <h4 style={{
                      color: "var(--white)", margin: "0 0 10px",
                      fontSize: 26, letterSpacing: "-0.015em", lineHeight: 1.1,
                    }}>{p.t}</h4>
                    <p style={{
                      color: "hsl(350 15% 78%)", fontSize: 15, margin: 0,
                      lineHeight: 1.55,
                    }}>{p.d}</p>
                  </div>
                  {i < arr.length - 1 && (
                    <div aria-hidden="true" className="scs-act3-divider" style={{
                      width: 1, alignSelf: "stretch", minHeight: 180,
                      background: "linear-gradient(to bottom, transparent, hsla(12, 72%, 55%, 0.4), transparent)",
                      margin: "12px 0", flexShrink: 0,
                    }} />
                  )}
                </React.Fragment>
              ))}
            </div>
          </div>
        </div>
      </div>
    </section>
  );
};

// ── OUTPUT SHOWCASE — "One place. Everything you ship." ─────
window.OutputShowcase = function OutputShowcase() {
  // Mapped to specialists; each format shows the specialist's accent color + animal dot.
  const formats = [
    { cat: "Written",  items: [
      { title: "Newsletters",      sub: "Weekly or evergreen", accent: "coral", spec: "Hedgehog · Newsletter Editor" },
      { title: "Blog posts",       sub: "SEO-aware long-form",  accent: "ice",   spec: "Deer · Blog Writer" },
      { title: "Sales pages",      sub: "Long-form conversion", accent: "iris",  spec: "Raccoon · Sales Page Builder" },
      { title: "Email sequences",  sub: "Welcome & nurture",    accent: "sage",  spec: "Owl · Email Strategist" },
    ]},
    { cat: "Social",   items: [
      { title: "Text posts",       sub: "Twitter · LinkedIn · Threads", accent: "pink", spec: "Parrot · Social Director" },
      { title: "Carousels",        sub: "Instagram · LinkedIn",          accent: "pink", spec: "Magpie · Slide Designer" },
      { title: "Short-form video", sub: "Reels · TikTok · Shorts",       accent: "ice",  spec: "Otter · Video Producer" },
      { title: "Long-form scripts",sub: "YouTube · webinars",            accent: "ice",  spec: "Otter · Video Producer" },
    ]},
    { cat: "Spoken",   items: [
      { title: "Podcast outlines", sub: "Solo or interview",    accent: "gold", spec: "Bear · Podcast Producer" },
      { title: "Show notes",       sub: "Timestamps & pull-quotes", accent: "gold", spec: "Bear · Podcast Producer" },
    ]},
    { cat: "Visual",   items: [
      { title: "Slide decks",      sub: "Talks & keynotes",     accent: "pink", spec: "Magpie · Slide Designer" },
      { title: "Brand & design system", sub: "Voice, tone, guardrails", accent: "gold", spec: "Badger · Chief Brand Officer" },
    ]},
    { cat: "Remix",    items: [
      { title: "Content repurposer", sub: "One asset → ten formats", accent: "lime", spec: "Octopus · Content Repurposer" },
    ]},
  ];
  return (
    <section style={{ padding: "120px 32px", background: "var(--cream)", position: "relative", overflow: "hidden" }}>
      <div style={{ position: "absolute", inset: 0, pointerEvents: "none",
        background: "radial-gradient(ellipse 70% 50% at 50% 0%, hsla(12, 80%, 85%, 0.35), transparent 60%)" }} />
      <div style={{ position: "relative", maxWidth: 1200, margin: "0 auto" }}>
        <div style={{ textAlign: "center", marginBottom: 56, maxWidth: 780, marginInline: "auto" }}>
          <window.Eyebrow style={{ marginBottom: 18, color: "var(--orange)" }}>One place · Everything you ship</window.Eyebrow>
          <h2 style={{ fontSize: "clamp(40px, 5.5vw, 72px)", lineHeight: 0.98, marginBottom: 20, letterSpacing: "-0.025em" }}>
            Your whole content operation.<br />
            <em>One window.</em> One voice.
          </h2>
          <p style={{ fontSize: 19, color: "var(--ink-light)", lineHeight: 1.55 }}>
            Newsletters. Text posts. Short-form video. Carousels. Sales pages. Podcasts. Long-form scripts.
            Email sequences. Slide decks. Every format solopreneurs ship in 2026,
            in <em style={{ fontSize: "1.1em" }}>your voice,</em> to <em style={{ fontSize: "1.1em" }}>your audience,</em> from one place.
          </p>
        </div>

        {/* "Platforms served" mono ribbon */}
        <div style={{
          display: "flex", flexWrap: "wrap", gap: 10, justifyContent: "center",
          marginBottom: 48, maxWidth: 900, marginInline: "auto",
        }}>
          {["Newsletter", "Twitter / X", "LinkedIn", "Threads", "Instagram", "TikTok", "YouTube", "YouTube Shorts", "Podcast", "Blog", "Email", "Sales", "Slides"].map(p => (
            <span key={p} style={{
              fontFamily: "var(--font-mono)", fontSize: 11, fontWeight: 500,
              letterSpacing: "0.08em", textTransform: "uppercase",
              padding: "7px 14px", borderRadius: 999, lineHeight: 1.2,
              background: "var(--white)", color: "var(--ink-light)",
              border: "1px solid var(--border)",
            }}>{p}</span>
          ))}
        </div>

        {/* Format grid grouped by category */}
        <div style={{ display: "flex", flexDirection: "column", gap: 28 }}>
          {formats.map(group => (
            <div key={group.cat}>
              <div style={{ display: "flex", alignItems: "baseline", gap: 16, marginBottom: 14 }}>
                <div style={{
                  fontFamily: "var(--font-display)", fontSize: 26, letterSpacing: "-0.015em", color: "var(--ink)",
                }}>{group.cat}.</div>
                <div style={{ flex: 1, height: 1, background: "var(--border)" }} />
              </div>
              <div style={{
                display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(240px, 1fr))", gap: 14,
              }}>
                {group.items.map(it => (
                  <div key={it.title + it.spec} style={{
                    background: "var(--white)", border: "1px solid var(--border)",
                    borderRadius: 20, padding: "20px 22px",
                    display: "flex", flexDirection: "column", gap: 10,
                    boxShadow: "var(--shadow-sm)", position: "relative", overflow: "hidden",
                  }}>
                    <span style={{
                      position: "absolute", top: 0, left: 0, right: 0, height: 3,
                      background: `var(--${it.accent}-2)`,
                    }} />
                    <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8 }}>
                      <h3 style={{ fontSize: 19, margin: 0, letterSpacing: "-0.01em" }}>{it.title}</h3>
                      <span style={{ width: 10, height: 10, borderRadius: "50%", background: `var(--${it.accent}-2)`, flexShrink: 0 }} />
                    </div>
                    <div style={{ fontSize: 13, color: "var(--ink-light)", lineHeight: 1.5 }}>{it.sub}</div>
                    <div style={{
                      fontFamily: "var(--font-mono)", fontSize: 10, letterSpacing: "0.1em",
                      textTransform: "uppercase", color: `var(--${it.accent}-1)`, marginTop: 2,
                    }}>· {it.spec}</div>
                  </div>
                ))}
              </div>
            </div>
          ))}
        </div>

        {/* Footer line — voice & preferences */}
        <div style={{
          marginTop: 56, padding: "28px 36px", background: "var(--white)",
          border: "1px solid var(--border)", borderRadius: 20,
          display: "flex", alignItems: "center", justifyContent: "space-between",
          flexWrap: "wrap", gap: 20, boxShadow: "var(--shadow-sm)",
        }}>
          <div style={{ flex: "1 1 300px" }}>
            <div style={{
              fontFamily: "var(--font-mono)", fontSize: 11, letterSpacing: "0.14em",
              textTransform: "uppercase", color: "var(--orange)", marginBottom: 6,
            }}>The connective tissue</div>
            <div style={{ fontFamily: "var(--font-display)", fontSize: 24, letterSpacing: "-0.015em", lineHeight: 1.15 }}>
              A single brand-context layer. <em>Every</em> specialist reads from it.
            </div>
          </div>
          <div style={{ display: "flex", gap: 8, flexWrap: "wrap" }}>
            {["Voice profile", "Audience", "Offers", "Content pillars", "Preferences"].map(l => (
              <span key={l} style={{
                fontFamily: "var(--font-mono)", fontSize: 11, letterSpacing: "0.08em",
                textTransform: "uppercase", padding: "8px 14px", borderRadius: 999,
                background: "var(--snow)", color: "var(--ink-light)", border: "1px solid var(--border)",
              }}>{l}</span>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
};

// ── THE TEN (roster with real character portraits) ──────────
window.TheTen = function TheTen() {
  return (
    <section style={{ padding: "120px 32px", background: "var(--snow)", position: "relative" }}>
      <div style={{ maxWidth: 1200, margin: "0 auto" }}>
        <div style={{ textAlign: "center", marginBottom: 64, maxWidth: 720, marginInline: "auto" }}>
          <window.Eyebrow style={{ marginBottom: 18 }}>Meet the studio · Currently in training</window.Eyebrow>
          <h2 style={{ fontSize: "clamp(38px, 5vw, 64px)", lineHeight: 1.05, marginBottom: 20 }}>
            Ten <em>specialists.</em><br />
            On staff. Forever.
          </h2>
          <p style={{ fontSize: 18, color: "var(--ink-light)" }}>
            Each one knows a format cold. Each one knows your brand. None of them will quit on a Tuesday.
          </p>
        </div>

        <div style={{
          display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))", gap: 18,
        }}>
          {window.SPECIALISTS.map((s) => (
            <div key={s.num} style={{
              background: `var(--${s.accent}-3)`,
              border: "1px solid var(--border)", borderRadius: 20,
              padding: "20px 18px", display: "flex", flexDirection: "column",
              alignItems: "center", gap: 10,
              boxShadow: "var(--shadow-sm)",
            }}>
              <img src={s.portrait} alt={s.animal}
                style={{ width: "100%", maxWidth: 150, height: "auto", objectFit: "contain" }} />
              <div style={{
                fontFamily: "var(--font-mono)", fontSize: 10, fontWeight: 500,
                letterSpacing: "0.14em", color: `var(--${s.accent}-1)`,
                textTransform: "uppercase",
              }}>No. {s.num}</div>
              <div style={{
                fontFamily: "var(--font-display)", fontSize: 18, textAlign: "center",
                lineHeight: 1.1, color: "var(--ink)", letterSpacing: "-0.01em",
              }}>{s.title}</div>
              <div style={{
                fontFamily: "var(--font-emphasis)", fontStyle: "italic", fontSize: 14,
                color: "var(--orange)",
              }}>{s.animal}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
};

// ── THE TEN — Meet the studio ───────────────────────────────
// Each tile shows the static isometric PNG by default. On hover (desktop)
// or long-press (mobile), the matching .mp4 plays in place, masked by the
// static PNG's alpha so the black video bg never bleeds against the card's
// pastel tint. On release/leave, the video pauses and rewinds so the next
// trigger starts clean.
const LONG_PRESS_MS = 350;

const SpecialistTile = function SpecialistTile({ s, i, team }) {
  const [hov, setHov] = useSt(false);
  const videoRef = useRf(null);
  const pressTimerRef = useRf(null);

  const startPlay = () => {
    setHov(true);
    const v = videoRef.current;
    if (!v) return;
    if (v.preload !== "auto") v.preload = "auto";
    if (v.readyState < 2) {
      try { v.load(); } catch (e) {}
    }
    const p = v.play();
    if (p && typeof p.catch === "function") p.catch(() => {});
  };
  const stopPlay = () => {
    setHov(false);
    const v = videoRef.current;
    if (!v) return;
    v.pause();
    try { v.currentTime = 0; } catch (e) {}
  };
  const clearPressTimer = () => {
    if (pressTimerRef.current) {
      clearTimeout(pressTimerRef.current);
      pressTimerRef.current = null;
    }
  };

  // Mouse: hover plays immediately, leave stops.
  const handleMouseEnter = () => startPlay();
  const handleMouseLeave = () => { clearPressTimer(); stopPlay(); };

  // Touch / pen: long-press to play. A short tap shouldn't trigger,
  // so wait LONG_PRESS_MS before starting. Cancel on release, drag-off,
  // or pointercancel (which fires when the user starts scrolling).
  const handlePointerDown = (e) => {
    if (e.pointerType === "mouse") return; // mouse handled above
    clearPressTimer();
    pressTimerRef.current = setTimeout(() => {
      pressTimerRef.current = null;
      startPlay();
    }, LONG_PRESS_MS);
  };
  const handlePointerEnd = (e) => {
    if (e && e.pointerType === "mouse") return;
    clearPressTimer();
    stopPlay();
  };

  const maskUrl = `url("assets/team/${team.img}")`;

  return (
    <div key={s.num} className="scs-ten-card scs-reveal"
      onMouseEnter={handleMouseEnter}
      onMouseLeave={handleMouseLeave}
      onPointerDown={handlePointerDown}
      onPointerUp={handlePointerEnd}
      onPointerCancel={handlePointerEnd}
      onPointerLeave={handlePointerEnd}
      onContextMenu={(e) => { if (hov || pressTimerRef.current) e.preventDefault(); }}
      style={{
        background: team.bg || `var(--${s.accent}-3)`,
        border: "1px solid var(--border)",
        borderRadius: 20,
        padding: "20px 18px 22px",
        display: "flex", flexDirection: "column",
        alignItems: "center", textAlign: "center",
        boxShadow: "var(--shadow-sm)",
        WebkitTouchCallout: "none",
        WebkitUserSelect: "none",
        userSelect: "none",
        "--scs-delay": `${i * 55}ms`,
      }}>
      {/* Stage holds static + video stacked. */}
      <div style={{
        position: "relative",
        width: "100%", aspectRatio: "1 / 1",
        marginBottom: 14,
      }}>
        <img src={`assets/team/${team.img}`} alt={s.title} style={{
          position: "absolute", inset: 0,
          width: "100%", height: "100%",
          objectFit: "contain",
          opacity: hov ? 0 : 1,
          transition: "opacity 180ms ease",
          pointerEvents: "none",
        }} />
        {team.video && (
          <video
            ref={videoRef}
            src={`assets/team-video/${team.video}`}
            muted
            loop
            playsInline
            preload="none"
            aria-hidden="true"
            style={{
              position: "absolute", inset: 0,
              width: "100%", height: "100%",
              objectFit: "contain",
              opacity: hov ? 1 : 0,
              transition: "opacity 180ms ease",
              pointerEvents: "none",
              WebkitMaskImage: maskUrl,
              maskImage: maskUrl,
              WebkitMaskSize: "contain",
              maskSize: "contain",
              WebkitMaskRepeat: "no-repeat",
              maskRepeat: "no-repeat",
              WebkitMaskPosition: "center",
              maskPosition: "center",
            }}
          />
        )}
      </div>

      {/* № */}
      <div style={{
        fontFamily: "var(--font-mono)", fontSize: 10,
        letterSpacing: "0.14em", textTransform: "uppercase",
        color: `var(--${s.accent}-1)`, marginBottom: 4,
      }}>
        № {s.num}
      </div>

      {/* Role */}
      <div style={{
        fontFamily: "var(--font-display)", fontSize: 19,
        letterSpacing: "-0.015em", lineHeight: 1.15,
        color: "var(--ink)", marginBottom: 14,
      }}>
        {s.title}
      </div>

      {/* Content-type pills */}
      <div style={{
        display: "flex", flexWrap: "wrap",
        gap: 5, justifyContent: "center",
      }}>
        {(team.pills || []).map(fmt => (
          <span key={fmt} style={{
            fontFamily: "var(--font-mono)", fontSize: 9,
            fontWeight: 500, letterSpacing: "0.06em",
            textTransform: "uppercase", lineHeight: 1.2,
            padding: "5px 9px", borderRadius: 999,
            background: "var(--white)",
            color: `var(--${s.accent}-1)`,
            border: `1px solid var(--${s.accent}-2)`,
            whiteSpace: "nowrap",
          }}>{fmt}</span>
        ))}
      </div>
    </div>
  );
};

window.TheTen = function TheTen() {
  // Role → { image filename, video filename, content-type pills, optional bg override to de-dupe accents }
  const TEAM = {
    "Newsletter Editor":   { img: "newsletter-editor.png",     video: "newsletter-editor.mp4",     pills: ["Newsletters"] },
    "Chief Brand Officer": { img: "brand-keeper.png",          video: "brand-keeper.mp4",          pills: ["Voice guide", "Style rules", "Brand guardrails"] },
    "Social Director":     { img: "social-director.png",       video: "social-director.mp4",       pills: ["Text posts", "Carousels", "Short-form video"] },
    // Podcast is also gold — shift warmer (toward apricot) so it doesn't read as brand-officer.
    "Podcast Producer":    { img: "podcast-producer.png",      video: "podcast-producer.mp4",      pills: ["Episode outlines", "Show notes", "Pull-quotes"], bg: "hsl(34, 70%, 92%)" },
    "Sales Page Builder":  { img: "sales-page-copywriter.png", video: "sales-page-copywriter.mp4", pills: ["Sales pages", "Landing pages"] },
    "Email Strategist":    { img: "sequence-strategist.png",   video: "sequence-strategist.mp4",   pills: ["Email sequences"] },
    "Blog Writer":         { img: "blog-writer.png",           video: "blog-writer.mp4",           pills: ["Long-form articles"] },
    // Slide is also pink — shift slightly cooler (toward mauve).
    "Slide Designer":      { img: "slide-designer.png",        video: "slide-designer.mp4",        pills: ["Slide decks"], bg: "hsl(320, 45%, 93%)" },
    // Video is also ice — shift toward a dustier sky tone.
    "Video Producer":      { img: "video-producer.png",        video: "video-producer.mp4",        pills: ["YouTube scripts"], bg: "hsl(215, 45%, 93%)" },
    "Content Repurposer":  { img: "content-repurposer.png",    video: "content-repurposer.mp4",    pills: ["Cross-platform remix"] },
  };

  return (
    <section className="scs-ten-section" style={{
      padding: "120px 32px", background: "var(--white)",
      position: "relative", overflow: "hidden",
    }}>
      <div style={{
        position: "absolute", inset: 0, pointerEvents: "none",
        background: "radial-gradient(ellipse 60% 40% at 50% 0%, hsla(12, 80%, 88%, 0.35), transparent 60%)",
      }} />
      <div style={{ position: "relative", maxWidth: 1280, margin: "0 auto" }}>
        <div style={{ textAlign: "center", marginBottom: 72, maxWidth: 900, marginInline: "auto" }}>
          <window.Eyebrow style={{ marginBottom: 16, color: "var(--orange)" }}>
            The specialists in your studio · currently in training
          </window.Eyebrow>
          <h2 style={{
            fontSize: "clamp(40px, 5.2vw, 68px)", lineHeight: 1.0,
            letterSpacing: "-0.025em", margin: 0,
          }}>
            Ten specialists. Highly trained.<br />
            <em>Creating content for you.</em>
          </h2>
        </div>

        <div className="scs-ten-grid" style={{
          display: "grid",
          gridTemplateColumns: "repeat(5, 1fr)",
          gap: "20px",
        }}>
          {window.SPECIALISTS.map((s, i) => {
            const team = TEAM[s.title] || {};
            return <SpecialistTile key={s.num} s={s} i={i} team={team} />;
          })}
        </div>
      </div>
    </section>
  );
};

// ── PEEK SECTION ────────────────────────────────────────────
window.PeekSection = function PeekSection() {
  return (
    <section className="scs-peek-section" style={{ padding: "120px 32px", background: "var(--white)", position: "relative", overflow: "hidden" }}>
      <window.MeshBg variant="warm" style={{ opacity: 0.4 }} />
      <div style={{ position: "relative", maxWidth: 1100, margin: "0 auto" }}>
        <div style={{ textAlign: "center", marginBottom: 48, maxWidth: 720, marginInline: "auto" }}>
          <window.Eyebrow style={{ marginBottom: 18, color: "var(--orange)" }}>A look inside</window.Eyebrow>
          <h2 style={{ fontSize: "clamp(34px, 4.5vw, 60px)", lineHeight: 1.05, marginBottom: 16 }}>
            Your studio is <em>waiting for you.</em><br />
            Available soon.
          </h2>
          <p style={{ fontSize: 18, color: "var(--ink-light)" }}>
            We're not ready to show the full thing. But here's a glimpse of what's coming.
          </p>
        </div>
        <window.StudioPeek blur={5} caption="Pre-launch window opens April 27" />
      </div>
    </section>
  );
};

// ── REACTIONS (real screenshots — "genius" word keeps coming back) ─
window.Reactions = function Reactions() {
  // Real screenshots from DMs / messages (avatars pre-masked in source PNGs).
  const shots = [
    {
      src: "assets/reactions/reaction-2-story-reply-v2_final.png",
      platform: "Instagram DM",
      pull: "ANOTHER GENIUS IDEA",
      tilt: -1.6,
      ratio: "1206 / 805",
    },
    {
      src: "assets/reactions/reaction-1-story-reply-v2_final.png",
      platform: "Instagram · Story reply",
      pull: "This is genius.",
      tilt: 1.2,
      ratio: "655 / 732",
    },
    {
      src: "assets/reactions/reaction-3-whatsapp.png",
      platform: "WhatsApp",
      pull: "Where do I pay?",
      tilt: -0.8,
      ratio: "866 / 344",
    },
  ];

  return (
    <section className="scs-reactions-section" style={{
      padding: "120px 32px 140px", background: "var(--cream)",
      position: "relative", overflow: "hidden",
    }}>
      {/* warm bloom behind the headline */}
      <div style={{
        position: "absolute", inset: 0, pointerEvents: "none",
        background: "radial-gradient(ellipse 60% 40% at 50% 0%, hsla(12, 80%, 85%, 0.35), transparent 60%)",
      }} />

      <div style={{ position: "relative", maxWidth: 1200, margin: "0 auto" }}>
        <div style={{ textAlign: "center", marginBottom: 72, maxWidth: 760, marginInline: "auto" }}>
          <window.Eyebrow style={{ marginBottom: 18, color: "var(--orange)" }}>
            Early reactions · From people we've quietly shown
          </window.Eyebrow>
          <h2 style={{
            fontSize: "clamp(34px, 4.5vw, 58px)",
            lineHeight: 1.05, letterSpacing: "-0.025em", margin: 0,
          }}>
            They keep using<br />
            the same word: <em>genius.</em>
          </h2>
        </div>

        {/* Screenshot grid */}
        <div className="scs-reactions-grid" style={{
          display: "grid",
          gridTemplateColumns: "repeat(3, 1fr)",
          gap: 28,
          alignItems: "start",
        }}>
          {shots.map((s, i) => (
            <figure key={i} className="scs-reaction-figure scs-reveal" style={{
              margin: 0,
              background: "var(--white)",
              border: "1px solid var(--border)",
              borderRadius: 20,
              padding: "18px 18px 20px",
              boxShadow: "0 24px 60px -28px hsla(348, 40%, 25%, 0.25), var(--shadow-sm)",
              display: "flex", flexDirection: "column", gap: 14,
              "--scs-delay": `${i * 110}ms`,
              "--scs-tilt": `${s.tilt}deg`,
            }}>
              {/* The actual screenshot — contained inside a subtle frame */}
              <div style={{
                background: "hsl(0 0% 98%)",
                border: "1px solid var(--border)",
                borderRadius: 14,
                overflow: "hidden",
                aspectRatio: s.ratio,
                display: "flex", alignItems: "center", justifyContent: "center",
                position: "relative",
              }}>
                <img src={s.src} alt={`Reaction from ${s.platform}: ${s.pull}`} style={{
                  width: "100%", height: "100%",
                  objectFit: "contain",
                  objectPosition: "center",
                  display: "block",
                }} />
              </div>

              {/* Pull-quote under the screenshot — highlighter accent */}
              <div style={{
                fontFamily: "var(--font-emphasis)", fontStyle: "italic",
                fontSize: 22, lineHeight: 1.45, letterSpacing: "-0.01em",
                color: "var(--ink)", padding: "2px 4px 0",
              }}>
                "<span style={{
                  background: "var(--orange-light)",
                  padding: "0 4px",
                  borderRadius: 3,
                  boxDecorationBreak: "clone",
                  WebkitBoxDecorationBreak: "clone",
                }}>{s.pull}</span>"
              </div>
            </figure>
          ))}
        </div>

        {/* Wall of love — text-quote screenshots from beta users */}
        <div style={{
          marginTop: 96, paddingTop: 56,
          borderTop: "1px dashed var(--border)",
          textAlign: "center",
        }}>
          <window.Eyebrow style={{ marginBottom: 14, color: "var(--orange)" }}>
            From the people testing it
          </window.Eyebrow>
          <h3 style={{
            fontFamily: "var(--font-display)", fontWeight: 400,
            fontSize: "clamp(28px, 3.4vw, 42px)",
            lineHeight: 1.1, letterSpacing: "-0.02em",
            margin: "0 0 48px",
            color: "var(--ink)",
          }}>
            And in <em>their words.</em>
          </h3>
        </div>

        {(() => {
          // 60/40 alternating layout on a 5-col grid. Each row is a pair:
          // even pair → wide-left (span 3) + narrow-right (span 2);
          // odd pair → narrow-left + wide-right. With an odd count, the last
          // card becomes a full-width centerpiece (span 5).
          // Highlight colors rotate across the soft -3 palette.
          const quotes = [
            { src: "assets/reactions/quote-02-reel-planner-perfect.png",                  pull: "absolutely ON THE MONEY",                  tilt:  0.6, highlight: "var(--orange-light)" },
            { src: "assets/reactions/quote-07-better-than-my-claude.png",                 pull: "yours is better!",                          tilt: -0.8, highlight: "var(--pink-3)" },
            { src: "assets/reactions/quote-01-shocked-at-results.png",                    pull: "shocked at how good the results are",       tilt:  0.4, highlight: "var(--gold-3)" },
            { src: "assets/reactions/quote-06-tool-is-amazing.png",                       pull: "This tool is amazing!",                     tilt:  0.7, highlight: "var(--coral-3)" },
            { src: "assets/reactions/quote-05-soooo-good.png",                            pull: "This is SOOOO good!",                       tilt: -0.5, highlight: "var(--iris-3)" },
            { src: "assets/reactions/quote-04-newsletter-editor-relationship-opener.png", pull: "I absolutely love the newsletter editor",   tilt: -0.4, highlight: "var(--sage-3)" },
            { src: "assets/reactions/quote-08-setup-smooth.png",                          pull: "shifted me out of my brain blanking",       tilt:  0.5, highlight: "var(--ice-3)" },
            { src: "assets/reactions/quote-03-newsletter-sections.png",                   pull: "So much easier to keep track of",           tilt: -0.6, highlight: "var(--gold-3)" },
            { src: "assets/reactions/quote-09-really-love-it.png",                        pull: "I really love it",                          tilt:  0.3, highlight: "var(--pink-3)" },
          ];
          const COLS = 5;
          return (
            <div className="scs-quotes-grid" style={{
              display: "grid",
              gridTemplateColumns: `repeat(${COLS}, 1fr)`,
              gap: 22,
              alignItems: "start",
            }}>
              {quotes.map((q, i) => {
                const pairIdx = Math.floor(i / 2);
                const slot = i % 2;
                const isWide = pairIdx % 2 === 0 ? slot === 0 : slot === 1;
                const isOrphan = i === quotes.length - 1 && quotes.length % 2 === 1;
                // Orphan caps at 60% (3 of 5 cols) and centers in the row so
                // it never blows out to full width on responsive screens.
                const gridColumn = isOrphan
                  ? "2 / span 3"
                  : `span ${isWide ? 3 : 2}`;
                const fontSize = isOrphan ? 28 : (isWide ? 26 : 22);
                return (
                  <figure
                    key={i}
                    className="scs-reaction-figure scs-reveal"
                    style={{
                      margin: 0,
                      gridColumn,
                      background: "var(--white)",
                      border: "1px solid var(--border)",
                      borderRadius: 16,
                      padding: "22px 22px 24px",
                      boxShadow: "0 22px 50px -28px hsla(348, 40%, 25%, 0.22), var(--shadow-sm)",
                      display: "flex", flexDirection: "column", gap: 14,
                      "--scs-delay": `${i * 70}ms`,
                      "--scs-tilt": `${q.tilt}deg`,
                    }}
                  >
                    <div style={{
                      background: "hsl(0 0% 98%)",
                      border: "1px solid var(--border)",
                      borderRadius: 10,
                      overflow: "hidden",
                      padding: "8px 10px",
                    }}>
                      <img src={q.src} alt={`User testimonial: ${q.pull}`} style={{
                        width: "100%", height: "auto",
                        display: "block",
                      }} />
                    </div>
                    <div style={{
                      fontFamily: "var(--font-emphasis)", fontStyle: "italic",
                      fontSize,
                      lineHeight: 1.4, letterSpacing: "-0.01em",
                      color: "var(--ink)", padding: "0 4px",
                    }}>
                      "<span style={{
                        background: q.highlight,
                        padding: "0 4px",
                        borderRadius: 3,
                        boxDecorationBreak: "clone",
                        WebkitBoxDecorationBreak: "clone",
                      }}>{q.pull}</span>"
                    </div>
                  </figure>
                );
              })}
            </div>
          );
        })()}

      </div>
    </section>
  );
};

// ── FINAL CTA ───────────────────────────────────────────────
window.FinalCTA = function FinalCTA({ formRef }) {
  const c = window.useCountdown();
  const phase = window.SCS_PHASE || {};
  if (phase.mode === "post-cohort" || phase.mode === "expired") return null;

  return (
    <section ref={formRef} className="scs-cta-section" style={{
      padding: "140px 32px", background: "var(--ink-deep)",
      position: "relative", overflow: "hidden", color: "var(--white)",
    }}>
      <div style={{
        position: "absolute", inset: 0,
        background: "radial-gradient(ellipse 70% 70% at 50% 0%, hsl(12 72% 55% / 0.28), transparent 60%), radial-gradient(ellipse 50% 60% at 85% 100%, hsl(340 70% 55% / 0.16), transparent 60%)",
        pointerEvents: "none",
      }} />
      <div style={{ position: "relative", maxWidth: 760, margin: "0 auto", textAlign: "center" }}>

        {/* Countdown — urgency cue above the headline */}
        <div className="scs-cta-countdown" style={{
          display: "inline-flex", gap: 18, padding: "14px 24px",
          background: "hsl(348 40% 14%)", borderRadius: 999,
          border: "1px solid hsl(348 40% 22%)", marginBottom: 28,
          alignItems: "center",
        }}>
          <span className="scs-cta-countdown-label" style={{
            fontFamily: "var(--font-mono)", fontSize: 10, color: "var(--orange)",
            letterSpacing: "0.18em", textTransform: "uppercase",
          }}>Founding Cohort Ends In</span>
          {[["D", c.days], ["H", c.hours], ["M", c.mins], ["S", c.secs]].map(([l, n]) => (
            <div key={l} style={{ display: "flex", alignItems: "baseline", gap: 4 }}>
              <span style={{
                fontFamily: "var(--font-display)", fontSize: 20, color: "var(--white)",
                lineHeight: 1, letterSpacing: "-0.02em",
              }}>{String(n).padStart(2, "0")}</span>
              <span style={{
                fontFamily: "var(--font-mono)", fontSize: 10, color: "hsl(350 15% 62%)",
              }}>{l}</span>
            </div>
          ))}
        </div>

        <h2 style={{
          fontSize: "clamp(44px, 6vw, 80px)",
          color: "var(--white)", lineHeight: 1.02, marginBottom: 22,
          letterSpacing: "-0.03em",
        }}>
          Save $1,800<br /><em>by joining today!</em>
        </h2>
        <p style={{
          fontSize: 20, color: "hsl(350 15% 82%)", lineHeight: 1.55,
          maxWidth: 580, margin: "0 auto 36px",
        }}>
          Join the first cohort.
          <br />
          Snag the best monthly founding rate.
          <br />
          <em style={{ fontSize: "1.08em" }}>Cancel your access anytime.</em>
        </p>

        <window.BuyButton variant="onDark" size="xl">
          Reserve my seat →
        </window.BuyButton>
      </div>
    </section>
  );
};

// ── FOOTER (phase-aware) ────────────────────────────────────
// Founding phase keeps the slim single-row footer (the page itself
// is heavy with conversion content; footer doesn't need to repeat).
// Post-cohort uses a richer multi-column footer with a final CTA
// block. Levers in play:
//   - Clear trial economics: closing CTA restates "$0 today, card
//     required" so the commitment is explicit.
//   - Multiple paths to pricing: a user who scrolled past #pricing
//     gets it back as a footer link AND as a CTA block, so finding
//     the conversion surface is never a hunt.
//   - Authority + Liking: founders' names on a real page get a
//     dedicated column, not a one-liner. Solo creator audiences
//     respond to the "built by people like me" cue.
window.SCSFooter = function SCSFooter() {
  const phase = window.SCS_PHASE || {};
  if (phase.mode === "post-cohort") {
    return <window.PostCohortFooter />;
  }
  return (
    <footer style={{
      padding: "40px 32px", background: "var(--ink-deep)",
      borderTop: "1px solid hsl(348 40% 18%)",
      color: "hsl(350 15% 60%)",
    }}>
      <div className="scs-footer-row" style={{
        maxWidth: 1200, margin: "0 auto",
        display: "flex", justifyContent: "space-between", alignItems: "center",
        flexWrap: "wrap", gap: 16,
      }}>
        <img src="assets/logos/SoloContentStudio_Logo.svg" alt="Solo Content Studio"
          style={{ height: 22, width: "auto" }} />
        <div style={{
          fontFamily: "var(--font-mono)", fontSize: 11,
          letterSpacing: "0.12em", textTransform: "uppercase",
        }}>
          solocontent.studio · Built by Caroline &amp; Jason Zook · © 2026
        </div>
      </div>
    </footer>
  );
};

window.PostCohortFooter = function PostCohortFooter() {
  const signupHref = window.SCS_SIGNUP_HREF || "/signup";
  return (
    <footer style={{
      padding: "0 0 40px",
      background: "var(--ink-deep)",
      color: "hsl(350 15% 70%)",
    }}>
      <style>{`
        .scs-footer-pc-cta {
          padding: 84px 32px 72px;
          border-bottom: 1px solid hsl(348 40% 18%);
          text-align: center;
        }
        .scs-footer-pc-cta h3 {
          font-family: var(--font-display);
          font-weight: 400;
          font-size: clamp(28px, 4vw, 38px);
          line-height: 1.1;
          letter-spacing: -.02em;
          color: hsl(0 0% 100%);
          margin: 0 0 10px;
        }
        .scs-footer-pc-cta p {
          font-family: var(--font-emphasis);
          font-style: italic;
          font-size: 16px;
          color: hsl(350 15% 78%);
          margin: 0 0 24px;
        }
        .scs-footer-pc-cta-row {
          display: inline-flex;
          align-items: center;
          gap: 10px;
          flex-wrap: wrap;
          justify-content: center;
        }
        .scs-footer-pc-cta-primary,
        .scs-footer-pc-cta-primary:link,
        .scs-footer-pc-cta-primary:visited {
          display: inline-flex;
          align-items: center;
          gap: 6px;
          padding: 14px 24px;
          border-radius: 12px;
          background: var(--orange);
          color: hsl(0 0% 100%);
          font-family: var(--font-body);
          font-size: 15px;
          font-weight: 600;
          text-decoration: none;
          transition: transform 0.1s ease, box-shadow 0.2s ease, background 0.15s ease;
        }
        .scs-footer-pc-cta-primary:hover,
        .scs-footer-pc-cta-primary:focus-visible {
          color: hsl(0 0% 100%);
          background: hsl(12 78% 50%);
          transform: translateY(-1px);
          box-shadow: 0 8px 24px hsl(12 72% 55% / 0.35);
        }
        .scs-footer-pc-cta-secondary,
        .scs-footer-pc-cta-secondary:link,
        .scs-footer-pc-cta-secondary:visited {
          display: inline-flex;
          align-items: center;
          gap: 6px;
          padding: 14px 22px;
          border-radius: 12px;
          background: transparent;
          color: hsl(350 15% 88%);
          border: 1px solid hsl(348 40% 38%);
          font-family: var(--font-body);
          font-size: 15px;
          font-weight: 500;
          text-decoration: none;
          transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
          cursor: pointer;
        }
        .scs-footer-pc-cta-secondary:hover,
        .scs-footer-pc-cta-secondary:focus-visible {
          background: hsl(348 40% 22%);
          border-color: hsl(348 40% 55%);
          color: hsl(0 0% 100%);
        }

        .scs-footer-pc-grid {
          max-width: 1200px;
          margin: 0 auto;
          padding: 48px 32px 32px;
          display: grid;
          grid-template-columns: 1.4fr 1fr 1fr 1fr;
          gap: 40px;
        }
        @media (max-width: 880px) {
          .scs-footer-pc-grid {
            grid-template-columns: 1fr 1fr;
            gap: 36px 24px;
          }
        }
        @media (max-width: 520px) {
          .scs-footer-pc-grid { grid-template-columns: 1fr; }
        }

        .scs-footer-pc-brand img {
          height: 24px;
          width: auto;
          margin-bottom: 14px;
          opacity: 0.95;
        }
        .scs-footer-pc-brand p {
          font-family: var(--font-body);
          font-size: 14px;
          line-height: 1.55;
          color: hsl(350 15% 72%);
          margin: 0;
          max-width: 320px;
        }

        .scs-footer-pc-col h4 {
          font-family: var(--font-mono);
          font-size: 11px;
          font-weight: 700;
          letter-spacing: 0.16em;
          text-transform: uppercase;
          color: hsl(350 15% 60%);
          margin: 0 0 16px;
        }
        .scs-footer-pc-col ul {
          list-style: none;
          padding: 0;
          margin: 0;
          display: flex;
          flex-direction: column;
          gap: 10px;
        }
        .scs-footer-pc-col a {
          font-family: var(--font-body);
          font-size: 14px;
          color: hsl(350 15% 82%);
          text-decoration: none;
          transition: color 0.15s ease;
        }
        .scs-footer-pc-col a:hover { color: var(--orange); }

        .scs-footer-pc-base {
          max-width: 1200px;
          margin: 0 auto;
          padding: 24px 32px 0;
          border-top: 1px solid hsl(348 40% 18%);
          display: flex;
          justify-content: space-between;
          align-items: center;
          flex-wrap: wrap;
          gap: 12px;
          font-family: var(--font-mono);
          font-size: 11px;
          letter-spacing: 0.12em;
          text-transform: uppercase;
          color: hsl(350 15% 55%);
        }
        .scs-footer-pc-base a {
          color: hsl(350 15% 70%);
          text-decoration: none;
          margin-left: 16px;
        }
        .scs-footer-pc-base a:hover { color: hsl(0 0% 100%); }
        @media (max-width: 640px) {
          .scs-footer-pc-cta { padding: 68px 24px 60px; }
        }
      `}</style>

      {/* Closing CTA block. Lands the unconverted scroller on the
          email-first setup flow. */}
      <div className="scs-footer-pc-cta">
        <h3>Ready to start the trial?</h3>
        <p>$0 today, card required, 100 credits, then $99/mo unless canceled.</p>
        <div className="scs-footer-pc-cta-row">
          <a className="scs-footer-pc-cta-primary" href={signupHref}>Start trial →</a>
          <a
            className="scs-footer-pc-cta-secondary"
            href="#pricing"
            onClick={(e) => {
              const el = document.getElementById("pricing");
              if (!el) return;
              e.preventDefault();
              el.scrollIntoView({ behavior: "smooth", block: "start" });
              if (window.history && window.history.replaceState) {
                // Preserve the document path (the page has <base href="/pre-launch/" />,
                // so a bare "#pricing" would resolve to "/pre-launch/#pricing" and
                // change the URL bar away from "/").
                window.history.replaceState(
                  null,
                  "",
                  `${window.location.pathname}${window.location.search}#pricing`,
                );
              }
            }}
          >
            See pricing
          </a>
        </div>
      </div>

      {/* Multi-column nav (brand blurb + Product / Account / Company columns)
          is intentionally hidden per request. Left in source, commented out,
          so it can be restored by removing the comment wrapper below. */}
      {/*
      <div className="scs-footer-pc-grid">
        <div className="scs-footer-pc-brand">
          <img src="assets/logos/SoloContentStudio_Logo.svg" alt="Solo Content Studio" />
          <p>
            A one-person content studio that produces like a ten-person team.
            Ten trained AI specialists, all in your voice, running on a schedule you set.
          </p>
        </div>

        <div className="scs-footer-pc-col">
          <h4>Product</h4>
          <ul>
            <li><a href="#demo-video">Demo</a></li>
            <li><a href="#pricing">Pricing</a></li>
            <li><a href={signupHref}>Start trial</a></li>
            <li><a href="/login">Sign in</a></li>
          </ul>
        </div>

        <div className="scs-footer-pc-col">
          <h4>Account</h4>
          <ul>
            <li><a href="/studio/account/billing">Manage billing</a></li>
            <li><a href="/help">Help center</a></li>
            <li><a href="/help/contact">Contact us</a></li>
            <li><a href="/status">Status</a></li>
          </ul>
        </div>

        <div className="scs-footer-pc-col">
          <h4>Company</h4>
          <ul>
            <li><a href="/privacy">Privacy</a></li>
            <li><a href="/terms">Terms</a></li>
            <li><a href="https://caroline.zook.studio" target="_blank" rel="noopener noreferrer">About Caroline</a></li>
            <li><a href="https://jason.zook.studio" target="_blank" rel="noopener noreferrer">About Jason</a></li>
          </ul>
        </div>
      </div>
      */}

      <div className="scs-footer-pc-base">
        <span>solocontent.studio · Built by Caroline &amp; Jason Zook · © 2026</span>
        <span style={{ display: "inline-flex", gap: 16 }}>
          <a href="/privacy">Privacy</a>
          <a href="/terms">Terms</a>
        </span>
      </div>
    </footer>
  );
};
