astro_avtourist/frontend/src/pages/services/license-challenge.astro
2026-04-13 21:48:11 +05:00

364 lines
20 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
import Layout from '@layouts/Layout.astro';
import { SITE_URL, COMPANY } from '@constants';
import PageHero from "@components/base/PageHero.astro";
import CTA from "@components/base/CTA.astro";
// Import child components with custom data
import AboutTabs from '@components/services/AboutTabs.astro';
import ArticlesList from '@components/services/ArticlesList.astro';
import WorkSteps from '@components/services/WorkSteps.astro';
import ServiceIncludes from '@components/services/ServiceIncludes.astro';
import AdvantagesList from '@components/services/AdvantagesList.astro';
import PricingPlans from '@components/services/PricingPlans.astro';
import FaqList from '@components/services/FaqList.astro';
// Custom data for protocol defense service
const aboutTabsData = {
problem: {
title: "Протокол составлен — но это не конец",
description: "После составления протокола многие водители <strong>сдаются и считают дело проигранным</strong>. Но именно на этом этапе можно найти <strong>критические нарушения</strong>, которые станут основанием для прекращения дела.",
description2: "Инспекторы допускают ошибки в <strong>каждом третьем протоколе</strong>: неправильная формулировка, отсутствие подписи, нарушение порядка составления. <strong>Грамотный анализ протокола — ключ к защите</strong>.",
items: [
"Ошибки в заполнении и формулировках протокола",
"Нарушение порядка составления и вручения копии",
"Отсутствие обязательных реквитов"
],
visualNumber: "40%",
visualLabel: "протоколов содержат нарушения",
visualNote: "При грамотном анализе — до 70% шансов на прекращение",
barWidth: 40
},
approach: {
title: "Детальный аудит протокола",
description: "Мы проводим <strong>построчный анализ</strong> каждого документа. Изучаем протокол, рапорт инспектора, результаты освидетельствования. Ищем <strong>любое процессуальное нарушение</strong>, которое поможет защите.",
description2: "Наша задача — <strong>найти основания для прекращения дела</strong> ещё до суда. Если протокол составлен с нарушениями — дело должно быть прекращено.",
items: [
{ icon: "📋", title: "Построчный анализ", desc: "Проверяем каждое поле и запись в протоколе" },
{ icon: "⚖️", title: "Поиск нарушений", desc: "Находим процессуальные ошибки инспектора" },
{ icon: "📹", title: "Видеоанализ", desc: "Сверяем протокол с видеозаписью" }
],
steps: ["Получение протокола", "Анализ документов", "Поиск нарушений", "Подготовка защиты", "Прекращение дела"]
},
stats: {
bigStat: { number: 70, label: "Дел прекращено после анализа протокола", barWidth: 70 },
stats: [
{ number: 300, label: "Протоколов проанализировано", suffix: "+" },
{ number: 10, label: "Лет практики", suffix: "" },
{ number: 3, label: "Дня на анализ протокола", suffix: " дня" },
{ number: 100, label: "Возврат при неудаче", suffix: "%" }
]
},
guarantees: {
title: "Работаем на результат",
description: "Мы берёмся только за дела с <strong>реальными перспективами</strong>. После анализа протокола честно скажем о <strong>шансах на прекращение</strong>.",
description2: "Если нарушений в протоколе нет — мы предложим <strong>стратегию защиты на следующих этапах</strong>. Не берём денег за безнадёжные дела.",
items: [
{ title: "Бесплатный анализ", desc: "Анализируем протокол и оцениваем перспективы" },
{ title: "Оплата за результат", desc: "Платите только при прекращении дела" },
{ title: "Договор", desc: "Фиксируем все условия юридически" },
{ title: "Честная оценка", desc: "Не обещаем невозможного — говорим правду" }
]
}
};
const articlesData = [
{ icon: "📝", title: "Ошибки в протоколе", desc: "Проверяем правильность заполнения всех полей, подписей, дат.", chance: "Высокий шанс" },
{ icon: "🫁", title: "Нарушение освидетельствования", desc: "Анализируем поверку прибора, наличие понятых, процедуру проведения.", chance: "Высокий шанс" },
{ icon: "🎥", title: "Отсутствие видеозаписи", desc: "Если освидетельствование не записано — это основание для прекращения.", chance: "Высокий шанс" },
{ icon: "👥", title: "Нет понятых", desc: "Освидетельствование без понятых — грубое нарушение процедуры.", chance: "Высокий шанс" },
{ icon: "📄", title: "Не вручена копия", desc: "Копия протокола должна быть вручена немедленно. Нарушение — прекращение дела.", chance: "Средний шанс" },
{ icon: "⚠️", title: "Другие нарушения", desc: "Работаем с любыми процессуальными ошибками — анализируем каждую ситуацию.", chance: "Зависит от дела" }
];
const stepsData = [
{ number: "01", title: "Передача протокола", desc: "Пришлите нам копию протокола или приезжайте в офис. Мы начнём анализ сразу." },
{ number: "02", title: "Построчный анализ", desc: "Изучаем каждое поле, сверяем с видеозаписью, ищем процессуальные нарушения." },
{ number: "03", title: "Оценка перспектив", desc: "Честно говорим о шансах. Если есть основания — берёмся за дело." },
{ number: "04", title: "Подготовка защиты", desc: "Составляем ходатайства, собираем доказательства, готовим позицию." },
{ number: "05", title: "Прекращение дела", desc: "Благодаря найденным нарушения дело прекращается ещё до суда." }
];
const includesData = [
{ icon: "📄", title: "Анализ протокола", desc: "Построчная проверка каждого документа" },
{ icon: "🔍", title: "Поиск нарушений", desc: "Находим процессуальные ошибки инспектора" },
{ icon: "📹", title: "Видеоанализ", desc: "Сверяем протокол с видеозаписью" },
{ icon: "📝", title: "Подготовка ходатайств", desc: "Составляем документы для прекращения дела" },
{ icon: "👨‍⚖️", title: "Представительство", desc: "Защищаем ваши интересы в суде" },
{ icon: "✅", title: "Результат", desc: "Прекращение дела или возврат денег" }
];
const advantagesData = [
{ number: "01", title: "Экспертиза в протоколах", desc: "Мы специализируемся на анализе протоколов. Знаем все типичные ошибки инспекторов." },
{ number: "02", title: "70% дел прекращено", desc: "Благодаря грамотному анализу протокола большинство дел закрываются до суда." },
{ number: "03", title: "Быстрый анализ", desc: "Анализируем протокол за 3 дня. Не тянем время — каждая минута на счету." },
{ number: "04", title: "Без предоплаты", desc: "Оплата только после прекращения дела. Мы уверены в своей экспертизе." },
{ number: "05", title: "Полное сопровождение", desc: "От анализа протокола до прекращения дела. Вам не нужно ничего делать самому." },
{ number: "06", title: "Честная оценка", desc: "Говорим правду о перспективах. Не берёмся за безнадёжные дела." }
];
const plansData = [
{ badge: "Экспресс", title: "Анализ протокола", price: "Бесплатно", features: ["Анализ протокола", "Оценка перспектив", "Рекомендации", "Срочная консультация"], btnText: "Прислать протокол", btnClass: "" },
{ badge: "Стандарт", title: "Защита под ключ", price: "от 20 000 ₽", features: ["Всё из Экспресс", "Подготовка ходатайств", "Сбор доказательств", "Представительство в суде"], btnText: "Начать защиту", btnClass: "gold", popular: true },
{ badge: "Премиум", title: "Сложные дела", price: "от 30 000 ₽", features: ["Всё из Стандарта", "Видеоэкспертиза", "Дополнительные инстанции", "Приоритетная работа"], btnText: "Обсудить дело", btnClass: "" }
];
const faqsData = [
{ question: "Что делать, если мне вручили протокол?", answer: "Сразу <strong>пришлите нам копию</strong> протокола. Мы проведём бесплатный анализ и скажем о перспективах. Не подписывайте ничего без консультации." },
{ question: "Можно ли оспорить уже подписанный протокол?", answer: "Да, даже <strong>подписанный протокол</strong> можно оспорить при наличии процессуальных нарушений. Подпись не означает согласие с содержанием." },
{ question: "Сколько времени занимает анализ?", answer: "Мы анализируем протокол за <strong>3 рабочих дня</strong>. После этого честно говорим о шансах на прекращение дела." },
{ question: "Каковы шансы на прекращение дела?", answer: "Около <strong>40% протоколов</strong> содержат нарушения. При грамотном анализе шансы значительно выше — до 70%." },
{ question: "Нужно ли моё присутствие в суде?", answer: "<strong>Нет</strong>, мы работаем по доверенности. Ваше присутствие не требуется — мы ведём дело полностью самостоятельно." },
{ question: "Что если в протоколе нет нарушений?", answer: "Если протокол составлен правильно — мы предложим <strong>стратегию защиты на следующих этапах</strong>. Честно скажем о всех вариантах." }
];
---
<Layout
title="Защита при составленном протоколе — автоюрист в Сургуте"
description="Анализ протокола на процессуальные нарушения. Построчная проверка, поиск ошибок, защита в суде. Бесплатный анализ протокола."
canonicalLink={`${SITE_URL}/services/license-challenge`}
breadcrumbs={[
{ label: 'Главная', href: '/' },
{ label: 'Услуги', href: '/services' },
{ label: 'Защита при составленном протоколе' }
]}
>
<PageHero
badgeText="ЗАЩИТА С ПРОТОКОЛОМ"
titleWhite="Найдём"
titleGold="ошибки в протоколе"
description="Анализируем протокол на процессуальные нарушения. Построчная проверка, поиск ошибок, защита в суде. Бесплатный анализ протокола и оценка перспектив."
btnText="Бесплатный анализ протокола"
layout="with-image"
sideImage="/images/services/office-table.avif"
sideImageAlt="Юрист по защите при составленном протоколе"
experienceBadge={{
number: "70%",
text: "ДЕЛ ПРЕКРАЩЕНО"
}}
bgImage="/images/services/servicesBg.avif"
icon="shield"
/>
<div class="service-detail-page">
<AboutTabs
tabsData={aboutTabsData}
sectionLabel="Подробнее об услуге"
sectionTitle="Всё о защите при составленном протоколе"
sectionDesc="Полная информация об анализе протокола и поиске процессуальных нарушений"
/>
<ArticlesList
articles={articlesData}
sectionLabel="Работаем с нарушениями"
sectionTitle="Типичные нарушения в протоколах"
sectionDesc="Находим любые процессуальные ошибки для прекращения дела"
/>
<WorkSteps
steps={stepsData}
sectionLabel="Этапы работы"
sectionTitle="Как мы анализируем протокол"
sectionDesc="Прозрачный процесс от получения протокола до прекращения дела"
/>
<ServiceIncludes
includes={includesData}
sectionLabel="Что входит"
sectionTitle="Что входит в услугу"
sectionDesc="Полный спектр работ по анализу и защите"
/>
<AdvantagesList
advantages={advantagesData}
sectionLabel="Почему мы"
sectionTitle="Преимущества работы с нами"
sectionDesc="Доверьте анализ протокола профессионалам с опытом"
/>
<PricingPlans
plans={plansData}
sectionLabel="Стоимость"
sectionTitle="Сколько стоит анализ протокола"
sectionDesc="Прозрачные цены без скрытых платежей"
/>
<FaqList
faqs={faqsData}
sectionLabel="Вопросы"
sectionTitle="Частые вопросы"
sectionDesc="Ответы на популярные вопросы о защите при составленном протоколе"
/>
<CTA
icon="consult"
title="Найдём ошибки в протоколе"
description="Пришлите копию протокола. Бесплатный анализ и оценка перспектив дела."
btnText="Бесплатный анализ протокола"
/>
</div>
</Layout>
<style>
.service-detail-page {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
}
.site-container {
max-width: var(--site-max-width, 1400px);
margin: 0 auto;
}
section {
padding: 5rem 1.5rem;
}
.section-header {
text-align: center;
margin-bottom: 3.5rem;
}
.section-label {
display: inline-block;
color: #eac26e;
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 3px;
margin-bottom: 1rem;
padding: 0.5rem 1rem;
background: rgba(234, 194, 110, 0.1);
border-radius: 6px;
}
.section-label.center {
display: flex;
justify-content: center;
}
.section-header h2 {
color: #0a2540;
font-size: clamp(1.75rem, 3.5vw, 2.5rem);
font-weight: 800;
margin: 0 0 1rem 0;
line-height: 1.2;
}
.section-desc {
color: #64748b;
font-size: 1.05rem;
max-width: 650px;
margin: 0 auto;
line-height: 1.6;
}
@media (max-width: 768px) {
section {
padding: 3.5rem 1rem;
}
.section-header {
margin-bottom: 2.5rem;
}
}
@media (max-width: 480px) {
section {
padding: 2.5rem 0.75rem;
}
}
</style>
<script is:inline>
// Анимации при скролле
document.addEventListener('DOMContentLoaded', () => {
const observerOptions = {
root: null,
rootMargin: '0px 0px -50px 0px',
threshold: 0.1
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const el = entry.target;
const delay = parseInt(el.dataset.delay || '0');
setTimeout(() => {
el.classList.add('is-visible');
}, delay);
observer.unobserve(el);
}
});
}, observerOptions);
document.querySelectorAll('.animate-on-scroll').forEach((el) => {
observer.observe(el);
});
// Табы
const tabButtons = document.querySelectorAll('.tab-btn');
const tabPanels = document.querySelectorAll('.tab-panel');
tabButtons.forEach(btn => {
btn.addEventListener('click', () => {
const tabId = btn.dataset.tab;
// Убираем active со всех кнопок
tabButtons.forEach(b => {
b.classList.remove('active');
b.setAttribute('aria-selected', 'false');
});
// Убираем active со всех панелей
tabPanels.forEach(panel => {
panel.classList.remove('active');
});
// Активируем нужный таб
btn.classList.add('active');
btn.setAttribute('aria-selected', 'true');
const targetPanel = document.getElementById(`tab-${tabId}`);
if (targetPanel) {
targetPanel.classList.add('active');
// Запускаем анимацию счётчиков если это таб статистики
if (tabId === 'stats') {
animateCounters(targetPanel);
}
}
});
});
// Анимация счётчиков
function animateCounters(panel) {
const counters = panel.querySelectorAll('[data-count]');
counters.forEach(counter => {
const target = parseInt(counter.dataset.count || '0');
const suffix = counter.textContent?.replace(/[0-9]/g, '') || '';
const duration = 1500;
const startTime = performance.now();
const easeOutCubic = (t) => 1 - Math.pow(1 - t, 3);
const update = (currentTime) => {
const elapsed = currentTime - startTime;
const progress = Math.min(elapsed / duration, 1);
const easedProgress = easeOutCubic(progress);
const currentValue = Math.round(easedProgress * target);
counter.textContent = `${currentValue}${suffix}`;
if (progress < 1) {
requestAnimationFrame(update);
}
};
requestAnimationFrame(update);
});
// Анимация полосок статистики
const statBars = panel.querySelectorAll('[data-width]');
statBars.forEach(bar => {
const width = bar.dataset.width;
setTimeout(() => {
bar.style.width = `${width}%`;
}, 200);
});
}
});
</script>