skill-task-card__task — формулировка задачи от бизнеса.
skill-task-card__solution — первый подход к решению.
Второй пункт в зоне решений.
Документация · UI
Токены, типографика, сетка, компоненты и блоки лонгрида кейса
Переключайте тему, акцент и шрифт через плавающую панель справа. При глобальных правках стилей (токены, компоненты, блоки лонгрида) обновляйте и эту страницу — живой каталог UI проекта.
Акцент и «холод/тепло» всего UI задаются тремя числами в модели HSL (Hue — оттенок,
Saturation — насыщенность, Lightness — светлота) на <html>. Из них собирается
--accent и производные токены; нейтральные фоны слегка подмешивают тот же оттенок
(--neutral-accent-tint). Светлая/тёмная тема — data-theme, mesh —
data-mesh-bg. Меняется в FAB справа.
--theme-h, --theme-s, --theme-l--theme-h — оттенок (Hue), позиция на цветовом круге 0–360°. Сдвиг hue
перекрашивает кнопки, ссылки, mesh-градиент и квадратные акценты (--accent-square-2 …
4), не трогая вручную каждый hex.
--theme-s — насыщенность: насколько «чистый» цвет, а не серый.
--theme-l — светлота акцента: темнее или ярче основной фирменный тон
(в панели обычно ограничен диапазоном, чтобы кнопки оставались читаемыми).
В CSS это выглядит так:
--accent: hsl(var(--theme-h) calc(var(--theme-s) * 1%) calc(var(--theme-l) * 1%)).
Значения пишутся в localStorage (siteThemeV1) и подставляются inline-скриптом в
head, чтобы не было вспышки «чужого» цвета при загрузке.
Дополнительно: квадратичные оттенки mesh — --accent-square-2 … 4; они зависят от hue.
Пара шрифтов — data-font на <html> (FAB «Типографика»): задаёт
--font-accent (заголовки) и --font (проза). Шкала в таблицах: класс, пример, назначение.
data-font |
Стек | Где |
|---|---|---|
merriweather |
Merriweather + Alice | Пара по умолчанию; Alice — основной текст, Merriweather — акцентные заголовки |
mono |
Source Code Pro + PT Mono | Моноширинная пара |
geologica |
Geologica + PT Sans | Гротеск + нейтральная проза |
| Класс | Пример | Назначение |
|---|---|---|
.hero__eyebrow |
Подпись секции |
Hero, ввод кейса |
.hero__title |
Display заголовок |
H1 главной; на DS уменьшен для колонки |
.section__title |
Секция |
«Навыки», «Портфолио», контакты; основной шрифт, без капса |
.case-page__h1 |
Заголовок страницы |
H1 кейса / Design System |
.case-page__sub |
Лид под заголовком |
Подзаголовок под H1 |
.section__prose |
Основной текст абзаца. |
Проза, списки, ссылки в статье |
h2 в .case-article |
Подсекция H2 |
Разделы лонгрида (как «Цвета») |
h3 в .case-article |
Подсекция H3 |
Подразделы внутри H2; отступы в main.css: сверху 3.25rem, снизу 1.5rem, после figure 4rem, h3+h3 3.5rem |
Пример ритма:
Инлайн code и блок:
--font: "Alice", system-ui, serif;
--font-accent: "Merriweather", var(--font);
Заголовки используют clamp() — масштаб от вьюпорта; подробнее в разделе «Сетка».
Отдельной 12-колоночной сетки нет: full-bleed layout с боковыми полями
--space и локальными CSS Grid внутри секций. Контентная колонка DS и кейсов —
.case-article (max-width 48rem).
--space: clamp(1rem, 4vw, 2.75rem) — горизонтальные поля + safe-area-inset.--max: none — без фиксированной «коробки» 1200px; ширина = вьюпорт минус padding..section — вертикальные отступы через clamp(); .section__inner центрирует блок..section--tight — компактнее по вертикали (кейсы, эта страница).| От | Что меняется |
|---|---|
860px |
.hero__grid → 2 колонки 1.15fr 0.85fr |
760px / 1180px |
.projects-carousel: --projects-visible 1 → 2 → 3 карточки |
720px |
.skills-category__grid → 2 колонки |
1024px |
Навыки: 6-колоночная мозаика (grid-column: span …) |
560px / 1024px |
.contact-grid → 2 → 4 колонки |
48rem / 28rem |
Галерея кейса: ≤2 col → 1 col |
640px |
case-media-gallery--wide схлопывается в ширину колонки |
Схема .hero__grid (сжато до 860px):
Демо .contact-grid (плейсхолдеры, без переходов):
Навыки: мозаика на широком экране — см.
главную, #skills. Портфолио: карусель на
100vw с --projects-card-width и JS-прокруткой — на главной
#projects.
.case-media--wide, .case-media-gallery--wide и .case-callout шире
колонки статьи: min(100vw − 2×padding, content + 8rem), с полями --space. На узком
экране (до 640px) wide схлопывается в ширину колонки. Кадры с data-image-viewer — обводка и hover
как у .case-video-shell (живые примеры — демо элементов кейса). Подпись под видео —
figcaption по центру колонки.
Fluid type: clamp() на .hero__title, .section__title,
.case-page__h1. Скругления (data-radius) сетку не меняют. Для длинных скринов и
анимаций учитывается prefers-reduced-motion: reduce.
Живые примеры; оболочка (шапка, FAB, футер, cookie) уже подключена на этой странице.
.btn .btn--primary | secondary | ghost · .btn--flat | raised · .btn__icon
.hero__tags / .hero__tag
.portfolio-card__tags / .portfolio-card__tag
.portfolio-card и дочерние BEM-классы
Пока img ещё не загрузился, initImageLoadPlaceholder вешает
.is-img-loading на картинку и .has-img-loading на обёртку. Слой фона —
::before, один блеск слева направо — ::after (img-ph-shine-sweep).
Иконки, SVG и мелкие картинки до 40px пропускаются;
отключить точечно: data-no-img-placeholder. Ниже — зафиксированное демо (на сайте классы снимаются
после load).
.has-img-loading · .is-img-loading · .img-ph-demo (демо заглушки)
skill-task-card__task — формулировка задачи от бизнеса.
skill-task-card__solution — первый подход к решению.
Второй пункт в зоне решений.
.skill-task-card__task · __solutions · __solution
Акцентный блок лонгрида: шире колонки (как wide-медиа), текст в .case-callout__content чуть
крупнее основного абзаца.
.case-callout · .case-callout__emoji · .case-callout__emoji--pulse · .case-callout__content
На главной в сетке четыре карточки (1→2→4 колонки). Здесь два примера — сетка принудительно в две колонки.
.contact-card--link · --action · --brand-*
На главной полоса .section--surface визуально читается через mesh; в кейсах фон страницы
ровный — ниже компактное демо с background: var(--surface).
Фрагмент .section.section--surface + .section__inner
.section · .section--surface · .section--tight · .section__inner
Разметка лонгрида кейса: медиа и галереи, карточки ссылок, видео, callout, wide-блоки и прочие partials. Живой эталон со всеми вариантами — на отдельной странице; оттуда копируют куски при сборке нового кейса.
На главной в секции #mini-projects карточки mp-card в masonry-сетке. Типы, клетки и живая
раскладка вынесены на отдельную страницу.