Design System  /  Principles  /  Layout & Composition

Layout & Composition.

Сетка, ритм секций, плотность, асимметрия. Решения, которые перестают приниматься каждый раз заново — чтобы каждый новый экран не переизобретал контейнер.

Version
v1 · 2026
Scope
Marketing (aist.tech), ЛК Shell (app.aist.tech), MI Analyst
Status
Manifesto + reference
01

Один контейнер, одна сетка.

Максимальная ширина 1152 px. Боковые поля — 16 px на мобильном, 24 px на десктопе. Внутри — 12-колоночная сетка с gap 24 px. Это всё.

Контейнер не растёт «до края экрана» — даже на большом мониторе он останавливается на 1152 px. Это даёт длину строки 60–75 символов в body-md и ритм, который не ломается на ультрашироких экранах.

Container ruler
1152 px max · 24 px gutters · 12-coldesktop
edge edge
max-width: 1152px
12-col grid
grid-template-columns: repeat(12, 1fr) · gap 24pxdesktop
1
2
3
4
5
6
7
8
9
10
11
12
Tokens
TokenpxГде
--container-max1152max-width страницы
px-4 sm:px-616 / 24боковые поля
gap-624gap в карточных гридах
--sidebar-width240ЛК sidebar (только app.aist.tech)
--topbar-height56ЛК topbar
DO

1152 px container на всех маркетинг-страницах.

Один и тот же gap (24 px) во всех гридах — чтобы экран читался как система.

DON'T

Растягивать секции на 100% viewport ради «эффекта простора».

Ставить разные gap (16/20/28) в соседних секциях — ритм рассыпается.

02

Секционный ритм важнее точных отступов.

Между секциями — 80 px (py-20). Внутри секции от заголовка до контента — 48 px (mb-12). Воздух одинаковый по всему сайту, чтобы взгляд читал страницу как стихотворение, а не как список.

Если секция «герой» — добавь lg:py-28 (112 px). Это единственное исключение. Кастомные отступы (py-16, py-24) ломают вертикальный ритм — не использовать.

Section rhythm
py-20 · mb-12 inside · alternating bgmarketing
Header · 56 px
↕ 80 px (py-20)
Наш подход
Что мы делаем
Section на --background. mb-12 от заголовка до контента.
↕ 80 px
Знакомо?
Боли
Alternating section на #F5F5F7. Тот же ритм.
↕ 80 px
Footer · py-12
Tokens
TokenpxГде
--space-section-y80между секциями (py-20)
lg:py-28112только hero, ничего больше
mb-1248от section-header до контента
--space-lg24gap между карточками
--space-md16gap внутри карточки
03

Карточка — только если она что-то делит.

Карточка несёт смысл, когда отделяет одну сущность от другой. Если на экране одна мысль — карточка не нужна. Голая типографика — сильнее.

Самая частая ошибка — оборачивать в карточку каждый текстовый блок «для структуры». У нас обратное правило: chrome recedes. Если можно решить вопрос gap-ом и разделителем — делай так.

Decision flow
Сколько сущностей в блоке?
Одна Голая типографика. Никакой карточки. Пример — hero, CTA, текстовая секция.
2 и больше Нужно делить пространство. Дальше вопрос — как именно.
Сущности однородные?
Да Grid с gap-24, без рамок. Только воздух. Пример — список продуктов в ЛК.
Нет, разной плотности Hairline-divider или карточка с тонкой рамкой. Контраст внутри — через тон, не через тень.
Patterns side-by-side
A · Голая типографика
01
Стратегия
От карты возможностей до дорожной карты внедрения.
02
Обучение
Интенсивы для управленцев и команд.
03
Запуск
Готовые ИИ-агенты в продакшене.
Используй для последовательности шагов и однородных списков. Hairline-разделители + цифры — достаточно структуры.
B · Карточка с hairline border
Решение
Стратегический аналитик
Читает рынок ежедневно. Даёт рекомендации команде стратегии.
Решение
Тренер продаж
Разбирает звонки. Учит на ваших же кейсах.
Используй, когда сущности конкурируют за внимание и нужна явная граница. Border — hairline #E0E0E0, без тени в покое.
C · Tonal layering
99,9%
Uptime сервисов
×200
Быстрее
Карточка = белый поверх #F5F5F7, без border. Контраст из тона, а не из линии.
D · Inversion (CTA closer)
Расскажите о вашем проекте
Предложим решение и честно скажем, если оно не нужно.
Написать в Telegram
Финал страницы. bg-foreground text-background как осознанная инверсия — один раз на страницу.
DO

Голая типографика по умолчанию. Карточка — когда добавляет смысл.

Один тип карточки на секцию (или hairline, или tonal — не оба).

DON'T

Заворачивать каждый абзац в карточку «для аккуратности».

Top/left 3px accent border на нейтральных карточках — читается как ошибка/предупреждение.

04

Асимметрия даёт направление взгляду.

Центрированная вёрстка скучна и бесцельна. Используем 7/5 или 8/4 — заголовок слева, поддержка справа. Это газетный приём, и он работает на heroes, section-headers и CTA.

Hero composition
7fr / 5fr · gap-32marketing hero
Aist.tech

Встраиваем ИИ в бизнес.

От стратегии до продакшена: помогаем компаниям внедрять ИИ осознанно — обучаем команды, проектируем и запускаем системы.

Левая колонка несёт главный заголовок — она крупнее, тяжелее, удерживает взгляд. Правая — supporting copy, выровненная по нижней линии. Глаз скользит сверху-слева вправо-вниз — это естественный gaze-path в LTR-языках.

Не все секции должны быть асимметричными. Метрики, продуктовые гриды, dashboard tiles — симметричны по природе. Асимметрия работает там, где есть «солист и аккомпанемент».

05

Три режима плотности.

Marketing дышит. ЛК работает. MI Analyst анализирует. Каждый режим — своя плотность, свой ритм, свой target density данных. Не путать режимы между поверхностями.

aist.tech
Marketing
Что мы делаем

Понятные сервисы. Практические решения.

py-20 · mb-12 · 1–2 things per fold
app.aist.tech
ЛК Shell
Аналитик
Тренер
Оператор
Память
p-6 · gap-3 · 6–10 tiles per fold
embedded
MI Analyst
query · 2.4s
rows · 1 284
confidence · 0.87
p-3 · gap-2 · tabular figures
SurfacePaddingGapDensity target
Marketing section py-20 · card p-8 24 1–2 «вещи» на фолд. Дышит.
ЛК Shell content p-6 · card p-4 12–16 6–10 объектов на фолд. Утилитарный.
MI Analyst panel p-3 · row p-2 8 20+ строк/чисел на фолд. Аналитический.
06

Воздух — контент.

Пустое пространство не «остаётся» — оно ставится. Воздух разделяет, иерархизирует, замедляет чтение. Если страница «выглядит пустой» — это обычно значит, что мы поставили его правильно.

Соблазн заполнять воздух иконками, иллюстрациями, метриками — называется data slop и запрещён. Если сомневаешься, что добавить — не добавляй.

Three rules of air:

  • Section-to-section — 80 px минимум. Никогда меньше.
  • Heading-to-body — 48 px (mb-12). Это «вдох» перед чтением.
  • Card-padding — 24 px (marketing) / 16 px (ЛК). Меньше — текст душится.
07

Архитектура страницы — сценарий.

Маркетинг-страница имеет каноническую последовательность секций: hero → approach → problems → features → products → metrics → CTA. Эта последовательность — не шаблон, а контракт.

Каждая секция отвечает на один вопрос покупателя в конкретный момент. Менять порядок можно, но тогда нужно понимать, какой вопрос на какой месте.

СекцияВопрос покупателяРитм
Hero«Что вы делаете?»lg:py-28 · асимметрия 7/5
Approach«Как вы это делаете?»py-20 · 3 шага
Problems«Это про меня?»py-20 · alt background
Features«Чем это технически отличается?»py-20 · dark feature card
Products«Что конкретно я куплю?»py-20 · grid 3xN
Metrics«Как мне это измерить?»py-20 · 3 числа
CTA«С чего начать?»py-28 · inversion

Если в продукте есть отдельная страница (/about, /cases) — собирай её из тех же блоков. Не изобретай новую секционную грамматику — используй имеющуюся.

08

Чего не делаем никогда.

  • Full-bleed секции на ширину viewport (кроме hero-фона, если он вообще есть).
  • Mixed gap-ы (16/20/24) внутри одной секции — сетка должна быть одна.
  • Sticky-блоки в маркетинге (кроме header). Sticky — инструмент ЛК.
  • Gradient backgrounds. Единственное исключение — 1px-divider в dark CTA.
  • Drop shadow в покое. Только на hover как affordance.
  • Декоративные иконки в hero. Hero — только текст.
  • Centered-выравнивание длинных параграфов. Body — всегда left-rag.
  • Карточка внутри карточки. Если хочется — значит, иерархия неверна.
Источник токенов: colors_and_type.css ·  Назад: ← Голос ·  К хабу: Design System →