Дизайн-система TakeProfit
Полная реконструкция: 931 дизайн-токенов вытащены вживую из работающего терминала (resolved-значения в активной теме) + computed-стили реальных компонентов + анимации из CSS. Эстетика: плотный торговый терминал, wide-gamut P3, флэт (тени = 1px hairline), смус-углы.
Основы
Тёмная тема — дефолт. Фон — 4-ступенчатая шкала элевации (чем выше слой — тем светлее), плюс полупрозрачный overlay-скрим для модалок. Текст — 4 уровня контраста.
Background elevation 0→3 + overlay
Text контраст + семантика
Divider горизонтальные линии
Stroke границы/обводки
Цвет — семантика
Интерактивные роли (action) — каждая с состояниями base / hover / active (+ у некоторых translucent и invert). Компоненты ссылаются на роли, не на сырые цвета. Всё в color(display-p3 …).
Opacity dark scrim — ступени прозрачности
Code / синтаксис Indie® редактор
Палитра-рампы
Базовые рампы по 10 ступеней (50→900) — фундамент, из которого выведены семантические токены. 11 интерфейсных + отдельный набор «legends» (102 токенов) для серий на чарте.
Интерфейсные рампы
Legends цвета серий/индикаторов на чарте
Типографика
Корень 62.5% → 1rem = 10px, поэтому --font-size-N ≈ N px. Цифры/цены — моноширинный IBM Plex Mono (табличные). Текст — IBM Plex Sans. Дисплей/бренд — Nib Pro (serif), аннотации — Atomic Marker (script).
Семейства
Шкала размеров 9 → 96
--font-size-9 = .9rem--font-size-10 = 1rem--font-size-11 = 1.1rem--font-size-12 = 1.2rem--font-size-14 = 1.4rem--font-size-16 = 1.6rem--font-size-18 = 1.8rem--font-size-20 = 2rem--font-size-24 = 2.4rem--font-size-28 = 2.8rem--font-size-32 = 3.2rem--font-size-36 = 3.6rem--font-size-40 = 4rem--font-size-48 = 4.8rem--font-size-56 = 5.6rem--font-size-64 = 6.4rem--font-size-96 = 9.6remНачертания
300 · light400 · normal500 · medium600 · semibold700 · boldLetter-spacing
thetightest = -1.5pxtightest = -1pxtighter = -.5pxtight = -.25pxnormal = 0pxwide = .25pxwider = .5pxwidest = 1pxSpacing
Шаг сетки на базе 0.4rem (4px): 0·1·2·4·8·12·16·20·24·32·36·48·52·56·64·72·96. Плотные интервалы (4–12px) внутри контролов, крупные (24–96) — между блоками.
--spacing-0 = 0rem (0px)--spacing-1 = .1rem (1px)--spacing-2 = .2rem (2px)--spacing-4 = .4rem (4px)--spacing-8 = .8rem (8px)--spacing-12 = 1.2rem (12px)--spacing-16 = 1.6rem (16px)--spacing-20 = 2rem (20px)--spacing-24 = 2.4rem (24px)--spacing-32 = 3.2rem (32px)--spacing-36 = 3.6rem (36px)--spacing-48 = 4.8rem (48px)--spacing-52 = 5.2rem (52px)--spacing-56 = 5.6rem (56px)--spacing-64 = 6.4rem (64px)--spacing-72 = 7.2rem (72px)--spacing-96 = 9.6rem (96px)Радиусы
Контролы — xs 4px (кнопки/инпуты), карточки — base 12px, крупные поверхности — md 24 / lg 36, пилюли — full. Дополнительно — фактор «smooth corners» 0.6 (squircle-сглаживание вместо чистой дуги).
none
0xs
4pxsm
8pxbase
12pxmd
24pxlg
36pxfull
9999pxТени и слои
Принципиально флэт: «тени» --shadow-s…2xl — это 1px hairline-кольцо (0 0 0 1px p3(.70 .78 .88 / .12)), а не drop-shadow. Глубина передаётся элевацией фона (base-0→3), а не размытием. Поповеры/модалки — на base-2/3 поверх overlay-скрима.
Компоненты
Замеры — живые computed-стили из терминала. Характер: компактные (h 20–24px), текст 12–14px веса 400 (без жирного), радиус 4px, паддинг 0–4px, переход all .15s, без теней.
| Компонент | Размер | Шрифт px/вес | Текст | Фон (токен) | Радиус | Паддинг | Назначение |
|---|---|---|---|---|---|---|---|
| Buy | 29×20 | 12/400 | #000 | action-buy | 4px | 0 2px | Покупка (lime) |
| Sell | 28×20 | 12/400 | #000 | action-sell | 4px | 0 2px | Продажа (peach) |
| Start Free Trial | 105×24 | 14/400 | #fff | action-brand | 4px | 0 4px | Бренд / подписка CTA (violet) |
| Add Widgets | 109×24 | 14/400 | primary | action-secondary-translucent | 4px | 0 4px | Вторичная (translucent 8%) |
| 1h | 36×20 | 14/400 | primary | action-secondary | 4px | 0 2px | Сегмент / селектор |
Живая реконструкция (на реальных токенах)
Анимации
Доминанта — .15s + cubic-bezier(.4,0,.2,1) (Material standard), по 56 использований каждое. Для входа/выхода — decelerate/accelerate; для «живых» элементов — spring/overshoot.
Длительности
50msмикро (toggle)75msмикро.1sбыстрый hover.15s★ дефолт (56× в коде) — hover/focus/color.2sстандарт.3sпанели/поповеры.5sкрупные переходы2sамбиент (shimmer/breath)Кривые easing синий = кривая, пунктир = linear
cubic-bezier(.4,0,.2,1)★ standard (56×) — вход+выходcubic-bezier(0,0,.2,1)decelerate (вход)cubic-bezier(.4,0,1,1)accelerate (выход)cubic-bezier(.42,0,.58,1)ease-in-outcubic-bezier(.34,1.56,.64,1)spring / overshootcubic-bezier(.68,-.55,.27,1.55)back-in-out (упругий)cubic-bezier(.21,1.02,.73,1)soft-out@keyframes именованные анимации в коде
scaleIn / scaleOutпоявление/исчезновение модалок и поповеров (с opacity)shine / textShine / sweepбегущий блик по кнопкам/карточкам (CTA, AI-карточки)spin / shuriken-rotateлоадеры и вращение лого-сюрикенаbreathмягкая пульсация (живые/активные элементы)shakeтряска при ошибке вводаflashподсветка изменения цены (тик вверх/вниз)loading-bubbles / circles / wave-dotsварианты индикаторов загрузкиai-ide-card-clip / fadereveal AI-фич в IDEbtn-gradient-rotateвращение градиента на премиум-кнопкеgrow / enterAnimation / exitAnimationрост и вход/выход элементов списковUX-паттерны
Принципы взаимодействия, отличающие терминал от обычного веб-приложения.
On-demand рендеринг чарта
Pixi autoTicker выключен; кастомный rAF вызывает ticker.update() только если scenes.some(isNeedRedraw). В простое — 0 отрисовок (экономия GPU/батареи), при взаимодействии — до 120 Гц. Один full-viewport WebGL2-canvas вместо Canvas2D (как у TradingView).
Hover-reveal тулбары
Drawing-тулбар и контролы строк легенды/виджетов скрыты до наведения (opacity:0 → 1 за .15s). Максимум данных на экране, контролы появляются по необходимости.
Lumino DockPanel доки
Виджеты в @lumino/widgets: drag-to-dock, split, tabs, maximize. Константы: GOLDEN_RATIO .618 (пропорции сплита), DRAG_THRESHOLD 5px, DETACH_THRESHOLD 20px, дефолтные отступы 12/40/40/40.
Magnet / snap
Удержание ⌘ = магнит к OHLC; Shift = снап трендлайна к 45°/90°. Точное черчение без попадания пиксель-в-пиксель.
Контекстное удаление
Объекты удаляются через мини-тулбар по ховеру (🗑 у строки легенды) или контекст-меню чарта «Remove Drawings / Remove Indicators». Нет глобального «delete» — действия локальны к объекту.
Плотность терминала
Кнопки 20–24px, текст 12–14px вес 400, радиус 4px, паддинг 0–4px, hairline-границы, без теней. Максимум информации, минимум хрома — как проф. торговый терминал.
Цифры = моноширинный
Все цены/значения — IBM Plex Mono (табличные цифры не «прыгают» при изменении). Текст интерфейса — IBM Plex Sans.
Wide-gamut P3
Вся палитра в color(display-p3 …) — насыщеннее sRGB на современных дисплеях (важно для buy/sell/rise/fall сигналов). Параллельно хранятся --colors-var-* (RGB-тройки) для rgba()-композиции.
15 тем
Семантические токены (action/text/divider/background) переопределяются по теме; компоненты не знают конкретных цветов — только роли. Тёмная тема — дефолт.
Keyboard-first
Хоткеи на всё (Hotkeys-панель по категориям): инструменты рисования (⌥T/⌥F/…), таймфреймы, навигация виджетов (Tab), undo/redo. ⌘D — «Add to Chart».
Источник
Токены — getComputedStyle(:root) по всем CSS-переменным активной темы (живой залогиненный терминал, 931 шт.); компоненты — computed-стили реальных элементов; анимации — грэп bundles2/css/*.css (durations/cubic-bezier/@keyframes). Цвета показаны как нативный color(display-p3) (точны на P3-дисплеях) + ≈hex sRGB-приближение для справки. Реконструкция, не офиц. гайдлайн.