// landing.jsx — Heartbeat Kit landing page

const { useEffect, useState } = React;

function App() {
  const t = { accent: 'cyan', density: 'regular', codeVariant: 'ts', showPulseGlow: true };

  return (
    <>
      <Nav current="home" />
      <Hero tweaks={t} />
      <FeatureRow />
      <HowItWorks />
      <DashboardSection />
      <EditorialBreak />
      <ChannelsGrid />
      <UseCases />
      <FinalCTA />
      <Footer />
    </>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Hero
function Hero({ tweaks }) {
  return (
    <section data-screen-label="01 Hero" style={{ padding: '56px 0 0', position: 'relative' }}>
      <div className="wrap">
        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1.05fr', gap: 64, alignItems: 'center' }}>
          <div className="col gap-28">
            {/* Annotation row */}
            <div style={{ display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>
              <span style={{
                display: 'inline-flex', alignItems: 'center', gap: 8,
                padding: '5px 11px', borderRadius: 999,
                background: 'rgba(0,228,168,0.08)',
                border: '1px solid rgba(0,228,168,0.25)',
                color: 'var(--cyan)',
                fontFamily: 'var(--f-mono)', fontSize: 11.5, fontWeight: 500,
                letterSpacing: '0.04em',
              }}>
                <span className="dot active" style={{ width: 6, height: 6 }} />
                v1.0 · public beta
              </span>
              <span style={{ color: 'var(--slate)', fontFamily: 'var(--f-mono)', fontSize: 11.5, letterSpacing: '0.04em' }}>
                ↳ now with MCP server for AI agents
              </span>
            </div>

            {/* Layered display headline */}
            <div className="col" style={{ gap: 4 }}>
              <h1 className="h-hero">
                <span style={{ color: 'var(--slate)' }}>If it goes</span>{' '}
                <em style={{ color: 'var(--sand)' }}>silent,</em>
              </h1>
              <h1 className="h-hero">
                we <span style={{ color: 'var(--cyan)' }}>respond</span><span style={{ color: 'var(--cyan)' }}>.</span>
              </h1>
              <div style={{
                display: 'flex', alignItems: 'center', gap: 10, marginTop: 14,
                fontFamily: 'var(--f-mono)', fontSize: 11.5,
                color: 'var(--slate)', letterSpacing: '0.06em',
              }}>
                <span style={{ width: 24, height: 1, background: 'var(--slate)', opacity: 0.4 }} />
                <span>[ heartbeat → miss → escalate → ack ]</span>
              </div>
            </div>

            {/* Lede — tighter, more concrete */}
            <p style={{
              fontSize: 17, lineHeight: 1.55, color: '#cfd0d6',
              maxWidth: '52ch', margin: 0,
            }}>
              A one-line API to monitor anything that runs on a schedule —
              cron jobs, AI agents, IoT devices, deploys.
              Miss a check-in, and an escalation fires:{' '}
              <span style={{ color: 'var(--sand)' }}>Slack, email, then an AI agent</span>{' '}
              that investigates on your behalf.
            </p>

            <div style={{ display: 'flex', gap: 10, flexWrap: 'wrap' }}>
              <a className="btn btn-primary" href="#">Start free</a>
              <a className="btn btn-secondary" href="docs.html">$ npm i @heartbeatkit/sdk</a>
            </div>

            {/* Stat row — ledger-style */}
            <div style={{
              display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)',
              gap: 0, marginTop: 8,
              borderTop: '1px solid rgba(255,255,255,0.07)',
              paddingTop: 18,
            }}>
              {[
                ['Cloudflare edge', '280+ regions, sub-second alerts'],
                ['Built-in AI', 'agent investigates when humans don\'t'],
                ['MCP-native', 'agents use it without an SDK'],
              ].map(([n, l], i) => (
                <div key={l} style={{
                  paddingLeft: i === 0 ? 0 : 20,
                  borderLeft: i === 0 ? 'none' : '1px solid rgba(255,255,255,0.07)',
                }}>
                  <div style={{
                    fontFamily: 'var(--f-display)', fontSize: 15, fontWeight: 500,
                    color: 'var(--sand)', letterSpacing: '-0.01em',
                  }}>{n}</div>
                  <div className="mono" style={{ fontSize: 11, color: 'var(--slate)', marginTop: 4, letterSpacing: '0.04em', lineHeight: 1.4 }}>{l}</div>
                </div>
              ))}
            </div>
          </div>

          {/* Right: code / terminal */}
          <HeroPanel variant={tweaks.codeVariant} />
        </div>
      </div>

      {/* Pulse line below the hero */}
      <div style={{ marginTop: 80, position: 'relative' }}>
        <PulseLine height={180} state="active" />
        <div style={{
          position: 'absolute', inset: 0,
          background: 'linear-gradient(180deg, transparent 0%, rgba(10,11,16,0) 50%, var(--navy) 100%)',
          pointerEvents: 'none',
        }} />
      </div>
    </section>
  );
}

function HeroPanel({ variant }) {
  if (variant === 'curl') {
    return (
      <Code label="terminal" lang="bash">
{`# Tell us your nightly backup ran
$ `}<span className="fn">curl</span>{` https://api.heartbeatkit.com/nightly-backup/checkin \\
    -H `}<span className="str">"Authorization: Bearer $HBK_KEY"</span>{`

`}<span className="com">{`{ "ok": true, "next_deadline": "tomorrow 03:30" }`}</span>
      </Code>
    );
  }
  if (variant === 'json') {
    return (
      <Code label="escalation policy" lang="json">
{`{
  `}<span className="prop">"name"</span>{`: `}<span className="str">"if-it-misses"</span>{`,
  `}<span className="prop">"steps"</span>{`: [
    { `}<span className="prop">"after"</span>{`: `}<span className="str">"0m"</span>{`,  `}<span className="prop">"do"</span>{`: `}<span className="str">"slack #ops"</span>{`  },
    { `}<span className="prop">"after"</span>{`: `}<span className="str">"5m"</span>{`,  `}<span className="prop">"do"</span>{`: `}<span className="str">"email on-call"</span>{` },
    { `}<span className="prop">"after"</span>{`: `}<span className="str">"15m"</span>{`, `}<span className="prop">"do"</span>{`: `}<span className="str">"page AI agent"</span>{` }
  ]
}`}
      </Code>
    );
  }
  // Default: TS — simple cron monitor
  return (
    <div className="col gap-16">
      <Code label="nightly-backup.ts" lang="typescript">
<span className="com">{`// Run every night at 3am. Tell us when it works.`}</span>{`
`}<span className="kw">import</span>{` { `}<span className="var">hbk</span>{` } `}<span className="kw">from</span>{` `}<span className="str">'@heartbeatkit/sdk'</span>{`

`}<span className="kw">await</span>{` `}<span className="fn">runBackup</span>{`()
`}<span className="kw">await</span>{` hbk.`}<span className="fn">checkin</span>{`(`}<span className="str">'nightly-backup'</span>{`)

`}<span className="com">{`// If we don't hear from you by 3:30am →`}</span>{`
`}<span className="com">{`//   1. ping #ops in Slack`}</span>{`
`}<span className="com">{`//   2. email the on-call engineer`}</span>{`
`}<span className="com">{`//   3. send an AI agent to investigate`}</span>
      </Code>
      <Terminal
        height={170}
        title="nightly-backup · live"
        lines={[
          { t: '03:00:00', tag: 'started',  text: 'cron triggered — backup running', delay: 600 },
          { t: '03:18:42', tag: 'ok',       text: 'backup finished, 4.2 GB → R2', tagBg: 'rgba(0,228,168,0.12)', tagColor: 'var(--cyan)', delay: 800 },
          { t: '03:18:43', tag: 'check-in', text: 'next deadline tomorrow 03:30', tagBg: 'rgba(0,228,168,0.12)', tagColor: 'var(--cyan)', delay: 1100 },
          { t: 'next day', tag: 'silence',  text: 'no check-in by 03:30 — escalating', tagBg: 'rgba(255,111,97,0.16)', tagColor: 'var(--coral)', color: '#ffd5cf', delay: 900 },
          { t: '03:30:01', tag: 'slack',    text: 'posted to #ops · awaiting ack', tagBg: 'rgba(158,195,255,0.12)', tagColor: '#9ec3ff', delay: 800 },
          { t: '03:30:14', tag: 'ack',      text: 'anya@ acknowledged — chain stopped', tagBg: 'rgba(0,228,168,0.12)', tagColor: 'var(--cyan)', delay: 1200 },
        ]}
      />
    </div>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Logos / problem strip
function FeatureRow() {
  const stats = [
    { n: 'Recurring', l: 'check in every N seconds' },
    { n: 'One-shot',  l: 'finish before this deadline' },
    { n: 'Scheduled', l: 'run by this wall-clock time' },
    { n: 'Conditional', l: '`{ healthy: false }` fires now' },
  ];
  return (
    <section style={{ padding: '24px 0 64px', borderTop: '1px solid rgba(255,255,255,0.05)', borderBottom: '1px solid rgba(255,255,255,0.05)' }}>
      <div className="wrap">
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 0 }}>
          {stats.map((s, i) => (
            <div key={i} style={{
              padding: '24px 28px',
              borderLeft: i === 0 ? 'none' : '1px solid rgba(255,255,255,0.06)',
            }}>
              <div style={{
                fontFamily: 'var(--f-display)',
                fontSize: 26, fontWeight: 500,
                letterSpacing: '-0.018em',
                color: 'var(--sand)',
                fontVariantNumeric: 'tabular-nums',
              }}>{s.n}</div>
              <div className="mono" style={{ fontSize: 12.5, color: 'var(--slate)', marginTop: 6 }}>{s.l}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// How it works — 4 steps
function HowItWorks() {
  const steps = [
    {
      n: '01',
      title: 'Define a heartbeat',
      desc: 'Name it, pick a mode, set an interval and grace window. Slug-addressable so your code stays readable.',
      code: `hbk.heartbeats.create({\n  name: 'order-processor',\n  mode: 'recurring',\n  interval: 60,\n  grace: 15,\n})`,
    },
    {
      n: '02',
      title: 'Check in from anywhere',
      desc: 'One HTTP call per check-in. SDKs for Node, Python, Go — or call the API directly. Attach metadata for audit + health rules.',
      code: `await hbk.checkin('order-processor', {\n  metadata: { processed: 142 }\n})`,
    },
    {
      n: '03',
      title: 'Miss a deadline',
      desc: 'A heartbeat goes silent. The timer fires. The escalation policy walks step-by-step — webhook first, email next, agent last — pausing for ack at each stage.',
      code: `// no check-in for 60s + 15s grace\n// → policy "critical" begins\n// → step 1: Slack #incidents`,
    },
    {
      n: '04',
      title: 'AI agent investigates',
      desc: 'No human ack? An autonomous agent reads logs, runs diagnostics, and either resolves the incident or hands off with a written summary.',
      code: `agent.run({\n  context: 'order-processor missed 3 deadlines',\n  tools: ['logs', 'metrics', 'rollback']\n})`,
    },
  ];
  return (
    <section data-screen-label="02 How it works">
      <div className="wrap">
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', marginBottom: 64, gap: 32 }}>
          <div>
            <div className="eyebrow" style={{ marginBottom: 16 }}>How it works</div>
            <h2 className="h-section">
              The <span style={{ color: 'var(--cyan)' }}>try / finally</span> for distributed systems.
            </h2>
          </div>
          <p className="lede" style={{ maxWidth: 420 }}>
            Four steps. The whole product. No agents to install, no infrastructure to run, no cron jobs to babysit.
          </p>
        </div>

        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 24 }}>
          {steps.map((s, i) => (
            <div key={s.n} style={{
              background: 'var(--navy-2)',
              border: '1px solid var(--border-soft)',
              borderRadius: 14,
              padding: 32,
              display: 'flex', flexDirection: 'column', gap: 20,
              minHeight: 320,
            }}>
              <div style={{ display: 'flex', alignItems: 'baseline', gap: 16 }}>
                <span style={{
                  fontFamily: 'var(--f-mono)', fontSize: 14,
                  color: 'var(--cyan)', fontWeight: 600,
                }}>{s.n}</span>
                <h3 className="h-card">{s.title}</h3>
              </div>
              <p className="muted" style={{ margin: 0, fontSize: 15.5, lineHeight: 1.55 }}>{s.desc}</p>
              <pre style={{
                margin: 0, marginTop: 'auto',
                background: '#06070b',
                border: '1px solid var(--border)',
                borderRadius: 8,
                padding: '14px 16px',
                fontFamily: 'var(--f-mono)',
                fontSize: 13, lineHeight: 1.6,
                color: '#cdd0d8',
                overflow: 'hidden',
              }}>{s.code}</pre>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Dashboard preview
function DashboardSection() {
  return (
    <section data-screen-label="03 Dashboard">
      <div className="wrap">
        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1.4fr', gap: 56, alignItems: 'center', marginBottom: 56 }}>
          <div>
            <div className="eyebrow" style={{ marginBottom: 16 }}>Fleet view</div>
            <h2 className="h-section">Watch every promise<br />in one place.</h2>
          </div>
          <p className="lede">
            Real-time WebSocket pushes every check-in, every miss, every ack to your dashboard. Filter by namespace,
            slice by status, audit any heartbeat back to the second it was created. Group AI agents, cron jobs,
            and IoT fleets side by side.
          </p>
        </div>
        <DashboardMock />

        <div style={{
          display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 16, marginTop: 24,
        }}>
          {[
            { l: 'Latest check-in', v: 'agent-research-7', sub: '2s ago · processed 412' },
            { l: 'Active escalation', v: 'embed-worker', sub: 'step 1 → Slack · awaiting ack' },
            { l: 'Acknowledged', v: 'deploy-canary', sub: 'by anya@ · 14:01:08' },
          ].map((c, i) => (
            <div key={i} style={{
              background: 'var(--navy-2)',
              border: '1px solid var(--border-soft)',
              borderRadius: 12,
              padding: '18px 22px',
            }}>
              <div className="eyebrow" style={{ fontSize: 11 }}>{c.l}</div>
              <div className="mono" style={{ fontSize: 16, color: 'var(--sand)', marginTop: 8, fontWeight: 500 }}>{c.v}</div>
              <div className="mono" style={{ fontSize: 12, color: 'var(--slate)', marginTop: 4 }}>{c.sub}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Editorial break — sand background, escalation flow + manifesto pullquote
function EditorialBreak() {
  return (
    <section className="editorial" data-screen-label="04 Escalation" style={{ padding: '120px 0' }}>
      <div className="wrap">
        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 80, alignItems: 'center' }}>
          <div className="col gap-24">
            <div className="eyebrow">Escalation policies</div>
            <h2 className="h-section" style={{ color: 'var(--navy)' }}>
              Silence is not<br />a strategy.
            </h2>
            <p className="lede" style={{ color: '#2a2b30' }}>
              Every escalation policy is a chain of channels with delays and ack requirements. Webhook fires first.
              If nobody acknowledges in 5 minutes, an email goes out. Still nothing? An autonomous agent takes the wheel.
            </p>
            <div className="col gap-12" style={{ marginTop: 12 }}>
              {[
                ['Webhook', 'HMAC-signed POST to any URL — Slack, Discord, PagerDuty, custom.'],
                ['Email', 'Native Cloudflare email — zero config, instant delivery.'],
                ['WebSocket', 'Real-time push to dashboards and connected agents.'],
                ['AI agent', 'Investigates, acts, reports back. Configurable tools.'],
              ].map(([t, d]) => (
                <div key={t} style={{
                  display: 'grid', gridTemplateColumns: '120px 1fr',
                  padding: '14px 0',
                  borderTop: '1px solid rgba(0,0,0,0.08)',
                  fontSize: 15,
                }}>
                  <span style={{ fontWeight: 600, color: 'var(--navy)' }}>{t}</span>
                  <span style={{ color: '#5b5d63' }}>{d}</span>
                </div>
              ))}
            </div>
          </div>
          <EscalationFlow />
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Channels grid — small product surfaces
function ChannelsGrid() {
  const items = [
    { tag: 'MCP-native', title: 'Agents discover us by themselves.',
      body: 'Heartbeat Kit ships a Model Context Protocol server. Any MCP-aware agent gets the full API as tools — no SDK install, no glue code. The agent decides when to start a heartbeat, when to check in, when to ack.',
      mono: 'tools/list → 12 heartbeat tools' },
    { tag: 'Health rules', title: 'Conditions on the metadata.',
      body: 'Use json-rules-engine to write conditions on every check-in. "Accept the check-in, but if spend > $500, fire anyway." "Pass if processed > 100, otherwise mark unhealthy."',
      mono: 'if spend > 500 → fire' },
    { tag: 'Slug addressing', title: 'Readable URLs, not opaque IDs.',
      body: 'POST /heartbeats/order-processor/checkin instead of /heartbeats/hb_8fka2x9z/checkin. Your code reads like English. Your dashboards filter by name. Your incidents page makes sense.',
      mono: '/heartbeats/order-processor' },
    { tag: 'Conditional check-in', title: 'Tell us you\'re unhealthy.',
      body: 'Pass { healthy: false } to fire the escalation immediately. No need to wait for the next deadline — surface failures the moment your code knows about them.',
      mono: '{ healthy: false } → fires now' },
  ];
  return (
    <section data-screen-label="05 Capabilities">
      <div className="wrap">
        <div style={{ marginBottom: 64, maxWidth: 720 }}>
          <div className="eyebrow" style={{ marginBottom: 16 }}>What's in the box</div>
          <h2 className="h-section">Production-grade timers, <em>without the on-call burden.</em></h2>
          <p className="lede" style={{ marginTop: 20 }}>
            Distributed timers with multi-step escalation, ack tracking, and built-in
            AI response — running on Cloudflare's edge so it stays up when your infra doesn't.
          </p>
        </div>
        <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 1, background: 'var(--border-soft)', border: '1px solid var(--border-soft)', borderRadius: 14, overflow: 'hidden' }}>
          {items.map((it, i) => (
            <div key={i} style={{
              background: 'var(--navy)',
              padding: '40px 36px',
              minHeight: 240,
              display: 'flex', flexDirection: 'column', gap: 16,
            }}>
              <div style={{
                display: 'inline-block', alignSelf: 'flex-start',
                fontFamily: 'var(--f-mono)', fontSize: 11, padding: '4px 10px',
                borderRadius: 999, background: 'rgba(0,228,168,0.08)',
                color: 'var(--cyan)', fontWeight: 600,
                letterSpacing: '0.06em', textTransform: 'uppercase',
              }}>{it.tag}</div>
              <h3 className="h-card" style={{ fontSize: 26, lineHeight: 1.15, maxWidth: 22 + 'ch' }}>{it.title}</h3>
              <p className="muted" style={{ margin: 0, fontSize: 15.5 }}>{it.body}</p>
              <span className="mono" style={{
                marginTop: 'auto', fontSize: 12.5,
                color: 'var(--slate)', padding: '8px 12px',
                background: '#06070b', borderRadius: 6,
                border: '1px solid var(--border)',
                alignSelf: 'flex-start',
              }}>{it.mono}</span>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Use cases
function UseCases() {
  const cases = [
    { name: 'AgentGuard',     line: 'Monitor your AI agent fleet in real-time',         tag: 'AI startups' },
    { name: 'CronSafe',       line: 'Add one curl to verify any cron job ran',          tag: 'Every developer' },
    { name: 'DeployGuard',    line: 'Auto-rollback when deploys fail health checks',    tag: 'DevOps teams' },
    { name: 'SafeCheck',      line: 'Lone worker check-in with family escalation',      tag: 'Construction · field service' },
    { name: 'ElderPing',      line: 'Daily check-in for aging parents',                 tag: 'Families · care' },
    { name: 'ContractKeeper', line: 'Enforce SLA contracts between API partners',       tag: 'B2B platforms' },
    { name: 'SubWatch',       line: 'Trigger win-back flows on subscriber inactivity',  tag: 'SaaS' },
    { name: 'PaymentGuard',   line: 'Intelligent payment retry with escalating dunning',tag: 'Subscriptions' },
    { name: 'FleetPulse',     line: 'Heartbeat monitoring for IoT device fleets',       tag: 'IoT' },
  ];
  return (
    <section data-screen-label="06 Use cases" style={{ padding: '96px 0' }}>
      <div className="wrap">
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', marginBottom: 48, gap: 32 }}>
          <h2 className="h-section">Anywhere a system<br />can go silent.</h2>
          <span className="mono" style={{ color: 'var(--slate)', fontSize: 13 }}>09 use cases · 1 primitive</span>
        </div>
        <div style={{
          display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)',
          borderTop: '1px solid var(--border-soft)',
          borderLeft: '1px solid var(--border-soft)',
        }}>
          {cases.map((c, i) => (
            <div key={c.name} style={{
              padding: '32px 28px',
              borderRight: '1px solid var(--border-soft)',
              borderBottom: '1px solid var(--border-soft)',
              transition: 'background 200ms',
              cursor: 'default',
              background: 'var(--navy)',
            }}
            onMouseEnter={e => e.currentTarget.style.background = 'var(--navy-2)'}
            onMouseLeave={e => e.currentTarget.style.background = 'var(--navy)'}
            >
              <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 12 }}>
                <span className="dot active" style={{ width: 6, height: 6 }} />
                <span className="mono" style={{ fontSize: 12, color: 'var(--slate)' }}>{c.tag}</span>
              </div>
              <h3 className="h-card" style={{ fontSize: 22, marginBottom: 8 }}>{c.name}</h3>
              <p style={{ margin: 0, color: '#cfd0d6', fontSize: 14.5 }}>{c.line}</p>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ─────────────────────────────────────────────────────────────────────────────
// Final CTA
function FinalCTA() {
  return (
    <section data-screen-label="07 CTA" style={{ padding: '120px 0', position: 'relative', overflow: 'hidden' }}>
      <div style={{
        position: 'absolute', inset: 0, opacity: 0.5,
        maskImage: 'radial-gradient(ellipse at center, black 30%, transparent 70%)',
        WebkitMaskImage: 'radial-gradient(ellipse at center, black 30%, transparent 70%)',
      }}>
        <PulseLine height={420} state="active" />
      </div>
      <div className="wrap" style={{ position: 'relative', textAlign: 'center' }}>
        <div className="eyebrow" style={{ marginBottom: 18 }}>Ready when you are</div>
        <h2 className="h-display" style={{ fontSize: 'clamp(40px, 5vw, 68px)', maxWidth: 16 + 'ch', margin: '0 auto 24px' }}>
          Check in, or<br />
          we'll <em style={{ fontStyle: 'italic', color: 'var(--coral)' }}>check on you.</em>
        </h2>
        <p style={{ fontSize: 16, lineHeight: 1.5, color: '#cfd0d6', maxWidth: '50ch', margin: '0 auto 32px' }}>
          5 free heartbeats. No credit card. Two-minute setup.
        </p>
        <div style={{ display: 'flex', gap: 12, justifyContent: 'center', flexWrap: 'wrap' }}>
          <a className="btn btn-primary" href="#">Start free →</a>
          <a className="btn btn-secondary" href="docs.html">Read the docs</a>
        </div>
        <div style={{ marginTop: 28, fontFamily: 'var(--f-mono)', fontSize: 13, color: 'var(--slate)' }}>
          npm i @heartbeatkit/sdk · also on Cloudflare Workers, Bun, Deno
        </div>
      </div>
    </section>
  );
}

// Mount
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
