(function(){
/* global React */
// CCC — "First Monday." campaign.
// Companion campaign to the launch kit. Different rhetorical move:
// recovery as a WEEKLY RITUAL, not an announcement. Eight Mondays, set
// as a counted, numbered series. Artifacts (day-timer, notebook, phone,
// paperback) used at feature scale. Greenhouse photograph used full-bleed.
// One billboard format (3:1) introduced as a new surface.

const C = {
  inkwell: "#1C492C",
  vellum: "#F4F0C2",
  sage: "#AFCC75",
  oxblood: "#4B781C",
  charcoal: "#22382A"
};

const FONT_DISPLAY = `"Frank Ruhl Libre", "Tiempos Headline", Georgia, serif`;
const FONT_BODY = `"Inter", "Söhne", "GT America", -apple-system, sans-serif`;
const FONT_MONO = `"JetBrains Mono", ui-monospace, "SF Mono", monospace`;

// ─── Tally ────────────────────────────────────────────────────────────────
function Tally({ size = 24, color = "currentColor", strokeWidth = 2.4 }) {
  const w = size * 1.6;
  return (
    <svg width={w} height={size} viewBox="0 0 48 30" fill="none" aria-hidden="true" style={{ display: "block" }}>
      <path d="M8 3.2 L7.2 27.4" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" />
      <path d="M19 2.6 L19.4 27.8" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" />
      <path d="M30 3.6 L29.6 27.2" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" />
    </svg>);

}

function Mono({ children, color = C.charcoal, size = 10, style = {} }) {
  return (
    <div style={{
      fontFamily: FONT_MONO, fontSize: size, letterSpacing: "0.14em",
      textTransform: "uppercase", color, ...style
    }}>{children}</div>);

}

function Rule({ color = "currentColor", thickness = 1, style = {} }) {
  return <div style={{ height: thickness, background: color, width: "100%", ...style }} />;
}

// Wavy oxblood underline — reusable; sits absolutely positioned beneath text.
function WavyUnder({ color = C.oxblood, thickness = 4, bottom = -8 }) {
  return (
    <svg width="100%" height={thickness * 3} viewBox="0 0 600 12" preserveAspectRatio="none"
    style={{ position: "absolute", left: 0, bottom, pointerEvents: "none" }}>
      <path d="M2 6 Q 150 1, 300 6 T 598 6"
      stroke={color} strokeWidth={thickness} fill="none" strokeLinecap="round" />
    </svg>);

}

// ─────────────────────────────────────────────────────────────────────────
// 1. CAMPAIGN ANCHOR — "First Monday." manifesto poster (8.5×11, Vellum)
// ─────────────────────────────────────────────────────────────────────────
// Shared scannable QR — implemented in lib-brand-system.jsx (CCC_QRCode).
// Renders the website QR on print pieces; quiet placeholder if missing.
function QRCode(props) {
  const Impl = window.CCC_QRCode;
  if (!Impl) return <div style={{ width: props.size || 100, height: props.size || 100, background: props.bg || C.vellum }} />;
  return <Impl {...props} />;
}

function Manifesto() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "60px 64px 56px",
      display: "flex", flexDirection: "column"
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <div style={{ display: "flex", alignItems: "center", gap: 12 }}>
          <Tally size={14} color={C.inkwell} strokeWidth={2.2} />
          <Mono color={C.inkwell} size={10}>Chances. Choices. Change.</Mono>
        </div>
        <Mono color={C.oxblood} size={10}>Manifesto · 2026</Mono>
      </div>
      <Rule color={`${C.inkwell}55`} style={{ marginTop: 14 }} />

      <div style={{ flex: 1, display: "flex", flexDirection: "column", justifyContent: "center", paddingTop: 24 }}>
        <h1 style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
          fontSize: 138, lineHeight: 0.88, letterSpacing: "-0.04em",
          color: C.inkwell
        }}>
          First<br />
          <span style={{ position: "relative", display: "inline-block" }}>
            Monday.
            <svg width="100%" height="14" viewBox="0 0 600 14" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 7 Q 150 2, 300 7 T 598 7" stroke={C.oxblood} strokeWidth="5" fill="none" strokeLinecap="round" />
            </svg>
          </span>
        </h1>

        <div style={{
          marginTop: 38, display: "grid", gridTemplateColumns: "1fr 1fr", gap: 36, alignItems: "flex-start"
        }}>
          <div style={{ fontFamily: FONT_DISPLAY, fontStyle: "italic", fontSize: 22, lineHeight: 1.45, color: C.charcoal }}>
            Recovery is not a story arc.
            <br />It's a Monday.
            <br />And then another Monday.
            <br />And then another.
          </div>
          <div style={{ fontFamily: FONT_BODY, fontSize: 13, lineHeight: 1.65, color: C.charcoal, maxWidth: 360 }}>
            Eight Mondays is what we offer. Not a reinvention, not a program with a finish line — a series of Monday evenings. You show up. You write the week down. You cross things off. You come back the next Monday.
            


            <br /><br />
            That's the work.
          </div>
        </div>
      </div>

      <div>
        <Rule color={`${C.inkwell}55`} />
        <div style={{ display: "grid", gridTemplateColumns: "auto 1fr auto", gap: 24, paddingTop: 16, alignItems: "center" }}>
          <Mono color={C.inkwell} size={10}>Cohort 01 begins June 1</Mono>
          <div style={{ display: "flex", justifyContent: "center" }}>
            <Tally size={20} color={C.inkwell} strokeWidth={2.2} />
          </div>
          <div style={{ display: "flex", alignItems: "center", gap: 18 }}>
            <Mono color={C.inkwell} size={10}>cccrecovery.ca · (289) 207-2617</Mono>
            <QRCode value="https://cccrecovery.ca" size={92} fg={C.inkwell} bg={C.vellum} quiet={2} />
          </div>
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 2. GREENHOUSE — full-bleed Debra photograph, 8.5×11
// ─────────────────────────────────────────────────────────────────────────
function GreenhousePoster() {
  return (
    <div style={{
      width: "100%", height: "100%", position: "relative", overflow: "hidden",
      background: C.charcoal, color: C.vellum, fontFamily: FONT_BODY
    }}>
      <img src="launch-assets/debra-greenhouse.jpg" alt=""
      style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", objectPosition: "center 30%" }} />
      {/* bottom-anchored gradient for legibility */}
      <div style={{
        position: "absolute", left: 0, right: 0, bottom: 0, height: "55%",
        background: `linear-gradient(180deg, transparent 0%, rgba(28,73,44,0.05) 25%, rgba(28,73,44,0.78) 75%, ${C.inkwell} 100%)`
      }} />

      {/* top-left tally + tag — pinned on a small inkwell chip so they stay legible against the photo */}
      <div style={{
        position: "absolute", top: 32, left: 32,
        display: "inline-flex", alignItems: "center", gap: 12,
        background: `${C.inkwell}cc`, backdropFilter: "blur(2px)",
        padding: "8px 14px", border: `1px solid ${C.vellum}33`, opacity: "0.6"
      }}>
        <Tally size={16} color={C.vellum} strokeWidth={2.4} />
        <Mono color={C.vellum} size={10}>Debra King · founder</Mono>
      </div>

      {/* anchored bottom-left headline */}
      <div style={{ position: "absolute", left: 40, right: 40, bottom: 44 }}>
        <Mono color={C.vellum} size={11} style={{ marginBottom: 18, opacity: 0.95 }}>
          A peer-led recovery program · Toronto
        </Mono>
        <h2 style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
          fontSize: 80, lineHeight: 0.94, letterSpacing: "-0.028em", color: C.vellum
        }}>
          I've{" "}
          <span style={{ position: "relative", display: "inline-block" }}>
            been there
            <svg width="100%" height="10" viewBox="0 0 360 10" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 5 Q 90 1, 180 5 T 358 5" stroke={C.oxblood} strokeWidth="4" fill="none" strokeLinecap="round" />
            </svg>
          </span>
          .<br />
          That's the<br />credential.
        </h2>
        <div style={{
          marginTop: 22,
          display: "flex", justifyContent: "space-between", alignItems: "flex-end",
          borderTop: `1px solid ${C.vellum}aa`, paddingTop: 14
        }}>
          <Mono color={C.vellum} size={10}>cccrecovery.ca · (289) 207-2617</Mono>
          <div style={{ display: "flex", alignItems: "flex-end", gap: 18 }}>
            <Mono color={C.vellum} size={10} style={{ opacity: 0.95 }}>Blue skies and green lights.</Mono>
            <div style={{ background: C.vellum, padding: 7 }}>
              <QRCode value="https://cccrecovery.ca" size={86} fg={C.inkwell} bg={C.vellum} quiet={2} />
            </div>
          </div>
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 3. EIGHT-WEEK GRID — IG square, the cohort as a counted series
// ─────────────────────────────────────────────────────────────────────────
function EightWeekGrid() {
  const weeks = [
  ["01", "Show up."],
  ["02", "Tell the truth."],
  ["03", "Make the call."],
  ["04", "Write it down."],
  ["05", "Sit with it."],
  ["06", "Try again."],
  ["07", "Forgive a Monday."],
  ["08", "Start week nine."]];

  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "60px 56px",
      display: "flex", flexDirection: "column"
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <Mono color={C.oxblood} size={11}>Eight Mondays</Mono>
        <Tally size={18} color={C.inkwell} strokeWidth={2.2} />
      </div>

      <div style={{
        flex: 1, marginTop: 28,
        display: "grid", gridTemplateColumns: "1fr 1fr", gridTemplateRows: "repeat(4, 1fr)",
        gap: 0
      }}>
        {weeks.map(([n, line], i) => {
          const lastRow = i >= 6;
          const rightCol = i % 2 === 1;
          return (
            <div key={n} style={{
              padding: "16px 18px",
              borderRight: !rightCol ? `1px solid ${C.inkwell}33` : "none",
              borderBottom: !lastRow ? `1px solid ${C.inkwell}33` : "none",
              display: "flex", flexDirection: "column", justifyContent: "space-between"
            }}>
              <Mono color={`${C.inkwell}99`} size={10}>Week {n}</Mono>
              <div style={{
                fontFamily: FONT_DISPLAY, fontWeight: 500,
                fontSize: 46, lineHeight: 0.98, letterSpacing: "-0.022em",
                color: C.inkwell, textWrap: "balance"
              }}>
                {line}
              </div>
            </div>);

        })}
      </div>

      <div style={{ marginTop: 24, display: "flex", justifyContent: "space-between", alignItems: "flex-end" }}>
        <Mono color={C.inkwell} size={11}>Cohort 01 · June 1</Mono>
        <Mono color={`${C.inkwell}88`} size={11}>cccrecovery.ca</Mono>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 4. ARTIFACT POSTER — DAY-TIMER  (8.5×11, Vellum)
//    The day-timer artifact at FEATURE scale, with one-line caption.
// ─────────────────────────────────────────────────────────────────────────
function ArtifactDayTimer() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "56px 60px 50px",
      display: "flex", flexDirection: "column"
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <Mono color={C.inkwell} size={10}>Artifact No. 01</Mono>
        <Mono color={C.oxblood} size={10}>The week, written down</Mono>
      </div>
      <Rule color={`${C.inkwell}55`} style={{ marginTop: 12 }} />

      <div style={{ flex: 1, position: "relative", marginTop: 8 }}>
        <img src="launch-assets/day-timer.png" alt=""
        style={{
          position: "absolute", inset: 0,
          width: "100%", height: "100%",
          objectFit: "contain", objectPosition: "center"
        }} />
      </div>

      <div style={{ marginTop: 14, display: "grid", gridTemplateColumns: "1fr auto", gap: 24, alignItems: "flex-end" }}>
        <div>
          <h2 style={{
            fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
            fontSize: 58, lineHeight: 0.96, letterSpacing: "-0.022em", color: C.inkwell
          }}>
            Cross{" "}
            <span style={{ position: "relative", display: "inline-block" }}>
              one thing
              <svg width="100%" height="10" viewBox="0 0 320 10" preserveAspectRatio="none"
              style={{ position: "absolute", left: 0, bottom: -2 }}>
                <path d="M2 5 Q 80 1, 160 5 T 318 5" stroke={C.oxblood} strokeWidth="3.5" fill="none" strokeLinecap="round" />
              </svg>
            </span>
            <br />off the list.
          </h2>
          <div style={{ marginTop: 14, fontFamily: FONT_DISPLAY, fontStyle: "italic", fontSize: 17, color: C.charcoal, lineHeight: 1.45, maxWidth: 420 }}>
            The vet appointment counts. So does the call you didn't want to make.
          </div>
        </div>
        <div style={{ display: "flex", alignItems: "flex-end", gap: 20 }}>
          <div style={{ textAlign: "right" }}>
            <Tally size={18} color={C.inkwell} strokeWidth={2.2} style={{ marginLeft: "auto" }} />
            <div style={{ marginTop: 10, fontFamily: FONT_DISPLAY, fontSize: 15, color: C.inkwell, letterSpacing: "-0.005em", lineHeight: 1.3 }}>
              cccrecovery.ca<br />(289) 207-2617
            </div>
          </div>
          <QRCode value="https://cccrecovery.ca" size={96} fg={C.inkwell} bg={C.vellum} quiet={2} />
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 5. ARTIFACT POSTER — FEAR NOTEBOOK  (IG square)
// ─────────────────────────────────────────────────────────────────────────
function ArtifactNotebook() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.inkwell, color: C.vellum,
      fontFamily: FONT_BODY, padding: "56px 56px",
      display: "grid", gridTemplateRows: "auto 1fr auto", gap: 12
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <Mono color={C.sage} size={11}>Artifact No. 02</Mono>
        <Tally size={20} color={C.vellum} strokeWidth={2.4} />
      </div>

      <div style={{ position: "relative", display: "grid", gridTemplateColumns: "0.9fr 1.1fr", gap: 28, alignItems: "center" }}>
        <img src="launch-assets/fear-notebook.png" alt=""
        style={{
          width: "100%", height: "100%", maxHeight: "100%",
          objectFit: "contain", objectPosition: "center",
          filter: "invert(1) brightness(1.05) contrast(1.05)"
        }} />
        <div>
          <h2 style={{
            fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
            fontSize: 96, lineHeight: 0.92, letterSpacing: "-0.034em", color: C.vellum
          }}>
            Make<br />it a{" "}
            <span style={{ position: "relative", display: "inline-block" }}>
              list.
              <svg width="100%" height="12" viewBox="0 0 160 12" preserveAspectRatio="none"
              style={{ position: "absolute", left: 0, bottom: -2 }}>
                <path d="M2 6 Q 40 1, 80 6 T 158 6" stroke={C.oxblood} strokeWidth="4.5" fill="none" strokeLinecap="round" />
              </svg>
            </span>
          </h2>
          <div style={{
            marginTop: 18,
            fontFamily: FONT_DISPLAY, fontStyle: "italic", fontSize: 22, lineHeight: 1.45, color: `${C.vellum}cc`
          }}>
            Fear shrinks when you check the boxes.
          </div>
        </div>
      </div>

      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "flex-end" }}>
        <Mono color={`${C.vellum}aa`} size={11}>F.E.A.R. — and what to do with it</Mono>
        <Mono color={C.vellum} size={11}>cccrecovery.ca</Mono>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 6. PHONE-CALL SQUARE — typographic representation of a voicemail
// ─────────────────────────────────────────────────────────────────────────
function VoicemailSquare() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "60px 60px",
      position: "relative", overflow: "hidden",
      display: "flex", flexDirection: "column", justifyContent: "space-between"
    }}>
      {/* faint phone-and-coffee artifact, sitting behind */}
      <img src="launch-assets/phone-coffee.png" alt=""
      style={{
        position: "absolute", right: -60, bottom: -40,
        width: "65%", opacity: 0.18, pointerEvents: "none"
      }} />

      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", position: "relative" }}>
        <Tally size={20} color={C.inkwell} strokeWidth={2.4} />
        <Mono color={C.oxblood} size={11}>The phone call</Mono>
      </div>

      <div style={{ position: "relative" }}>
        <Mono color={`${C.inkwell}99`} size={11} style={{ marginBottom: 14 }}>
          ▍ A voicemail you don't have to leave
        </Mono>
        <div style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500,
          fontSize: 96, lineHeight: 0.94, letterSpacing: "-0.032em", color: C.inkwell
        }}>
          Hi.<br />It's{" "}
          <span style={{ position: "relative", display: "inline-block" }}>
            Monday.
            <svg width="100%" height="12" viewBox="0 0 280 12" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 6 Q 70 1, 140 6 T 278 6" stroke={C.oxblood} strokeWidth="4.5" fill="none" strokeLinecap="round" />
            </svg>
          </span>
          <br />I'm calling.
        </div>
        <div style={{
          marginTop: 22,
          fontFamily: FONT_DISPLAY, fontStyle: "italic", fontSize: 22, lineHeight: 1.45, color: C.charcoal
        }}>
          Three sentences. That's enough.
        </div>
      </div>

      <div style={{ position: "relative", display: "flex", justifyContent: "space-between", alignItems: "flex-end" }}>
        <Mono color={C.inkwell} size={11}>(289) 207-2617</Mono>
        <Mono color={`${C.inkwell}88`} size={11}>cccrecovery.ca</Mono>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 7. BILLBOARD — 3:1 horizontal (transit / outdoor)
// ─────────────────────────────────────────────────────────────────────────
function Billboard() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.inkwell, color: C.vellum,
      fontFamily: FONT_BODY, padding: "44px 60px",
      display: "grid", gridTemplateColumns: "1.4fr 1fr", gap: 40,
      alignItems: "stretch"
    }}>
      {/* LEFT — monumental headline */}
      <div style={{ display: "flex", flexDirection: "column", justifyContent: "space-between" }}>
        <Mono color={C.sage} size={12} style={{ letterSpacing: "0.22em" }}>
          A peer-led recovery program · Toronto
        </Mono>
        <h1 style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
          fontSize: 168, lineHeight: 0.86, letterSpacing: "-0.038em", color: C.vellum
        }}>
          Eight{" "}
          <span style={{ position: "relative", display: "inline-block" }}>
            Mondays.
            <svg width="100%" height="12" viewBox="0 0 600 12" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 6 Q 150 1, 300 6 T 598 6" stroke={C.oxblood} strokeWidth="5" fill="none" strokeLinecap="round" />
            </svg>
          </span>
        </h1>
        <div style={{ display: "flex", alignItems: "center", gap: 14 }}>
          <Tally size={22} color={C.vellum} strokeWidth={2.4} />
          <Mono color={`${C.vellum}cc`} size={12}>That's the whole program.</Mono>
        </div>
      </div>

      {/* RIGHT — meta block */}
      <div style={{
        borderLeft: `1px solid ${C.vellum}55`, paddingLeft: 36,
        display: "flex", flexDirection: "column", justifyContent: "space-between"
      }}>
        <div>
          <Mono color={`${C.vellum}88`} size={10} style={{ marginBottom: 8 }}>Cohort 01 begins</Mono>
          <div style={{ fontFamily: FONT_DISPLAY, fontSize: 78, lineHeight: 0.9, letterSpacing: "-0.028em", color: C.vellum }}>
            June 1.
          </div>
        </div>
        <div>
          <Mono color={`${C.vellum}88`} size={10} style={{ marginBottom: 6 }}>Tuition · Cohort 01 only</Mono>
          <div style={{ fontFamily: FONT_DISPLAY, fontSize: 32, color: C.vellum, lineHeight: 1.15 }}>
            $249 founders' rate
          </div>
          <div style={{ fontFamily: FONT_BODY, fontSize: 12, color: `${C.vellum}aa`, marginTop: 6, lineHeight: 1.5 }}>
            $499 after Cohort 01.<br />
            Sliding scale available — ask.
          </div>
        </div>
        <div style={{ display: "flex", alignItems: "flex-end", gap: 20 }}>
          <div style={{ flex: 1 }}>
            <Rule color={`${C.vellum}55`} />
            <div style={{ marginTop: 12, display: "flex", flexDirection: "column", gap: 6 }}>
              <Mono color={C.vellum} size={10}>cccrecovery.ca</Mono>
              <Mono color={`${C.vellum}aa`} size={10}>(289) 207-2617</Mono>
            </div>
          </div>
          <div style={{ background: C.vellum, padding: 8 }}>
            <QRCode value="https://cccrecovery.ca" size={92} fg={C.inkwell} bg={C.vellum} quiet={2} />
          </div>
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 8. STORY — "What we don't say" (1080×1920, Vellum)
//    A sentence-per-line manifesto, set as a vertical column. Voice-driven.
// ─────────────────────────────────────────────────────────────────────────
function StoryLitany() {
  const lines = [
  { type: "neg", text: "We don't say journey." },
  { type: "neg", text: "We don't say breakthrough." },
  { type: "neg", text: "We don't say wellness." },
  { type: "rule" },
  { type: "pos", text: "We say Monday." },
  { type: "pos", text: "We say phone call." },
  { type: "pos", text: "We say show up." },
  { type: "pos", text: "We say try again." }];

  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "70px 60px",
      display: "flex", flexDirection: "column"
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <Tally size={26} color={C.inkwell} strokeWidth={2.4} />
        <Mono color={C.oxblood} size={12}>The vocabulary, edited</Mono>
      </div>

      <div style={{ flex: 1, marginTop: 36, display: "flex", flexDirection: "column", justifyContent: "center", gap: 14 }}>
        {lines.map((l, i) => {
          if (l.type === "rule") {
            return <div key={i} style={{ height: 1, background: `${C.inkwell}55`, margin: "8px 0" }} />;
          }
          return (
            <div key={i} style={{
              fontFamily: FONT_DISPLAY,
              fontWeight: 500,
              fontStyle: l.type === "pos" ? "normal" : "normal",
              fontSize: l.type === "pos" ? 76 : 56,
              lineHeight: 1.0, letterSpacing: "-0.024em",
              color: l.type === "pos" ? C.inkwell : `${C.charcoal}99`,
              textDecoration: l.type === "neg" ? "line-through" : "none",
              textDecorationColor: l.type === "neg" ? `${C.oxblood}cc` : undefined,
              textDecorationThickness: l.type === "neg" ? 4 : undefined,
              textWrap: "balance"
            }}>
              {l.text}
            </div>);

        })}
      </div>

      <div>
        <Rule color={`${C.inkwell}55`} />
        <div style={{ marginTop: 16, display: "flex", justifyContent: "space-between", alignItems: "center" }}>
          <Mono color={C.inkwell} size={11}>Cohort 01 · June 1</Mono>
          <Mono color={`${C.inkwell}88`} size={11}>cccrecovery.ca</Mono>
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 9. STORY — Paperback artifact + "field guide" framing  (1080×1920)
// ─────────────────────────────────────────────────────────────────────────
function StoryFieldGuide() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "70px 60px",
      display: "flex", flexDirection: "column",
      position: "relative", overflow: "hidden"
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <div style={{ display: "flex", alignItems: "center", gap: 12 }}>
          <Tally size={16} color={C.inkwell} strokeWidth={2.4} />
          <Mono color={C.inkwell} size={11}>Chances. Choices. Change.</Mono>
        </div>
        <Mono color={C.oxblood} size={11}>The field guide</Mono>
      </div>

      <div style={{
        flex: 1, marginTop: 24, position: "relative",
        display: "flex", alignItems: "center", justifyContent: "center"
      }}>
        <div style={{ position: "relative", width: "82%", height: "100%" }}>
          <img src="launch-assets/paperback-line.png" alt=""
          style={{
            width: "100%", height: "100%",
            objectFit: "contain"
          }} />
          {/* Bold oxblood "FIELD GUIDE" label, centered to artboard, -42° tilt (counter-clockwise) */}
          <div style={{
            position: "absolute",
            left: "50%", top: "calc(50% - 28px)",
            transform: "translate(-50%, -50%) rotate(-30deg)",
            transformOrigin: "center center",
            background: "transparent",
            color: C.oxblood,
            padding: "7px 15px",
            fontFamily: FONT_DISPLAY, fontWeight: 700,
            fontSize: 22, lineHeight: 1, letterSpacing: "0.04em",
            textAlign: "center", whiteSpace: "nowrap"
          }}>
            FIELD GUIDE
          </div>
        </div>
      </div>

      <div style={{
        marginTop: 28, fontFamily: FONT_DISPLAY, fontStyle: "italic",
        fontSize: 34, lineHeight: 1.35, color: C.inkwell, maxWidth: 900
      }}>
        <span style={{ display: "inline-block", fontStyle: "italic", fontSize: "104px", fontWeight: 700, lineHeight: 1.05, letterSpacing: "-0.01em" }}>
          <span style={{ display: "block" }}>The Field Guide</span>
          <span style={{ display: "block" }}>
            for{" "}
            <span style={{ position: "relative", display: "inline-block" }}>
              staying sober
              <svg width="100%" height="14" viewBox="0 0 320 10" preserveAspectRatio="none"
              style={{ position: "absolute", left: 0, bottom: -10 }}>
                <path d="M2 5 Q 80 1, 160 5 T 318 5" stroke={C.oxblood} strokeWidth="3.5" fill="none" strokeLinecap="round" />
              </svg>
            </span>
          </span>
        </span>
        <br /><span style={{ display: "inline-block", marginTop: 28 }}>Eight chapters. One per Monday. Read it together, in an understanding room.</span>
      </div>

      <div style={{ marginTop: 26 }}>
        <Rule color={`${C.inkwell}55`} />
        <div style={{ marginTop: 14, display: "flex", justifyContent: "space-between" }}>
          <Mono color={C.inkwell} size={11}>cccrecovery.ca</Mono>
          <Mono color={`${C.inkwell}88`} size={11}>Cohort 01 · June 1</Mono>
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 10. INDEX CARD — landscape 1200×630, the campaign's table of contents
// ─────────────────────────────────────────────────────────────────────────
function IndexCard() {
  const rows = [
  ["I", "First Monday.", "the manifesto"],
  ["II", "I've been there.", "Debra's portrait"],
  ["III", "Eight Mondays.", "the cohort"],
  ["IV", "Cross one thing off.", "the day-timer"],
  ["V", "Make it a list.", "the F.E.A.R. notebook"],
  ["VI", "Hi. It's Monday.", "the phone call"],
  ["VII", "A field guide.", "the paperback"]];

  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "44px 56px",
      display: "grid", gridTemplateColumns: "1fr 1.6fr", gap: 44
    }}>
      <div style={{ display: "flex", flexDirection: "column", justifyContent: "space-between", borderRight: `1px solid ${C.inkwell}33`, paddingRight: 36 }}>
        <div style={{ display: "flex", alignItems: "center", gap: 12 }}>
          <Tally size={14} color={C.oxblood} strokeWidth={2.2} />
          <Mono color={C.oxblood} size={11}>Chances. Choices. Change.</Mono>
        </div>
        <div>
          <h2 style={{
            fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
            fontSize: 76, lineHeight: 0.9, letterSpacing: "-0.03em", color: C.inkwell
          }}>
            First<br />Monday.
          </h2>
          <Mono color={`${C.inkwell}88`} size={10} style={{ marginTop: 16 }}>
            Cohort 01 · begins June 1, 2026
          </Mono>
        </div>
        <Mono color={C.inkwell} size={10}>cccrecovery.ca</Mono>
      </div>

      <div style={{ display: "flex", flexDirection: "column", justifyContent: "center" }}>
        <Mono color={`${C.inkwell}88`} size={10} style={{ marginBottom: 14 }}>The seven moves</Mono>
        <div style={{ display: "flex", flexDirection: "column" }}>
          {rows.map(([n, head, sub], i) =>
          <div key={n} style={{
            display: "grid", gridTemplateColumns: "44px 1fr auto",
            alignItems: "baseline", gap: 18,
            padding: "9px 0",
            borderBottom: i < rows.length - 1 ? `1px solid ${C.inkwell}22` : "none"
          }}>
              <Mono color={C.oxblood} size={10}>{n}</Mono>
              <div style={{ fontFamily: FONT_DISPLAY, fontSize: 24, color: C.inkwell, lineHeight: 1.1, letterSpacing: "-0.012em" }}>
                {head}
              </div>
              <Mono color={`${C.inkwell}88`} size={9}>{sub}</Mono>
            </div>
          )}
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// CANVAS COMPOSITION
// ─────────────────────────────────────────────────────────────────────────
function App() {
  const { DesignCanvas, DCSection, DCArtboard } = window;
  return (
    <DesignCanvas>
      <DCSection id="anchor" title="Campaign anchor" subtitle="The thesis. Recovery as a weekly ritual, not a story arc.">
        <DCArtboard id="manifesto" label="01 — Manifesto poster · 8.5 × 11" width={850} height={1100}>
          <Manifesto />
        </DCArtboard>
        <DCArtboard id="index" label="02 — Index card · 1200 × 630" width={1200} height={630}>
          <IndexCard />
        </DCArtboard>
      </DCSection>

      <DCSection id="hero" title="Debra, in photograph" subtitle="The launch kit drew her. This campaign shows her.">
        <DCArtboard id="greenhouse" label="03 — Greenhouse poster · 8.5 × 11" width={850} height={1100}>
          <GreenhousePoster />
        </DCArtboard>
      </DCSection>

      <DCSection id="series" title="The cohort, counted" subtitle="Eight Mondays as a numbered series.">
        <DCArtboard id="eight-week" label="04 — Eight-week grid · 1080 × 1080" width={1080} height={1080}>
          <EightWeekGrid />
        </DCArtboard>
      </DCSection>

      <DCSection id="artifacts" title="Artifacts" subtitle="The objects of recovery, at feature scale.">
        <DCArtboard id="artifact-daytimer" label="05 — Day-timer poster · 8.5 × 11" width={850} height={1100}>
          <ArtifactDayTimer />
        </DCArtboard>
        <DCArtboard id="artifact-notebook" label="06 — F.E.A.R. notebook · 1080 × 1080" width={1080} height={1080}>
          <ArtifactNotebook />
        </DCArtboard>
        <DCArtboard id="voicemail" label="07 — Voicemail square · 1080 × 1080" width={1080} height={1080}>
          <VoicemailSquare />
        </DCArtboard>
      </DCSection>

      <DCSection id="story" title="Vertical story" subtitle="Sentence-per-line voice. The vocabulary, edited.">
        <DCArtboard id="story-litany" label="08 — Story · what we don't say" width={1080} height={1920}>
          <StoryLitany />
        </DCArtboard>
        <DCArtboard id="story-fieldguide" label="09 — Story · field guide" width={1080} height={1920}>
          <StoryFieldGuide />
        </DCArtboard>
      </DCSection>

      <DCSection id="outdoor" title="Outdoor" subtitle="3:1 transit / billboard. A new surface for the system.">
        <DCArtboard id="billboard" label="10 — Billboard · 1800 × 600" width={1800} height={600}>
          <Billboard />
        </DCArtboard>
      </DCSection>
    </DesignCanvas>);

}


// ─────────────────────────────────────────────────────────────────────────
// 11. BILLBOARD — EVERGREEN  (1800×600, Vellum)
//    Same dimensions as the cohort billboard; brand-anchor message,
//    no dates, no tuition. Use on transit signs / outdoor when no
//    cohort is in market — the wordmark, the promise, the contact.
// ─────────────────────────────────────────────────────────────────────────
function BillboardEvergreen() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "44px 60px",
      display: "grid", gridTemplateColumns: "1.5fr 1fr", gap: 44,
      alignItems: "stretch"
    }}>
      {/* LEFT — monumental headline */}
      <div style={{ display: "flex", flexDirection: "column", justifyContent: "space-between" }}>
        <Mono color={C.oxblood} size={12} style={{ letterSpacing: "0.22em" }}>
          A peer-led recovery program · Toronto
        </Mono>
        <h1 style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
          fontSize: 168, lineHeight: 0.86, letterSpacing: "-0.038em", color: C.inkwell
        }}>
          Recovery{" "}
          <span style={{ position: "relative", display: "inline-block" }}>
            is possible.
            <svg width="100%" height="12" viewBox="0 0 600 12" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 6 Q 150 1, 300 6 T 598 6" stroke={C.oxblood} strokeWidth="5" fill="none" strokeLinecap="round" />
            </svg>
          </span>
        </h1>
        <div style={{ display: "flex", alignItems: "center", gap: 14 }}>
          <Tally size={22} color={C.inkwell} strokeWidth={2.4} />
          <Mono color={C.inkwell} size={12}>Chances. Choices. Changes.</Mono>
        </div>
      </div>

      {/* RIGHT — meta block */}
      <div style={{
        borderLeft: `1px solid ${C.inkwell}55`, paddingLeft: 36,
        display: "flex", flexDirection: "column", justifyContent: "space-between"
      }}>
        <div>
          <div style={{
            fontFamily: FONT_DISPLAY, fontStyle: "italic", fontWeight: 400,
            fontSize: 64, lineHeight: 1.0, letterSpacing: "-0.022em",
            color: C.inkwell, position: "relative", display: "inline-block"
          }}>
            You're worth it.
            <svg width="100%" height="10" viewBox="0 0 480 10" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -6 }}>
              <path d="M2 5 Q 120 1, 240 5 T 478 5" stroke={C.oxblood} strokeWidth="3.5" fill="none" strokeLinecap="round" />
            </svg>
          </div>
          <div style={{
            marginTop: 28, fontFamily: FONT_BODY, fontSize: 14, lineHeight: 1.55,
            color: C.charcoal, maxWidth: 460
          }}>
            Eight Mondays. A small group. Honest conversation about the work of staying sober — led by Debra King, with lived experience and the language to match.
          </div>
        </div>
        <div style={{ display: "flex", alignItems: "flex-end", gap: 20 }}>
          <div style={{ flex: 1 }}>
            <Rule color={`${C.inkwell}55`} />
            <div style={{ marginTop: 12, display: "flex", flexDirection: "column", gap: 6 }}>
              <Mono color={C.inkwell} size={11}>cccrecovery.ca</Mono>
              <Mono color={C.inkwell} size={11}>(289) 207-2617</Mono>
            </div>
          </div>
          <QRCode value="https://cccrecovery.ca" size={92} fg={C.inkwell} bg={C.vellum} quiet={2} />
        </div>
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 12. CAR MAGNET — BUMPER STRIP  (1200×300, 4:1, Vellum)
//    Standard 12 × 3 in bumper magnet. Three columns: brand mark · message
//    · contact. Designed to read at speed from one car-length back.
// ─────────────────────────────────────────────────────────────────────────
function CarMagnetBumper() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.vellum, color: C.inkwell,
      fontFamily: FONT_BODY, padding: "26px 38px",
      display: "grid", gridTemplateColumns: "auto 1fr auto auto", gap: 32,
      alignItems: "center",
      border: `2px solid ${C.inkwell}`
    }}>
      {/* LEFT — brand mark */}
      <div style={{ display: "flex", flexDirection: "column", alignItems: "flex-start", gap: 12, borderRight: `1px solid ${C.inkwell}55`, paddingRight: 32, height: "100%", justifyContent: "center" }}>
        <Tally size={36} color={C.inkwell} strokeWidth={2.6} />
        <div style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500,
          fontSize: 22, lineHeight: 1.05, letterSpacing: "-0.018em",
          color: C.inkwell, whiteSpace: "nowrap"
        }}>
          Chances.<br />Choices.<br />Changes.
        </div>
      </div>

      {/* CENTER — message */}
      <div style={{ display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "flex-start", gap: 8, minWidth: 0 }}>
        <h1 style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500, margin: 0,
          fontSize: 78, lineHeight: 0.92, letterSpacing: "-0.034em", color: C.inkwell
        }}>
          Recovery<br />
          <span style={{ position: "relative", display: "inline-block" }}>
            is possible.
            <svg width="100%" height="9" viewBox="0 0 540 9" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -2 }}>
              <path d="M2 5 Q 135 1, 270 5 T 538 5" stroke={C.oxblood} strokeWidth="4" fill="none" strokeLinecap="round" />
            </svg>
          </span>
        </h1>
        <div style={{
          fontFamily: FONT_DISPLAY, fontStyle: "italic", fontWeight: 400,
          fontSize: 26, lineHeight: 1, letterSpacing: "-0.018em",
          color: C.charcoal, marginTop: 6
        }}>
          You're worth it.
        </div>
      </div>

      {/* RIGHT — contact */}
      <div style={{ borderLeft: `1px solid ${C.inkwell}55`, paddingLeft: 32, textAlign: "right", height: "100%", display: "flex", flexDirection: "column", justifyContent: "center", gap: 8 }}>
        <div style={{ fontFamily: FONT_DISPLAY, fontSize: 26, lineHeight: 1.1, color: C.inkwell, letterSpacing: "-0.01em" }}>
          cccrecovery.ca
        </div>
        <div style={{ fontFamily: FONT_DISPLAY, fontSize: 26, lineHeight: 1.1, color: C.inkwell, letterSpacing: "-0.01em" }}>
          (289) 207-2617
        </div>
        <Mono color={`${C.inkwell}aa`} size={9} style={{ marginTop: 4 }}>
          Peer-led · Toronto
        </Mono>
      </div>

      {/* FAR RIGHT — scannable QR */}
      <div style={{ borderLeft: `1px solid ${C.inkwell}55`, paddingLeft: 28, height: "100%", display: "flex", alignItems: "center" }}>
        <QRCode value="https://cccrecovery.ca" size={140} fg={C.inkwell} bg={C.vellum} quiet={2} />
      </div>
    </div>);

}

// ─────────────────────────────────────────────────────────────────────────
// 13. CAR MAGNET — SQUARE DOOR  (1200×1200, 12 × 12 in, Inkwell)
//    Larger door / tailgate magnet. Bold inkwell field with the wordmark
//    set monumentally — reads like a license-plate medallion. Evergreen.
// ─────────────────────────────────────────────────────────────────────────
function CarMagnetSquare() {
  return (
    <div style={{
      width: "100%", height: "100%", background: C.inkwell, color: C.vellum,
      fontFamily: FONT_BODY, padding: "60px 64px",
      display: "flex", flexDirection: "column", justifyContent: "space-between",
      border: `3px solid ${C.vellum}`,
      boxShadow: `inset 0 0 0 8px ${C.inkwell}, inset 0 0 0 10px ${C.vellum}33`
    }}>
      {/* TOP — tally + tagline */}
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center" }}>
        <Tally size={32} color={C.vellum} strokeWidth={2.6} />
        <Mono color={C.sage} size={13} style={{ letterSpacing: "0.22em" }}>
          Peer-led recovery · Toronto
        </Mono>
      </div>

      {/* CENTER — monumental wordmark */}
      <div style={{
        flex: 1, display: "flex", flexDirection: "column", justifyContent: "center", paddingTop: 12
      }}>
        <div style={{
          fontFamily: FONT_DISPLAY, fontWeight: 500,
          fontSize: 188, lineHeight: 0.92, letterSpacing: "-0.04em", color: C.vellum
        }}>
          Chances.<br />Choices.<br />
          <span style={{ position: "relative", display: "inline-block" }}>
            Changes.
            <svg width="100%" height="14" viewBox="0 0 600 14" preserveAspectRatio="none"
            style={{ position: "absolute", left: 0, bottom: -4 }}>
              <path d="M2 7 Q 150 2, 300 7 T 598 7" stroke={C.oxblood} strokeWidth="6" fill="none" strokeLinecap="round" />
            </svg>
          </span>
        </div>
        <div style={{
          marginTop: 32,
          fontFamily: FONT_DISPLAY, fontStyle: "italic", fontWeight: 400,
          fontSize: 44, lineHeight: 1.1, letterSpacing: "-0.018em", color: C.sage
        }}>
          Recovery is possible.<br />You're worth it.
        </div>
      </div>

      {/* BOTTOM — contact */}
      <div>
        <Rule color={`${C.vellum}66`} />
        <div style={{ marginTop: 16, display: "flex", justifyContent: "space-between", alignItems: "flex-end" }}>
          <div>
            <div style={{ fontFamily: FONT_DISPLAY, fontSize: 32, color: C.vellum, letterSpacing: "-0.005em" }}>
              cccrecovery.ca
            </div>
            <div style={{ fontFamily: FONT_DISPLAY, fontSize: 32, color: C.vellum, letterSpacing: "-0.005em", marginTop: 6 }}>
              (289) 207-2617
            </div>
          </div>
          <div style={{ background: C.vellum, padding: 10 }}>
            <QRCode value="https://cccrecovery.ca" size={130} fg={C.inkwell} bg={C.vellum} quiet={2} />
          </div>
        </div>
      </div>
    </div>);

}


Object.assign(window, {
  FM_Manifesto: typeof Manifesto !== 'undefined' ? Manifesto : null,
  FM_IndexCard: typeof IndexCard !== 'undefined' ? IndexCard : null,
  FM_GreenhousePoster: typeof GreenhousePoster !== 'undefined' ? GreenhousePoster : null,
  FM_EightWeekGrid: typeof EightWeekGrid !== 'undefined' ? EightWeekGrid : null,
  FM_ArtifactDayTimer: typeof ArtifactDayTimer !== 'undefined' ? ArtifactDayTimer : null,
  FM_ArtifactNotebook: typeof ArtifactNotebook !== 'undefined' ? ArtifactNotebook : null,
  FM_VoicemailSquare: typeof VoicemailSquare !== 'undefined' ? VoicemailSquare : null,
  FM_StoryLitany: typeof StoryLitany !== 'undefined' ? StoryLitany : null,
  FM_StoryFieldGuide: typeof StoryFieldGuide !== 'undefined' ? StoryFieldGuide : null,
  FM_Billboard: typeof Billboard !== 'undefined' ? Billboard : null,
  FM_BillboardEvergreen: typeof BillboardEvergreen !== 'undefined' ? BillboardEvergreen : null,
  FM_CarMagnetBumper: typeof CarMagnetBumper !== 'undefined' ? CarMagnetBumper : null,
  FM_CarMagnetSquare: typeof CarMagnetSquare !== 'undefined' ? CarMagnetSquare : null
});
})();