/* casestudy-missionmittelstand-content.ru.jsx — Mission Mittelstand, русская версия.
   Та же структура и компоненты, что и в casestudy-missionmittelstand-content.jsx,
   русский текст в тоне migroplan / axiomlens / bachata.
   Экспортирует <MMCase/>, <MMDisclaimer/>, <MMPrototypeModal/>.
   Загружается из prod/ru/ — отсюда пути «../». */

const MMI = "../mm/";
const PROTOTYPE_FILE = "../mm/prototype-mobile.html";

/* ---- скриншот с браузерным «хромом» (десктоп); URL — статичный текст, не ссылка ---- */
function MMShot({ src, caption, alt = "Лендинг Mission Mittelstand", url = "mission-mittelstand.de", badge, badgeKind, placeholder }) {
  const open = useLightbox();
  return (
    <figure className="mm-shot">
      <div className="mm-shell">
        <div className="mm-chrome">
          <span className="mm-dots" aria-hidden="true"><i></i><i></i><i></i></span>
          <span className="mm-url">{url}</span>
          {badge && <span className={"mm-badge" + (badgeKind ? " is-" + badgeKind : "")}>{badge}</span>}
        </div>
        {src ? (
          <button type="button" className="mm-shot-img" data-hot onClick={() => open({ src, alt, caption })} aria-label={"Открыть изображение: " + alt}>
            <img src={src} alt={alt} loading="eager" />
            <span className="mm-zoom" aria-hidden="true">
              <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7" /></svg>
            </span>
          </button>
        ) : <Placeholder label={placeholder} />}
      </div>
      {caption && <figcaption className="cs-cap">{caption}</figcaption>}
    </figure>
  );
}

/* ---- рамка телефона (мобайл) ---- */
function MMPhone({ src, caption, alt = "Mission Mittelstand на телефоне", placeholder, tag, tagKind }) {
  const open = useLightbox();
  return (
    <figure className="mm-phone">
      <div className="mm-phone-frame">
        {tag && <span className={"mm-phone-tag" + (tagKind ? " is-" + tagKind : "")}>{tag}</span>}
        {src ? (
          <button type="button" className="mm-phone-shot" data-hot onClick={() => open({ src, alt, caption })} aria-label={"Открыть изображение: " + alt}>
            <img src={src} alt={alt} loading="eager" />
          </button>
        ) : <Placeholder label={placeholder} />}
      </div>
      {caption && <figcaption className="cs-cap">{caption}</figcaption>}
    </figure>
  );
}

function Placeholder({ label }) {
  return (
    <div className="mm-ph">
      <span className="mm-ph-ico" aria-hidden="true">
        <svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
          <rect x="3" y="3" width="18" height="18" rx="2" /><path d="M3 15l5-5 4 4 3-3 6 6" /><circle cx="8.5" cy="8.5" r="1.5" />
        </svg>
      </span>
      <span className="mm-ph-t">{label || "Экран"}</span>
      <span className="mm-ph-s">Сюда идет экспорт прототипа</span>
    </div>
  );
}

/* ---- анимированная метрика ---- */
function MMStat({ to, pre = "", suf = "", text, label }) {
  const ref = useRef(null);
  const [run, setRun] = useState(false);
  useEffect(() => {
    const el = ref.current; if (!el) return;
    const inView = () => { const r = el.getBoundingClientRect(); return r.top < (window.innerHeight || 800) * 0.85 && r.bottom > 0; };
    if (inView()) { setRun(true); return; }
    const onScroll = () => { if (inView()) { setRun(true); cleanup(); } };
    const t = setTimeout(() => { setRun(true); cleanup(); }, 2500);
    function cleanup() { window.removeEventListener("scroll", onScroll); clearTimeout(t); }
    window.addEventListener("scroll", onScroll, { passive: true });
    return cleanup;
  }, []);
  const [val, setVal] = useState(0);
  useEffect(() => {
    if (!run) return;
    if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) { setVal(to == null ? 0 : to); return; }
    let raf = 0, start = 0, done = false; const target = to == null ? 0 : to; const dur = 1300;
    const tick = (t) => { if (!start) start = t; const p = Math.min((t - start) / dur, 1); setVal(Math.round((1 - Math.pow(1 - p, 3)) * target)); if (p < 1) raf = requestAnimationFrame(tick); else done = true; };
    raf = requestAnimationFrame(tick);
    const fb = setTimeout(() => { if (!done) setVal(target); }, dur + 500);
    return () => { cancelAnimationFrame(raf); clearTimeout(fb); };
  }, [run, to]);
  return (
    <div className="gm-stat" ref={ref}>
      <div className="gm-stat-n">{text ? text : <span className="accent">{pre}{val}{suf}</span>}</div>
      <div className="gm-stat-k">{label}</div>
    </div>
  );
}

function MPlain({ items }) {
  return <ul className="cs-steps">{items.map((t, i) => <li className="cs-li" key={i}>{t}</li>)}</ul>;
}
function KL({ items }) {
  return <ul className="cs-steps">{items.map(([b, t], i) => <li className="cs-li" key={i}><strong>{b}</strong> {t}</li>)}</ul>;
}

/* пять слабых мест */
const GAPS = [
  ["01 · Ценность", "Продает компанию сильнее, чем саму шпаргалку", "Страница рекламирует Mission Mittelstand как организацию куда активнее, чем сам шаблон. А конкретная польза шпаргалки — единственное, что реально двигает конверсию лид-магнита, — упомянута буквально вскользь."],
  ["02 · Импульс", "Два CTA на разных концах страницы", "Призывов к действию всего два, и разделяет их вся страница целиком. Пропустил первый — впереди долгая прокрутка без второй возможности что-то сделать."],
  ["03 · Доверие", "«Скачивание», которое ничего не скачивает", "Каждая кнопка обещает «Vorlage herunterladen», но на телефон ничего не попадает: модалка собирает данные, а PDF приходит потом на почту. Формулировка сулит мгновенный файл, которого во флоу нет."],
  ["04 · Мобильное исполнение", "Неуклюже на телефоне", "Огромные малоинформативные секции, верстка, которая ближе к низу начинает разъезжаться, и раздутый неопрятный футер — все это тяжело идет на маленьком экране, а именно оттуда и приходит основной трафик."],
  ["05 · Соцдоказательство", "Trustpilot, слитый впустую", "Сильный рейтинг 4,5 и 870 отзывов на Trustpilot есть — но только внутри модалки, без возможности кликнуть, и на самом лендинге его нигде не видно. Лучший аргумент спрятан."],
];

/* «до» — их лендинг, в рамках телефона */
const BEFORE = [
  [MMI + "before-hero.png", "Первый экран обещает «Vorlage herunterladen» — скачать шаблон."],
  [MMI + "before-modal.png", "…но клик открывает модалку с формой, а файл приходит потом на почту."],
  [MMI + "before-modal-trustpilot.png", "Рейтинг Trustpilot 4,5 показывается только внутри этой модалки, без возможности перейти."],
  [MMI + "before-wissen.png", "Большие секции несут очень мало информации — на телефоне это дорого обходится."],
  [MMI + "before-footer.png", "Футер раздутый и неопрятный, он затягивает страницу."],
];

/* «после» — редизайн по секциям (от пользы; ведет gif) */
const VISUALS = [
  { n: "01", k: "Липкий CTA", h: "Кнопка, которая следует за вами вниз", img: MMI + "sticky-button.gif",
    desc: "Моя любимая мелочь, поэтому она идет первой. Прокручиваешь мимо кнопки в первом экране — и снизу выезжает узкий CTA, который остается в зоне большого пальца: один тап до формы. Как только форма появляется на экране, он прячется обратно, так что помогает, но никогда не надоедает. А тот длинный кусок в середине старой страницы без единого CTA? Его больше нет." },
  { n: "02", k: "Ценность", h: "Что вы получаете — в три короткие строки", img: MMI + "after-value.png",
    desc: "Прямо под первым экраном три коротких пункта делают пользу шпаргалки очевидной — без прокрутки и догадок. Вы понимаете, что внутри файла и почему он стоит ваших контактов, еще до того, как о них попросят." },
  { n: "03", k: "Доверие", h: "Сначала цифры, потом живое лицо", img: MMI + "after-stats.png",
    desc: "Сначала доверие держат несколько твердых цифр, а затем лично появляется Маттиас — основатель и владелец Mission Mittelstand. Человек за компанией на странице делает для доверия больше, чем любая стена из логотипов, и бренд наконец читается как живые люди." },
  { n: "04", k: "FAQ", h: "Секция, которой в оригинале не было", img: MMI + "after-faq.png",
    desc: "Раньше FAQ не было вовсе — и это упущение, потому что он работает сразу в трех направлениях: снимает последние сомнения (это правда бесплатно? зачем мой телефон?), поднимает конверсию, закрывая возражения прямо перед формой, и заодно тихо помогает SEO-видимости." },
  { n: "05", k: "Конверсия", h: "CTA, который говорит правду", img: MMI + "after-form.png",
    desc: "Никакой модалки и никакой приманки. Форма стоит прямо на странице, кнопка читается «PDF kostenlos erhalten», а строка под ней честно объясняет, зачем нужно каждое поле и что будет дальше. Ничто в запросе не должно застать вас врасплох." },
  { n: "06", k: "Футер", h: "Футер, который знает, когда остановиться", img: MMI + "after-footer.png",
    desc: "Старый футер тянулся бесконечно. Я пересобрал его компактно и аккуратно — меньше, приятнее на вид и реально полезным как последнее, мимо чего вы прокручиваете." },
];

/* ---- основная статья ---- */
function MMCase({ onPrototype }) {
  return (
    <div className="cs-view">

      {/* ── Hero ── */}
      <section className="cs-section cs-hero">
        <div className="cs-wrap">
          <div className="cs-kicker">
            <Reveal><MonoLabel>Кейс · Mission Mittelstand</MonoLabel></Reveal>
            <Reveal as="span" className="mono-sm" style={{ color: "var(--ink-faint)" }}>· 2026 · Лендинг · Концепт</Reveal>
          </div>
          <div className="ax-hero-grid">
            <Reveal className="ax-hero-text">
              <h1 className="cs-title">Лид-магнит,<br /><span className="accent">пересобранный под конверсию.</span></h1>
              <p className="cs-sub">Mobile-first редизайн лендинга Mission Mittelstand с бесплатной шпаргалкой — пересобранный вокруг более понятной воронки, честной логики скачивания и более сильного аргумента в пользу самого шаблона.</p>
              <p className="cs-lead">
                Mission Mittelstand раздает бесплатную шпаргалку для «Mitarbeitergespräch» (беседы с сотрудником) как лид-магнит. Единственная цель страницы — убедить посетителя ее скачать. Запрос компании был прямым: пересобрать эту страницу так, чтобы выжать максимум скачиваний — сначала мобайл, десктоп опционально — в шрифте Barlow и по-прежнему безошибочно узнаваемо как Mission Mittelstand.
              </p>
              <p className="cs-lead">
                Настоящий фокус был на стратегии за структурой: какая секция что делает, почему стоит там, где стоит, и почему новая сборка должна конвертить лучше оригинала.
              </p>
              <div className="ax-skip-wrap" style={{ display: "flex", gap: ".8rem", flexWrap: "wrap" }}>
                <a href="#visuals" className="btn btn-accent ax-skip-btn" data-hot>
                  Сразу к визуалу
                  <span className="btn-arrow"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 5v14M6 13l6 6 6-6" /></svg></span>
                </a>
                <button type="button" className="btn ax-skip-btn" data-hot onClick={onPrototype}>
                  Посмотреть мобильный прототип вживую
                  <span className="btn-arrow"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3v12M8 11l4 4 4-4M5 19h14" /></svg></span>
                </button>
              </div>
            </Reveal>
            <Reveal className="ax-hero-media">
              <MMPhone src={MMI + "after-hero.png"} alt="Пересобранный мобильный первый экран Mission Mittelstand"
                caption={<><strong>Пересобранный мобильный первый экран.</strong> Предложение, конкретная польза и доверие в первом же экране — мобайл был и обязательным условием брифа, и главной поверхностью страницы.</>} />
            </Reveal>
          </div>
        </div>
      </section>

      {/* ── Stats ── */}
      <section className="cs-section gm-stats-sec">
        <div className="cs-wrap">
          <div className="gm-statband mm-statband">
            <MMStat to={6} label="СЕКЦИЙ В НОВОЙ ВОРОНКЕ" />
            <MMStat to={5} label="СЛАБЫХ МЕСТ КОНВЕРСИИ НАЙДЕНО" />
            <MMStat to={3} label="НАПРАВЛЕНИЯ ПРОТОТИПА СРАВНИЛ" />
            <MMStat to={1} label="ЛИПКИЙ CTA НА ВСЮ ПРОКРУТКУ" />
          </div>
        </div>
      </section>

      {/* ── Nutshell ── */}
      <section className="cs-section">
        <div className="cs-wrap">
          <div className="cs-head"><h2 className="cs-h">Проект вкратце</h2></div>
          <Reveal className="cs-meta">
            <div className="cs-meta-cell">
              <div className="cs-meta-k">Моя роль</div>
              <div className="cs-meta-v">Стратегия воронки, UX лендинга, UX-текст, mobile-first UI-дизайн и интерактивный HTML-прототип</div>
            </div>
            <div className="cs-meta-cell">
              <div className="cs-meta-k">Формат</div>
              <div className="cs-meta-v">Бриф от компании — концепт-сборка, живой аналитики не давали</div>
            </div>
            <div className="cs-meta-cell">
              <div className="cs-meta-k">Ограничения</div>
              <div className="cs-meta-v">Шрифт Barlow · фирменный стиль Mission Mittelstand · мобайл обязателен / десктоп опционален · реалистично собираемо, без библиотек компонентов</div>
            </div>
          </Reveal>
          <Reveal className="cs-chips cs-mt-m" style={{ justifyContent: "center" }}>
            {["Стратегия воронки", "UX лендинга", "UX-текст", "Mobile-First UI", "Архитектура конверсии", "Доверие и соцдоказательства", "Интерактивный прототип"].map((c) => (
              <span className="tag" key={c}>{c}</span>
            ))}
          </Reveal>
          <div className="cs-grid2 ax-equal cs-mt-l">
            <Reveal className="cs-panel">
              <h4>Что я сделал</h4>
              <MPlain items={[
                "Пересобрал информационную архитектуру лендинга со шпаргалкой",
                "Собрал интерактивный мобильный HTML-прототип как основной результат",
                "Сделал десктоп-версию, осознанно как MVP",
                "Переписал тексты CTA и добавил липкий CTA, который следует за прокруткой",
                "Заменил исходную модалку скачивания прозрачной встроенной формой",
              ]} />
            </Reveal>
            <Reveal className="cs-panel cs-panel-accent">
              <h4>Гипотеза</h4>
              <MPlain items={[
                "Трафик приходит в основном из таргетированных кампаний, так что у посетителей уже есть базовый интерес",
                "Оригинальная страница теряет их на ценности, импульсе, логике скачивания и мобильном исполнении",
                "Более плотная воронка, которая ведет от пользы и остается честной, должна поднять скачивания",
                "Каждое утверждение здесь — гипотеза, которая ждет реальных данных для подтверждения",
              ]} />
            </Reveal>
          </div>
        </div>
      </section>

      {/* ── Потенциальные точки трения ── */}
      <section className="cs-section" id="process">
        <span className="ax-anchor" aria-hidden="true"></span>
        <div className="cs-wrap">
          <div className="cs-head"><h3 className="cs-h">Потенциальные точки трения</h3></div>
          <p className="cs-p" style={{ maxWidth: "72ch" }}>
            Аналитики к брифу не прилагалось, так что я начал с того, с чем мог: с самой страницы, с того, для кого она и откуда приходит ее трафик. Исходя из догадки, что большинство приходит уже подогретыми из таргета — заранее заинтересованными в шпаргалке, — задача сводилась к одному: перестать их терять. В таком прочтении у оригинальной страницы есть пять мест, где готовый к скачиванию посетитель может тихо сорваться с крючка.
          </p>
          <div className="mm-gaps mm-gaps--5 cs-mt-l">
            {GAPS.map(([n, t, d]) => (
              <Reveal className="mm-gap" key={n}>
                <span className="mm-gap-n">{n}</span>
                <span className="mm-gap-t">{t}</span>
                <span className="mm-gap-d">{d}</span>
              </Reveal>
            ))}
          </div>

          <p className="cs-p cs-mt-l" style={{ maxWidth: "72ch" }}>
            Часть из этого доходит лучше, когда просто видишь:
          </p>
          <div className="mm-scrollhint cs-mt-s" aria-hidden="true">
            <span>Листайте дальше</span>
            <svg width="22" height="12" viewBox="0 0 22 12" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"><path d="M1 6h19M15 1l5 5-5 5" /></svg>
          </div>
          <div className="mm-carousel cs-mt-s">
            {BEFORE.map(([src, cap]) => (
              <MMPhone key={src} src={src} tag="До" tagKind="before" alt="Оригинальный лендинг Mission Mittelstand"
                caption={cap} />
            ))}
          </div>
        </div>
      </section>

      {/* ── Как я это пересобрал ── */}
      <section className="cs-section">
        <div className="cs-wrap">
          <div className="cs-head"><h3 className="cs-h">Как я это пересобрал</h3></div>
          <p className="cs-p" style={{ maxWidth: "72ch" }}>
            Данных под рукой не было, так что я оперся на процесс. Примерно так работа и шла, от начала до конца:
          </p>
          <div className="mm-journey cs-mt-l">
            {[
              ["Прочитать страницу как посетитель.", "Прошел оригинал так, как это делает его трафик — с телефона — и разобрался, для кого она на самом деле и откуда приходят эти люди, прежде чем что-то менять."],
              ["Отметить трение и возможности.", "Пометил очевидные точки оттока и, что не менее важно, места с явным пространством для роста."],
              ["Зафиксировать гипотезу.", "Свел все это в позицию: вести от пользы шаблона, оставаться честным про скачивание, держать CTA всегда в пределах досягаемости."],
              ["Набросать три направления.", "Собрал три структурно разных первых прототипа и сравнил их бок о бок, прежде чем на чем-то остановиться."],
              ["Выбрать финалиста.", "Выбрал направление, которое лучше всего служит единственной цели — чтобы шпаргалку скачали — и отложил два других."],
              ["Довести до hi-fi.", "Одел победителя в полный стиль Mission Mittelstand, набрал в Barlow: по бренду и реалистично собираемо."],
              ["Сделать кликабельным.", "Выпустил его как интерактивный mobile-first HTML-прототип, который реально можно протыкать, — куда дальше плоского макета."],
            ].map(([b, t], i) => (
              <Reveal className="mm-jstep" key={i}>
                <span className="mm-jnode" aria-hidden="true">{String(i + 1).padStart(2, "0")}</span>
                <div className="mm-jcard">
                  <h4 className="mm-jt">{b}</h4>
                  <p className="mm-jd">{t}</p>
                </div>
              </Reveal>
            ))}
          </div>
        </div>
      </section>

      {/* ── Визуал (зигзаг) ── */}
      <section className="cs-section" id="visuals">
        <span className="ax-anchor" aria-hidden="true"></span>
        <div className="cs-wrap">
          <div className="cs-head"><h3 className="cs-h">Редизайн, секция за секцией</h3></div>
          <div className="ax-screens cs-mt-l">
            {VISUALS.map((s, i) => (
              <div className={"ax-screen" + (i % 2 ? " rev" : "")} key={s.n}>
                <Reveal className="ax-screen-text">
                  <div className="ax-index"><span className="ax-index-n">{s.n}</span><span className="ax-index-k">{s.k}</span></div>
                  <h4 className="ax-screen-h">{s.h}</h4>
                  <p className="cs-p">{s.desc}</p>
                </Reveal>
                <Reveal className="ax-screen-media">
                  <MMPhone src={s.img} alt={s.h} />
                </Reveal>
              </div>
            ))}
          </div>
          <Reveal className="mm-proto-cta cs-mt-l">
            <div>
              <h4 className="gm-subh" style={{ marginTop: 0 }}>Попробуйте вживую</h4>
              <p className="cs-p" style={{ margin: 0 }}>Весь флоу — рабочий, самодостаточный HTML-прототип, который лучше всего открывать на телефоне.</p>
            </div>
            <button type="button" className="btn btn-accent" data-hot onClick={onPrototype}>
              Посмотреть мобильный прототип вживую
              <span className="btn-arrow"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3v12M8 11l4 4 4-4M5 19h14" /></svg></span>
            </button>
          </Reveal>
        </div>
      </section>

      {/* ── Десктоп ── */}
      <section className="cs-section">
        <div className="cs-wrap">
          <div className="cs-head"><h3 className="cs-h">Десктоп, как осознанный MVP</h3></div>
          <Reveal>
            <p className="cs-p" style={{ maxWidth: "72ch" }}>
              Раз мобайл был обязательным фокусом, десктоп-версию я собрал как осознанный MVP: та же воронка и те же смыслы, реализованные как рабочий прототип, но с меньшим временем на широкую верстку. Будь времени больше, я бы дожал масштабирование и сделал секции в середине страницы богаче — но вся история уже здесь.
            </p>
          </Reveal>
          <Reveal className="mm-mvp-shot">
            <MMShot src={MMI + "after-desktop.png"} url="Новый десктоп-hero" badge="После" badgeKind="after"
              alt="Пересобранный лендинг Mission Mittelstand на десктопе"
              caption={<>Та же воронка, шире полотно. Десктоп-сборка — честный MVP: история рассказана целиком, хотя с бóльшим временем я дал бы верстке больше воздуха.</>} />
          </Reveal>
        </div>
      </section>

      {/* ── Выводы ── */}
      <section className="cs-section">
        <div className="cs-prose">
          <div className="cs-head" style={{ justifyContent: "center" }}><h3 className="cs-h">Выводы</h3></div>
          <ul className="cs-steps cs-mt-m">
            {[
              ["Веди от позиции.", "Даже без данных явная гипотеза делает работу проверяемой, а следующий шаг очевидным. Редизайн — это аргумент; данные — то, чем спор решается."],
              ["Честность — это тактика конверсии.", "Свести обещание CTA к тому, что происходит на деле, — самое проверяемое и, вероятно, самое влиятельное изменение во всей пересборке."],
              ["Сначала суть, потом бренд.", "Когда цель — скачивание, польза шаблона должна дойти до пользователя раньше истории компании."],
            ].map(([b, t], i) => <li className="cs-li" key={i}><strong>{b}</strong> {t}</li>)}
          </ul>
        </div>
      </section>

    </div>
  );
}

/* ---- модалка скачивания интерактивного прототипа ---- */
function MMPrototypeModal({ open, onClose }) {
  const closeRef = useRef(null);
  useEffect(() => {
    if (!open) return;
    const onKey = (e) => { if (e.key === "Escape") onClose(); };
    document.addEventListener("keydown", onKey);
    const prev = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    closeRef.current && closeRef.current.focus();
    return () => { document.removeEventListener("keydown", onKey); document.body.style.overflow = prev; };
  }, [open, onClose]);
  if (!open) return null;
  return (
    <div className="contact-modal" role="dialog" aria-modal="true" aria-label="Мобильный прототип"
      onMouseDown={(e) => { if (e.target === e.currentTarget) onClose(); }}>
      <div className="contact-modal-card mm-proto-card">
        <button className="legal-x contact-modal-x" onClick={onClose} aria-label="Закрыть" data-hot ref={closeRef}>
          <svg width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true"><path d="M3 3l12 12M15 3L3 15" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" /></svg>
        </button>
        <div className="contact-modal-head">
          <MonoLabel>Мобильный прототип</MonoLabel>
          <h2 className="contact-modal-title">Откройте его на телефоне</h2>
          <p className="contact-modal-sub">Это самодостаточная офлайн-страница — она существует только как один этот файл. Скачайте его и откройте в любом браузере (лучше всего на телефоне или в мобильном режиме браузера).</p>
        </div>
        <div className="mm-proto-actions">
          <a className="btn btn-accent" href={PROTOTYPE_FILE} download="mission-mittelstand-prototype.html" data-hot onClick={onClose}>
            Скачать прототип
            <span className="btn-arrow"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M12 3v12M8 11l4 4 4-4M5 19h14" /></svg></span>
          </a>
          <button className="btn" onClick={onClose} data-hot>Может быть, позже</button>
        </div>
      </div>
    </div>
  );
}

/* ---- дисклеймер по товарным знакам / использованию (рендерится шеллом под финальным CTA) ---- */
function MMDisclaimer() {
  return (
    <section className="cs-section mm-disclaimer-sec">
      <div className="cs-wrap">
        <div className="mm-disclaimer">
          <span className="mm-disclaimer-ico" aria-hidden="true">
            <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.7" strokeLinecap="round" strokeLinejoin="round"><circle cx="12" cy="12" r="9" /><path d="M12 8h.01M11 12h1v4h1" /></svg>
          </span>
          <div>
            <p>
              <strong style={{ color: "var(--ink-soft)" }}>Товарные знаки и использование.</strong> «Mission Mittelstand», знак BVMW и все связанные названия, логотипы, изображения и брендовые материалы, показанные здесь, принадлежат их правообладателям. Я не владею никакими правами на них и не претендую на них.
            </p>
            <p>
              Этот кейс сделан по брифу от компании, и все показанные брендовые материалы были предоставлены мне для этой цели — воспроизведены здесь исключительно чтобы задокументировать мою работу. Это независимый концепт: не аффилирован с Mission Mittelstand, не одобрен ею и не является ее официальным продуктом, и никогда не публиковался ни на одном живом сайте.
            </p>
          </div>
        </div>
      </div>
    </section>
  );
}

Object.assign(window, { MMCase, MMDisclaimer, MMPrototypeModal });
