/* global React, ReactDOM */
const { useState, useMemo, useEffect, useCallback } = React;

const RESOURCES = window.RESOURCES;
const TOPICS = window.TOPICS;
const FORMATS = window.FORMATS;

// ─── i18n ────────────────────────────────────────────────────
const LANG = (window.SITE_LANG === 'pl' || document.documentElement.lang === 'pl') ? 'pl' : 'en';
const BASE = LANG === 'pl' ? '/pl/' : '/';
const STR = {
  en: {
    nav: { whatwedo: 'What we do', how: 'How we work', results: 'Results', about: 'About', resources: 'Resources', book: 'Book a call', saved: 'Saved' },
    heroEyebrow: 'Resources · Field notes from inside CEE leadership teams',
    heroLead: 'Years of running OKRs, clarification sprints, and leadership work inside Poland and CEE — written up plainly, for the people who have to make Monday happen.',
    stat1: 'Essays\n& field notes', stat2: 'Frameworks\nyou can use Monday', stat3: 'Inside CEE\nleadership teams',
    browseTopic: 'Browse by topic', byFormat: 'By format', searchPh: 'Search the field notes…',
    pieces: 'pieces', piecesOn: 'pieces on', clear: 'Clear', sortBy: 'Sort by',
    sortNew: 'Newest first', sortRead: 'Most read', sortShort: 'Shortest first',
    thisWeek: 'This week', minRead: 'min read', min: 'min', readEssay: 'Read the essay',
    readNow: 'Read it now', download: 'Download', watch: 'Watch', signUp: 'Sign up',
    fmtArticle: 'Article', fmtShort: '60s read', fmtTemplate: 'Framework', fmtVideo: 'Watch', fmtWebinar: 'Webinar',
    webinarLive: 'Live session', webinarCta: 'Reserve your spot',
    emptyTitle: 'Nothing matches that yet.', emptyBody1: 'Try widening the filters — or ', emptyBody2: 'clear them all', emptyBody3: '.',
    drawerEyebrow: 'Your reading list', drawerTitle: 'Saved for later',
    drawerEmpty: 'Nothing saved yet.', drawerEmptyHint: 'Tap the bookmark on any resource to build a list you can come back to.',
    drawerSend: 'Send the list to my inbox', drawerNote: 'We’ll send your saved items as a single email — no newsletter signup unless you ask for one.',
    convertEyebrow: 'Read enough?', convertTitle: 'The fastest way to know if we can help is a thirty-minute call.',
    convertLead: 'No pitch deck. No generic proposal. We’ll talk through what isn’t working in your leadership team — and tell you honestly whether we’re the right people for it.',
    convertCta: 'Book a discovery call', convertLink: 'or read how we work →',
    convertCardTitle: 'What you’ll leave with',
    convertP1: 'An honest read on whether your strategy actually has a chance of executing this quarter.',
    convertP2: 'One concrete thing you can change in next week’s leadership meeting.',
    convertP3: 'A clear no, if we’re not the right fit. We tell you. No follow-up sequence.',
    convertFoot: 'Response within one business day · support@leaveamark.xyz',
    footDesc: 'Boutique B2B consulting for leadership teams across Poland and CEE. Strategy, OKRs, execution — senior partners, always.',
    footLoc: 'Kraków, Poland', footResources: 'Resources', footCompany: 'Company', footContact: 'Contact',
    fl_all: 'All essays', fl_short: '60-second reads', fl_frame: 'Frameworks library', fl_video: 'Video & talks',
    privacy: 'Privacy', terms: 'Terms', cookies: 'Cookie settings',
  },
  pl: {
    nav: { whatwedo: 'Co robimy', how: 'Jak pracujemy', results: 'Efekty', about: 'O nas', resources: 'Wiedza', book: 'Umów rozmowę', saved: 'Zapisane' },
    heroEyebrow: 'Wiedza · Notatki z wnętrza zespołów liderskich w CEE',
    heroLead: 'Lata wdrażania OKR, sprintów porządkujących strategię i pracy z liderami w Polsce i regionie CEE — opisane prosto, dla tych, którzy muszą dowieźć poniedziałek.',
    stat1: 'Eseje\ni notatki', stat2: 'Frameworki\ngotowe na poniedziałek', stat3: 'Wewnątrz zespołów\nliderskich w CEE',
    browseTopic: 'Przeglądaj po temacie', byFormat: 'Po formacie', searchPh: 'Szukaj w notatkach…',
    pieces: 'materiałów', piecesOn: 'materiałów o', clear: 'Wyczyść', sortBy: 'Sortuj',
    sortNew: 'Najnowsze', sortRead: 'Najczęściej czytane', sortShort: 'Najkrótsze',
    thisWeek: 'W tym tygodniu', minRead: 'min czytania', min: 'min', readEssay: 'Przeczytaj esej',
    readNow: 'Przeczytaj teraz', download: 'Pobierz', watch: 'Obejrzyj', signUp: 'Zapisz się',
    fmtArticle: 'Artykuł', fmtShort: 'Krótkie', fmtTemplate: 'Framework', fmtVideo: 'Wideo', fmtWebinar: 'Webinar',
    webinarLive: 'Sesja na żywo', webinarCta: 'Zarezerwuj miejsce',
    emptyTitle: 'Nic tu jeszcze nie pasuje.', emptyBody1: 'Spróbuj poszerzyć filtry — albo ', emptyBody2: 'wyczyść wszystkie', emptyBody3: '.',
    drawerEyebrow: 'Twoja lista do czytania', drawerTitle: 'Zapisane na później',
    drawerEmpty: 'Nic jeszcze nie zapisano.', drawerEmptyHint: 'Kliknij zakładkę przy dowolnym materiale, by zbudować listę, do której wrócisz.',
    drawerSend: 'Wyślij listę na mój e-mail', drawerNote: 'Wyślemy zapisane materiały w jednym mailu — bez zapisu do newslettera, chyba że o niego poprosisz.',
    convertEyebrow: 'Wystarczy czytania?', convertTitle: 'Najszybszy sposób, by sprawdzić, czy możemy pomóc, to 30-minutowa rozmowa.',
    convertLead: 'Bez prezentacji. Bez ogólnej oferty. Porozmawiamy o tym, co nie działa w Twoim zespole liderskim — i szczerze powiemy, czy jesteśmy właściwymi ludźmi.',
    convertCta: 'Umów konsultację', convertLink: 'albo zobacz, jak pracujemy →',
    convertCardTitle: 'Z czym wyjdziesz',
    convertP1: 'Szczerą ocenę, czy Twoja strategia ma realną szansę na egzekucję w tym kwartale.',
    convertP2: 'Jedną konkretną rzecz do zmiany na kolejnym spotkaniu zespołu.',
    convertP3: 'Jasne „nie", jeśli nie pasujemy. Powiemy to wprost. Bez sekwencji follow-upów.',
    convertFoot: 'Odpowiedź w jeden dzień roboczy · support@leaveamark.xyz',
    footDesc: 'Butikowe doradztwo B2B dla zespołów liderskich w Polsce i regionie CEE. Strategia, OKR, egzekucja — zawsze starsi partnerzy.',
    footLoc: 'Kraków, Polska', footResources: 'Wiedza', footCompany: 'Firma', footContact: 'Kontakt',
    fl_all: 'Wszystkie eseje', fl_short: 'Krótkie teksty', fl_frame: 'Biblioteka frameworków', fl_video: 'Wideo i wystąpienia',
    privacy: 'Prywatność', terms: 'Regulamin', cookies: 'Ustawienia cookies',
    topicLabel: { All: 'Wszystkie', Strategy: 'Strategia', OKRs: 'OKR', Leadership: 'Przywództwo', Execution: 'Egzekucja', CEE: 'CEE' },
  }
};
const topicLabel = (tp) => (S.topicLabel && S.topicLabel[tp]) || tp;
const S = STR[LANG];

const FORMAT_LABEL = {
  article: S.fmtArticle,
  short: S.fmtShort,
  template: S.fmtTemplate,
  video: S.fmtVideo,
  webinar: S.fmtWebinar,
};

// ─── Hero ────────────────────────────────────────────────────
const HERO = {
  eyebrow: S.heroEyebrow,
  title: LANG === 'pl'
    ? (<>Strategia<br /><em>bez</em><br />prezentacji.</>)
    : (<>Strategy<br /><em>without</em> the<br />slide deck.</>),
  lead: S.heroLead,
};

// ─── Bookmark hook ───────────────────────────────────────────
function useBookmarks() {
  const [saved, setSaved] = useState(() => {
    try { return JSON.parse(localStorage.getItem('lam_saved') || '[]'); }
    catch { return []; }
  });
  useEffect(() => {
    localStorage.setItem('lam_saved', JSON.stringify(saved));
  }, [saved]);
  const toggle = useCallback((id) => {
    setSaved((s) => s.includes(id) ? s.filter((x) => x !== id) : [...s, id]);
  }, []);
  return { saved, toggle };
}

// ─── Icons ───────────────────────────────────────────────────
const Icon = {
  Bookmark: ({ filled }) => (
    <svg width="16" height="16" viewBox="0 0 24 24" fill={filled ? 'currentColor' : 'none'} stroke="currentColor" strokeWidth="1.8" strokeLinejoin="round">
      <path d="M6 3h12v18l-6-4-6 4V3z" />
    </svg>
  ),
  Play: () => (
    <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z" /></svg>
  ),
  Download: () => (
    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
      <path d="M12 3v12m0 0l-4-4m4 4l4-4M5 19h14" />
    </svg>
  ),
  Clock: () => (
    <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><circle cx="12" cy="12" r="9" /><path d="M12 7v5l3 2" /></svg>
  ),
  ArrowRight: () => (
    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M5 12h14M13 5l7 7-7 7" /></svg>
  ),
  Close: () => (
    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><path d="M6 6l12 12M18 6L6 18" /></svg>
  ),
  Calendar: () => (
    <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" /><path d="M16 2v4M8 2v4M3 10h18" /></svg>
  ),
  Search: () => (
    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><circle cx="11" cy="11" r="7" /><path d="M21 21l-5-5" /></svg>
  ),
};

// ─── Bookmark button ─────────────────────────────────────────
function BookmarkBtn({ id, saved, toggle, mode = 'card' }) {
  const isSaved = saved.includes(id);
  return (
    <button
      className={`bookmark bookmark-${mode} ${isSaved ? 'on' : ''}`}
      onClick={(e) => { e.stopPropagation(); toggle(id); }}
      aria-label={isSaved ? 'Remove from reading list' : 'Save for later'}
    >
      <Icon.Bookmark filled={isSaved} />
    </button>
  );
}

// ─── Cards ───────────────────────────────────────────────────
function FeaturedCard({ item, saved, toggle }) {
  return (
    <article className="card-featured">
      <div className={`cf-art ${item.image ? 'cf-art-photo' : ''}`}>
        <div className="cf-stamp">
          <span className="cf-stamp-label">This week</span>
          <span className="cf-stamp-num">№ 47</span>
        </div>
        {item.image ? (
          <img className="cf-photo" src={item.image} alt={item.title} />
        ) : (
          <svg className="cf-mark" viewBox="0 0 200 200" fill="none">
            <circle cx="100" cy="100" r="86" stroke="#69E06D" strokeWidth="0.7" />
            <circle cx="100" cy="100" r="62" stroke="#FDB3A4" strokeWidth="0.7" />
            <circle cx="100" cy="100" r="40" fill="#EF4421" />
            <text x="100" y="108" textAnchor="middle" fontFamily="Libre Baskerville" fontStyle="italic" fontSize="32" fill="#FFFDF6" fontWeight="700">M</text>
          </svg>
        )}
      </div>
      <div className="cf-body">
        <div className="cf-meta">
          {item.type === 'webinar' && <><span className="format-pill format-pill-webinar">{FORMAT_LABEL.webinar}</span><span className="meta-dot">·</span></>}
          <span className="topic-tag">{topicLabel(item.topic)}</span>
          <span className="meta-dot">·</span>
          {item.type === 'webinar' ? (
            <span className="meta-text"><Icon.Calendar /> {item.eventDate || item.date}</span>
          ) : (
            <span className="meta-text"><Icon.Clock /> {item.minutes} {S.minRead}</span>
          )}
          {item.type !== 'webinar' && <><span className="meta-dot">·</span><span className="meta-text">{item.date}</span></>}
        </div>
        <h2 className="cf-title">{item.title}</h2>
        <p className="cf-dek">{item.dek}</p>
        <div className="cf-foot">
          <div className="cf-author">
            <div className="cf-avatar" aria-hidden>
              {item.authorImg
                ? <img src={item.authorImg} alt={item.author} />
                : item.author.split(' ').map(w=>w[0]).join('')}
            </div>
            <div>
              <div className="cf-name">{item.author}</div>
              <div className="cf-role">{item.role}</div>
            </div>
          </div>
          <div className="cf-actions">
            <BookmarkBtn id={item.id} saved={saved} toggle={toggle} mode="featured" />
            <a className="btn btn-navy" href={item.url || (item.signupUrl || '#')}>{item.type === 'webinar' ? S.webinarCta : S.readEssay} <Icon.ArrowRight /></a>
          </div>
        </div>
      </div>
    </article>
  );
}

function ArticleCard({ item, saved, toggle }) {
  return (
    <article className={`card card-article ${item.image ? 'card-article-photo' : ''} ${item.accent === 'navy' ? 'card-navy' : ''}`}>
      {item.image && (
        <a className="article-thumb" href={item.url || '#'} tabIndex={-1} aria-hidden="true">
          <img src={item.image} alt="" loading="lazy" />
        </a>
      )}
      <div className="card-body">
        <div className="card-top">
          <span className="topic-tag">{topicLabel(item.topic)}</span>
          <BookmarkBtn id={item.id} saved={saved} toggle={toggle} />
        </div>
        <h3 className="card-title"><a href={item.url || '#'} className="card-title-link">{item.title}</a></h3>
        <p className="card-dek">{item.dek}</p>
        <div className="card-foot">
          <span className="format-pill format-pill-article">
            {FORMAT_LABEL.article}
          </span>
          <span className="meta-text"><Icon.Clock /> {item.minutes} {S.min}</span>
          <span className="card-by">{item.author}</span>
        </div>
      </div>
    </article>
  );
}

function ShortCard({ item, saved, toggle }) {
  return (
    <article className="card card-short">
      <div className="card-top">
        <span className="topic-tag topic-tag-cream">{topicLabel(item.topic)}</span>
        <BookmarkBtn id={item.id} saved={saved} toggle={toggle} />
      </div>
      <div className="short-stamp">60<span>sec</span></div>
      <h3 className="card-title card-title-short">{item.title}</h3>
      <p className="card-dek card-dek-short">{item.dek}</p>
      <div className="card-foot">
        <span className="format-pill format-pill-short">{FORMAT_LABEL.short}</span>
        <a className="card-cta" href={item.url || '#'}>{S.readNow} <Icon.ArrowRight /></a>
      </div>
    </article>
  );
}

function TemplateCard({ item, saved, toggle }) {
  return (
    <article className="card card-template">
      <div className="card-top">
        <span className="topic-tag">{topicLabel(item.topic)}</span>
        <BookmarkBtn id={item.id} saved={saved} toggle={toggle} />
      </div>
      <div className="tmpl-doc" aria-hidden>
        <div className="tmpl-doc-corner"></div>
        <div className="tmpl-doc-lines">
          <span style={{ width: '70%' }}></span>
          <span style={{ width: '40%' }}></span>
          <span style={{ width: '90%' }}></span>
          <span style={{ width: '60%' }}></span>
          <span style={{ width: '80%' }}></span>
        </div>
      </div>
      <h3 className="card-title">{item.title}</h3>
      <p className="card-dek">{item.dek}</p>
      <div className="card-foot">
        <span className="format-pill format-pill-template">
          {FORMAT_LABEL.template}
        </span>
        <span className="meta-text">{item.format}</span>
        <a className="card-cta" href={item.url || '#'}><Icon.Download /> {S.download}</a>
      </div>
    </article>
  );
}

function WebinarCard({ item, saved, toggle }) {
  return (
    <article className="card card-webinar">
      <div className={`webinar-thumb ${item.image ? 'webinar-thumb-photo' : ''}`} aria-hidden>
        {item.image ? (
          <img className="webinar-photo" src={item.image} alt="" loading="lazy" />
        ) : (
          <svg className="webinar-bg" viewBox="0 0 400 220" preserveAspectRatio="none">
            <rect width="400" height="220" fill="#080F30" />
            <circle cx="320" cy="50" r="64" fill="#EF4421" opacity="0.18" />
            <circle cx="60" cy="180" r="86" fill="#69E06D" opacity="0.18" />
          </svg>
        )}
        <div className="webinar-live-pill">{S.webinarLive}</div>
      </div>
      <div className="card-body">
        <div className="card-top">
          <span className="topic-tag">{topicLabel(item.topic)}</span>
          <BookmarkBtn id={item.id} saved={saved} toggle={toggle} />
        </div>
        <h3 className="card-title"><a href={item.url || '#'} className="card-title-link">{item.title}</a></h3>
        <p className="card-dek">{item.dek}</p>
        <div className="card-foot">
          <span className="format-pill format-pill-webinar">{FORMAT_LABEL.webinar}</span>
          <span className="meta-text"><Icon.Calendar /> {item.eventDate || item.date}</span>
          <a className="card-cta" href={item.url || '#'}>{S.webinarCta} <Icon.ArrowRight /></a>
        </div>
      </div>
    </article>
  );
}

function VideoCard({ item, saved, toggle }) {
  return (
    <article className="card card-video">
      <div className="video-thumb" aria-hidden>
        <svg className="video-bg" viewBox="0 0 400 220" preserveAspectRatio="none">
          <rect width="400" height="220" fill="#080F30" />
          <circle cx="320" cy="50" r="64" fill="#EF4421" opacity="0.18" />
          <circle cx="60" cy="180" r="86" fill="#69E06D" opacity="0.18" />
        </svg>
        <div className="video-play"><Icon.Play /></div>
        <div className="video-duration">{item.duration}</div>
      </div>
      <div className="card-body">
        <div className="card-top">
          <span className="topic-tag">{topicLabel(item.topic)}</span>
          <BookmarkBtn id={item.id} saved={saved} toggle={toggle} />
        </div>
        <h3 className="card-title">{item.title}</h3>
        <p className="card-dek">{item.dek}</p>
        <div className="card-foot">
          <span className="format-pill format-pill-video"><Icon.Play /> {FORMAT_LABEL.video}</span>
        </div>
      </div>
    </article>
  );
}

function ResourceCard({ item, saved, toggle }) {
  switch (item.type) {
    case 'short': return <ShortCard item={item} saved={saved} toggle={toggle} />;
    case 'template': return <TemplateCard item={item} saved={saved} toggle={toggle} />;
    case 'video': return <VideoCard item={item} saved={saved} toggle={toggle} />;
    case 'webinar': return <WebinarCard item={item} saved={saved} toggle={toggle} />;
    default: return <ArticleCard item={item} saved={saved} toggle={toggle} />;
  }
}

// ─── Saved drawer ────────────────────────────────────────────
function SavedDrawer({ open, onClose, saved, toggle }) {
  const items = saved.map((id) => RESOURCES.find((r) => r.id === id)).filter(Boolean);
  return (
    <>
      <div className={`drawer-scrim ${open ? 'on' : ''}`} onClick={onClose}></div>
      <aside className={`drawer ${open ? 'on' : ''}`} aria-hidden={!open}>
        <div className="drawer-head">
          <div>
            <div className="drawer-eyebrow">{S.drawerEyebrow}</div>
            <h3 className="drawer-title">{S.drawerTitle}</h3>
          </div>
          <button className="drawer-close" onClick={onClose} aria-label="Close"><Icon.Close /></button>
        </div>
        <div className="drawer-body">
          {items.length === 0 && (
            <div className="drawer-empty">
              <p>{S.drawerEmpty}</p>
              <p className="drawer-empty-hint">{S.drawerEmptyHint}</p>
            </div>
          )}
          {items.map((it) => (
            <div key={it.id} className="drawer-row">
              <span className="format-pill format-pill-mini">{FORMAT_LABEL[it.type]}</span>
              <div className="drawer-row-body">
                <div className="drawer-row-title">{it.title}</div>
                <div className="drawer-row-meta">{topicLabel(it.topic)} · {it.minutes} {S.min}</div>
              </div>
              <button className="drawer-remove" onClick={() => toggle(it.id)} aria-label="Remove"><Icon.Close /></button>
            </div>
          ))}
        </div>
        {items.length > 0 && (
          <div className="drawer-foot">
            <button className="btn btn-brand drawer-cta">{S.drawerSend} <Icon.ArrowRight /></button>
            <p className="drawer-foot-note">{S.drawerNote}</p>
          </div>
        )}
      </aside>
    </>
  );
}

// ─── Main app ────────────────────────────────────────────────
function App() {
  const [topic, setTopic] = useState('All');
  const [format, setFormat] = useState('all');
  const [query, setQuery] = useState('');
  const [drawerOpen, setDrawerOpen] = useState(false);
  const [menuOpen, setMenuOpen] = useState(false);
  const { saved, toggle } = useBookmarks();

  // The featured "lead story" is pinned in the hero, independent of filters.
  const featured = useMemo(() => RESOURCES.find((r) => r.featured) || RESOURCES[0], []);

  const filtered = useMemo(() => {
    return RESOURCES.filter((r) => {
      if (topic !== 'All' && r.topic !== topic) return false;
      if (format !== 'all' && r.type !== format) return false;
      if (query) {
        const q = query.toLowerCase();
        if (!r.title.toLowerCase().includes(q) && !r.dek.toLowerCase().includes(q)) return false;
      }
      return true;
    });
  }, [topic, format, query]);

  const filtering = topic !== 'All' || format !== 'all' || !!query;
  const rest = filtered.filter((r) => !featured || r.id !== featured.id);

  const counts = useMemo(() => {
    const c = { all: RESOURCES.length };
    FORMATS.forEach((f) => { if (f.id !== 'all') c[f.id] = RESOURCES.filter((r) => r.type === f.id).length; });
    return c;
  }, []);

  const hero = HERO;

  return (
    <>
      {/* NAV */}
      <nav className="nav">
        <div className="nav-inner">
          <a className="logo" href={BASE + 'index.html'}>
            <img src="/assets/lam-logo-full.svg" alt="Leave a Mark" />
          </a>
          <button className={`nav-burger${menuOpen ? ' open' : ''}`} aria-label="Open menu" aria-expanded={menuOpen} onClick={() => setMenuOpen(!menuOpen)}>
            <span></span><span></span><span></span>
          </button>
          <ul className="nav-links">
            <li><a href={BASE + 'what-we-do.html'}>{S.nav.whatwedo}</a></li>
            <li><a href={BASE + 'how-we-work.html'}>{S.nav.how}</a></li>
            <li><a href={BASE + 'results.html'}>{S.nav.results}</a></li>
            <li><a href={BASE + 'about.html'}>{S.nav.about}</a></li>
            <li><a href={BASE + 'resources.html'} className="nav-active">{S.nav.resources}</a></li>
            <li>
              <button className="nav-saved" onClick={() => setDrawerOpen(true)}>
                <Icon.Bookmark filled={saved.length > 0} />
                <span>{S.nav.saved}</span>
                {saved.length > 0 && <span className="nav-saved-count">{saved.length}</span>}
              </button>
            </li>
            <li><a href={BASE + 'contact.html'} className="nav-cta">{S.nav.book}</a></li>
            <li className="nav-lang"><a href={LANG === 'pl' ? '/resources.html' : '/pl/resources.html'}>{LANG === 'pl' ? 'EN' : 'PL'}</a></li>
          </ul>
        </div>
      </nav>

      {/* MOBILE NAV DRAWER (matches the rest of the site) */}
      <div className={`nav-drawer${menuOpen ? ' open' : ''}`} onClick={(e) => { if (e.target.tagName === 'A') setMenuOpen(false); }}>
        <ul>
          <li><a href={BASE + 'what-we-do.html'}>{S.nav.whatwedo}</a></li>
          <li><a href={BASE + 'how-we-work.html'}>{S.nav.how}</a></li>
          <li><a href={BASE + 'results.html'}>{S.nav.results}</a></li>
          <li><a href={BASE + 'about.html'}>{S.nav.about}</a></li>
          <li><a href={BASE + 'resources.html'} className="nav-active">{S.nav.resources}</a></li>
          <li><a href="#" onClick={(e) => { e.preventDefault(); setMenuOpen(false); setDrawerOpen(true); }}>{S.nav.saved}{saved.length > 0 ? ` (${saved.length})` : ''}</a></li>
          <li><a href={LANG === 'pl' ? '/resources.html' : '/pl/resources.html'}>{LANG === 'pl' ? 'EN' : 'PL'}</a></li>
        </ul>
        <div className="drawer-cta"><a href={BASE + 'contact.html'} className="nav-cta">{S.nav.book}</a></div>
      </div>

      {/* HERO — editorial, content-first: compact header + featured lead story */}
      <section className="hero">
        <div className="hero-grain"></div>
        <div className="hero-inner">
          <div className="hero-head">
            <div className="hero-head-main">
              <div className="hero-eyebrow">{hero.eyebrow}</div>
              <h1 className="hero-title">{hero.title}</h1>
            </div>
            <div className="hero-head-aside">
              <p className="hero-lead">{hero.lead}</p>
              <div className="hero-stats">
                <div className="hero-stat"><div className="hero-stat-num">{RESOURCES.length}</div><div className="hero-stat-lbl">{S.stat1.split('\n').map((l,i)=>(<React.Fragment key={i}>{i>0&&<br/>}{l}</React.Fragment>))}</div></div>
                <div className="hero-stat"><div className="hero-stat-num">18<span>{LANG==='pl'?'lat':'yr'}</span></div><div className="hero-stat-lbl">{S.stat3.split('\n').map((l,i)=>(<React.Fragment key={i}>{i>0&&<br/>}{l}</React.Fragment>))}</div></div>
                <div className="hero-stat"><div className="hero-stat-num">40<span>+</span></div><div className="hero-stat-lbl">{LANG==='pl'?(<>Firm B2B<br/>w regionie CEE</>):(<>B2B companies<br />served</>)}</div></div>
              </div>
            </div>
          </div>
          {featured && <FeaturedCard item={featured} saved={saved} toggle={toggle} />}
        </div>
      </section>

      {/* Toolbar + grid only when there's more than the featured lead story */}
      {RESOURCES.length > 1 && (<>
      {/* FILTER TOOLBAR — demoted to a slim secondary control */}
      <div className="libbar">
        <div className="libbar-inner">
          <div className="libbar-chips" role="tablist" aria-label={S.browseTopic}>
            {TOPICS.map((tp) => (
              <button key={tp} className={`chip ${topic === tp ? 'on' : ''}`} onClick={() => setTopic(tp)}>{topicLabel(tp)}</button>
            ))}
          </div>
          <div className="libbar-tools">
            <label className="libbar-search">
              <Icon.Search />
              <input
                type="text"
                value={query}
                onChange={(e) => setQuery(e.target.value)}
                placeholder={S.searchPh}
                aria-label={S.searchPh}
              />
            </label>
            <select className="libbar-format" value={format} onChange={(e) => setFormat(e.target.value)} aria-label={S.byFormat}>
              {FORMATS.map((f) => (
                <option key={f.id} value={f.id}>{f.label}{f.id !== 'all' ? ` (${counts[f.id]})` : ''}</option>
              ))}
            </select>
            {filtering && (
              <button className="libbar-clear" onClick={() => { setTopic('All'); setFormat('all'); setQuery(''); }}>{S.clear}</button>
            )}
          </div>
        </div>
      </div>

      {/* GRID */}
      <section className="library">
        <div className="library-inner">
          <div className="library-count">
            <span className="library-count-num">{rest.length}</span>
            <span className="library-count-text">
              {topic === 'All' ? S.pieces : <>{S.piecesOn} <strong>{topicLabel(topic)}</strong></>}
              {format !== 'all' && <> · <strong>{FORMATS.find((f) => f.id === format).label}</strong></>}
            </span>
          </div>

          {rest.length === 0 ? (
            <div className="empty">
              <h3>{S.emptyTitle}</h3>
              <p>{S.emptyBody1}<a href="#" onClick={(e)=>{e.preventDefault();setTopic('All');setFormat('all');setQuery('');}}>{S.emptyBody2}</a>{S.emptyBody3}</p>
            </div>
          ) : (
            <div className="grid">
              {rest.map((item) => (
                <ResourceCard key={item.id} item={item} saved={saved} toggle={toggle} />
              ))}
            </div>
          )}
        </div>
      </section>
      </>)}

      {/* CONVERT */}
      <section className="convert">
        <div className="convert-inner">
          <div className="convert-left">
            <span className="convert-eyebrow">{S.convertEyebrow}</span>
            <h2 className="convert-title">{S.convertTitle}</h2>
            <p className="convert-lead">{S.convertLead}</p>
            <div className="convert-actions">
              <a href={BASE + 'contact.html'} className="btn btn-brand btn-lg">{S.convertCta} <Icon.ArrowRight /></a>
              <a href={BASE + 'how-we-work.html'} className="convert-link">{S.convertLink}</a>
            </div>
          </div>
          <div className="convert-right">
            <div className="convert-card">
              <div className="convert-card-eyebrow">{S.convertCardTitle}</div>
              <ul className="convert-card-list">
                <li><span className="dot dot-green"></span><span>{S.convertP1}</span></li>
                <li><span className="dot dot-coral"></span><span>{S.convertP2}</span></li>
                <li><span className="dot dot-navy"></span><span>{S.convertP3}</span></li>
              </ul>
              <div className="convert-card-foot">
                <div className="dot-live"></div>
                <span>{S.convertFoot}</span>
              </div>
            </div>
          </div>
        </div>
      </section>

      {/* FOOTER */}
      <footer className="footer">
        <div className="footer-inner">
          <div className="footer-top">
            <div className="footer-brand">
              <img src="/assets/lam-logo-white.svg" alt="Leave a Mark" className="footer-logo" />
              <p className="footer-desc">{S.footDesc}</p>
              <span className="footer-loc">{S.footLoc}</span>
            </div>
            <div>
              <div className="footer-col-title">{S.footResources}</div>
              <ul className="footer-links">
                <li><a href={BASE + 'resources.html'}>{S.fl_all}</a></li>
                <li><a href={BASE + 'resources.html'}>{S.fl_short}</a></li>
                <li><a href={BASE + 'resources.html'}>{S.fl_frame}</a></li>
                <li><a href={BASE + 'resources.html'}>{S.fl_video}</a></li>
              </ul>
            </div>
            <div>
              <div className="footer-col-title">{S.footCompany}</div>
              <ul className="footer-links">
                <li><a href={BASE + 'what-we-do.html'}>{S.nav.whatwedo}</a></li>
                <li><a href={BASE + 'how-we-work.html'}>{S.nav.how}</a></li>
                <li><a href={BASE + 'results.html'}>{S.nav.results}</a></li>
                <li><a href={BASE + 'about.html'}>{S.nav.about}</a></li>
              </ul>
            </div>
            <div>
              <div className="footer-col-title">{S.footContact}</div>
              <ul className="footer-links">
                <li><a href={BASE + 'contact.html'}>{S.convertCta}</a></li>
                <li><a href="mailto:support@leaveamark.xyz">support@leaveamark.xyz</a></li>
                <li><a href="https://www.linkedin.com/company/lam-xyz/">LinkedIn</a></li>
              </ul>
            </div>
          </div>
          <div className="footer-bottom">
            <div className="footer-copy">© 2026 <span>leaveamark</span> sp. z o.o.</div>
            <div className="footer-legal"><a href={BASE + 'privacy-policy.html'}>{S.privacy}</a><a href="#">{S.terms}</a><a href="#" onClick={(e) => { e.preventDefault(); if (window.openCookieSettings) window.openCookieSettings(); }}>{S.cookies}</a></div>
          </div>
        </div>
      </footer>

      {/* DRAWER */}
      <SavedDrawer open={drawerOpen} onClose={() => setDrawerOpen(false)} saved={saved} toggle={toggle} />
    </>
  );
}

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