GAJSIN
Design system

Цвета, типографика, компоненты и размеры интерфейса.

01

Палитра

Основа

Светлая тема

Тёмная тема

Состояния · светлая тема

Состояния · тёмная тема

Шкала данных · светлая тема

Шкала данных · тёмная тема

02

Типографика

St Marie ThinНазвание проекта в кейсе80 / 88 px · 100До 720 px — 48 / 54 px--g-type-display · -0.025em
Aa 012345
St Marie ThinНазвание в карточке и переходе к соседнему кейсу40 / 46 px · 100--g-type-title · -0.025em
Project name
Martian MonoЗаголовки страниц и разделов32 / 42 px · 500До 720 px — 26 / 36 px--g-type-heading · -0.03em
Создаю цифровые продукты.
Martian MonoОсновной текст и подзаголовки16 / 26 px · 400--g-type-body · 0
Автоматизация и интеграции. От задачи и архитектуры до работающего продукта.
Martian MonoПодписи, меню, вторичные кнопки и поля; минимальный размер13 / 20 px · 400--g-type-caption · 0
Описание проекта и технологии
Martian MonoОсновная кнопка и выбранные пункты13 / 20 px · 500--g-type-control · 0
Обсудить задачу
Martian MonoДлинный текст кейса на телефоне16 / 26 px · ширина 87,5%--g-font-width-text
Разбираюсь в задаче, проектирую архитектуру и довожу продукт до запуска.
St Marie Thin · латиница

Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn
Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz · 0123456789

Martian Mono · кириллица и латиница

Аа Бб Вв Гг Дд Ее Ёё Жж Зз Ии Йй Кк Лл Мм
Нн Оо Пп Рр Сс Тт Уу Фф Хх Цц Чч Шш Щщ Ъъ Ыы Ьь Ээ Юю Яя

03

Кнопки и ссылки

Основная

Заливка · главное действие

Вторичная

Контур · дополнительное действие

Внешняя ссылка

Текст 13 px · стрелка 16 px · новая вкладка

Ссылка

В тексте подчёркнута · в меню и футере — при наведении

Иконка

48 × 48 px

Фильтр

Категория · раскрывает список

Тема

Без рамки · 20 px · тема, закрыть

Вкладки

Инструкции для работы над проектом.

Общая линия · текущая подчёркнута 2 px
Высота
48 px
Рамка
1 px
Фокус
2 px
Радиус
4 px
Внутри
0 / 16 px
Между
8 px
Шрифт
13 / 20 px
КнопкаОбычноНаведениеФокусНажатиеНедоступноЗагрузка
Основная
Вторичная
Фильтр

Основная запускает главное действие. Вторичная сопровождает его. Фильтр меняет выбор в списке. Наведение меняет фон сразу.

04

Карточки и поверхности

Информационная

Заголовок карточки

Короткое описание содержимого без отдельного действия.

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

Открыть раздел

Вся карточка — одна ссылка. Наведение меняет поверхность и контур.

Карточка проекта · сетка

Обложка 1:1 сверху, название 40 px. 3 колонки на компьютере, 2 на планшете, 1 на телефоне.

Карточка проекта · список

Миниатюра 96 px слева, на телефоне 72 px; название, описание, все категории и стек.

Внутри
24 px
Между блоками
24 px
Радиус
4 px
Линия
1 px
Медиа
1:1

Перестройка карточек

Метки стека

  • Python
  • FastAPI
  • PostgreSQL

Поверхность, радиус 4 px, 8 × 12 px внутри.

Раскрывающийся список

grillingТребования ещё не согласованы

Содержимое раскрывается вместе с изменением высоты.

spec-reviewНужно проверить изменения

Знак плюса превращается в минус за то же время.

Поведение компонентов

КомпонентГеометрияСостояния и управление
Шапка80 / 128 / 176 px; контейнер 1200 pxОбщая шапка остаётся у верхнего края на всех экранах; якоря учитывают её высоту и безопасную область. Текущий пункт обозначен начертанием и aria-current. Ссылки доступны во время перехода; последний выбор не теряется.
Иконки16 и 20 px; штрих 1.5 px; зона 48 pxДекоративные SVG скрыты от скринридера; у кнопки без текста есть доступное имя. Внешняя ссылка отмечена стрелкой. Иконки браузера генерируются из одного логотипа и следуют теме документа.
РаскрытиеСтрока не ниже 48 px; зазор у знака 16 px; текст до 560 px с внутренней прокруткойEnter / Space открывает и закрывает. Плюс рядом с подписью становится минусом. Вложенная панель не запускает второй переход у родителя.
Список выбораПоле 48 px; зазор 8 px; меню до 260 pxОткрывается вверх, если снизу мало места. Стрелки, Home / End и набор по названию выбирают вариант; Enter применяет; Escape закрывает. Прокручивается меню, а не страница.
ВкладкиВысота 48 px; нижняя линия 2 px; расстояние 24 pxВыбранный пункт отмечен aria-pressed; новое содержимое появляется за M. Адрес сохраняет выбор; действия не ждут завершения перехода.
Окно презентацииДо 1200 px; от края 16 px; радиус 4 px; затемнение 60%Нативное модальное окно: фокус внутри; Escape, закрытие и клик по затемнению возвращают фокус к кнопке открытия. Iframe сохраняется до конца ухода и затем выгружается. Ширина ограничена geometry.contentMax.
Обратная связьПодпись 13 / 20 px; значок 20 pxПодтверждение копирования — текст role=status и галочка; ошибка остаётся сообщением с понятным действием. Загрузка отмечена aria-busy; недоступность — disabled, а не только цветом.
Исходный кодПоле 400 px; отступ 24 px; UI-шрифтКод загружается по открытию; файлы переключаются за M. Есть копирование, ZIP, ошибка и повтор загрузки; содержимое без принудительной горизонтальной прокрутки страницы.
ИзображенияОбложка 1:1; миниатюра 96 / 72 pxФиксированное соотношение резервирует место. Обложка заполняет блок; скриншот интерфейса открывается в полном размере. Следующие изображения загружаются по мере приближения к экрану.

Доступность

  • Навигация клавишей Tab, видимый фокус и смысловые HTML-элементы.
  • Открытие Enter или Space; Escape закрывает список и окно; стрелки выбирают вариант в списке.
  • Движение не задерживает действие. Повторный клик прерывает переход с текущего кадра.
  • Reduced motion действует сразу при изменении настройки; содержимое и действия остаются доступны.
  • Минимальная цель касания geometry.touchTarget; основные контролы geometry.controlHeight.
Фон страницы--g-backgroundОснова без отдельной панели
Поверхность--g-surfaceФильтры и поля
Карточка--g-background · линия 1 pxСодержимое отделено контуром
05

Поля и состояния

Короткая подсказка под полем
Введите адрес в формате name@example.com.
Категория
Высота
48 px
Рамка
1 px
Фокус
2 px
Радиус
4 px
Шеврон
16 px
От края до шеврона
16 px
06

Отступы

4 px · Подсказка

Между полем и пояснением

--g-space-unit

8 px · Связь

Иконка и текст; метка и поле

--g-space-tight

12 px · Компактный ряд

Вертикальный отступ строк и небольших элементов

--g-space-compact

16 px · Кнопка

От контура до текста слева и справа

--g-space-control-x

24 px · Содержимое

Между блоками карточки и между колонками

--g-space-content

24 px · Карточка

От края до содержимого карточки

--g-space-card

32 px · Группа

Заголовок и содержимое; группы полей

--g-space-group

32 px · Страница

Минимальное поле с каждой стороны

--g-page-desktop

48 px · Крупная группа

От шапки до содержимого; блоки каталога

--g-space-block

64 px · Сцена

Крупный промежуток внутри отдельной сцены

--g-space-wide

80 px · Разделы

Между самостоятельными блоками; до 720 px — 48 px

--g-space-section

96 px · Контакты

Вертикальное поле экрана контактов

--g-space-contact

Подсказка под полем

Значение
4 pxКороткое пояснение

4 px от поля до подсказки. От метки до поля — 8 px.

Иконка и текст

Далее

Промежуток 8 px, иконка 16 px.

Внутри кнопки

Действие
padding-inline: 16px

Padding слева и справа. Высота кнопки — 48 px.

Анатомия карточки

24 px24 px24 px24 px

Заголовок

Описание содержимого

24 px с четырёх сторон и 24 px между заголовком, текстом и действием.

Между разделами

Первый раздел
80 px
Следующий раздел

Вертикальный промежуток 80 px, на телефоне 48 px.

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

32 px
Контент
32 px

Минимальное поле страницы — 32 px. На телефоне — 24 px.

Окно 1440 px, контейнер 1200 px, поля по 120 px1200 px · максимальная ширина120120Окно 1440 px

После достижения 1200 px контейнер остаётся по центру, а боковые поля растут.

4 px — шаг сетки и малый зазор. Радиус 4 px — отдельное свойство формы; он показан в следующем разделе.

07

Радиусы

0 px · изображение
4 px · компонент
50% · индикатор
08

Глубина

00 · Фон
01 · Поверхность
02 · Контур
03 · Затемнение · --g-ink 60 %
Шапка
z-index 30
Заставка
9999
Ссылка пропуска
10000
Модальное окно
Нативный top layer

Плоские поверхности. Без теней и размытия. Затемнение лежит только под окном презентации.

09

Адаптивность

ЭкранШиринаСеткаНазваниеЗаголовокРазделыКрай
ТелефонДо 720 pxОдна колонка48 / 54 px26 / 36 px48 px24 px
Планшет721–1023 pxДве колонки80 / 88 px32 / 42 px80 px32 px
КомпьютерОт 1024 pxТри колонки80 / 88 px32 / 42 px80 px32 px
375
768
1024
1440
Шапка
80 px, закреплена
До 720 px
128 px, закреплена
До 374 px
Меню в две строки, 176 px
До 900 px
Кнопки портрета — иконки; «Обо мне» — текст над изображением
Полоса прокрутки
8 px · бегунок цвета линии

Высота кнопок 48 px на всех экранах. Широкие таблицы прокручиваются внутри блока.

10

Движение

S · 160 мс
Стрелки, галочка копирования, список фильтра, фон и контур карточки при наведении, уход страницы
M · 280 мс
Смена содержимого на месте, надпись кнопки, окно презентации, проявление сцены
L · 480 мс
Раскрытия и знак «+», перестройка сетки, вход страницы, появление при прокрутке, смена темы
Кривая
cubic-bezier(0.25,1,0.5,1)
Сдвиги
4 и 16 px
ДвижениеВремяГде
Нажатие0 мсКнопка смещается на 1 px вниз; фон кнопки меняется сразу
Стрелка ссылки и карточкиS · 160 мсКарточка: 2 px вправо; внешняя ссылка: 2 / -2 px
Фон и контур карточкиS · 160 мсПоверхность и контур при наведении
ПодтверждениеS · 160 мсЗначок копирования сменяется галочкой
Список фильтраS · 160 мсВыпадает от поля и уходит обратно со сдвигом 4 px
Уход страницыS · 160 мсТекущая страница гаснет; клик в это время меняет цель, а не ждёт
Смена содержимогоM · 280 мсВкладки, сцены и список технологий проявляются и поднимаются на 16 px
Надпись кнопкиM · 280 мсНовая надпись проявляется со сдвигом 4 px, как только кнопка нажата
ОкноM · 280 мсПрезентация и затемнение проявляются и гаснут, окно — от масштаба 0,98
СценаM · 280 мсАнимация на странице проявляется, когда нарисована
Раскрытия и знак «+»L · 480 мсОдинаковое изменение полной высоты при открытии и закрытии. Повторный клик продолжает с текущей высоты; рамки и отступы входят в расчёт; загрузившийся текст раскрывается тем же механизмом.
Сетка, список, фильтрL · 480 мсКарточки переезжают на новые места, новые проявляются
Вход страницыL · 480 мсНовая страница проявляется и поднимается на 16 px; меню доступно сразу
Появление при прокруткеL · 480 мс · шаг 60 мсКарточки и блоки поднимаются на 16 px, в ряду — по колонкам
Смена темыL · 480 мсОдин общий круговой переход на сайте и в автономном HTML; повторные клики сохраняют последний выбор
Иконка темыПружина Morphicons · snappyНа сайте: морфинг солнца и луны до равновесия. Автономный пример меняет SVG сразу; круговой переход темы одинаковый.
Прокрутка к якорюНативная плавность браузераВремя определяет браузер; при reduced motion — сразу
Загрузка800 мс · linearSpinner 12 px
Буквы заголовка450 / 650 мс · шаг 40 мсКонтакты: -20 px, -12°, кривая outExpo
Сборка 4041100 мс · строки 40 мс · цифры 60 мсcubic-bezier(0.22,1,0.36,1)
Сообщение копирования1600 мсВремя видимого подтверждения, не задержка действия
Заставка800 + 200 мс, уход 120 мсЗнак при каждом открытии документа

При prefers-reduced-motion: reduce — нет заставки, кругового раскрытия темы, входа страницы, появления при прокрутке и смены содержимого; активные раскрытия, перестройки и буквы завершаются сразу при изменении настройки. Декоративные сцены выключены; содержание, действия и список технологий доступны.

Переходы и прерывание

Повторный вводОдин механизм для сетки, списка и фильтров. Повторный переход начинается с текущих визуальных координат; карточки не масштабируются. Новые элементы проявляются, видимые сохраняют непрерывность. При смене размера и reduced motion переход завершается.
Быстрая навигацияПоследняя нажатая ссылка остаётся целью, даже если предыдущая страница ещё загружается. Назад и вперёд сохраняют обычную навигацию.
Размер экранаПри изменении ширины текущая перестройка завершается, координаты измеряются заново; элементы не остаются между раскладками.
Отключение движенияНет заставки, кругового раскрытия темы, входа страницы, появления при прокрутке и смены содержимого; активные раскрытия, перестройки и буквы завершаются сразу при изменении настройки. Декоративные сцены выключены; содержание, действия и список технологий доступны.
Непрерывные сценыНепрерывные Canvas/WebGL-сцены имеют собственные физические параметры в скачиваемых исходниках. Общая шкала S/M/L управляет интерфейсом, а не скоростью физической симуляции. Сцены останавливаются вне экрана и в скрытой вкладке; reduced motion сохраняет содержимое без запуска сцен.
CSS-переменные
ПеременнаяЗначение
--g-paper#E4E5DF
--g-ink#171717
--g-font-displayStMarie, serif
--g-font-uiMartian, monospace
--g-font-width100%
--g-font-width-text87.5%
--g-space-unit4px
--g-space-tight8px
--g-space-control-x16px
--g-space-card24px
--g-space-content24px
--g-space-section80px / 48px
--g-space-compact12px
--g-space-group32px
--g-space-block48px
--g-space-wide64px
--g-space-contact96px
--g-page-desktop32px
--g-page-mobile24px
--g-radius4px
--g-border1px
--g-focus2px
--g-touch-target44px
--g-control-height48px
--g-icon16px
--g-icon-large20px
--g-brand28px
--g-focus-offset3px
--g-scrollbar8px
--g-icon-stroke1.5
--g-content-max1200px
--g-disabled-opacity0.38
--g-spinner-size12px
--g-spinner-stroke1.5px
--g-motion-s160ms
--g-motion-m280ms
--g-motion-l480ms
--g-motion-easecubic-bezier(0.25,1,0.5,1)
--g-motion-shift-s4px
--g-motion-shift-l16px
--g-motion-stagger60ms
--g-motion-dialog-scale0.98
--g-motion-spinner800ms
--g-motion-spinner-easelinear
--g-motion-press-y1px
--g-motion-link-x2px
--g-motion-link-y-2px
--g-motion-icon-scale0.6
--g-motion-feedback1600ms
--g-motion-letters-rise450ms
--g-motion-letters-return650ms
--g-motion-letters-stagger40ms
--g-motion-letters-y-20px
--g-motion-letters-rotation-12deg
--g-motion-letters-easeoutExpo
--g-motion-logo-draw800ms
--g-motion-logo-fill200ms
--g-motion-logo-exit120ms
--g-motion-logo-easecubic-bezier(0.16,1,0.3,1)
--g-motion-not-found1100ms
--g-motion-not-found-row-stagger40ms
--g-motion-not-found-digit-stagger60ms
--g-motion-not-found-easecubic-bezier(0.22,1,0.36,1)
--g-layer-header30
--g-layer-intro9999
--g-layer-skip-link10000
--g-reference-header72px
--g-reference-header-mobile64px
--g-logo-size128px
--g-header80px
--g-header-mobile128px
--g-header-compact176px
--g-text-measure70ch
--g-layout-columns3 / 2 / 1
--g-card-media-ratio1 / 1
--g-card-thumbnail96px
--g-card-thumbnail-mobile72px
--g-menu-max-height260px
--g-skill-text-max-height560px
--g-source-code-height400px
--g-dialog-inset16px
--g-dialog-backdrop-opacity60%
--g-type-display80px / 48px
--g-leading-display88px / 54px
--g-weight-display100
--g-tracking-display-0.025em
--g-type-title40px
--g-leading-title46px
--g-weight-title100
--g-tracking-title-0.025em
--g-type-heading32px / 26px
--g-leading-heading42px / 36px
--g-weight-heading500
--g-tracking-heading-0.03em
--g-type-body16px
--g-leading-body26px
--g-weight-body400
--g-tracking-body0
--g-type-caption13px
--g-leading-caption20px
--g-weight-caption400
--g-tracking-caption0
--g-type-control13px
--g-leading-control20px
--g-weight-control500
--g-tracking-control0
--g-background#E4E5DF / #171717
--g-text#171717 / #E4E5DF
--g-line#A7A7A7 / #545454
--g-muted#555555 / #B9B9B9
--g-surface#D3D3D3 / #272727
--ds-primary-hover#3D3D3D / #B9B9B9
--ds-primary-pressed#555555 / #A7A7A7
--ds-secondary-hover#C4C4C4 / #3D3D3D
--ds-secondary-pressed#B9B9B9 / #545454
--ds-filter-hover#B9B9B9 / #484848
--ds-filter-pressed#A7A7A7 / #545454
--g-ramp-0#D3D3D3 / #272727
--g-ramp-1#B9B9B9 / #484848
--g-ramp-2#8C8C8C / #747474
--g-ramp-3#5F5F5F / #A7A7A7
--g-ramp-4#171717 / #E4E5DF