# Design System Inspired by IBM > Category: Медіа та споживачі > Корпоративні технології. Дизайн-система Carbon, структурована синя палітра. ## 1. Візуальна тема та атмосфера Сайт IBM — це цифрове втілення корпоративного авторитету, побудоване на дизайн-системі Carbon — мові дизайну настільки методично впорядкованої, що вона читається як інженерна специфікація, відтворена у вигляді веб-сторінки. Сторінка функціонує на принципі різкої дуальності: яскраво-біле (`#ffffff`) полотно з майже чорним (`#161616`) текстом, пронизане єдиним незмінним акцентом — IBM Blue 60 (`#0f62fe`). Це не грайливий мінімалізм технологічного стартапу; це корпоративна точність, дистильована у пікселі. Кожен елемент існує в рамках жорсткої сітки 2x Carbon, кожен колір відповідає семантичному токену, кожне значення відступу прив'язується до базового модуля 8px. Сімейство шрифтів IBM Plex є хребтом системи. IBM Plex Sans у світлому накресленні (300) для відображення заголовків створює несподівано повітряну, майже делікатну якість у великих розмірах — навмисний контрапункт корпоративній вазі IBM. У розмірах основного тексту звичайне накреслення (400) з міжсимвольним інтервалом 0.16px у підписах розміром 14px вводить ретельне мікротрекінгування, яке робить текст Carbon відчутно спроектованим, а не просто набраним. IBM Plex Mono призначений для коду, даних і технічних міток, завершуючи тріо сімейства поряд із рідко використовуваним IBM Plex Serif. Те, що визначає візуальну ідентичність IBM поза монохромно-синьою схемою, — це покладання на систему компонентних токенів Carbon. Кожен інтерактивний стан відповідає CSS-змінній з префіксом `--cds-` (Carbon Design System). Кнопки не мають захардкоджених кольорів; вони посилаються на `--cds-button-primary`, `--cds-button-primary-hover`, `--cds-button-primary-active`. Така токенізована архітектура означає, що весь візуальний шар є лише тонкою оболонкою над глибоко систематизованим фундаментом — дизайновим еквівалентом добре типізованого API. **Ключові характеристики:** - IBM Plex Sans у накресленні 300 (Light) для відображення — корпоративна вагомість через типографічну стриманість - IBM Plex Mono для коду та технічного вмісту зі стабільним міжсимвольним інтервалом 0.16px у малих розмірах - Єдиний акцентний колір: IBM Blue 60 (`#0f62fe`) — кожен інтерактивний елемент, кожен CTA, кожне посилання - Система токенів Carbon (`--cds-*`), що керує всіма семантичними кольорами та забезпечує перемикання теми на рівні змінних - Сітка відступів 8px зі суворим дотриманням — жодних довільних значень, все вирівнюється - Пласкі картки без рамок на фоні `#f4f4f4` Gray 10 — глибина через нашарування фонових кольорів, а не тіні - Поля введення з нижньою рамкою (не у вигляді прямокутника) — фірмовий патерн форм Carbon - 0px border-radius на основних кнопках — без жодного пом'якшення, повністю прямокутні ## 2. Кольорова палітра та ролі ### Основні - **IBM Blue 60** (`#0f62fe`): Єдиний інтерактивний колір. Основні кнопки, посилання, стани фокусу, активні індикатори. Це єдиний хроматичний відтінок у ключовій палітрі UI. - **White** (`#ffffff`): Фон сторінки, поверхні карток, текст кнопки на синьому фоні, `--cds-background`. - **Gray 100** (`#161616`): Основний текст, заголовки, темний фон поверхонь, навігаційна панель, підвал. `--cds-text-primary`. ### Нейтральна шкала (сімейство сірих) - **Gray 100** (`#161616`): Основний текст, заголовки, темне оздоблення UI, фон підвалу. - **Gray 90** (`#262626`): Вторинні темні поверхні, стани наведення на темному тлі. - **Gray 80** (`#393939`): Третинне темне, активні стани. - **Gray 70** (`#525252`): Вторинний текст, допоміжний текст, описи. `--cds-text-secondary`. - **Gray 60** (`#6f6f6f`): Текст-заповнювач, відключений текст. - **Gray 50** (`#8d8d8d`): Відключені іконки, приглушені мітки. - **Gray 30** (`#c6c6c6`): Рамки, розділові лінії, нижні рамки полів введення. `--cds-border-subtle`. - **Gray 20** (`#e0e0e0`): Ледь помітні рамки, контури карток. - **Gray 10** (`#f4f4f4`): Вторинний фон поверхні, заливка карток, рядки, що чергуються. `--cds-layer-01`. - **Gray 10 Hover** (`#e8e8e8`): Стан наведення для поверхонь Gray 10. ### Інтерактивні - **Blue 60** (`#0f62fe`): Основний інтерактивний — кнопки, посилання, фокус. `--cds-link-primary`, `--cds-button-primary`. - **Blue 70** (`#0043ce`): Стан наведення на посилання. `--cds-link-primary-hover`. - **Blue 80** (`#002d9c`): Активний/натиснутий стан для синіх елементів. - **Blue 10** (`#edf5ff`): Поверхня з синім відтінком, фон виділеного рядка. - **Focus Blue** (`#0f62fe`): `--cds-focus` — рамка 2px inset на сфокусованих елементах. - **Focus Inset** (`#ffffff`): `--cds-focus-inset` — біле внутрішнє кільце для фокусу на темному тлі. ### Службові та статусні - **Red 60** (`#da1e28`): Помилка, небезпека. `--cds-support-error`. - **Green 50** (`#24a148`): Успіх. `--cds-support-success`. - **Yellow 30** (`#f1c21b`): Попередження. `--cds-support-warning`. - **Blue 60** (`#0f62fe`): Інформаційний. `--cds-support-info`. ### Темна тема (тема Gray 100) - **Background**: Gray 100 (`#161616`). `--cds-background`. - **Layer 01**: Gray 90 (`#262626`). Поверхні карток і контейнерів. - **Layer 02**: Gray 80 (`#393939`). Підняті поверхні. - **Text Primary**: Gray 10 (`#f4f4f4`). `--cds-text-primary`. - **Text Secondary**: Gray 30 (`#c6c6c6`). `--cds-text-secondary`. - **Border Subtle**: Gray 80 (`#393939`). `--cds-border-subtle`. - **Interactive**: Blue 40 (`#78a9ff`). Посилання та інтерактивні елементи стають світлішими для забезпечення контрастності. ## 3. Правила типографіки ### Сімейство шрифтів - **Основний**: `IBM Plex Sans`, з запасними варіантами: `Helvetica Neue, Arial, sans-serif` - **Моноширинний**: `IBM Plex Mono`, з запасними варіантами: `Menlo, Courier, monospace` - **Серифний** (обмежене використання): `IBM Plex Serif`, для редакційних/виразних контекстів - **Іконковий шрифт**: `ibm_icons` — фірмові іконкові гліфи розміром 20px ### Ієрархія | Роль | Шрифт | Розмір | Насиченість | Висота рядка | Міжсимвольний інтервал | Примітки | |------|------|------|--------|-------------|----------------|-------| | Display 01 | IBM Plex Sans | 60px (3.75rem) | 300 (Light) | 1.17 (70px) | 0 | Максимальний вплив, світле накреслення для елегантності | | Display 02 | IBM Plex Sans | 48px (3.00rem) | 300 (Light) | 1.17 (56px) | 0 | Вторинний герой, адаптивний запасний варіант | | Heading 01 | IBM Plex Sans | 42px (2.63rem) | 300 (Light) | 1.19 (50px) | 0 | Виразний заголовок | | Heading 02 | IBM Plex Sans | 32px (2.00rem) | 400 (Regular) | 1.25 (40px) | 0 | Заголовки розділів | | Heading 03 | IBM Plex Sans | 24px (1.50rem) | 400 (Regular) | 1.33 (32px) | 0 | Назви підрозділів | | Heading 04 | IBM Plex Sans | 20px (1.25rem) | 600 (Semibold) | 1.40 (28px) | 0 | Назви карток, заголовки функцій | | Heading 05 | IBM Plex Sans | 20px (1.25rem) | 400 (Regular) | 1.40 (28px) | 0 | Більш легкі заголовки карток | | Body Long 01 | IBM Plex Sans | 16px (1.00rem) | 400 (Regular) | 1.50 (24px) | 0 | Стандартний текст для читання | | Body Long 02 | IBM Plex Sans | 16px (1.00rem) | 600 (Semibold) | 1.50 (24px) | 0 | Виділений основний текст, мітки | | Body Short 01 | IBM Plex Sans | 14px (0.88rem) | 400 (Regular) | 1.29 (18px) | 0.16px | Компактний основний текст, підписи | | Body Short 02 | IBM Plex Sans | 14px (0.88rem) | 600 (Semibold) | 1.29 (18px) | 0.16px | Жирні підписи, елементи навігації | | Caption 01 | IBM Plex Sans | 12px (0.75rem) | 400 (Regular) | 1.33 (16px) | 0.32px | Метадані, позначки часу | | Code 01 | IBM Plex Mono | 14px (0.88rem) | 400 (Regular) | 1.43 (20px) | 0.16px | Вбудований код, термінал | | Code 02 | IBM Plex Mono | 16px (1.00rem) | 400 (Regular) | 1.50 (24px) | 0 | Блоки коду | | Mono Display | IBM Plex Mono | 42px (2.63rem) | 400 (Regular) | 1.19 (50px) | 0 | Декоративний моно-заголовок для hero-секції | ### Принципи - **Світле накреслення у великих розмірах**: виразний набір шрифтів Carbon використовує накреслення 300 (Light) при розмірі 42px і більше. Це створює характерну напругу — вміст говорить з корпоративним авторитетом, тоді як літери шепочуть із типографічною легкістю. - **Мікротрекінгування у малих розмірах**: міжсимвольний інтервал 0.16px при розмірі 14px і 0.32px при 12px. Ці на перший погляд незначні значення є секретною зброєю Carbon для читабельності в компактних розмірах — вони злегка розкривають тісні літери IBM Plex. - **Три функціональні насиченості**: 300 (відображення/виразний), 400 (основний текст/читання), 600 (акцент/мітки UI). Накреслення 700 навмисно відсутнє у виробничій типографічній шкалі. - **Продуктивний проти виразного**: продуктивні набори використовують щільніші міжрядкові інтервали (1.29) для насиченого UI. Виразні набори дихають більше (1.40-1.50) для маркетингового та редакційного контенту. ## 4. Стилізація компонентів ### Кнопки **Основна кнопка (синя)** - Background: `#0f62fe` (Blue 60) → `--cds-button-primary` - Text: `#ffffff` (White) - Padding: 14px 63px 14px 15px (асиметричний — місце для кінцевої іконки) - Border: 1px solid transparent - Border-radius: 0px (гострий прямокутник — фірмовий знак Carbon) - Height: 48px (стандарт), 40px (компактний), 64px (виразний) - Hover: `#0353e9` (Blue 60 Hover) → `--cds-button-primary-hover` - Active: `#002d9c` (Blue 80) → `--cds-button-primary-active` - Focus: `2px solid #0f62fe` inset + `1px solid #ffffff` inner **Вторинна кнопка (сіра)** - Background: `#393939` (Gray 80) - Text: `#ffffff` - Hover: `#4c4c4c` (Gray 70) - Active: `#6f6f6f` (Gray 60) - Такі самі відступи та радіус, як у основної **Третинна кнопка (Ghost Blue)** - Background: transparent - Text: `#0f62fe` (Blue 60) - Border: 1px solid `#0f62fe` - Hover: текст `#0353e9` + відтінок Blue 10 на фоні - Border-radius: 0px **Ghost-кнопка** - Background: transparent - Text: `#0f62fe` (Blue 60) - Padding: 14px 16px - Border: none - Hover: відтінок фону `#e8e8e8` **Кнопка небезпеки** - Background: `#da1e28` (Red 60) - Text: `#ffffff` - Hover: `#b81921` (Red 70) ### Картки та контейнери - Background: `#ffffff` на білій темі, `#f4f4f4` (Gray 10) для підвищених карток - Border: none (плаский дизайн — більшість карток без рамки або тіні) - Border-radius: 0px (відповідає прямокутній естетиці кнопок) - Hover: фон зміщується до `#e8e8e8` (Gray 10 Hover) для клікабельних карток - Content padding: 16px - Розмежування: нашарування фонових кольорів (white → gray 10 → white) замість тіней ### Поля введення та форми - Background: `#f4f4f4` (Gray 10) — `--cds-field` - Text: `#161616` (Gray 100) - Padding: 0px 16px (лише горизонтальний) - Height: 40px (стандарт), 48px (великий) - Border: none з боків/зверху — `2px solid transparent` знизу - Bottom-border active: `2px solid #161616` (Gray 100) - Focus: `2px solid #0f62fe` (Blue 60) нижня рамка — `--cds-focus` - Error: `2px solid #da1e28` (Red 60) нижня рамка - Label: 12px IBM Plex Sans, міжсимвольний інтервал 0.32px, Gray 70 - Helper text: 12px, Gray 60 - Placeholder: Gray 60 (`#6f6f6f`) - Border-radius: 0px (зверху) — поля введення мають гострі кути ### Навігація - Background: `#161616` (Gray 100) — темна шапка на всю ширину - Height: 48px - Логотип: логотип IBM з 8 смужок, білий на темному тлі, вирівняний по лівому краю - Links: 14px IBM Plex Sans, накреслення 400, `#c6c6c6` (Gray 30) за замовчуванням - Link hover: текст `#ffffff` - Active link: `#ffffff` з індикатором у вигляді нижньої рамки - Перемикач платформ: горизонтальні вкладки, вирівняні ліворуч - Пошук: поле пошуку, що висувається після кліку на іконку - Мобільний: гамбургер-меню з панеллю, що висувається ліворуч ### Посилання - Default: `#0f62fe` (Blue 60) без підкреслення - Hover: `#0043ce` (Blue 70) з підкресленням - Visited: залишається Blue 60 (стан відвіданого не змінюється) - Вбудовані посилання: підкреслені за замовчуванням в основному тексті ### Характерні компоненти **Контентний блок (Hero/Feature)** - Фонові смуги на всю ширину, що чергуються: white/gray-10 - Заголовок вирівняний ліворуч, відображуваний шрифт 60px або 48px - CTA у вигляді синьої основної кнопки зі стрілкою - Зображення/ілюстрація вирівняна праворуч або знизу на мобільних **Tile (клікабельна картка)** - Background: `#f4f4f4` або `#ffffff` - Нижня рамка на всю ширину або зміна фону при наведенні - Іконка зі стрілкою в правому нижньому куті при наведенні - Без тіні — пласкість і є ідентичністю **Тег / Мітка** - Background: контекстний колір з прозорістю 10% (наприклад, Blue 10, Red 10) - Text: відповідний колір 60-го ступеня - Padding: 4px 8px - Border-radius: 24px (таблетка — виняток із правила 0px) - Font: 12px, накреслення 400 **Сповіщальний банер** - Смуга на всю ширину, як правило, на фоні Blue 60 або Gray 100 - Білий текст, 14px - Іконка закриття/приховування, вирівняна праворуч ## 5. Принципи компонування ### Система відступів - Базовий модуль: 8px (сітка Carbon 2x) - Шкала відступів компонентів: 2px, 4px, 8px, 12px, 16px, 24px, 32px, 40px, 48px - Шкала відступів компонування: 16px, 24px, 32px, 48px, 64px, 80px, 96px, 160px - Мінімальний модуль: 8px (найменший придатний для використання відступ) - Внутрішні відступи компонентів: як правило, 16px - Проміжок між картками/тайлами: 1px (найтонший) або 16px (стандарт) ### Сітка та контейнер - 16-колонкова сітка (система сіток Carbon 2x) - Максимальна ширина контенту: 1584px (максимальна контрольна точка) - Проміжки між колонками: 32px (16px на мобільних) - Поля: 16px (мобільний), 32px (планшет і більше) - Контент зазвичай займає 8-12 колонок для читабельної довжини рядка - Секції на повну ширину чергуються з обмеженим контентом ### Філософія пустого простору - **Функціональна щільність**: Carbon надає перевагу продуктивній щільності над великим пустим простором. Секції щільніші порівняно зі споживчими дизайн-системами — це відображає корпоративну ДНК IBM. - **Зонування за фоновим кольором**: замість великих відступів між секціями IBM використовує кольори фону, що чергуються (white → gray 10 → white), для створення візуального розмежування з мінімальним вертикальним простором. - **Стабільний ритм 48px**: основні переходи між секціями використовують вертикальний відступ 48px. Hero-секції можуть використовувати 80px–96px. ### Шкала радіусів рамок - **0px**: Основні кнопки, поля введення, тайли, картки — домінуюче рішення. Carbon є принципово прямокутним. - **2px**: Зрідка для невеликих інтерактивних елементів (теги) - **24px**: Теги/мітки (форма таблетки — єдиний округлений виняток) - **50%**: Кола аватарів, контейнери іконок ## 6. Глибина та підйом | Рівень | Рішення | Використання | |-------|-----------|-----| | Flat (Level 0) | Без тіні, фон `#ffffff` | Стандартна поверхня сторінки | | Layer 01 | Без тіні, фон `#f4f4f4` | Картки, тайли, секції, що чергуються | | Layer 02 | Без тіні, фон `#e0e0e0` | Підняті панелі всередині Layer 01 | | Raised | `0 2px 6px rgba(0,0,0,0.3)` | Спадні меню, підказки, меню переповнення | | Overlay | `0 2px 6px rgba(0,0,0,0.3)` + темна накладка | Модальні вікна, бічні панелі | | Focus | `2px solid #0f62fe` inset + `1px solid #ffffff` | Кільце клавіатурного фокусу | | Bottom-border | `2px solid #161616` on bottom edge | Активне поле введення, індикатор активної вкладки | **Філософія тіней**: Carbon навмисно уникає тіней. IBM досягає глибини насамперед через нашарування фонових кольорів — накладання поверхонь з дедалі темнішими відтінками сірого замість додавання box-shadows. Це створює пласку, натхненну друком естетику, де ієрархія передається через значення кольору, а не імітованим світлом. Тіні зарезервовані виключно для плаваючих елементів (спадних меню, підказок, модальних вікон), де елемент справді перекриває вміст. Ця стриманість надає рідкісним тіням значущого ефекту — коли щось «плаває» у Carbon, це важливо. ## 7. Що робити і чого уникати ### Робіть - Використовуйте IBM Plex Sans накреслення 300 для відображуваних розмірів (42px+) — легкість є навмисною - Застосовуйте міжсимвольний інтервал 0.16px для основного тексту 14px і 0.32px для підписів 12px - Використовуйте border-radius 0px для кнопок, полів введення, карток і тайлів — прямокутники є системою - Посилайтеся на назви токенів `--cds-*` під час реалізації (наприклад, `--cds-button-primary`, `--cds-text-primary`) - Використовуйте нашарування фонових кольорів (white → gray 10 → gray 20) для глибини замість тіней - Використовуйте нижню рамку (не повну рамку) для індикаторів полів введення - Зберігайте стандартну висоту кнопки 48px і асиметричні відступи для розміщення іконок - Застосовуйте Blue 60 (`#0f62fe`) як єдиний акцент — один синій, щоб керувати всіма ### Не робіть - Не округляйте кути кнопок — радіус 0px є ідентичністю Carbon - Не використовуйте тіні на картках або тайлах — пласкість і є сутністю - Не вводьте додаткові акцентні кольори — система IBM є монохромною + синьою - Не використовуйте накреслення 700 (Bold) — шкала зупиняється на 600 (Semibold) - Не додавайте міжсимвольний інтервал для відображуваних текстів — трекінгування застосовується лише для 14px і нижче - Не обрамляйте поля введення повними рамками — поля Carbon використовують лише нижню рамку - Не використовуйте градієнтні фони — поверхні IBM є пласкими, однотонними кольорами - Не відхиляйтеся від сітки відступів 8px — кожне значення повинно ділитися на 8 (з 2px і 4px для мікроналаштувань) ## 8. Адаптивна поведінка ### Контрольні точки | Назва | Ширина | Ключові зміни | |------|-------|-------------| | Small (sm) | 320px | Одна колонка, гамбургер-навігація, поля 16px | | Medium (md) | 672px | Починаються двоколонкові сітки, розширений контент | | Large (lg) | 1056px | Повна навігація видима, сітки 3-4 колонки | | X-Large (xlg) | 1312px | Максимальна щільність контенту, широкі компонування | | Max | 1584px | Максимальна ширина контенту, по центру з полями | ### Цілі для торкання - Висота кнопки: 48px стандарт, мінімум 40px (компактний) - Посилання навігації: висота рядка 48px для торкання - Висота поля введення: 40px стандарт, 48px великий - Кнопки-іконки: область торкання 48px x 48px - Елементи мобільного меню: рядки 48px на повну ширину ### Стратегія стиснення - Hero: відображення 60px → 42px → заголовок 32px при звуженні вікна перегляду - Навігація: повна горизонтальна шапка → гамбургер з панеллю, що висувається - Сітка: 4 колонки → 2 колонки → одна колонка - Тайли/картки: горизонтальна сітка → вертикальне складання - Зображення: зберігати пропорції, max-width 100% - Підвал: групи посилань у кількох колонках → складання в одну колонку - Відступи секцій: 48px → 32px → 16px ### Поведінка зображень - Адаптивні зображення з `max-width: 100%` - Ілюстрації продуктів масштабуються пропорційно - Hero-зображення можуть перейти від розміщення поруч до складання знизу - Візуалізації даних зберігають пропорції з горизонтальним прокручуванням на мобільних ## 9. Посібник з підказок для агента ### Швидкий довідник кольорів - Primary CTA: IBM Blue 60 (`#0f62fe`) - Background: White (`#ffffff`) - Heading text: Gray 100 (`#161616`) - Body text: Gray 100 (`#161616`) - Secondary text: Gray 70 (`#525252`) - Surface/Card: Gray 10 (`#f4f4f4`) - Border: Gray 30 (`#c6c6c6`) - Link: Blue 60 (`#0f62fe`) - Link hover: Blue 70 (`#0043ce`) - Focus ring: Blue 60 (`#0f62fe`) - Error: Red 60 (`#da1e28`) - Success: Green 50 (`#24a148`) ### Приклади підказок для компонентів - "Створи hero-секцію на білому фоні. Заголовок 60px IBM Plex Sans накреслення 300, line-height 1.17, колір #161616. Підзаголовок 16px накреслення 400, line-height 1.50, колір #525252, max-width 640px. Синя CTA-кнопка (фон #0f62fe, текст #ffffff, border-radius 0px, висота 48px, відступи 14px 63px 14px 15px)." - "Спроектуй тайл-картку: фон #f4f4f4, border-radius 0px, відступ 16px. Назва 20px IBM Plex Sans накреслення 600, line-height 1.40, колір #161616. Основний текст 14px накреслення 400, letter-spacing 0.16px, line-height 1.29, колір #525252. Hover: фон змінюється на #e8e8e8." - "Побудуй поле форми: фон #f4f4f4, border-radius 0px, висота 40px, горизонтальний відступ 16px. Мітка зверху 12px накреслення 400, letter-spacing 0.32px, колір #525252. Нижня рамка: 2px solid transparent за замовчуванням, 2px solid #0f62fe при фокусі. Placeholder: #6f6f6f." - "Створи темну навігаційну панель: фон #161616, висота 48px. Логотип IBM білий, вирівняний ліворуч. Посилання 14px IBM Plex Sans накреслення 400, колір #c6c6c6. Hover: текст #ffffff. Active: #ffffff з нижньою рамкою 2px." - "Побудуй компонент тегу: фон Blue 10 (#edf5ff), текст Blue 60 (#0f62fe), відступ 4px 8px, border-radius 24px, 12px IBM Plex Sans накреслення 400." ### Посібник з ітерацій 1. Завжди використовуй border-radius 0px для кнопок, полів введення та карток — це обов'язкова вимога Carbon 2. Міжсимвольний інтервал лише у малих розмірах: 0.16px при 14px, 0.32px при 12px — ніколи для відображуваного тексту 3. Три насиченості: 300 (відображення), 400 (основний текст), 600 (акцент) — без жирного 4. Blue 60 — єдиний акцентний колір — не вводь вторинних акцентних відтінків 5. Глибина досягається нашаруванням фонових кольорів (white → #f4f4f4 → #e0e0e0), а не тінями 6. Поля введення мають лише нижню рамку, ніколи повну 7. Використовуй префікс `--cds-` для іменування токенів для сумісності з Carbon 8. 48px — стандартна висота інтерактивного елементу