/* Knowledge Center, About, Contact, Disclaimer pages */

const { useState: useStateP } = React;

// 12 articles
const ARTICLES = [
  {
    id: 'why-net-profit',
    featured: true,
    title: 'Why Net Profit is the Only Metric That Matters for 2026 Sellers',
    category: 'Strategy',
    readTime: 8,
    date: 'Apr 28, 2026',
    excerpt: 'Revenue is vanity. Gross margin is comfort. Net profit is what pays you. Here is the case for ruthlessly recentering on the bottom line.',
    art: 'gradient-1',
    body: [
      { type: 'h', text: 'The Revenue Trap' },
      { type: 'p', text: 'There is a particular kind of e-commerce founder who shows up at a conference with a $4M revenue number on a slide and a $40K bank balance behind it. They are not lying. They are not even bad at math. They have simply been measuring the wrong number for so long that they have built an entire business optimized for it.' },
      { type: 'p', text: 'The Revenue Trap is what happens when high-volume sellers ignore margin compression long enough that their growth rate and their bankruptcy date converge. Every additional unit shipped accelerates the loss. The dashboard celebrates. The cash account empties. By the time the operator notices, inventory is already on the water.' },
      { type: 'q', text: 'Revenue is vanity. Profit is sanity. Cash is reality.' },
      { type: 'p', text: 'In 2026, the trap closes faster than it ever has. CPMs are up. Platform takes are up. Tariffs on landed COGS are up. Return rates on TikTok Shop sit in the high teens. The gap between what hits your bank account and what your dashboard celebrates has never been wider — and the dashboards have never been louder about hiding it.' },

      { type: 'h', text: 'Section 1 · The 2026 fee landscape: TikTok vs. Etsy' },
      { type: 'p', text: 'Two of the fastest-growing channels for independent sellers in 2026 also happen to have the most misunderstood fee structures. The headline numbers look comparable. The unit economics are not.' },
      { type: 'p', text: 'TikTok Shop takes 6% commission and a flat $0.30 transaction fee. On a $25 sale, that is $1.80 — about 7.2% of revenue. Clean. Predictable. The trap on TikTok is not the fee structure; it is the return rate. Live-commerce impulse buys come back at 14–18%, and TikTok deducts the platform commission on the original sale, not the net.' },
      { type: 'p', text: 'Etsy looks similar on the surface, until you stack the layers. A $0.20 listing fee, 6.5% transaction fee, then a separate payment processing fee of 3% + $0.25. On the same $25 sale, that is $0.20 + $1.63 + $1.00 = $2.83 — about 11.3% of revenue. That is 57% more in fees than TikTok for the same sale, before any offsite ad fee Etsy may charge for top-of-funnel discovery.' },
      { type: 'p', text: 'The lesson is not that one channel is better. The lesson is that "6% commission" and "6.5% commission" describe wildly different cost structures once you load every line, and any seller running both channels off a single price needs to know which channel is actually carrying the unit economics.' },

      { type: 'h', text: 'Section 2 · ROAS without net profit is a dangerous number' },
      { type: 'p', text: 'Return on Ad Spend is the most over-trusted metric in e-commerce. A 4x ROAS feels like a victory until you do the rest of the math.' },
      { type: 'p', text: 'Take a $50 product with a 4x ROAS — $12.50 of ad spend produced a $50 sale. Now subtract the platform commission ($3), processing fees ($1.75), landed COGS ($14), shipping ($5.50), and the ad spend itself ($12.50). Net profit: $13.25. A 26.5% margin, which is healthy.' },
      { type: 'p', text: 'Now drop ROAS to 3x — $16.67 in ad spend on the same sale. Suddenly net profit is $9.08. Drop it to 2.5x and you are at $6.58. At 2x — still a "profitable" ROAS by every dashboard you can name — you are netting $2.42 per unit before any return, exchange, or chargeback. One return wipes the unit economics for the next nine sales.' },
      { type: 'p', text: 'ROAS without a net-profit context is not a metric. It is a vibe. The number that matters is what hits your bank account per unit shipped, computed live, every time you raise a bid.' },

      { type: 'h', text: 'Why we built NetSellerProfit' },
      { type: 'p', text: 'NetSellerProfit was built because the operators we work with kept asking the same question in three different ways: which channel is actually paying me? They had four spreadsheets, one for each platform, all using slightly different fee assumptions, none of them recalculating in real time.' },
      { type: 'p', text: 'We built one place where you drop in a SKU, set the platform fees once, and immediately see net profit per unit on every channel side by side. No login. No telemetry. No vanity widgets. The number that matters, surfaced before you raise a bid.' },
      { type: 'p', text: 'That is the bar for an operator tool in 2026. Anything less is just storytelling.' },
    ],
  },
  { id: 'tiktok-fees-decoded', title: 'TikTok Shop Fees, Decoded', category: 'Fees', readTime: 5, date: 'Apr 22, 2026', excerpt: 'A line-by-line walk through what TikTok actually takes — commission, transaction fee, and the hidden return clawback most sellers miss.', art: 'gradient-2' },
  { id: 'amazon-referral-by-category', title: 'The Amazon Referral % Cheat Sheet', category: 'Fees', readTime: 6, date: 'Apr 18, 2026', excerpt: 'Referral percentages range from 6% to 45% by category. Here is the working table for 2026, ordered by margin impact.', art: 'gradient-3' },
  { id: 'fba-vs-fbm', title: 'FBA vs FBM: A Net-Profit Decision Tree', category: 'Strategy', readTime: 7, date: 'Apr 14, 2026', excerpt: 'When fulfillment fees eat your margin, FBM looks tempting. The math is more nuanced — here is the framework.', art: 'gradient-4' },
  { id: 'etsy-listing-math', title: 'The $0.20 Listing Fee Trap on Etsy', category: 'Fees', readTime: 4, date: 'Apr 10, 2026', excerpt: 'Why low-AOV Etsy sellers go broke faster than anyone else, and how to price out of it.', art: 'gradient-5' },
  { id: 'shopify-true-cost', title: 'Shopify Plus: Is It Actually Cheaper?', category: 'Strategy', readTime: 9, date: 'Apr 6, 2026', excerpt: 'Shopify looks fee-free until you add gateway, app stack, theme, and ad attribution leakage. The honest unit economics.', art: 'gradient-6' },
  { id: 'cogs-landed-cost', title: 'Landed COGS: What Belongs In It', category: 'Operations', readTime: 6, date: 'Apr 1, 2026', excerpt: 'Inbound freight, duties, packaging, QC, returns reserve. If you are not landing your cost, you are guessing.', art: 'gradient-1' },
  { id: 'ad-spend-attribution', title: 'Stop Trusting Blended ROAS', category: 'Marketing', readTime: 7, date: 'Mar 26, 2026', excerpt: 'iOS still hurts attribution. Here is how to compute a defensible ad cost per unit when the platforms cannot agree.', art: 'gradient-2' },
  { id: 'pricing-for-profit', title: 'Pricing Backwards From Net Profit', category: 'Strategy', readTime: 5, date: 'Mar 20, 2026', excerpt: 'The reverse pricing model: pick your target net per unit, then build the price up. Almost nobody does this.', art: 'gradient-3' },
  { id: 'returns-reserve', title: 'How to Reserve for Returns', category: 'Operations', readTime: 4, date: 'Mar 15, 2026', excerpt: 'A 12% return rate is not a 12% revenue hit. It is closer to 18% net. The accounting most sellers get wrong.', art: 'gradient-4' },
  { id: 'multi-channel-allocation', title: 'Allocating Inventory Across 4 Channels', category: 'Operations', readTime: 8, date: 'Mar 10, 2026', excerpt: 'You have 800 units. TikTok wants velocity, Amazon wants a buffer, Etsy wants 1-of-1 listings. Here is the allocation math.', art: 'gradient-5' },
  { id: 'tax-2026', title: 'Sales Tax Nexus in 2026', category: 'Compliance', readTime: 10, date: 'Mar 5, 2026', excerpt: 'Marketplace facilitator laws keep mutating. A practical, non-CPA primer for omnichannel sellers.', art: 'gradient-6' },
];

const CATEGORIES = ['All', 'Strategy', 'Fees', 'Operations', 'Marketing', 'Compliance'];

function GradientArt({ variant, num }) {
  const variants = {
    'gradient-1': 'linear-gradient(135deg, #0d2620 0%, #0a1612 100%)',
    'gradient-2': 'linear-gradient(135deg, #1a1633 0%, #0a0c1a 100%)',
    'gradient-3': 'linear-gradient(135deg, #2a1a0d 0%, #150a04 100%)',
    'gradient-4': 'linear-gradient(135deg, #1d2a14 0%, #0a1106 100%)',
    'gradient-5': 'linear-gradient(135deg, #2a0d1a 0%, #15040a 100%)',
    'gradient-6': 'linear-gradient(135deg, #0d1a2a 0%, #04081a 100%)',
  };
  return (
    <div style={{
      width: '100%', height: '100%',
      background: `repeating-linear-gradient(45deg, rgba(255,255,255,0.025) 0 8px, transparent 8px 16px), ${variants[variant]}`,
      display: 'grid', placeItems: 'center'
    }}>
      <div style={{
        fontFamily: 'JetBrains Mono, monospace',
        fontSize: 36, fontWeight: 700,
        color: 'rgba(255,255,255,0.18)',
        letterSpacing: '-0.04em',
      }}>
        {num != null ? `0${num}`.slice(-2) : '—'}
      </div>
    </div>
  );
}

function KnowledgeCenter({ onNavigate }) {
  const [filter, setFilter] = useStateP('All');
  const featured = ARTICLES.find(a => a.featured);
  const others = ARTICLES.filter(a => !a.featured);
  const visible = filter === 'All' ? others : others.filter(a => a.category === filter);

  return (
    <div className="container">
      <div className="page-eyebrow"><span>Knowledge center</span></div>
      <h1 className="page-title">The Seller's Profit Resource Center</h1>
      <p className="page-sub">Expert guides on platform fees, margin optimization, and e-commerce finance.<br/><span style={{ fontSize: '15px', color: 'var(--text-mute)', display: 'inline-block', marginTop: 8 }}>Navigate the complex financial landscape of TikTok Shop, Amazon FBA, Etsy, and Shopify. Access deep-dive articles on calculating true COGS, reducing hidden platform fees, and the critical operational math required to maximize your net profit in 2026.</span></p>

      <div className="kc-hero" onClick={() => onNavigate('article/' + featured.id)} style={{ cursor: 'pointer' }}>
        <div className="kc-hero-body">
          <div>
            <div className="kc-hero-tag">⬢ Featured · {featured.category}</div>
            <h2 className="kc-hero-title">{featured.title}</h2>
            <p style={{ color: 'var(--text-dim)', fontSize: 15.5, lineHeight: 1.55, margin: 0, maxWidth: 480 }}>{featured.excerpt}</p>
          </div>
          <div className="kc-hero-meta">
            <span>{featured.date}</span><span className="dot"></span>
            <span>{featured.readTime} min read</span><span className="dot"></span>
            <span>By the editorial desk</span>
          </div>
        </div>
        <div className="kc-hero-art">
          <div className="kc-hero-art-num">01</div>
          <div className="kc-hero-art-cap">Lead essay · 2026 operator series</div>
        </div>
      </div>

      <div className="kc-filters">
        {CATEGORIES.map(c => (
          <button key={c} className={`kc-filter ${filter === c ? 'active' : ''}`} onClick={() => setFilter(c)}>
            {c}
          </button>
        ))}
      </div>

      <div className="kc-grid">
        {visible.map((a, i) => (
          <article key={a.id} className="kc-card" onClick={() => onNavigate('article/' + a.id)}>
            <div className="kc-card-art">
              <GradientArt variant={a.art} num={i + 2} />
              <span className="kc-card-tag">{a.category}</span>
            </div>
            <div className="kc-card-body">
              <h3 className="kc-card-title">{a.title}</h3>
              <p style={{ color: 'var(--text-dim)', fontSize: 13.5, margin: 0, lineHeight: 1.5 }}>{a.excerpt}</p>
              <div className="kc-card-meta">
                <span>{a.date}</span><span className="dot"></span><span>{a.readTime} min</span>
              </div>
            </div>
          </article>
        ))}
      </div>
    </div>
  );
}

function Article({ id, onNavigate }) {
  const a = ARTICLES.find(x => x.id === id) || ARTICLES[0];
  const body = a.body || (window.ARTICLE_BODIES && window.ARTICLE_BODIES[a.id]) || [
    { type: 'p', text: a.excerpt },
    { type: 'p', text: 'Full essay forthcoming. Subscribe to the operator brief at the foot of this page to be notified.' },
  ];
  return (
    <div className="container-narrow">
      <button className="back-link" onClick={() => onNavigate('knowledge')}>← Knowledge center</button>
      <div className="article">
        <div className="page-eyebrow"><span>{a.category}</span></div>
        <h1 className="page-title" style={{ fontSize: 38 }}>{a.title}</h1>
        <div style={{ display: 'flex', gap: 14, color: 'var(--text-mute)', fontSize: 13, fontFamily: 'JetBrains Mono, monospace', marginBottom: 32 }}>
          <span>{a.date}</span><span>·</span><span>{a.readTime} min read</span><span>·</span><span>Editorial desk</span>
        </div>
        {body.map((b, i) => {
          if (b.type === 'p') return <p key={i}>{b.text}</p>;
          if (b.type === 'h') return <h2 key={i}>{b.text}</h2>;
          if (b.type === 'q') return <blockquote key={i}>{b.text}</blockquote>;
          return null;
        })}
      </div>
    </div>
  );
}

function About({ onNavigate }) {
  return (
    <div className="container-narrow">
      <div className="about-centered">
        <div className="page-eyebrow"><span>About</span></div>
        <h1 className="page-title">A utility, not a platform.</h1>
        <p className="about-bio">
          NetSellerProfit is a premier financial utility. We specialize in stripping away the complexity of multi-channel selling to reveal the truth behind the numbers. Our tools are built for the modern entrepreneur who demands accuracy, speed, and professional-grade financial intelligence.
        </p>
      </div>

      <div className="about-grid">
        <div className="stat-card"><div className="v">4</div><div className="k">Channels modeled</div></div>
        <div className="stat-card"><div className="v">∞</div><div className="k">Scenarios per session</div></div>
        <div className="stat-card"><div className="v">$0</div><div className="k">Cost to use the calculator</div></div>
      </div>

      <h2 style={{ fontSize: 24, letterSpacing: '-0.02em', marginTop: 56, marginBottom: 4 }}>How we think</h2>
      <p style={{ color: 'var(--text-dim)', fontSize: 15, margin: '0 0 24px' }}>The three principles every feature is measured against.</p>

      <div className="principle-grid">
        <div className="principle">
          <div className="num">01</div>
          <h4>Net first, always</h4>
          <p>Every screen leads with the number that pays you. GMV charts go in the basement. We surface what hits the bank.</p>
        </div>
        <div className="principle">
          <div className="num">02</div>
          <h4>No telemetry theatre</h4>
          <p>We do not ship dashboards full of vanity widgets. If a metric does not change a decision today, it does not earn pixels.</p>
        </div>
        <div className="principle">
          <div className="num">03</div>
          <h4>Honest about fees</h4>
          <p>Platform takes change quarterly. We surface defaults, expose every override, and tell you when our averages are stale.</p>
        </div>
      </div>

      <div className="cta-card">
        <div>
          <h3>Run your first SKU.</h3>
          <p>Drop in a single product. We will tell you what it actually earns on every channel — in the next 30 seconds.</p>
        </div>
        <button className="btn-primary" onClick={() => onNavigate('calculator')}>Open the calculator →</button>
      </div>
    </div>
  );
}

const CONTACT_ENDPOINT = '/contact.php';

function Contact({ onNavigate }) {
  const [sent, setSent] = useStateP(false);
  const [error, setError] = useStateP('');
  const [submitting, setSubmitting] = useStateP(false);

  const submit = (e) => {
    e.preventDefault();
    setError('');
    setSubmitting(true);
    const data = new FormData(e.target);
    fetch(CONTACT_ENDPOINT, {
      method: 'POST',
      body: data,
    })
      .then((r) => {
        setSubmitting(false);
        if (r.ok) { setSent(true); }
        else { setError('Something went wrong — please email hello@netsellerprofit.com directly.'); }
      })
      .catch(() => {
        setSubmitting(false);
        setError('Network error — please email hello@netsellerprofit.com directly.');
      });
  };

  return (
    <div className="container-narrow">
      <div className="page-eyebrow"><span>Contact</span></div>
      <h1 className="page-title">Get in touch.</h1>
      <p className="page-sub">Press, partnerships, fee corrections, or just want to send us your spreadsheet for a sanity check — we read every message.</p>

      <div className="contact-grid">
        <div>
          <div className="contact-method">
            <div className="k">Inquiries</div>
            <div className="v"><a href="mailto:hello@netsellerprofit.com">hello@netsellerprofit.com</a></div>
          </div>
          <div className="contact-method">
            <div className="k">Response time</div>
            <div className="v" style={{ fontFamily: 'JetBrains Mono, monospace', fontSize: 14 }}>&lt; 24 business hours</div>
          </div>
        </div>

        <div>
          {sent ? (
            <div className="card" style={{ borderColor: 'var(--success-line)', background: 'var(--success-soft)' }}>
              <div style={{ fontFamily: 'JetBrains Mono, monospace', fontSize: 11, color: 'var(--success)', textTransform: 'uppercase', letterSpacing: '0.08em', marginBottom: 8 }}>Message received</div>
              <h3 style={{ margin: '0 0 8px' }}>Thanks — we'll be in touch.</h3>
              <p style={{ color: 'var(--text-dim)', margin: 0 }}>A human will read this and write back within one business day.</p>
            </div>
          ) : (
            <form className="card" onSubmit={submit}>
              {/* Honeypot — hidden from humans, bots fill it, PHP rejects silently */}
              <div style={{ display: 'none' }} aria-hidden="true">
                <label>Leave this blank<input type="text" name="website" tabIndex="-1" autoComplete="off" /></label>
              </div>
              <div className="form-row"><label>Name</label><input type="text" name="name" required /></div>
              <div className="form-row"><label>Email</label><input type="email" name="email" required /></div>
              <div className="form-row"><label>Subject</label><input type="text" name="subject" required /></div>
              <div className="form-row"><label>Message</label><textarea name="message" rows="5" required></textarea></div>
              {error && <p style={{ color: 'var(--danger)', fontSize: 13, margin: '4px 0 0' }}>{error}</p>}
              <button className="btn-primary" type="submit" disabled={submitting}>
                {submitting ? 'Sending…' : 'Send message →'}
              </button>
            </form>
          )}
        </div>
      </div>
    </div>
  );
}

function Disclaimer() {
  return (
    <div className="container-narrow">
      <div className="page-eyebrow"><span>Legal</span></div>
      <h1 className="page-title">Financial disclaimer.</h1>
      <p className="page-sub">Plain-language statement of what NetSellerProfit is and is not.</p>

      <div className="legal-block">
        <h3>⬢ Disclaimer</h3>
        <p style={{ fontWeight: 500, color: 'var(--text)' }}>
          NetSellerProfit provides financial estimations for informational purposes only.
        </p>
        <p>
          All calculations are based on user-inputted data and current platform fee averages which are subject to change. NetSellerProfit does not provide formal accounting, tax, or legal advice. Please consult with a certified professional before making significant business decisions.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Fee data sources</h3>
        <p>
          Default platform fees reflect publicly published rates as of Q1 2026. Referral percentages, FBA pick/pack tiers, and gateway processing rates vary by category, weight, transaction volume, and contract status. Override every default for a specific SKU before relying on the output.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Data handling</h3>
        <p>
          The calculator runs entirely in your browser. SKU inputs and saved scenarios are stored in your browser's local storage and never transmitted to our servers. Clearing your browser data will remove saved scenarios.
        </p>
      </div>
    </div>
  );
}

window.KnowledgeCenter = KnowledgeCenter;
window.Article = Article;
window.About = About;
window.Contact = Contact;
function Privacy() {
  return (
    <div className="container-narrow">
      <div className="page-eyebrow"><span>Legal</span></div>
      <h1 className="page-title">Privacy policy.</h1>
      <p className="page-sub">Last updated: May 2026. This policy explains what we collect, what we don't, and how third-party services may use data when you visit netsellerprofit.com.</p>

      <div className="legal-block">
        <h3>⬢ Information we collect</h3>
        <p>
          NetSellerProfit does not require an account. The calculator runs entirely in your browser. SKU inputs, saved scenarios, and tweaks are stored in your browser's local storage and are never transmitted to our servers.
        </p>
        <p>
          When you submit the contact form, we receive the name, email address, subject, and message you provide. We use this information solely to respond to your inquiry and do not add you to any marketing list without your explicit opt-in.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Log files and analytics</h3>
        <p>
          Like most websites, our hosting provider may automatically log standard request information including IP address, browser type, referring page, and timestamp. This information is used to monitor site health and is not linked to any personally identifying data we hold.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Cookies and web storage</h3>
        <p>
          We use browser local storage to remember your selected platform, saved scenarios, and tweak preferences across visits. This data stays on your device. You can clear it at any time by clearing site data in your browser settings.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Advertising and third-party vendors</h3>
        <p>
          Third-party vendors, including Google, may serve ads on this site. Google's use of advertising cookies enables it and its partners to serve ads based on your visit to this site and other sites on the internet.
        </p>
        <p>
          You may opt out of personalized advertising by visiting <a href="https://www.google.com/settings/ads" target="_blank" rel="noopener" style={{ color: 'var(--success)' }}>Google Ads Settings</a>. You may also opt out of a third-party vendor's use of cookies for personalized advertising by visiting <a href="https://www.aboutads.info/" target="_blank" rel="noopener" style={{ color: 'var(--success)' }}>aboutads.info</a>.
        </p>
        <p>
          Third-party vendors and ad networks may use cookies, web beacons, or similar technologies to collect non-personally identifying information about your visits to this and other websites in order to provide advertisements about goods and services of interest to you.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Children's privacy</h3>
        <p>
          NetSellerProfit is not directed to children under 13, and we do not knowingly collect personal information from children. If you believe a child has provided us with personal information, please contact us so we can delete it.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Your rights</h3>
        <p>
          Depending on where you live, you may have the right to access, correct, or delete personal information we hold about you, or to opt out of personalized advertising. To exercise any of these rights, contact us using the address on the Contact page.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Changes to this policy</h3>
        <p>
          We may update this privacy policy from time to time. The "Last updated" date at the top of this page reflects the most recent revision. Continued use of the site after changes are posted constitutes acceptance of the revised policy.
        </p>
      </div>

      <div className="legal-block">
        <h3>⬢ Contact</h3>
        <p>
          Privacy questions: <a href="mailto:hello@netsellerprofit.com" style={{ color: 'var(--success)' }}>hello@netsellerprofit.com</a>.
        </p>
      </div>
    </div>
  );
}

function Terms() {
  return (
    <div className="container-narrow">
      <div className="page-eyebrow"><span>Legal</span></div>
      <h1 className="page-title">Terms of service.</h1>
      <p className="page-sub">Last updated: May 2026. By accessing netsellerprofit.com you agree to the terms below. Please read them.</p>

      <div className="legal-block">
        <h3>⬢ Acceptance of terms</h3>
        <p>By accessing or using NetSellerProfit ("the Service"), you agree to be bound by these Terms of Service. If you do not agree, do not use the Service.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Description of service</h3>
        <p>NetSellerProfit provides a free, browser-based calculator and editorial library for estimating net profit on multi-channel e-commerce sales. All calculations run on your device. The Service is provided "as is" and "as available" without warranties of any kind.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ No professional advice</h3>
        <p>The Service does not provide accounting, tax, legal, or financial advice. Output is informational only. You are solely responsible for any business decision you make using the Service. Consult a qualified professional before acting on the output.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ User conduct</h3>
        <p>You agree not to: (a) reverse-engineer or scrape the Service for commercial republication; (b) interfere with the Service's operation; (c) use the Service to violate applicable laws or third-party rights; (d) misrepresent the Service or its output as your own product.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Intellectual property</h3>
        <p>All content, design, code, and editorial material on netsellerprofit.com is the property of NetSellerProfit and is protected by applicable intellectual property laws. You may not reproduce, distribute, or create derivative works without written permission, except for the limited personal use of running calculations on your own SKUs.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Third-party content and links</h3>
        <p>The Service may reference third-party platforms (TikTok Shop, Amazon, Etsy, Shopify) and link to external resources. We are not responsible for the content, policies, or fees of any third party. Platform fee defaults shown are averages and subject to change without notice.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Limitation of liability</h3>
        <p>To the maximum extent permitted by law, NetSellerProfit shall not be liable for any indirect, incidental, special, consequential, or punitive damages, including lost profits or lost data, arising from your use of the Service. Your sole remedy for dissatisfaction is to stop using the Service.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Indemnification</h3>
        <p>You agree to indemnify and hold NetSellerProfit harmless from any claim or demand arising out of your use of the Service or your violation of these Terms.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Changes to terms</h3>
        <p>We may update these Terms periodically. Continued use of the Service after changes are posted constitutes acceptance. The "Last updated" date reflects the most recent revision.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Governing law</h3>
        <p>These Terms are governed by the laws of the State of Texas, USA, without regard to conflict-of-law principles. Disputes shall be resolved in the state or federal courts located in Travis County, Texas.</p>
      </div>

      <div className="legal-block">
        <h3>⬢ Contact</h3>
        <p>Questions about these Terms: <a href="mailto:hello@netsellerprofit.com" style={{ color: 'var(--success)' }}>hello@netsellerprofit.com</a>.</p>
      </div>
    </div>
  );
}

window.Terms = Terms;
window.Privacy = Privacy;
window.Disclaimer = Disclaimer;
