// Dassuu — Prototype (B/1 Bone)
// Components rendered into #root.

const { useState, useEffect, useMemo, useRef, useCallback } = React;

// ---------- helpers ----------
const fmtEUR = (n, withCents = false) => {
  const opts = withCents
    ? { minimumFractionDigits: 2, maximumFractionDigits: 2, useGrouping: true }
    : { maximumFractionDigits: 0, useGrouping: true };
  return new Intl.NumberFormat("it-IT", opts).format(n);
};
// Use cents when value < 50, otherwise round to euro.
const fmtPrice = (n) => fmtEUR(n, n < 50);

const VAT_RATE = 0.22;
// Apply VAT if requested.
const withVAT = (n, vatIncluded) => vatIncluded ? n * (1 + VAT_RATE) : n;

// Compute per-bottle price for case formats. Returns null for single-bottle formats.
const perBottle = (price, format) => {
  const m = format.match(/^(\d+)\s*[×x]/i);
  if (!m) return null;
  const count = parseInt(m[1], 10);
  if (!count || count <= 1) return null;
  return price / count;
};

const typeLabel = (type, lang) => {
  if (!type || type === "fermo") return null;
  const map = {
    dolce: { it: "dolce", en: "sweet" },
    spumante: { it: "spumante", en: "sparkling" },
    fortificato: { it: "fortificato", en: "fortified" },
  };
  return map[type] ? map[type][lang] : null;
};
const colorTitle = (color, lang) => {
  const map = {
    red: { it: "Rosso", en: "Red" },
    white: { it: "Bianco", en: "White" },
    rose: { it: "Rosato", en: "Ros\u00e9" },
  };
  return map[color] ? map[color][lang] : "";
};

const scarcityBadge = (qty, format, lang) => {
  // Use qty only as a subtle scarcity badge — never show raw counts.
  // For multi-bottle formats (×6, ×12), qty 1 = "ultima cassa".
  // For single-bottle formats (1×), qty 1 = "ultima bottiglia".
  if (qty > 1) return null;
  const isSingle = format.startsWith("1×");
  if (lang === "it") return isSingle ? "ultimo esemplare" : "ultima cassa";
  return isSingle ? "last bottle" : "last case";
};

const scrollTopOnChange = (deps) => {
  useEffect(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, deps);
};

// Normalize: lowercase, strip diacritics, collapse whitespace.
const norm = (s) =>
  (s == null ? "" : String(s))
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")
    .toLowerCase()
    .trim();

// Split a query into individual tokens (AND semantics).
const tokenize = (q) => norm(q).split(/\s+/).filter(Boolean);

// Build a search haystack for a wine.
const wineHaystack = (w) =>
  norm([w.producer, w.cuvee, w.appellation, w.vintage, w.format].filter(Boolean).join(" "));

// Build a search haystack for a collection (titles in both languages so the
// search works regardless of UI language).
const collectionHaystack = (c) =>
  norm(
    [
      c.title.it, c.title.en,
      c.subtitle.it, c.subtitle.en,
      c.tagline.it, c.tagline.en,
      c.number,
    ].join(" ")
  );

// All tokens must match.
const matchesAll = (hay, tokens) => tokens.every((t) => hay.includes(t));

// Highlight matched tokens inside a string. Returns a React fragment.
const highlight = (text, tokens) => {
  if (!text || tokens.length === 0) return text;
  // Build a regex that matches any token, accent-insensitive by matching the
  // normalized form. Easiest: walk normalized version, splice matches into
  // original. Here we use a simpler approach: match on normalized indices.
  const original = String(text);
  const normed = norm(original);
  // Find spans on normed string.
  const spans = [];
  tokens.forEach((tok) => {
    if (!tok) return;
    let i = 0;
    while ((i = normed.indexOf(tok, i)) !== -1) {
      spans.push([i, i + tok.length]);
      i += tok.length;
    }
  });
  if (spans.length === 0) return original;
  // Merge overlapping spans.
  spans.sort((a, b) => a[0] - b[0]);
  const merged = [];
  for (const s of spans) {
    if (merged.length && s[0] <= merged[merged.length - 1][1]) {
      merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], s[1]);
    } else {
      merged.push([...s]);
    }
  }
  // Note: norm() preserves length (NFD then strip combining marks may not, but
  // for our latin content the length is preserved well enough; if length
  // differs we fall back to no highlight to avoid corruption).
  if (normed.length !== original.length) return original;
  const out = [];
  let cursor = 0;
  merged.forEach(([s, e], idx) => {
    if (cursor < s) out.push(original.slice(cursor, s));
    out.push(<mark key={idx} className="match">{original.slice(s, e)}</mark>);
    cursor = e;
  });
  if (cursor < original.length) out.push(original.slice(cursor));
  return <React.Fragment>{out}</React.Fragment>;
};

// ---------- SYMBOL ----------
function SymbolMark({ size = 15 }) {
  return (
    <svg className="symbol-mark" width={size} height={size * 0.9} viewBox="0 0 100 90" aria-hidden="true" focusable="false">
      <circle cx="40" cy="38" r="32" fill="#0A0A0A"></circle>
      <circle className="sm-ripple" cx="66" cy="58" r="14" fill="none" stroke="#6B8F1C" strokeWidth="2"></circle>
      <circle className="sm-drop" cx="66" cy="58" r="14" fill="#6B8F1C"></circle>
    </svg>
  );
}

// ---------- HEADER ----------
function Header({ lang, setLang, page, requestCount, openDrawer }) {
  const t = window.DASSUU_DATA.copy.nav[lang];
  return (
    <header className="header" data-screen-label="header">
      <a className="brand" href="index.html">
        <SymbolMark size={13} /> Dassuu
      </a>
      <nav className="nav-links">
        <a href="listino.html" className={page === "listino" ? "active" : ""}>
          {t.listino}
        </a>
        <a href="manifesto.html" className={page === "manifesto" ? "active" : ""}>
          {t.manifesto}
        </a>
        <span className="lang-toggle">
          <button className={lang === "it" ? "active" : ""} onClick={() => setLang("it")}>IT</button>
          <span className="sep">/</span>
          <button className={lang === "en" ? "active" : ""} onClick={() => setLang("en")}>EN</button>
        </span>
        <button className="request-btn" onClick={openDrawer} aria-label={t.request}>
          <span className="mono">{t.request}</span>
          <span className="count">{String(requestCount).padStart(2, "0")}</span>
        </button>
      </nav>
    </header>
  );
}

// ---------- HOME ----------
function PeriodMark() {
  return (
    <span className="period-mark">
      <span className="pm-big"></span>
      <span className="pm-small"></span>
    </span>
  );
}

function Home({ lang }) {
  const t = window.DASSUU_DATA.copy.home[lang];
  return (
    <main className="home" data-screen-label="home">
      <div className="home-mark">
        Dass<span className="u">uu</span><PeriodMark />
      </div>
      <div className="home-mid">
        <div className="home-tagline">
          <span>{t.line1}</span>
          <span className="em">{t.line2}</span>
        </div>
        <a className="enter-btn" href="listino.html">
          <span>{t.enter}</span>
          <span className="arrow">→</span>
        </a>
      </div>
      <div className="home-foot mono">
        <span>{t.stamp1}</span>
        <span className="dim">{t.stamp2}</span>
        <span>{window.DASSUU_DATA.meta.yearMark}</span>
      </div>
    </main>
  );
}

// ---------- LISTINO ----------
function Listino({ lang, request, toggleRequest, vatIncluded, setVatIncluded }) {
  const t = window.DASSUU_DATA.copy.listino[lang];
  const collections = window.DASSUU_DATA.collections;
  const refCount = useMemo(
    () => collections.reduce((s, c) => s + c.wines.length, 0),
    [collections]
  );
  const sub = t.subTemplate
    .replace("{refs}", refCount)
    .replace("{cols}", collections.length);

  const [query, setQuery] = useState("");
  const tokens = useMemo(() => tokenize(query), [query]);
  const searching = tokens.length > 0;

  // Filter: a wine is included if (a) its own haystack matches all tokens, OR
  // (b) its parent collection's haystack matches all tokens (i.e. the user
  // searched a nocciolo title — show all wines in it).
  const filtered = useMemo(() => {
    if (!searching) return collections;
    return collections
      .map((c) => {
        const colHay = collectionHaystack(c);
        const collectionMatches = matchesAll(colHay, tokens);
        const wines = collectionMatches
          ? c.wines
          : c.wines.filter((w) => matchesAll(wineHaystack(w), tokens));
        return wines.length ? { ...c, wines, _collectionMatch: collectionMatches } : null;
      })
      .filter(Boolean);
  }, [collections, tokens, searching]);

  const matchCount = useMemo(
    () => filtered.reduce((s, c) => s + c.wines.length, 0),
    [filtered]
  );

  return (
    <main className="listino" data-screen-label="listino">
      <header className="listino-head">
        <div className="listino-head-left">
          <h1 className="display">
            {t.title.split(" ").map((w, i) =>
              i === 0 ? w : <em key={i}> {w}</em>
            )}<PeriodMark />
          </h1>
        </div>
        <div className="listino-head-right mono">
          <div>{sub}</div>
          <div className="dim listino-pricenote">
            {vatIncluded ? t.priceNoteIncl : t.priceNoteExcl}
          </div>
          <div className="vat-toggle-wrap">
            <span className="lbl mono">§ {t.vatLabel}</span>
            <span className="vat-toggle" role="group" aria-label={t.vatLabel}>
              <button
                className={!vatIncluded ? "active" : ""}
                onClick={() => setVatIncluded(false)}
                aria-pressed={!vatIncluded}
              >
                {t.vatExcluded}
              </button>
              <button
                className={vatIncluded ? "active" : ""}
                onClick={() => setVatIncluded(true)}
                aria-pressed={vatIncluded}
              >
                {t.vatIncluded}
              </button>
            </span>
          </div>
        </div>
      </header>

      <p className="listino-intro">{t.intro}</p>

      <div className={`listino-search ${searching ? "is-active" : ""}`} role="search">
        <span className="ls-lbl mono">
          <span className="glyph" aria-hidden="true">⌕</span>
          {t.searchLabel}
        </span>
        <input
          type="search"
          value={query}
          onChange={(e) => setQuery(e.target.value)}
          placeholder={t.searchPlaceholder}
          aria-label={t.searchLabel}
        />
        {searching && (
          <span className="ls-count">
            <em>{matchCount}</em>{" "}
            {matchCount === 1 ? t.searchMatchSingular : t.searchMatchPlural}
            {filtered.length > 0 && (
              <React.Fragment>
                {" "}· <em>{filtered.length}</em>{" "}
                {filtered.length === 1 ? t.searchClusterSingular : t.searchClusterPlural}
              </React.Fragment>
            )}
          </span>
        )}
        {searching && (
          <button type="button" className="ls-clear" onClick={() => setQuery("")}>
            <span>{t.searchClear}</span>
            <span className="x">×</span>
          </button>
        )}
      </div>

      {!searching && (
        <nav className="collection-index" aria-label="Indice collezioni">
          {collections.map((c) => (
            <a key={c.id} href={`#${c.id}`} className="index-item">
              <span className="mono num">{c.number}</span>
              <span className="title">
                {c.title[lang]} <em>· {c.subtitle[lang]}</em>
              </span>
              <span className="mono dim">{c.wines.length}</span>
              <span className="go-arrow" aria-hidden="true">→</span>
            </a>
          ))}
        </nav>
      )}

      {searching && filtered.length === 0 ? (
        <div className="search-empty">
          <div className="empty-title">{t.searchEmpty}</div>
          <div className="empty-hint">{t.searchEmptyHint}</div>
        </div>
      ) : (
        <div className="collections" style={searching ? { marginTop: 60 } : null}>
          {filtered.map((c) => (
            <Collection
              key={c.id}
              collection={c}
              lang={lang}
              request={request}
              toggleRequest={toggleRequest}
              listinoCopy={t}
              tokens={tokens}
              vatIncluded={vatIncluded}
            />
          ))}
        </div>
      )}
    </main>
  );
}

function Collection({ collection: c, lang, request, toggleRequest, listinoCopy, tokens = [], vatIncluded }) {
  return (
    <section className="collection" id={c.id} data-screen-label={`collection-${c.id}`}>
      <div className="collection-head">
        <div className="collection-head-l">
          <div className="mono col-num">{listinoCopy.clusterLabel} {c.number}</div>
          <h2 className="display">
            {highlight(c.title[lang], tokens)} <em>· {highlight(c.subtitle[lang], tokens)}</em>
          </h2>
        </div>
        <div className="collection-head-r mono">
          <div>{c.tagline[lang]}</div>
          <div className="dim">
            {c.wines.length} {c.wines.length === 1 ? listinoCopy.countSingular : listinoCopy.countPlural}
          </div>
        </div>
      </div>

      <ol className="wines">
        {c.wines.map((w) => {
          const added = request.includes(w.id);
          const badge = scarcityBadge(w.qty, w.format, lang);
          const displayPrice = withVAT(w.price, vatIncluded);
          return (
            <li
              key={w.id}
              className={`wine ${added ? "added" : ""}`}
              onClick={() => toggleRequest(w.id)}
              role="button"
              tabIndex={0}
              onKeyDown={(e) => {
                if (e.key === "Enter" || e.key === " ") {
                  e.preventDefault();
                  toggleRequest(w.id);
                }
              }}
              aria-label={added ? listinoCopy.ariaRemove : listinoCopy.ariaAdd}
            >
              <span className="w-color-cell"><span className={`w-color-dot ${w.color || "red"}`} title={colorTitle(w.color, lang)}></span></span>
              <span className="w-vintage mono">{highlight(String(w.vintage), tokens)}</span>
              <span className="w-name">
                <span className="prod">{highlight(w.producer, tokens)}</span>
                {w.cuvee && <span className="cuvee"> · <em>{highlight(w.cuvee, tokens)}</em></span>}
                <span className="appel mono">{highlight(w.appellation, tokens)}{typeLabel(w.type, lang) && <span className="w-type">{typeLabel(w.type, lang)}</span>}</span>
                {badge && <span className="scarcity">{badge}</span>}
              </span>
              <span className="w-format mono">{w.format}</span>
              <span className="w-price">
                <span className="w-price-main">€ {fmtPrice(displayPrice)}</span>
                <span className="w-price-vat mono">{vatIncluded ? listinoCopy.vatIncludedTag : listinoCopy.vatExcludedTag}</span>
                {(() => {
                  const pb = perBottle(displayPrice, w.format);
                  return pb ? (
                    <span className="w-price-pb mono">€ {fmtPrice(pb)} / bot.</span>
                  ) : null;
                })()}
              </span>
              <span className="w-add" aria-hidden="true">
                {added ? "✓" : "+"}
              </span>
            </li>
          );
        })}
      </ol>
    </section>
  );
}

// ---------- DRAWER ----------
function Drawer({ open, close, lang, request, removeFromRequest, clearRequest, vatIncluded }) {
  const t = window.DASSUU_DATA.copy.drawer[lang];
  const all = useMemo(() => {
    const map = new Map();
    window.DASSUU_DATA.collections.forEach((c) => {
      c.wines.forEach((w) => map.set(w.id, w));
    });
    return request.map((id) => map.get(id)).filter(Boolean);
  }, [request]);

  const total = useMemo(
    () => all.reduce((s, w) => s + (w.price || 0), 0),
    [all]
  );
  const totalDisplay = withVAT(total, vatIncluded);

  const [email, setEmail] = useState("");
  const [note, setNote] = useState("");
  const [submitted, setSubmitted] = useState(false);

  useEffect(() => {
    if (!open) setTimeout(() => setSubmitted(false), 400);
  }, [open]);

  const submit = (e) => {
    e.preventDefault();
    setSubmitted(true);
    clearRequest();
  };

  return (
    <React.Fragment>
      <div
        className={`drawer-scrim ${open ? "is-open" : ""}`}
        onClick={close}
        aria-hidden="true"
      ></div>
      <aside
        className={`drawer ${open ? "is-open" : ""}`}
        role="dialog"
        aria-label={t.title}
        data-screen-label="request-drawer"
      >
        <header className="drawer-head">
          <div>
            <div className="mono dim">{lang === "it" ? "Richiesta privata" : "Private request"}</div>
            <h2 className="display">{t.title.split(" ").map((w, i) => i === 0 ? w : <em key={i}> {w}</em>)}<PeriodMark /></h2>
          </div>
          <button className="drawer-close" onClick={close} aria-label={t.close}>
            <span className="mono">{t.close}</span>
            <span className="x">×</span>
          </button>
        </header>

        {submitted ? (
          <div className="drawer-empty">
            <div className="mono" style={{ color: "var(--olive-deep)" }}>✓ {t.submitted}</div>
          </div>
        ) : all.length === 0 ? (
          <div className="drawer-empty">
            <div className="empty-title">{t.empty}</div>
            <div className="mono dim">{t.emptyHint}</div>
          </div>
        ) : (
          <React.Fragment>
            <ul className="drawer-items">
              {all.map((w) => {
                const displayPrice = withVAT(w.price, vatIncluded);
                return (
                <li key={w.id} className="drawer-item">
                  <span className="di-vint mono">{w.vintage}</span>
                  <div className="di-main">
                    <div className="di-name">
                      <span>{w.producer}</span>
                      {w.cuvee && <em> · {w.cuvee}</em>}
                    </div>
                    <div className="di-meta mono">
                      <span>{w.appellation}</span>
                      <span className="sep">·</span>
                      <span>{w.format}</span>
                    </div>
                  </div>
                  <div className="di-price">
                    <div className="di-price-main">€ {fmtPrice(displayPrice)}</div>
                    {(() => {
                      const pb = perBottle(displayPrice, w.format);
                      return pb ? (
                        <div className="di-price-pb mono">€ {fmtPrice(pb)} / bot.</div>
                      ) : null;
                    })()}
                  </div>
                  <button
                    className="di-remove"
                    onClick={() => removeFromRequest(w.id)}
                    aria-label={t.remove}
                  >
                    ×
                  </button>
                </li>
                );
              })}
            </ul>

            <div className="drawer-total mono">
              <span>{vatIncluded ? t.totalLabelIncl : t.totalLabel}</span>
              <span className="amt">€ {fmtPrice(totalDisplay)}</span>
            </div>

            <form className="drawer-form" onSubmit={submit}>
              <label className="field">
                <span className="lbl mono">{t.email}</span>
                <input
                  type="email"
                  required
                  value={email}
                  onChange={(e) => setEmail(e.target.value)}
                  placeholder={t.emailPlaceholder}
                />
              </label>
              <label className="field">
                <span className="lbl mono">{t.message}</span>
                <textarea
                  rows="3"
                  value={note}
                  onChange={(e) => setNote(e.target.value)}
                  placeholder={t.messagePlaceholder}
                ></textarea>
              </label>

              <div className="drawer-notice">{t.notice}</div>

              <button type="submit" className="submit-btn">
                <span>{t.submit}</span>
                <span className="arrow">→</span>
              </button>
            </form>
          </React.Fragment>
        )}
      </aside>
    </React.Fragment>
  );
}

// ---------- MANIFESTO ----------
function Manifesto({ lang }) {
  const t = window.DASSUU_DATA.copy.manifesto[lang];
  return (
    <main className="manifesto" data-screen-label="manifesto">
      <div className="manifesto-inner">
        <div className="mono manifesto-num">§ Manifesto</div>
        <h1 className="display">
          {t.title.split(" ").map((w, i) => (i === 0 ? w : <em key={i}> {w}</em>))}<PeriodMark />
        </h1>
        <div className="manifesto-body">
          {t.body.map((p, i) => (
            <p key={i}>{p}</p>
          ))}
        </div>
        <div className="manifesto-storage mono">
          <div className="dim">{t.storage.label}</div>
          <div>{t.storage.line1}</div>
          <div>{t.storage.line2}</div>
        </div>
        <div className="manifesto-contact mono">
          <div className="dim">{t.contact}</div>
          <a href="mailto:hello@dassuu.com">hello@dassuu.com</a>
        </div>
      </div>
    </main>
  );
}

// ---------- PERSONAL MARK ----------
// The user's own signature — the personal seal of guarantee. Sits in the
// footer; never named in body text.
function PersonalMark({ label, caption }) {
  return (
    <div className="personal-mark" aria-label={label}>
      <div className="pm-sig-wrap" aria-hidden="true">
        <img className="pm-sig-img" src="data:image/png;base64,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" alt="" />
      </div>
      <div className="pm-meta">
        <div className="pm-meta-lbl mono dim">§ {label}</div>
        <div className="pm-meta-cap">{caption}</div>
      </div>
    </div>
  );
}

// ---------- FOOTER ----------
function Footer({ lang }) {
  const c = window.DASSUU_DATA.copy.footer[lang];
  const yearMark = window.DASSUU_DATA.meta.yearMark;
  const cols = [
    { lbl: c.sedeLegaleLabel, lines: c.sedeLegale },
    { lbl: c.sedeOperativaLabel, lines: c.sedeOperativa },
    { lbl: c.fiscalitaLabel, lines: c.fiscalita },
  ];
  return (
    <footer className="site-footer">
      <div className="footer-info">
        {cols.map((col, i) => (
          <div key={i} className="footer-col">
            <div className="footer-lbl mono">§ {col.lbl}</div>
            <div className="footer-lines">
              {col.lines.map((l, j) => (
                <div key={j} className="footer-line">{l}</div>
              ))}
            </div>
          </div>
        ))}
        <div className="footer-col footer-col-mark">
          <PersonalMark label={c.markLabel} caption={c.markCaption} />
        </div>
      </div>
      <div className="footer-mark">
        <div className="footer-display">
          Dass<span className="u">uu</span><PeriodMark />
        </div>
        <div className="footer-stamps mono">
          <span>{c.stamp1}</span>
          <span className="sep">·</span>
          <span>{c.stamp2}</span>
        </div>
        <div className="footer-year mono">{yearMark}</div>
      </div>
    </footer>
  );
}

// ---------- APP ----------
function App() {
  const [lang, setLang] = useState(() => {
    const saved = localStorage.getItem("dassuu-lang");
    if (saved === "it" || saved === "en") return saved;
    const nav = (navigator.languages && navigator.languages[0]) || navigator.language || "it";
    return nav.toLowerCase().startsWith("it") ? "it" : "en";
  });
  const setLangPersist = (l) => { setLang(l); localStorage.setItem("dassuu-lang", l); };
  const page = document.body.dataset.page || "home";
  const [request, setRequest] = useState(() => {
    try { return JSON.parse(localStorage.getItem("dassuu-request")) || []; } catch (e) { return []; }
  });
  useEffect(() => { localStorage.setItem("dassuu-request", JSON.stringify(request)); }, [request]);
  const [drawerOpen, setDrawerOpen] = useState(false);
  const [vatIncluded, setVatIncludedState] = useState(() => localStorage.getItem("dassuu-vat") === "1");
  const setVatIncluded = (v) => { setVatIncludedState(v); localStorage.setItem("dassuu-vat", v ? "1" : "0"); };

  const toggleRequest = useCallback((id) => {
    setRequest((r) => r.includes(id) ? r.filter((x) => x !== id) : [...r, id]);
  }, []);
  const removeFromRequest = useCallback((id) => {
    setRequest((r) => r.filter((x) => x !== id));
  }, []);
  const clearRequest = useCallback(() => setRequest([]), []);

  useEffect(() => {
    document.body.style.overflow = drawerOpen ? "hidden" : "";
    return () => { document.body.style.overflow = ""; };
  }, [drawerOpen]);

  return (
    <div className="app">
      {page !== "home" && (
        <Header
          lang={lang} setLang={setLangPersist} page={page}
          requestCount={request.length}
          openDrawer={() => setDrawerOpen(true)}
        />
      )}

      {page === "home" && (
        <HomeShell lang={lang} setLang={setLangPersist} />
      )}
      {page === "listino" && (
        <Listino lang={lang} request={request} toggleRequest={toggleRequest}
          vatIncluded={vatIncluded} setVatIncluded={setVatIncluded} />
      )}
      {page === "manifesto" && <Manifesto lang={lang} />}

      {page !== "home" && <Footer lang={lang} />}

      <Drawer
        open={drawerOpen}
        close={() => setDrawerOpen(false)}
        lang={lang}
        request={request}
        removeFromRequest={removeFromRequest}
        clearRequest={clearRequest}
        vatIncluded={vatIncluded}
      />

      {page !== "home" && request.length > 0 && !drawerOpen && (
        <button
          className="floating-request mono"
          onClick={() => setDrawerOpen(true)}
        >
          <span className="count">{String(request.length).padStart(2, "0")}</span>
          <span>{lang === "it" ? "in richiesta" : "in request"}</span>
          <span className="arrow">→</span>
        </button>
      )}
    </div>
  );
}

function HomeShell({ lang, setLang }) {
  return (
    <React.Fragment>
      <div className="home-top mono">
        <span><SymbolMark size={13} /> Dassuu</span>
        <span className="lang-toggle">
          <button className={lang === "it" ? "active" : ""} onClick={() => setLang("it")}>IT</button>
          <span className="sep">/</span>
          <button className={lang === "en" ? "active" : ""} onClick={() => setLang("en")}>EN</button>
        </span>
      </div>
      <Home lang={lang} />
    </React.Fragment>
  );
}

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