{
  "$schema": "https://design-tokens.github.io/community-group/format/",
  "$version": "2.3.0",
  "brand": {
    "family": {
      "value": "bark"
    },
    "displayPattern": {
      "value": "bark{module}"
    }
  },
  "color": {
    "accent": {
      "value": "#0d8f9c"
    },
    "ink": {
      "value": "#14181f"
    },
    "ink2": {
      "value": "#3a4150"
    },
    "muted": {
      "value": "#6a7180"
    },
    "faint": {
      "value": "#98a0ae"
    },
    "background": {
      "value": "#eef0f4"
    },
    "surface": {
      "value": "#ffffff"
    },
    "surface2": {
      "value": "#f7f8fb"
    },
    "line": {
      "value": "#e6e8ee"
    },
    "line2": {
      "value": "#eef0f4"
    },
    "field": {
      "value": "#f5f6fa"
    },
    "chip": {
      "value": "#f0f2f7"
    },
    "sidebarBg": {
      "value": "#fafbfc"
    },
    "raised": {
      "value": "#ffffff"
    },
    "banner": {
      "value": "#16386e"
    },
    "success": {
      "value": "#15a06a"
    },
    "warning": {
      "value": "#cf850f"
    },
    "danger": {
      "value": "#e23d52"
    },
    "info": {
      "value": "#2a6fdb"
    }
  },
  "shadow": {
    "card": {
      "value": "0 1px 2px #14181f0a"
    },
    "pop": {
      "value": "0 8px 28px #14181f1a"
    },
    "up": {
      "value": "0 1px 2px #14181f0d, 0 10px 30px #14181f0f"
    }
  },
  "kpi": {
    "$description": "KPI/stat card — the standard dashboard unit. Label = caption; value = IBM Plex Mono 24/600 tnum; optional delta = .bark-pill; optional context line = caption faint.",
    "padding": {
      "value": "16px 20px"
    },
    "valueFont": {
      "value": "IBM Plex Mono 24px/600"
    },
    "labelFont": {
      "value": "Onest 12px/500 --muted"
    },
    "minWidth": {
      "value": "220px"
    }
  },
  "font": {
    "$description": "Strict roles: Red Hat Display is only for Bark logos/wordmarks and branded icon lettering; every interface heading and body text uses Onest; numeric/data values use IBM Plex Mono.",
    "logo": {
      "value": "\"Red Hat Display\", system-ui, sans-serif"
    },
    "ui": {
      "value": "\"Onest\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif"
    },
    "mono": {
      "value": "\"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, monospace"
    }
  },
  "radius": {
    "control": {
      "value": "8px"
    },
    "panel": {
      "value": "12px"
    },
    "tile": {
      "value": "22%"
    }
  },
  "wordmark": {
    "$description": "PIN the lockup font + sizes — do not invent new ones. Font is Red Hat Display; bark = 800, module = 600 (product colour), subtitle = Onest 700 uppercase 0.05em. Default in product = lg (sidebar).",
    "font": {
      "value": "\"Red Hat Display\", system-ui, sans-serif"
    },
    "weight": {
      "bark": {
        "value": "800"
      },
      "module": {
        "value": "600"
      },
      "subtitle": {
        "value": "700"
      }
    },
    "size": {
      "xl": {
        "tile": {
          "value": "48px"
        },
        "word": {
          "value": "26px"
        },
        "subtitle": {
          "value": "11px"
        }
      },
      "lg": {
        "tile": {
          "value": "32px"
        },
        "word": {
          "value": "18px"
        },
        "subtitle": {
          "value": "10px"
        }
      },
      "md": {
        "tile": {
          "value": "28px"
        },
        "word": {
          "value": "15px"
        },
        "subtitle": {
          "value": "9px"
        }
      },
      "sm": {
        "tile": {
          "value": "24px"
        },
        "word": {
          "value": "13px"
        }
      }
    },
    "asset": {
      "$note": "logo-lockup.svg exports bigger: tile 72 / word 36 / subtitle 11"
    }
  },
  "sidebar": {
    "$description": "Pinned brand element — 100dvh sticky shell. Only the navigation scrolls; full-width theme switch + footer stay pinned in the bottom zone.",
    "width": {
      "value": "244px"
    },
    "height": {
      "value": "100dvh"
    },
    "position": {
      "value": "sticky"
    },
    "background": {
      "value": "#fafbfc"
    },
    "padding": {
      "value": "20px 14px 14px"
    },
    "groupLabel": {
      "size": {
        "value": "10.5px"
      },
      "weight": {
        "value": "700"
      },
      "letterSpacing": {
        "value": "0.1em"
      }
    },
    "item": {
      "size": {
        "value": "14px"
      },
      "padding": {
        "value": "10px 12px"
      },
      "radius": {
        "value": "8px"
      },
      "iconSize": {
        "value": "18px"
      }
    },
    "scroll": {
      "target": {
        "value": ".bark-sidebar__scroll"
      },
      "overflow": {
        "value": "auto"
      }
    },
    "themeSwitch": {
      "width": {
        "value": "100%"
      },
      "segments": {
        "value": "3"
      }
    },
    "user": {
      "$description": "THE identity point of every authenticated product: the employee block pinned in the sidebar footer above the meta line — SSO photo (initials fallback via initialsFromName()) + name + email + icon-only logout. barkone is the documented legacy exception (header avatar). Never two identity points at once.",
      "placement": {
        "value": ".bark-sidebar__footer, above .bark-sidebar__meta"
      },
      "avatarSize": {
        "value": "40px"
      },
      "name": {
        "value": "Onest 13px/600 --ink, single line, ellipsis"
      },
      "email": {
        "value": "Onest 11px/500 --muted, single line, ellipsis"
      },
      "source": {
        "value": "current SSO session only (picture + name + email); no local profile store"
      }
    },
    "footer": {
      "position": {
        "value": "pinned-bottom"
      },
      "size": {
        "value": "11px"
      },
      "logout": {
        "$description": "One logout action for every authenticated Bark product: an icon-only 40px button at the right end of the sidebar user block (drawer footer on mobile). It calls the app's existing session logout handler; «Выйти» stays as aria-label + title.",
        "label": {
          "value": "Выйти"
        },
        "busyLabel": {
          "value": "Выходим…"
        },
        "icon": {
          "value": "LogOut"
        },
        "form": {
          "value": "icon-only"
        },
        "height": {
          "value": "40px"
        },
        "width": {
          "value": "40px"
        },
        "placement": {
          "value": ".bark-sidebar__user"
        }
      }
    }
  },
  "topbar": {
    "$description": "Page header of every product screen: title block left, utility cluster right (36px ghost icon buttons). It carries NO identity — the employee avatar/name live in the sidebar user block (barkone is the documented legacy exception with its header avatar).",
    "toolButton": {
      "size": {
        "value": "36px"
      },
      "iconSize": {
        "value": "20px"
      },
      "radius": {
        "value": "8px"
      }
    },
    "toolsGap": {
      "value": "8px"
    }
  },
  "avatar": {
    "$description": "Employee avatar. Photo src comes ONLY from the SSO session (docs/SSO_AVATAR.md); fallback = initials from initialsFromName() in templates/sso-avatar.adapter.js — first letters of the first and last words, uppercase.",
    "shape": {
      "value": "circle"
    },
    "size": {
      "sm": {
        "value": "24px"
      },
      "md": {
        "value": "32px"
      },
      "lg": {
        "value": "40px"
      }
    },
    "border": {
      "value": "1px solid {color.line}"
    },
    "fallback": {
      "background": {
        "value": "{accent} at 11% (--accent-soft)"
      },
      "color": {
        "value": "{accent}"
      },
      "font": {
        "value": "Onest 600, 42% of avatar size"
      }
    }
  },
  "spacing": {
    "1": {
      "value": "4px"
    },
    "2": {
      "value": "8px"
    },
    "3": {
      "value": "12px"
    },
    "4": {
      "value": "16px"
    },
    "5": {
      "value": "20px"
    },
    "6": {
      "value": "24px"
    },
    "8": {
      "value": "32px"
    },
    "10": {
      "value": "40px"
    },
    "$description": "Snap every gap and padding to this 4px scale (matches Tailwind's default). Do not invent in-between values."
  },
  "layout": {
    "$description": "Page shell of every product screen. These values are PINNED — page density is a brand constant, not a per-product choice. Working screens never use gaps/paddings above 40px; larger air belongs only to empty states and auth screens.",
    "page": {
      "padding": {
        "value": "24px 32px 40px"
      },
      "paddingMobile": {
        "value": "16px"
      },
      "sectionGap": {
        "value": "24px"
      },
      "gridGap": {
        "value": "16px"
      }
    },
    "reading": {
      "maxWidth": {
        "value": "840px"
      }
    },
    "pageHeader": {
      "marginBottom": {
        "value": "24px"
      },
      "title": {
        "value": "h1 (Onest 28/700)"
      },
      "meta": {
        "value": "caption 12px muted, values in IBM Plex Mono, · separators"
      }
    }
  },
  "density": {
    "$description": "Two sanctioned density modes — default and dense. Nothing in between, nothing airier. Dense is for monitoring/tables-heavy screens; default is everything else.",
    "panel": {
      "headerPadding": {
        "value": "16px 20px"
      },
      "bodyPadding": {
        "value": "20px"
      },
      "bodyPaddingDense": {
        "value": "12px 16px"
      }
    },
    "tableRow": {
      "default": {
        "value": "44px"
      },
      "dense": {
        "value": "36px"
      },
      "header": {
        "value": "40px"
      }
    }
  },
  "table": {
    "$description": "Base data table. Numbers/money/IDs/timestamps = IBM Plex Mono, right-aligned; text left; statuses = .bark-pill. No zebra stripes; hover = --surface-2; row separator = --line-2. Header = uppercase caption style.",
    "headerFont": {
      "value": "Onest 11px/700, uppercase, 0.06em, --faint"
    },
    "cellFont": {
      "value": "Onest 14px/400"
    },
    "cellPaddingX": {
      "value": "12px"
    },
    "edgePaddingX": {
      "value": "20px"
    },
    "rowSeparator": {
      "value": "{color.line2}"
    },
    "hover": {
      "value": "{color.surface2}"
    },
    "selected": {
      "value": "--accent-soft"
    },
    "sort": {
      "$description": "Ровно ОДНА активная сортировка на таблицу, у отсортированной колонки th[aria-sort]. Первый клик: числа/даты — по убыванию, текст — по возрастанию; повторный клик меняет направление. Multi-sort запрещён. Смена сортировки не сбрасывает фильтры, но возвращает на страницу 1; состояние — в URL query.",
      "singleActive": {
        "value": true
      },
      "firstClickNumbersDates": {
        "value": "desc"
      },
      "firstClickText": {
        "value": "asc"
      },
      "icon": {
        "value": "Lucide arrow-up / arrow-down 14px; неактивная сортируемая колонка — arrow-up-down --faint; активная — accent"
      },
      "multiSort": {
        "value": "forbidden"
      }
    },
    "rowActions": {
      "$description": "Последняя колонка «Действия», выравнивание вправо. До 2 частых действий — icon-only ghost 32px, видимы всегда (не только hover). 3+ действий — один kebab (Lucide more-vertical) с .bark-menu. Деструктивные — только в меню (--bad, за разделителем) и с подтверждением по правилам модалок.",
      "inlineMax": {
        "value": 2
      },
      "buttonSize": {
        "value": "32px"
      },
      "overflow": {
        "value": "kebab + .bark-menu"
      },
      "destructive": {
        "value": "menu-only + confirmation"
      }
    }
  },
  "emptyState": {
    "$description": "Empty state inside a region/panel: never full-screen, never a marketing hero. Icon 20px in a 40px --chip circle, title Onest 14/600 --ink2, hint 12px --muted (max 360px), optional ghost sm action.",
    "padding": {
      "value": "40px 20px"
    },
    "maxHintWidth": {
      "value": "360px"
    }
  },
  "toolbar": {
    "$description": "List/table toolbar inside the panel, above the table: search + up to 3 inline filters left, actions right. Controls are 32px (sm). Applied filters render as removable accent chips + a «Сбросить» ghost action. More than 3 filters → one «Фильтры» popover button; filter drawers are not used. Filter state is reflected in the URL query.",
    "padding": {
      "value": "12px 20px"
    },
    "controlHeight": {
      "value": "32px"
    },
    "gap": {
      "value": "8px"
    },
    "searchMinWidth": {
      "value": "220px"
    },
    "inlineFilterMax": {
      "value": "3"
    },
    "chip": {
      "height": {
        "value": "28px"
      },
      "font": {
        "value": "Onest 12px/600, accent on --accent-soft"
      }
    },
    "toggle": {
      "$description": "Inline multi-select: toggle-чипы 28px на aria-pressed, 2–6 опций. On = --accent-soft + accent-текст + Lucide check 14px; off = --chip + --ink2. НЕ чекбоксы в рамках/квадратах. Больше 6 опций — один popover «Фильтры». Перед группой — подпись caption 12/500 --muted с двоеточием; отдельные info-иконки в тулбаре не используются (пояснение — в подписи или title). Переключение применяется сразу, состояние в URL; toggle-чипы не дублируются в ряд применённых фильтров.",
      "height": {
        "value": "28px"
      },
      "maxOptions": {
        "value": 6
      },
      "on": {
        "value": "--accent-soft фон + --accent текст + check 14px"
      },
      "off": {
        "value": "--chip фон + --ink2 текст"
      }
    }
  },
  "pagination": {
    "$description": "Table pagination in the panel footer row. Mandatory above 50 rows; infinite scroll is not used in data tables. Range counter in IBM Plex Mono («1–50 из 1 234»), prev/next 32px icon buttons, fixed page sizes.",
    "pageSizes": {
      "value": [
        25,
        50,
        100
      ]
    },
    "defaultPageSize": {
      "value": 50
    },
    "threshold": {
      "value": 50
    },
    "buttonSize": {
      "value": "32px"
    },
    "padding": {
      "value": "10px 20px"
    }
  },
  "toast": {
    "$description": "ONE toast system per app (templates/toast.snippet.js): stack bottom-right, max 3 visible, width ≤360px. ok/info auto-dismiss 5s, warn 8s, bad stays until closed (role=alert). Toasts announce async/background results only — never form validation (inline hints), never blocking decisions (modal), never persistent region state (inline alert).",
    "placement": {
      "value": "bottom-right"
    },
    "width": {
      "value": "360px"
    },
    "offset": {
      "value": "16px"
    },
    "gap": {
      "value": "8px"
    },
    "maxVisible": {
      "value": 3
    },
    "titleMax": {
      "value": 60
    },
    "textMax": {
      "value": 140
    },
    "autoDismiss": {
      "ok": {
        "value": "5000ms"
      },
      "info": {
        "value": "5000ms"
      },
      "warn": {
        "value": "8000ms"
      },
      "bad": {
        "value": "sticky"
      }
    }
  },
  "alert": {
    "$description": "Inline banner for a PERSISTENT region state (degraded mode, stale data, read-only). Sits inside its region, stays until the state clears, never auto-dismisses, never stacks. Toast = событие, alert = состояние.",
    "padding": {
      "value": "12px 16px"
    },
    "radius": {
      "value": "8px"
    },
    "font": {
      "value": "Onest 13px/1.45"
    }
  },
  "format": {
    "$description": "ONE data-format contract for every product (docs/DATA_FORMATS.md; executable source templates/format.snippet.js). Intl ru-RU; every timestamp renders in МСК; data values are IBM Plex Mono. Hand-rolled separators/suffixes are a brand violation.",
    "locale": {
      "value": "ru-RU"
    },
    "timezone": {
      "value": "Europe/Moscow"
    },
    "timezoneLabel": {
      "value": "МСК"
    },
    "date": {
      "numeric": {
        "value": "ДД.ММ.ГГГГ"
      },
      "withTime": {
        "value": "ДД.ММ.ГГГГ, ЧЧ:ММ"
      },
      "time": {
        "value": "24h ЧЧ:ММ; секунды только в мониторинге/логах"
      }
    },
    "relative": {
      "$description": "только что → N мин назад → сегодня, ЧЧ:ММ → вчера, ЧЧ:ММ → ДД.ММ, ЧЧ:ММ → ДД.ММ.ГГГГ, ЧЧ:ММ. Future = absolute.",
      "justNowUnder": {
        "value": "60s"
      },
      "minutesUnder": {
        "value": "60min"
      },
      "refresh": {
        "value": "60s"
      }
    },
    "money": {
      "currency": {
        "value": "RUB"
      },
      "symbol": {
        "value": "₽ после числа"
      },
      "decimals": {
        "value": 2
      },
      "kpiCompact": {
        "value": "3,6 млн ₽ — только KPI-агрегаты"
      }
    },
    "compact": {
      "value": "тыс. / млн / млрд, до 1 знака; латинские K/M запрещены"
    },
    "bytes": {
      "base": {
        "value": 1024
      },
      "units": {
        "value": "Б КБ МБ ГБ ТБ"
      }
    },
    "duration": {
      "value": "мс → с → мин [с] → ч мин → д ч (846 мс / 2,4 с / 3 мин 20 с / 1 ч 05 мин / 1 д 4 ч)"
    },
    "phone": {
      "value": "+7 999 123-45-67"
    }
  },
  "motion": {
    "$description": "One motion language. Transitions apply only to color, background, border-color, box-shadow, opacity, transform — never `transition: all`. Hover/focus = fast; popover/modal/dropdown enter = base; region/page reveal = slow. prefers-reduced-motion disables non-essential animation.",
    "fast": {
      "value": "120ms"
    },
    "base": {
      "value": "200ms"
    },
    "slow": {
      "value": "300ms"
    },
    "easing": {
      "value": "cubic-bezier(0.2, 0, 0, 1)"
    }
  },
  "z": {
    "$description": "Pinned z-index scale. Do not invent values between these.",
    "sticky": {
      "value": "20"
    },
    "dropdown": {
      "value": "600"
    },
    "drawer": {
      "value": "800"
    },
    "modal": {
      "value": "1000"
    },
    "popover": {
      "value": "1100"
    },
    "toast": {
      "value": "1200"
    },
    "loader": {
      "value": "9999"
    }
  },
  "text": {
    "$description": "In-page heading + body scale. All interface text, including h1/h2, uses Onest. The Red Hat Display wordmark has its own scale under `wordmark`.",
    "h1": {
      "font": {
        "value": "ui"
      },
      "size": {
        "value": "28px"
      },
      "weight": {
        "value": "700"
      },
      "lineHeight": {
        "value": "1.15"
      }
    },
    "h2": {
      "font": {
        "value": "ui"
      },
      "size": {
        "value": "20px"
      },
      "weight": {
        "value": "700"
      },
      "lineHeight": {
        "value": "1.2"
      }
    },
    "h3": {
      "font": {
        "value": "ui"
      },
      "size": {
        "value": "15px"
      },
      "weight": {
        "value": "700"
      },
      "lineHeight": {
        "value": "1.3"
      }
    },
    "body": {
      "font": {
        "value": "ui"
      },
      "size": {
        "value": "14px"
      },
      "weight": {
        "value": "400"
      },
      "lineHeight": {
        "value": "1.5"
      }
    },
    "caption": {
      "font": {
        "value": "ui"
      },
      "size": {
        "value": "12px"
      },
      "weight": {
        "value": "500"
      },
      "lineHeight": {
        "value": "1.4"
      }
    }
  },
  "icon": {
    "$description": "One icon set, one stroke. Outline icons only. Import from the official Lucide package for the framework in use.",
    "set": {
      "value": "Lucide"
    },
    "sourceUrl": {
      "value": "https://lucide.dev/"
    },
    "strokeWidth": {
      "value": "1.7"
    },
    "size": {
      "sidebar": {
        "value": "18px"
      },
      "content": {
        "value": "20px"
      }
    }
  },
  "button": {
    "$description": "Button sizes (pinned heights). radius = --radius-control (8px); primary = solid --accent + white text; ghost = transparent + --line border + --ink2. --block = full width, --icon = square.",
    "size": {
      "sm": {
        "height": {
          "value": "32px"
        },
        "padding": {
          "value": "0 12px"
        },
        "font": {
          "value": "13px"
        }
      },
      "md": {
        "height": {
          "value": "40px"
        },
        "padding": {
          "value": "0 16px"
        },
        "font": {
          "value": "14px"
        }
      },
      "lg": {
        "height": {
          "value": "48px"
        },
        "padding": {
          "value": "0 20px"
        },
        "font": {
          "value": "15px"
        }
      }
    }
  },
  "input": {
    "$description": "Form controls. Labels stay visible; placeholders never replace labels. Numeric/data fields use IBM Plex Mono.",
    "size": {
      "sm": {
        "height": {
          "value": "32px"
        }
      },
      "md": {
        "height": {
          "value": "40px"
        }
      },
      "lg": {
        "height": {
          "value": "48px"
        }
      }
    },
    "radius": {
      "value": "8px"
    },
    "label": {
      "size": {
        "value": "12px"
      },
      "weight": {
        "value": "600"
      }
    },
    "helper": {
      "size": {
        "value": "12px"
      },
      "weight": {
        "value": "500"
      }
    },
    "textareaMinHeight": {
      "value": "96px"
    }
  },
  "modal": {
    "$description": "Short blocking decisions only. Header/footer remain visible; body scrolls. Never nest modals.",
    "width": {
      "sm": {
        "value": "400px"
      },
      "md": {
        "value": "560px"
      },
      "lg": {
        "value": "720px"
      }
    },
    "maxHeight": {
      "value": "85dvh"
    },
    "backdrop": {
      "value": "rgba(20, 24, 31, 0.56)"
    }
  },
  "chart": {
    "$description": "Allowed chart types and base rendering tokens. See docs/COMPONENT_RULES.md.",
    "library": {
      "value": "Apache ECharts 5+"
    },
    "delivery": {
      "value": "self-hosted vendor bundle предоставляет продукт; CDN запрещён"
    },
    "theme": {
      "value": "templates/chart-theme.snippet.js → registerBarkTheme(echarts)"
    },
    "legacy": {
      "value": "существующая chart library приложения остаётся (не менять ради брендинга) и стилизуется под эти же токены"
    },
    "allowed": {
      "value": [
        "line",
        "area",
        "bar",
        "horizontal-bar",
        "stacked-bar",
        "donut",
        "scatter",
        "sparkline"
      ]
    },
    "series": {
      "$description": "Ordered data palette: series 1 = живой --accent (следует теме), 2–4 — фиксированные средние тона, различимые в light и dark и не совпадающие со статусами ok/warn/bad.",
      "value": [
        "--accent",
        "#2a6fdb",
        "#8a63d2",
        "#5c6b7a"
      ]
    },
    "maxSeries": {
      "value": 4
    },
    "lineWidth": {
      "value": "2px"
    },
    "areaOpacity": {
      "value": "0.12"
    },
    "animation": {
      "value": "200ms"
    },
    "gridColor": {
      "value": "{color.line2}"
    },
    "primaryColor": {
      "value": "{color.accent}"
    }
  },
  "menu": {
    "$description": "Dropdown/popover menu — kebab строк таблицы, «Фильтры» тулбара. Слой --z-dropdown; деструктивный пункт — --bad и отделён разделителем.",
    "minWidth": {
      "value": "180px"
    },
    "itemHeight": {
      "value": "36px"
    },
    "padding": {
      "value": "4px"
    }
  },
  "loader": {
    "$description": "One Bark loading language for cold start, route transitions, regions, buttons and long progress. Mandatory for route transitions and async buttons.",
    "timing": {
      "routeDelay": {
        "value": "150ms"
      },
      "minVisible": {
        "value": "300ms"
      },
      "regionThreshold": {
        "value": "400ms"
      },
      "slowLabel": {
        "value": "2000ms"
      },
      "failSafe": {
        "value": "8000ms"
      }
    },
    "brand": {
      "lg": {
        "size": {
          "value": "60px"
        },
        "mark": {
          "value": "43px"
        }
      },
      "md": {
        "size": {
          "value": "40px"
        },
        "mark": {
          "value": "29px"
        }
      },
      "sm": {
        "size": {
          "value": "28px"
        },
        "mark": {
          "value": "20px"
        }
      },
      "duration": {
        "value": "900ms"
      },
      "stroke": {
        "value": "1.5"
      }
    },
    "button": {
      "size": {
        "value": "18px"
      },
      "stroke": {
        "value": "2px"
      }
    },
    "sso": {
      "$description": "Every existing SSO login button shows immediate Bark button loading until redirect or error. Do not add a second login button or combine this phase with a full-screen overlay.",
      "required": {
        "value": true
      },
      "label": {
        "value": "Входим…"
      },
      "placement": {
        "value": "existing-login-button"
      },
      "start": {
        "value": "immediate"
      },
      "end": {
        "value": "redirect-or-error"
      },
      "spinnerSize": {
        "value": "18px"
      },
      "error": {
        "value": "restore-button-and-show-error"
      }
    },
    "route": {
      "height": {
        "value": "2.5px"
      }
    }
  },
  "theme": {
    "$description": "Three theme modes selected by a pinned switch. DEFAULT = system (follows prefers-color-scheme); also light and dark. Dark applies via :root[data-theme=\"dark\"]. theme.dark below is the SINGLE SOURCE for dark values — its key set must match the brand.css dark block exactly (check-brand-pack enforces). Dark values are tunable; when tuning, keep every text/icon token >=4.5:1 (>=3:1 if >=18px/bold) on --bg AND --surface.",
    "modes": {
      "value": [
        "light",
        "dark",
        "system"
      ]
    },
    "default": {
      "value": "system"
    },
    "dark": {
      "accent": {
        "value": "#1fb6c3"
      },
      "banner": {
        "value": "#1d2f57"
      },
      "bg": {
        "value": "#0e1116"
      },
      "surface": {
        "value": "#161b22"
      },
      "surface2": {
        "value": "#1b212b"
      },
      "ink": {
        "value": "#e7eaef"
      },
      "ink2": {
        "value": "#aab3c0"
      },
      "muted": {
        "value": "#8a93a2"
      },
      "faint": {
        "value": "#69727f"
      },
      "line": {
        "value": "#262d38"
      },
      "line2": {
        "value": "#1b212b"
      },
      "field": {
        "value": "#1a2029"
      },
      "chip": {
        "value": "#222a35"
      },
      "sidebarBg": {
        "value": "#11151b"
      },
      "raised": {
        "value": "#2b3543"
      },
      "ok": {
        "value": "#2bb47f"
      },
      "warn": {
        "value": "#e0a23a"
      },
      "bad": {
        "value": "#ef5a6e"
      },
      "info": {
        "value": "#5a8ff0"
      },
      "shadowCard": {
        "value": "0 1px 2px #00000040"
      },
      "shadowPop": {
        "value": "0 8px 28px #00000080"
      },
      "shadowUp": {
        "value": "0 1px 2px #00000040, 0 10px 30px #00000066"
      }
    }
  },
  "productColors": {
    "$description": "Each product owns one colour. It fills the favicon bowl and the module word, so a strip of tabs is told apart at a glance. New products take the next free colour; do not reuse a status colour.",
    "one": {
      "value": "#0d8f9c"
    },
    "mon": {
      "value": "#2f6fed"
    },
    "pay": {
      "value": "#1f9d63"
    },
    "ops": {
      "value": "#7c4dd6"
    },
    "admin": {
      "value": "#d6a100"
    },
    "hr": {
      "value": "#e0871f"
    },
    "crm": {
      "value": "#d6457e"
    },
    "marketing": {
      "value": "#b5326a"
    },
    "ledger": {
      "value": "#164a2f"
    },
    "stock": {
      "value": "#61762f"
    }
  },
  "dynamicFavicons": {
    "$description": "A product favicon MAY be dynamic — its bowl colour reflects live state, swapped at runtime (see templates/dynamic-favicon.snippet.js). The brand colour in productColors still drives the app icon and lockup. If no palette colour fits a new product, ASK the owner which colour to use — do not guess.",
    "mon": {
      "ok": "#15a06a",
      "alert": "#e23d52"
    }
  },
  "product": {
    "one": {
      "displayName": {
        "value": "barkone"
      },
      "subtitle": {
        "value": "Личный кабинет"
      },
      "color": {
        "value": "#0d8f9c"
      },
      "description": {
        "value": "Личный кабинет сотрудника компании"
      }
    },
    "mon": {
      "displayName": {
        "value": "barkmon"
      },
      "subtitle": {
        "value": "Мониторинг"
      },
      "color": {
        "value": "#2f6fed"
      },
      "description": {
        "value": "Мониторинг показателей, статусов и операционных сигналов"
      }
    },
    "ops": {
      "displayName": {
        "value": "barkops"
      },
      "subtitle": {
        "value": "Операции поддержки"
      },
      "color": {
        "value": "#7c4dd6"
      },
      "description": {
        "value": "Операции поддержки, задач и внутренних ботов"
      }
    },
    "admin": {
      "displayName": {
        "value": "barkadmin"
      },
      "subtitle": {
        "value": "Админка"
      },
      "color": {
        "value": "#d6a100"
      },
      "description": {
        "value": "Админка внутренних ботов, отчетов и сервисов"
      }
    },
    "pay": {
      "displayName": {
        "value": "barkpay"
      },
      "subtitle": {
        "value": "Платежи"
      },
      "color": {
        "value": "#1f9d63"
      }
    },
    "hr": {
      "displayName": {
        "value": "barkhr"
      },
      "subtitle": {
        "value": "Персонал"
      },
      "color": {
        "value": "#e0871f"
      },
      "description": {
        "value": "Сотрудники, кадровые процессы, документы и графики"
      }
    },
    "crm": {
      "displayName": {
        "value": "barkcrm"
      },
      "subtitle": {
        "value": "CRM"
      },
      "color": {
        "value": "#d6457e"
      }
    },
    "marketing": {
      "displayName": {
        "value": "barkmarketing"
      },
      "subtitle": {
        "value": "Маркетинг"
      },
      "color": {
        "value": "#b5326a"
      },
      "description": {
        "value": "Генерация и учёт рекламных реф-меток, статистика продаж по креативам"
      }
    },
    "ledger": {
      "displayName": {
        "value": "barkledger"
      },
      "subtitle": {
        "value": "Финансы проектов"
      },
      "color": {
        "value": "#164a2f"
      },
      "description": {
        "value": "Финансовая отчетность по направлениям компании"
      }
    },
    "stock": {
      "displayName": {
        "value": "barkstock"
      },
      "subtitle": {
        "value": "Склад"
      },
      "color": {
        "value": "#61762f"
      },
      "description": {
        "value": "Остатки, приемка, перемещения и инвентаризация"
      }
    }
  }
}
