Етап 07 · UI + візуал

Кіт компонентів

Екран - це композиція, а не малюнок. Між мовою і сторінками стоїть кіт: спільний kit.css плюс ця вітрина. Нове з'являється спершу тут, потім на екрані; правка живе в змінній або в класі, а не в окремій сторінці.

Компонентів 51 Рівнів 3 Прочитано з 142 файлів (141 екран + хаб) Джерело істини design/kit/docs/inventory.md
Ця сторінка вантажить ті самі два стилі, що й продукт, у тому самому порядку: wireframes/_wf.css -> kit/kit.css. Вітрина з власною розміткою нічого б не доводила: компонент тут має бути тим самим компонентом, що там. Тому організми, які існують лише як рендер-функції (JS), показані рядком із посиланням на сцену, що їх тримає, а не підробленим полотном.
рівень 1

Атоми

Не містять нічого з кіта. Форм-контроли входять сюди навіть з одним входженням: це примітиви взаємодії, і система без них неповна.

Кнопка.btn · .btn.dark · .btn.on90 екранів
ГоловнаУ кошик КонтурнаПереглянути колекцію ОбранаСписком
Правило: на екрані рівно одна залита оранжева дія. Друга залита кнопка означає, що екран не вирішив, який крок головний.
Ціна.pnew · .pold · .perserv · .pcut30 екранів
Зі знижкою 1 520 ₴−15%1 290 ₴ Без знижки 1 050 ₴ За порцію18 ₴ / порція
Ціна зі знижкою бере акцент, ціна без знижки лишається чорнильною. Керується даними через :has() на закресленій ціні, тож колір не може розійтися з фактом. Акцент дозволений від 19px bold: #FF5A00 на білому це 3.13:1. Від 8.19 поверхня важить не менше за кегль: на чорнилі той самий акцент дає 5.45 і дозволений за будь-якого кегля, на теплій поверхні втрачає 0.16.
Мітка наявності.pavail30 екранів
ЄВ наявності МалоЗалишилось мало НемаєНемає в наявності
Чесність через текст, а не через колір: стан читається і без кольору.
Бейдж і тег.tag36 екранів
Хіт★ ПОПУЛЯРНЕ Новинка✦ НОВИНКА
Рейтинг.rate30 екранів
З відгуками★ 4.8 · 126 відгуків Без відгуківЩе немає відгуків
Зірка навмисно жовта, не оранжева: це знак відгуку, а не дії. Оранжевий на екрані означає рівно одне - куди натиснути.
Дія картки і обране.cartbtn · .fav31 / 27 екранів
У кошик Обране
На сторінці «Обране» той самий кутовий слот несе іншу дію - видалити. Іконка називає дію в цьому місці, а не сутність узагалі.
рівень 2

Молекули

Містять атоми. Тут живе канонічна картка товару - найважчий компонент продукту за охопленням.

Картка товару.pcard32 екрани + кожна сітка
Один компонент, чотири стани даних. Варіант .pcard-l (списком) - ті самі зони в іншій розкладці, тож це варіант, а не окремий компонент. Висоти рядків фіксовані, щоб ціна й кнопка ніколи не стрибали між картками.
Хлібні крихти.crumb111 екранів
Порожній стан.emptybox · .emptybox.mini27 екранів
🫙
Тут поки порожньо
Оберіть ціль - і ми покажемо, з чого почати.
Порожньо - це не помилка, і воно ніколи не тупик: у стані завжди є вихід.
рівень 3

Організми

Містять молекули або є оболонкою екрана. Три - це стеля: діалог входу містить форму, а форма теж організм, але четвертий щабель це патерни, і критерій там інший - повторюваність, а не вкладеність. Спершу ті, що інших організмів не містять.

КомпонентКласЕкранівДе стоїть
Сітка товарів.prow230Лістинг 2.1
Рейка фільтрів.frail12Лістинг з фільтрами
Шухляда кошика.cdrawer6Кошик 6.0
Липка смуга покупки.mbuybar3Картка товару 3.0, мобілка
Модалка відгуку.pm1Відгуки 3.1
Мобільний шит фільтрів.mfsJSШит фільтрів
Оверлей діалогу.wf-ovJSспільний: місто, шухляда, модалки
Діалог міста.wf-cityJSчип 📍 у хедері
Діалог авторизації.auth-modalJSАвторизація 1.x
Банер cookie.wf-cookieJSзаміряно 7.86: жодного кольорового екрана. Плейсхолдер id="wf-cookie" є рівно в одному файлі репозиторію - wireframes/system.html
Мобільний таб-бар.wf-tabbarJSосновна мобільна навігація
Футер.wffJSвузол 0.2, 129 екранів із обвязкою
Оболонка кабінету.acc44Кабінет 7.0
Хедер.wfh5 + JSвузол 0.1, усі екрани
Мега-меню.mega5 + JSусередині хедера
Дев'ять компонентів існують лише як рендер-функції у wireframes/_nav.js, і ще два (хедер, мега-меню) рендеряться там додатково до розмітки - разом 11. Саме тому кількість екранів - погана міра важливості: футер має нуль у розмітці й рендериться на 129 екранах (діалоги, системні сторінки і хаб продуктової обвязки не несуть) - цього не покаже жоден скан розмітки.
основа

Токени

Блок :root живцем із kit.css - зчитується з документа, тож розійтися з файлом не може. Походження кожного значення - у DESIGN-artifacts.md. На етапі 08 цей блок розколеться на primitive + semantic.

карта

Інвентар

51 компонент: 18 атомів, 18 молекул, 15 організмів. Прочитано з усіх 142 файлів вайрфреймів, а не з пофарбованої вибірки: система, побудована під 40 екранів, на розкотці недорахувалась би половини. Повна таблиця - у design/kit/docs/inventory.md.

Оновлено після публікації (8.37). Ця сторінка - заморожений смоук етапу 07, тож числа вище лишаються тим, чим були тоді. Сьогодні в шарі 95 компонентів: 23 атоми, 29 молекул, 43 організми - і це вперше число, яке хтось перевіряє: node tools/inventory.mjs звіряє кожен рядок реєстру з файлами на диску, а --screens ще й рахує в браузері, на скількох із 88 кольорових екранів компонент справді стоїть. До 8.37 не перевіряв ніхто: у самому реєстрі було 73 рядки на 84 файли, 66 із 73 лічильників рядків і 58 із 73 лічильників екранів розійшлись.

РівеньКомпонентівЩо цеЩо з цього бере етап 08
1 · Атоми18не містять нічого з кітаперші файли розколу, перші @import
2 · Молекули18містять атомидругий раунд; картка товару - найважча
3 · Організми15містять молекули або є оболонкоюостанній раунд; усередині - спершу ті, що організмів не містять