Design tokens
Every visual value in OGE UI is a --oge-* CSS custom property. This table is generated from the token source and the theme stylesheets at build time, so it always matches what ships. Try values live in the theme builder, or read Style the app for how to override them.
All tokens
Identical in Angular and React. Both render layers draw the same .oge-* classes from one stylesheet, so every token below themes both.
115 of 115 tokens
| Token | Default (light) | Dark | High contrast | Tailwind | Bootstrap | Used by |
|---|---|---|---|---|---|---|
| Colour 30 | ||||||
| --oge-bg | #ffffff | #111827 | same as default | same as default | var(--bs-body-bg, #ffffff) | 15 packagesbehavior, bpmn, buttons, charts, charts-engine, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, upload |
| --oge-text-color | #1e2430 | #d1d5db | #000000 | var(--color-slate-700, #334155) | var(--bs-body-color, #212529) | 18 packagesbehavior, bpmn, buttons, charts, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-border-color | #e6e9ef | #374151 | #1a1a1a | var(--color-slate-200, #e2e8f0) | var(--bs-border-color, #dee2e6) | 18 packagesbehavior, bpmn, buttons, charts, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-header-bg | #fafbfc | #1f2937 | #f2f2f2 | var(--color-slate-50, #f8fafc) | var(--bs-tertiary-bg, #f8f9fa) | 11 packagesbpmn, buttons, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler |
| --oge-header-color | #5b6472 | #e5e7eb | #000000 | var(--color-slate-600, #475569) | var(--bs-emphasis-color, #212529) | 7 packagesgantt, grid, inputs, kanban, layout, pivot, scheduler |
| --oge-row-hover-bg | #f5f7fa | #1e293b | #e8e8e8 | var(--color-slate-100, #f1f5f9) | var(--bs-secondary-bg, #e9ecef) | 16 packagesbpmn, buttons, charts, editor, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-selected-bg | #e9f0fd | #1e3a5f | #cfe0ff | var(--color-indigo-50, #eef2ff) | rgba(var(--bs-primary-rgb, 13, 110, 253), 0.15) | 6 packagesgantt, grid, inputs, layout, navigation, upload |
| --oge-row-alt-bg | rgba(148, 163, 184, 0.08) | rgba(148, 163, 184, 0.06) | #f5f5f5 | same as default | same as default | grid |
| --oge-muted-color≥ 4.5:1 on every light surface (bg, header, group, hover, selected) | #636b78 | #9ca3af | #404040 | var(--color-slate-500, #64748b) | var(--bs-secondary-color, #6c757d) | 16 packagesbpmn, buttons, charts, charts-engine, editor, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, upload |
| --oge-group-bg | #f4f6f9 | #182031 | #ededed | var(--color-slate-100, #f1f5f9) | var(--bs-tertiary-bg, #f8f9fa) | 5 packagesgrid, layout, pivot, scheduler, upload |
| --oge-detail-bg | #fafbfd | #0f1623 | #f7f7f7 | var(--color-slate-50, #f8fafc) | var(--bs-tertiary-bg, #f8f9fa) | grid, scheduler |
| --oge-popup-bg | #ffffff | #1f2937 | same as default | same as default | var(--bs-body-bg, #ffffff) | 10 packagesbpmn, buttons, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler |
| --oge-accent | #2563eb | #60a5fa | #0037b3 | var(--color-indigo-600, #4f46e5) | var(--bs-primary, #0d6efd) | 16 packagesbpmn, buttons, charts, editor, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-successseverity palette (buttons, inputs, toasts, badges); each fill carries white text and each colour reads as text on white at >= 4.5:1 | #15803d | #22c55e | #00611a | var(--color-green-700, #15803d) | var(--bs-success, #198754) | 11 packagesbpmn, buttons, charts, charts-engine, gantt, grid, inputs, kanban, layout, overlay, upload |
| --oge-success-soft | rgba(21, 128, 61, 0.12) | rgba(34, 197, 94, 0.16) | rgba(0, 97, 26, 0.12) | color-mix(in srgb, var(--color-green-700, #15803d) 12%, transparent) | rgba(var(--bs-success-rgb, 25, 135, 84), 0.12) | 6 packagesbpmn, buttons, inputs, kanban, layout, overlay |
| --oge-warning | #b45309 | #f59e0b | #7a4100 | var(--color-amber-700, #b45309) | var(--bs-warning, #ffc107) | 12 packagesbpmn, buttons, charts, charts-engine, gantt, grid, kanban, layout, overlay, scheduler, tabs, upload |
| --oge-warning-soft | rgba(180, 83, 9, 0.14) | rgba(245, 158, 11, 0.16) | rgba(122, 65, 0, 0.12) | color-mix(in srgb, var(--color-amber-700, #b45309) 14%, transparent) | rgba(var(--bs-warning-rgb, 255, 193, 7), 0.15) | 5 packagesbpmn, buttons, kanban, layout, overlay |
| --oge-danger | #dc2626 | #ef4444 | #b3000c | var(--color-red-600, #dc2626) | var(--bs-danger, #dc3545) | 15 packagesbpmn, buttons, charts, charts-engine, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, scheduler, upload |
| --oge-danger-soft | rgba(220, 38, 38, 0.12) | rgba(239, 68, 68, 0.16) | rgba(179, 0, 12, 0.1) | color-mix(in srgb, var(--color-red-600, #dc2626) 12%, transparent) | rgba(var(--bs-danger-rgb, 220, 53, 69), 0.12) | 12 packagesbpmn, buttons, editor, forms, gantt, inputs, kanban, layout, navigation, overlay, scheduler, upload |
| --oge-severity-contrasttext color on contained severity/accent fills | #ffffff | #0b1220 | same as default | same as default | same as default | 9 packagesbuttons, gantt, grid, inputs, kanban, layout, navigation, overlay, scheduler |
| --oge-skeleton-colorloading placeholders (skeleton bones, grid skeleton rows) | rgba(148, 163, 184, 0.25) | rgba(148, 163, 184, 0.18) | #bfbfbf | same as default | same as default | grid, layout |
| --oge-scrollbar-thumbscrollbars of every scroll area the suite draws (grid body, lists, calendars, pivot); visible against the surface on a mouse desktop | rgba(100, 116, 139, 0.45) | rgba(148, 163, 184, 0.4) | #404040 | same as default | same as default | 6 packagesgrid, inputs, kanban, navigation, pivot, scheduler |
| --oge-scrollbar-thumb-hover | rgba(100, 116, 139, 0.7) | rgba(148, 163, 184, 0.62) | #000000 | same as default | same as default | grid |
| --oge-scrollbar-track | transparent | same as default | #f2f2f2 | same as default | same as default | 6 packagesgrid, inputs, kanban, navigation, pivot, scheduler |
| --oge-accent-softderivedsoft accent tints: follow --oge-accent wherever it is set with them | color-mix(in srgb, var(--oge-accent) 8%, transparent) | rgba(96, 165, 250, 0.12) | color-mix(in srgb, var(--oge-accent) 10%, transparent) | color-mix(in srgb, var(--oge-accent) 10%, transparent) | color-mix(in srgb, var(--oge-accent) 10%, transparent) | 17 packagesbpmn, buttons, charts, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-accent-25derived | color-mix(in srgb, var(--oge-accent) 25%, transparent) | rgba(96, 165, 250, 0.3) | same as default | same as default | same as default | 10 packagesbuttons, editor, grid, inputs, layout, navigation, overlay, scheduler, tabs, upload |
| --oge-focus-ringderived | color-mix(in srgb, var(--oge-accent) 40%, transparent) | rgba(96, 165, 250, 0.45) | var(--oge-accent) | same as default | same as default | 8 packagesbpmn, buttons, editor, grid, inputs, kanban, layout, navigation |
| --oge-row-focused-bgderivedderived tokens, re-resolved inside this scope so a dark subtree gets dark tints (keep in sync with derived-tokens in _tokens.scss) | color-mix(in srgb, var(--oge-accent) 10%, transparent) | same as default | color-mix(in srgb, var(--oge-accent) 12%, transparent) | same as default | same as default | grid, layout |
| --oge-update-flash-bgderived | color-mix(in srgb, var(--oge-accent) 24%, transparent) | rgba(96, 165, 250, 0.28) | same as default | same as default | same as default | grid |
| --oge-warning-contrastBootstrap's warning is a light amber — dark text, like Bootstrap itself | not set | same as default | same as default | same as default | #212529 | buttons |
| Spacing & size 4 | ||||||
| --oge-cell-padding-x | 14px | same as default | same as default | same as default | same as default | grid, pivot |
| --oge-cell-padding-y | 8px | same as default | same as default | same as default | 10px | grid, pivot |
| --oge-row-height | 36px | same as default | same as default | same as default | 42px | grid |
| --oge-tree-indent | 20px | same as default | same as default | same as default | same as default | react-tree-list |
| Radius 2 | ||||||
| --oge-radius | 6px | same as default | same as default | var(--radius-lg, 8px) | var(--bs-border-radius, 6px) | 18 packagesbehavior, bpmn, buttons, charts, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list, upload |
| --oge-radius-lg | 10px | same as default | same as default | same as default | same as default | 14 packagesbpmn, charts, editor, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tree-list, upload |
| Typography 2 | ||||||
| --oge-font-size | 14px | same as default | same as default | var(--text-sm, 13.5px) | 15px | 16 packagesbpmn, buttons, charts, editor, forms, gantt, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler, tabs, tree-list |
| --oge-font-mono | ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace | same as default | same as default | same as default | same as default | bpmn, editor |
| Elevation 4 | ||||||
| --oge-shadow-popup | 0 12px 32px -8px rgba(15, 23, 42, 0.18), 0 4px 12px -6px rgba(15, 23, 42, 0.1) | 0 12px 32px -8px rgba(0, 0, 0, 0.55), 0 4px 12px -6px rgba(0, 0, 0, 0.4) | 0 0 0 1px #000000, 0 8px 24px -8px rgba(0, 0, 0, 0.35) | same as default | same as default | 11 packagesbehavior, bpmn, buttons, grid, inputs, kanban, layout, navigation, overlay, pivot, scheduler |
| --oge-shadow-btnelevation of contained buttons (dark theme overrides with black-based) | 0 1px 2px rgba(15, 23, 42, 0.12) | 0 1px 2px rgba(0, 0, 0, 0.4) | 0 0 0 1px #000000 | same as default | same as default | 9 packagesbuttons, charts, gantt, inputs, kanban, layout, overlay, scheduler, upload |
| --oge-shadow-btn-hover | 0 2px 6px rgba(15, 23, 42, 0.16) | 0 2px 6px rgba(0, 0, 0, 0.5) | 0 0 0 2px #000000 | same as default | same as default | 6 packagesbuttons, gantt, layout, overlay, scheduler, upload |
| --oge-shadow-cardresting elevation of raised cards — lighter than --oge-shadow-popup | 0 1px 3px rgba(15, 23, 42, 0.08), 0 4px 12px -4px rgba(15, 23, 42, 0.1) | 0 1px 3px rgba(0, 0, 0, 0.35), 0 4px 12px -4px rgba(0, 0, 0, 0.3) | 0 0 0 1px #000000 | same as default | same as default | 4 packagesbpmn, layout, overlay, upload |
| Z-index 7 | ||||||
| --oge-z-popupstacking layer of anchored popups/menus | 1000 | same as default | same as default | same as default | same as default | kanban, overlay |
| --oge-z-windownon-modal floating windows: below anchored popups (a select opened in a window shows above it) and modals; each window adds its stacking layer | 900 | same as default | same as default | same as default | same as default | behavior, overlay |
| --oge-z-fabfloating action buttons: below windows, popups and modals, above content | 800 | same as default | same as default | same as default | same as default | buttons |
| --oge-z-app-barfixed / sticky app bars: below FABs, so a FAB never hides under a bottom bar | 700 | same as default | same as default | same as default | same as default | layout |
| --oge-z-modalmodal layer (above anchored popups; legacy grid dialogs sit at 1090/1100) | 1100 | same as default | same as default | same as default | same as default | layout, overlay, scheduler |
| --oge-z-drawerdrawer panel; shares the modal layer, ordering comes from the shared stack | 1100 | same as default | same as default | same as default | same as default | navigation |
| --oge-z-toasttoast regions (above modals — failure toasts must show over open dialogs) | 1200 | same as default | same as default | same as default | same as default | overlay |
| Component-specific 66 | ||||||
| --oge-badge-bg | #dc2626 | #ef4444 | #b3000c | var(--color-red-600, #dc2626) | var(--bs-danger, #dc3545) | 4 packagesbuttons, layout, navigation, tabs |
| --oge-badge-color | #ffffff | #0b1220 | same as default | same as default | same as default | 4 packagesbuttons, layout, navigation, tabs |
| --oge-switch-thumbswitch knob — stays light on both themes, like the platform controls | #ffffff | same as default | same as default | same as default | same as default | inputs |
| --oge-modal-backdrop-bg | rgb(15 23 42 / 0.32) | rgb(0 0 0 / 0.55) | rgb(0 0 0 / 0.6) | same as default | same as default | 5 packagesgrid, layout, navigation, overlay, scheduler |
| --oge-toast-width | 360px | same as default | same as default | same as default | same as default | overlay |
| --oge-tooltip-bgtooltip bubble (inverted surface; dark theme overrides) | #1e2430 | #334155 | #000000 | same as default | same as default | 5 packagesbuttons, charts, gantt, layout, overlay |
| --oge-tooltip-color | #f5f7fa | #f1f5f9 | #ffffff | same as default | same as default | 5 packagesbuttons, charts, gantt, layout, overlay |
| --oge-scheduler-chip-fgscheduler surfaces (commercial package hooks into the same theme files) | #ffffff | #0b1220 | same as default | same as default | same as default | scheduler |
| --oge-scheduler-now-color | #dc2626 | #ef4444 | #b3000c | same as default | same as default | scheduler |
| --oge-gantt-bar-fggantt surfaces | #ffffff | #0b1220 | same as default | same as default | same as default | gantt |
| --oge-gantt-scale-headheight of the timeline scale header (gantt chart pane) | 48px | same as default | same as default | same as default | same as default | gantt |
| --oge-gantt-summary-bg | #475569 | #94a3b8 | #333333 | same as default | same as default | gantt |
| --oge-gantt-milestone-bg | #7c3aed | same as default | #5b00b3 | same as default | same as default | gantt |
| --oge-gantt-baseline-bg | rgba(100, 116, 139, 0.45) | same as default | #595959 | same as default | same as default | gantt |
| --oge-gantt-offday-bg | rgba(148, 163, 184, 0.1) | rgba(148, 163, 184, 0.07) | #f0f0f0 | same as default | same as default | gantt |
| --oge-gantt-today-color | #dc2626 | #ef4444 | #b3000c | same as default | same as default | gantt |
| --oge-gantt-arrow-color | #94a3b8 | #64748b | #000000 | same as default | same as default | gantt |
| --oge-kanban-board-bgkanban surfaces | transparent | same as default | same as default | same as default | same as default | kanban |
| --oge-kanban-column-bg | #f6f8fb | rgba(148, 163, 184, 0.08) | #f2f2f2 | same as default | same as default | kanban |
| --oge-kanban-column-header-bg | transparent | same as default | same as default | same as default | same as default | none yet |
| --oge-kanban-card-ring | rgba(15, 23, 42, 0.07) | rgba(255, 255, 255, 0.08) | #000000 | same as default | same as default | kanban |
| --oge-kanban-card-shadow | 0 1px 2px rgba(15, 23, 42, 0.1) | 0 1px 2px rgba(0, 0, 0, 0.4) | 0 0 0 1px #000000 | same as default | same as default | kanban |
| --oge-kanban-card-shadow-hover | 0 3px 10px rgba(15, 23, 42, 0.16) | 0 3px 10px rgba(0, 0, 0, 0.5) | 0 0 0 2px #000000 | same as default | same as default | kanban |
| --oge-kanban-card-shadow-drag | 0 12px 28px -6px rgba(15, 23, 42, 0.28), 0 4px 10px -4px rgba(15, 23, 42, 0.18) | 0 12px 28px -6px rgba(0, 0, 0, 0.6), 0 4px 10px -4px rgba(0, 0, 0, 0.45) | 0 0 0 2px #000000, 0 12px 28px -6px rgba(0, 0, 0, 0.4) | same as default | same as default | kanban |
| --oge-kanban-tag-bg | rgba(100, 116, 139, 0.14) | rgba(148, 163, 184, 0.18) | #e0e0e0 | same as default | same as default | kanban |
| --oge-kanban-avatar-bg | #64748b | #94a3b8 | #333333 | same as default | same as default | kanban |
| --oge-kanban-avatar-fg | #ffffff | #0b1220 | same as default | same as default | same as default | kanban |
| --oge-chart-grid-linecharts surfaces | rgba(148, 163, 184, 0.22) | rgba(148, 163, 184, 0.14) | #8c8c8c | same as default | same as default | charts |
| --oge-chart-crosshair | rgba(100, 116, 139, 0.55) | rgba(148, 163, 184, 0.5) | #000000 | same as default | same as default | charts |
| --oge-chart-strip-bg | rgba(148, 163, 184, 0.14) | rgba(148, 163, 184, 0.1) | rgba(0, 0, 0, 0.08) | same as default | same as default | charts |
| --oge-chart-zoom-bg | rgba(99, 102, 241, 0.14) | rgba(129, 140, 248, 0.18) | rgba(0, 55, 179, 0.16) | same as default | same as default | charts |
| --oge-chart-candle-up | #10b981 | same as default | #00611a | same as default | same as default | charts |
| --oge-chart-candle-down | #ef4444 | same as default | #b3000c | same as default | same as default | charts |
| --oge-chart-heat-lowheatmap / map colour scale ends (W8c) | #e0e7ff | #1e1b4b | #ffffff | same as default | same as default | charts-engine |
| --oge-chart-heat-high | #4338ca | #a5b4fc | #0037b3 | same as default | same as default | charts-engine |
| --oge-input-mutedderivedreadable muted text (labels/placeholders/hints — WCAG-safe) | var(--oge-header-color) | same as default | var(--oge-muted-color) | same as default | same as default | 11 packagesbpmn, buttons, editor, forms, gantt, inputs, kanban, layout, navigation, overlay, tabs |
| --oge-input-filled-bgderivedfilled-field surface; dark theme overrides with a surface-independent tint | var(--oge-header-bg) | rgba(148, 163, 184, 0.08) | same as default | same as default | same as default | editor, inputs |
| --oge-scheduler-chip-bgderived | var(--oge-accent) | same as default | same as default | same as default | same as default | scheduler |
| --oge-scheduler-grid-linederived | var(--oge-border-color) | same as default | same as default | same as default | same as default | scheduler |
| --oge-scheduler-allday-bgderived | var(--oge-header-bg) | same as default | same as default | same as default | same as default | scheduler |
| --oge-scheduler-hour-fgderived | var(--oge-muted-color) | same as default | same as default | same as default | same as default | scheduler |
| --oge-scheduler-off-hours-bgderived | var(--oge-detail-bg) | same as default | same as default | same as default | same as default | scheduler |
| --oge-gantt-bar-bgderived | var(--oge-accent) | same as default | same as default | same as default | same as default | gantt |
| --oge-gantt-grid-linederived | var(--oge-border-color) | same as default | same as default | same as default | same as default | gantt |
| --oge-kanban-card-bgderived | var(--oge-bg) | same as default | same as default | same as default | same as default | kanban |
| --oge-kanban-card-fgderived | var(--oge-text-color) | same as default | same as default | same as default | same as default | kanban |
| --oge-kanban-placeholder-borderderived | var(--oge-accent-25) | same as default | var(--oge-accent) | same as default | same as default | kanban |
| --oge-kanban-placeholder-bgderived | var(--oge-accent-soft) | same as default | same as default | same as default | same as default | kanban |
| --oge-kanban-lane-borderderived | var(--oge-border-color) | same as default | same as default | same as default | same as default | kanban |
| --oge-chart-axis-linederived | var(--oge-border-color) | same as default | var(--oge-text-color) | same as default | same as default | charts |
| --oge-chart-axis-fgderived | var(--oge-muted-color) | same as default | same as default | same as default | same as default | charts |
| --oge-avatar-bgderived | color-mix(in srgb, var(--oge-accent) 14%, var(--oge-bg)) | same as default | var(--oge-bg) | same as default | same as default | layout |
| --oge-avatar-fgderived | color-mix(in srgb, var(--oge-accent) 80%, var(--oge-text-color)) | same as default | var(--oge-text-color) | same as default | same as default | layout |
| --oge-rating-colorderived | var(--oge-warning) | same as default | same as default | same as default | same as default | inputs |
| --oge-rating-empty-colorderived | var(--oge-muted-color) | same as default | same as default | same as default | same as default | inputs |
| --oge-signature-inkderived | var(--oge-text-color) | same as default | same as default | same as default | same as default | inputs |
| --oge-signature-bgderived | var(--oge-bg) | same as default | same as default | same as default | same as default | inputs |
| --oge-chart-trackderivedgauges, bullets, heatmap / map empties, neutral Sankey links (W8c) | color-mix(in srgb, var(--oge-muted-color) 22%, transparent) | same as default | color-mix(in srgb, var(--oge-text-color) 22%, transparent) | same as default | same as default | charts |
| --oge-chart-needlederived | var(--oge-text-color) | same as default | same as default | same as default | same as default | charts |
| --oge-chart-emptyderived | color-mix(in srgb, var(--oge-muted-color) 14%, var(--oge-bg)) | same as default | same as default | same as default | same as default | charts-engine |
| --oge-chart-linkderived | var(--oge-muted-color) | same as default | same as default | same as default | same as default | charts-engine |
| --oge-editor-bgderivedrich-text editor (W8e) | var(--oge-bg) | same as default | same as default | same as default | same as default | editor |
| --oge-editor-toolbar-bgderived | var(--oge-header-bg) | same as default | var(--oge-bg) | same as default | same as default | editor |
| --oge-editor-linkderived | var(--oge-accent) | same as default | same as default | same as default | same as default | editor |
| --oge-editor-code-bgderived | color-mix(in srgb, var(--oge-muted-color) 16%, transparent) | same as default | color-mix(in srgb, var(--oge-text-color) 12%, transparent) | same as default | same as default | editor |
| --oge-editor-quote-borderderived | color-mix(in srgb, var(--oge-accent) 45%, var(--oge-border-color)) | same as default | var(--oge-text-color) | same as default | same as default | editor |
Reading the table
- Default (light) is the value every page gets, declared at zero specificity on
:root— any declaration of yours wins. Dark and High contrast apply under.oge-theme-dark/[data-oge-theme='high-contrast']; the Tailwind and Bootstrap bridges map tokens onto those frameworks' variables, falling back to the value in parentheses. An empty cell keeps the default. - Derived tokens are expressions over other tokens (
color-mix()tints of--oge-accent, aliases like--oge-input-muted). Set the base token and they follow; swatches show them resolved in each theme. - Used by lists the packages whose stylesheets read the token. React packages ship the same stylesheets as their Angular siblings, so a token used by
gridthemes@oge-ui/react-gridtoo. - Component-local knobs (
--oge-card-pad,--oge-input-width…) are set on a component's own class and documented on its page; they are not part of this shared set.
/* A token is a CSS custom property: set it on :root (the defaults sit at
zero specificity, so this wins wherever your stylesheet loads)… */
:root {
--oge-accent: #7c3aed;
--oge-radius: 8px;
}
/* …or on any subtree. A scope that sets a base token re-derives the
tints that depend on it only where those tints are declared, so a
scoped theme also re-declares the derived set — the Theme builder's
scoped export does that for you. */
.billing-panel {
--oge-accent: #0f766e;
}DTCG tokens.json
The light, dark and high-contrast themes also ship as a Design Tokens Community Group file — @oge-ui/core/tokens.json — for design tools and token pipelines that read the format. Colours are sRGB component objects with a hex fallback, dimensions are { value, unit }, aliases stay aliases and computed tints carry their CSS expression in $extensions. Download tokens.json.
// Design Tokens Community Group format (2025.10): $value + $type,
// one group per theme — light, dark and high-contrast.
import tokens from '@oge-ui/core/tokens.json' with { type: 'json' };
tokens.light.accent.$value.hex; // '#2563eb'
tokens.dark.accent.$value.components; // [0.3765, 0.6471, 0.9804] (sRGB)
tokens.light['input-muted'].$value; // '{light.header-color}' — an alias
// every token names the CSS custom property it maps to
tokens.light.accent.$extensions['com.ogeui'].cssVariable; // '--oge-accent'