// store-pdp-sell.jsx — selling-landing building blocks for the product page.
// Each PDP doubles as a standalone landing (ads point straight at one SKU),
// so these blocks add the conversion scaffolding: pain hook, benefits,
// how-to steps, before/after, FAQ, repeat CTA. Bilingual (uk/en).
// Loaded BEFORE store-pdp.jsx so ProductPage can compose them.

const { useState: useSell, useState: useSellVis, useRef: useSellRef, useEffect: useSellEffect } = React;

// ── small line icons (simple strokes only) ──────────────────
const SI = {
  drop:   <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3s6 6.5 6 11a6 6 0 0 1-12 0c0-4.5 6-11 6-11z"/></svg>,
  shield: <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3l7 3v5c0 4.5-3 8-7 10-4-2-7-5.5-7-10V6z"/><path d="M9 12l2 2 4-4"/></svg>,
  leaf:   <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M5 19c10 0 14-5 15-15-9 0-15 4-15 12z"/><path d="M5 19c3-5 6-7 10-9"/></svg>,
  sun:    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M2 12h2M20 12h2M5 5l1.5 1.5M17.5 17.5L19 19M19 5l-1.5 1.5M6.5 17.5L5 19"/></svg>,
  spark:  <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z"/></svg>,
  clock:  <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg>,
  flask:  <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M9 3h6M10 3v6l-5 8a2 2 0 0 0 1.8 3h10.4A2 2 0 0 0 19 17l-5-8V3"/><path d="M7.5 14h9"/></svg>,
  heartpulse: <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M20.8 5.6a5.5 5.5 0 0 0-8.8 1 5.5 5.5 0 0 0-8.8-1 5.5 5.5 0 0 0 0 7.8L12 22l8.8-8.6a5.5 5.5 0 0 0 0-7.8z"/></svg>,
};

// ── per-category selling copy ───────────────────────────────
const _def = {
  q:   { uk:'Догляд, що дає видимий результат — без зайвих кроків.', en:'Care that shows results — without the extra steps.' },
  a:   { uk:'Чиста формула з активами в робочій концентрації. Розроблено косметологами, протестовано на реактивній шкірі.', en:'A clean formula with actives at working strength. Built by cosmetologists, tested on reactive skin.' },
  benefits: [
    { ic:'flask', h:{uk:'Активи, що працюють',   en:'Actives that work'},     d:{uk:'Концентрації, підтверджені дослідженнями, без перевантаження шкіри.', en:'Research-backed concentrations, without overloading the skin.'} },
    { ic:'leaf',  h:{uk:'Чистий склад',           en:'Clean composition'},     d:{uk:'Без віддушок, барвників і спирту, що сушить. Підходить чутливій шкірі.', en:'No fragrance, dyes or drying alcohol. Suits sensitive skin.'} },
    { ic:'shield',h:{uk:'Бар’єр під захистом',    en:'Barrier protected'},     d:{uk:'Підтримує мікробіом і ліпідний бар’єр, не порушуючи pH.', en:'Supports the microbiome and lipid barrier without disrupting pH.'} },
  ],
  steps: [
    { tag:{uk:'Крок 1',en:'Step 1'}, h:{uk:'Очисти шкіру',     en:'Cleanse'},  d:{uk:'Нанеси на чисту, злегка вологу шкіру обличчя.', en:'Apply to clean, slightly damp facial skin.'} },
    { tag:{uk:'Крок 2',en:'Step 2'}, h:{uk:'Розподіли засіб',  en:'Apply'},    d:{uk:'2–3 краплі або горошину, рівномірно по масажних лініях.', en:'2–3 drops or a pea-size amount along massage lines.'} },
    { tag:{uk:'Крок 3',en:'Step 3'}, h:{uk:'Закріпи догляд',   en:'Seal'},     d:{uk:'Завершіть кремом, вранці — SPF. Користуйся щодня.', en:'Finish with cream; SPF in the morning. Use daily.'} },
  ],
};

const SELL_COPY = {
  serum: {
    q:   { uk:'Сироватка, яку шкіра відчуває з першого тижня.', en:'A serum your skin feels within the first week.' },
    a:   { uk:'Легка текстура з активами в робочій концентрації миттєво вбирається й працює там, де креми не дістають.', en:'A light texture with actives at working strength absorbs instantly and works where creams can’t reach.' },
    benefits: [
      { ic:'drop',  h:{uk:'Глибоке зволоження',  en:'Deep hydration'},   d:{uk:'Гіалуронова кислота й пантенол утримують вологу впродовж дня.', en:'Hyaluronic acid and panthenol hold moisture all day.'} },
      { ic:'spark', h:{uk:'Рівний тон',          en:'Even tone'},        d:{uk:'Антиоксиданти вирівнюють тон і повертають сяйво.', en:'Antioxidants even out tone and restore radiance.'} },
      { ic:'leaf',  h:{uk:'Без подразнень',      en:'No irritation'},    d:{uk:'Пре- та пробіотики зміцнюють бар’єр чутливої шкіри.', en:'Pre- & probiotics strengthen a sensitive barrier.'} },
    ],
    steps: _def.steps,
  },
  cream: {
    q:   { uk:'Пружність і комфорт, які видно у дзеркалі.', en:'Firmness and comfort you can see in the mirror.' },
    a:   { uk:'Поживна формула відновлює ліпідний бар’єр і повертає шкірі тонус — без липкості й важкості.', en:'A nourishing formula restores the lipid barrier and brings back tone — without stickiness or heaviness.' },
    benefits: [
      { ic:'heartpulse', h:{uk:'Ліфтинг-ефект',    en:'Lifting effect'},  d:{uk:'Пептиди підтягують контур і розгладжують рельєф.', en:'Peptides tighten the contour and smooth texture.'} },
      { ic:'drop',       h:{uk:'Живлення 24 год',   en:'24h nourishment'}, d:{uk:'Олії та церациди тримають комфорт цілий день.', en:'Oils and ceramides keep comfort all day.'} },
      { ic:'shield',     h:{uk:'Захист бар’єра',    en:'Barrier defense'}, d:{uk:'Відновлює захисний шар і знижує реактивність.', en:'Rebuilds the protective layer and lowers reactivity.'} },
    ],
    steps: _def.steps,
  },
  cleanse: {
    q:   { uk:'Чистота без відчуття стягнутості.', en:'Clean skin without the tight feeling.' },
    a:   { uk:'М’яко знімає макіяж, себум і SPF, зберігаючи захисний бар’єр і природний pH.', en:'Gently removes make-up, sebum and SPF while keeping the barrier and natural pH intact.' },
    benefits: [
      { ic:'drop',  h:{uk:'Делікатне очищення', en:'Gentle cleansing'}, d:{uk:'Розчиняє забруднення, не пересушуючи шкіру.', en:'Dissolves impurities without stripping the skin.'} },
      { ic:'leaf',  h:{uk:'pH-баланс',          en:'pH balanced'},      d:{uk:'Слабокисла формула підтримує мікробіом.', en:'A mildly acidic formula supports the microbiome.'} },
      { ic:'spark', h:{uk:'Готовність до догляду', en:'Primed skin'},   d:{uk:'Шкіра краще приймає сироватки й креми після очищення.', en:'Skin absorbs serums and creams better afterwards.'} },
    ],
    steps: [
      { tag:{uk:'Крок 1',en:'Step 1'}, h:{uk:'Нанеси',   en:'Apply'},   d:{uk:'На вологу шкіру, спінити легкими рухами.', en:'On damp skin, work into a light lather.'} },
      { tag:{uk:'Крок 2',en:'Step 2'}, h:{uk:'Масажуй',  en:'Massage'}, d:{uk:'30–40 секунд по масажних лініях.', en:'30–40 seconds along massage lines.'} },
      { tag:{uk:'Крок 3',en:'Step 3'}, h:{uk:'Змий',     en:'Rinse'},   d:{uk:'Теплою водою, продовжи тонером.', en:'With warm water, follow with toner.'} },
    ],
  },
  tone: {
    q:   { uk:'Тонер, що готує шкіру до всього догляду.', en:'A toner that preps skin for the whole routine.' },
    a:   { uk:'Відновлює pH після очищення, зволожує і підсилює дію наступних активів.', en:'Restores pH after cleansing, hydrates, and boosts the actives that follow.' },
    benefits: _def.benefits,
    steps: _def.steps,
  },
  spf: {
    q:   { uk:'Захист, який не хочеться змивати.', en:'Protection you won’t want to wash off.' },
    a:   { uk:'Широкий спектр SPF без білих слідів і липкості — комфортна база під макіяж щодня.', en:'Broad-spectrum SPF with no white cast or stickiness — a comfortable daily base under make-up.' },
    benefits: [
      { ic:'sun',   h:{uk:'SPF широкого спектра', en:'Broad-spectrum SPF'}, d:{uk:'Захист від UVA/UVB і фотостаріння.', en:'Guards against UVA/UVB and photo-ageing.'} },
      { ic:'drop',  h:{uk:'Комфортна текстура',   en:'Comfortable finish'}, d:{uk:'Без білих слідів, лягає рівно під тон.', en:'No white cast, sits smoothly under make-up.'} },
      { ic:'leaf',  h:{uk:'Догляд у складі',      en:'Skincare inside'},    d:{uk:'Антиоксиданти й зволоження протягом дня.', en:'Antioxidants and hydration through the day.'} },
    ],
    steps: [
      { tag:{uk:'Крок 1',en:'Step 1'}, h:{uk:'Заверши догляд', en:'Finish care'}, d:{uk:'Нанеси після сироватки й крему.', en:'Apply after serum and cream.'} },
      { tag:{uk:'Крок 2',en:'Step 2'}, h:{uk:'Достатня кількість', en:'Enough product'}, d:{uk:'Дві фаланги пальців на обличчя й шию.', en:'Two finger-lengths for face and neck.'} },
      { tag:{uk:'Крок 3',en:'Step 3'}, h:{uk:'Онови вдень', en:'Re-apply'}, d:{uk:'Кожні 2–3 години на сонці.', en:'Every 2–3 hours in the sun.'} },
    ],
  },
  age: {
    q:   { uk:'Anti-age, що працює на результат, а не на обіцянки.', en:'Anti-age that works on results, not promises.' },
    a:   { uk:'Ретинол і пептиди в делікатній системі доставки розгладжують зморшки й повертають щільність шкіри.', en:'Retinol and peptides in a gentle delivery system smooth wrinkles and restore skin density.' },
    benefits: [
      { ic:'spark',     h:{uk:'Менше зморшок',  en:'Fewer wrinkles'},  d:{uk:'Ретиноїди стимулюють оновлення й колаген.', en:'Retinoids boost renewal and collagen.'} },
      { ic:'heartpulse',h:{uk:'Щільність шкіри', en:'Skin density'},   d:{uk:'Пептиди підвищують пружність контуру.', en:'Peptides improve firmness of the contour.'} },
      { ic:'shield',    h:{uk:'Делікатно',       en:'Gentle system'},  d:{uk:'Інкапсульовані активи знижують подразнення.', en:'Encapsulated actives reduce irritation.'} },
    ],
    steps: [
      { tag:{uk:'Вечір',en:'PM'},   h:{uk:'Тільки на ніч', en:'Night only'}, d:{uk:'Наноси ввечері на суху шкіру.', en:'Apply in the evening on dry skin.'} },
      { tag:{uk:'Старт',en:'Start'},h:{uk:'2–3 рази/тиждень', en:'2–3×/week'}, d:{uk:'Поступово збільшуй частоту.', en:'Increase frequency gradually.'} },
      { tag:{uk:'Завжди',en:'Always'},h:{uk:'SPF вранці', en:'SPF in AM'}, d:{uk:'Обов’язковий захист наступного дня.', en:'Daytime protection is a must.'} },
    ],
  },
  acne: {
    q:   { uk:'Контроль висипань без пересушування.', en:'Breakout control without over-drying.' },
    a:   { uk:'Кислоти й себорегулятори очищають пори й знижують запалення, зберігаючи бар’єр.', en:'Acids and sebum-regulators clear pores and calm inflammation while protecting the barrier.' },
    benefits: [
      { ic:'drop',  h:{uk:'Чисті пори',      en:'Clear pores'},     d:{uk:'Кислоти розчиняють себум і зроговіння.', en:'Acids dissolve sebum and dead cells.'} },
      { ic:'leaf',  h:{uk:'Менше запалень',  en:'Less inflammation'},d:{uk:'Цинк і ніацинамід заспокоюють шкіру.', en:'Zinc and niacinamide calm the skin.'} },
      { ic:'shield',h:{uk:'Без пересушування', en:'No over-drying'}, d:{uk:'Працює точково, не руйнуючи бар’єр.', en:'Targets spots without stripping the barrier.'} },
    ],
    steps: _def.steps,
  },
};

const sellCopy = (cat) => SELL_COPY[cat] || _def;

// ── Trust / guarantee row (under hero CTA) ──────────────────
function SellTrust({ lang }) {
  const items = [
    { ic: SI.shield, h: lang==='uk'?'Гарантія 30 днів':'30-day guarantee', s: lang==='uk'?'Повернемо кошти, якщо не підійде':'Money back if it’s not for you' },
    { ic: <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M3 7h11v8H3zM14 10h4l3 3v2h-7z"/><circle cx="7" cy="17" r="2"/><circle cx="17" cy="17" r="2"/></svg>,
      h: lang==='uk'?'Доставка Новою Поштою':'Nova Poshta delivery', s: lang==='uk'?'По всій Україні, 1–3 дні':'Across Ukraine, 1–3 days' },
    { ic: <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M9 3h6l1 4H8zM8 7h8l1 12a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2z"/></svg>,
      h: lang==='uk'?'Семпли у подарунок':'Free samples', s: lang==='uk'?'2 пробники до кожного замовлення':'2 testers with every order' },
  ];
  return (
    <div className="ep-sell-trust">
      {items.map((it, i) => (
        <div className="it" key={i}>
          {it.ic}
          <div><div className="h">{it.h}</div><div className="s">{it.s}</div></div>
        </div>
      ))}
    </div>
  );
}

// ── Pain → promise band ─────────────────────────────────────
function SellPain({ p, cat, lang, tr }) {
  const c = sellCopy(p.cat);
  const stats = [
    { v: p.rating.toFixed(2), k: lang==='uk'?'середня оцінка':'average rating' },
    { v: p.reviews + '+',     k: lang==='uk'?'відгуків':'reviews' },
    { v: p.beforeAfter ? `${p.beforeAfter.days} ${lang==='uk'?'днів':'days'}` : '94%', k: p.beforeAfter ? (lang==='uk'?'до результату':'to results') : (lang==='uk'?'помітили різницю':'saw a difference') },
  ];
  return (
    <section className="ep-sell-pain">
      <div className="ep-eyebrow" style={{ color:'var(--ep-accent)' }}>{lang==='uk'?'Чому це варте уваги':'Why it matters'}</div>
      <h2 className="ep-sell-h q">{c.q[lang]}</h2>
      <p className="a">{c.a[lang]}</p>
      <div className="ep-sell-stats">
        {stats.map((s, i) => (
          <div className="ep-sell-stat" key={i}>
            <div className="v">{s.v}</div>
            <div className="k">{s.k}</div>
          </div>
        ))}
      </div>
    </section>
  );
}

// ── Benefits grid ───────────────────────────────────────────
function SellBenefits({ p, lang, mobile }) {
  const c = sellCopy(p.cat);
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 64, paddingBottom: 0 }}>
      <div className="ep-eyebrow">{lang==='uk'?'Що ви отримаєте':'What you get'}</div>
      <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 6 }}>
        {lang==='uk'?'Результат, який можна відчути':'A result you can feel'}
      </h2>
      <div className="ep-sell-benefits photo">
        {c.benefits.map((b, i) => (
          <div className="ep-sell-benefit photo" key={i}>
            <div className="ep-benefit-photo"><img src={`images/benefit-${(i % 3) + 1}.png`} alt={b.h[lang]} loading="lazy"/></div>
            <div className="ep-benefit-body">
              <h4>{b.h[lang]}</h4>
              <p>{b.d[lang]}</p>
            </div>
          </div>
        ))}
      </div>
    </section>
  );
}

// ── How-to steps ────────────────────────────────────────────
function SellSteps({ p, lang, mobile }) {
  const c = sellCopy(p.cat);
  const ref = useSellRef(null);
  const [vis, setVis] = useSellVis(false);
  useSellEffect(() => {
    const el = ref.current;
    if (!el) return;
    const check = () => {
      const r = el.getBoundingClientRect();
      if (r.top < (window.innerHeight || 800) * 0.82 && r.bottom > 0) {
        setVis(true);
        window.removeEventListener('scroll', check, true);
        return true;
      }
      return false;
    };
    if (check()) return;
    window.addEventListener('scroll', check, true);
    const t = setTimeout(check, 600);
    return () => { window.removeEventListener('scroll', check, true); clearTimeout(t); };
  }, []);
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 64, paddingBottom: 0 }}>
      <div className="ep-eyebrow">{lang==='uk'?'Як застосовувати':'How to use'}</div>
      <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 6 }}>
        {lang==='uk'?'Три прості кроки':'Three simple steps'}
      </h2>
      <div className="ep-steps photo" style={{ '--steps': c.steps.length }}>
        <div className="ep-steps-row">
          {c.steps.map((s, i) => {
            const img = `images/step-${(i % 3) + 1}.jpg`;
            return (
              <div className="ep-step" key={i} style={{ '--i': i }}>
                <div className="ep-step-photo">
                  <img src={img} alt={s.h[lang]} loading="lazy"/>
                  <span className="ep-step-num">{i + 1}</span>
                </div>
                <div className="ep-step-card">
                  <h4>{s.h[lang]}</h4>
                  <p>{s.d[lang]}</p>
                </div>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

// ── Before / after band ─────────────────────────────────────
function SellBeforeAfter({ p, lang }) {
  if (!p.beforeAfter) return null;
  return (
    <section className="ep-sell-ba">
      <div className="ep-sell-ba-img">
        <img src="portraits/ba.jpg" alt=""/>
        <div className="divider"></div>
        <div className="lbl" style={{ left: 14, background:'rgba(255,255,255,0.92)', color:'var(--ep-ink)' }}>{lang==='uk'?'До':'Before'}</div>
        <div className="lbl" style={{ right: 14, background:'var(--ep-accent)', color:'var(--ep-accent-ink)' }}>{lang==='uk'?'Після':'After'}</div>
      </div>
      <div>
        <div className="ep-eyebrow" style={{ color:'var(--ep-accent)' }}>{lang==='uk'?'Реальний результат':'Real result'}</div>
        <h2 className="ep-sell-h" style={{ fontSize: 30, marginTop: 8, marginBottom: 12 }}>
          {lang==='uk' ? `Зміни вже за ${p.beforeAfter.days} днів` : `Visible change in ${p.beforeAfter.days} days`}
        </h2>
        <p style={{ fontSize: 15, color:'var(--ep-ink-2)', lineHeight: 1.6, margin: 0 }}>
          {lang==='uk'
            ? 'Фото без ретуші, за умови щоденного застосування. Індивідуальний результат може відрізнятися.'
            : 'Unretouched photos with daily use. Individual results may vary.'}
        </p>
      </div>
    </section>
  );
}

// ── FAQ accordion ───────────────────────────────────────────
function SellFaq({ p, lang, mobile }) {
  const [open, setOpen] = useSell(0);
  const faq = lang==='uk' ? [
    { q:'Чи підійде моєму типу шкіри?', a:'Формула розроблена для більшості типів, включно з чутливою. Якщо маєш активні дерматологічні стани — порадься з лікарем або пройди наш безкоштовний підбір.' },
    { q:'Коли буде помітний результат?', a:'Перші зміни — зволоження й комфорт — відчутні з першого тижня. Стійкий результат накопичується за 4–6 тижнів регулярного застосування.' },
    { q:'Як швидко доставите?', a:'Відправляємо щодня Новою Поштою. По Україні — 1–3 робочі дні. До кожного замовлення додаємо 2 пробники.' },
    { q:'Що, якщо не підійде?', a:'У тебе 30 днів на повернення. Напиши нам — повернемо кошти без зайвих питань.' },
  ] : [
    { q:'Will it suit my skin type?', a:'The formula is built for most skin types, including sensitive. If you have active dermatological conditions, consult a doctor or take our free quiz.' },
    { q:'When will I see results?', a:'Hydration and comfort are noticeable from the first week. Lasting results build over 4–6 weeks of regular use.' },
    { q:'How fast is delivery?', a:'We ship daily via Nova Poshta. Across Ukraine that’s 1–3 working days. Every order includes 2 free testers.' },
    { q:'What if it doesn’t work for me?', a:'You have 30 days to return it. Just message us and we’ll refund you — no hassle.' },
  ];
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 56, paddingBottom: 0 }}>
      <div className="ep-sell-faq2">
        <aside className="ep-sell-faq-aside">
          <div className="ep-eyebrow">FAQ</div>
          <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 6, marginBottom: 14 }}>
            {lang==='uk'?'Часті запитання':'Common questions'}
          </h2>
          <p className="help">
            {lang==='uk'
              ? 'Не знайшли відповідь? Напишіть нам — відповідаємо щодня з 9:00 до 20:00.'
              : 'Didn’t find your answer? Message us — we reply daily, 9:00–20:00.'}
          </p>
        </aside>
        <div className="ep-sell-faq-list">
          {faq.map((f, i) => (
            <div className={`ep-sell-faq-item ${open === i ? 'open' : ''}`} key={i}>
              <button className="ep-sell-faq-q" onClick={() => setOpen(open === i ? -1 : i)}>
                <span style={{ flex: 1 }}>{f.q}</span>
                <span className="pm"></span>
              </button>
              <div className="ep-sell-faq-a"><p>{f.a}</p></div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ── Repeat CTA band ─────────────────────────────────────────
function SellRepeatCTA({ p, lang, fmt, addToCart, onBuy }) {
  const promoLine = window.promoLine(p.promo, lang);
  return (
    <section className="ep-sell-cta">
      <div className="thumb"><img src={p.image} alt={p.name}/></div>
      <div>
        <h3>{lang==='uk'?'Готові спробувати?':'Ready to try it?'}</h3>
        <p>{lang==='uk'
          ? 'Гарантія повернення 30 днів · 2 семпли у подарунок · доставка Новою Поштою.'
          : '30-day money-back guarantee · 2 free samples · Nova Poshta delivery.'}</p>
        <div style={{ marginTop: 14 }}>
          <span className="price-now">{fmt(p.price)}</span>
        </div>
        {promoLine && (
          <div style={{ marginTop: 10, display:'inline-flex', alignItems:'center', gap: 8, fontSize: 12.5, color:'rgba(255,255,255,0.85)' }}>
            <span style={{ flex:'none', fontFamily:'var(--ep-font-mono)', fontSize: 11, fontWeight: 600, padding:'3px 9px', borderRadius: 999, background:'var(--ep-accent)', color:'var(--ep-accent-ink)' }}>{window.promoBadge(p.promo, lang)}</span>
            {promoLine}
          </div>
        )}
      </div>
      <div className="ep-sell-cta-right">
        <button className="ep-btn accent xl" onClick={onBuy}>
          {lang==='uk'?'Додати в кошик':'Add to bag'} <span style={{ fontSize: 15 }}>→</span>
        </button>
        <span style={{ fontSize: 11, color:'var(--ep-ink-3)', fontFamily:'var(--ep-font-mono)' }}>
          {lang==='uk'?'Безпечна оплата · Visa / Mastercard':'Secure checkout · Visa / Mastercard'}
        </span>
      </div>
    </section>
  );
}

// ── Description (editorial, replaces the "Опис" tab) ────────
function SellDescription({ p, tr, t, lang, mobile }) {
  const c = sellCopy(p.cat);
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 64, paddingBottom: 0 }}>
      <div className="ep-sell-about">
        <div className="lead">
          <div className="ep-eyebrow">{lang==='uk'?'Про продукт':'About the product'}</div>
          <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 10 }}>
            {c.q[lang]}
          </h2>
        </div>
        <div className="body">
          <p>{tr(p.sub)}. {t('desc.p1')}</p>
          <p>{t('desc.p2')}</p>
        </div>
      </div>
    </section>
  );
}

// ── Ingredients / full composition (replaces "Склад" tab) ───
function SellIngredients({ lang, mobile }) {
  const inci = 'Aqua, Niacinamide, Glycerin, Panthenol, Cica Extract, Allantoin, Sodium Hyaluronate, Pentylene Glycol, Phenoxyethanol, Hydroxyacetophenone, Citric Acid, Sodium Citrate.';
  const actives = [
    { n:'Niacinamide',        d:{uk:'Рівний тон, контроль себуму', en:'Even tone, sebum control'} },
    { n:'Panthenol (B5)',     d:{uk:'Заспокоєння та відновлення', en:'Soothing & repair'} },
    { n:'Sodium Hyaluronate', d:{uk:'Глибоке зволоження',         en:'Deep hydration'} },
    { n:'Cica Extract',       d:{uk:'Зміцнення бар’єра',          en:'Barrier strengthening'} },
  ];
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 64, paddingBottom: 0 }}>
      <div className="ep-eyebrow">{lang==='uk'?'Склад':'Composition'}</div>
      <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 6, marginBottom: 22 }}>
        {lang==='uk'?'Активи у фокусі':'Key actives'}
      </h2>
      <div className="ep-sell-actives">
        {actives.map((a, i) => (
          <div className="ep-sell-active" key={i}>
            <div className="n">{a.n}</div>
            <div className="d">{a.d[lang]}</div>
          </div>
        ))}
      </div>
      <div className="ep-sell-inci">
        <div className="lbl">{lang==='uk'?'Повний склад (INCI)':'Full composition (INCI)'}</div>
        <div className="txt">{inci}</div>
      </div>
    </section>
  );
}

// ── Reviews with summary (replaces "Відгуки" tab) ───────────
function SellReviews({ p, t, lang, mobile }) {
  const reviews = [
    { n: lang==='uk' ? 'Олена К.' : 'Olena K.', d:t('rev.date.1'), r:5, t:t('rev.1.t') },
    { n: lang==='uk' ? 'Марія В.' : 'Maria V.', d:t('rev.date.2'), r:5, t:t('rev.2.t') },
    { n: lang==='uk' ? 'Аліна С.' : 'Alina S.', d:t('rev.date.3'), r:4, t:t('rev.3.t') },
  ];
  // synthetic distribution skewed to the product rating
  const dist = [
    { s:5, pct: 82 }, { s:4, pct: 13 }, { s:3, pct: 3 }, { s:2, pct: 1 }, { s:1, pct: 1 },
  ];
  return (
    <section className="ep-section" style={{ paddingTop: mobile ? 40 : 64, paddingBottom: 0 }}>
      <div className="ep-eyebrow">{lang==='uk'?'Відгуки':'Reviews'}</div>
      <h2 className="ep-sell-h" style={{ fontSize: mobile ? 28 : 36, marginTop: 6, marginBottom: 24 }}>
        {lang==='uk'?'Що кажуть покупці':'What customers say'}
      </h2>
      <div className="ep-sell-rev">
        <div className="ep-sell-rev-summary">
          <div className="big">{p.rating.toFixed(2)}</div>
          <div className="stars">{'★★★★★'}</div>
          <div className="cnt">{p.reviews} {lang==='uk'?'відгуків':'reviews'}</div>
          <div className="bars">
            {dist.map(d => (
              <div className="bar" key={d.s}>
                <span className="k">{d.s}★</span>
                <span className="track"><span className="fill" style={{ width: d.pct + '%' }}></span></span>
                <span className="v">{d.pct}%</span>
              </div>
            ))}
          </div>
        </div>
        <div className="ep-sell-rev-list">
          {reviews.map((r, i) => (
            <div key={i} className="ep-review">
              <div className="hd">
                <div className="av">{r.n[0]}</div>
                <div>
                  <div style={{ fontWeight: 600, fontSize: 13, color:'var(--ep-ink)' }}>{r.n}</div>
                  <div style={{ fontSize: 11, color:'var(--ep-ink-3)' }}>{r.d}</div>
                </div>
                <span className="stars" style={{ marginLeft:'auto', color:'#d9a04a' }}>{'★'.repeat(r.r)}{'☆'.repeat(5-r.r)}</span>
              </div>
              <div className="body">{r.t}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

Object.assign(window, {
  sellCopy, SellTrust, SellPain, SellBenefits, SellSteps, SellBeforeAfter, SellFaq, SellRepeatCTA,
  SellDescription, SellIngredients, SellReviews,
});
