+7 (495) 000-00-00 0 0 0
Styleguide

Руководство по стилю

Все цвета, токены, компоненты и утилиты проекта. Используйте эту страницу как справочник при разработке новых блоков и страниц.

Палитра

Все цвета — CSS-переменные. Правьте assets/css/modules/00-variables.css.

Фон страницы
--color-bg
Поверхность
--color-surface
Поверхность 2
--color-surface-2
Поверхность 3
--color-surface-3
Граница
--color-border
Граница сильная
--color-border-strong
Текст
--color-text
Текст мягкий
--color-text-soft
Приглушённый
--color-muted
Бледный
--color-faint
Акцент
--color-accent
Акцент hover
--color-accent-hover
Успех
--color-success
Внимание
--color-warning
Опасность
--color-danger
Информация
--color-info

Типографика

Заголовки, тексты, инлайновые элементы. Базовый размер — 16px, межстрочный — 1.6.

Заголовки

H1 — Разработка сайтов и веб-приложений

H2 — Разработка сайтов и веб-приложений

H3 — Разработка сайтов и веб-приложений

H4 — Разработка сайтов и веб-приложений

H5 — Разработка сайтов и веб-приложений
H6 — Development / Design / Support

Текст

Lead-параграф. Используется под заголовком hero или в начале статьи — крупнее и мягче основного.

Обычный параграф. Мы проектируем и разрабатываем сайты, интернет-магазины и веб-приложения. Работаем прозрачно, показываем промежуточные результаты и запускаем проекты в срок.

Приглушённый текст для вторичных подписей, метаданных и подсказок.

Бледный текст для совсем неважных деталей.

Мелкий текст. Используйте класс .text-sm.

Крупный текст. Класс .text-lg.

Инлайновые элементы

Обычный текст, ссылка, жирный, курсив, inline_code, выделение, Ctrl+K, мелкий.

«Хороший сайт — тот, о котором не думаешь, когда им пользуешься».

<?php
// Пример кода
echo "Hello, World!";

Отступы

Шкала отступов — от --s-1 (4px) до --s-12 (96px).

Шкала

--s-1
--s-2
--s-3
--s-4
--s-5
--s-6
--s-7
--s-8
--s-9
--s-10
--s-11
--s-12

Радиусы

--radius-xs
--radius-sm
--radius-md
--radius-lg
--radius-xl
--radius-pill

Кнопки

Базовый класс .btn + модификатор.

Варианты

Размеры

С иконкой и состояния

Группа

Block

Формы

Инпуты, textarea, select, чекбоксы, радио, переключатели.

Поля

Мы не передаём email третьим лицам.
Введите корректный номер телефона.

Textarea

Размеры полей

Чекбоксы / Радио / Switch

Карточки

Базовый контейнер для блоков и превью.

Базовая карточка

Иконка, заголовок, текст. Используется для услуг, преимуществ, статей.

Интерактивная

Реагирует на курсор — подходит для ссылок на услуги.

Подробнее

С тенью

Усиленная тень для акцентных блоков или в hero.

Обновлено 2 дня назад

С акцентной рамкой

Привлекает внимание. Хороша для тарифов «рекомендуем».

Flat

Без рамки и фона, для встроенных случаев.

С утилитами

Текст акцентный, снизу — чипы.

Дизайн Код SEO

Бэйджи и чипы

Статусы, метки, фильтры.

Badges

Default Accent Success Warning Danger Info Со статусом

Chips

Все Услуги Кейсы Статьи

Уведомления

Информационные сообщения, статусы, предупреждения.

Информация

Мы работаем по договору. Все этапы фиксируются в актах.

Успешно

Заявка отправлена. Мы свяжемся с вами в течение 15 минут.

Внимание

Срок действия вашей заявки истекает через 24 часа.

Ошибка

Не удалось отправить форму. Попробуйте ещё раз.

Нейтральный

Базовый вариант без акцентной окраски.

Таблицы

Для сравнений, тарифов и списков.

Услуга Срок Стоимость Заказов
Лендинг1–2 неделиот 80 000 ₽42
Корпоративный сайт4–6 недельот 250 000 ₽18
Интернет-магазин6–10 недельот 450 000 ₽11
Веб-приложениепо ТЗиндивидуально7

Аккордеон

На <details>/<summary> — работает без JS.

Сколько стоит разработка сайта?

Стоимость зависит от задачи. Лендинг — от 80 000 ₽, корпоративный сайт — от 250 000 ₽. Точную оценку даём после брифинга.

Сколько занимает разработка?

Лендинг — 1–2 недели, корпоративный сайт — 4–6 недель, интернет-магазин — 6–10 недель. Сроки фиксируем в договоре.

Что входит в поддержку?

Обновления, мониторинг доступности, резервные копии, доработки по часам. Отчёт — раз в месяц.

Табы

Переключение между блоками контента.

Описание проекта. Рассказываем, что делает продукт и для кого он.

Характеристики: стек, интеграции, сроки.

Отзывы клиентов и метрики.

Иконки

Набор линейных SVG-иконок. Инлайн через <svg> или внешний спрайт.

check
close
menu
arrow-r
arrow-u
search
user
mail
phone
pin
clock
star
heart
shield
code
settings
plus
download
external

Прочее

Аватары, прогресс, спиннеры.

Аватары

ИВ АП СК WC

Прогресс

Спиннер

Hero-блок

Первый экран страницы.

Разработка сайтов

Создаём digital-продукты, которые работают на бизнес

Дизайн, frontend, backend и поддержка — полный цикл.

Утилиты

Классы-помощники для быстрого прототипирования.

Отступы

Классы: .mt-* .mb-* .p-*, где * ∈ {0, 2, 4, 6, 8}

Flex

flex justify-between items-center gap-4

Цвет

.c-accent · .c-muted · .c-success · .c-danger · .c-text

Прочее

.text-center .text-right .w-full .rounded .rounded-pill .hover-lift .sr-only

Токены

Шрифты, тени, транзишены, размеры контейнера.

--font-base
system-ui, Segoe UI, Roboto, Inter
--font-mono
JetBrains Mono, SF Mono, Menlo
--fs-base
16px
--lh-base
1.6
--shadow-sm
0 1px 2px rgba(0,0,0,.25)
--shadow-md
0 8px 24px rgba(0,0,0,.28)
--shadow-lg
0 24px 60px rgba(0,0,0,.4)
--t-fast
.15s ease
--t-base
.25s ease
--container
1200px
--header-h
72px

Пересобрать main.css из модулей: php tools/build_css.php или открыть /tools/build_css.php.

Капча-ползунок

Перетащите ползунок слева направо — кнопка «Отправить» станет активной. Работает мышью, пальцем и с клавиатуры (стрелка вправо / Enter / Space).

Живой пример — форма с капчей

Перетащите ползунок вправо

Кнопка станет активной после проверки

Состояние 1 — по умолчанию

Перетащите ползунок вправо

Состояние 2 — проверка пройдена

Проверка пройдена

Состояние 3 — ошибка (не дотянули)

Перетащите ползунок вправо

Разметка

<form>
  <!-- ...поля формы... -->

  <div class="slider-captcha">
    <div class="slider-captcha__fill"></div>
    <span class="slider-captcha__text"
          data-label="Потяните ползунок вправо"
          data-success-label="Проверка пройдена">Потяните ползунок вправо</span>
    <button type="button" class="slider-captcha__handle">
      <svg class="sc-icon-arrow">…</svg>
      <svg class="sc-icon-check">…</svg>
    </button>
    <input type="hidden" name="captcha_slider" value="">
  </div>

  <button type="submit" disabled>Отправить</button>
</form>

<script src="/assets/js/slider-captcha.js"></script>

Модальные окна — варианты

Базовое, форма, confirm, широкое, bottom-sheet и со стеклянной подложкой.

Открыть

Боковые панели (drawers)

Выезжают справа, слева, снизу и сверху. Управляются классом .is-open + подложкой.

Открыть

Матовое стекло

Подложка с эффектом размытия — .glass-backdrop. Панели — .glass-panel.

Backdrop — кликните кнопку, чтобы показать

Варианты подложки (классы)

.glass-backdrop
базовый (55% + blur 14px)
.glass-backdrop--subtle
легче (30% + blur 14px)
.glass-backdrop--dark
плотнее (72% + blur 14px)
.glass-backdrop--light
для светлых сайтов (22% + blur 14px)
.glass-backdrop--strong
максимум (85% + blur 24px)
.glass-backdrop--accent
акцентный (оранжевый + blur 16px)

Glass-панель поверх градиента

Frosted glass panel

Панель с полупрозрачным фоном, тонкой рамкой и размытием. Отлично смотрится поверх фото, градиентов и сложных фонов.

Варианты панели

.glass-panel — базовый
.glass-panel--light
.glass-panel--strong

Сетка и раскладка new

Контейнеры, сетки, gap. Примеры реагируют на ширину экрана.

.grid--2 / .grid--3 / .grid--4 / .grid--auto

1/2
2/2
1
2
3

12-колоночная сетка (пример на 4 колонки, адаптивно)

1
2
3
4

.container / .container--narrow

.container — max-width: var(--container)
.container--narrow — max-width: var(--container-narrow)

Тени new

Уровни elevation. Используйте токены, не пишите box-shadow руками.

--shadow-sm
--shadow-md
--shadow-lg

Анимации и движение

Спиннер, прогресс, hover-lift, avatar.

Спиннер и прогресс

hover-lift, .anim-slide-up

Наведите

hover-lift

Появление

anim-slide-up

Аватары

AB CD EF WC

Токены движения

--t-fast
0.15s ease — микро-взаимодействия
--t-base
0.25s ease — стандартные переходы

Z-index: слои

Токены слоёв. Не используйте магические числа — только переменные.

ТокенЗначениеГде применяется
--z-header100Sticky-шапка
--z-modal1000Модалки, drawers, tooltip, backdrop
--z-toast1100Уведомления/тосты

Точки перелома (breakpoints)

Максимальные ширины, на которых меняется раскладка.

ШиринаНазначениеЧто меняется
≤ 900pxПланшет3–4-колоночные сетки → 2 колонки; навигация складывается в меню
≤ 640pxНебольшой планшетМодалки и формы занимают всю ширину
≤ 600pxМобильный2-колоночные сетки → 1 колонка; подвал в одну колонку
≤ 480pxУзкий мобильныйУменьшаются размеры ползунка капчи и иконок

Проверка в iframe

360 px
card
card
card
1024 px
card
card
card
card
card

Доступность (a11y)

Контраст, фокус, семантика. Проверьте любую новую деталь по этим пунктам.

Контраст пары текст/фон

text / bg — AA+
text-soft / surface
muted / surface
#fff / accent
dark / success
#fff / danger

Фокус-обводка — общий стиль из reset.css

Ссылка .link

sr-only — для скринридеров и SEO

Скрытый текстЭтот абзац содержит .sr-only элемент, который не виден на экране, но доступен вспомогательным технологиям.

Чек-лист

  • Кликабельная зона не меньше 44×44 px
  • Видимый фокус на всех интерактивных элементах
  • Контраст основного текста ≥ 4.5:1
  • Иконки-кнопки имеют aria-label
  • Модалки закрываются по Esc
  • У форм есть связанные label

Skeleton-заглушки new

Показываются во время загрузки данных. Уважают prefers-reduced-motion.

Текст, заголовок, аватар, кнопка

Карточка в процессе загрузки

Pagination new

Постраничная навигация. Варианты выравнивания и pill-форма.

Базовый

Pill, выравнивание по центру

Tooltip new

Всплывающая подсказка. Наведение или фокус.

Все направления

Подсказка сверху Подсказка снизу Подсказка слева Подсказка справа

Длинный текст и фокус с клавиатуры

Тултип переносится по строкам, максимум 260px по ширине и открывается по фокусу с клавиатуры.

Loader — индикаторы загрузки new

Спиннер, точки, бары, пульс, бесконечная полоса и оверлей для блока. Все уважают prefers-reduced-motion.

Спиннер (ring) — размеры xs / sm / md / lg / xl

Dots — пульсирующие точки

Bars — эквалайзер

Pulse — расходящиеся круги

Bar — бесконечная полоса

Оверлей поверх блока (.is-loading)

Карточка

Содержимое временно недоступно — накладывается спиннер и блёклая маска.

Empty state — «здесь пока ничего нет» new

Для пустых списков, корзин, результатов поиска и т.п.

Базовый (.empty)

В корзине пока ничего нет

Добавьте товары из каталога — они появятся здесь.

В рамке (.empty--bordered)

Ничего не найдено

Попробуйте изменить запрос или сбросить фильтры.

Компактный в карточке

Ошибка загрузки

Не удалось получить данные.

Стилизованные скроллбары new

Варианты оформления полос прокрутки. Работают в Chrome/Edge/Safari (WebKit) и Firefox.

.scroll--thin — тонкий скролл (6px)

Прокрутите этот блок. Полоса тонкая, thumb цвета border-strong.

— строка 1

— строка 2

— строка 3

— строка 4

— строка 5

— строка 6

— строка 7

— строка 8

.scroll--accent — акцентный скролл

Трек цвета surface-2, thumb — accent с закруглением pill и внутренним отступом.

— строка 1

— строка 2

— строка 3

— строка 4

— строка 5

— строка 6

— строка 7

— строка 8

.scroll--pill — «таблетка»

Толстая полоса, thumb с обводкой под цвет фона, hover → accent.

— строка 1

— строка 2

— строка 3

— строка 4

— строка 5

— строка 6

.scroll--invisible — скролл скрыт, прокрутка работает

Полоса прокрутки не видна, но контент можно скроллить колесом или свайпом.

— строка 1

— строка 2

— строка 3

— строка 4

— строка 5

Горизонтальный скролл (обе оси)

Card 1
Card 2
Card 3
Card 4
Card 5
Card 6

Утилиты на любом элементе

.scrollbar-thin
6px, thumb border-strong
.scrollbar-accent
8px, thumb accent
.scrollbar-hidden
скрытая полоса

Steps / Wizard new

Пошаговый индикатор для оформления заказа, заявки, регистрации. Состояния: done / current / будущий.

Горизонтальный (шаг 3 из 4)

  1. Контакты Имя, телефон, email
  2. Услуга Что нужно сделать
  3. 3 Оплата Способ и подтверждение
  4. 4 Готово Мы свяжемся с вами

Компактный (шаг 2 из 5)

  1. Корзина
  2. 2Доставка
  3. 3Оплата
  4. 4Проверка
  5. 5Готово

Вертикальный (шаг 2 из 3)

  1. Заявка отправлена Мы получили ваши контакты
  2. 2 Обсуждаем задачу Менеджер свяжется в течение рабочего дня
  3. 3 Запуск проекта Подписываем договор и стартуем

Мини-визард с навигацией (JS-демо)

  1. 1Шаг 1
  2. 2Шаг 2
  3. 3Шаг 3

Pricing — карточки тарифов new

Три и более тарифов, выделение популярного, список возможностей, кнопка действия.

Старт

Для первой версии сайта или лендинга.

40 000 / проект

Итоговая стоимость зависит от объёма.

Выбрать
  • Дизайн до 5 страниц
  • Адаптив под мобильные
  • Базовая SEO-оптимизация
  • Личный кабинет
  • Интеграции с CRM

Индивидуально

Веб-приложение, интернет-магазин, интеграции.

от 250 000

Смета после брифа и оценки.

Обсудить
  • Любая сложность и объём
  • Личный кабинет и API
  • Интеграции с 1С, CRM
  • Выделенная команда
  • Поддержка 24/7

Stats — цифры и счётчики new

Крупные метрики для главной и страницы «О нас». Варианты: базовый, в рамке, с разделителями, акцентный.

Базовый

120+
проектов запущено
8
лет на рынке
98%
клиентов возвращаются
4.9
средняя оценка

В рамке, с разделителями

3нед.
средний срок запуска
24/7
мониторинг проектов
50+
интеграций

Компактный + акцентный

1.2с
загрузка главной
90+
Lighthouse Performance
100/100
Accessibility

Bento grid — плитки разных размеров new

Современная раскладка для главной: чередование размеров, акцентные плитки, картинки с градиентом.

Микс размеров и стилей

Разработка под ключ

Проектируем, разрабатываем, запускаем и поддерживаем. Один подрядчик — весь цикл.

Обсудить проект

Скорость запуска

Первая версия сайта — за 3–4 недели.

Дизайн-система

Собираем UI-kit и стили с первого дня — легко масштабировать.

Код без легаси

Понятная структура и документация.

SEO из коробки

Мета-теги, schema.org, скорость.

Поддержка

Обновления и мониторинг после запуска.

Плитка с картинкой

Кейс: сайт клиники

Ускорили загрузку, добавили онлайн-запись и личный кабинет пациента.

Кейс: маркетплейс

Каталог, интеграция с 1С, автоматическая выгрузка на маркетплейсы.

Классы-модификаторы

.bento__card--hero
Большая плитка 3×2, во всю ширину секции.
.bento__card--wide / --half
2 колонки в ряду.
.bento__card--std / --third
3 колонки в ряду.
.bento__card--tall
2 строки высоты.
.bento__card--accent
Акцентная заливка градиентом.
.bento__card--mesh
Mesh-фон из двух радиальных градиентов.
.bento__card--image
Фон-картинка с градиентным затемнением и zoom при наведении.

Advanced table new

Таблица с сортировкой, поиском, фильтрами по статусу и услуге, выбором строк, sticky-шапкой и пагинацией.

Заказы — поиск, фильтры и сортировка работают вместе

0 / 5
Заказы 0 выбрано
Статус Действия
00125 Иван Петров Корпоративный сайт 120 000 ₽ Оплачен
00124 ООО Ромашка Интернет-магазин 280 000 ₽ В работе
00123 Сидорова А. Лендинг 45 000 ₽ Черновик
00122 ООО ТехноПарк Веб-приложение 450 000 ₽ Просрочен
00121 Кофейня №1 Промо-страница 32 000 ₽ Оплачен

Ничего не найдено

Попробуйте изменить запрос или сбросить фильтры.

Возможности

Поиск
Живой поиск по клиенту и услуге (без учёта регистра).
Фильтры
Dropdown по статусу и по услуге. Комбинируются с поиском.
Сортировка
Клик по .atable__sort. Повторный клик меняет направление.
Выбор строк
Чекбокс в первой колонке + «выбрать все». Учитывает только видимые строки.
Счётчик и диапазон
N / M в фильтр-баре и «1–5 из N» в футере.
Пустое состояние
Если ничего не найдено — показывается блок .atable__empty.
Сброс
Кнопка «Сбросить» очищает все фильтры и поиск.

Charts — SVG-графики new

Line, Bars, Donut, Sparkline, Stacked bars. Без внешних библиотек, только SVG и CSS. Адаптируются к светлой и тёмной теме.

Line + Area — динамика за 12 месяцев

Заявки

последние 12 месяцев

Заявки
Янв Мар Май Июл Сен Ноя

Bars — сравнение месяцев

Выручка по месяцам

в тысячах ₽

Пн Вт Ср Чт Пт Сб Вс

Donut — распределение источников

Источники заявок

за последние 30 дней

42% Поиск
Поиск42%
Соцсети30%
Реклама20%
Прочее8%

Sparkline — встроенные мини-графики

12 480 +18%
3 210 −12%

Stacked progress bars — прогресс по метрикам

Трафик
78%
Конверсия
42%
Возвраты
12%
Lighthouse
92%

Классы и утилиты

.chart
Базовый контейнер: рамка, фон, отступы.
.chart__head / __title / __subtitle / __legend
Общая шапка с заголовком и легендой.
.chart-line
SVG с классами для area, path, grid, dot, axis.
.chart-bars
Столбчатая диаграмма.
.chart-donut
Круговая с центром и легендой справа.
.chart-spark
Мини-график рядом с числом, up/down варианты.
.chart-stack
Горизонтальные полосы прогресса с label и value.
.chart--accent / info / success / warning
Цвет акцента для bars.

Большой слайд (Hero slider) new

Баннер во всю ширину: автосмена, стрелки, точки, свайпы, клавиатура, пауза при наведении.

Разработка сайтов

Проектируем сайты и веб-приложения, которые работают на бизнес

От прототипа до запуска. Показываем промежуточные результаты каждую неделю и следим за метриками.

Интернет-магазины

Каталог, оплата, доставка — всё в одном решении

Интеграции с CRM и складом, готовность к росту трафика и простое управление контентом.

Поддержка

Берём проекты на сопровождение и развитие

Обновления, мониторинг, доработки. Отвечаем в рабочее время и держим метрики в норме.

Разметка и поведение

.hero-slider
Общий контейнер. Занимает всю ширину, задаёт высоту через min-height clamp().
data-autoplay
true / false — автосмена слайдов.
data-interval
Миллисекунды между сменами (6000 по умолчанию).
Пауза
Автосмена останавливается при наведении и когда вкладка скрыта.
Свайп / клавиатура
Влево-вправо мышью и пальцем, ← → при фокусе на слайдере.

Фоновые блоки new

Градиенты, меш-фон, тёмная основа. Все — с поддержкой светлой и тёмной темы.

.bg-gradient-accent

Акцентный градиент

Тёплый переход от основного акцентного цвета к его светлому соседу.

.bg-gradient-cool

Холодный градиент

Синий → бирюзовый. Подходит для технологических блоков и услуг.

.bg-gradient-sunset

Закатный градиент

Янтарь → красный → фиолетовый. Для промо-блоков и обложек.

.bg-gradient-mesh — многолучевой mesh-фон

Mesh-фон

Несколько радиальных градиентов в разных углах. Работает в обеих темах.

.bg-dots — SVG-паттерн точек

Точки на тёмной основе

Классический мелкий паттерн для блоков с текстом.

.bg-grid — сетка

Сетка 32×32

Хорошо читается под заголовками и цифрами.

.bg-diagonal — диагональные штрихи

Диагональные штрихи

Добавляет динамику и «текстурность» блоку.

Комбинирование

Классы фонов и паттернов комбинируются: .bg-gradient-mesh.bg-dots.bg-grid, .bg-gradient-accent.bg-diagonal — паттерн рисуется поверх фоновой заливки.

SVG-фигуры на фоне new

Blob-пятна с размытием, волна, кольца, круги. Комбинируются с любым фоном.

Blob-пятна с blur и mesh-фоном

Blob + mesh

Два SVG-пятна размыты через filter:blur(40px / 60px). Отлично смотрятся на ярком mesh-фоне.

Wave-волна внизу блока

Секция с волной

Волна рисуется как SVG, прижата к нижней границе блока.

Кольца и круги

Кольца на тёмном фоне

Тонкие концентрические окружности создают глубину без «шума».

SVG-сетка в углу

Сетка в углу

SVG-паттерн с прозрачностью — тонкий технический акцент.

Классы

.bg-shape
Общий класс: absolute, z-index:-1, pointer-events:none.
.bg-shape--blob
Верх-справа, blur 40px.
.bg-shape--blob-2
Низ-слева, blur 60px.
.bg-shape--wave
Волна внизу, растянута по ширине.
.bg-shape--ring
Кольца сверху-слева.
.bg-shape--circles
Крупные круги в правом нижнем углу.
.bg-shape--grid-svg
SVG-паттерн в правом верхнем углу.

Мутное стекло поверх фона new

Панели с backdrop-filter: blur. Показывают контент поверх ярких фонов, сохраняя читаемость.

Панель на mesh-фоне

Стандартное стекло

Панель пропускает фон и размывает его. Идеально для блоков с текстом поверх изображения.

Светлое стекло

Более прозрачная панель для крупных изображений и акцентных фото.

Сильное стекло

Максимальный blur 28px + насыщенность. Фон почти не читается — подходит для длинных текстов.

Акцентное стекло

Полупрозрачная плашка основного цвета с блюром — для блоков-CTA.

Стекло поверх SVG-фигур

Панель + Blob

Позади панели — SVG-пятно с размытием. Стекло «затягивает» его внутрь и делает фон глубже.

Классы

.bg-glass-panel
Базовая панель, blur 18px saturate 160%.
.bg-glass-panel--light
Более прозрачная (rgba 14%).
.bg-glass-panel--strong
blur 28px saturate 180%, плотный фон 80%.
.bg-glass-panel--accent
Акцентный оттенок (rgba 18% accent).

Поддержка тем

Все панели автоматически адаптируются к светлой теме: [data-theme="light"] .bg-glass-panel использует белую подложку вместо тёмной. Включите светлую тему в шапке, чтобы увидеть разницу.

Toast / Уведомления new

Всплывающие сообщения в углу экрана. API: Toast.success(title, text), Toast.error(), Toast.info(), Toast.warning().

Типы

С действиями и без автозакрытия

Позиции (Toast Stack)

API

Toast.show(opts)
{type,title,text,duration,position,actions[]}
Toast.info/success/warning/error
Короткие вызовы (title, text)
duration
мс, 4200 по умолчанию. 0 — не закрывать автоматически.
actions[]
{label, onClick} — кнопки внутри тоста.

Корзина, избранное, сравнение new

Демо через PHP-сессии. Кнопки «В корзину», избранное, сравнение, удаление. Состояние сохраняется на сервере — после перезагрузки всё остаётся на месте.

Счётчики в шапке — обновляются сами

0 0 0

Кликните на любую кнопку в демо ниже — счётчики обновятся сами.

Каталог — 6 демо-товаров

Стол дубовый SALE

Стол дубовый

Массив дуба, покрытие масло-воск

12 500 ₽ 15 000 ₽
Стул венский

Стул венский

Гнутая древесина, классическая форма

4 200 ₽
Шкаф резной NEW

Шкаф резной

Ручная резьба, встроенная подсветка

28 000 ₽
Комод с ящиками

Комод с ящиками

6 ящиков, доводчики Blum

18 900 ₽
Кресло кожаное SALE

Кресло кожаное

Натуральная кожа, механизм качания

34 500 ₽ 39 000 ₽
Полка настенная Нет в наличии

Полка настенная

Лаконичный дизайн, скрытый крепёж

3 400 ₽

Мини-корзина — что обычно во всплывающей панели

Корзина

0 товара

Корзина пуста

Добавьте товары из каталога

Итого
0 ₽

Сравнение и избранное new

Те же данные, что и в каталоге выше — только представленные как отдельные списки. Обновляются автоматически при клике на любую кнопку.

Сравнение — таблица с атрибутами (максимум 4 товара)

Список сравнения пуст

Нажмите на кнопку ⇄ у любого товара в каталоге выше.

Избранное — сохранённые товары

В избранном пока пусто

Нажмите на сердечко у товара, чтобы сохранить его.

Пометка после перезагрузки

Откройте любую страницу сайта, добавьте товары, обновите страницу — всё на месте. Работает через PHP-сессии (cookie живёт 30 дней).

Кнопка «В корзину»
Меняется на «В корзине», получает класс is-in-cart, в шапке появляется счётчик.
Сердечко (избранное)
Заливается красным, класс is-active, счётчик рядом.
Стрелки (сравнение)
Окрашиваются акцентом, класс is-active. Максимум 4 товара.
После перезагрузки
Сервер при рендере сразу ставит классы из $_SESSION — кнопки уже помечены, без мигания.

Как это работает

Сервер
includes/cart.php — функции cart_add, cart_remove, fav_toggle, compare_toggle. Пишут в $_SESSION.
AJAX
POST /api/cart.php с action и sku. Возвращает свежее состояние и счётчики.
Клиент
assets/js/cart-ui.js — слушает клики по [data-cart-action], шлёт AJAX, обновляет интерфейс, показывает тосты.
Разметка
Атрибуты: data-cart-action="cart-add", data-sku="sku-001". Работают на любой странице.
Действия
cart-add, remove, fav-toggle, fav-remove, compare-toggle, compare-remove, clear, fav-clear, compare-clear.
Классы состояния
Навешиваются сервером при рендере + JS после AJAX: is-in-cart, is-active, is-loading.

Готовая разметка кнопок — скопируйте

<button type="button" class="btn-cart" data-cart-action="cart-add" data-sku="sku-001">
    <span class="btn-cart__label">В корзину</span>
</button>

<button type="button" class="btn-fav" data-cart-action="fav-toggle" data-sku="sku-001" aria-label="В избранное">
    <svg viewBox="0 0 24 24" ...></svg>
</button>

<button type="button" class="btn-compare" data-cart-action="compare-toggle" data-sku="sku-001" aria-label="К сравнению">
    <svg viewBox="0 0 24 24" ...></svg>
</button>

Скопируйте разметку в любой шаблон — JS и стили подхватят автоматически, потому что cart-ui.js и 46-cart.css уже подключены глобально.

Оформление заказа new

Форма с реальной отправкой письма на 5954399@mail.ru. Заказ уходит через mail_send() в формате HTML + копия клиенту.

В корзине пусто

Добавьте товары из каталога, чтобы оформить заказ.