Полное техническое задание на дизайн и вёрстку landing page для экспертов в нише психологии, коучинга, консультирования. Основано на реализованном проекте Алёны Архиповой.
Палитра построена на тёплых бежевых тонах — создаёт ощущение безопасности и уюта без агрессии. Единственный акцент — терракотовый, используется только для CTA и ключевых элементов.
:root {
--bg: #F5F1EB; /* Основной фон */
--bg-alt: #EFE9E2; /* Чередующийся фон */
--bg-dark: #EDE6DD; /* Акцентный фон */
--card: #FFFFFF; /* Фон карточек */
--text: #2E2E2E; /* Основной текст */
--muted: #7A736C; /* Приглушённый текст */
--head: #1F1F1F; /* Заголовки + тёмная шапка/футер */
--cta: #C46A4A; /* Кнопки и акценты */
--ctah: #8F442C; /* Hover состояние кнопки */
--accent: #D6A15C; /* Золотые разделители */
} Два шрифта. Один — для заголовков, создаёт элегантность и тепло. Второй — для текста, обеспечивает читаемость.
| Элемент | Размер | Вес | Шрифт |
|---|---|---|---|
| H1 (hero) | clamp(2.1rem, 5vw, 3.4rem) | 500 | Cormorant Garamond |
| H2 (секции) | clamp(1.7rem, 3.5vw, 2.5rem) | 500 | Cormorant Garamond |
| H3 (карточки) | clamp(1.1rem, 2vw, 1.4rem) | 500 | Cormorant Garamond |
| Body | 16px / 1rem | 400 | Manrope |
| Body small | 14–15px / 0.88–0.93rem | 400 | Manrope |
| Кнопка | 0.9rem | 600 | Manrope |
| Label (uppercase) | 11px | 700 | Manrope |
| Микротекст | 12px | 400 | Manrope |
| Italic-цитата | 1.05–1.1rem | 400 italic | Cormorant Garamond |
| Контекст | Значение |
|---|---|
| Заголовки H1, H2 | 1.2 |
| Основной текст | 1.75 |
| Мелкий текст, карточки | 1.6–1.65 |
| Цитаты курсивом | 1.7 |
| Кнопки | 1.35 |
<link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Manrope:wght@300;400;500;600&display=swap" rel="stylesheet">
.wrap {
max-width: 860px;
margin: 0 auto;
/* Горизонтальные отступы задаются у секции: padding: 100px 24px */
} | Экран | Padding секции |
|---|---|
| Desktop (> 760px) | 100px сверху и снизу |
| Mobile (≤ 760px) | 60px сверху и снизу |
.div {
width: 40px;
height: 2px;
background: #D6A15C; /* золотой акцент */
margin: 24px 0;
} | Тип карточки | Padding desktop | Padding mobile |
|---|---|---|
| Большая (cases, prices) | 28–32px | 20–22px |
| Средняя (steps, safety) | 24–28px | 18–20px |
| Малая (sp-item, tags) | 14–18px | 12–14px |
| Сетка | Gap desktop | Gap mobile |
|---|---|---|
| Cases, Steps (3 колонки) | 18px | 12px |
| Safety, Prices (2 колонки) | 14px | 10px |
| SP-grid (2 колонки) | 13px | 10px |
--r: 12px; /* карточки */ border-radius: 10px; /* кнопки, инпуты */ border-radius: 40px; /* теги/чипы */ border-radius: 16px; /* квиз-контейнер */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--cta); /* #C46A4A */
color: #fff;
font-family: 'Manrope', sans-serif;
font-size: 0.9rem;
font-weight: 600;
padding: 17px 30px;
border-radius: 10px;
border: none;
cursor: pointer;
text-decoration: none;
transition: background 0.2s, box-shadow 0.2s;
min-height: 54px;
letter-spacing: 0.01em;
white-space: normal; /* перенос текста */
line-height: 1.35;
}
.btn:hover { background: var(--ctah); box-shadow: 0 8px 20px rgba(0,0,0,.1); }
.btn:active { transform: scale(0.98); }
/* На мобиле: width: 100%; display: flex; */ .label {
display: block;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--cta);
margin-bottom: 16px;
} .card {
background: var(--card); /* #FFFFFF */
border-radius: var(--r); /* 12px */
padding: 28px 24px;
box-shadow: 0 4px 12px rgba(0,0,0,0.04);
}
/* Нет border — только тень. Это важно для мягкого стиля. */ .quote-block {
padding: 22px 26px;
background: var(--card);
border-radius: var(--r);
box-shadow: 0 6px 16px rgba(0,0,0,0.05);
font-family: 'Cormorant Garamond', serif;
font-style: italic;
font-size: 1.1rem;
color: var(--head);
line-height: 1.7;
} .hero-note {
padding: 18px 22px;
background: rgba(196,106,74, 0.07); /* полупрозрачный CTA */
border-left: 3px solid var(--cta);
border-radius: 0 8px 8px 0;
font-size: 0.9rem;
line-height: 1.7;
} .sp-item {
padding: 18px 22px;
border-left: 2px solid var(--accent); /* золото */
background: rgba(255,255,255,0.4);
border-radius: 0 8px 8px 0;
} .tag {
padding: 9px 16px;
background: var(--card);
border-radius: 40px;
font-size: 0.82rem;
font-weight: 500;
box-shadow: 0 2px 6px rgba(0,0,0,0.04);
} .sticky {
display: none; /* показывать только на мобиле */
position: fixed;
bottom: 0; left: 0; right: 0;
z-index: 100;
padding: 10px 16px 18px;
background: var(--bg);
box-shadow: 0 -4px 20px rgba(0,0,0,0.08);
}
@media(max-width: 760px) { .sticky { display: block; } } /* Открытие через JS: item.classList.toggle('open') */
.fq-a { max-height: 0; overflow: hidden; transition: max-height 0.4s ease; }
.fq.open .fq-a { max-height: 300px; }
/* Стрелка */
.fq-arr::after { content:''; display:block; width:7px; height:7px;
border-right: 2px solid var(--cta); border-bottom: 2px solid var(--cta);
transform: rotate(45deg); transition: transform 0.3s; }
.fq.open .fq-arr::after { transform: rotate(-135deg); } Каждый блок чередует фоны: --bg → --bg-alt → --bg → --bg-dark и т.д. Никогда два подряд одинаковых фона.
Сетка: 2 колонки (текст + визуал), gap 60px. На мобиле — 1 колонка.
Левая часть: Лейбл-имя (uppercase, --cta) → H1 → italic-подзаголовок → 3 строки боли → акцентная плашка (hero-note) → CTA-кнопка → микротекст под кнопкой.
Правая часть: Фото эксперта (aspect-ratio 3/4, border-radius 20px) ИЛИ анимированный SVG-визуал.
Нет навигации и хедера — лендинг начинается сразу с hero.
Структура: Лейбл → H2 → золотой разделитель → 4–5 абзацев текста от первого лица (описание состояния ЦА) → italic-цитата в карточке → CTA.
Ключевое: текст должен вызывать эффект «это про меня». Говорим словами аудитории, не экспертными терминами.
Структура: Лейбл → H2 → сетка 2×2 с карточками-обещаниями (иконка + текст) → italic-абзац с главным посылом → CTA.
4 карточки: что эксперт НЕ будет делать. Закрываем страхи из ЦА: «не буду торопить», «не буду ломать», «не скажу как жить», «не приму решение за тебя».
Структура: Лейбл → H2 → сетка из 3 шагов (карточки с номером, заголовком, описанием) → микротекст об отсутствии обязательств → CTA.
Шаги: Должны быть конкретными, снимать страх неизвестности. Цифры большие, прозрачные (opacity 0.15).
Структура: Лейбл → H2 → вводный абзац → сетка 2×2 SP-items (список с золотой линией слева) → блок поддержки → CTA.
Задача: объяснить чем отличается от конкурентов. Конкретно и практично, без абстракций.
Структура: Лейбл → H2 → сетка из 3 карточек (аватар-буква → имя+роль → «Было» → «Стало» → цитата).
Формат кейса: Конкретный человек (имя, возраст, профессия) + контраст до/после + одна короткая цитата в кавычках курсивом.
Аватар: если нет фото — инициал на фоне --bg-dark, шрифт Cormorant, цвет --cta.
Структура: Лейбл → H2 → вводный абзац → теги с методологиями → список с галочками → итоговая карточка-обещание.
Теги: border-radius 40px, без фона — только тень. Перечисляем методологии, образование, подходы.
Структура: Лейбл → H2 → сетка 2 карточки (одна тёмная --head, одна светлая) → микротекст → CTA.
Тёмная карточка = приоритетный тариф (индивидуальный). Цена крупно (Cormorant, 2.2rem). Пометка об ограниченных местах.
Не называть кнопку «Купить» — только «Записаться», «Начать с диагностики».
Структура: Лейбл → H2 → список аккордеона (8–10 вопросов).
Вопросы: формулируем от первого лица («А вдруг мне...», «А если я...»). Ответы — спокойные, без давления.
Аккордеон: только один открыт одновременно. Стрелка поворачивается.
Структура: Лейбл → H2 → подзаголовок → карточка квиза (прогресс-бар + вопросы + навигация) → микротекст.
Квиз: 4 вопроса с вариантами ответов + 5-й шаг сбора контактов (имя, телефон, чекбокс ПД). Автопереключение после выбора + кнопки Назад/Далее.
Данные летят: в Telegram-бот через fetch API (без сервера).
Структура: Крупная цитата Cormorant (2rem) по центру → подпись с шагами → CTA-кнопка → микротекст.
Текст: личный, обращение к конкретному состоянию («если ты сейчас в точке...»). Не рекламный, не агрессивный.
/* CSS */
.fi {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.65s ease-out, transform 0.65s ease-out;
}
.fi.on {
opacity: 1;
transform: none;
}
/* JS — IntersectionObserver */
var obs = new IntersectionObserver(function(entries) {
entries.forEach(function(el) {
if (el.isIntersecting) {
el.target.classList.add(‘on’);
obs.unobserve(el.target);
}
});
}, { threshold: 0.08 });
document.querySelectorAll(’.fi’).forEach(function(el) { obs.observe(el); }); /* Концентрические кольца с пульсацией */
@keyframes pulse1 {
0%, 100% { r: var(--r0); opacity: 0.6; }
50% { r: var(--r1); opacity: 1; }
}
/* Применяется: */
.cv-r1 { animation: pulse1 4s ease-in-out infinite; }
.cv-r2 { animation: pulse1 4s ease-in-out infinite 0.8s; }
.cv-r3 { animation: pulse1 4s ease-in-out infinite 1.6s; }
/* Каждое кольцо смещено на 0.8s → эффект волны */ | Элемент | Transition |
|---|---|
| Кнопка (цвет) | background 0.2s ease |
| Кнопка (тень) | box-shadow 0.2s ease |
| Кнопка (клик) | transform: scale(0.98) |
| FAQ стрелка | transform 0.3s ease |
| FAQ контент | max-height 0.4s ease |
| Вариант квиза | border-color 0.2s, background 0.2s |
| Прогресс-бар квиза | width 0.4s ease |
| Fade-in секций | opacity 0.65s, transform 0.65s |
| SVG кольца | animation 4s ease-in-out infinite |
| Инпут (фокус) | border-color 0.2s ease |
| Ссылки topbar | color 0.2s ease |
| Брейкпоинт | Изменения |
|---|---|
| ≤ 760px | Основной мобильный брейкпоинт. Все сетки → 1 колонка. Padding секций 60px. Sticky-кнопка внизу. |
| ≤ 480px | H1: 1.9rem, H2: 1.5rem |
@media(max-width: 760px) {
section { padding: 60px 20px; }
/* Грид → 1 колонка */
.steps, .cases, .sp-grid, .safety-grid, .prices {
grid-template-columns: 1fr;
}
/* Все CTA-кнопки — на всю ширину */
section .btn {
display: flex;
width: 100%;
justify-content: center;
box-sizing: border-box;
}
/* Отступ под sticky-кнопку */
body { padding-bottom: 86px; }
/* Показать sticky */
.sticky { display: block; }
} /* SVG-визуал идёт ВЫШЕ текста на мобиле */
/* Реализуется через order или порядок в HTML */
.clarity-visual { max-width: 260px; margin: 0 auto; }
.hero-inner { gap: 36px; padding: 60px 20px 72px; } | Шаг | Содержание |
|---|---|
| Шаг 1–4 | Вопросы с 4 вариантами ответов. Автопереход (340ms) + кнопки Назад/Далее. |
| Шаг 5 | Сбор контактов: Имя, Телефон, Чекбокс ПД. |
| Done | Экран успеха + кнопка «Написать в Telegram». |
// Кнопка "Далее" появляется только после выбора ответа
// Кнопка "Назад" — со 2-го вопроса
// При возврате — сохранённый ответ подсвечен
// Нельзя пойти вперёд без ответа (показывается подсказка)
document.querySelectorAll(’.qb’).forEach(function(btn) {
btn.addEventListener(‘click’, function() {
qa[‘q’ + q] = this.dataset.v; // сохраняем ответ
document.getElementById(‘qbtn-next’).style.display = ‘block’;
setTimeout(function() { qStep++; qGo(qStep); }, 340); // автопереход
});
}); // Не нужен сервер — прямой вызов Telegram Bot API
var BOT = 'ВАШ_ТОКЕН'; // от @BotFather
var CID = 'ВАШ_CHAT_ID'; // от @userinfobot
fetch(‘https://api.telegram.org/bot’ + BOT + ‘/sendMessage’, {
method: ‘POST’,
headers: { ‘Content-Type’: ‘application/json’ },
body: JSON.stringify({
chat_id: CID,
text: msg,
parse_mode: ‘Markdown’
})
}); | Что нужно | Как получить |
|---|---|
| Токен бота | Написать @BotFather → /newbot → получить токен |
| Chat ID | Написать @userinfobot → он ответит вашим ID |
???? *Новая заявка с сайта* ???? *Имя:* Мария Иванова ???? *Телефон:* +79001234567 ???? *Ответы:* 1️⃣ Качели: то тепло, то холод 2️⃣ Страх ошибиться и потерять отношения 3️⃣ Очень срочно — я на пределе 4️⃣ Да, если увижу смысл и результат
| Элемент | Требование |
|---|---|
| Договор оферты | Отдельная страница oferta.html |
| Согласие на ПД | Отдельная страница consent.html |
| Чекбокс в форме | Ссылка на согласие на ПД. По умолчанию — checked. |
| Cookie-баннер | Появляется при первом визите. Скрывается после клика. |
| Футер | ФИО, статус (самозанятый/ИП), ИНН, город, email |
Иванова Мария Сергеевна Самозанятая (НПД) / ИП ИНН 000000000000 г. Город email@example.com
// Показываем только при первом визите
if (localStorage.getItem('ck')) {
document.getElementById('cookie').style.display = 'none';
}
// Кнопка «Понятно»
document.getElementById(‘cookie’).style.display = ‘none’;
localStorage.setItem(‘ck’, ‘1’); /* Белый фон, тёмный текст — максимальная читаемость */
body { background: #FFFFFF; color: #1F1F1F; font-size: 15.5px; line-height: 1.85; }
h2 { text-transform: uppercase; letter-spacing: 0.04em;
border-bottom: 1px solid #F0EDEA; padding-bottom: 10px; }
/* Шрифт тот же: Manrope */