// Shared building blocks for the Opus landing page.
// All components are exposed via window assignment at the end of the file so
// other Babel-transformed scripts can use them.

const { useState, useEffect, useRef, useMemo } = React;

// ---------- Atomic ----------

function Rule({ className = "" }) {
  return <div className={`bb-ink-1 ${className}`} style={{ height: 0 }} />;
}

function TickRow({ inv = false }) {
  return <div className={inv ? "ticks-ink" : "ticks"} />;
}

function Micro({ children, className = "" }) {
  return <span className={`micro mono ${className}`}>{children}</span>;
}

// ---------- Marquee ----------

function Marquee({ items, speed = "normal", inv = false }) {
  const cls = speed === "slow" ? "slow" : speed === "fast" ? "fast" : "";
  const content = (
    <>
      {items.map((it, i) => (
        <span key={i} className="flex items-center" style={{ paddingInline: 28 }}>
          <span className="display" style={{ fontSize: 42, lineHeight: 1 }}>{it}</span>
          <span aria-hidden className="spin" style={{ marginLeft: 28, fontSize: 22 }}>✶</span>
        </span>
      ))}
    </>
  );
  return (
    <div className={`overflow-hidden ${inv ? "ink-bg" : ""}`} style={{ borderTop: "1px solid var(--ink)", borderBottom: "1px solid var(--ink)" }}>
      <div className={`marquee-track ${cls}`} style={{ paddingBlock: 14 }}>
        {content}{content}
      </div>
    </div>
  );
}

// ---------- Header ----------

function Header({ logoSrc, onJump }) {
  return (
    <header data-screen-label="header">
      {/* Top thin meta strip */}
      <div className="flex items-center justify-between header-meta-strip" style={{ padding: "10px 20px" }}>
        <Micro>Opus Branding Co. · Nottingham</Micro>
        <Micro>Brands · Products · Cinematic Video</Micro>
        <Micro>For Artists &amp; Ambitious Brands</Micro>
      </div>
      <Rule />
      {/* Logo + nav row */}
      <div
        className="grid items-center header-nav-row"
        style={{ gridTemplateColumns: "var(--header-grid)", padding: "var(--header-padding)" }}
      >
        <nav className="flex header-nav-links" style={{ gap: 28 }}>
          <a onClick={() => onJump("services")} className="nav-link caps mono" style={{ fontSize: 12, cursor: "pointer" }}>Services</a>
          <a onClick={() => onJump("fan")} className="nav-link caps mono" style={{ fontSize: 12, cursor: "pointer" }}>Fan Studio</a>
          <a onClick={() => onJump("contact")} className="nav-link caps mono" style={{ fontSize: 12, cursor: "pointer" }}>Contact</a>
        </nav>
        <a onClick={() => onJump("top")} className="header-logo-container" style={{ cursor: "pointer", display: "block" }}>
          <img src="assets/clear-opus-logo.png" alt="Opus Branding Co." style={{ display: "block", height: "var(--header-logo-height)", width: "auto", margin: "0 auto", maxHeight: "100%" }} />
        </a>
        <div className="flex items-center justify-end header-status-container" style={{ gap: 14 }}>
          <span className="caps mono" style={{ fontSize: 12, padding: "6px 10px", border: "1px solid var(--ink)" }}>
            <span className="spin" aria-hidden style={{ marginRight: 6 }}>●</span>
            Roster currently closed
          </span>
        </div>
      </div>
      <Rule />
    </header>
  );
}

// ---------- Hero ----------

function Hero() {
  // Simple, calm hero — headline on the left, contained reel preview on the right.
  return (
    <section data-screen-label="hero" style={{ position: "relative" }}>
      <div className="grid hero-grid" style={{ gridTemplateColumns: "var(--hero-grid)" }}>
        {/* Left: headline + tagline + CTA */}
        <div className="hero-left-col" style={{ borderRight: "var(--hero-border-r)", borderBottom: "var(--hero-border-b)", padding: "var(--hero-left-padding)", display: "flex", flexDirection: "var(--hero-left-direction)", justifyContent: "space-between", minHeight: "var(--hero-left-height)", overflow: "hidden" }}>
          <div>
            <h1 className="display clamp-h1" style={{ margin: 0 }}>
              <span style={{ display: "block" }}>Get branded</span>
              <span style={{ display: "block" }}>the right way.</span>
            </h1>
            <div style={{ marginTop: 18 }}>
              <span className="display hero-est" style={{ fontSize: "clamp(26px, 3.0vw, 52px)", color: "transparent", WebkitTextStrokeWidth: "1.25px" }}>
                Est. in the UK.
              </span>
            </div>
          </div>

          <div className="hero-cta-row" style={{ marginTop: 36, display: "grid", gridTemplateColumns: "var(--hero-cta-grid)", alignItems: "var(--hero-cta-align)", columnGap: 32, rowGap: 18 }}>
            <a
              href="https://calendar.app.google/mzarkF4Kd2Zag3As7"
              target="_blank"
              rel="noreferrer noopener"
              className="caps mono brut-btn"
              style={{ border: "1px solid var(--ink)", padding: "14px 18px", fontSize: 12, textDecoration: "none", whiteSpace: "nowrap", display: "inline-flex", alignItems: "center", gap: 10 }}
            >
              <span className="label">Book a 15-min intro <span className="arrow">→</span></span>
            </a>
            <p className="hero-desc" style={{ fontSize: 16, lineHeight: 1.45, margin: 0, maxWidth: 520, justifySelf: "var(--hero-desc-justify)", textAlign: "var(--hero-cta-desc-align)" }}>
              We build brands, engineer custom products, and direct cinematic video campaigns for creators and companies. <strong style={{ fontWeight: 800 }}>You focus on the vision.</strong>
            </p>
          </div>
        </div>

        {/* Right: contained reel preview. */}
        <div style={{ position: "relative", padding: 0, display: "flex", flexDirection: "column" }}>
          <div style={{ padding: "18px 22px", display: "flex", justifyContent: "space-between", borderBottom: "1px solid var(--ink)" }}>
            <Micro>The Reel</Micro>
            <Micro>Vimeo · 1125422744</Micro>
          </div>
          <div style={{ position: "relative", flex: 1, minHeight: 320, overflow: "hidden" }}>
            <iframe 
              src="https://player.vimeo.com/video/1125422744?background=1&autoplay=1&loop=1&byline=0&title=0&muted=1&controls=0"
              frameBorder="0"
              allow="autoplay; fullscreen"
              style={{
                position: "absolute",
                top: 0,
                left: 0,
                width: "100%",
                height: "100%",
                pointerEvents: "none",
                opacity: 1.0
              }}
              title="Cinematic Reel"
            />
            <span style={{ position: "absolute", top: 12, left: 14, width: 18, height: 18, borderTop: "1px solid var(--paper)", borderLeft: "1px solid var(--paper)", pointerEvents: "none" }} />
            <span style={{ position: "absolute", top: 12, right: 14, width: 18, height: 18, borderTop: "1px solid var(--paper)", borderRight: "1px solid var(--paper)", pointerEvents: "none" }} />
            <span style={{ position: "absolute", bottom: 12, left: 14, width: 18, height: 18, borderBottom: "1px solid var(--paper)", borderLeft: "1px solid var(--paper)", pointerEvents: "none" }} />
            <span style={{ position: "absolute", bottom: 12, right: 14, width: 18, height: 18, borderBottom: "1px solid var(--paper)", borderRight: "1px solid var(--paper)", pointerEvents: "none" }} />
          </div>
          <div style={{ padding: "14px 22px", display: "flex", justifyContent: "space-between", borderTop: "1px solid var(--ink)" }}>
            <Micro>i. Hook</Micro>
            <Micro>ii. Grid</Micro>
            <Micro>iii. Studio</Micro>
            <Micro>iv. Hub</Micro>
          </div>
        </div>
      </div>
      <Rule />
    </section>
  );
}

// ---------- Capabilities strip ----------

function CapStrip() {
  const items = [
    "Branding", "Identity", "Vinyl Pressing", "Cinematic Video", "Strategy",
    "Custom Apparel", "Campaigns", "Content Studio", "Fan Subs", "Global Import",
  ];
  return (
    <div className="grid bb-ink-1 cap-strip" style={{ gridTemplateColumns: "var(--cap-strip-grid)" }}>
      {items.map((it, i) => (
        <div key={it} className="cap-strip-item" style={{ padding: "14px 12px", textAlign: "center" }}>
          <span className="caps mono" style={{ fontSize: 11 }}>{it}</span>
        </div>
      ))}
    </div>
  );
}

// ---------- Section header ----------

function SectionHead({ idx, kicker, title, note, cols = 3 }) {
  // Three equal columns that align vertically with the 3-up services / process / contact grids below.
  return (
    <div className="bb-ink-1">
      <div className="grid sec-head-grid" style={{ gridTemplateColumns: cols === 4 ? "var(--sec-head-grid-4)" : "var(--sec-head-grid-3)", alignItems: "stretch" }}>
        <div className="sec-head-col-1" style={{ borderRight: "var(--sec-head-border-r)", borderBottom: "var(--sec-head-border-b)", padding: "22px 22px", display: "flex", flexDirection: "column", justifyContent: "space-between", gap: 18, minHeight: "var(--sec-head-height-1)" }}>
          <Micro>{idx}</Micro>
          <Micro>{kicker}</Micro>
        </div>
        <div className="sec-head-col-2" style={{ borderRight: "var(--sec-head-border-r)", borderBottom: "var(--sec-head-border-b)", padding: "22px 22px", display: "flex", alignItems: "flex-end", minWidth: 0 }}>
          <h2 className="display" style={{ margin: 0, fontSize: "clamp(28px, 2.8vw, 48px)", lineHeight: 1, textWrap: "balance" }}>{title}</h2>
        </div>
        <div className="sec-head-col-3" style={{ padding: "22px 22px", textAlign: "var(--sec-head-align-3)", display: "flex", alignItems: "flex-end", justifyContent: "var(--sec-head-justify-3)", minWidth: 0 }}>
          <Micro>{note}</Micro>
        </div>
      </div>
    </div>
  );
}

// ---------- Services Grid ----------

const SERVICES = [
  {
    no: "01",
    title: "Brand & Product\nDevelopment",
    blurb: "We engineer physical products end-to-end. From complete custom vinyl manufacturing (design to import) to premium cut-and-sew clothing lines.",
    items: [
      "End-to-End Vinyl Pressing",
      "Custom Cut & Sew Lines",
      "Packaging & Graphic Design",
      "Product Prototyping",
      "Supply Chain & Importation",
      "Distribution Logistics",
    ],
    glyph: "PD",
  },
  {
    no: "02",
    title: "Cinematic Video\n& Content",
    blurb: "High-impact video production for creators, brands, and companies. We script, film, and direct video campaigns that build long-term value.",
    items: [
      "Cinematic Ad Campaigns",
      "Product Showcases",
      "Creative Content Direction",
      "Music Videos & Documentaries",
      "Motion Graphics & Post",
      "Sound Design & Scoring",
    ],
    glyph: "CC",
  },
  {
    no: "03",
    title: "Growth &\nMonetization",
    blurb: "We design fan-monetization funnels, scale paid traffic campaigns, and run highly-exclusive, high-yield product drops.",
    items: [
      "Fan Membership Subscriptions",
      "Exclusive Product Launches",
      "Paid Ads & Acquisition",
      "Community Management",
      "E-commerce Funnel Scaling",
      "Audience Retention Strategy",
    ],
    glyph: "GM",
  },
];

function ServicesGrid() {
  return (
    <section id="services" data-screen-label="services">
      <SectionHead idx="§ 02" kicker="The PUR3 Model" title="Three disciplines. One studio. Zero handoffs." note="Triptych — fig. 02" />
      <div className="grid bb-ink-1 services-grid" style={{ gridTemplateColumns: "var(--services-grid)" }}>
        {SERVICES.map((s, i) => (
          <article key={s.no} className="services-card" style={{ padding: "var(--services-padding)", display: "flex", flexDirection: "column", minHeight: "var(--services-card-height)" }}>
            {/* card head */}
            <div className="flex items-start justify-between">
              <span className="cell-num caps">{s.no}</span>
              <span className="cell-num caps">{s.glyph}</span>
            </div>
            {/* title */}
            <h3 className="display services-card-title" style={{ fontSize: "clamp(36px, 4.0vw, 64px)", margin: "16px 0 18px", whiteSpace: "pre-line", minHeight: "var(--services-title-height)", lineHeight: 1 }}>{s.title}</h3>
            <p className="services-card-blurb" style={{ fontSize: 15, lineHeight: 1.45, maxWidth: 360, margin: 0, minHeight: "var(--services-blurb-height)" }}>{s.blurb}</p>

            {/* placeholder visual */}
            <div className="ph" style={{ marginTop: 22, marginInline: -22, height: 200, flexShrink: 0, borderTop: "1px solid var(--ink)", borderBottom: "1px solid var(--ink)", position: "relative", overflow: "hidden" }}>
              {s.no === "01" ? (
                <video
                  src="assets/opusbranding1.mp4"
                  autoPlay
                  loop
                  muted
                  playsInline
                  style={{
                    position: "absolute",
                    top: 0,
                    left: 0,
                    width: "100%",
                    height: "100%",
                    objectFit: "cover",
                  }}
                />
              ) : null}
              {s.no === "02" ? (
                <iframe
                  src="https://www.youtube.com/embed/Tw0zz6SRVJk?autoplay=1&mute=1&loop=1&playlist=Tw0zz6SRVJk&controls=0&showinfo=0&rel=0&iv_load_policy=3&modestbranding=1"
                  frameBorder="0"
                  allow="autoplay; encrypted-media"
                  style={{
                    position: "absolute",
                    top: 0,
                    left: 0,
                    width: "100%",
                    height: "100%",
                    pointerEvents: "none",
                  }}
                  title="Cinematic Video & Content"
                />
              ) : null}
              {s.no === "03" ? (
                <video
                  src="assets/innercircleopus.mp4"
                  autoPlay
                  loop
                  muted
                  playsInline
                  style={{
                    position: "absolute",
                    top: 0,
                    left: 0,
                    width: "100%",
                    height: "100%",
                    objectFit: "cover",
                  }}
                />
              ) : null}
            </div>

            {/* list */}
            <ul style={{ listStyle: "none", padding: 0, margin: "20px 0 28px" }}>
              {s.items.map((it, j) => (
                <li key={it} style={{ display: "grid", gridTemplateColumns: "32px 1fr auto", gap: 10, padding: "12px 0", borderBottom: j < s.items.length - 1 ? "1px solid rgba(0,0,0,0.18)" : "none" }}>
                  <span className="mono" style={{ fontSize: 11, opacity: 0.55 }}>{String(j + 1).padStart(2, "0")}</span>
                  <span className="caps" style={{ fontSize: 14, fontWeight: 600 }}>{it}</span>
                  <span className="mono" style={{ fontSize: 11 }}>↗</span>
                </li>
              ))}
            </ul>

            <div style={{ marginTop: "auto", padding: "16px 0 22px", borderTop: "1px solid var(--ink)" }}>
              <button className="caps mono" style={{ background: "transparent", border: "none", padding: 0, fontSize: 12, cursor: "pointer" }}>
                Brief us on {s.title.replace("\n", " ").toLowerCase()} <span className="arrow">→</span>
              </button>
            </div>
          </article>
        ))}
      </div>
    </section>
  );
}

// ---------- Fan Studio (inverted) ----------

function FanStudio() {
  const stats = [
    { k: "Vinyl Pressing", v: "100%", n: "design to import" },
    { k: "Production", v: "ARRI LF", n: "cinematic raw video" },
    { k: "Launch Cycle", v: "End-to-End", n: "concept to customer" },
    { k: "Audience ARPU", v: "£14.80", n: "subscription scale" },
  ];
  return (
    <section id="fan" className="ink-bg" data-screen-label="fan-studio" style={{ borderBottom: "1px solid var(--ink)" }}>
      {/* head */}
      <div className="grid fan-head-grid" style={{ gridTemplateColumns: "var(--fan-head-grid)", borderBottom: "1px solid var(--paper)" }}>
        <div className="fan-head-col" style={{ padding: "20px 14px", borderRight: "var(--fan-head-border-r)", borderBottom: "var(--fan-head-border-b)" }}>
          <Micro>§ 03</Micro>
        </div>
        <div className="fan-head-col" style={{ padding: "20px 18px", borderRight: "var(--fan-head-border-r)", borderBottom: "var(--fan-head-border-b)" }}>
          <Micro>Product &amp; Content Engine</Micro>
        </div>
        <div className="fan-head-col" style={{ padding: "20px 18px", borderRight: "var(--fan-head-border-r)", borderBottom: "var(--fan-head-border-b)" }}>
          <Micro>Physical + Digital</Micro>
        </div>
        <div className="fan-head-col-last" style={{ padding: "20px 14px", textAlign: "var(--fan-head-align-last)" }}>
          <Micro>By invitation</Micro>
        </div>
      </div>

      {/* huge headline */}
      <div className="grid fan-body-grid" style={{ gridTemplateColumns: "var(--fan-body-grid)" }}>
        <div className="fan-body-col-left" style={{ padding: "var(--fan-body-padding)", borderRight: "var(--fan-body-border-r)", borderBottom: "var(--fan-body-border-b)" }}>
          <h2 className="display clamp-h2" style={{ margin: 0 }}>
            Fuel your<br/>fanbase.
          </h2>
          <h2 className="display clamp-h2" style={{ margin: "8px 0 0", color: "transparent", WebkitTextStroke: "1.5px var(--paper)" }}>
            Ongoing<br/>momentum.
          </h2>
        </div>
        <div style={{ padding: "var(--fan-body-padding)" }}>
          <Micro>The Creative Engine</Micro>
          <p style={{ fontSize: 17, lineHeight: 1.45, marginTop: 18 }}>
            We turn creative IP into iconic products and cinematic video narratives. Whether it's end-to-end vinyl manufacturing, custom cut-and-sew collections, or high-concept video campaigns for brand launches, we manage the execution.
          </p>
          <div style={{ marginTop: 26, display: "flex", gap: 10, flexWrap: "wrap" }}>
            {["Vinyl Pressing", "Product Design", "Cinematic Video", "Campaigns", "Brand Scale"].map(t => (
              <span key={t} className="caps mono" style={{ fontSize: 11, padding: "6px 10px", border: "1px solid var(--paper)" }}>{t}</span>
            ))}
          </div>
        </div>
      </div>

      <div style={{ borderTop: "1px solid var(--paper)" }}>
        <TickRow inv />
      </div>

      <div className="grid fan-visual-grid" style={{ gridTemplateColumns: "var(--fan-visual-grid)", borderTop: "1px solid var(--paper)" }}>
        {/* stats */}
        <div className="grid fan-stats-grid" style={{ gridTemplateColumns: "var(--fan-stats-grid)" }}>
          {stats.map((s, i) => (
            <div key={s.k} className="fan-stat-box" style={{
              padding: "28px 22px",
              minHeight: 210,
              display: "flex", flexDirection: "column", justifyContent: "space-between",
            }}>
              <Micro>{s.k}</Micro>
              <div className="display" style={{ fontSize: "clamp(32px, 3.4vw, 56px)", lineHeight: 0.95 }}>{s.v}</div>
              <span className="mono" style={{ fontSize: 11, opacity: 0.7 }}>{s.n}</span>
            </div>
          ))}
        </div>
      </div>

      {/* CTA strip */}
      <div className="grid fan-cta-grid" style={{ gridTemplateColumns: "var(--fan-cta-grid)", borderTop: "1px solid var(--paper)" }}>
        <div style={{ padding: "20px 28px", borderRight: "var(--fan-cta-border-r)", borderBottom: "var(--fan-cta-border-b)" }}>
          <span className="caps" style={{ fontSize: 14, fontWeight: 600 }}>Roster currently closed.</span>
        </div>
        <a href="#contact" className="caps mono brut-btn inv" style={{ padding: "20px 28px", fontSize: 13, textDecoration: "none", display: "inline-flex", alignItems: "center", gap: 10 }}>
          <span className="label">Request a place →</span>
        </a>
      </div>
    </section>
  );
}

// ---------- Process ladder ----------

function Process() {
  const steps = [
    { n: "I.",   t: "Discovery", d: "15-minute call. We listen to your vision. You leave with a custom product &amp; video brief, not a sales pitch." },
    { n: "II.",  t: "Blueprint", d: "A bespoke blueprint outlining physical product specs (vinyl/apparel) and high-concept video creative." },
    { n: "III.", t: "Production", d: "Production goes live. We press the vinyl, manufacture garments, and film cinematic campaigns in parallel." },
    { n: "IV.",  t: "Distribution", d: "End-to-end import, e-commerce scaling, and campaign rollout. We manage the pipeline while you grow." },
  ];
  return (
    <section data-screen-label="process">
      <SectionHead idx="§ 04" kicker="How we work" title="Four moves. No retainers in the dark." note="Method — fig. 04" cols={4} />
      <div className="grid bb-ink-1 process-grid" style={{ gridTemplateColumns: "var(--process-grid)" }}>
        {steps.map((s, i) => (
          <div key={s.n} className="process-step" style={{ padding: "30px 20px", minHeight: "var(--process-step-height)", display: "flex", flexDirection: "column", justifyContent: "space-between" }}>
            <span className="display" style={{ fontSize: 26 }}>{s.n}</span>
            <div>
              <div className="caps" style={{ fontSize: 22, fontWeight: 800, letterSpacing: "-0.01em" }}>{s.t}</div>
              <p style={{ fontSize: 14, lineHeight: 1.45, marginTop: 10 }}>{s.d}</p>
            </div>
          </div>
        ))}
      </div>
    </section>
  );
}

// ---------- Contact Hub ----------

const CONTACTS = [
  {
    key: "call",
    kicker: "01 — Discovery",
    label: "Book a discovery call",
    sub: "15 mins. Free. Zero obligation.",
    meta: "Google Calendar",
    href: "https://calendar.app.google/mzarkF4Kd2Zag3As7",
  },
  {
    key: "wa",
    kicker: "02 — Realtime",
    label: "Chat on WhatsApp",
    sub: "Reply within the hour, 09:00 – 19:00 GMT.",
    meta: "Direct line",
    href: "https://wa.me/message/EMDLXDNH2QIOA1",
  },
  {
    key: "email",
    kicker: "03 — Direct",
    label: "Email the Director",
    sub: "Kirk reads every message himself.",
    meta: "spencer@scoreandstage.com",
    href: "mailto:spencer@scoreandstage.com",
  },
];

function ContactHub() {
  return (
    <section id="contact" data-screen-label="contact">
      <SectionHead idx="§ 05" kicker="The Contact Hub" title="Pick your channel. We'll meet you there." note="Three doors — fig. 05" />
      <div className="bb-ink-1">
        {CONTACTS.map((c, i) => (
          <a
            key={c.key}
            href={c.href}
            target="_blank"
            rel="noreferrer noopener"
            className="brut-btn contact-row"
            style={{
              display: "grid",
              gridTemplateColumns: "var(--contact-grid)",
              alignItems: "center",
              borderBottom: i < CONTACTS.length - 1 ? "1px solid var(--ink)" : "none",
              padding: "0",
              textDecoration: "none",
              color: "var(--ink)",
            }}
          >
            <div className="label contact-kicker" style={{ borderRight: "var(--contact-border-r)", borderBottom: "var(--contact-border-b)", padding: "var(--contact-padding)" }}>
              <Micro>{c.kicker}</Micro>
            </div>
            <div className="label contact-body" style={{ padding: "var(--contact-padding)" }}>
              <span className="display contact-label" style={{ display: "block" }}>{c.label}</span>
              <span className="caps mono" style={{ fontSize: 12, marginTop: 8, display: "inline-block" }}>{c.sub}</span>
            </div>
            <div className="label contact-meta" style={{ padding: "var(--contact-padding)", textAlign: "var(--contact-align-meta)" }}>
              <span className="caps mono" style={{ fontSize: 12 }}>{c.meta}</span>
            </div>
            <div className="label contact-arrow" style={{ display: "var(--contact-arrow-display)", borderLeft: "var(--contact-border-l)", padding: "var(--contact-padding)", textAlign: "right" }}>
              <span className="display" style={{ fontSize: 34 }}>↗</span>
            </div>
          </a>
        ))}
      </div>
    </section>
  );
}

// ---------- Footer ----------

function Footer() {
  return (
    <footer data-screen-label="footer">
      <div className="grid footer-grid" style={{ gridTemplateColumns: "var(--footer-grid)" }}>
        <div className="footer-col" style={{ borderRight: "var(--footer-border-r)", borderBottom: "var(--footer-border-b)", padding: "26px 20px" }}>
          <Micro>Studio</Micro>
          <div style={{ marginTop: 12, fontSize: 14, lineHeight: 1.5 }}>
            Opus Branding Co.<br/>
            1 Fisher Gate<br/>
            Lower Parliament St<br/>
            Nottingham NG1 1GD
          </div>
        </div>
        <div className="footer-col" style={{ borderRight: "var(--footer-border-r)", borderBottom: "var(--footer-border-b)", padding: "26px 20px" }}>
          <Micro>Hours</Micro>
          <div style={{ marginTop: 12, fontSize: 14, lineHeight: 1.5 }}>
            Mon — Fri · 09:00 – 19:00<br/>
            Sat · By appointment<br/>
            Sun · Closed
          </div>
        </div>
        <div className="footer-col" style={{ borderRight: "var(--footer-border-r)", borderBottom: "var(--footer-border-b)", padding: "26px 20px" }}>
          <Micro>Index</Micro>
          <div style={{ marginTop: 12, fontSize: 14, lineHeight: 1.7, display: "grid" }}>
            <a className="nav-link caps" style={{ textDecoration: "none" }}>Services</a>
            <a className="nav-link caps" style={{ textDecoration: "none" }}>Fan Studio</a>
            <a className="nav-link caps" style={{ textDecoration: "none" }}>Process</a>
            <a className="nav-link caps" style={{ textDecoration: "none" }}>Contact</a>
          </div>
        </div>
        <div className="footer-col-last" style={{ padding: "26px 20px" }}>
          <Micro>Colophon</Micro>
          <div style={{ marginTop: 16 }}>
            <img src="assets/clear-opus-logo.png" alt="Opus logo" style={{ height: "var(--colophon-logo-height)", width: "auto", display: "block", maxHeight: "100%" }} />
          </div>
        </div>
      </div>
      <Rule />
      <div className="flex items-center justify-between footer-bottom-strip" style={{ padding: "16px 20px" }}>
        <Micro>{"\u00A9"} 2026 — Opus Branding Co. · Built for visionaries.</Micro>
        <Micro>All rights reserved · Company No. 14782301</Micro>
        <Micro>v 2.7</Micro>
      </div>
    </footer>
  );
}

// Expose to global scope so the main app script can use them.
Object.assign(window, {
  Rule, TickRow, Micro, Marquee,
  Header, Hero, CapStrip, SectionHead,
  ServicesGrid, FanStudio, Process, ContactHub, Footer,
});
