// shark service — content data + reusable QuoteForm const { useState, useRef } = React; const BRANDS = ["La Marzocco", "Jura", "Breville", "Gaggia", "Rancilio", "Rocket", "DeLonghi", "Sage", "Nuova Simonelli", "Saeco", "ECM", "Profitec"]; const PHONE_FMT = "+375 (44) 527-28-27"; const PHONE_TEL = "tel:+375445272827"; // Authentic coffee-equipment photography (Unsplash, free license). const IMG_HOME = "https://images.unsplash.com/photo-1714415632243-079d9a86071a?auto=format&fit=crop&w=1100&q=80"; // home espresso machine making coffee const IMG_PRO = "https://images.unsplash.com/photo-1581068106019-5aa70c6ab424?auto=format&fit=crop&w=1100&q=80"; // commercial multi-group machine const IMG_GRINDER = "https://images.unsplash.com/photo-1698750578084-f420ac9bf111?auto=format&fit=crop&w=1100&q=80"; // electric coffee grinder, close view const IMG_PORTAFILTER = "https://images.unsplash.com/photo-1475296204602-08d15839e95f?auto=format&fit=crop&w=1100&q=80"; // espresso flowing from group head const IMG_ELEC = "https://images.unsplash.com/photo-1517077304055-6e89abbf09b0?auto=format&fit=crop&w=1100&q=80"; // circuit board / electronics const IMG_TECH = "https://images.unsplash.com/photo-1536914561643-9e3a7a8d063d?auto=format&fit=crop&w=1100&q=80"; // customer drinking coffee in cafe const SERVICES = [ { id: "descaling", icon: "droplet", tag: "Чаще всего заказывают", price: "от 130,00 Br.", img: IMG_HOME, title: "Техническое обслуживание кофемашины", desc: "Регулярное ТО — самый дешёвый способ продлить жизнь кофемашине. Мы удаляем накипь и кофейные масла, промываем заварочный узел и магистрали, проверяем уплотнения и узлы под нагрузкой и при необходимости меняем расходники.", solves: "Слабый напор, отсутствие пенки, мутную воду, посторонний привкус и риск внезапной поломки из-за накипи.", incl: ["Удаление накипи", "Чистка от кофейных масел", "ТО варочной группы", "Проверка прокладок и уплотнений", "Тест жёсткости воды"] }, { id: "leak", icon: "wrench", tag: "Бизнес", price: "от 600,00 Br.", img: IMG_PRO, title: "Ремонт профессиональной кофемашины", desc: "Полный разбор профессиональной машины с удалением накипи изнутри: снимаем бойлер, группы и магистрали, очищаем каждый узел от минеральных отложений, меняем изношенные уплотнения и собираем машину с проверкой давления и температуры.", solves: "Сильную накипь, падение давления, протечки, нестабильную температуру и потерю производительности в час пик.", incl: ["Полный разбор машины", "Удаление накипи со всех узлов", "Чистка бойлера и групп", "Замена уплотнений и прокладок", "Сборка и калибровка давления", "Проверка давления и температуры"] }, { id: "grinder", icon: "settings", tag: null, price: "от 50,00 Br.", img: IMG_GRINDER, title: "Ремонт и калибровка кофемолки", desc: "Тупые или сбитые жернова портят вкус задолго до того, как откажет сама машина. Мы меняем изношенные жернова, очищаем остаток, выравниваем держатель и настраиваем помол, чтобы доза и время экстракции попадали точно в цель.", solves: "Неравномерный помол, слабый или горчащий эспрессо, нестабильную дозу и потерю вкуса в чашке.", incl: ["Замена / заточка жерновов", "Выравнивание держателя", "Чистка от остатка", "Калибровка дозы и времени", "Проверка мотора и шестерён"] }, { id: "electronics", icon: "cpu", tag: "Специалист", price: "от 100,00 Br.", img: IMG_ELEC, title: "Диагностика электроники и плат управления", desc: "Когда дисплей выдаёт ошибки, кнопки не реагируют или настройки не сохраняются — причина в плате управления, проводке или датчиках. Мы проводим диагностику на уровне платы, перепаиваем или меняем компоненты и восстанавливаем прошивку там, где это поддерживается.", solves: "Коды ошибок, неотзывчивые кнопки, сброс настроек, мигающий дисплей или «мёртвую» машину.", incl: ["Поиск неисправности на плате", "Тест датчиков и проводки", "Ремонт / замена компонентов", "Восстановление прошивки", "Полный тест функций"] }, { id: "gasket", icon: "disc", tag: null, price: "от 50,00 Br.", img: IMG_PORTAFILTER, title: "Замена прокладок и уплотнений", desc: "Прокладки группы твердеют и усыхают от нагрева, нарушая герметичность между холдером и группой. Мы устанавливаем прокладки по спецификации OEM, чтобы холдер плотно вставал и держал давление.", solves: "Холдер не встаёт в рабочее положение, шипение при экстракции, подтёки вокруг группы.", incl: ["Замена прокладки группы", "Замена душевой сетки", "Уплотнения парового клапана", "Проверка посадки холдера", "Тест удержания давления"] }, { id: "maintenance", icon: "calendarCheck", tag: "Абонемент", price: "По запросу", img: IMG_TECH, title: "Программа регулярного ТО", desc: "Самый дешёвый ремонт — тот, который не понадобился. По графику мы проводим декальцинацию, меняем расходники и проверяем машину под Вашу нагрузку — чтобы мелкий износ не превращался в поломку.", solves: "Неожиданные простои, внезапные счета за ремонт и постепенную потерю качества кофе.", incl: ["Плановые визиты", "Регулярная чистка и декальцинация", "Замена расходников", "Приоритетная запись", "Отчёт о состоянии после визита"] }]; const STEPS = [ { n: "1", title: "Заявка", icon: "clipboard", text: "Расскажите о марке, модели машины и что именно не так — через форму, по телефону или в Telegram. Займёт две минуты." }, { n: "2", title: "Диагностика", icon: "search", text: "Мы проводим полную диагностику — на месте или в мастерской — и присылаем понятный фиксированный расчёт до начала работ." }, { n: "3", title: "Ремонт", icon: "wrench", text: "Сертифицированный мастер выполняет ремонт оригинальными или OEM-деталями, а затем проверяет давление и температуру по спецификации производителя." }, { n: "4", title: "Готово", icon: "checkCircle", text: "Мы возвращаем машину настроенной и готовой варить отличный кофе — с гарантией на ремонт." }]; const SYMPTOMS = [ { icon: "waves", t: "Нет пенки, слабый эспрессо", d: "Проблемы с давлением, помолом или накипью портят экстракцию." }, { icon: "droplet", t: "Подтекает вода", d: "Изношенные уплотнения, уставший насос или трещина в фитинге." }, { icon: "thermometer", t: "Плохо греет", d: "Проблемы с ТЭНом, термостатом или термопредохранителем." }, { icon: "alert", t: "Ошибки, кнопки не реагируют", d: "Неисправности платы, датчиков или проводки." }]; const WHYUS = [ { icon: "award", t: "Сертифицированные мастера", d: "Каждый ремонт выполняет обученный сертифицированный специалист по кофемашинам." }, { icon: "box", t: "Оригинальные и OEM-детали", d: "Мы ставим оригинальные или OEM-компоненты, чтобы машина работала и служила именно так, как задумал производитель." }, { icon: "shield", t: "Гарантия по договору", d: "Гарантия на запчасти и работы прописана в договоре. Если ремонт не выдержал в течение гарантийного срока — переделаем бесплатно." }, { icon: "zap", t: "Экспресс-ремонт", d: "Срочный ремонт — от 3 часов. Плановый идёт в порядке живой очереди и занимает от 1 до 3 дней; для бизнеса доступен приоритетный выезд." }, { icon: "search", t: "Бесплатная диагностика", d: "Бесплатная диагностика и прозрачный расчёт до начала работ — и для бытовых кофемашин, и для профессиональных." }, { icon: "receipt", t: "Честные цены", d: "Честные детализированные расчёты без скрытых платежей. Вы утверждаете цену до начала работ." }]; const FAQ = [ { q: "Сколько стоит ремонт?", a: "Стоимость зависит от услуги и нужных деталей. Бесплатную диагностику и расчёт делаем до начала работ — и для бытовых кофемашин, и для профессиональных баров. Цену Вы утверждаете заранее, никаких сюрпризов в счёте." }, { q: "Сколько это займёт времени?", a: "Экспресс-ремонт занимает от 3 часов. Плановый ремонт выполняется в порядке живой очереди — как правило, от 1 до 3 дней. Для кафе и ресторанов доступен приоритетный выезд в день обращения." }, { q: "Какие марки Вы обслуживаете?", a: "Мы обслуживаем весь спектр бытовых, полупрофессиональных и профессиональных машин — La Marzocco, Jura, Breville, Gaggia, Rancilio, Rocket, DeLonghi, Sage, Nuova Simonelli и многие другие. Если Вашей марки нет в списке — просто спросите." }, { q: "Выезд или привоз в мастерскую?", a: "И то, и другое. Мы выезжаем на место к профессиональным машинам и крупным агрегатам, а бытовую или полупрофессиональную машину удобно привезти к нам. Мы подскажем лучший вариант при записи. Обслуживаем Минск, регионы и всю Беларусь." }, { q: "Что покрывает гарантия на ремонт?", a: "Гарантия на заменённые детали и выполненные работы прописана в договоре. Если отремонтированный узел выйдет из строя в течение гарантийного срока, мы переделаем работу бесплатно." }, { q: "Вы используете оригинальные детали?", a: "Да. Мы стандартно используем оригинальные или OEM-детали производителя. Мы всегда укажем в расчёте, что именно ставим и почему, до начала работ." }]; const DIAGNOSE = [ { t: "Нет пара или слабый пар", sym: "Капучинатор не вспенивает молоко, пар идёт еле-еле или не идёт совсем.", do: "Декальцинация, чистка форсунок, ремонт или замена электромагнитного клапана подачи пара." }, { t: "Горький или слабый кофе", sym: "Напиток без пенки, водянистый, отдаёт кислинкой или горчит.", do: "Комплексное ТО: снимаем накипь с ТЭНа, промываем заварочный блок от масел и заново настраиваем помол." }, { t: "Не набирает давление", sym: "Машина громко гудит, но вода почти не идёт или льётся тонкой струйкой.", do: "Убираем воздушные пробки, чистим флоуметр, ремонтируем или меняем помпу." }, { t: "Мелет, но не варит", sym: "Молотый кофе уходит в отходы, а в чашку напиток так и не попадает.", do: "Промываем гидросистему от кофейных масел и смазываем механизмы; при сильном износе меняем заварочный блок." }, { t: "Не включается, не реагирует на кнопки", sym: "Дисплей тёмный, индикаторы погасли, на нажатия машина не отвечает.", do: "Проверяем питание, меняем сработавшие термопредохранители, ремонтируем силовую плату или блок питания." }, { t: "Перестала молоть зёрна", sym: "Слышен скрежет или холостой гул мотора, зёрна не затягиваются в кофемолку.", do: "Достаём посторонние предметы, ультразвуком чистим жернова от жира, меняем жернова или ремонтируем мотор." }, { t: "Течёт снизу", sym: "Под корпусом или поддоном регулярно собирается вода или готовый кофе.", do: "Меняем изношенные силиконовые трубки, уплотнительные кольца, сальники или треснувший поддон." }, { t: "Горит код ошибки", sym: "Машина заблокирована, мигает индикация или на дисплее горит код (например, Error 8).", do: "Расшифровываем код, проверяем концевые выключатели и термодатчики, ремонтируем плату управления." }]; // ---------- Reusable quote form with full validation ---------- function QuoteForm({ id, compact }) { const [vals, setVals] = useState({ name: "", phone: "", email: "", brand: "", problem: "", who: "Дом / личная" }); const [errs, setErrs] = useState({}); const [done, setDone] = useState(false); const [ref, setRef] = useState(""); const set = (k) => (e) => { setVals((v) => ({ ...v, [k]: e.target.value })); if (errs[k]) setErrs((x) => ({ ...x, [k]: null })); }; const validate = () => { const e = {}; if (!vals.name.trim()) e.name = "Укажите Ваше имя"; const phoneDigits = vals.phone.replace(/[^\d]/g, ""); if (!vals.phone.trim()) e.phone = "Укажите номер телефона";else if (phoneDigits.length < 7) e.phone = "Похоже, номер указан неверно"; if (vals.email.trim() && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(vals.email)) e.email = "Введите корректный e-mail"; if (!vals.problem.trim()) e.problem = "Коротко опишите, что не так"; return e; }; const submit = (ev) => { ev.preventDefault(); const e = validate(); setErrs(e); if (Object.keys(e).length) { const first = ev.currentTarget.querySelector(".qfield.invalid input, .qfield.invalid textarea"); if (first) first.focus(); return; } setRef("SF-" + Math.floor(100000 + Math.random() * 899999)); setDone(true); }; if (done) { return (

Заявка принята

Спасибо, {vals.name.split(" ")[0] || "Вы"}. Сертифицированный мастер перезвонит Вам в течение одного рабочего часа, чтобы согласовать диагностику.

Номер заявки {ref}
); } return (
{!compact &&
Закажите бесплатную диагностику Без обязательств · расчёт до начала работ
}
{["Дом / личная", "Кафе / бизнес"].map((w) => )}
{errs.name}
{errs.phone}
{errs.email}
{BRANDS.map((b) =>