PageSourceSearch

https://franshiza-sushi-era.ru/preimushchestva/

html franshiza-sushi-era.ru collected 2026-10-10 02:36:06 UTC 109,256 bytes, 772 lines download raw bytes

1<!DOCTYPE html><html lang="ru"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Преимущества франшизы «Суши Эра» перед конкурентами</title><meta name="description" content="Чем франшиза «Суши Эра» отличается от конкурентов: 14 лет на рынке, свой колл-центр, выкуп точки за 18 месяцев, собственное производство специй."><link rel="canonical" href="https://franshiza-sushi-era.ru/preimushchestva/"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name="yandex-verification" content="134891fb00b83c88"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:site_name" content="Суши Эра"><meta property="og:title" content="Преимущества франшизы «Суши Эра» перед конкурентами"><meta property="og:description" content="Чем франшиза «Суши Эра» отличается от конкурентов: 14 лет на рынке, свой колл-центр, выкуп точки за 18 месяцев, собственное производство специй."><meta property="og:url" content="https://franshiza-sushi-era.ru/preimushchestva/"><meta property="og:image" content="https://franshiza-sushi-era.ru/og/default.jpg"><meta property="og:locale" content="ru_RU"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Преимущества франшизы «Суши Эра» перед конкурентами"><meta name="twitter:description" content="Чем франшиза «Суши Эра» отличается от конкурентов: 14 лет на рынке, свой колл-центр, выкуп точки за 18 месяцев, собственное производство специй."><meta name="twitter:image" content="https://franshiza-sushi-era.ru/og/default.jpg"><!-- Favicons --><link rel="icon" href="/favicon.ico" sizes="16x16 32x32 48x48"><link rel="icon" href="/favicon-192.png" type="image/png" sizes="192x192"><link rel="icon" href="/favicon.png" type="image/png" sizes="64x64"><link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- Preload основной шрифт --><link rel="preload" href="/fonts/Nunito-VariableFont_wght.woff2" as="font" type="font/woff2" crossorigin>
1<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://franshiza-sushi-era.ru/#organization","name":"Франшиза «Суши Эра»","alternateName":"Суши Эра","url":"https://franshiza-sushi-era.ru/","logo":{"@type":"ImageObject","url":"https://franshiza-sushi-era.ru/logo/sushiera-red.png","width":78,"height":46},"image":"https://franshiza-sushi-era.ru/og/default.jpg","telephone":"+7 993 755-61-51","foundingDate":"2012","description":"Франшиза доставки суши и японской кухни «Суши Эра»: 14 лет на рынке, 70+ точек, доход партнёра от 2 800 000 ₽ в год. Запуск под ключ за 25 дней.","areaServed":{"@type":"Country","name":"Россия"},"address":{"@type":"PostalAddress","addressCountry":"RU"},"contactPoint":{"@type":"ContactPoint","telephone":"+7 993 755-61-51","contactType":"sales","areaServed":"RU","availableLanguage":"Russian"},"knowsAbout":["Франшиза суши","Франшиза доставки суши и роллов","Франшиза японской кухни","Открытие суши-бара"]},{"@type":"WebSite","@id":"https://franshiza-sushi-era.ru/#website","name":"Суши Эра","url":"https://franshiza-sushi-era.ru/","inLanguage":"ru-RU","publisher":{"@id":"https://franshiza-sushi-era.ru/#organization"}},{"@type":"Service","serviceType":"Франшиза доставки японской кухни","provider":{"@id":"https://franshiza-sushi-era.ru/#organization"},"areaServed":{"@type":"Country","name":"Россия"},"description":"Чем франшиза «Суши Эра» отличается от конкурентов: 14 лет на рынке, свой колл-центр, выкуп точки за 18 месяцев, собственное производство специй."},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"За сколько окупается точка?","acceptedA
1nswer":{"@type":"Answer","text":"По финмодели точка окупается за 13–16 месяцев в зависимости от тарифа: «Эконом» — 13, «Базовый» — 15, «Всё включено» — 16. Если ремонт берёт бригада компании, добавьте месяц. Рассчитать под свои вводные можно в калькуляторе на сайте."}},{"@type":"Question","name":"Какое роялти?","acceptedAnswer":{"@type":"Answer","text":"Роялти 5,5% от выручки. В него входят актуальное маржинальное меню, портал обучения, сайт с мобильным приложением и CRM, отдел сопровождения — то, что в одиночку обошлось бы дороже. Приём заказов колл-центром оплачивается отдельно, по факту заказов."}},{"@type":"Question","name":"Нужен ли опыт в общепите?","acceptedA
1nswer":{"@type":"Answer","text":"Нет. Большинство партнёров открывают первый бизнес. Мы обучаем вас и персонал на действующем филиале и ведём первый год."}},{"@type":"Question","name":"Что если точка не окупится?","acceptedAnswer":{"@type":"Answer","text":"Если за 18 месяцев нет окупаемости, выкупаем филиал по рыночной стоимости при условии бесплатного наставничества на год."}},{"@type":"Question","name":"Есть ли скрытые платежи сверх паушального взноса?","acceptedAnswer":{"@type":"Answer","text":"Нет. Полная смета известна после выбора локации и макета помещения. В калькуляторе вы видите все статьи расходов открыто."}},{"@type":"Question","name":"Можно ли оформить рассрочку?","acceptedA
1nswer":{"@type":"Answer","text":"Да, внутренняя рассрочка до 6 месяцев доступна начиная с тарифа «Базовый», рассматривается индивидуально."}},{"@type":"Question","name":"Сколько сотрудников нужно?","acceptedAnswer":{"@type":"Answer","text":"На точке нужен администратор и кухня. Приём заказов берёт на себя наш колл-центр, при нехватке повара помогает кадровый резерв."}},{"@type":"Question","name":"Кто помогает с поиском помещения и ремонтом?","acceptedAnswer":{"@type":"Answer","text":"Подбираем помещение и ведём переговоры по аренде, делаем 3D-макет. Ремонт при желании берёт наша бригада с опытом 50+ точек."}},{"@type":"Question","name":"Как защищены мои интересы юридически?","acceptedA
1nswer":{"@type":"Answer","text":"Договор коммерческой концессии регистрируется в Роспатенте на 3 года. Товарный знак «СУШИЭРА» зарегистрирован в Роспатенте (№846731, приоритет от 26.07.2021), вы работаете под защитой закона РФ."}},{"@type":"Question","name":"Закрепляется ли за мной территория?","acceptedAnswer":{"@type":"Answer","text":"Да. По договору коммерческой концессии за вами закрепляется эксклюзивная территория: другой франчайзи не откроется рядом и не будет забирать ваших клиентов."}},{"@type":"Question","name":"Какие требования к помещению?","acceptedAnswer":{"@type":"Answer","text":"Зависит от тарифа: тёмная кухня от 40 м² для доставки, суши-бар 60–70 м², кафе от 150 м². Нужны подходящие коммуникации и трафик. Помещение подбираем вместе и делаем 3D-макет."}},{"@type":"Question","name":"Можно ли перевести моё кафе под бренд (ребрендинг)?","acceptedA
1nswer":{"@type":"Answer","text":"Да. Если у вас уже есть кафе или точка общепита, поможем провести ребрендинг и настроить процессы под стандарты «Суши Эра» в короткий срок."}},{"@type":"Question","name":"Из чего складывается паушальный взнос?","acceptedAnswer":{"@type":"Answer","text":"Это право работать под брендом и доступ к системе: рецептура и технико-технологические карты (ТТК), поставщики, CRM с приложением, обучение, маркетинг-материалы, колл-центр и сопровождение. Полная смета открытия — отдельно и прозрачно."}}]}]}</script>
1<!-- BOTFAQTOR — антифрод-защита рекламных кликов (проект 184807).
2         Грузится сразу, а не по __onFirstIntent: смысл сервиса — зафиксировать ВСЕХ,
3         включая ботов, которые не скроллят и не кликают. Отложенная загрузка
4         вырезала бы из статистики ровно тот трафик, ради которого он ставится.
5         async — чтобы не блокировать парсинг: _ab_id_ выставлен до подключения. -->
5<script type="text/javascript">window._ab_id_ = 184807;</script>
5<script src="https://cdn.botfaqtor.ru/one.js" async></script>
5<!-- CALLIBRI — коллтрекинг (подмена номера +7 993 755-61-51 в шапке, футере,
6         "Контактах" и мобильном callbar). Тоже без __onFirstIntent: подмена обязана
7         произойти до того, как посетитель увидит и наберёт номер, иначе звонок
8         теряет источник. defer оставлен как в коде подрядчика — скрипт исполняется
9         после разбора HTML и первую отрисовку не блокирует. -->
9<script src="//cdn.callibri.ru/callibri.js" type="text/javascript" charset="utf-8" defer></script>
9<!-- Yandex.Metrika counter (id 110180353) -->
9<script type="text/javascript">
10      (function(m,e,t,r,i,k,a){
11        m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
12        m[i].l=1*new Date();
13        var f=function(){
14          for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
15          k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
16        };
17        if (document.readyState === 'complete') { f(); } else { m.addEventListener('load', f, { once: true }); }
18      })(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=110180353', 'ym');
19      ym(110180353, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", accurateTrackBounce:true, trackLinks:true});
20    </script>
20<link rel="stylesheet" href="/_astro/dark-kitchen-chto-eto.DMcTt_ls.css">
21<style>.crumbs[data-astro-cid-ilhxcym7]{padding-block:var(--space-4);border-bottom:1px solid var(--border);background:var(--bg-page)}.crumbs__list[data-astro-cid-ilhxcym7]{list-style:none;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin:0;padding:0;font-size:var(--text-sm)}.crumbs__item[data-astro-cid-ilhxcym7]{display:inline-flex;align-items:center;gap:var(--space-2)}.crumbs__link[data-astro-cid-ilhxcym7]{color:var(--text-secondary);text-decoration:none;transition:color var(--dur-fast) var(--ease-out)}.crumbs__link[data-astro-cid-ilhxcym7]:hover{color:var(--text-accent)}.crumbs__sep[data-astro-cid-ilhxcym7]{color:var(--text-muted)}.crumbs__current[data-astro-cid-ilhxcym7]{color:var(--text-primary);font-weight:var(--fw-semibold, 600)}
22.card[data-astro-cid-dohjnao5]{background:var(--surface-card);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-lg);transition:transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out)}.card--dark[data-astro-cid-dohjnao5]{background:var(--ink-900);color:var(--text-on-dark);border-color:var(--border-on-dark)}.card--p-sm[data-astro-cid-dohjnao5]{padding:20px}.card--p-md[data-astro-cid-dohjnao5]{padding:28px}.card--p-lg[data-astro-cid-dohjnao5]{padding:36px}.card--e-none[data-astro-cid-dohjnao5]{box-shadow:none}.card--e-sm[data-astro-cid-dohjnao5]{box-shadow:var(--shadow-sm)}.card--e-md[data-astro-cid-dohjnao5]{box-shadow:var(--shadow-md)}.card--e-lg[data-astro-cid-dohjnao5]{box-shadow:var(--shadow-lg)}.card--int[data-astro-cid-dohjnao5]:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
23.acc[data-astro-cid-oqjbs5yv]{border-bottom:1px solid var(--border);padding:var(--space-2) 0}.acc__q[data-astro-cid-oqjbs5yv]{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);cursor:pointer;list-style:none;font-family:var(--font-display);font-weight:var(--fw-bold, 700);font-size:var(--text-lg);color:var(--text-primary);padding:var(--space-4) 0}.acc__q[data-astro-cid-oqjbs5yv]::-webkit-details-marker{display:none}.acc__icon[data-astro-cid-oqjbs5yv]{position:relative;flex:0 0 auto;width:20px;height:20px}.acc__icon[data-astro-cid-oqjbs5yv]:before,.acc__icon[data-astro-cid-oqjbs5yv]:after{content:"";position:absolute;background:var(--accent);border-radius:2px;transition:transform var(--dur-base) var(--ease-inout)}.acc__icon[data-astro-cid-oqjbs5yv]:before{top:9px;left:0;width:20px;height:2px}.acc__icon[data-astro-cid-oqjbs5yv]:after{top:0;left:9px;width:2px;height:20px}.acc[data-astro-cid-oqjbs5yv][open] .acc__icon[data-astro-cid-oqjbs5yv]:after{transform:scaleY(0)}.acc__a[data-astro-cid-oqjbs5yv]{color:var(--text-secondary);font-size:var(--text-md);line-height:var(--lh-normal);padding:0 0 var(--space-4);max-width:70ch}
24</style>
25<link rel="stylesheet" href="/_astro/preimushchestva.BN7Dx_Q5.css"></head> <body> <header class="hdr" data-astro-cid-3ef6ksr2> <div class="container hdr__inner" data-astro-cid-3ef6ksr2> <a href="/" class="hdr__logo" aria-label="СУШИЭРА — на главную" data-astro-cid-3ef6ksr2> <img src="/logo/sushiera-red.png" alt="Франшиза «Суши Эра»" width="78" height="46" data-astro-cid-3ef6ksr2> </a> <nav class="hdr__nav" aria-label="Главное меню" data-astro-cid-3ef6ksr2> <a href="/o-franshize/" class="hdr__link" data-astro-cid-3ef6ksr2>О франшизе</a><a href="/preimushchestva/" class="hdr__link" data-astro-cid-3ef6ksr2>Преимущества</a><a href="/tarify/" class="hdr__link" data-astro-cid-3ef6ksr2>Тарифы</a><a href="/okupaemost/" class="hdr__link" data-astro-cid-3ef6ksr2>Окупаемость</a><a href="/kak-otkryt/" class="hdr__link" data-astro-cid-3ef6ksr2>Как открыть</a><a href="/kontakty/" class="hdr__link" data-astro-cid-3ef6ksr2>Контакты</a> <a href="/karta/" class="hdr__link" data-astro-cid-3ef6ksr2>Карта точек</a> </nav> <div class="hdr__actions" data-astro-cid-3ef6ksr2> <a href="tel:+79937556151" class="hdr__phone" data-astro-cid-3ef6ksr2>+7 993 755-61-51</a> <button class="btn btn--primary btn--sm" type="button" data-lead="quiz"> Получить презентацию </button> </div> <button class="hdr__burger" aria-label="Открыть меню" aria-expanded="false" id="burger" data-astro-cid-3ef6ksr2> <span data-astro-cid-3ef6ksr2></span><span data-astro-cid-3ef6ksr2></span><span data-astro-cid-3ef6ksr2></span> </button> </div> <!-- Мобильная полоса звонка: прямой tel (колл-трекинг) --> <a href="tel:+79937556151" class="container hdr__callbar" aria-label="Позвонить +7 993 755-61-51" data-astro-cid-3ef6ksr2> <svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-3ef6ksr2><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9
251.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" data-astro-cid-3ef6ksr2></path></svg> <span data-astro-cid-3ef6ksr2>+7 993 755-61-51</span> </a> <nav class="hdr__mobile" id="mobileNav" hidden aria-label="Мобильное меню" data-astro-cid-3ef6ksr2> <a href="/o-franshize/" class="hdr__mlink" data-astro-cid-3ef6ksr2>О франшизе</a><a href="/preimushchestva/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Преимущества</a><a href="/tarify/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Тарифы</a><a href="/okupaemost/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Окупаемость</a><a href="/kak-otkryt/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Как открыть</a><a href="/kontakty/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Контакты</a> <a href="/karta/" class="hdr__mlink" data-astro-cid-3ef6ksr2>Карта точек</a> </nav> </header> 
25<script type="module">const n=document.getElementById("burger"),e=document.getElementById("mobileNav");n?.addEventListener("click",()=>{const t=e?.hasAttribute("hidden");t?e?.removeAttribute("hidden"):e?.setAttribute("hidden",""),n.setAttribute("aria-expanded",String(t))});</script>
25  <main id="main">  <nav class="crumbs" aria-label="Хлебные крошки" data-astro-cid-ilhxcym7> <div class="container" data-astro-cid-ilhxcym7> <ol class="crumbs__list" data-astro-cid-ilhxcym7> <li class="crumbs__item" data-astro-cid-ilhxcym7> <a href="/" class="crumbs__link" data-astro-cid-ilhxcym7>Главная</a> <span class="crumbs__sep" aria-hidden="true" data-astro-cid-ilhxcym7>/</span> </li><li class="crumbs__item" data-astro-cid-ilhxcym7> <span class="crumbs__current" aria-current="page" data-astro-cid-ilhxcym7>Преимущества</span>  </li> </ol> </div> </nav> 
25<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Главная","item":"https://franshiza-sushi-era.ru/"},{"@type":"ListItem","position":2,"name":"Преимущества","item":"https://franshiza-sushi-era.ru/preimushchestva/"}]}</script>
25  <section class="section" data-astro-cid-tmtlxmyz> <div class="container" data-astro-cid-tmtlxmyz> <span class="eyebrow " data-astro-cid-n4qxztk5>Преимущества</span>  <h1 data-astro-cid-tmtlxmyz>Почему партнёры выбирают «Суши Эра»</h1> <p class="lead" data-astro-cid-tmtlxmyz>Мы предлагаем работающую систему с поддержкой на каждом этапе.</p> <div class="founders" data-astro-cid-tmtlxmyz> <img src="/images/owners.webp" alt="Никита и Артём Андониевы — основатели франшизы «Суши Эра»" width="900" height="602" loading="lazy" decoding="async" class="founders__img" data-astro-cid-tmtlxmyz> <div class="founders__body" data-astro-cid-tmtlxmyz> <h2 class="founders__title" data-astro-cid-tmtlxmyz>Основатели сети</h2> <p class="founders__intro" data-astro-cid-tmtlxmyz>«Суши Эра» в 2012 году создали братья Андониевы. За 14 лет — от первого суши-бара до 70+ точек по России, собственного производства специй и своего колл-центра.</p> <ul class="founders__people" data-astro-cid-tmtlxmyz> <li data-astro-cid-tmtlxmyz><b data-astro-cid-tmtlxmyz>Никита Андониев</b><span data-astro-cid-tmtlxmyz>Основатель и владелец сети</span></li><li data-astro-cid-tmtlxmyz><b data-astro-cid-tmtlxmyz>Артём Андониев</b><span data-astro-cid-tmtlxmyz>Сооснователь</span></li> </ul> </div> </div> <div class="adv-grid" data-astro-cid-tmtlxmyz> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>14 лет на рынке</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Работаем с 2012 года. Бизнес-модель проверена временем.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>70+ работающих точек</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Сеть действует по всей России. Система бизнеса отлажена.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Поддержка под ключ</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Весь первый год с вами отдел сопровождения и личный наставник: еженедельный разбор показателей.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Собственный колл-центр</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Заказы принимаем мы. Вам нужен только администратор, который передаст заказ курьеру.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Гарантия выкупа точки</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Если за 18 месяцев точка не окупится, выкупим её по рыночной стоимости при бесплатном наставничестве.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Кадровый резерв</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Команда поваров по всей стране. Заболел повар на точке — наш специалист выезжает на помощь.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Своё производство специй</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Экономия 10–30% против рыночных цен и других франшиз за счёт собственного производства.</p> </div> <div class="card card--p-md card--e-sm  card--int" data-astro-cid-dohjnao5> <h3 class="adv__title" data-astro-cid-tmtlxmyz>Тестируем город за свой счёт</h3> <p class="adv__text" data-astro-cid-tmtlxmyz>Спрос в городе проверяем мы и за свой счёт: это часть запуска после договора, отдельного счёта не будет.</p> </div>  </div> <img src="/images/marketing-materialy.webp" alt="Макеты акций и промо-материалов «Суши Эра», которые партнёр получает готовыми" width="1000" height="666" loading="lazy" decoding="async" class="adv-img" data-astro-cid-tmtlxmyz> <p class="img-caption" data-astro-cid-tmtlxmyz>
25Рекламные макеты, меню и промо-материалы готовит управляющая компания — партнёру не нужен свой дизайнер.</p> <h2 data-astro-cid-tmtlxmyz>Сравнение с конкурентами</h2> <div class="table-wrap" data-astro-cid-tmtlxmyz> <table class="ctable" data-astro-cid-tmtlxmyz> <thead data-astro-cid-tmtlxmyz><tr data-astro-cid-tmtlxmyz><th data-astro-cid-tmtlxmyz>Параметр</th><th data-astro-cid-tmtlxmyz>«Суши Эра»</th><th data-astro-cid-tmtlxmyz>Обычно по рынку</th></tr></thead> <tbody data-astro-cid-tmtlxmyz> <tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Опыт на рынке</td><td class="ctable__us" data-astro-cid-tmtlxmyz>14 лет, первая точка с 2012 года</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Сети моложе встречаются часто</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Приём заказов</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Собственный колл-центр</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Обычно на стороне франчайзи</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Если точка не окупится</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Выкуп за 18 месяцев</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Гарантии возврата — редкость</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Кадры</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Кадровый резерв поваров по РФ</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Поиск на стороне франчайзи</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Специи</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Своё производство, экономия 10–30%</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Закуп по рыночным ценам</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Запуск</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Под ключ за 25 дней + наставник на год</td><td class="ctable__them" data-astro-cid-tmtlxmyz>От 4 до 8 недель, обычно без наставника</td></tr> </tbody> </table> </div> <h2 data-astro-cid-tmtlxmyz>Сравнение по деньгам</h2> <div class="table-wrap" data-astro-cid-tmtlxmyz> <table class="ctable" data-astro-cid-tmtlxmyz> <thead data-astro-cid-tmtlxmyz><tr data-astro-cid-tmtlxmyz><th data-astro-cid-tmtlxmyz>Параметр</th><th data-astro-cid-tmtlxmyz>«Суши Эра»</th><th data-astro-cid-tmtlxmyz>По рынку</th></tr></thead> <tbody data-astro-cid-tmtlxmyz> <tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Роялти</td><td class="ctable__us" data-astro-cid-tmtlxmyz>5,5%*</td><td class="ctable__them" data-astro-cid-tmtlxmyz>3,5 – 5%</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Всего регулярных платежей</td><td class="ctable__us" data-astro-cid-tmtlxmyz>5,5% + колл-центр по факту заказов</td><td class="ctable__them" data-astro-cid-tmtlxmyz>до 9% с учётом взносов на маркетинг и сервис</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Паушальный взнос</td><td class="ctable__us" data-astro-cid-tmtlxmyz>от 250 000 ₽</td><td class="ctable__them" data-astro-cid-tmtlxmyz>199 000 – 1 500 000 ₽</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Старт</td><td class="ctable__us" data-astro-cid-tmtlxmyz>от 1 560 350 ₽</td><td class="ctable__them" data-astro-cid-tmtlxmyz>1,2 – 4,5 млн ₽</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Окупаемость</td><td class="ctable__us" data-astro-cid-tmtlxmyz>13–16 мес. по финмодели</td><td class="ctable__them" data-astro-cid-tmtlxmyz>7 – 24 мес.</td></tr><tr data-astro-cid-tmtlxmyz><td class="ctable__p" data-astro-cid-tmtlxmyz>Что входит в роялти</td><td class="ctable__us" data-astro-cid-tmtlxmyz>Актуальное маржинальное меню, портал обучения, сайт с приложением и CRM, отдел сопровождения</td><td class="ctable__them" data-astro-cid-tmtlxmyz>Чаще всего бренд, стандарты и обучение</td></tr> </tbody> </table> </div> <p class="muted" data-astro-cid-tmtlxmyz>* Роялти 5,5% выше медианы рынка: в него входит актуальное маржинальное меню, портал обучения, сайт с мобильным приложением и CRM, отдел сопровождения. Отдельно оплачивается только колл-центр — по факту принятых заказов. У части сетей роялти ниже, зато сверх него берут взносы на маркетинг и клиентский сервис — в сумме до 9% от оборота.</p> <p class="muted" data-astro-cid-tmtlxmyz>Диапазоны по рынку рассчитаны по тринадцати франшизам суши на основе их коммерческих предложений, финансовых моделей и данных официальных сайтов. Данные проверены 28 июля 2026, условия франшиз могут меняться.</p> <h2 data-astro-cid-tmtlxmyz>Маржинальность меню</h2> <p class="lead lead--sm" data-astro-cid-tmtlxmyz>Наценка на позиции — до 460%. Собственное производство специй снижает себестоимость на 10–30%.</p> <div class="table-wrap" data-astro-cid-tmtlxmyz> <table class="mtable" data-astro-cid-tmtlxmyz> <thead data-astro-cid-tmtlxmyz><tr data-astro-cid-tmtlxmyz><th data-astro-cid-tmtlxmyz>Блюдо</th><th data-astro-cid-tmtlxmyz>Себестоимость</th><th data-astro-cid-tmtlxmyz>Розница</th><th data-astro-cid-tmtlxmyz>Наценка</th></tr></thead> <tbody data-astro-cid-tmtlxmyz> <tr data-astro-cid-tmtlxmyz> <td class="mtable__dish" data-astro-cid-tmtlxmyz>Ролл «Калифорния»</td> <td data-astro-cid-tmtlxmyz>87 ₽</td> <td data-astro-cid-tmtlxmyz>339 ₽</td> <td class="mtable__markup" data-astro-cid-tmtlxmyz>+290%</td> </tr><tr data-astro-cid-tmtlxmyz> <td class="mtable__dish" data-astro-cid-tmtlxmyz>Сет «Много не мало»</td> <td data-astro-cid-tmtlxmyz>528 ₽</td> <td data-astro-cid-tmtlxmyz>2 987 ₽</td> <td class="mtable__markup" data-astro-cid-tmtlxmyz>+466%</td> </tr><tr data-astro-cid-tmtlxmyz> <td class="mtable__dish" data-astro-cid-tmtlxmyz>Сет «Грач»</td> <td data-astro-cid-tmtlxmyz>119 ₽</td> <td data-astro-cid-tmtlxmyz>459 ₽</td> <td class="mtable__markup" data-astro-cid-tmtlxmyz>+286%</td> </tr><tr data-astro-cid-tmtlxmyz> <td class="mtable__dish" data-astro-cid-tmtlxmyz>Сет «Пати»</td> <td data-astro-cid-tmtlxmyz>500 ₽</td> <td data-astro-cid-tmtlxmyz>2 809 ₽</td> <td class="mtable__markup" data-astro-cid-tmtlxmyz>+462%</td> </tr><tr data-astro-cid-tmtlxmyz> <td class="mtable__dish" data-astro-cid-tmtlxmyz>Сет «Цыпа»</td> <td data-astro-cid-tmtlxmyz>388 ₽</td> <td data-astro-cid-tmtlxmyz>1 589 ₽</td> <td class="mtable__markup" data-astro-cid-tmtlxmyz>+310%</td> </tr> </tbody> </table> </div> <img src="/images/menu-poligrafiya.webp" alt="Печатное меню сети «Суши Эра» с роллами, пиццей и вок-блюдами" width="1000" height="830" loading="lazy" decoding="async" class="adv-img" data-astro-cid-tmtlxmyz> <p class="lead lead--sm" data-astro-cid-tmtlxmyz>В таблице — несколько позиций из действующего меню сети. Полные технологические карты, себестоимость и розничные цены партнёр получает после подписания договора.</p> <p class="lead lead--sm" data-astro-cid-tmtlxmyz>Как эти условия выглядят на практике, видно по <a href="/keysy/" data-astro-cid-tmtlxmyz>кейсам действующих точек</a> и <a href="/otzyvy/" data-astro-cid-tmtlxmyz>отзывам партнёров</a>.</p> <div class="faq-wrap" data-astro-cid-tmtlxmyz> <h2 data-astro-cid-tmtlxmyz>Частые вопросы</h2> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>За сколько окупается точка?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>По финмодели точка окупается за 13–16 месяцев в зависимости от тарифа: «ЭÐ
25ºÐ¾Ð½Ð¾Ð¼Â» — 13, «Базовый» — 15, «Всё включено» — 16. Если ремонт берёт бригада компании, добавьте месяц. Рассчитать под свои вводные можно в калькуляторе на сайте.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Какое роялти?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Роялти 5,5% от выручки. В него входят актуальное маржинальное меню, портал обучения, сайт с мобильным приложением и CRM, отдел сопровождения — то, что в одиночку обошлось бы дороже. Приём заказов колл-центром оплачивается отдельно, по факту заказов.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Нужен ли опыт в общепите?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Нет. Большинство партнёров открывают первый бизнес. Мы обучаем вас и персонал на действующем филиале и ведём первый год.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Что если точка не окупится?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Если за 18 месяцев нет окупаемости, выкупаем филиал по рыночной стоимости при условии бесплатного наставничества на год.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Есть ли скрытые платежи сверх паушального взноса?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Нет. Полная смета известна после выбора локации и макета помещения. В калькуляторе вы видите все статьи расходов открыто.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Можно ли оформить рассрочку?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Да, внутренняя рассрочка до 6 месяцев доступна начиная с тарифа «Базовый», рассматривается индивидуально.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Сколько сотрудников нужно?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>На точке нужен администратор и кухня. Приём заказов берёт на себя наш колл-центр, при нехватке повара помогает кадровый резерв.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Кто помогает с поиском помещения и ремонтом?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Подбираем помещение и ведём переговоры по аренде, делаем 3D-макет. Ремонт при желании берёт наша бригада с опытом 50+ точек.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Как защищены мои интересы юридически?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Договор коммерческой концессии регистрируется в Роспатенте на 3 года. Товарный знак «СУШИЭРА» зарегистрирован в Роспатенте (№846731, приоритет от 26.07.2021), вы работаете под защитой закона РФ.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Закрепляется ли за мной территория?</sp
25an> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Да. По договору коммерческой концессии за вами закрепляется эксклюзивная территория: другой франчайзи не откроется рядом и не будет забирать ваших клиентов.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Какие требования к помещению?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Зависит от тарифа: тёмная кухня от 40 м² для доставки, суши-бар 60–70 м², кафе от 150 м². Нужны подходящие коммуникации и трафик. Помещение подбираем вместе и делаем 3D-макет.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Можно ли перевести моё кафе под бренд (ребрендинг)?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Да. Если у вас уже есть кафе или точка общепита, поможем провести ребрендинг и настроить процессы под стандарты «Суши Эра» в короткий срок.</p></div> </details> <details class="acc" data-astro-cid-oqjbs5yv> <summary class="acc__q" data-astro-cid-oqjbs5yv> <span data-astro-cid-oqjbs5yv>Из чего складывается паушальный взнос?</span> <span class="acc__icon" aria-hidden="true" data-astro-cid-oqjbs5yv></span> </summary> <div class="acc__a" data-astro-cid-oqjbs5yv><p data-astro-cid-tmtlxmyz>Это право работать под брендом и доступ к системе: рецептура и технико-технологические карты (ТТК), поставщики, CRM с приложением, обучение, маркетинг-материалы, колл-центр и сопровождение. Полная смета открытия — отдельно и прозрачно.</p></div> </details>  </div> <div class="cta-row" data-astro-cid-tmtlxmyz> <button class="btn btn--primary btn--lg" type="button" data-lead="quiz"> Получить презентацию </button> <a class="btn btn--ghost btn--lg" href="/tarify/"> Посмотреть тарифы </a> </div> </div> </section>   </main> <footer class="ftr" data-astro-cid-sz7xmlte> <div class="container ftr__cta" data-astro-cid-sz7xmlte> <div data-astro-cid-sz7xmlte> <h2 class="ftr__title" data-astro-cid-sz7xmlte>Готовы открыть точку «Суши Эра»?</h2> <p class="ftr__sub" data-astro-cid-sz7xmlte>Оставьте заявку — перезвоним в течение 30 минут и пришлём презентацию франшизы.</p> </div>  <button class="btn btn--light btn--lg" type="button" data-lead="quiz"> Оставить заявку </button> </div> <div class="container ftr__grid" data-astro-cid-sz7xmlte> <div class="ftr__col" data-astro-cid-sz7xmlte> <img src="/logo/sushiera-white.png" alt="Франшиза «Суши Эра»" width="83" height="52" class="ftr__logo" data-astro-cid-sz7xmlte> <p class="ftr__muted" data-astro-cid-sz7xmlte>Франшиза доставки японской кухни. 14 лет на рынке, 70+ точек.</p> </div> <nav class="ftr__col" aria-label="Разделы сайта" data-astro-cid-sz7xmlte> <h3 class="ftr__h" data-astro-cid-sz7xmlte>Разделы</h3> <a href="/o-franshize/" class="ftr__link" data-astro-cid-sz7xmlte>О франшизе</a><a href="/preimushchestva/" class="ftr__link" data-astro-cid-sz7xmlte>Преимущества</a><a href="/tarify/" class="ftr__link" data-astro-cid-sz7xmlte>Тарифы</a><a href="/okupaemost/" class="ftr__link" data-astro-cid-sz7xmlte>Окупаемость</a><a href="/kak-otkryt/" class="ftr__link" data-astro-cid-sz7xmlte>Как открыть</a><a href="/kontakty/" class="ftr__link" data-astro-cid-sz7xmlte>Контакты</a> </nav> <nav class="ftr__col" aria-label="Дополнительно" data-astro-cid-sz7xmlte> <h3 class="ftr__h" data-astro-cid-sz7xmlte>Полезное</h3> <a href="/kalkulyator/" class="ftr__link" data-astro-cid-sz7xmlte>Калькулятор окупаемости</a><a href="/keysy/" class="ftr__link" data-astro-cid-sz7xmlte>Кейсы франчайзи</a><a href="/faq/" class="ftr__link" data-astro-cid-sz7xmlte>Вопросы и ответы</a><a href="/otzyvy/" class="ftr__link" data-astro-cid-sz7xmlte>Отзывы партнёров</a><a href="/franshiza/" class="ftr__link" data-astro-cid-sz7xmlte>Франшиза по городам</a><a href="/blog/" class="ftr__link" data-astro-cid-sz7xmlte>Блог</a> </nav> <div class="ftr__col" data-astro-cid-sz7xmlte> <h3 class="ftr__h" data-astro-cid-sz7xmlte>Контакты</h3> <a href="tel:+79937556151" class="ftr__link ftr__link--accent" data-astro-cid-sz7xmlte>+7 993 755-61-51</a> <a href="mailto:[email protected]" class="ftr__link" data-astro-cid-sz7xmlte>[email protected]</a> <a href="/privacy/" class="ftr__link" data-astro-cid-sz7xmlte>Политика конфиденциальности</a> </div> </div> <div class="container ftr__bottom" data-astro-cid-sz7xmlte> <span data-astro-cid-sz7xmlte>© 2026 «Суши Эра». Все права защищены.<
25/span> <span data-astro-cid-sz7xmlte>ИП Андониев Никита Евгеньевич, ОГРНИП 320732500017346</span> </div> </footer>   <dialog id="leadDialog" class="ld" aria-labelledby="ldTitle" data-astro-cid-r2klz6nk> <div class="ld__inner" data-astro-cid-r2klz6nk> <button type="button" class="ld__close" data-ld-close aria-label="Закрыть окно" data-astro-cid-r2klz6nk> <svg width="20" height="20" viewBox="0 0 20 20" aria-hidden="true" focusable="false" data-astro-cid-r2klz6nk> <path d="M5 5l10 10M15 5L5 15" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" data-astro-cid-r2klz6nk></path> </svg> </button>  <div data-ld-step="intro" hidden data-astro-cid-r2klz6nk> <img class="ld__cover" src="/images/quiz-owners.webp" alt="Никита и Артём Андониевы — основатели франшизы «Суши Эра»" width="540" height="572" loading="lazy" decoding="async" data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--intro" id="ldIntroTitle" tabindex="-1" data-astro-cid-r2klz6nk>Узнайте, за сколько окупится ваша точка «Суши Эра»</h2> <p class="ld__sub" data-astro-cid-r2klz6nk>Ответьте на 5 вопросов — подберём подходящий тариф и пришлём презентацию франшизы. Займёт минуту.</p> <ul class="ld__facts" data-astro-cid-r2klz6nk> <li class="ld__fact" data-astro-cid-r2klz6nk>14 лет сети</li><li class="ld__fact" data-astro-cid-r2klz6nk>70+ точек</li><li class="ld__fact" data-astro-cid-r2klz6nk>окупаемость от 13 месяцев</li> </ul> <button class="btn btn--primary btn--md btn--full" type="button" data-quiz-start> Начать </button> <p class="ld__note" data-astro-cid-r2klz6nk>Телефон спросим в самом конце, после вопросов.</p> </div>  <div class="ld__progress" data-quiz-progress hidden data-astro-cid-r2klz6nk> <p class="ld__progress-label" data-astro-cid-r2klz6nk> <span data-quiz-counter data-astro-cid-r2klz6nk></span> <span class="ld__progress-pct" data-quiz-pct data-astro-cid-r2klz6nk></span> </p> <div class="ld__progress-track" data-astro-cid-r2klz6nk><span class="ld__progress-bar" data-quiz-bar data-astro-cid-r2klz6nk></span></div> </div> <div data-ld-step="quiz" hidden data-astro-cid-r2klz6nk> <div class="ld__qstep" data-quiz-step="0" data-quiz-kind="choice" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--q" id="ldQTitle0" tabindex="-1" data-astro-cid-r2klz6nk>Какой бюджет готовы вложить в запуск?</h2> <p class="ld__sub" data-astro-cid-r2klz6nk>Сумма ориентировочная — от неё зависит формат точки.</p> <div class="ld__opts" data-astro-cid-r2klz6nk> <button type="button" class="ld__opt" data-quiz-pick data-quiz-value="До 2 млн ₽" data-quiz-tariff="Эконом" aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>До 2 млн ₽</span> <span class="ld__opt-note" data-astro-cid-r2klz6nk>формат «Эконом»</span> </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="От 2 до 3 млн ₽" data-quiz-tariff="Базовый" aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>От 2 до 3 млн ₽</span> <span class="ld__opt-note" data-astro-cid-r2klz6nk>формат «Базовый»</span> </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="От 3 млн ₽" data-quiz-tariff="Всё включено" aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>От 3 млн ₽</span> <span class="ld__opt-note" data-astro-cid-r2klz6nk>формат «Всё включено»</span> </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Пока не определился, нужна рассрочка" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Пока не определился, нужна рассрочка</span>  </span> </button> </div>  </div><div class="ld__qstep" data-quiz-step="1" data-quiz-kind="choice" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--q" id="ldQTitle1" tabindex="-1" data-astro-cid-r2klz6nk>Есть ли у вас опыт в бизнесе или общепите?</h2>  <div class="ld__opts" data-astro-cid-r2klz6nk> <button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Нет опыта, хочу первый бизнес" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Нет опыта, хочу первый бизнес</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Есть бизнес в другой сфере" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Есть бизнес в другой сфере</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Уже работаю в общепите или доставке еды" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Уже работаю в общепите или доставке еды</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Хочу перевести своё кафе под бренд" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Хочу перевести своё кафе под бренд</span>  </span> </button> </div>  </div><div class="ld__qstep" data-quiz-step="2" data-quiz-kind="city" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--q" id="ldQTitle2" tabindex="-1" data-astro-cid-r2klz6nk>В каком городе планируете открыться?</h2> <p class="ld__sub" data-astro-cid-r2klz6nk>Скажем, свободен ли город. Тест спроса и подбор локации берём на себя на этапе запуска.</p>  <label class="ld__field" data-astro-cid-r2klz6nk> <span class="ld__label" data-astro-cid-r2klz6nk>Город</span> <input class="ld__input" type="text" data-quiz-city maxlength="60" autocomplete="address-level2" placeholder="Казань" data-astro-cid-r2klz6nk> </label> </div><div class="ld__qstep" data-quiz-step="3" data-quiz-kind="choice" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--q" id="ldQTitle3" tabindex="-1" data-astro-cid-r2klz6nk>Когда планируете запуск?</h2>  <div class="ld__opts" data-astro-cid-r2klz6nk> <button type="button" class="ld__opt" data-quiz-pick data-quiz-value="В ближайший месяц" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>В ближайший месяц</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Через один-три месяца" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>
25Через один-три месяца</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Через три-шесть месяцев" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Через три-шесть месяцев</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Пока просто изучаю варианты" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Пока просто изучаю варианты</span>  </span> </button> </div>  </div><div class="ld__qstep" data-quiz-step="4" data-quiz-kind="choice" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title ld__title--q" id="ldQTitle4" tabindex="-1" data-astro-cid-r2klz6nk>Что для вас важнее всего во франшизе?</h2>  <div class="ld__opts" data-astro-cid-r2klz6nk> <button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Поддержка «под ключ» на каждом этапе" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Поддержка «под ключ» на каждом этапе</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Быстрая окупаемость и прибыль" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Быстрая окупаемость и прибыль</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Известный бренд и готовое меню" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Известный бренд и готовое меню</span>  </span> </button><button type="button" class="ld__opt" data-quiz-pick data-quiz-value="Минимальные вложения на старте" data-quiz-tariff aria-pressed="false" data-astro-cid-r2klz6nk> <span class="ld__opt-mark" aria-hidden="true" data-astro-cid-r2klz6nk></span> <span class="ld__opt-text" data-astro-cid-r2klz6nk> <span class="ld__opt-label" data-astro-cid-r2klz6nk>Минимальные вложения на старте</span>  </span> </button> </div>  </div> <div class="ld__qnav" data-astro-cid-r2klz6nk> <button type="button" class="ld__back" data-quiz-back hidden data-astro-cid-r2klz6nk>&#8592; Назад</button> <button class="btn btn--primary btn--md" id="ldQuizNext" type="button" data-quiz-next> Далее </button> </div> </div> <div data-ld-step="form" data-astro-cid-r2klz6nk> <button type="button" class="ld__back ld__back--form" data-quiz-formback hidden data-astro-cid-r2klz6nk>&#8592; Назад к вопросам</button>  <h2 id="ldTitle" class="ld__title" data-astro-cid-r2klz6nk><span data-ld-title-head data-astro-cid-r2klz6nk></span><span class="ld__nowrap" data-ld-title-token data-astro-cid-r2klz6nk></span><span data-ld-title-tail data-astro-cid-r2klz6nk></span></h2> <p class="ld__sub" data-ld-sub data-astro-cid-r2klz6nk></p> <form class="ld__form" novalidate data-astro-cid-r2klz6nk> <label class="ld__field" data-astro-cid-r2klz6nk> <span class="ld__label" data-astro-cid-r2klz6nk>Ваше имя</span> <input class="ld__input" type="text" name="name" maxlength="60" autocomplete="name" placeholder="Александр" required data-astro-cid-r2klz6nk> </label> <label class="ld__field" data-astro-cid-r2klz6nk> <span class="ld__label" data-astro-cid-r2klz6nk>Телефон</span> <input class="ld__input" type="tel" name="phone" maxlength="20" autocomplete="tel" inputmode="tel" placeholder="+7 999 123-45-67" required data-astro-cid-r2klz6nk> </label>  <label class="ld__field" data-ld-field="city" hidden data-astro-cid-r2klz6nk> <span class="ld__label" data-astro-cid-r2klz6nk>Город</span> <input class="ld__input" type="text" name="city" maxlength="60" autocomplete="address-level2" placeholder="Казань" data-astro-cid-r2klz6nk> </label> <label class="ld__field" data-ld-field="comment" hidden data-astro-cid-r2klz6nk> <span class="ld__label" data-ld-comment-label data-astro-cid-r2klz6nk>Комментарий</span> <textarea class="ld__input ld__textarea" name="comment" maxlength="500" rows="3" data-astro-cid-r2klz6nk></textarea> </label> <input type="hidden" name="tariff" data-astro-cid-r2klz6nk> <input type="hidden" name="page" data-astro-cid-r2klz6nk> <input type="hidden" name="form" data-astro-cid-r2klz6nk> <!-- Ловушка для ботов: поле скрыто от людей, заполненное — заявка отбрасывается на сервере.
26             🔴 Имя поля НЕ должно читаться браузером Ð
26ºÐ°Ðº адресное. Поле называлось `company`,
27             и Chrome заполнял его организацией из адресного профиля вместе с именем и телефоном:
28             живая заявка попадала в ловушку и умирала молча. `autocomplete="off"` этого не лечит —
29             для адресных полей Chrome его игнорирует. Уход за экран (left:-9999px) полем
30             «невидимым» браузер тоже не считает, в отличие от display:none. Найдено живьём
31             18.09.2026 на форме проверки города. Имя `ld_site` автозаполнению ни о чём не говорит. --> <div class="ld__hp" aria-hidden="true" data-astro-cid-r2klz6nk> <input type="text" name="ld_site" tabindex="-1" autocomplete="off" data-astro-cid-r2klz6nk> </div> <label class="ld__consent" data-astro-cid-r2klz6nk> <input type="checkbox" name="consent" required data-astro-cid-r2klz6nk> <span data-astro-cid-r2klz6nk>Согласен на обработку персональных данных в соответствии с <a href="/privacy/" target="_blank" rel="noopener" data-astro-cid-r2klz6nk>политикой</a>.</span> </label> <p class="ld__error" data-ld-error hidden data-astro-cid-r2klz6nk></p> <button class="btn btn--primary btn--md btn--full" id="ldSubmit" type="submit"> Отправить заявку </button> </form> </div> <div data-ld-step="done" hidden data-astro-cid-r2klz6nk> <h2 class="ld__title" data-ld-done-title data-astro-cid-r2klz6nk>Заявка принята</h2> <p class="ld__sub" data-ld-done-text data-astro-cid-r2klz6nk></p> <button class="btn btn--ghost btn--md btn--full" type="button" data-ld-close> Закрыть </button> </div> </div> </dialog> 
31<script>(function(){const ENDPOINT = "/api/lead.php";
32const METRIKA_ID = 110180353;
33const FALLBACK_PHONE = "+7 993 755-61-51";
34const FORMS = {"quiz":{"title":"Готово! Куда прислать презентацию?","sub":"Оставьте имя и телефон — перезвоним в течение 30 минут и пришлём презентацию франшизы. Финмодель под ваш город разберём на встрече.","submit":"Получить презентацию","doneTitle":"Заявка принята","doneText":"Перезвоним в течение 30 минут в рабочее время и пришлём презентацию франшизы.","fields":[],"mode":"quiz"},"tariff":{"title":"Заявка на тариф «{tariff}»","sub":"Оставьте имя и телефон — перезвоним в течение 30 минут, ответим на вопросы и пришлём презентацию.","submit":"Отправить заявку","doneTitle":"Заявка принята","doneText":"Перезвоним в течение 30 минут в рабочее время и пришлём презентацию по выбранному тарифу.","fields":[]},"city":{"title":"Проверить город {city}","sub":"Проверим, свободен ли город, посчитаем потенциал и перезвоним с ответом. Проверка бесплатная и ни к чему не обязывает.","submit":"Проверить город","doneTitle":"Заявка принята","doneText":"Проверим свободен ли город и перезвоним в течение 30 минут в рабочее время.","fields":["city"]},"franchisee":{"title":"Контакты действующих франчайзи","sub":"Дадим контакты владельцев работающих точек — спросите их об окупаемости и поддержке без нашего участия.","submit":"Запросить контакты","doneTitle":"Заявка принята","doneText":"Перезвоним в течение 30 минут в рабочее время и передадим контакты франчайзи, готовых пообщаться.","fields":["comment"],"commentLabel":"О чём хотите спросить (необязательно)","commentPlaceholder":"Например: окупаемость, поставки, помощь на старте"},"calc":{"title":"Разобрать расчёт с менеджером","sub":"Менеджер позвонит, уже видя ваши цифры: тариф, средний чек и число заказов из калькулятора.","submit":"Обсудить расчёт","doneTitle":"Заявка принята","doneText":"Перезвоним в течение 30 минут в рабочее время и разберём расчёт по вашим цифрам.","fields":[]},"excursion":{"title":"Бизнес-экскурсия на точку","sub":"Покажем работающую точку изнутри: кухня, смена, цифры. Договоримся о дате по телефону.","submit":"Записаться на экскурсию","doneTitle":"Заявка принята","doneText":"Перезвоним в течение 30 минут в рабочее время и согласуем дату и город экскурсии.","fields":["city"]},"contact":{"title":"Задать вопрос","sub":"Оставьте имя и телефон — перезвоним в течение 30 минут и ответим на любой вопрос о франшизе.","submit":"Отправить вопрос","doneTitle":"Вопрос принят","doneText":"Перезвоним в течение 30 минут в рабочее время и ответим на ваш вопрос.","fields":["comment"],"commentLabel":"Ваш вопрос (необязательно)","commentPlaceholder":"Что хотите узнать о франшизе?"}};
35const TRIGGERS = [{"attr":"data-lead","form":null},{"attr":"data-lead-form","form":"tariff"}];
36const DEFAULT_FORM = "tariff";
37const STEPS = [{"id":"budget","q":"Какой бюджет готовы вложить в запуск?","hint":"Сумма ориентировочная — от неё зависит формат точки.","type":"choice","options":[{"label":"До 2 млн ₽","note":"формат «Эконом»","tariff":"Эконом"},{"label":"От 2 до 3 млн ₽","note":"формат «Базовый»","tariff":"Базовый"},{"label":"От 3 млн ₽","note":"формат «Всё включено»","tariff":"В
37сё включено"},{"label":"Пока не определился, нужна рассрочка"}]},{"id":"experience","q":"Есть ли у вас опыт в бизнесе или общепите?","type":"choice","options":[{"label":"Нет опыта, хочу первый бизнес"},{"label":"Есть бизнес в другой сфере"},{"label":"Уже работаю в общепите или доставке еды"},{"label":"Хочу перевести своё кафе под бренд"}]},{"id":"city","q":"В каком городе планируете открыться?","hint":"Скажем, свободен ли город. Тест спроса и подбор локации берём на себя на этапе запуска.","type":"city","placeholder":"Казань"},{"id":"timing","q":"Когда планируете запуск?","type":"choice","options":[{"label":"В ближайший месяц"},{"label":"Через один-три месяца"},{"label":"Через три-шесть месяцев"},{"label":"Пока просто изучаю варианты"}]},{"id":"value","q":"Что для вас важнее всего во франшизе?","type":"choice","options":[{"label":"Поддержка «под ключ» на каждом этапе"},{"label":"Быстрая окупаемость и прибыль"},{"label":"Известный бренд и готовое меню"},{"label":"Минимальные вложения на старте"}]}];
38const DRAFT_KEY = "se_quiz_draft_v1";
39
40  (function () {
41    // ВАЖНО: узлы диалога не кэшируем и держим его вне <main>.
42    //
43    // Коллтрекинг Callibri работает в режиме «искать номер по всей странице»: он берёт
44    // textContent элемента, выбрасывает всё кроме цифр и ищет там номер. На /tarify/
45    // склейка цен («250 000», «1 560 350», «2 346 850» …) даёт 243 цифры подряд, в которых
46    // его матчер находит ложный телефон — и переписывает `main.innerHTML` целиком.
47    // Все 252 узла внутри пересоздаются, прежние ссылки указывают на отсоединённые копии,
48    // и `showModal()` падает с «The element is not in a Document» (сломано 26.08.2026).
49    //
50    // Отсюда две меры. Первая — переносим <dialog> в <body>: на вид это не влияет
51    // (showModal рисует в top layer, место в DOM роли не играет), но выводит диалог
52    // из-под любого стороннего скрипта, который переписывает контент страницы.
53    // Вторая — ищем внутренние узлы в момент обращения, а обработчики вешаем на document.
54    // Тогда даже пересоздание разметки ничего не ломает.
55    var host = document.getElementById('leadDialog');
56    if (!host) return;
57    if (host.parentElement !== document.body) document.body.appendChild(host);
58
59    var dialog = function () { return document.getElementById('leadDialog'); };
60    var q = function (sel) { var d = dialog(); return d && d.querySelector(sel); };
61    var form = function () { return q('.ld__form'); };
62
63    var digits = function (v) { return (v || '').replace(/\D/g, ''); };
64
65    // Источник визита. Человек приходит по ссылке с utm или из поиска на одну страницу, а заявку
66    // оставляет на другой: без запоминания в заявку уходили бы пустые метки и адрес нашего же
67    // сайта вместо реферера, и лид в CRM терял источник (Директ, SEO).
68    // Запоминаем последний заход «не напрямую» — со ссылкой-меткой или с внешнего сайта —
69    // на 30 дней. Прямой заход (без меток и реферера) сохранённое не затирает.
70    var TOUCH_KEY = 'se_touch';
71    var TOUCH_TTL = 30 * 86400000;
72    var hasMarks = function (s) { return /[?&](utm_[a-z]+|yclid|ymclid|gclid)=/i.test(s || ''); };
73    var hostOf = function (u) {
74      try { return new URL(u).hostname.replace(/^www\./, ''); } catch (err) { return ''; }
75    };
76    var externalRef = function () {
77      var h = hostOf(document.referrer);
78      return h && h !== location.hostname.replace(/^www\./, '') ? document.referrer.slice(0, 300) : '';
79    };
80    var readTouch = function () {
81      try {
82        var o = JSON.parse(localStorage.getItem(TOUCH_KEY) || 'null');
83        if (o && o.t && Date.now() - o.t < TOUCH_TTL) return o;
84      } catch (err) { /* приватный режим: работаем без запоминания */ }
85      return null;
86    };
87    try {
88      var marks0 = hasMarks(location.search) ? location.search.slice(0, 500) : '';
89      var ref0 = externalRef();
90      if (marks0 || ref0) {
91        localStorage.setItem(TOUCH_KEY, JSON.stringify({ q: marks0, ref: ref0, t: Date.now() }));
92      }
93    } catch (err) { /* не критично */ }
94    // В заявку идут метки и реферер того же захода: текущая страница, если на ней есть
95    // что-то внешнее, иначе сохранённый заход.
96    var touchForLead = function () {
97      var q = hasMarks(location.search) ? location.search : '';
98      var ref = externalRef();
99      if (q || ref) return { query: q, referrer: ref };
100      var o = readTouch();
101      return { query: o ? o.q : '', referrer: o ? o.ref : '' };
102    };
103
104    // ClientID Метрики. Берём у счётчика, а не из cookie _ym_uid: cookie бывает заблокирована
105    // или пуста, а getClientID отдаёт то же значение, по которому Метрика ведёт визит.
106    // Ответ всегда приходит: по таймауту или при сбое вернётся пустая строка.
107    var getClientId = function () {
108      return new Promise(function (resolve) {
109        var done = false;
110        var finish = function (v) {
111          if (done) return;
112          done = true;
113          resolve(v ? String(v) : '');
114        };
115        setTimeout(function () { finish(''); }, 1500);
116        try {
117          if (window.ym) window.ym(METRIKA_ID, 'getClientID', finish);
118          else finish('');
119        } catch (err) { finish(''); }
120      });
121    };
122
123    // Состояние текущего открытия. Хранится здесь, а не в DOM: openedAt нужен серверу
124    // как отметка «когда форму увидели», из неё считается маркер «заполнено за N секунд».
125    var state = { form: DEFAULT_FORM, tariff: '', city: '', answers: [], openedAt: 0, title: '' };
126
127    var preset = function (name) { return FORMS[name] || FORMS[DEFAULT_FORM]; };
128
129    // --- Квиз ---------------------------------------------------------------
130    // pos — номер текущего шага. Диапазон [0 … order.length]: значение, равное
131    // длине списка, означает «вопросы кончились, показываем контакты». Экран
132    // контактов считается последним шагом квиза и в прогрессе, и в навигации.
133    // fromTrigger — город пришёл из data-lead-city нажатой кнопки, а не из ответа
134    // в самом квизе. Различать обязательно: шаг «город» пропускается только в первом
135    // случае. Иначе человек, назвавший город внутри квиза, при возврате к черновику
136    // терял этот шаг и больше не мог свой ответ ни увидеть, ни исправить.
137    var QUIZ = { active: false, order: [], pos: 0, ans: {}, fromTrigger: false };
138
139    var goal = function (name, params) {
140      // Цели заводятся руками в кабинете Метрики. Пока их там нет, вызов просто
141      // ничего не делает — ошибки он не даёт и заявку не ломает.
142      if (window.ym) window.ym(METRIKA_ID, 'reachGoal', name, params || {});
143    };
144
145    // Черновик в sessionStorage: человек закрыл окно Ð
145½Ð° третьем вопросе и вернулся —
146    // начинать заново он не станет. Хранилище может бросать исключение в приватном
147    // режиме Safari, поэтому все три операции обёрнуты: без черновика квиз работает.
148    var saveDraft = function () {
149      try {
150        if (QUIZ.pos < 0) { return; }
151        var at = QUIZ.pos >= QUIZ.order.length ? '__form' : STEPS[QUIZ.order[QUIZ.pos]].id;
152        sessionStorage.setItem(DRAFT_KEY, JSON.stringify({
153          at: at, ans: QUIZ.ans, city: state.city, tariff: state.tariff, ts: Date.now()
154        }));
155      } catch (err) { /* нет хранилища — просто без черновика */ }
156    };
157    var loadDraft = function () {
158      try { return JSON.parse(sessionStorage.getItem(DRAFT_KEY) || 'null'); }
159      catch (err) { return null; }
160    };
161    var dropDraft = function () {
162      try { sessionStorage.removeItem(DRAFT_KEY); } catch (err) { /* см. выше */ }
163    };
164
165    var stepEl = function (i) { return q('[data-quiz-step="' + i + '"]'); };
166
167    // Шаг «город» выпадает, если город уже известен из data-lead-city: спрашивать
168    // второй раз о том, что человек только что нажал, — трение на ровном месте.
169    var buildOrder = function () {
170      var order = [];
171      for (var i = 0; i < STEPS.length; i++) {
172        if (STEPS[i].type === 'city' && QUIZ.fromTrigger && state.city) continue;
173        order.push(i);
174      }
175      return order;
176    };
177
178    var collectAnswers = function () {
179      var out = [];
180      for (var i = 0; i < STEPS.length; i++) {
181        var a = QUIZ.ans[STEPS[i].id];
182        if (a) out.push({ q: STEPS[i].q, a: a });
183      }
184      return out;
185    };
186
187    var renderProgress = function () {
188      var total = QUIZ.order.length + 1;
189      var human = Math.min(QUIZ.pos + 1, total);
190      var percent = Math.round((human / total) * 100);
191      var counter = q('[data-quiz-counter]');
192      var pct = q('[data-quiz-pct]');
193      var bar = q('[data-quiz-bar]');
194      if (counter) counter.textContent = 'Шаг ' + human + ' из ' + total;
195      if (pct) pct.textContent = percent + '%';
196      if (bar) bar.style.width = percent + '%';
197    };
198
199    // Переход на экран контактов. Город и тариф, собранные вопросами, кладутся
200    // в скрытые поля формы — дальше заявка уходит обычным путём.
201    var enterForm = function (silent) {
202      var f = form(), d = dialog();
203      if (!f) return;
204      state.answers = collectAnswers();
205      f.elements.city.value = state.city;
206      f.elements.tariff.value = state.tariff;
207      if (d) d.setAttribute('aria-labelledby', 'ldTitle');
208      if (!silent) goal('quiz_done', { gorod: state.city || '', tarif: state.tariff || '' });
209      if (window.matchMedia('(min-width: 768px)').matches) f.elements.name.focus();
210    };
211
212    var goto = function (pos, opts) {
213      opts = opts || {};
214      // -1 — вступительный экран. Он не шаг: в счётчике не участвует и прогресса
215      // на нём нет, поэтому нижняя граница именно -1, а не 0.
216      QUIZ.pos = Math.max(-1, Math.min(pos, QUIZ.order.length));
217      var onIntro = QUIZ.pos < 0;
218      var onForm = QUIZ.pos >= QUIZ.order.length;
219      var d = dialog();
220
221      for (var i = 0; i < STEPS.length; i++) {
222        var node = stepEl(i);
223        if (node) node.hidden = true;
224      }
225      q('[data-ld-step="intro"]').hidden = !onIntro;
226      q('[data-ld-step="quiz"]').hidden = onIntro || onForm;
227      q('[data-ld-step="form"]').hidden = !onForm;
228      q('[data-ld-step="done"]').hidden = true;
229      var progress = q('[data-quiz-progress]');
230      if (progress) progress.hidden = onIntro;
231      var formBack = q('[data-quiz-formback]');
232      if (formBack) formBack.hidden = !onForm;
233
234      if (onIntro) {
235        if (d) d.setAttribute('aria-labelledby', 'ldIntroTitle');
236        var intro = q('#ldIntroTitle');
237        if (intro) intro.focus();
238        return;
239      }
240
241      renderProgress();
242      saveDraft();
243
244      if (onForm) { enterForm(opts.silent); return; }
245
246      var idx = QUIZ.order[QUIZ.pos];
247      var step = STEPS[idx];
248      var current = stepEl(idx);
249      if (current) current.hidden = false;
250      if (d) d.setAttribute('aria-labelledby', 'ldQTitle' + idx);
251
252      // С первого вопроса «Назад» возвращает на вступительный экран, поэтому
253      // кнопка видна всегда: скрывать её теперь не от чего.
254      var back = q('[data-quiz-back]');
255      if (back) back.hidden = false;
256
257      // У вариантов ответа кнопки «Далее» нет: выбор сам ведёт дальше. Она нужна
258      // только на шаге с городом, и там же меняет подпись, если поле пустое —
259      // человек должен видеть, что город можно и не называть.
260      var next = q('[data-quiz-next]');
261      var cityInput = current ? current.querySelector('[data-quiz-city]') : null;
262      if (next) {
263        next.hidden = step.type !== 'city';
264        if (step.type === 'city') {
265          next.textContent = (cityInput && cityInput.value.trim()) ? 'Далее' : 'Пропустить';
266        }
267      }
268      // На первом шаге с вариантами обе кнопки скрыты — прячем и саму строку,
269      // иначе под вариантами висит её отступ.
270      var nav = q('.ld__qnav');
271      if (nav) nav.hidden = !!(back && back.hidden) && !!(next && next.hidden);
272
273      if (step.type === 'choice' && current) {
274        var chosen = QUIZ.ans[step.id] || '';
275        var opts2 = current.querySelectorAll('[data-quiz-pick]');
276        for (var k = 0; k < opts2.length; k++) {
277          opts2[k].setAttribute('aria-pressed', opts2[k].getAttribute('data-quiz-value') === chosen ? 'true' : 'false');
278        }
279      }
280      if (cityInput) {
281        cityInput.value = state.city || '';
282        if (window.matchMedia('(min-width: 768px)').matches) cityInput.focus();
283      } else {
284        var head = q('#ldQTitle' + idx);
285        if (head) head.focus();
286      }
287    };
288
289    // Уход с шага «город»: пустое поле разрешено и означает «город пока не знаю».
290    var leaveCityStep = function () {
291      var idx = QUIZ.order[QUIZ.pos];
292      var step = STEPS[idx];
293      if (step && step.type === 'city') {
294        var input = q('[data-quiz-city]');
295        state.city = input ? input.value.trim() : '';
296      }
297      goal('quiz_step', { shag: QUIZ.pos + 1, vopros: step ? step.id : '' });
298      goto(QUIZ.pos + 1);
299    };
300
301    var showError = function (msg) {
302      var errBox = q('[data-ld-error]');
303      if (!errBox) return;
304      errBox.textContent = msg;
305      errBox.hidden = false;
306    };
307    var clearError = function () {
308      var errBox = q('[data-ld-error]');
309      if (!errBox) return;
310      errBox.hidden = true;
311      errBox.textContent = '';
312    };
313
314    // Заголовок: шаблон вида «Заявка на тариф «{tariff}»» разбирается на три куска.
315    // Кавычки вокруг токена уезжают в неразрывный span вместе с подставленным словом.
316    var fillTitle = function (tpl, vals) {
317      var head = tpl, token = '', tail = '';
318      var m = tpl.match(/^([\s\S]*?)(«?\{(tariff|city)\}»?)([\s\S]*)$/);
319      if (m) {
320        head = m[1];
321        tail = m[4];
322        var value = vals[m[3]] || '';
323        token = value ? m[2].replace('{' + m[3] + '}', value) : '';
324        // Значения нет — убираем и висящий предлог: «Проверить город » выглядит браком.
325        if (!value) head = head.replace(/\s+$/, '');
326      }
327      var h = q('[data-ld-title-head]'), t = q('[data-ld-title-token]'), a = q('[data-ld-title-tail]');
328      if (h) h.textContent = head;
329      if (t) t.textContent = token;
330      if (a) a.textContent = tail;
331      return (head + token + tail).trim();
332    };
333
334    var open = function (opts) {
335      var d = dialog(), f = form();
336      if (!d || !f) return;
337      opts = opts || {};
338
339      var name = String(opts.form || '').toLowerCase();
340      if (!FORMS[name]) name = DEFAULT_FORM;
341      var p = preset(name);
342
343      state.form = name;
344      state.tariff = opts.tariff || '';
345      state.city = opts.city || '';
346      state.answers = (opts.answers && opts.answers.length) ? opts.answers : [];
347      state.openedAt = Date.now();
348
349      clearError();
350      q('[data-ld-step="form"]').hidden = false;
351      q('[data-ld-step="done"]').hidden = true;
352      f.reset();
353
354      state.title = fillTitle(p.title, { tariff: state.tariff, city: state.city });
355      q('[data-ld-sub]').textContent = p.sub;
356      q('[data-ld-done-title]').textContent = p.doneTitle;
357      q('[data-ld-done-text]').textContent = p.doneText;
358
359      var submit = f.querySelector('#ldSubmit');
360      if (submit) submit.textContent = p.submit;
361
362      var fields = p.fields || [];
363      var cityField = q('[data-ld-field="city"]');
364      var commentField = q('[data-ld-field="comment"]');
365      if (cityField) cityField.hidden = fields.indexOf('city') === -1;
366      if (commentField) commentField.hidden = fields.indexOf('comment') === -1;
367      var commentLabel = q('[data-ld-comment-label]');
368      if (commentLabel) commentLabel.textContent = p.commentLabel || 'Комментарий';
369      f.elements.comment.placeholder = p.commentPlaceholder || '';
370
371      // Город кладём в поле всегда: при скрытом поле он просто уедет менеджером молча.
372      f.elements.city.value = state.city;
373      f.elements.tariff.value = state.tariff;
374      f.elements.form.value = state.form;
375      f.elements.page.value = location.pathname + location.search;
376
377      // Режим окна задаёт пресет, а не имя ключа: mode: 'quiz' — сначала вопросы.
378      var quizMode = p.mode === 'quiz';
379      var startPos = 0;
380      var resumed = false;
381      var progress = q('[data-quiz-progress]');
382      var quizBox = q('[data-ld-step="quiz"]');
383      var introBox = q('[data-ld-step="intro"]');
384      var formBack = q('[data-quiz-formback]');
385      QUIZ.active = quizMode;
386
387      if (quizMode) {
388        QUIZ.ans = {};
389        QUIZ.fromTrigger = !!opts.city;
390        var draft = loadDraft();
391        if (draft && draft.ans) {
392          QUIZ.ans = draft.ans;
393          // Город из кнопки сильнее города из черновика: кнопку нажали только что.
394          if (draft.city && !state.city) state.city = draft.city;
395          if (draft.tariff) state.tariff = draft.tariff;
396          resumed = true;
397        }
398        QUIZ.order = buildOrder();
399        // Позиция черновика хранится идентификатором шага, а не номером: между
400        // двумя открытиями список мог измениться (город из кнопки убирает вопрос),
401        // и номер показал бы не тот вопрос. Шага больше нет — начинаем сначала,
402        // ответы при этом сохранены и подсвечены.
403        if (resumed) {
404          if (draft.at === '__form') {
405            startPos = QUIZ.order.length;
406          } else {
407            startPos = 0;
408            for (var oi = 0; oi < QUIZ.order.length; oi++) {
409              if (STEPS[QUIZ.order[oi]].id === draft.at) { startPos = oi; break; }
410            }
411          }
412        }
413        if (progress) progress.hidden = false;
414        goal('quiz_open', { vozobnovlen: resumed ? 1 : 0 });
415      } else {
416        if (progress) progress.hidden = true;
417        if (quizBox) quizBox.hidden = true;
418        if (introBox) introBox.hidden = true;
419        if (formBack) formBack.hidden = true;
420        d.setAttribute('aria-labelledby', 'ldTitle');
421      }
422
423      d.showModal();
424      document.body.style.overflow = 'hidden';
425
426      // Возобновлённый черновик мог остановиться на экране контактов. Тогда цель
427      // quiz_done уже засчитана в прошлый раз — второй раз её не шлём.
428      // Без черновика квиз начинается со вступительного экрана, с черновиком —
429      // сразу с сохранённого шага: заставку человек уже видел.
430      if (quizMode) { goto(resumed ? startPos : -1, { silent: resumed }); return; }
431
432      // Фокус на первое поле, но не на мобильных — там всплывшая клавиатура
433      // сразу закрывает половину окна и человек не видит, о чём вообще речь.
434      if (window.matchMedia('(min-width: 768px)').matches) {
435        f.elements.name.focus();
436      }
437    };
438    var close = function () {
439      var d = dialog();
440      if (d && d.open) d.close();
441    };
442
443    // Программная точка входа: нужна там, где данные считаются в момент клика,
444    // а в атрибут их не положишь — калькулятор передаёт сюда answers с расчётом.
445    window.openLeadDialog = open;
446
447    // Слушаем на document с фильтром по цели: сам <dialog> мог быть пересоздан.
448    document.addEventListener('close', function (e) {
449      if (e.target && e.target.id === 'leadDialog') document.body.style.overflow = '';
450    }, true);
451
452    document.addEventListener('click', function (e) {
453      if (!e.target || !e.target.closest) return;
454      for (var i = 0; i < TRIGGERS.length; i++) {
455        var opener = e.target.closest('[' + TRIGGERS[i].attr + ']');
456        if (!opener) continue;
457        e.preventDefault();
458        // form: null — тип лежит в значении атрибута, строка — жёсткий тип алиаса.
459        var declared = TRIGGERS[i].form || opener.getAttribute(TRIGGERS[i].attr) || '';
460        open({
461          form: declared,
462          tariff: opener.getAttribute('data-tariff') || '',
463          city: opener.getAttribute('data-lead-city') || ''
464        });
465        return;
466      }
467      if (e.target.closest('[data-ld-close]')) { close(); return; }
468
469      if (!QUIZ.active) return;
470      var pick = e.target.closest('[data-quiz-pick]');
471      if (pick) {
472        var step = STEPS[QUIZ.order[QUIZ.pos]];
473        QUIZ.ans[step.id] = pick.getAttribute('data-quiz-value') || '';
474        // Тариф несёт только шаг бюджета, у остальных вариантов атрибут пустой.
475        var tar = pick.getAttribute('data-quiz-tariff') || '';
476        if (tar) state.tariff = tar;
477        goal('quiz_step', { shag: QUIZ.pos + 1, vopros: step.id });
478        goto(QUIZ.pos + 1);
479        return;
480      }
481      if (e.target.closest('[data-quiz-start]')) { goto(0, { silent: true }); return; }
482      if (e.target.closest('[data-quiz-next]')) { leaveCityStep(); return; }
483      // Назад — без цели и без фокуса-объявления: это не продвижение по воронке.
484      if (e.target.closest('[data-quiz-back]')) { goto(QUIZ.pos - 1, { silent: true }); return; }
485      if (e.target.closest('[data-quiz-formback]')) { goto(QUIZ.order.length - 1, { silent: true }); return; }
486    });
487
488    // Enter в поле города = «Далее». Поле лежит вне <form>, submit тут ни при чём.
489    document.addEventListener('keydown', function (e) {
490      if (e.key !== 'Enter' || !QUIZ.active) return;
491      var t = e.target;
492      if (!t || !t.hasAttribute || !t.hasAttribute('data-quiz-city')) return;
493      e.preventDefault();
494      leaveCityStep();
495    });
496
497    // Пока город пустой, кнопка предлагает «Пропустить», как только появился текст —
498    // «Далее». Человек не должен гадать, обязателен ли ответ.
499    document.addEventListener('input', function (e) {
500      var t = e.target;
501      if (!QUIZ.active || !t || !t.hasAttribute || !t.hasAttribute('data-quiz-city')) return;
502      var next = q('[data-quiz-next]');
503      if (next) next.textContent = t.value.trim() ? 'Далее' : 'Пропустить';
504    });
505
506    // Клик по подложке. Сам <dialog> занимает всю область вместе с ::backdrop,
507    // поэтому отличаем клик по фону от клика по карточке через границы .ld__inner.
508    document.addEventListener('click', function (e) {
509      var d = dialog();
510      if (!d || e.target !== d) return;
511      var inner = d.querySelector('.ld__inner');
512      if (!inner) return;
513      var box = inner.getBoundingClientRect();
514      var outside = e.clientX < box.left || e.clientX > box.right || e.clientY < box.top || e.clientY > box.bottom;
515      if (outside) close();
516    });
517
518    // Телефон: оставляем только то, что реально бывает в номере,
519    // чтобы в заявку не попадали буквы и мусор из автозаполнения.
520    document.addEventListener('input', function (e) {
521      var t = e.target;
522      if (!t || t.name !== 'phone' || !t.closest || !t.closest('.ld__form')) return;
523      var cleaned = t.value.replace(/[^\d+\-() ]/g, '');
524      if (cleaned !== t.value) t.value = cleaned;
525    });
526
527    document.addEventListener('submit', function (e) {
528      if (!e.target || !e.target.classList || !e.target.classList.contains('ld__form')) return;
529      var f = e.target;
530      var submit = f.querySelector('#ldSubmit');
531      e.preventDefault();
532      clearError();
533
534      var name = f.elements.name.value.trim();
535      var phone = f.elements.phone.value.trim();
536      var d = digits(phone);
537
538      if (name.length < 2) { showError('Напишите, как к вам обращаться.'); f.elements.name.focus(); return; }
539      if (d.length < 10 || d.length > 12) { showError('Проверьте номер телефона — кажется, он неполный.'); f.elements.phone.focus(); return; }
540      if (!f.elements.consent.checked) { showError('Без согласия на обработку данных мы не сможем перезвонить.'); return; }
541
542      submit.disabled = true;
543      var label = submit.textContent;
544      submit.textContent = 'Отправляем…';
545
546      var sentForm = f.elements.form.value || DEFAULT_FORM;
547      var sentTariff = f.elements.tariff.value;
548
549      // ClientID Метрики уходит в заявку и дальше в поле «Яндекс ClientID» лида в Битрикс24.
550      // Ждём не дольше 1,5 с: заявка важнее атрибуции, пустой ClientID её не блокирует.
551      var touch = touchForLead();
552      getClientId().then(function (cid) {
553        return fetch(ENDPOINT, {
554          method: 'POST',
555          headers: { 'Content-Type': 'application/json' },
556          body: JSON.stringify({
557            name: name,
558            phone: phone,
559            form: sentForm,
560            tariff: sentTariff,
561            city: f.elements.city.value.trim(),
562            comment: f.elements.comment.value.trim(),
563            answers: state.answers,
564            // Отметка «когда форму открыли»: сервер считает из неё скорость заполнения
565            // и кладёт её в заявку как признак для менеджера. Заявку это не отбрасывает.
566            ts: state.openedAt,
567            page: f.elements.page.value,
568            ld_site: f.elements.ld_site.value,
569            consent: 1,
570            referrer: touch.referrer,
571            query: touch.query,
572            ym_client_id: cid
573          })
574        });
575      })
576        .then(function (r) { return r.json().catch(function () { return { ok: false }; }); })
577        .then(function (res) {
578          if (!res || !res.ok) throw new Error((res && res.error) || 'fail');
579          q('[data-ld-step="form"]').hidden = true;
580          q('[data-ld-step="done"]').hidden = false;
581          // Заявка ушла — черновик больше не нужен, иначе следующее открытие
582          // квиза начнётся с уже отправленных ответов.
583          if (QUIZ.active) {
584            QUIZ.active = false;
585            dropDraft();
586            var pr = q('[data-quiz-progress]');
587            if (pr) pr.hidden = true;
588            var fb2 = q('[data-quiz-formback]');
589            if (fb2) fb2.hidden = true;
590            var intro2 = q('[data-ld-step="intro"]');
591            if (intro2) intro2.hidden = true;
592          }
593          // Цель «lead_form» заведена в Метрике как JavaScript-событие. Четвёртым аргументом
594          // reachGoal принимает параметры визита — по ним в отчёте видно, какой тариф выбрали
595          // и какая форма сработала. window.ym существует с первой строки страницы (счётчик
596          // ставит заглушку с очередью), поэтому вызов не теряется, даже если сам скрипт
597          // Метрики ещё не догрузился.
598          if (window.ym) window.ym(METRIKA_ID, 'reachGoal', 'lead_form', { tarif: sentTariff, forma: sentForm });
599
600          // Заявка в Единый журнал лидов Callibri — вручную, вместо «Перехватчика форм».
601          // Автоперехват вешается на mousedown, то есть срабатывает ДО валидации: заявка без
602          // галочки согласия и заявка, отсеянная ловушкой для ботов, всё равно улетали в ЕЖЛ
603          // (проверено 26.08.2026). Здесь мы уже прошли и согласие, и сервер — отправляем сами.
604          // session_id, номер визита и рекламный источник функция подставляет сама, привязка
605          // к каналу сохраняется. Пятым аргументом идёт form_name — в ЕЖЛ виден тип заявки.
606          //
607          // Дубля с автоперехватом не будет: если он всё-таки включён в кабинете, у него
608          // навешан слушатель (`form_parser._boundOnDocumentClick`) и заявку он уже отправил —
609          // тогда молчим. Как только перехватчик выключат, ручная отправка включится сама.
610          try {
611            var parser = window._callibri && window._callibri.form_parser;
612            var interceptorActive = !!(parser && parser._boundOnDocumentClick);
613            if (!interceptorActive && typeof window.CallibriSendForm === 'function') {
614              window.CallibriSendForm(phone, '', name, '', state.title || 'Заявка с сайта', '', {});
615            }
616          } catch (err) { /* коллтрекинг не должен ломать приём заявки */ }
617        })
618        .catch(function () {
619          showError('Не удалось отправить заявку. Позвоните нам: ' + FALLBACK_PHONE + ' — ответим сразу.');
620        })
621        .then(function () {
622          submit.disabled = false;
623          submit.textContent = label;
624        });
625    });
626  })();
627})();</script>
627  <button type="button" id="scrollTop" class="scrolltop" aria-label="Наверх страницы" hidden data-astro-cid-5qrr6s65> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true" data-astro-cid-5qrr6s65> <path d="M12 19V5M12 5L5 12M12 5L19 12" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-5qrr6s65></path> </svg> </button> 
627<script>
628  (function () {
629    const btn = document.getElementById('scrollTop');
630    if (!btn) return;
631    const THRESHOLD = 480;
632    let visible = false;
633
634    function update() {
635      const shouldShow = window.scrollY > THRESHOLD;
636      if (shouldShow === visible) return;
637      visible = shouldShow;
638      if (visible) {
639        btn.hidden = false;
640        requestAnimationFrame(() => btn.classList.add('is-visible'));
641      } else {
642        btn.classList.remove('is-visible');
643        window.setTimeout(() => { if (!visible) btn.hidden = true; }, 220);
644      }
645    }
646
647    window.addEventListener('scroll', update, { passive: true });
648    update();
649
650    btn.addEventListener('click', function () {
651      const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
652      window.scrollTo({ top: 0, behavior: reduceMotion ? 'auto' : 'smooth' });
653      btn.blur();
654    });
655  })();
656</script>
656  <div id="cookieBar" class="cookiebar" role="region" aria-label="Уведомление о cookie" hidden data-astro-cid-iosq7e7y> <div class="container cookiebar__inner" data-astro-cid-iosq7e7y> <p class="cookiebar__text" data-astro-cid-iosq7e7y>
657Мы используем файлы cookie и сервисы аналитики для удобства работы сайта. Продолжая пользоваться сайтом, вы соглашаетесь с
658<a href="/privacy/" data-astro-cid-iosq7e7y>политикой обработки персональных данных</a>.
659</p> <button type="button" id="cookieAccept" class="cookiebar__btn" data-astro-cid-iosq7e7y>Понятно</button> </div> </div> 
659<script>
660  (function () {
661    var KEY = 'sushiera_cookie_consent';
662    var bar = document.getElementById('cookieBar');
663    var btn = document.getElementById('cookieAccept');
664    if (!bar || !btn) return;
665
666    function setBarHeight(px) {
667      document.documentElement.style.setProperty('--cookie-bar-h', px + 'px');
668    }
669
670    try {
671      if (localStorage.getItem(KEY) === '1') return;
672    } catch (e) {
673      /* localStorage недоступен (приватный режим): просто показываем баннер один раз за сессию */
674    }
675
676    bar.hidden = false;
677    requestAnimationFrame(function () {
678      setBarHeight(bar.offsetHeight);
679      bar.classList.add('is-visible');
680    });
681
682    window.addEventListener('resize', function () {
683      if (bar.classList.contains('is-visible')) setBarHeight(bar.offsetHeight);
684    });
685
686    btn.addEventListener('click', function () {
687      try { localStorage.setItem(KEY, '1'); } catch (e) {}
688      bar.classList.remove('is-visible');
689      setBarHeight(0);
690      window.setTimeout(function () { bar.hidden = true; }, 260);
691    });
692  })();
693</script>
693  <noscript><div><img src="https://mc.yandex.ru/watch/110180353" style="position:absolute; left:-9999px;" alt=""></div></noscript>  <!-- Общий планировщик отложенных виджетов: первое действие посетителя либо таймаут.
694         Сторонние скрипты не участвуют в первой отрисовке и не блокируют главный поток. --> 
694<script>
695      window.__onFirstIntent = function (fn, timeoutMs) {
696        var fired = false;
697        var events = ['pointerdown', 'touchstart', 'keydown', 'scroll', 'mousemove'];
698        var run = function () {
699          if (fired) return;
700          fired = true;
701          events.forEach(function (e) { window.removeEventListener(e, run); });
702          fn();
703        };
704        events.forEach(function (e) { window.addEventListener(e, run, { once: true, passive: true }); });
705        setTimeout(run, timeoutMs || 7000);
706      };
707    </script>
707 <!-- LEADBACK — код от заказчика (campaign e7ff9c1de6997e75db273027) --> 
707<script type="text/javascript">
708      // LeadBack инжектит собственные render-blocking стили (Roboto.css, chat-mobile.min.css,
709      // style-android.min.css) и тянет jQuery 1.10.2. При загрузке во время парсинга это
710      // отодвигало FCP до 5,4 с. Откладываем до window.load + 1,5 с простоя — виджет всё так же
711      // появляется, но уже после первой отрисовки.
712      var _emv = _emv || [];
713      _emv['campaign'] = 'e7ff9c1de6997e75db273027';
714      (function() {
715        var started = false;
716        window.__loadLeadback = function() {
717          if (started) return;
718          started = true;
719          var em = document.createElement('script'); em.type = 'text/javascript'; em.async = true;
720          em.src = 'https://leadback.ru/js/leadback.js';
721          document.body.appendChild(em);
722        };
723        window.__onFirstIntent(window.__loadLeadback, 8000);
724      })();
725    </script>
725 
725<script>(function(){const phoneHref = "tel:+79937556151";
726
727      // Кнопки "Заказать звонок" (data-leadback) открывают попап обратного звонка LeadBack.
728      // Виджет слушает hashchange и на '#callback' сам вызывает showWidget, после чего
729      // переставляет хеш на '#callback-showed' — поэтому повторные клики работают без сброса.
730      // Клик мог прийти раньше, чем виджет поднялся: тогда грузим его и ждём #lb_widget-root.
731      //
732      // НА ТЕЛЕФОНЕ ПОПАПА НЕТ. LeadBack на сенсорном устройстве уходит в мобильный режим
733      // (chat-mobile.css, style-android.css) и держит контейнер попапа в display:none:
734      // '#lb_widget-root' в DOM есть, хеш '#callback' виджет принимает и переставляет на
735      // '#callback-showed', но не показывает ничего. Проверка на существование узла считала
736      // это успехом, до tel:-фолбэка выполнение не доходило, и клик заканчивался ничем.
737      // Поэтому на телефоне кнопка звонит сразу — синхронно, внутри пользовательского жеста
738      // (отложенный переход на tel: мобильные браузеры блокируют).
739      var isPhone = window.matchMedia('(hover: none) and (pointer: coarse)').matches;
740      document.addEventListener('click', function (e) {
741        var el = e.target.closest('[data-leadback]');
742        if (!el) return;
743        if (isPhone) {
744          if (window.ym) window.ym(110180353, 'reachGoal', 'leadback_open');
745          // У кнопок звонка href уже tel: — не мешаем нативному переходу.
746          // У остальных data-leadback href нет, набираем номер сами.
747          if (!el.getAttribute('href')) window.location.href = phoneHref;
748          return;
749        }
750        e.preventDefault();
751        var open = function () {
752          window.location.hash = '#callback';
753          // Хвост '#callback-showed' не должен оставаться в URL: он попадает в шаринг,
754          // в адресную строку и в отчёты Метрики. Виджет к этому моменту уже открыт.
755          setTimeout(function () {
756            if (/^#callback/.test(window.location.hash)) {
757              history.replaceState(null, '', window.location.pathname + window.location.search);
758            }
759          }, 1500);
760          if (window.ym) window.ym(110180353, 'reachGoal', 'leadback_open');
761        };
762        if (document.getElementById('lb_widget-root')) { open(); return; }
763        window.__loadLeadback();
764        var waited = 0;
765        var timer = setInterval(function () {
766          waited += 100;
767          if (document.getElementById('lb_widget-root')) { clearInterval(timer); open(); }
768          // Виджет не поднялся (блокировщик, сбой сети) — звонок не теряем.
769          else if (waited >= 6000) { clearInterval(timer); window.location.href = phoneHref; }
770        }, 100);
771      });
772    })();</script>
772 </body> </html> 

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.