// ============================================================
// CONTENT — Problem, What is Shard, Features (bento), Personas,
//           How it works (seam path), Comparison (ledger rows)
// ============================================================

function SectionHeader({ eyebrow, title, accentPart, lede, isMobile }) {
  const theme = window.useActiveTheme();
  const { Eyebrow, AccentPhrase, Reveal } = window;
  return (
    <div
      style={{
        display: "grid",
        gridTemplateColumns: isMobile ? "1fr" : "1fr 1.4fr",
        gap: isMobile ? 24 : 64,
        marginBottom: isMobile ? 36 : 64,
        alignItems: "end",
      }}
    >
      <Reveal>
        <Eyebrow>{eyebrow}</Eyebrow>
        <h2
          style={{
            fontFamily: "'Lexend', sans-serif",
            fontSize: "clamp(28px, 4.2vw, 52px)",
            lineHeight: 1.04,
            fontWeight: 600,
            letterSpacing: -1.2,
            margin: 0,
            color: theme.ink,
            textWrap: "balance",
          }}
        >
          {title} <AccentPhrase>{accentPart}</AccentPhrase>.
        </h2>
      </Reveal>
      <Reveal delay={120}>
        <p style={{ fontSize: isMobile ? 16 : 18, lineHeight: 1.6, color: theme.sub, margin: 0, maxWidth: 540 }}>
          {lede}
        </p>
      </Reveal>
    </div>
  );
}

// ---------- PROBLEM — editorial ledger, no cards --------------

function ProblemSection() {
  const theme = window.useActiveTheme();
  const { Section, Reveal } = window;
  const { isMobile } = window.useViewport();

  const pains = [
    {
      n: "01",
      title: "Vibes-based evaluation",
      body: "Your team feels the new model is better, but can't prove it. Each PM has a different mental rubric. Decisions drift.",
    },
    {
      n: "02",
      title: "Benchmarks miss what matters",
      body: "Public benchmarks measure narrow capabilities. They don't capture what actually breaks your product — tone, bias, edge cases, regulatory context.",
    },
    {
      n: "03",
      title: "Audit-ready means manual",
      body: "Compliance asks for evidence. You hand them a spreadsheet you made the night before. Nothing stitches together.",
    },
  ];

  return (
    <Section id="problem" tone="alt" padding="110px 0" mobilePadding="56px 0">
      <SectionHeader
        eyebrow="Sound familiar?"
        title="Three ways AI quality"
        accentPart="slips through"
        lede="Most teams shipping LLM features hit the same three walls. Each one is a place where Shard turns guesswork into evidence."
        isMobile={isMobile}
      />

      <div style={{ borderTop: `1px solid ${theme.cardBorder}` }}>
        {pains.map((p, i) => (
          <Reveal key={p.n} delay={i * 110}>
            <div
              style={{
                display: "grid",
                gridTemplateColumns: isMobile ? "1fr" : "110px 1fr 1.5fr",
                gap: isMobile ? 8 : 40,
                alignItems: "baseline",
                padding: isMobile ? "26px 0" : "38px 0",
                paddingLeft: isMobile ? 0 : i * 36,
                borderBottom: `1px solid ${theme.cardBorder}`,
              }}
            >
              <div
                style={{
                  fontFamily: "'JetBrains Mono', monospace",
                  fontSize: isMobile ? 13 : 15,
                  letterSpacing: 2,
                  color: theme.accent,
                  fontWeight: 600,
                }}
              >
                /{p.n}
              </div>
              <h3
                style={{
                  fontFamily: "'Lexend', sans-serif",
                  fontSize: isMobile ? 21 : "clamp(22px, 2.4vw, 30px)",
                  fontWeight: 600,
                  letterSpacing: -0.6,
                  margin: 0,
                  color: theme.ink,
                  lineHeight: 1.15,
                }}
              >
                {p.title}
              </h3>
              <p style={{ fontSize: 15.5, lineHeight: 1.6, color: theme.sub, margin: 0, maxWidth: 520 }}>
                {p.body}
              </p>
            </div>
          </Reveal>
        ))}
      </div>
    </Section>
  );
}

// ---------- WHAT IS SHARD -------------------------------------

function WhatIsSection() {
  const theme = window.useActiveTheme();
  const { Section, Eyebrow, AccentPhrase, Reveal } = window;
  const { isMobile } = window.useViewport();

  return (
    <Section id="what-is" padding="130px 0 70px" mobilePadding="56px 0 32px">
      <div
        style={{
          display: "grid",
          gridTemplateColumns: isMobile ? "1fr" : "1fr 1.6fr",
          gap: isMobile ? 24 : 80,
          alignItems: "start",
        }}
      >
        <Reveal>
          <Eyebrow>What is Shard?</Eyebrow>
          <h2
            style={{
              fontFamily: "'Lexend', sans-serif",
              fontSize: "clamp(28px, 4.2vw, 52px)",
              lineHeight: 1.04,
              fontWeight: 600,
              letterSpacing: -1.2,
              margin: 0,
              color: theme.ink,
              textWrap: "balance",
            }}
          >
            End-to-end <AccentPhrase>AI evaluation</AccentPhrase>.
          </h2>
        </Reveal>
        <Reveal delay={130}>
          <div style={{ borderLeft: `2px solid ${theme.accent}`, paddingLeft: isMobile ? 18 : 28 }}>
            <p style={{ fontSize: isMobile ? 17 : 20, lineHeight: 1.62, color: theme.sub, margin: 0, maxWidth: 720 }}>
              Shard is an end-to-end AI evaluation platform. You define what good looks like as a{" "}
              <span style={{ color: theme.ink, fontWeight: 500 }}>structured rubric</span>, run your AI
              system through a library of scenarios, and score every response — by hand, by AI, or by a{" "}
              <span style={{ color: theme.ink, fontWeight: 500 }}>council of models</span> that
              deliberate when they disagree. Every score, every justification, every prompt is recorded.
              You get model comparisons, certification tiers, bias reports, and consistency trends —{" "}
              without spreadsheets.
            </p>
          </div>
        </Reveal>
      </div>
    </Section>
  );
}

// ---------- FEATURES — bento grid ------------------------------

// Perpetual "council deliberation" — members re-rank on a loop.
function CouncilLiveTile() {
  const theme = window.useActiveTheme();
  const base = [
    { name: "claude-fable-5", score: 4.6 },
    { name: "gpt-5.2", score: 4.4 },
    { name: "gemini-3.1-pro", score: 3.8 },
    { name: "llama-4-405b", score: 4.1 },
  ];
  const [active, setActive] = React.useState(0);
  React.useEffect(() => {
    if (!window.motionAllowed()) return;
    const id = setInterval(() => setActive((a) => (a + 1) % base.length), 2200);
    return () => clearInterval(id);
  }, []);
  return (
    <div style={{ marginTop: 22, display: "flex", flexDirection: "column", gap: 10 }}>
      {base.map((m, i) => {
        const isActive = i === active;
        return (
          <div
            key={m.name}
            style={{
              display: "grid",
              gridTemplateColumns: "1fr 56px",
              alignItems: "center",
              gap: 14,
              padding: "10px 14px",
              borderRadius: 10,
              border: `1px solid ${isActive ? theme.accent + "66" : theme.cardBorder}`,
              background: isActive ? `${theme.accent}0d` : "transparent",
              transition: "border-color .5s ease, background .5s ease, transform .5s cubic-bezier(.16,1,.3,1)",
              transform: isActive ? "translateX(6px)" : "none",
              fontFamily: "'JetBrains Mono', monospace",
              fontSize: 12.5,
            }}
          >
            <div style={{ display: "flex", alignItems: "center", gap: 10, minWidth: 0 }}>
              <span
                style={{
                  width: 6,
                  height: 6,
                  borderRadius: "50%",
                  flexShrink: 0,
                  background: isActive ? theme.success : theme.mute,
                  transition: "background .5s ease",
                }}
              />
              <span style={{ color: isActive ? theme.ink : theme.sub, transition: "color .5s ease", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
                {m.name}
              </span>
            </div>
            <div style={{ position: "relative", height: 5, borderRadius: 3, background: theme.dark ? "rgba(255,255,255,0.07)" : "rgba(22,26,43,0.08)", overflow: "hidden" }}>
              <div
                style={{
                  position: "absolute",
                  inset: "0 auto 0 0",
                  width: `${(m.score / 5) * 100}%`,
                  background: isActive ? theme.accent : theme.mute,
                  borderRadius: 3,
                  transition: "background .5s ease",
                }}
              />
            </div>
          </div>
        );
      })}
      <div style={{ fontFamily: "'JetBrains Mono', monospace", fontSize: 11, color: theme.mute, marginTop: 6 }}>
        deliberation round 2 · consensus forming · self-bias check passed
      </div>
    </div>
  );
}

// Rubric bars that fill when the tile scrolls into view.
function RubricTile() {
  const theme = window.useActiveTheme();
  const ref = React.useRef(null);
  const [fill, setFill] = React.useState(!window.motionAllowed());
  React.useEffect(() => {
    if (!window.motionAllowed() || !("IntersectionObserver" in window)) {
      setFill(true);
      return;
    }
    const io = new IntersectionObserver(
      (es) => es.forEach((e) => e.isIntersecting && (setFill(true), io.disconnect())),
      { threshold: 0.4 }
    );
    if (ref.current) io.observe(ref.current);
    return () => io.disconnect();
  }, []);
  const rows = [
    ["accuracy", 86],
    ["tone", 72],
    ["safety", 94],
    ["coverage", 63],
  ];
  return (
    <div ref={ref} style={{ marginTop: 20, display: "flex", flexDirection: "column", gap: 12 }}>
      {rows.map(([label, pct], i) => (
        <div key={label}>
          <div
            style={{
              display: "flex",
              justifyContent: "space-between",
              fontFamily: "'JetBrains Mono', monospace",
              fontSize: 11.5,
              color: theme.sub,
              marginBottom: 5,
            }}
          >
            <span>{label}</span>
            <span style={{ color: theme.accent }}>{pct}</span>
          </div>
          <div style={{ height: 4, borderRadius: 2, background: theme.dark ? "rgba(255,255,255,0.07)" : "rgba(22,26,43,0.08)", overflow: "hidden" }}>
            <div
              style={{
                height: "100%",
                width: fill ? `${pct}%` : "0%",
                background: theme.accent,
                borderRadius: 2,
                transition: `width 1.1s cubic-bezier(.16,1,.3,1) ${i * 120}ms`,
              }}
            />
          </div>
        </div>
      ))}
    </div>
  );
}

function BentoTile({ area, title, body, children, big }) {
  const theme = window.useActiveTheme();
  const { SpotlightCard } = window;
  const { isMobile } = window.useViewport();
  return (
    <SpotlightCard
      style={{ gridArea: isMobile ? "auto" : area, display: "flex", flexDirection: "column" }}
      padding={isMobile ? "22px 20px" : big ? "30px 30px 26px" : "24px 24px 22px"}
    >
      <h4
        style={{
          fontFamily: "'Lexend', sans-serif",
          fontSize: big ? 22 : 17,
          fontWeight: 600,
          letterSpacing: -0.4,
          margin: "0 0 9px 0",
          color: theme.ink,
          lineHeight: 1.2,
        }}
      >
        {title}
      </h4>
      <p style={{ fontSize: big ? 15 : 13.5, lineHeight: 1.55, color: theme.sub, margin: 0 }}>{body}</p>
      {children}
    </SpotlightCard>
  );
}

function FeaturesSection() {
  const theme = window.useActiveTheme();
  const { Section, Reveal } = window;
  const { isMobile } = window.useViewport();

  return (
    <Section id="features" tone="alt" padding="90px 0 130px" mobilePadding="40px 0 64px">
      <SectionHeader
        eyebrow="Features"
        title="What's in the"
        accentPart="workspace"
        lede="Nine working surfaces — rubrics, scenarios, scoring, council, bias, consistency, flag rules, workspaces, certifications. Pick what you need; the data model is the same."
        isMobile={isMobile}
      />

      <Reveal>
        <div
          style={{
            display: "grid",
            gridTemplateColumns: isMobile ? "1fr" : "1.1fr 1.1fr 1fr 1fr",
            gridTemplateAreas: isMobile
              ? "none"
              : `"council council rubric scenario"
                 "council council scoring bias"
                 "consistency flag workspaces cert"`,
            gap: isMobile ? 12 : 16,
          }}
        >
          <BentoTile
            area="council"
            big
            title="AI Council"
            body="Independent scoring from Claude, GPT, Gemini, and others, with deliberation rounds and weighted consensus. Self-bias flagged."
          >
            <CouncilLiveTile />
          </BentoTile>

          <BentoTile
            area="rubric"
            title="Custom rubrics"
            body="Dimensions, criteria, and scoring descriptors specific to your domain. Versioned and snapshotted per run."
          >
            <RubricTile />
          </BentoTile>

          <BentoTile
            area="scenario"
            title="Scenario library"
            body="Author or import scenarios with multi-turn conversations, branching logic, and literacy variants."
          />
          <BentoTile
            area="scoring"
            title="Multi-mode scoring"
            body="Score by hand, by a single AI model, or by council — models that deliberate when scores diverge."
          />
          <BentoTile
            area="bias"
            title="Bias auditing"
            body="Built-in tests for demographic, role, and tenure bias. Same scenario across variants, compared."
          />
          <BentoTile
            area="consistency"
            title="Consistency lab"
            body="Detect drift across long conversations. Score windows of turns; see when the model loses the thread."
          />
          <BentoTile
            area="flag"
            title="Auto-flag rules"
            body="Pattern-match for compliance triggers — PII, refusals, missing disclosures — surfaced at scoring time."
          />
          <BentoTile
            area="workspaces"
            title="Workspaces & roles"
            body="Multi-tenant from day one. Granular roles, workspace-isolated data, audit log."
          />
          <BentoTile
            area="cert"
            title="Certifications"
            body="Issue tier-based certifications (Bronze / Silver / Gold) with classification schemes you control."
          />
        </div>
      </Reveal>
    </Section>
  );
}

// ---------- PERSONAS — zig-zag editorial -----------------------

function PersonasSection() {
  const theme = window.useActiveTheme();
  const { Section, Reveal } = window;
  const { isMobile } = window.useViewport();

  const personas = [
    {
      who: "AI quality teams",
      youAre: "You ship LLM-powered features and want a stable measure of quality across releases.",
      use: "Lock in a rubric, regression-test every model bump, and catch quality drift before users do.",
    },
    {
      who: "Compliance & governance",
      youAre: "You answer to a board, regulator, or customer about how your AI behaves.",
      use: "Generate auditable evidence — every score, every justification, tied to a versioned framework.",
    },
    {
      who: "AI researchers & benchmarkers",
      youAre: "You're publishing comparisons or running domain-specific benchmarks.",
      use: "Define your benchmark once, run it against any model with credentials, and produce reproducible scores.",
    },
    {
      who: "Certification bodies",
      youAre: "You issue domain-specific marks for AI systems — like BRAINS does for neuro-affirming AI.",
      use: "Operate the rubric, the panel, the audit trail, and the certification tiers in one place.",
    },
  ];

  return (
    <Section id="personas" padding="130px 0" mobilePadding="56px 0">
      <SectionHeader
        eyebrow="Who it's for"
        title="Four"
        accentPart="jobs to be done"
        lede="Shard is built for teams who need to defend their AI quality claims with evidence — internally, externally, or to a regulator."
        isMobile={isMobile}
      />

      <div style={{ display: "flex", flexDirection: "column" }}>
        {personas.map((p, i) => {
          const even = i % 2 === 0;
          return (
            <Reveal key={p.who} delay={i * 90}>
              <div
                style={{
                  display: "grid",
                  gridTemplateColumns: isMobile ? "1fr" : even ? "1.1fr 1fr" : "1fr 1.1fr",
                  gap: isMobile ? 12 : 56,
                  padding: isMobile ? "26px 0" : "40px 0",
                  borderTop: `1px solid ${theme.cardBorder}`,
                  alignItems: "center",
                }}
              >
                <div style={{ order: isMobile ? 1 : even ? 1 : 2, paddingLeft: isMobile ? 0 : even ? 0 : 40 }}>
                  <div
                    style={{
                      display: "flex",
                      alignItems: "baseline",
                      gap: 14,
                      marginBottom: 10,
                    }}
                  >
                    <span
                      style={{
                        fontFamily: "'JetBrains Mono', monospace",
                        fontSize: 12,
                        letterSpacing: 1.6,
                        color: theme.accent,
                        fontWeight: 600,
                      }}
                    >
                      {String(i + 1).padStart(2, "0")}
                    </span>
                    <h3
                      style={{
                        fontFamily: "'Lexend', sans-serif",
                        fontSize: isMobile ? 21 : "clamp(22px, 2.6vw, 32px)",
                        fontWeight: 600,
                        letterSpacing: -0.6,
                        margin: 0,
                        color: theme.ink,
                        lineHeight: 1.12,
                      }}
                    >
                      {p.who}
                    </h3>
                  </div>
                  <p style={{ fontSize: 15, lineHeight: 1.55, color: theme.sub, margin: 0, maxWidth: 460 }}>
                    {p.use}
                  </p>
                </div>
                <div style={{ order: isMobile ? 2 : even ? 2 : 1, paddingRight: isMobile ? 0 : even ? 24 : 0 }}>
                  <p
                    style={{
                      fontSize: isMobile ? 16 : 18,
                      lineHeight: 1.5,
                      color: theme.ink,
                      margin: 0,
                      fontStyle: "italic",
                      position: "relative",
                      paddingLeft: 26,
                      maxWidth: 440,
                    }}
                  >
                    <span
                      aria-hidden
                      style={{
                        position: "absolute",
                        left: 0,
                        top: -6,
                        fontFamily: "'Lexend', sans-serif",
                        fontSize: 34,
                        color: theme.accent,
                        fontStyle: "normal",
                        lineHeight: 1,
                      }}
                    >
                      &ldquo;
                    </span>
                    {p.youAre}
                  </p>
                </div>
              </div>
            </Reveal>
          );
        })}
        <div style={{ borderTop: `1px solid ${theme.cardBorder}` }} />
      </div>
    </Section>
  );
}

// ---------- HOW IT WORKS — kintsugi seam path -------------------

function HowItWorks() {
  const theme = window.useActiveTheme();
  const { Section, Reveal } = window;
  const { isMobile } = window.useViewport();
  const ref = React.useRef(null);
  const [drawn, setDrawn] = React.useState(!window.motionAllowed());

  React.useEffect(() => {
    if (!window.motionAllowed() || !("IntersectionObserver" in window)) {
      setDrawn(true);
      return;
    }
    const io = new IntersectionObserver(
      (es) => es.forEach((e) => e.isIntersecting && (setDrawn(true), io.disconnect())),
      { threshold: 0.15 }
    );
    if (ref.current) io.observe(ref.current);
    return () => io.disconnect();
  }, []);

  const steps = [
    {
      n: "01",
      title: "Define your framework",
      body: "Pick dimensions, criteria, and scoring descriptors that capture what good looks like in your domain. Version them so old scores stay comparable.",
    },
    {
      n: "02",
      title: "Author scenarios",
      body: "Single-turn prompts, multi-turn conversations, or branching scripts. Run them at different literacy levels to test how the model adapts.",
    },
    {
      n: "03",
      title: "Run + score",
      body: "Send scenarios through any model — yours, theirs, or both side by side. Score by hand, AI, or council.",
    },
    {
      n: "04",
      title: "Compare, certify, report",
      body: "Dashboards across models, dimensions, and time. Issue certifications. Export evidence for stakeholders.",
    },
  ];

  // A jagged kintsugi seam, not a straight rail.
  const seamPath = "M20 0 L20 90 L34 130 L12 210 L20 250 L20 340 L30 380 L14 460 L20 500 L20 600 L26 640 L20 700 L20 800";

  return (
    <Section id="how" tone="alt" padding="130px 0" mobilePadding="56px 0">
      <SectionHeader
        eyebrow="How it works"
        title="Rubric in."
        accentPart="Certainty out"
        lede="Four moves. Each one stitched to the next so the evidence is continuous — and reproducible six months later."
        isMobile={isMobile}
      />

      <div ref={ref} style={{ position: "relative", maxWidth: 880, marginLeft: isMobile ? 0 : 60 }}>
        {!isMobile && (
          <svg
            aria-hidden
            viewBox="0 0 40 800"
            preserveAspectRatio="none"
            style={{ position: "absolute", left: -60, top: 0, width: 40, height: "100%" }}
          >
            <path
              d={seamPath}
              stroke={theme.accent}
              strokeWidth="1.6"
              fill="none"
              strokeLinecap="round"
              strokeLinejoin="round"
              style={{
                strokeDasharray: 1700,
                strokeDashoffset: drawn ? 0 : 1700,
                transition: "stroke-dashoffset 2.4s cubic-bezier(.16,1,.3,1)",
                opacity: 0.8,
              }}
            />
          </svg>
        )}

        <div style={{ display: "flex", flexDirection: "column", gap: isMobile ? 26 : 44 }}>
          {steps.map((s, i) => (
            <Reveal key={s.n} delay={i * 140}>
              <div
                style={{
                  display: "grid",
                  gridTemplateColumns: isMobile ? "1fr" : "150px 1fr",
                  gap: isMobile ? 6 : 40,
                  alignItems: "start",
                  paddingLeft: isMobile ? 0 : i * 28,
                }}
              >
                <div
                  style={{
                    fontFamily: "'JetBrains Mono', monospace",
                    fontSize: 13,
                    letterSpacing: 2,
                    color: theme.accent,
                    fontWeight: 600,
                    paddingTop: 6,
                    whiteSpace: "nowrap",
                  }}
                >
                  step /{s.n}
                </div>
                <div>
                  <h4
                    style={{
                      fontFamily: "'Lexend', sans-serif",
                      fontSize: isMobile ? 20 : 26,
                      fontWeight: 600,
                      letterSpacing: -0.6,
                      margin: "0 0 10px 0",
                      color: theme.ink,
                      lineHeight: 1.15,
                    }}
                  >
                    {s.title}
                  </h4>
                  <p style={{ fontSize: 15.5, lineHeight: 1.6, color: theme.sub, margin: 0, maxWidth: 560 }}>
                    {s.body}
                  </p>
                </div>
              </div>
            </Reveal>
          ))}
        </div>
      </div>
    </Section>
  );
}

// ---------- COMPARISON — ledger rows ---------------------------

function ComparisonSection() {
  const theme = window.useActiveTheme();
  const { Section, Reveal } = window;
  const { isMobile } = window.useViewport();

  const rows = [
    {
      vs: "vs. public benchmarks",
      sub: "MMLU, HumanEval, and friends",
      body: "Public benchmarks measure generic capabilities. Shard measures your domain — your tone, your edge cases, your compliance bar — with rubrics you control.",
    },
    {
      vs: "vs. internal spreadsheets",
      sub: "The state of the art today",
      body: "Spreadsheets get lost. Shard tracks every score under a user ID, with versioned rubrics and an audit log. Hand it to an auditor without three weeks of cleanup.",
    },
    {
      vs: "vs. observability tools",
      sub: "Datadog, Langfuse, Helicone",
      body: "Observability tells you the model responded. Shard tells you whether the response was good — graded against a rubric, with evidence.",
    },
  ];

  return (
    <Section id="vs" padding="130px 0" mobilePadding="56px 0">
      <SectionHeader
        eyebrow="What makes it different"
        title="Three things"
        accentPart="other tools don't do"
        lede="Shard sits where existing tools stop. Each row below is a place teams currently improvise — and where the improvisation costs them at the next audit."
        isMobile={isMobile}
      />

      <div style={{ borderTop: `1.5px solid ${theme.accent}55` }}>
        {rows.map((c, i) => (
          <Reveal key={c.vs} delay={i * 110}>
            <div
              style={{
                display: "grid",
                gridTemplateColumns: isMobile ? "1fr" : "280px 1fr",
                gap: isMobile ? 10 : 56,
                padding: isMobile ? "24px 0" : "34px 0",
                borderBottom: `1px solid ${theme.cardBorder}`,
                alignItems: "baseline",
              }}
            >
              <div>
                <div
                  style={{
                    fontFamily: "'JetBrains Mono', monospace",
                    fontSize: 12,
                    letterSpacing: 1.4,
                    textTransform: "uppercase",
                    color: theme.accent,
                    fontWeight: 600,
                    marginBottom: 5,
                  }}
                >
                  {c.vs}
                </div>
                <div style={{ fontSize: 12.5, color: theme.mute, fontFamily: "'JetBrains Mono', monospace" }}>
                  {c.sub}
                </div>
              </div>
              <p style={{ fontSize: isMobile ? 15.5 : 17, lineHeight: 1.6, color: theme.ink, margin: 0, maxWidth: 640 }}>
                {c.body}
              </p>
            </div>
          </Reveal>
        ))}
      </div>
    </Section>
  );
}

window.SectionHeader = SectionHeader;
window.ProblemSection = ProblemSection;
window.WhatIsSection = WhatIsSection;
window.FeaturesSection = FeaturesSection;
window.PersonasSection = PersonasSection;
window.HowItWorks = HowItWorks;
window.ComparisonSection = ComparisonSection;
