Відповідальність
Кожне рішення має власника, а кожна дія — наслідок, за який відповідаємо.
Внутрішня поверхня / Internal surface
Робочий стайлгайд веб-системи Rubizh: токени кольору, типографіки, сітки й відступів, правила руху й доступності та перевірені компоненти спільного пакета. Тільки те, що потрібно для розробки сайту.
v1 · у роботі / in progress · зміст від
01 / 05
Color
Сім цифрових значень із демонстраційного брендбука підтверджені; їхні
семантичні веб-ролі, схвалені пари контрасту та полотно з Plain Black —
провізорні рішення веб-системи. Кожне значення нижче читається під час
збірки з @rubizh/design-system/tokens.css, тому специмен і
пакет не можуть розійтися.
Кожна роль посилається на підтверджений примітив, з одним задокументованим відхиленням: полотно з 2026-08-25 — глибший за Plain Black #101010 (рішення власника, D-055), щоб плити, мапа і патерн читалися на глибині. Ролі дій показано зі специменами дій.
Звичайний текст потребує щонайменше 4.5:1, нетекстові індикатори та фокус — 3:1. Співвідношення обчислені під час збірки з тих самих значень токенів. Текстові пари показані літерами, нетекстові — рамкою і смугою в кольорі індикатора; остання пара свідомо задокументована як несхвалена.
02 / 05
Typography
Ролі родини підтверджені брендбуком: Tektur Condensed Black для дисплейних
написів і Tektur Regular для основного тексту, а нульовий трекінг великих
літер обовʼязковий за D-029. Адаптивна шкала розмірів і висота рядків —
провізорні веб-рішення. Родина: "Tektur Variable", ui-sans-serif, system-ui, sans-serif; міра основного тексту
68ch.
Ролі родини та нульовий трекінг підтверджені; адаптивний розмір і висота рядка кожної ролі — провізорна веб-шкала, позначена окремою плашкою.
Тримай рубіж
Заголовок першого рівня та великі композиції; не використовується як дрібний текст інтерфейсу.
Hold the line
Заголовки розділів і великих блоків.
Ґрунтовність, єдність, ініціатива
Заголовки секцій; у цьому кіті — кожен h2.
Підзаголовок запису чи картки
Заголовки підрозділів і карток звичайним накресленням; без утиліти пакета.
Український текст перевіряє ритм, апостроф ʼ, літери Ґ, Є, І, Ї та читабельність довгого повідомлення без реального контенту сайту.
Читабельна ширина рядка обмежена мірою основного тексту.
Міра рядка: --type-measure-body: 68ch.
Service line, labels, and metadata never go below this size.
Нижня межа розміру службового тексту; дисплейне накреслення для нього не використовується.
Файли шрифту є імплементаційними активами з зафіксованим походженням залежності та ліцензії, а не претензією на фінальний клієнтський пакет шрифту.
03 / 05
Layout
Шкала відступів, контейнер, сітка на 4 / 8 / 12 колонок і пропорції медіа — перевірена провізорна веб-імплементація. Демонстраційний брендбук не визначає адаптивний CSS; охоронні зони знака та брендові геометричні правила лишаються поза цим веб-стайлгайдом (їх облік — у матриці авторитетності), а не CSS-розмірами.
Дискретна шкала від 4 до 128 CSS px для внутрішнього ритму; кожна смуга має ширину свого токена.
--space-1 0.25rem · 4 px
--space-2 0.5rem · 8 px
--space-3 0.75rem · 12 px
--space-4 1rem · 16 px
--space-6 1.5rem · 24 px
--space-8 2rem · 32 px
--space-12 3rem · 48 px
--space-16 4rem · 64 px
--space-24 6rem · 96 px
--space-32 8rem · 128 px
--layout-max-width: 90rem · 1440 px Утиліта контейнера центрує вміст і не перевищує цю ширину.
--layout-gutter: clamp(1rem, 0.45rem + 2.75vw, 3rem) Плавне поле від 1rem до 3rem; контейнер віднімає його з обох боків.
--layout-grid-gap: clamp(0.75rem, 0.55rem + 1vw, 1.5rem) Плавний проміжок між колонками й рядами.
--layout-section-space: clamp(4rem, 2.9rem + 5.5vw, 8rem) Плавний вертикальний ритм для великих композицій.
Кількість колонок за шириною вікна; проміжок —
--layout-grid-gap. Демонстрація нижче використовує ті самі
точки перемикання.
Лише CSS-абстракції без зображень. Реальні фото, альтернативний текст, фокусна точка, намір кадрування, права та авторство належать Strapi.
--media-ratio-landscape: 16 / 9
--media-ratio-editorial: 4 / 3
--media-ratio-square: 1
--media-ratio-portrait: 3 / 4 04 / 05
Motion & accessibility
Перевірена веб-поведінка спільної основи, а не правило демонстраційного брендбука: видимий фокус, мінімальні цілі, пороги контрасту, скінченний рух, режим зменшеного руху та принципи вмісту й перекомпонування.
--focus-ring-width: 0.1875rem · 3 px Суцільний контур для кожного елемента у стані видимого фокуса (focus-visible).
--focus-ring-offset: 0.25rem · 4 px Кільце малюється поза елементом і не перекриває його вміст.
--color-focus: var(--color-brand-yellow-expressive) = #FFD500 Expressive Yellow; на полотні й піднятій поверхні контраст не менше 3:1.
--control-target-min: 2.75rem · 44 px Мінімальний квадрат для інтерактивних цілей; перевищує мінімум 24 px WCAG 2.2. Клавіша Tab показує кільце на посиланні; квадрат праворуч — мінімальна ціль вводу 2.75rem · 44 px. Посилання веде на початок сторінки.
--motion-duration-fast: 120ms Мікрозміни стану: фокус, наведення.
--motion-duration-base: 200ms Стандартні переходи елементів.
--motion-duration-slow: 320ms Скінченні акценти; специмен нижче — чотири ітерації.
--motion-easing-standard: cubic-bezier(0.2, 0, 0, 1) Переходи без акценту.
--motion-easing-emphasized: cubic-bezier(0.16, 1, 0.3, 1) Поява та акцентні рухи.
Скінченний специмен: чотири ітерації по 320ms, лише
transform і opacity; за
prefers-reduced-motion: reduce рух стискається до одного
кроку 0.01 ms.
05 / 05
Components
Компоненти спільного пакета @rubizh/design-system за інвентарем декомпозиції живого сайту: дії, поля форми, рухомий рядок, навігація, картки, кроки, стрічка медіа та атоми футера. Текст і адреси тут — ізольовані фікстури кита; у продакшні кожне значення надходить із валідованого контракту Strapi. Медіа в демо — умовні плейсхолдери: кіт не публікує растрові активи.
Жовтий позначає головний намір, контур — альтернативний шлях. Прямокутна форма без зрізаних кутів (D-029) не конкурує з фокусним кільцем; мінімальна ціль вводу — 2.75rem · 44 px.
Наведення, натискання і клавіша Tab показують справжні псевдокласи, а не намальовані дублікати станів.
Чесний стан без імітацій: недоступна кнопка — справжній
disabled, зайнята — disabled разом з
aria-busy і власним підписом процесу.
Підкреслений перехід у текстовому потоці: звʼязок видно завжди, а не лише при наведенні. Фікстури трьох локалей перевіряють довгі підписи без переповнення.
Нативні контроли з чесними станами: видимі підписи, повʼязані підказки й
помилки через aria-describedby, стандартний селект без
скриптової імітації та реальний чекбокс згоди.
Як до вас звертатися під час звʼязку.
Вкажіть номер у форматі +380…
Без згоди заявку не буде надіслано.
Заявку надіслано. Ми звʼяжемося з вами найближчим часом.
Не вдалося надіслати заявку. Спробуйте ще раз.
Нескінченна стрічка з дубльованими доріжками, схованими від допоміжних
технологій. За explicit owner direction стрічка не має окремого control;
для
prefers-reduced-motion анімація вимикається, а елементи розгортаються
статичним рядком без втрати вмісту.
Картка цінності — заголовок, правило, текст. Картка вакансії завжди показує медіа, назву й опис одним стабільним потоком; optional-дія додається останнім рядком і не змінює геометрію в hover/focus. Якщо робочої дії ще немає, картка лишається звичайною статтею без мертвого посилання. Замість фото — умовний плейсхолдер.
Це нова генерація офіцерів і сержантів, які чітко розуміють сучасну війну.
Кожне рішення має власника, а кожна дія — наслідок, за який відповідаємо.
Поруч — люди, на яких можна покластися в найважчу мить.
Постійне навчання та сучасне озброєння — основа ефективності.
Керування розвідувальними та ударними безпілотниками, аналіз даних, робота в екіпажі.
Подати заявкуКартка без робочої анкети показує опис постійно й не створює мертвого посилання або порожньої клавіатурної зупинки.
Нумерація — CSS-лічильник упорядкованого списку, а не текст у контенті: кількість кроків визначає CMS. Опис кроку необовʼязковий.
Заповніть форму — рекрутер звʼяжеться протягом доби.
Розмова про досвід, мотивацію та очікування.
Базова загальновійськова підготовка та фахове навчання.
Фінальна розмова та призначення до підрозділу.
Горизонтальна стрічка на CSS scroll-snap без жодного скрипта: прокрутка колесом, дотиком і клавіатурою (регіон фокусується), а нативна смуга прокрутки — чесний індикатор прогресу.
Шапка секції публічного сайту: надзаголовок, заголовок і правило. У
продакшні рендериться рівнем h2; тут — h3, щоб
не ламати ієрархію заголовків кита.
Бойовий шлях
Глобальний хедер у двох станах: суцільна темна смуга не пропускає патерн,
у спокої тримає повний рядок оголошень, а у пристикованому рядок
згортається і зʼявляється коротка марка. Перед мовами живе merch utility з
реальною 44px ціллю та підказкою. Навігація живе за бургером на всіх
ширинах; панель — це нативний popover, тож Escape, закриття
кліком поза панеллю, верхній шар і повернення фокуса на кнопку працюють
без жодного скрипта. Чого popover не дає — це модальності: фокус
із відкритої панелі виходив би на перекритий вміст. Її додає скрипт, який їде
всередині компонента
MenuPanel (D-046): відкрита шухляда робить решту сторінки
inert, утримує Tab усередині й закривається при переході за
пунктом меню — і тут, і на сайті це та сама одна імплементація.
Бренд-марка передається слотом: у продакшні це зображення з CMS, у киті —
текстова фікстура, тож реальний тип вмісту слота кит показати не може —
пакет обмежує його висоту сам.
Типографіка редакторського тексту: правила навішуються на самі елементи, бо розмітка приходить із CMS і класів на ній немає. Міра рядка обмежена, щоб довгий юридичний текст лишався читабельним.
Ми збираємо лише ті дані, які потрібні для звʼязку з кандидатом і опрацювання заявки.
Запит на видалення даних надсилайте на контактну адресу бригади. контактну адресу
Той самий текстовий потік, але розмітку до нього робить не автор сторінки, а рендерер CMS-полів: перелічені тут блоки — це все, що редактор бачить у тулбарі Strapi. Вузол, якого рендерер не вміє, валить білд, а не зникає тихо. Зразок парситься тим самим контрактом, що й сайт, тож розбіжність між союзом вузлів і гілками рендеру ламає цю сторінку.
Редактор може позначити слово важливим, виділеним, підкресленим, знятим або технічним.
Цитата з нормативного документа лишається окремим блоком.
GET /api/legal-pages?locale=uk
Посилання ведуть туди, куди вказав редактор: цей зразок.
Перелік населених пунктів бойового шляху — це список назв, а не таблиця
даних, тож розмітка — список. Кожен рядок несе стабільний
data-location зі слаґу CMS і тримає мінімальну висоту цілі вводу:
за цей ідентифікатор наступний зріз чіпляє точку на мапі.
Стилізований контур України з точками бойового шляху. Координати
mapX/mapY приходять із CMS-колекції локацій. Наведення
або фокус на рядок у списку підсвічує відповідну точку на мапі. На самій мапі
компонент геометрично вибирає найближчу до курсора точку, тому щільні координати
не перекривають одна одну невидимими цілями. Стан тимчасовий: жодного кліку,
фіксації чи окремого режиму мапи немає.
Повна композиція героя належить пакету: високий шеврон, справжній
заголовок із формальною назвою та соціальні посилання. Обгортка фонового
відео — <video autoplay muted loop playsinline> з постером,
резервним <img> і підтримкою prefers-reduced-motion. Кит показує справжній HeroPanel на геометричному фоні без production-медіа;
сайт підставляє в його media-slot VideoBackdrop
зі Strapi.
Єдина inline-анкета з полями, згодами, статусом і optional медіаслотом. Production Turnstile тут навмисно відсутній: Design Kit не робить зовнішніх запитів.
Анімований плівковий шум з оригінального сайту: NoiseOverlay
малює на canvas дрібні випадкові монохромні цятки низької прозорості
й оновлює їх через кадр; шар фіксований на весь в'юпорт,
pointer-events: none, а за
prefers-reduced-motion текстура малюється один раз і не мерехтить.
Кит лишається вільним від медіаелементів (та сама межа, що й у відеофону), тож
живий canvas тут не рендериться — поведінку доводить браузерний прогін публічного
сайту.
Плита-заглушка: живий шум — тільки на публічному сайті
Окремий темний блок запитань завершує процес, а компактний темний Contact збирає ідентичність, канали та прямі контакти без повноекранного фіналу. Production lockup, emblem та social icons надходять зі Strapi; тут їх замінюють текстові й геометричні fixtures без медіафайлів.
Вкладаємось у людей, бо люди — основа Національної гвардії України.