// Klombic — Static page contents

const HowItWorks = ({ go }) => {
  const steps = [
    {
      n:"01", t:"Pick mode + plan", time:"~30 sec",
      d:"Choose how to fill your slots, then pick how many slots to fill.",
      bubbles: [
        { k:"Mode", v:"Validate names you bring · generate from a brief · or mix the two." },
        { k:"Plan", v:"3 candidates at $9.99 · 5 at $13.99 · 10 at $19.99 — Quick covers core safety checks; Starter adds distinctiveness analysis; Premium adds the deep-dive due diligence on your top pick." },
        { k:"Why it matters", v:"Mode determines the input we collect. Plan determines breadth — bigger batch = better odds one clears every constraint." },
      ],
    },
    {
      n:"02", t:"Set constraints", time:"~1 min",
      d:"Set the hard rules each candidate has to satisfy. Two knobs today; more on the roadmap.",
      bubbles: [
        { k:"TLDs", v:".com / .io / .app / .dev / .co / .ai / .xyz / .so — right-click any to mark required. We won't recommend a name unless every required TLD is free." },
        { k:"Shopify slug", v:"On or off. If on, we check apps.shopify.com/<slug> for collisions. Useful if you're shipping a Shopify app." },
        { k:"Roadmap", v:"USPTO class picker, additional marketplace-handle checks (Amazon / eBay / Etsy / TikTok / Walmart / App Store / Play Store), and a configurable cross-language scan tier. Today's defaults are USPTO class 042 (SaaS) and a 15-language scan." },
      ],
    },
    {
      n:"03", t:"Pick the brand voice", time:"~30 sec",
      d:"Tell us the personality you're aiming for. We weight the final ranking accordingly.",
      bubbles: [
        { k:"Modern",     v:"Linear · Stripe · Plausible — clean, minimal, technical." },
        { k:"Industrial", v:"Granite · Slate · Cobalt — solid, durable, weighty." },
        { k:"Scientific", v:"Anthropic · Hex · Retool — research-flavored, careful." },
        { k:"Heritage",   v:"Atlas · Hermes · Janus — classical, timeless, reverent." },
        { k:"Friendly",   v:"Bench · Plaza · Common — approachable, communal." },
        { k:"Playful",    v:"Notion · Figma · Loom — short, twisty, memorable." },
        { k:"Compound",   v:"Postmark · Linkfire · Datadog — two real morphemes blended (structural choice, not a vibe)." },
        { k:"Coined",     v:"Vercel · Klombic · Resend — fully invented, no extant root (strongest trademark posture)." },
      ],
    },
    {
      n:"04", t:"We run the checks for your tier", time:"~3 hr",
      d:"Three tiers, each layering more depth. No upsells, no surprises — exactly what's listed runs:",
      bullets: [
        "Quick · USPTO TESS exact-string scrape (live + dead counts)",
        "Quick · Domain availability across every TLD you flagged",
        "Quick · Handles + dev namespaces + app stores (14 platform probes)",
        "Quick · Sound-symbolism + memorability + pronounceability",
        "Quick · Cross-language collision scan (15+ languages)",
        "Quick · TM-extension exposure in adjacent IC classes",
        "Quick · Shopify slug check",
        "Starter · everything in Quick, PLUS Term-strength / Abercrombie distinctiveness",
        "Premium · everything in Starter, PLUS Focused per-language scan on top winner — re-runs across 23 languages TWICE and only flags meanings that replicate (suppresses one-off model errors)",
        "Premium · Phonetic-similar § 2(d) TESS sweep on top winner",
        "Premium · Common-law / web-presence sweep",
        "Premium · Full TSDR per-mark records (owner, attorney, dates, G&S)",
      ],
      bubbles: [
        { k:"USPTO trademark", v:"We pull Live and Dead exact-string counts directly from the USPTO's public trademark database, then enrich every cited mark with the full TSDR record (owner, attorney, dates, goods/services). Same data the examiners look at." },
        { k:"Domain availability", v:"Real-time prices and availability across the TLDs you picked. Live registry feed, not a stale cache." },
        { k:"Handles + namespaces", v:"Parallel probes across 14 platforms — GitHub, npm, PyPI, crates.io, Docker Hub, RubyGems, Shopify Apps, Chrome Web Store, X, Instagram, TikTok, YouTube, LinkedIn, Threads, Reddit." },
        { k:"Sound feel", v:"How the name lands when spoken — light vs heavy, sharp vs soft, friendly vs serious. Based on published phoneme research (Klink 2000)." },
        { k:"Memorability", v:"How easy the name is to remember and repeat. Length fit, distinctive opening letter, vowel-consonant balance. Sourced to peer-reviewed work (Miller 1956, Lowrey-Shrum 2007)." },
        { k:"Cross-language", v:"We use AI to check if the name is slang, a false friend, or offensive in 15+ major languages. Flagged collisions show up by severity in the report." },
        { k:"Term-strength", v:"Each morpheme of the candidate is decomposed and scored on the Abercrombie/Lanham distinctiveness spectrum (Generic → Descriptive → Suggestive → Arbitrary → Fanciful), with USPTO disclaimer-likelihood flags." },
        { k:"TM-extension risk", v:"Likelihood-of-confusion screening across IC classes adjacent to your filing class — flags exposure if you later expand into related goods or services." },
      ],
    },
    {
      n:"05", t:"You get the PDF", time:"≤ 24 hr",
      d:"One file in your inbox. Verdict per name, side-by-side comparison, the one we'd file.",
      bubbles: [
        { k:"Cover", v:"Name list, report ID, top-recommendation summary at a glance." },
        { k:"Visual comparison", v:"Sound-symbolism vibe space + memorability × pronounceability charts. All N candidates plotted." },
        { k:"Per-name analysis", v:"Detail card for each candidate: USPTO, domains, Shopify, vibe, memorability, cross-language flags." },
        { k:"Verdict + action plan", v:"The single name we'd file (or escalate), with registration sequence and TESS due-diligence link." },
      ],
    },
  ];

  // MANUAL navigation — user controls advance with Next / Back / clicks.
  const [active, setActive] = React.useState(0);
  const cur = steps[active];
  const goNext = () => setActive(a => Math.min(steps.length - 1, a + 1));
  const goBack = () => setActive(a => Math.max(0, a - 1));

  return (
    <section className="section">
      <div className="page">
        <div className="section-label">How it works</div>
        <div className="sh">
          <h2>Within 24 hours, end to end.</h2>
          <div className="right">I built Klombic because I spent two weeks doing this by hand before a previous launch. The tooling exists — nobody had stitched it into one cheap pass. So I did.</div>
        </div>

        {/* Decision flowchart — shows the branching at mode pick, then linear path to PDF */}
        <div className="how-flow">
          <svg viewBox="0 0 1180 280" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Klombic order flow chart">
            {/* defs */}
            <defs>
              <marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
                <path d="M0,0 L10,5 L0,10 z" fill="#1F4E3D"/>
              </marker>
              <style>{`
                .flow-node{fill:#FAFAFA;stroke:#D8D4CB;stroke-width:1}
                .flow-node-mode{fill:#F3F0E9}
                .flow-node-active{fill:#1F4E3D;stroke:#1F4E3D}
                .flow-text{font:500 12px/1 "Inter Tight",-apple-system,system-ui,sans-serif;fill:#1A1A1A}
                .flow-text-paper{fill:#FAFAFA}
                .flow-mono{font:500 10px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:0.06em;text-transform:uppercase;fill:#8A8780}
                .flow-mode-letter{font:600 14px/1 "JetBrains Mono",ui-monospace,monospace;fill:#FAFAFA}
                .flow-line{stroke:#1F4E3D;stroke-width:1.5;fill:none}
                .flow-line-dashed{stroke:#1F4E3D;stroke-width:1.5;fill:none;stroke-dasharray:4 4}
              `}</style>
            </defs>

            {/* Decision node: What do you have? */}
            <rect className="flow-node" x="20" y="116" width="150" height="48" rx="4"/>
            <text className="flow-mono" x="32" y="134">DECISION</text>
            <text className="flow-text" x="32" y="152">What do you have?</text>

            {/* Three branches converging */}
            <path className="flow-line" d="M 170 132 C 200 132, 200 50, 230 50" markerEnd="url(#arr)"/>
            <path className="flow-line" d="M 170 140 L 230 140" markerEnd="url(#arr)"/>
            <path className="flow-line" d="M 170 148 C 200 148, 200 230, 230 230" markerEnd="url(#arr)"/>

            {/* Mode A · Validate */}
            <g>
              <rect className="flow-node-active" x="240" y="26" width="180" height="48" rx="4"/>
              <circle cx="262" cy="50" r="11" fill="#FAFAFA"/>
              <text className="flow-mode-letter" style={{fill:'#1F4E3D'}} x="262" y="54" textAnchor="middle">A</text>
              <text className="flow-text-paper" style={{fontWeight:600}} x="280" y="46">Names ready</text>
              <text className="flow-text-paper" style={{fontSize:11,opacity:0.85}} x="280" y="62">You give us 3 / 5 / 10</text>
            </g>

            {/* Mode B · Generate */}
            <g>
              <rect className="flow-node-active" x="240" y="116" width="180" height="48" rx="4"/>
              <circle cx="262" cy="140" r="11" fill="#FAFAFA"/>
              <text className="flow-mode-letter" style={{fill:'#1F4E3D'}} x="262" y="144" textAnchor="middle">B</text>
              <text className="flow-text-paper" style={{fontWeight:600}} x="280" y="136">Need names</text>
              <text className="flow-text-paper" style={{fontSize:11,opacity:0.85}} x="280" y="152">You write a brief</text>
            </g>

            {/* Mode C · Hybrid */}
            <g>
              <rect className="flow-node-active" x="240" y="206" width="180" height="48" rx="4"/>
              <circle cx="262" cy="230" r="11" fill="#FAFAFA"/>
              <text className="flow-mode-letter" style={{fill:'#1F4E3D'}} x="262" y="234" textAnchor="middle">C</text>
              <text className="flow-text-paper" style={{fontWeight:600}} x="280" y="226">A mix</text>
              <text className="flow-text-paper" style={{fontSize:11,opacity:0.85}} x="280" y="242">You give 1 to N−1, AI fills</text>
            </g>

            {/* Converge into Constraints */}
            <path className="flow-line" d="M 420 50 C 450 50, 450 132, 480 132" markerEnd="url(#arr)"/>
            <path className="flow-line" d="M 420 140 L 480 140" markerEnd="url(#arr)"/>
            <path className="flow-line" d="M 420 230 C 450 230, 450 148, 480 148" markerEnd="url(#arr)"/>

            {/* Step: Constraints */}
            <rect className="flow-node" x="490" y="116" width="120" height="48" rx="4"/>
            <text className="flow-mono" x="500" y="134">STEP 02</text>
            <text className="flow-text" x="500" y="152">Constraints</text>

            <line className="flow-line" x1="610" y1="140" x2="640" y2="140" markerEnd="url(#arr)"/>

            {/* Step: Archetype */}
            <rect className="flow-node" x="640" y="116" width="120" height="48" rx="4"/>
            <text className="flow-mono" x="650" y="134">STEP 03</text>
            <text className="flow-text" x="650" y="152">Archetype</text>

            <line className="flow-line" x1="760" y1="140" x2="790" y2="140" markerEnd="url(#arr)"/>

            {/* Step: Tier-graduated checks (highlighted action). Box width
                180px at x=790 — text must fit within ~165px usable area at
                the current font sizes. Earlier copy "Eight checks per
                candidate" (25 chars at 14px) overflowed; replaced with
                shorter, tier-aware copy that matches the rest of the site. */}
            <rect className="flow-node-active" x="790" y="106" width="180" height="68" rx="4"/>
            <text className="flow-mono" style={{fill:'rgba(250,250,250,0.7)'}} x="804" y="126">PROCESSING · ~3 HR</text>
            <text className="flow-text-paper" style={{fontWeight:600,fontSize:13}} x="804" y="148">Tier-graduated checks</text>
            <text className="flow-text-paper" style={{fontSize:10,opacity:0.85}} x="804" y="164">7 to 12 per candidate</text>

            <line className="flow-line" x1="970" y1="140" x2="1000" y2="140" markerEnd="url(#arr)"/>

            {/* Output: PDF */}
            <rect className="flow-node" x="1000" y="116" width="160" height="48" rx="4"/>
            <text className="flow-mono" x="1014" y="134">OUTPUT · ≤ 24 HR</text>
            <text className="flow-text" x="1014" y="152">Ranked PDF · email</text>

            {/* "You are here" highlight — moves to whichever node corresponds to the active step */}
            {(() => {
              const positions = [
                { x: 12,  y: 18,  w: 416, h: 244, label: "01 · You are here" }, // Decision + Mode A/B/C
                { x: 482, y: 110, w: 136, h: 60,  label: "02 · You are here" }, // Constraints
                { x: 632, y: 110, w: 136, h: 60,  label: "03 · You are here" }, // Archetype
                { x: 782, y: 98,  w: 196, h: 84,  label: "04 · You are here" }, // Eight-check pass
                { x: 992, y: 110, w: 176, h: 60,  label: "05 · You are here" }, // Output
              ];
              const p = positions[active];
              return (
                <g className="flow-highlight-group">
                  <rect className="flow-highlight"
                    x={p.x} y={p.y} width={p.w} height={p.h}
                    rx="8" fill="none" stroke="#1F4E3D" strokeWidth="3"
                    strokeDasharray="8 6"/>
                  <rect x={p.x} y={p.y - 18} width={140} height={16} rx="3" fill="#1F4E3D"/>
                  <text x={p.x + 8} y={p.y - 6}
                    style={{fill:'#FAFAFA', font:'600 9px/1 "JetBrains Mono",ui-monospace,monospace', letterSpacing:'0.08em', textTransform:'uppercase'}}>
                    {p.label}
                  </text>
                </g>
              );
            })()}
          </svg>

          {/* Mobile-only vertical flow — phone-shaped layout of the same
              content. The SVG above is hidden on mobile via .flow-grid /
              .flow-svg display:none rules; this stacked version shows in
              its place. Single column, top-to-bottom flow with explicit
              ↓ separators. Designed for ≤640px viewports. */}
          <div className="how-flow-mobile" aria-hidden="false">
            <div className="hfm-step">
              <div className="hfm-tag">DECISION</div>
              <div className="hfm-title">What do you have?</div>
            </div>
            <div className="hfm-arrow">↓</div>
            <div className="hfm-modes">
              <div className="hfm-mode">
                <span className="hfm-letter">A</span>
                <div>
                  <div className="hfm-mode-title">Names ready</div>
                  <div className="hfm-mode-sub">You give us 3 / 5 / 10 names</div>
                </div>
              </div>
              <div className="hfm-mode">
                <span className="hfm-letter">B</span>
                <div>
                  <div className="hfm-mode-title">Need names</div>
                  <div className="hfm-mode-sub">You write a brief, we generate</div>
                </div>
              </div>
              <div className="hfm-mode">
                <span className="hfm-letter">C</span>
                <div>
                  <div className="hfm-mode-title">A mix</div>
                  <div className="hfm-mode-sub">You give 1 to N−1, AI fills</div>
                </div>
              </div>
            </div>
            <div className="hfm-arrow">↓</div>
            <div className="hfm-step">
              <div className="hfm-tag">STEP 02</div>
              <div className="hfm-title">Constraints</div>
            </div>
            <div className="hfm-arrow">↓</div>
            <div className="hfm-step">
              <div className="hfm-tag">STEP 03</div>
              <div className="hfm-title">Brand voice</div>
            </div>
            <div className="hfm-arrow">↓</div>
            <div className="hfm-step hfm-step-active">
              <div className="hfm-tag">PROCESSING · ~3 HR</div>
              <div className="hfm-title">Tier-graduated checks</div>
              <div className="hfm-sub">7 to 12 per candidate</div>
            </div>
            <div className="hfm-arrow">↓</div>
            <div className="hfm-step">
              <div className="hfm-tag">OUTPUT · ≤ 24 HR</div>
              <div className="hfm-title">Ranked PDF · email</div>
            </div>
          </div>
        </div>

        {/* Animated progress bar above the grid */}
        <div className="how-progress">
          <div className="how-progress-track">
            <div className="how-progress-fill" style={{width: `${((active+1)/steps.length)*100}%`}}/>
          </div>
          <div className="how-progress-ticks">
            {steps.map((s, i) => (
              <span key={i} className={`tick ${i<=active?'on':''}`}>{s.n}</span>
            ))}
          </div>
        </div>

        <div className="how-grid">
          {steps.map((s, i) => (
            <div
              className={`how-step ${i===active?'active':''} ${i<active?'done':''}`}
              key={s.n}
              onClick={()=>setActive(i)}
              role="button"
              tabIndex={0}>
              <span className="num">{i<active ? '✓' : s.n}</span>
              <h3>{s.t}</h3>
              <p className="desc">{s.d}</p>
              <span className="time">{s.time}</span>
            </div>
          ))}
        </div>

        {/* Detail panel · what's in the active step (bubbles) */}
        <div className="how-detail">
          <div className="how-detail-head">
            <span className="how-detail-num">{cur.n}</span>
            <div>
              <h3>{cur.t}</h3>
              <span className="how-detail-time">{cur.time} · step {active+1} of {steps.length}</span>
            </div>
          </div>

          {/* Optional bullet list — used when the step has a clear enumerable list (e.g. the 8 checks) */}
          <p className="how-detail-lede">{cur.d}</p>
          {cur.bullets && (
            <ul className="how-detail-bullets">
              {cur.bullets.map((b, i) => (
                <li key={i}><span className="bullet-dot"/>{b}</li>
              ))}
            </ul>
          )}

          <div className="how-bubbles">
            {cur.bubbles.map((b, i) => (
              <div className="how-bubble" key={i}>
                <h4>{b.k}</h4>
                <p>{b.v}</p>
              </div>
            ))}
          </div>
          <div className="how-detail-nav">
            <button className="how-nav-btn" onClick={goBack} disabled={active===0}>← Back</button>
            <div className="how-detail-counter">
              {steps.map((_, i) => (
                <span key={i} className={`how-counter-dot ${i===active?'on':''} ${i<active?'done':''}`} aria-hidden="true"/>
              ))}
            </div>
            <button className="how-nav-btn primary" onClick={goNext} disabled={active===steps.length-1}>
              {active===steps.length-1 ? 'Done' : 'Next →'}
            </button>
          </div>
        </div>

        <div style={{marginTop:48,display:'flex',gap:16}}>
          <a className="btn btn-primary" href="#" onClick={(e)=>{e.preventDefault();go('order')}}>Run a check ↗</a>
          <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('sample')}}>See a sample report</a>
        </div>
      </div>
    </section>
  );
};

const SampleReport = ({ go }) => {
  const containerRef = React.useRef(null);
  const [status, setStatus] = React.useState('loading');

  React.useEffect(() => {
    let cancelled = false;
    const render = async () => {
      let tries = 0;
      while (!window.pdfjsLib && tries < 50) {
        await new Promise(r => setTimeout(r, 100));
        tries++;
      }
      if (!window.pdfjsLib) { setStatus('error'); return; }
      try {
        const pdf = await window.pdfjsLib.getDocument('/sample-report.pdf').promise;
        if (cancelled || !containerRef.current) return;
        const container = containerRef.current;
        container.innerHTML = '';
        const dpr = Math.min(window.devicePixelRatio || 1, 2);
        const baseScale = 1.4;
        for (let i = 1; i <= pdf.numPages; i++) {
          if (cancelled) return;
          const page = await pdf.getPage(i);
          const viewport = page.getViewport({ scale: baseScale * dpr });
          // Wrap each page in a frame so we can show clear page-cut separators + page #
          const frame = document.createElement('div');
          frame.className = 'pdfjs-page-frame';
          const canvas = document.createElement('canvas');
          canvas.width = viewport.width;
          canvas.height = viewport.height;
          canvas.className = 'pdfjs-page';
          canvas.style.width = (viewport.width / dpr) + 'px';
          canvas.style.height = (viewport.height / dpr) + 'px';
          const label = document.createElement('div');
          label.className = 'pdfjs-page-label';
          label.textContent = `${String(i).padStart(2,'0')} / ${String(pdf.numPages).padStart(2,'0')}`;
          frame.appendChild(canvas);
          frame.appendChild(label);
          container.appendChild(frame);
          await page.render({ canvasContext: canvas.getContext('2d'), viewport }).promise;
        }
        if (!cancelled) setStatus('ready');
      } catch (e) {
        console.error('PDF render failed', e);
        if (!cancelled) setStatus('error');
      }
    };
    render();
    return () => { cancelled = true; };
  }, []);

  return (
  <section className="sample-page">
    <div className="page">
      <div className="section-label">Sample report</div>
      <div className="sh">
        <h2>This is the actual deliverable.</h2>
        <div className="right">No mock-up — the real PDF Klombic generated when we used it on ourselves to pick the brand name. Top 10 candidates, all checks live. <a href="/sample-report.pdf" target="_blank" style={{color:'var(--forest)',fontWeight:500}}>Download the PDF →</a></div>
      </div>

      {/* Real PDF rendered via PDF.js — all pages stacked with clear page-cut separators */}
      <div className="sample-pdfjs">
        {status === 'loading' && (
          <div className="pdfjs-status"><span className="pdfjs-spinner"/> Loading the real report…</div>
        )}
        {status === 'error' && (
          <div className="pdfjs-status pdfjs-error">
            Couldn't render inline. <a href="/sample-report.pdf" target="_blank">Download the PDF instead →</a>
          </div>
        )}
        <div ref={containerRef} className="pdfjs-container"/>
      </div>

      <div className="sample-grid" style={{display:'none'}}>
        <aside className="sample-toc">
          <h5>Contents</h5>
          <a href="#p1">Cover<span>01</span></a>
          <a href="#p2">USPTO + domains<span>02</span></a>
          <a href="#p3">Shopify + slugs<span>03</span></a>
          <a href="#p4">Sound &amp; memory<span>04</span></a>
          <a href="#p5">Cross-language<span>05</span></a>
          <a href="#p6">Verdict<span>06</span></a>
        </aside>
        <div className="sample-pdf">
          <div className="pdf-page cover" id="p1">
            <div className="top"><KlombicMark size={32} variant="paper"/><span style={{fontSize:24,fontWeight:500,letterSpacing:'-0.02em'}}>Klombic</span></div>
            <div>
              <div className="name">CANDIDATE / klombic</div>
              <h2>Brand-name<br/>due-diligence report</h2>
              <p style={{fontSize:14,lineHeight:1.6,color:'rgba(255,255,255,0.75)',margin:'24px 0 0',maxWidth:380}}>USPTO · multi-TLD domain · Shopify slug · sound-symbolism · memorability · cross-language collision.</p>
            </div>
            <div className="footer"><span>Report #2026-0427-K01</span><span>Issued 4h after order · 27 Apr 2026</span></div>
          </div>

          <div className="pdf-page" id="p2">
            <div className="ph"><div style={{display:'flex',alignItems:'center',gap:10}}><KlombicMark size={22}/><span className="wm">Klombic</span></div><span className="mono">CANDIDATE · klombic</span></div>
            <h3 className="kicker">USPTO live marks</h3>
            <div className="row"><span>Class 9 · downloadable software</span><b className="ok">CLEAR</b></div>
            <div className="row"><span>Class 35 · business services</span><b className="ok">CLEAR</b></div>
            <div className="row"><span>Class 42 · SaaS</span><b className="ok">CLEAR</b></div>
            <div className="row"><span>Pending applications (last 90 days)</span><b className="ok">NONE</b></div>
            <h3 className="kicker">Domain availability</h3>
            <div className="row"><span>klombic.com</span><b className="no">TAKEN · parked since 2019 · sedo</b></div>
            <div className="row"><span>klombic.io</span><b className="ok">FILE · $39/yr</b></div>
            <div className="row"><span>klombic.app</span><b className="ok">FILE · $19/yr</b></div>
            <div className="row"><span>klombic.dev</span><b className="ok">FILE · $14/yr</b></div>
            <div className="row"><span>klombic.co</span><b className="ok">FILE · $29/yr</b></div>
            <div className="pageno"><span>klombic.com/reports</span><span>02 / 06</span></div>
          </div>

          <div className="pdf-page" id="p3">
            <div className="ph"><div style={{display:'flex',alignItems:'center',gap:10}}><KlombicMark size={22}/><span className="wm">Klombic</span></div><span className="mono">CANDIDATE · klombic</span></div>
            <h3 className="kicker">Shopify slug + handles</h3>
            <div className="row"><span>klombic.myshopify.com</span><b className="ok">FILE</b></div>
            <div className="row"><span>@klombic · Twitter/X</span><b className="ok">FILE</b></div>
            <div className="row"><span>@klombic · Instagram</span><b className="ok">FILE</b></div>
            <div className="row"><span>github.com/klombic</span><b className="ok">FILE</b></div>
            <div className="row"><span>npmjs.com/klombic</span><b className="ok">FILE</b></div>
            <h3 className="kicker">Trademark distance · top-3 collisions</h3>
            <div className="row"><span>KLOMBIK · class 5 · pharma · DE 2019</span><b className="ok">DIST 0.84</b></div>
            <div className="row"><span>KLOMBIQ · class 42 · abandoned 2021</span><b className="ok">DIST 0.78</b></div>
            <div className="row"><span>KOLOMBIA · class 30 · live · BR</span><b className="ok">DIST 0.71</b></div>
            <div className="pageno"><span>klombic.com/reports</span><span>03 / 06</span></div>
          </div>

          <div className="pdf-page" id="p4">
            <div className="ph"><div style={{display:'flex',alignItems:'center',gap:10}}><KlombicMark size={22}/><span className="wm">Klombic</span></div><span className="mono">CANDIDATE · klombic</span></div>
            <h3 className="kicker">Sound-symbolism breakdown</h3>
            <div className="row"><span>Phonetic compactness</span><b className="ok">+0.62</b></div>
            <div className="row"><span>Initial /kl/ — angular onset</span><b className="ok">technical / sharp</b></div>
            <div className="row"><span>Internal /mb/ — voiced cluster</span><b className="ok">grounded / soft</b></div>
            <div className="row"><span>Closing /ic/ — diminutive</span><b>neutral</b></div>
            <h3 className="kicker">Memorability heuristics</h3>
            <div className="row"><span>Length (7 chars)</span><b className="ok">7.4 / 10</b></div>
            <div className="row"><span>Syllable count (2)</span><b className="ok">optimal</b></div>
            <div className="row"><span>Repeated phonemes</span><b>none</b></div>
            <div className="row"><span>Spelling-from-sound recall</span><b className="ok">8.1 / 10</b></div>
            <div className="pageno"><span>klombic.com/reports</span><span>04 / 06</span></div>
          </div>

          <div className="pdf-page" id="p5">
            <div className="ph"><div style={{display:'flex',alignItems:'center',gap:10}}><KlombicMark size={22}/><span className="wm">Klombic</span></div><span className="mono">CANDIDATE · klombic</span></div>
            <h3 className="kicker">Cross-language collisions · Core 7</h3>
            <div className="row"><span>EN · false friends</span><b className="ok">NONE</b></div>
            <div className="row"><span>ES · profanity / slang</span><b className="ok">NONE</b></div>
            <div className="row"><span>FR · pronunciation drift</span><b>"klom-BIK"</b></div>
            <div className="row"><span>DE · compound collisions</span><b className="ok">NONE</b></div>
            <div className="row"><span>IT · meaning collisions</span><b className="ok">NONE</b></div>
            <div className="row"><span>JA · katakana rendering</span><b>クロンビック</b></div>
            <div className="row"><span>ZH · phonetic transliteration</span><b>科隆比克</b></div>
            <div className="pageno"><span>klombic.com/reports</span><span>05 / 06</span></div>
          </div>

          <div className="pdf-page" id="p6">
            <div className="ph"><div style={{display:'flex',alignItems:'center',gap:10}}><KlombicMark size={22}/><span className="wm">Klombic</span></div><span className="mono">CANDIDATE · klombic</span></div>
            <h3 className="kicker">Final verdict</h3>
            <p className="body" style={{fontSize:14,lineHeight:1.6,marginBottom:16}}>"Klombic" clears USPTO across the three classes that matter for software, scores in the top quartile on memorability, and has no profanity or false-friend collisions in any of the seven core languages. The .com is parked but the .io / .app / .dev are open at standard rates. The /kl/ + /mb/ phonetic structure is unusual and aids recall.</p>
            <p className="body" style={{fontSize:14,lineHeight:1.6,marginBottom:16}}>Recommend filing on <b style={{color:'var(--file)'}}>klombic.io</b> as the primary, with .app and .dev held as defensives. Skip the .com — the parked owner is a known squatter with a $4–8k floor.</p>
            <div className="verdict"><span style={{fontSize:13}}><b>Recommendation</b> — file on .io</span><span className="v-ok">FILE</span></div>
            <div className="pageno"><span>klombic.com/reports</span><span>06 / 06</span></div>
          </div>
        </div>
      </div>

      <div style={{marginTop:64,padding:48,border:'1px solid var(--rule)',background:'#fff',display:'flex',justifyContent:'space-between',alignItems:'center',gap:32,flexWrap:'wrap'}}>
        <div>
          <h3 style={{fontSize:24,marginBottom:8}}>Want this for your name?</h3>
          <p style={{margin:0,fontSize:14,color:'var(--ink-2)'}}>Quick is $9.99 for three candidates. Core safety checks (USPTO, domain, cross-language, handles), same 24-hour turnaround. Starter adds distinctiveness; Premium adds the deep-dive due diligence.</p>
        </div>
        <a className="btn btn-primary" href="#" onClick={(e)=>{e.preventDefault();go('order')}}>Run a check ↗</a>
      </div>
    </div>
  </section>
  );
};

// WallOfLove — embedded Senja widget for customer testimonials.
//
// Renders ONLY when window.SENJA_PROJECT_ID is set on the page (we expose it
// via index.html so it's swap-in-config rather than code-change). Without
// that, the section is suppressed entirely — never shows a "no testimonials
// yet" empty state to visitors. Once you have ≥3 testimonials in Senja,
// flip the flag and the wall appears.
//
// Setup:
//   1. Sign up at senja.io (Starter $14/mo)
//   2. Create a "Wall of Love" embed in your Senja dashboard
//   3. Senja gives you a project ID — set it in index.html as:
//        window.SENJA_PROJECT_ID = '<your-id>';
//   4. The widget script auto-injects on first render
const WallOfLove = ({ go }) => {
  const [ready, setReady] = React.useState(false);
  React.useEffect(() => {
    const projectId = typeof window !== 'undefined' && window.SENJA_PROJECT_ID;
    if (!projectId) return;
    // Senja's official embed pattern: append their script tag once.
    if (!document.querySelector('script[data-senja]')) {
      const s = document.createElement('script');
      s.src = `https://widget.senja.io/widget/${projectId}/platform.js`;
      s.async = true;
      s.setAttribute('data-senja', '1');
      s.onload = () => setReady(true);
      document.body.appendChild(s);
    } else {
      setReady(true);
    }
  }, []);
  // No project ID configured -> render nothing.
  if (typeof window !== 'undefined' && !window.SENJA_PROJECT_ID) return null;
  return (
    <section className="section">
      <div className="page">
        <div className="section-label">What customers say</div>
        <div className="sh">
          <h2>Verbatim, from real reports.</h2>
          <div className="right">Every review is from a paying customer who opted in. No invented quotes, no incentivized reviews — Klombic's job is to be honest about itself too.</div>
        </div>
        <div className="senja-embed-id"
             data-id={typeof window !== 'undefined' ? window.SENJA_PROJECT_ID : ''}
             data-mode="shadow"
             data-lazyload="false"
             style={{display:'block', marginTop:24}}>
          {!ready && <div style={{padding:'48px 0',textAlign:'center',color:'var(--ink-3)'}}>Loading reviews…</div>}
        </div>
      </div>
    </section>
  );
};

const Pricing = ({ go }) => {
  const tiers = [
    { n:3,  name:"Quick",    price: 9.99, desc:"Three candidates. Core safety checks — kill obvious losers before your attorney sees them.", featured:false, perks:["USPTO TESS exact-string scrape","Multi-TLD domain + Shopify slug","Cross-language collision scan (15+ languages)","TM-extension exposure (adjacent IC classes)","Memorability + sound-symbolism + pronounceability","Handles + dev-namespace + app-store sweep","One PDF, ≤ 24 hours","14-day attorney-test window","One free re-run · cumulative final report"] },
    { n:5,  name:"Starter",  price:13.99, desc:"Five candidates. Adds Abercrombie distinctiveness analysis — useful when you're picking between strong-but-similar coined names.", featured:false, perks:["Everything in Quick","Term-strength / Abercrombie spectrum analysis","Registrability verdict (Principal / Supplemental / Unregistrable)","14-day attorney-test window","One free re-run · cumulative final report"] },
    { n:10, name:"Premium", price:19.99, desc:"Ten candidates plus the deep-dive on your top pick. Coverage equivalent to a typical $99–$299 trademark-search service — same federal-mark depth, plus everything they don't do (linguistics, domains, handles, namespaces, multi-language).", featured:true,  perks:["Everything in Starter","Focused per-language scan on top winner — re-checks 23 languages TWICE and only flags meanings that replicate (the broad scan can miss regional slang; doubling the check suppresses one-off model errors)","Phonetic-similar TESS sweep on top winner (§ 2(d) screening)","Full TSDR per-mark records (owner, attorney, dates, G&S)","Common-law / web-presence sweep","Top-3 deep-dive section","14-day attorney-test window","One free re-run · cumulative final report"] },
  ];
  return (
    <section className="section">
      <div className="page">
        <div className="section-label">Pricing</div>
        <div className="sh">
          <h2>One-time. Pick your batch size.</h2>
          <div className="right">No subscriptions, no per-seat, no platform fees. The price is the price. The PDF is the deliverable. That's the whole shape of it. <b>Scope:</b> federal USPTO exact-string clearance + supporting axes per name (cross-language, domains, handles, sound/memorability). Starter adds Abercrombie distinctiveness; Premium adds the focused per-language scan, phonetic-similar § 2(d) screening, and common-law / web-presence sweep on your top pick. State registries and a final DuPont-factor opinion stay with your attorney — that's by design.</div>
        </div>
        <div className="pricing" style={{gridTemplateColumns:'repeat(3,1fr)'}}>
          {tiers.map(t => (
            <div key={t.n} className={`tier ${t.featured?'featured':''}`}>
              <span className="tier-name">{t.name} · {t.n} candidates</span>
              <div className="price">${t.price}<span className="per">one-time</span></div>
              <p className="desc">{t.desc}</p>
              <ul>{t.perks.map((p,i)=><li key={i}>{p}</li>)}</ul>
              <div className="cta"><a href="#" onClick={(e)=>{e.preventDefault();go('order')}}>Choose {t.name} ↗</a></div>
            </div>
          ))}
        </div>

        <div style={{marginTop:96}}>
          <div className="section-label">FAQ</div>
          <h2 style={{maxWidth:600,marginBottom:48}}>Things people ask before buying.</h2>
          <div className="faq">
            <div className="faq-item"><h4>How fast is "≤ 24 hours"?</h4><p>The 24-hour ceiling is the upper bound. In practice most orders ship within a few hours during US business hours (Eastern, 9–18 ET); orders placed overnight queue and ship by the next morning. Klombic is solo-operated for the moment, so the SLA is conservative on purpose.</p></div>
            <div className="faq-item"><h4>Is this a legal opinion?</h4><p>No — Klombic is a first-pass narrowing tool, not a law firm. Quick runs federal USPTO <i>exact-string</i> clearance + 6 supporting axes (memorability/sound/pronounceability, cross-language, multi-TLD domains, Shopify, TM-extension exposure, handles + dev namespaces + app stores). Starter adds Abercrombie term-strength. Premium adds automated phonetic-similar § 2(d) screening, focused per-language scan on the top winner, and a common-law / web-presence sweep — coverage equivalent to a typical $99–$299 trademark-search service but at one-fifth the price. We <b>don't</b> run state trademark registries, design-mark analysis, or final DuPont-factor opinions — those require legal judgment and your USPTO attorney owns them. The report is built to make that attorney conversation 10× shorter.</p></div>
            <div className="faq-item"><h4>What if every name is taken?</h4><p>That's still useful — you've eliminated 3/5/10 dead ends in 24 hours instead of weeks. The report includes near-collisions ranked by trademark distance so you can pivot.</p></div>
            <div className="faq-item"><h4>Can I try Klombic with a Stripe test card before paying?</h4><p>No — Klombic runs in Stripe live mode only, so test cards (<code>4242&nbsp;4242&nbsp;4242&nbsp;4242</code> and friends) will be declined. To evaluate the format before ordering, the <a href="#" onClick={(e)=>{e.preventDefault();go('sample')}} style={{color:'var(--forest)',fontWeight:500}}>sample report</a> is a real Klombic Premium PDF (the one we generated when picking our own brand) — same checks, real data, full format. Download it; if it answers what you'd want answered, then place a real order.</p></div>
            <div className="faq-item"><h4>Do I get a refund if I don't like the result?</h4><p>No refunds — the work is run the moment you submit. But every order includes a <b>14-day attorney-test window</b>: take the report to your USPTO lawyer, and if they reject a name, reply to your delivery email within 14 days with replacements. We re-run for free, once per order, and deliver a cumulative final report (your survivors + the new ones).</p></div>
            <div className="faq-item"><h4>What's a "cumulative final report"?</h4><p>If you re-run, the new PDF contains the candidates that survived from your first run plus the new ones you submitted, ranked together. That re-run report is your authoritative Klombic verdict. The earlier report stays in your inbox if you want it — but only the latest run is "official."</p></div>
            <div className="faq-item"><h4>Can I add more names after ordering?</h4><p>Yes — email within 30 min of submitting and we'll bump you to the next tier for the difference. After that, the run has started. Or use your free re-run within 14 days.</p></div>
            <div className="faq-item"><h4>Who's behind it?</h4><p>One person. I'm a founder who got tired of the name due-diligence problem and built the tool I needed. Every report goes through me before it's sent.</p></div>
          </div>
        </div>
      </div>
    </section>
  );
};

const Methods = ({ go }) => {
  const methods = [
    {
      check: "USPTO trademark",
      source: "tmsearch.uspto.gov",
      method: "Live scrape of the USPTO public trademark search via headless browser. Pulls Live and Dead exact-string counts.",
      ai: false,
      license: "U.S. government public records (17 U.S.C. § 105) — public domain.",
    },
    {
      check: "Domain availability",
      source: "Porkbun Domain API",
      method: "Real-time availability + price across the TLDs you flag. Lazy lookup: alternates checked only if .com is taken.",
      ai: false,
      license: "Commercial integration permitted under Porkbun's API terms.",
    },
    {
      check: "Shopify App Store slug",
      source: "apps.shopify.com/<slug>",
      method: "Direct HTTP lookup. 200 = taken, 404 = free.",
      ai: false,
      license: "Permitted by Shopify's robots.txt (app slug pages not disallowed).",
    },
    {
      check: "Memorability composite",
      source: "Miller (1956); Lowrey & Shrum (2007); Norvig initial-letter corpus",
      method: "Deterministic 0–1 score. 35% length-fit (gaussian peak at 7 chars), 30% opening-letter rarity, 10% doubled-letter bump, 25% vowel-consonant balance.",
      ai: false,
      license: "Citing peer-reviewed research findings (no copyright on methodology, fair use).",
    },
    {
      check: "Sound symbolism",
      source: "Klink (2000) Marketing Letters 11(1); Yorkston-Menon (2004) JCR 31(1)",
      method: "Deterministic phoneme classification. Two axes — vowel weight (front/light vs back/heavy) and consonant edge (voiced/soft vs voiceless/hard) — plus sonorance ratio.",
      ai: false,
      license: "Citing peer-reviewed research findings.",
    },
    {
      check: "Pronounceability EN+ES",
      source: "Hayes (2009) Introductory Phonology; Cuetos-Mitchell (1988)",
      method: "Deterministic phonotactic rule check. Penalize consonant clusters not native to target language; flag clusters >3 phonemes.",
      ai: false,
      license: "Citing peer-reviewed research findings.",
    },
    {
      check: "Cross-language collision scan",
      source: "Anthropic Claude Opus",
      method: "Single batched LLM call across 15+ languages. Returns blocker / warning / noise severity per collision. Limited — subtle homophones and minority-dialect pronunciations may be missed (disclosed).",
      ai: true,
      license: "Anthropic API — commercial use permitted under standard terms.",
    },
    {
      check: "TM-extension risk",
      source: "Claude Opus + USPTO TMEP §1207.01",
      method: "Same batched call applies du Pont likelihood-of-confusion factors against the candidate's morphology and semantic load. Speculative flags filtered out.",
      ai: true,
      license: "TMEP is public domain. Claude API commercial-licensed.",
    },
  ];
  return (
    <section className="section methods-section">
      <div className="page">
        <div className="section-label">Methods &amp; sources</div>
        <div className="sh">
          <h2>The exact algorithms we run, no black box.</h2>
          <div className="right">Six of eight signals are deterministic and produce identical output across runs. Two are AI-assisted (cross-language and TM-extension) — bounded scans against fixed lists with a disclosed miss rate. Citations live in the report and below.</div>
        </div>

        <div className="methods-grid">
          {methods.map((m, i) => (
            <div className="method-card" key={i}>
              <div className="method-head">
                <h3>{m.check}</h3>
                <span className={`method-ai ${m.ai?'yes':'no'}`}>{m.ai ? 'AI-assisted' : 'Deterministic'}</span>
              </div>
              <div className="method-source">
                <span className="method-label">Source</span>
                <span className="method-mono">{m.source}</span>
              </div>
              <p className="method-body">{m.method}</p>
              <div className="method-license">
                <span className="method-label">License</span>
                <span>{m.license}</span>
              </div>
            </div>
          ))}
        </div>

        <p className="methods-footer">
          <strong>Commercial-use audit:</strong> every algorithm, dataset, and API in this list has been verified
          as legal to redistribute via Klombic reports. Full diligence trail in the
          <a href="/sample-report.pdf" target="_blank"> sample PDF report</a>.
        </p>
      </div>
    </section>
  );
};

const Founder = ({ go }) => (
  <section className="section">
    <div className="page">
      <div className="section-label">Why I built it</div>
      <div className="founder">
        <div>
          <div className="founder-card">
            <div className="founder-avatar">M·R</div>
            <div>
              <div style={{fontSize:15,fontWeight:500}}>Martin Rasumoff</div>
              <div className="mono">Founder · United States</div>
            </div>
            <p style={{fontSize:13,color:'var(--ink-2)',margin:0,lineHeight:1.55}}>Previously: shipped multiple SaaS products. Naming always took longer than the MVP itself. This is the tool I built for myself first.</p>
          </div>
        </div>
        <div>
          <p>Two weeks. That's how long I spent validating the name of my last product. USPTO search, then a different USPTO search, then five WHOIS lookups, then a Shopify slug probe, then a Google-Translate panic when I realized the name had a slang meaning in another language.</p>
          <p>The tooling exists. Nobody had stitched it into one cheap pass with a real human behind it. So I built Klombic. Tier-graduated automated checks per candidate (Quick covers safety, Starter adds distinctiveness, Premium adds the deep-dive: focused per-language scan, phonetic-similar § 2(d) screening, common-law sweep on the top winner), one PDF, 24 hours. No account, no upsell, no SaaS treadmill — just the report.</p>
          <p>If your name is on the line and you've got 24 hours, run a check. If it's blocked, you'll know exactly why. If it clears, file it before the day ends.</p>
        </div>
      </div>
    </div>
  </section>
);

const SixChecksSection = ({ go }) => {
  const items = [
    {n:"01",t:"USPTO live marks",d:"All registered classes — live, abandoned, and pending applications back to 1985. Trademark distance scored against the top three near-collisions. Full TSDR record retrieval for every cited mark (owner, attorney, dates, goods/services).",meta:"USPTO TSDR · weekly refresh"},
    {n:"02",t:"Multi-TLD domain",d:"WHOIS across .com, .io, .app, .dev, .co, .ai and four custom TLDs. Squatter detection. Renewal price annotated for each.",meta:"WHOIS · 10 TLDs default"},
    {n:"03",t:"Handles + dev namespaces + app stores",d:"Parallel probes across GitHub, npm, PyPI, crates.io, Docker Hub, RubyGems, Shopify Apps, Chrome Web Store, X/Twitter, Instagram, TikTok, YouTube, LinkedIn, Threads, Reddit. The boring-but-essential checks.",meta:"14 platforms"},
    {n:"04",t:"Sound-symbolism",d:"Phonetic compactness scored against a 12k-word reference corpus. Onset, internal cluster, and coda each scored separately.",meta:"Klink 2000 · −1.0 to +1.0"},
    {n:"05",t:"Memorability",d:"Length, syllable count, repeated phonemes, spelling-from-sound recall. Weighted to your declared archetype.",meta:"Miller 1956 · 0–1 score"},
    {n:"06",t:"Cross-language collisions",d:"15 languages. False friends, slang, profanity, transliteration drift. Includes katakana / pinyin renderings for context.",meta:"15 languages · severity-graded"},
    {n:"07",t:"Term-strength / Abercrombie spectrum",d:"Morpheme-level decomposition with each component scored on the Generic → Descriptive → Suggestive → Arbitrary → Fanciful ladder. Surfaces likely-disclaimer parts plus an overall registrability verdict.",meta:"Abercrombie & Fitch v. Hunting World"},
    {n:"08",t:"TM-extension risk",d:"Likelihood-of-confusion screening across IC classes adjacent to your filing class — flags exposure if you later expand into related goods or services.",meta:"5 adjacent classes"},
  ];
  return (
    <section className="section">
      <div className="page">
        <div className="section-label">The eight base checks</div>
        <div className="sh">
          <h2>Every name. Every check. Every time.</h2>
          <div className="right">No fast/slow tiers — same 24-hour turnaround at every price. The depth of analysis scales with the tier: Quick runs core safety checks, Starter adds Abercrombie distinctiveness, Premium adds <b>three attorney-level checks on your top pick</b> (focused per-language scan, run twice and reconciled — see methodology, plus phonetic-similar § 2(d) screening and common-law / web-presence sweep) — same coverage a typical $99–$299 trademark-search service ships at one-fifth the price.</div>
        </div>
        <div className="checks">
          {items.map(i => (
            <div className="check" key={i.n}>
              <span className="num">{i.n}</span>
              <span className="ttl">{i.t}</span>
              <p className="desc">{i.d}</p>
              <span className="meta">{i.meta}</span>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
};

const Legal = ({ kind, go }) => {
  // Each section: [heading, paragraphs[]]. Paragraphs can be strings or {list: [...]} objects.
  const content = {
    terms: {
      title: "Terms of service",
      lede: "These Terms of Service form the legally binding agreement between you and Klombic LLC. They cover your purchase, use of the Site, the report you receive, and the limits of our service.",
      body: [
        ["1 · Overview and Acceptance", [
          'These Terms of Service (“Terms”) are a legally binding contract between you (“Customer,” “you,” “your”) and Klombic LLC (“Klombic,” “we,” “us,” “our”). By accessing klombic.com (the “Site”) or purchasing a brand-name due-diligence report (the “Report”), you agree to be bound by these Terms, our Privacy Policy, and our Refund & Re-run Policy (collectively, the “Agreement”). If you do not agree, do not use the Site or purchase a Report.',
          'Klombic is not a law firm, and the Reports are not legal advice, legal opinions, or trademark clearance certifications. See the “Software-Generated Signal, Not Legal Advice” section below.',
        ]],
        ["2 · Definitions", [
          '“Candidate” means a brand name you submit for analysis, or one generated by Klombic’s AI based on your brand brief.',
          '“Brief” means the description, industry, constraints, and preferences you provide to guide the analysis or AI generation.',
          '“Report” means the PDF document delivered to you containing analysis, scores, flags, and observations on your Candidates.',
          '“Tier” refers to the plan level you purchase: Quick (3 Candidates), Starter (5 Candidates), or Premium (10 Candidates).',
          '“Re-run” means the one-time, free replacement analysis described in the Refund & Re-run Policy.',
          '“AI-Interpreted Content” means any portion of the Report generated or assessed by artificial intelligence models, including but not limited to distinctiveness classifications, registrability opinions, cross-language meaning estimates, and similarity scores.',
          '“Output Data” means all information and conclusions in the Report, whether sourced from public databases or generated by Klombic’s software and AI.',
        ]],
        ["3 · The Klombic Service", [
          'Klombic is an automated, software-driven tool that pre-screens brand names. For each Candidate, the service may perform checks including, without limitation:',
          'USPTO trademark live/dead look-ups',
          'Multi-TLD domain availability queries',
          'Shopify App Store slug collision checks',
          'Sound-symbolism and memorability heuristics',
          'Cross-language phonetic and semantic scans',
          'Abercrombie distinctiveness classification (Quick/Starter/Premium scope varies)',
          'Likelihood-of-confusion screening under §2(d) (Premium only)',
          'Common-law and marketplace conflict sweeps (where described in the product specification)',
          'The exact scope and depth depend on the Tier purchased, as described on the Site at the time of order.',
          'Reports are delivered as a single PDF file to the email address you provide. We aim for delivery within approximately 24 hours, but do not guarantee a precise turnaround time.',
        ]],
        ["4 · Eligibility and Customer Obligations", [
          'You represent and warrant that:',
          'You are at least 18 years old (or the age of majority in your jurisdiction).',
          'You will provide a valid email address and accurate billing information.',
          'The Candidates and Brief you submit are lawful and do not intentionally infringe any third-party trademark, copyright, or other intellectual property right.',
          'You will not use Klombic to select a name for any product, service, or activity that violates applicable law, promotes illegal conduct, or is intended to deceive consumers.',
          'We reserve the right to refuse any order or to cancel an order if we suspect abuse, fraud, or violation of these Terms.',
        ]],
        ["5 · Orders, Pricing, and Payment", [
          '<b>5.1 Pricing.</b> Prices are listed on the Site in U.S. dollars and are exclusive of any applicable taxes. Current tiers are 9.99(Quick),9.99(Quick),13.99 (Starter), and $19.99 (Premium). Prices may change, but the price in effect at the time your order is placed will apply.',
          '<b>5.2 Payment Processing.</b> All payments are processed by Stripe. We do not receive, store, or have access to your full credit card number. By submitting payment information, you agree to Stripe’s terms and privacy policy. We will only use your payment-related data as needed to complete the transaction and comply with legal obligations.',
          '<b>5.3 One-Time Digital Product.</b> Each Report is a one-time, digital product. No subscription or recurring billing is created. Once the Report is delivered, the purchase is complete.',
        ]],
        ["6 · Refund and Re-run Policy (Incorporated by Reference)", [
          'We do not offer monetary refunds for any completed order. Every order immediately triggers paid third-party API calls, cloud compute, and data retrieval, the cost of which is incurred the moment work begins. This is a digital service consumed upon initiation, and all sales are final.',
          'Instead, every purchase includes a 14-day, free Re-run as detailed in our Refund & Re-run Policy, which is incorporated into these Terms in its entirety. Key points:',
          'If your attorney rejects any Candidate, or if the Report does not surface a name you would file, you may request one (1) free Re-run of the same Tier within 14 calendar days of the original Report delivery.',
          'The Re-run allows you to submit replacement Candidate names, a refined Brief, or a mix.',
          'The Re-run produces a new, cumulative final Report, which becomes the authoritative Klombic output for that order.',
          'The Re-run is not a tier upgrade, not a price adjustment, and not a substitute for a refund.',
          'After the Re-run is delivered, no further free Re-runs are owed.',
          'This no-refund policy is a fundamental part of the bargain; by purchasing, you acknowledge that you are paying for the immediate automated analysis and the cost of third-party data access, not for a guaranteed favorable outcome.',
        ]],
        ["7 · Intellectual Property", [
          '<b>7.1 Customer IP.</b> You retain all rights to the Candidate names and the Brief you submit. You also retain all rights to any brand name you ultimately adopt. Klombic claims no ownership over your Candidates or final brand.',
          '<b>7.2 Klombic IP.</b> Klombic owns all right, title, and interest in and to the Site, the software, the algorithms, the selection and arrangement of data, the Report templates, and all other materials created by or for Klombic (“Klombic IP”). This includes the analytical methodology, scoring logic, proprietary heuristics, and the expressive content of the Reports (excluding your pre-existing names).',
          '<b>7.3 Report License.</b> Upon delivery of a Report, we grant you a non-exclusive, non-transferable, worldwide, perpetual license to:',
          'Use the Report internally for your own brand evaluation and trademark filing decisions.',
          'Share the Report with your attorneys, advisors, co-founders, and potential investors for business purposes.',
          'Retain the Report for your records, subject to our data retention and deletion practices.',
          'You may not:',
          'Republish, resell, or sublicense the Report or any part of it as a stand-alone product.',
          'Present the Report’s analysis, scores, or methodology as your own work product.',
          'Use the Report to reverse-engineer Klombic’s algorithms or to build a competitive service.',
        ]],
        ["8 · Customer Data, Privacy, and Confidentiality", [
          '<b>8.1 Privacy.</b> Our collection and use of personal data is governed by our Privacy Policy. You agree to the processing of your data as described there. Klombic does not sell your personal data.',
          '<b>8.2 Confidential Information.</b> Your Candidate names, Brief, positioning notes, and constraint inputs constitute your confidential trade secrets (“Customer Confidential Information”). We will:',
          'Hold Customer Confidential Information in confidence using at least the same degree of care we apply to our own confidential information, and in no event less than reasonable care.',
          'Use such information solely to provide the Report and to improve the safety and reliability of our system (in an anonymized, aggregated manner only).',
          'Not disclose it to third parties except to our subprocessors as strictly necessary to deliver the service (see Privacy Policy for the list and purpose limitations).',
          'Not use your inputs to seed other customers’ Reports, or to train public AI models, or to create competitive products.',
          'Not feature your names or results in marketing, case studies, or testimonials without your prior, written consent.',
          '<b>8.3 Exceptions.</b> Confidentiality obligations do not apply to information that: (a) is or becomes publicly available through no breach by Klombic; (b) was independently developed by Klombic without reference to your inputs; or (c) is required to be disclosed by law or valid legal process. If a legal demand is made, we will, when permitted, provide you with prompt notice so you may seek a protective order.',
          '<b>8.4 Data Retention and Deletion.</b> By default, order records (email, Report, inputs) are retained for 90 days from the date of delivery, then permanently deleted. Server and request logs are purged on a rolling 30-day window. You may request earlier deletion by emailing privacy@klombic.com; we will comply within the timeframes stated in the Privacy Policy, subject to legal retention requirements.',
        ]],
        ["9 · Third-Party Services and External Data", [
          'Klombic relies on third-party APIs and public data sources, including but not limited to:',
          'Stripe (payment processing)',
          'Resend (email delivery)',
          'Anthropic (Claude API for language analysis)',
          'Porkbun (domain availability checks)',
          'USPTO TESS and other public trademark databases',
          'We do not control these third-party services and cannot guarantee their availability, accuracy, or completeness. Reports reflect live look-ups against publicly available records at the time of the scan. Registry data may be briefly out-of-date; new filings can occur between the scan and your review. The Report is a snapshot, not a real-time monitoring service.',
        ]],
        ["10 · Software-Generated Signal, Not Legal Advice — Unauthorized Practice of Law", [
          'KLOMBIC IS NOT A LAW FIRM. No attorney-client relationship is formed through your use of the Site or the purchase of a Report. The Reports are automated, software-generated analyses and AI-Interpreted Content; they do not constitute legal advice, a legal opinion, or a trademark clearance guarantee.',
          'You understand and agree:',
          'USPTO trademark examination involves discretionary, multi-factor tests that no automated tool can perfectly predict. A favorable Klombic result does not guarantee registration.',
          '“Cleared,” “safe,” or similar language in the Report indicates a statistical or heuristic assessment by our software, not a legal conclusion.',
          'Any AI-Interpreted Content (marked as such) is prone to errors, including hallucination, outdated associations, or misclassification. You should independently verify critical findings with a human professional.',
          'For trademark filings involving material business stakes (we suggest matters where the brand value or risk exposure exceeds $5,000, but you must use your own judgment), we strongly recommend consulting a licensed intellectual-property attorney before filing.',
          'Klombic’s owner and operators are not acting as attorneys. If you need legal advice, you should seek independent counsel.',
        ]],
        ["11 · Disclaimer of Warranties", [
          'THE SERVICE IS PROVIDED “AS IS” AND “AS AVAILABLE.” TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, KLOMBIC DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.',
          'We do not warrant that:',
          'The Site will be uninterrupted, secure, or error-free.',
          'The Reports will be complete, accurate, or current beyond the moment of generation.',
          'Any Candidate will be registrable or free from third-party claims.',
          'AI-Interpreted Content will be factually correct or free of hallucination.',
          'Third-party data sources (USPTO, domain registries, etc.) will be accurate or up-to-date.',
          'Your use of the Report is at your own risk. You are responsible for any decision to file a trademark application or adopt a brand name.',
        ]],
        ["12 · Limitation of Liability", [
          'TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL KLOMBIC, ITS MEMBERS, OFFICERS, EMPLOYEES, OR AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS, LOST TRADEMARK FILING OPPORTUNITIES, USPTO REFUSAL COSTS, REBRANDING EXPENSES, BUSINESS INTERRUPTION, OR LOSS OF DATA, ARISING OUT OF OR IN CONNECTION WITH YOUR USE OF THE SITE OR THE REPORT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.',
          'OUR TOTAL AGGREGATE LIABILITY FOR ANY AND ALL CLAIMS RELATING TO THE SERVICE OR THE REPORT SHALL NOT EXCEED THE AMOUNT YOU PAID FOR THE SPECIFIC ORDER THAT GAVE RISE TO THE CLAIM.',
          'Some jurisdictions do not allow the exclusion or limitation of certain damages. If these laws apply to you, some or all of the above limitations may not apply, and you may have additional rights.',
        ]],
        ["13 · Indemnification", [
          'You agree to defend, indemnify, and hold harmless Klombic, its members, employees, and agents from and against any and all third-party claims, damages, losses, liabilities, costs, and expenses (including reasonable attorneys’ fees) arising out of or related to:',
          'Your Candidate names, Brief, or any other content you submit that infringes a third party’s intellectual property or other rights.',
          'Your use of the Report in a manner that violates these Terms or applicable law.',
          'Your decision to file a trademark application or adopt a brand name based on the Report.',
          'We reserve the right to assume the exclusive defense and control of any matter subject to indemnification by you, and you agree to cooperate fully with our defense.',
        ]],
        ["14 · Force Majeure", [
          'Klombic will not be liable for any delay or failure to perform due to circumstances beyond our reasonable control, including but not limited to acts of God, war, terrorism, civil unrest, labor disputes, Internet infrastructure failures, power outages, or third-party service interruptions.',
        ]],
        ["15 · Modifications to the Terms", [
          'We may update these Terms from time to time. When we make material changes, we will update the “Effective Date” at the top of the page and, if the changes are significant, we may provide additional notice (such as a banner on the Site or an email to recent customers). Your continued use of the Site or placement of a new order after the effective date of the revised Terms constitutes your acceptance of the changes. If you do not agree, you must discontinue use.',
        ]],
        ["16 · Governing Law and Dispute Resolution", [
          '<b>16.1 Governing Law.</b> This Agreement shall be governed by and construed in accordance with the laws of the State of Delaware, United States, without regard to conflict-of-laws principles.',
          '<b>16.2 Informal Resolution.</b> Before initiating any formal proceeding, you agree to contact us at legal@klombic.com and attempt to resolve the dispute informally. Both parties agree to work in good faith to resolve the issue within 30 days. This step is a precondition to filing any claim.',
          '<b>16.3 Small Claims Exemption.</b> Either party may bring a claim in a small-claims court of competent jurisdiction for disputes where the amount in controversy is within the court’s monetary limit, irrespective of the informal resolution period, provided the claim proceeds on an individual basis only.',
          '<b>16.4 Class Action Waiver.</b> To the maximum extent allowed by law, you agree that any proceeding will be conducted only on an individual basis and not in a class, consolidated, or representative action. This provision is severable; if the class action waiver is found unenforceable, the remainder of the dispute resolution provisions shall still apply.',
        ]],
        ["17 · General Provisions", [
          '<b>17.1 Entire Agreement.</b> The Agreement (these Terms, the Privacy Policy, and the Refund & Re-run Policy) constitutes the entire understanding between you and Klombic regarding the subject matter, superseding any prior agreements or communications.',
          '<b>17.2 Severability.</b> If any provision of this Agreement is held invalid or unenforceable, the remaining provisions shall continue in full force and effect, and the invalid provision shall be modified to the minimum extent necessary to make it enforceable.',
          '<b>17.3 No Waiver.</b> Our failure to enforce any right or provision of this Agreement shall not be deemed a waiver of such right or provision.',
          '<b>17.4 Assignment.</b> You may not assign or transfer any of your rights or obligations under this Agreement without our prior written consent. Klombic may assign this Agreement without restriction, including in connection with a merger, acquisition, or sale of assets.',
          '<b>17.5 Notices.</b> Any legal notices to Klombic must be sent to legal@klombic.com. Notices to you may be sent to the email address associated with your order. Email notice is deemed effective upon transmission if no delivery failure is received.',
          '<b>17.6 Survival.</b> The provisions of this Agreement that by their nature should survive termination (including but not limited to IP ownership, confidentiality, disclaimers, limitations of liability, indemnification, and dispute resolution) shall so survive.',
          'End of Terms of Service.',
        ]],
      ],
    },
    privacy: {
      title: "Privacy policy",
      lede: "What we collect, why, how we share it (only with the subprocessors that deliver your report), and your rights — including GDPR, UK GDPR, and CCPA / CPRA rights.",
      body: [
        ["1 · Our Approach to Privacy", [
          'Klombic is a brand-name pre-screening tool, not a data broker. We collect only the information necessary to deliver your Report, and we handle it carefully. This Privacy Policy explains what we collect, why we collect it, the limited ways we share it, and your rights over your data.',
          'We designed this policy to be readable, but it also serves as our legal notice under applicable data protection laws, including the EU General Data Protection Regulation (“GDPR”), the UK GDPR, and the California Consumer Privacy Act (“CCPA”) as amended by the CPRA.',
        ]],
        ["2 · Who We Are", [
          'Klombic LLC (“Klombic,” “we,” “us,” “our”) is a United States limited liability company that operates the website klombic.com (“the Site”) and provides automated brand-name due-diligence reports (“Reports”). For the purposes of data protection law, we are the data controller of your personal data.',
        ]],
        ["3 · Information We Collect", [
          'We collect minimal information — only what is needed to process your order, deliver your Report, and maintain basic security.',
          '3.1 Information You Provide Directly',
          'When you place an order, we collect your email address, the candidate names you submit (or the brand brief you provide for AI-generated names), the plan tier you select, and any constraints you set (preferred TLDs, archetype, language-exclusion choices). If you later request a re-run, we collect any new candidate names or additional brief details you provide at that time.',
          '3.2 Information From Stripe',
          'We do not receive, store, or have access to your full credit card number. Stripe, our payment processor, provides us with a payment confirmation token and limited transaction metadata (such as the amount, a payment identifier, and sometimes the last four digits of your card). This token is used solely to verify that your order has been paid.',
          '3.3 Automatically Collected Server-Log Data',
          'When you visit the Site, our hosting provider, Vercel, automatically logs standard web-request metadata. This includes your IP address, browser user-agent string, the timestamp of the request, and the page you requested. We do not enrich this data with any analytics, tracking, or behavioral profiling. It is retained for a limited time and used only for security and abuse prevention.',
          '3.4 Information We Explicitly Do NOT Collect',
          'We do not collect:',
          'Your full payment card number or CVV (this information is handled exclusively by Stripe);',
          'Your physical mailing address (not required for digital delivery);',
          'Your phone number;',
          'Your social media handles or third-party account credentials;',
          'Behavioral or browsing histories across the web (we use no tracking pixels, no advertising cookies, and no analytics scripts).',
        ]],
        ["4 · How We Use Your Information", [
          'We use each category of data only for the purposes listed below.',
          'To Fulfill Your Order. Your email address is used to deliver the PDF Report. Your candidate names and brand brief are the inputs for the automated analysis. Your payment token is used to confirm the order is authorized.',
          'To Provide a Re-run. If you request a free re-run, we process the replacement names or updated brief in exactly the same manner as the original order.',
          'To Secure and Improve the Service. Server logs are used to detect and prevent fraud, abuse, and denial-of-service attacks. We may also examine anonymized, aggregated query patterns to improve our algorithms — never by inspecting individual customer data. For example, we might look at global statistics like “what percentage of submitted names had a USPTO collision.”',
          'To Communicate About Your Order. We may send a one-time email requesting feedback on your Report, or important service updates (such as a significant change to these terms). You can opt out of non-essential communications at any time.',
          'To Comply With the Law. We may process data if required by law, valid court order, or government request, following the confidentiality procedures described in our Terms of Service.',
          'We do not use your candidates or brief to train public AI models. Anthropic, our AI subprocessor, contractually commits not to train on customer content.',
        ]],
        ["5 · Legal Bases for Processing (GDPR / UK GDPR)", [
          'If you are located in the European Economic Area, the United Kingdom, or another jurisdiction that requires a specific lawful basis, we rely on the following:',
          'Contractual necessity (Article 6(1)(b) GDPR): Processing your order and delivering the Report is necessary to perform our contract with you. This covers the collection and use of your email, candidate names, brief, tier, constraints, and payment confirmation.',
          'Legitimate interests (Article 6(1)(f) GDPR): It is in our legitimate interest to process server logs for security and abuse prevention, and to analyze anonymized, aggregated patterns to improve our service. We have assessed that these interests are not overridden by your rights and freedoms.',
          'Consent (where required) / Legitimate interest: Sending optional satisfaction surveys or product updates may rely on consent where mandated, or on our legitimate interest in improving customer experience. You may withdraw your consent or opt out at any time by following the instructions in the email or contacting us at privacy@klombic.com.',
          'Legal obligation (Article 6(1)(c) GDPR): We process data when necessary to comply with applicable laws, regulations, or valid legal requests.',
          'Where processing is based on your consent, you have the right to withdraw it at any time without affecting the lawfulness of processing that occurred before withdrawal.',
        ]],
        ["6 · Sharing Your Information — Subprocessors", [
          'We share only the minimum data necessary with the following trusted service providers, each of whom acts as a subprocessor under their own privacy commitments and our contractual agreements. We do not sell, rent, or trade your personal data with any other party.',
          'Stripe (Payment Processing)',
          'Data shared: Email, payment token, order amount.',
          'Purpose: To process your payment.',
          'Location: United States.',
          'Resend (Email Delivery)',
          'Data shared: Your email address and the PDF Report attachment.',
          'Purpose: To deliver the Report to your inbox.',
          'Location: United States.',
          'Anthropic (Claude API)',
          'Data shared: The candidate names or brief text (no email address).',
          'Purpose: To perform cross-language scans, phonetic similarity analysis, and trademark-extension risk assessments.',
          'Location: United States.',
          'Porkbun (Domain Availability)',
          'Data shared: Candidate names only.',
          'Purpose: To query domain availability via WHOIS and registry look-ups.',
          'Location: United States.',
          'Vercel (Web Hosting)',
          'Data shared: IP address, browser user-agent, timestamp, requested page (logged automatically).',
          'Purpose: To serve the Site and maintain standard web-request logs.',
          'Location: United States.',
          'All subprocessors are contractually obligated to process data only on our documented instructions and to implement appropriate technical and organizational security measures. We remain responsible for their handling of your data.',
          'We will update this Policy and, where required by law, notify you if we add or replace any subprocessor that processes personal data.',
        ]],
        ["7 · International Transfers", [
          'Klombic and all subprocessors listed above are based in the United States. If you order from outside the United States (including from the EEA, UK, or other jurisdictions), your data will be transferred to and processed in the U.S.',
          'Where required by law, we rely on standard contractual clauses (SCCs) or other approved transfer mechanisms to safeguard the transfer. By placing an order and providing your data, you expressly consent to this transfer; additionally, for GDPR purposes, the transfer is necessary for the performance of our contract with you (Article 49(1)(b) derogation for a one-time service). If you have questions about the safeguards in place, please contact privacy@klombic.com.',
        ]],
        ["8 · Data Retention", [
          'We keep your data only as long as needed for the purposes described, and then we permanently delete it.',
          'Order Records. Your email, candidate names, brief, the Report, and the payment token are retained for 90 days from the date the Report is delivered. After 90 days, these records are permanently deleted from live systems and backups within an additional 30 days.',
          'Server Logs. IP addresses, user-agent strings, and timestamps are retained on a 30-day rolling window. Logs older than 30 days are automatically purged.',
          'Stripe Payment Records. Stripe retains payment details according to its own retention schedule, which may be up to 7 years for tax purposes. We do not control Stripe’s retention practices; please review Stripe’s Privacy Policy for details.',
          'You may request earlier deletion of your order data at any time — see “Your Rights” below.',
        ]],
        ["9 · Security", [
          'We implement reasonable administrative, technical, and physical safeguards to protect your information against unauthorized access, loss, or misuse. These measures include:',
          'Encryption of data in transit (TLS) and at rest where supported by our subprocessors.',
          'Restricted internal access: only the Klombic operator and, on a strictly limited basis, technical support staff can view raw data, and only as necessary to provide the service.',
          'No storage of full payment credentials on our servers.',
          'Regular review of subprocessor security commitments.',
          'No method of transmission or storage is 100% secure, but we work continuously to keep your data safe. In the event of a data breach that poses a risk to your rights and freedoms, we will notify you and the relevant supervisory authority as required by law.',
        ]],
        ["10 · Your Rights Over Your Information", [
          'Regardless of where you live, we provide you with the following core rights:',
          'Access: You may request a copy of all personal data we hold about you.',
          'Correction: You may ask us to fix any inaccurate or incomplete personal data.',
          'Deletion: You may request that we delete your personal data earlier than the standard retention period.',
          'To exercise any of these rights, email privacy@klombic.com. We will respond within 7 business days and process your request promptly, subject to any overriding legal obligations that require us to retain certain data (such as compliance with a valid law enforcement request).',
          'Additional Rights for EEA and UK Residents (GDPR)',
          'If you reside in the EEA or the UK, you also have the right to:',
          'Data Portability: Receive your personal data in a structured, commonly used, machine-readable format, and, where technically feasible, have it transmitted directly to another controller.',
          'Objection: Object to processing based on our legitimate interests. We will then cease processing unless we demonstrate compelling legitimate grounds that override your interests.',
          'Restriction: Request that we restrict the processing of your data under certain circumstances (for example, while we verify its accuracy).',
          'Withdraw Consent: Withdraw your consent at any time where processing is based on consent — without affecting the lawfulness of processing before withdrawal.',
          'Lodge a Complaint: File a complaint with your local data protection supervisory authority if you believe we have infringed applicable data protection law.',
          'Additional Rights for California Residents (CCPA / CPRA)',
          'If you are a California consumer, you have the right to:',
          'Know: Request information about the categories and specific pieces of personal data we collect, the sources from which we collect it, the business or commercial purpose for collection, and the categories of third parties with whom we share it.',
          'Delete: Request deletion of your personal data we hold, subject to certain exceptions allowed by law.',
          'Opt-Out of Sale and Sharing: We do not sell your personal data and do not share it for cross-context behavioral advertising. Therefore, there is no need to submit an opt-out request.',
          'Non-Discrimination: We will not discriminate against you for exercising any of your CCPA rights.',
          'To exercise your California rights, email privacy@klombic.com. We will verify your identity using the email address associated with your order and respond within the timeframes required by California law.',
        ]],
        ["11 · Cookies and Similar Technologies", [
          'Our Site does not use first-party tracking cookies, advertising cookies, or analytics scripts. We do not deploy any behavioral tracking technologies.',
          'Stripe Session Cookie. When you initiate the payment checkout, Stripe sets a strictly necessary session cookie to maintain your checkout session. This cookie is essential for the payment process, expires at the end of your session, and is subject to Stripe’s own Cookie Policy. We do not use this cookie for any tracking purpose.',
        ]],
        ["12 · Children’s Privacy", [
          'Klombic is not intended for and is not knowingly marketed to anyone under the age of 16. We do not knowingly collect personal data from children under 16. If you believe a child under 16 has provided us with personal data, please contact us immediately at privacy@klombic.com, and we will delete that information promptly.',
        ]],
        ["13 · Changes to This Privacy Policy", [
          'We may update this Privacy Policy from time to time. When we make material changes, we will update the “Effective Date” at the top of this page. If we have your email address, we may also provide direct notice. We will not retroactively reduce your privacy rights without your explicit consent.',
          'Your continued use of the Site or placement of a new order after the effective date of a revised policy constitutes acceptance of those changes. If you do not agree, you must discontinue use of the Site.',
        ]],
        ["14 · Contact Us", [
          'For privacy-related inquiries, rights requests, or questions about this policy:',
          'Email: privacy@klombic.com',
          'General inquiries (not privacy-specific): hello@klombic.com',
          'We aim to acknowledge all privacy requests within 2 business days and resolve them within 7 business days',
        ]],
      ],
    },
    refund: {
      title: "Refund & re-run policy",
      lede: "We don't offer monetary refunds — every order triggers paid third-party API calls the moment work begins. Instead, every order includes a 14-day attorney-test window with one free re-run if any name doesn't survive your lawyer's review.",
      body: [
        ["1 · The Klombic Promise — and Its Limits", [
          'Klombic exists to help you maximize the chances your brand name clears the USPTO on the first filing. We do this by running automated checks that mirror the early-stage due diligence a trademark attorney would perform — USPTO screening, domain availability, cross-language risk, distinctiveness classification, and more — all delivered within hours, at a fixed, low price.',
          'Because of the real-time costs we incur the moment an order begins, we do not offer monetary refunds. Instead, every order includes a 14-day, free re-run window designed to give you time to share the report with your attorney or filing agent and swap out any names that don’t survive their review. This policy explains exactly how that works, what it covers, and what it doesn’t.',
          'This Refund & Re-run Policy is part of the Klombic Agreement, which also includes our Terms of Service and Privacy Policy. By placing an order, you agree to this policy in full.',
        ]],
        ["2 · No Refunds — Why", [
          'Klombic does not issue monetary refunds for any completed order. Here is why:',
          'Every order immediately triggers paid third-party API calls and live data look-ups — including Anthropic Claude for language analysis, Porkbun for domain availability checks, USPTO TESS for live trademark screening, and Resend for email delivery. These services charge us per use, and the costs are incurred the moment your report begins processing, before the PDF ever reaches your inbox.',
          'Additionally, each report consumes compute time and infrastructure resources that cannot be recovered or reused. There is no version of running Klombic that is free for us, and therefore no version we can offer as a free trial or a refundable “preview.”',
          'This is a fundamental part of our pricing model, and it is what allows us to offer sophisticated trademark pre-screening for less than the cost of a typical attorney’s 15-minute phone call. By placing an order, you acknowledge that you are paying for the immediate automated analysis and the associated third-party costs, not for a guaranteed favorable outcome. If the report does not show names you want to file, the remedy is the free re-run described below.',
        ]],
        ["3 · The 14-Day Attorney-Test Window and Free Re-run Guarantee", [
          'Instead of a refund, every order automatically includes one (1) free re-run, valid for 14 calendar days from the date your original report is delivered. The purpose is to give you time to share the report with your qualified USPTO attorney or filing agent so they can professionally assess the candidates.',
          'If, after that review:',
          'Your attorney rejects one or more of the candidates we analyzed,',
          'The report does not surface a name you are willing to file,',
          'Or you otherwise feel the results are not actionable,',
          'you may request a free re-run. You will receive a new, cumulative report at the same tier and with the same number of candidates as your original order. No additional charge.',
          'The 14-day window is strict. Requests received after 14 calendar days from original delivery will not qualify for a free re-run. We recommend contacting your attorney promptly after receiving the report.',
        ]],
        ["4 · What the Free Re-run Covers", [
          'The free re-run runs at the same tier you originally purchased. If you bought the 3-candidate Quick tier, you will receive a new analysis of exactly 3 candidates. If you bought the 10-candidate Premium tier, you will receive a new analysis of 10 candidates. The scope and depth of checks remain exactly as described for that tier at the time of your original purchase.',
          'The re-run allows you to:',
          'Submit entirely replacement candidate names (up to the number in your tier).',
          'Provide an updated or refined brand brief if you want the AI to generate fresh candidates against a sharper positioning.',
          'Keep the candidates you liked from the original report and replace only the ones your attorney flagged or you are not confident about.',
          'We will respect your choices: if you explicitly keep a candidate that we flagged with a warning in the original report, we will re-surface that warning in the new report, but we will not override your decision.',
          'The re-run triggers fresh live look-ups against USPTO TESS and domain registries at that moment. It is a brand-new analysis — not a copy-and-paste of the old data.',
        ]],
        ["5 · What the Free Re-run Is NOT", [
          'To avoid confusion, the free re-run is explicitly not the following:',
          'Not a tier upgrade. If you purchased the 3-candidate Quick tier but now want 10 candidates analyzed, that requires a new order at the Premium tier. We cannot apply the value of your previous order toward a higher tier.',
          'Not a refund alternative or credit. The re-run is a service replacement, not a monetary credit. You cannot convert it into cash, store credit, or apply it toward a different product.',
          'Not a time-machine. The re-run uses current USPTO and domain registry data. If a competitor filed a trademark or registered a domain between your original report and the re-run, that new data will appear in the re-run results. We cannot “roll back” to the state of the earlier moment.',
          'Not multiple free re-runs. One free re-run per order. After the cumulative final report (described below) is delivered, the re-run guarantee is fulfilled. Any further re-runs you request are paid, new orders.',
          'Not a legal dispute process. The free re-run is a customer-satisfaction mechanism, not an acknowledgment of error or liability. It does not waive any terms in our Terms of Service, including disclaimer of warranties and limitation of liability.',
        ]],
        ["6 · How the Re-run Works — Request Process", [
          'To request your free re-run, reply directly to your original report delivery email. Your request must be received within 14 calendar days of that original delivery. In your reply, please clearly tell us:',
          'Which candidate names you want to keep, if any.',
          'The replacement candidate names you want to substitute in (one-for-one matching the candidate count of your tier).',
          'An updated or refined brand brief, if you want us to generate fresh candidates from your new positioning. If you provide a new brief, it replaces the old one entirely for the purpose of AI generation.',
          'We will acknowledge your request within 1 business day. Re-run reports are typically delivered within approximately 24 hours of our acknowledgment, just like the original order.',
          'If your request is coming from a different email address or you cannot find the original delivery email, you can email hello@klombic.com with your order details and your re-run instructions. We may ask for verification information (such as the email used for the order or the approximate date of purchase) to confirm your identity and eligibility.',
        ]],
        ["7 · The Cumulative Final Report", [
          'The re-run produces a single new PDF report that contains the candidates that survived from your original run (the ones you chose to keep) side-by-side with the new or AI-generated candidates. All candidates are analyzed and ranked together, based on the same methodology and scoring model used for the original run.',
          'This re-run report becomes your authoritative final report for that order. It is the official Klombic verdict on your candidates. You may keep all intermediate reports in your inbox for your personal records — we will not delete the original PDF — but if you ever cite a Klombic report to your attorney, your trademark filing service, a business partner, or anyone else, we ask that you cite the latest one. That ensures everyone is working from the same, most current analysis.',
          'After the cumulative final report is delivered, the free re-run guarantee for that order is fully satisfied.',
        ]],
        ["8 · Edge Cases and Exceptions", [
          'A few specific situations that can arise:',
          'Material Error in Original Report. If your original report contains a provable material error — for example, we reported that a .com domain was available when in fact it was registered at the time the scan ran — email us at hello@klombic.com within 24 hours of receiving the report. Include the specific name and the discrepancy. We will verify the error and, if confirmed, re-run the affected check at no charge. This error correction re-run is separate from your free re-run guarantee; it does not count toward or replace your one free re-run.',
          'Wrong Tier Selected at Purchase. If you accidentally selected the wrong tier and notice within 30 minutes of placing your order, email us immediately at hello@klombic.com. We can cancel the original order before processing begins and issue a new invoice for the correct tier. If processing has already started, we cannot issue a refund or swap the tier, but you may use your free re-run to adjust your candidate count within the limits of your purchased tier. You can also place a new order for the correct tier at any time.',
          'Unused Re-run Window. The free re-run expires 14 calendar days after the original report delivery. If you do not request it, the right to the re-run lapses. No credit, refund, or extension is owed. We encourage you to schedule your attorney review promptly.',
          'Chargebacks and Disputes. If you initiate a chargeback with your bank or card issuer without first contacting us, we reserve the right to provide them with a copy of this policy and evidence of the services delivered. Chargebacks are costly and time-consuming for small businesses, and we genuinely want to resolve your concern through the re-run mechanism (or in the case of a material error, through a correction). Please reach out to us first.',
        ]],
        ["9 · Contact", [
          'Re-run requests and questions about this Refund & Re-run Policy should be directed to:',
          'Email: hello@klombic.com',
          'Privacy or data requests: privacy@klombic.com (see Privacy Policy)',
          'Legal inquiries: legal@klombic.com (see Terms of Service)',
          'We respond to re-run requests within 1 business day and to general inquiries within 2 business days',
        ]],
      ],
    },
  };

  const c = content[kind];
  if (!c) return null;
  return (
    <section className="legal page" style={{maxWidth:760,margin:'0 auto',padding:'72px 32px 96px'}}>
      <div className="section-label">Legal · {c.title}</div>
      <h2 style={{fontSize:42,marginBottom:14}}>{c.title}</h2>
      <p className="mono" style={{margin:'0 0 18px',color:'var(--mute)'}}>EFFECTIVE 7 MAY 2026 · KLOMBIC LLC · UNITED STATES · ATTORNEY-REVIEWED</p>
      {c.lede && (
        <p style={{fontSize:16,lineHeight:1.6,color:'var(--ink-2)',marginBottom:32,paddingBottom:24,borderBottom:'1px solid var(--rule)'}}>{c.lede}</p>
      )}
      {c.body.map(([h, paras], i) => (
        <div key={i} style={{marginBottom:28}}>
          <h3 style={{fontSize:18,fontWeight:600,marginBottom:10,letterSpacing:'-0.015em'}}>{h}</h3>
          {paras.map((p, j) => {
            if (typeof p === 'string') {
              // Allow inline HTML (<b>, <i>, <a>) for sub-section leads
              // ("5.1 Pricing.") and emphasis. Content is OURS — not user-
              // supplied — so dangerouslySetInnerHTML is safe here. Any
              // user-supplied content rendered elsewhere on the site goes
              // through _esc()-equivalent escaping.
              return <p key={j} style={{fontSize:14,lineHeight:1.7,color:'var(--ink-2)',marginBottom:10}} dangerouslySetInnerHTML={{__html: p}} />;
            }
            if (p && p.list) {
              return (
                <ul key={j} style={{margin:'8px 0 14px',paddingLeft:22}}>
                  {p.list.map((item, k) => (
                    <li key={k} style={{fontSize:14,lineHeight:1.6,color:'var(--ink-2)',marginBottom:6}} dangerouslySetInnerHTML={{__html: item}} />
                  ))}
                </ul>
              );
            }
            return null;
          })}
        </div>
      ))}
      <div style={{marginTop:48,paddingTop:24,borderTop:'1px solid var(--rule)',display:'flex',gap:12,flexWrap:'wrap'}}>
        <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('home')}}>← Back home</a>
        {kind !== 'terms'   && <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('terms')}}>Terms</a>}
        {kind !== 'privacy' && <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('privacy')}}>Privacy</a>}
        {kind !== 'refund'  && <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('refund')}}>Refunds</a>}
        <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('methodology')}}>Methodology</a>
      </div>
    </section>
  );
};

// Methodology — public-facing page documenting every academic / legal
// citation used in customer reports. Built from the internal
// METHODOLOGY_AUDIT.md (committed 2026-05-07) which web-verified each
// source. Surfacing it here is a transparency move: customers and
// reviewers can audit Klombic's methodological claims without asking.
const Methodology = ({ go }) => (
  <section className="legal page" style={{maxWidth:780,margin:'0 auto',padding:'72px 32px 96px'}}>
    <div className="section-label">Methodology &amp; sources</div>
    <h2 style={{fontSize:42,marginBottom:14}}>What our scoring is based on.</h2>
    <p className="mono" style={{margin:'0 0 18px',color:'var(--mute)'}}>VERIFIED 7 MAY 2026 · KLOMBIC</p>
    <p style={{fontSize:16,lineHeight:1.6,color:'var(--ink-2)',marginBottom:32,paddingBottom:24,borderBottom:'1px solid var(--rule)'}}>
      Klombic cites academic and legal sources in every customer report. Below is the public,
      verified record: every citation, what each one says, and how faithfully our code
      implements it. We audited this ourselves on 2026-05-07. Anything imprecise gets
      flagged here, not buried.
    </p>

    <h3 style={{fontSize:20,marginBottom:8}}>1. Verified existence — every source is real</h3>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      We web-verified every paper, case, and statute. Zero invented sources. If you Google any
      of these, you'll find them.
    </p>
    <ul style={{margin:'0 0 28px',paddingLeft:18,fontSize:14,color:'var(--ink-2)',lineHeight:1.7}}>
      <li>Klink (2000) <i>Marketing Letters</i> 11 — &ldquo;Creating Brand Names With Meaning: The Use of Sound Symbolism&rdquo; · <a href="https://link.springer.com/article/10.1023/A:1008184423824" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>Springer</a></li>
      <li>Yorkston &amp; Menon (2004) <i>JCR</i> 31(1):43-51 — &ldquo;A Sound Idea: Phonetic Effects of Brand Names on Consumer Judgments&rdquo; · <a href="https://academic.oup.com/jcr/article-abstract/31/1/43/1812051" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>Oxford Academic</a></li>
      <li>Miller (1956) <i>Psychological Review</i> 63:81-97 — &ldquo;The Magical Number Seven, Plus or Minus Two&rdquo; · <a href="https://psychclassics.yorku.ca/Miller/" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>Classics in Psychology</a></li>
      <li>Norvig — &ldquo;English Letter Frequency Counts: Mayzner Revisited&rdquo; · <a href="https://norvig.com/mayzner.html" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>norvig.com/mayzner.html</a></li>
      <li>Hayes (2009) <i>Introductory Phonology</i> · <a href="https://brucehayes.org/IP/" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>brucehayes.org/IP</a></li>
      <li>Abercrombie &amp; Fitch v. Hunting World, 537 F.2d 4 (2d Cir. 1976) · <a href="https://law.justia.com/cases/federal/appellate-courts/F2/537/4/468363/" target="_blank" rel="noopener" style={{color:'var(--forest)'}}>Justia</a></li>
      <li>Lanham Act § 2 (15 U.S.C. § 1052) — US trademark statute</li>
    </ul>

    <h3 style={{fontSize:20,marginBottom:8,marginTop:32}}>2. Implementation faithfulness — what the code actually does</h3>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      Citations are real. <b>Implementations are simplified.</b> Klombic's scoring functions
      are heuristic anchors inspired by the cited research — they are not peer-reviewed
      replications of the published methods. Where the original work used IPA phonemes, we
      use orthographic letters; where the original measured a specific psychological phenomenon
      (e.g., chunks-in-working-memory), we apply the underlying intuition as a length-or-
      frequency heuristic. The citations document the lineage of the ideas, not a one-to-one
      algorithmic mapping.
    </p>
    <table style={{width:'100%',fontSize:13,color:'var(--ink-2)',borderCollapse:'collapse',marginBottom:28}}>
      <thead>
        <tr style={{borderBottom:'1px solid var(--rule)'}}>
          <th style={{textAlign:'left',padding:'8px 6px 8px 0',fontWeight:600,color:'var(--ink)'}}>Source</th>
          <th style={{textAlign:'left',padding:'8px 6px',fontWeight:600,color:'var(--ink)'}}>How we use it</th>
          <th style={{textAlign:'left',padding:'8px 6px',fontWeight:600,color:'var(--ink)'}}>Faithfulness</th>
        </tr>
      </thead>
      <tbody>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Klink (2000)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Front/back vowel and voiced/voiceless consonant categories drive sound-symbolism scoring</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Informed-by · we use orthographic letters, not IPA</td></tr>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Yorkston &amp; Menon (2004)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Same code path as Klink — extends the consonant-stop categorization</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Informed-by · category-level, not per-name</td></tr>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Miller (1956)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Length score peaks at 7 characters</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Inspired-by · Miller's 7±2 was about chunks of information, we treat it as a character-count anchor</td></tr>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Norvig</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Initial-letter rarity score uses his published frequency data</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Direct · we use his actual data tables</td></tr>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Hayes (2009)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Phonotactic constraints (max consonant cluster, triple-vowel detection, Spanish hard-final clusters)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Informed-by · the principles his textbook covers, not a specific algorithm</td></tr>
        <tr style={{borderBottom:'1px solid #f0eee8'}}><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Abercrombie &amp; Fitch v. Hunting World</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Term-strength / distinctiveness spectrum (Generic→Descriptive→Suggestive→Arbitrary→Fanciful)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Direct · we map every candidate onto the case's own classification</td></tr>
        <tr><td style={{padding:'8px 6px 8px 0',verticalAlign:'top'}}>Lanham Act § 2</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Registrability verdict (Principal Register vs Supplemental Register)</td><td style={{padding:'8px 6px',verticalAlign:'top'}}>Direct · the controlling US statute</td></tr>
      </tbody>
    </table>

    <h3 style={{fontSize:20,marginBottom:8,marginTop:32}}>3. Why the focused per-language scan runs twice (&ldquo;2× quorum&rdquo;)</h3>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      On the Premium tier, we run a focused per-language scan on the top winner across 23
      languages — looking for vulgar slang, regional pejoratives, or unfortunate dictionary
      meanings that the broad batched scan might gloss past. The catch: language models can
      be <i>confidently wrong</i>. The same model can claim &ldquo;Kanchora is informally a
      Hindi insult&rdquo; on one run and come back clean on the next.
    </p>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      To suppress those one-off model errors, we run the focused scan <b>twice in parallel</b>
      and only keep findings that appeared in <b>both</b> runs with the same severity. This
      is the &ldquo;2× quorum&rdquo; — replication as the quality bar. A language flag has to
      replicate to make it into your report.
    </p>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      Without quorum, a Premium report can include a flag the model just made up that one
      time. With quorum, you get fewer flags but you can trust the ones you see. We chose
      the second posture because the cost of a Premium customer rebranding over a fake
      flag is much higher than the cost of running the check twice.
    </p>
    <p style={{fontSize:13,color:'var(--ink-3)',lineHeight:1.55,fontStyle:'italic',marginBottom:28}}>
      Quorum scans use Claude Sonnet (cheaper, fast, well-calibrated for dictionary-style
      recall). The doubled-run cost is included in the Premium price; you don't pay extra
      for it.
    </p>

    <h3 style={{fontSize:20,marginBottom:8,marginTop:32}}>4. Citations we removed (and why)</h3>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      During the 2026-05-07 audit we found two citations that were real papers but didn't
      cleanly anchor what the report claimed. Both are gone now:
    </p>
    <ul style={{margin:'0 0 28px',paddingLeft:18,fontSize:14,color:'var(--ink-2)',lineHeight:1.7}}>
      <li><b>Cuetos &amp; Mitchell (1988)</b> was previously cited under cross-linguistic
        pronounceability. The paper is real, but it studied <i>syntactic parsing</i> (Late
        Closure attachment in Spanish vs English), not pronunciation. We removed it. Pronounceability
        scoring is now anchored on Hayes (2009) alone.</li>
      <li><b>Lowrey &amp; Shrum (2007)</b> was previously cited as backing the &ldquo;rarity of
        opening consonant&rdquo; component of memorability scoring. The paper is real, but it
        studied phonetic-symbolism effects on brand-name <i>preference</i>, not consonant rarity.
        Our opening-consonant rarity score actually comes from Norvig's letter-frequency data.
        We removed the Lowrey &amp; Shrum attribution.</li>
    </ul>

    <h3 style={{fontSize:20,marginBottom:8,marginTop:32}}>5. What this means for you</h3>
    <p style={{fontSize:14,color:'var(--ink-2)',lineHeight:1.6,marginBottom:14}}>
      You can take our citations to your trademark attorney or to your own academic adviser
      and they will check out. The papers exist, the legal citations are correct, and the
      implementations are honestly framed as &ldquo;informed by&rdquo; — heuristic anchors
      grounded in legitimate research, not magic algorithms. The trademark-binding judgments
      stay with the USPTO and your attorney; Klombic is the cheap, fast first pass that
      makes their conversation 10× shorter.
    </p>
    <p style={{fontSize:13,color:'var(--ink-3)',lineHeight:1.55,fontStyle:'italic',marginTop:24}}>
      Spot a citation that doesn't check out? Email <a href="mailto:hello@klombic.com" style={{color:'var(--forest)'}}>hello@klombic.com</a>
      and we'll fix it (or remove it) within one business day. Customer reports that have
      already shipped will be re-sent with corrected attribution at no charge.
    </p>

    <div style={{marginTop:48,paddingTop:24,borderTop:'1px solid var(--rule)'}}>
      <a className="btn btn-ghost" href="#" onClick={(e)=>{e.preventDefault();go('home')}}>← Back home</a>
    </div>
  </section>
);

window.HowItWorks = HowItWorks;
window.SampleReport = SampleReport;
window.Pricing = Pricing;
window.Founder = Founder;
window.SixChecksSection = SixChecksSection;
window.Legal = Legal;
window.Methods = Methods;
window.Methodology = Methodology;
