Bots and Bones · инструкция · v2Как подключить дизайн-систему к nodex.htmlДевять шагов: от копирования файлов до проверки. Можно идти по порядку и выкатывать после каждого шага — интерфейс не ломается, а постепенно переходит на токены.
1–4 · подключение, ~30 мин5–8 · перевод стилей, по частям9 · проверка
01Скопировать файлы на сервер
Из этого проекта нужна только папка токенов, иконки и логотип. Компоненты (components/) — это образцы, их не подключают, по ним сверяются.
/ds/
styles.css ← точка входа, только @import
tokens/
fonts.css ← заменить на локальный (шаг 2)
colors.css ← 2 темы: light, night
typography.css
spacing.css ← радиусы, кольца, тени
motion.css ← @keyframes bnb-*
base.css
assets/
glyphs.json ← все иконки
bnb-logo.png
/fonts/ ← уже есть, добавить Plex и JetBrains
02Шрифты — только локально
ВажноВ nodex стоит CSP font-src 'self' — Google Fonts из tokens/fonts.css заблокируются, и весь текст молча упадёт в системный шрифт.
Скачайте woff2 с кириллицей (Google Fonts или пакеты fontsource): IBM Plex Sans 400/500, IBM Plex Mono 400/500, JetBrains Mono 400. Положите в /fonts/ и замените содержимое /ds/tokens/fonts.css:
Если решите оставить Golos / Noto Sans Mono / Geologica — не трогайте fonts.css, а в мосте (шаг 4) переопределите --font-sans, --font-mono, --font-label.
03Подключить в <head> и выставить тему
Скрипт темы — до стилей, чтобы не было вспышки светлой темы. Ссылка на styles.css — до собственного <style> nodex, тогда стили nodex сильнее и ничего не съедет.
<link href="/fonts/fonts.css" rel="stylesheet">
<script>
(function(){
var t = "night";
try { t = localStorage.getItem("rvre_theme") || t; } catch(e){}
document.documentElement.setAttribute("data-theme", t);
})();
</script>
<link href="/ds/styles.css" rel="stylesheet"> ← новое
<style>
:root{ … } ← существующие стили nodex
nightпо умолчанию — ближе всего к текущему чёрному
lightсветлая нейтральная, она же — без атрибута
04Мост: старые переменные → токены
Замените блок :root{ … } в начале стилей nodex целиком. После этого весь код, который уже пишет var(--fg), var(--node) и т.д., сразу берёт цвета из темы.
Конфликт имён--muted и --accent есть и в nodex, и в системе. Старые значения нужно удалить — иначе они перебьют тему. В мосте ниже их нет намеренно.
:root, [data-theme]{
/* поверхности */
--bg: var(--canvas);
--grid: var(--dot);
--panel: var(--ash);
--node: var(--card);
--node-head: var(--ash);
--line: var(--hairline);
/* текст */
--fg: var(--ink);
--dim: var(--muted); /* --muted уже из системы */
/* акценты и статусы */
--accent2: var(--fern); /* --accent уже = var(--moss) */
--err: var(--error);
--ok: var(--emerald);
/* форма */
--r: var(--radius-md); /* было 28px → 12px */
--r-sm: var(--radius-sm); /* было 16px → 4px */
/* шрифты */
--sans: var(--font-sans);
--mono: var(--font-mono);
--display: var(--font-sans);
/* сокеты = цвета типов данных */
--sock-text: var(--t-text);
--sock-image: var(--t-image);
--sock-vid: var(--t-video);
--sock-aud: var(--t-audio);
--sock-num: var(--t-any);
--sock-3d: var(--t-any);
}
Селектор [data-theme] нужен, чтобы алиасы пересчитывались при смене темы. Для num и 3D в системе отдельных цветов нет — пока --t-any; если нужны свои, добавьте их в каждую тему в colors.css.
05Убрать захардкоженные цвета
В nodex много цветов прямо в правилах — мост их не видит. Поиск-замена по файлу:
Структуру ключей смотрите в самом файле. Цвет иконки типа данных — color: var(--t-image) и т.д. Логотипы моделей остаются как есть; где логотипа нет — 3-буквенный mono-бейдж (FLX, KLG).
08Анимации состояний
Keyframes уже приходят из motion.css. Повесить на существующие классы nodex:
Имена классов-состояний подставьте свои — в nodex они могут называться иначе. Без пружин и отскоков.
09Проверка перед выкаткой
{{ progress }}
[ Bots and Bones ]Design systemTokens, components and every node state of the canvas editor. Switch the theme on the left — every card re-renders with the same token names. Buttons, chips, checkboxes and nodes in the cards are clickable.