open-ds 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/assets/schemes/accessible-first.json +3093 -0
  4. package/assets/schemes/brand-expressive.json +3124 -0
  5. package/assets/schemes/content-first.json +3110 -0
  6. package/assets/schemes/dense-data.json +3489 -0
  7. package/assets/schemes/grammar.json +3903 -0
  8. package/assets/schemes/multi-brand.json +4359 -0
  9. package/assets/skills/open-ds/SKILL.md +50 -0
  10. package/assets/skills/open-ds-build/SKILL.md +19 -0
  11. package/assets/skills/open-ds-change/SKILL.md +19 -0
  12. package/assets/skills/open-ds-choose/SKILL.md +18 -0
  13. package/assets/skills/open-ds-review/SKILL.md +22 -0
  14. package/assets/skills/open-ds-write/SKILL.md +13 -0
  15. package/assets/stories/accordion.stories.tsx +46 -0
  16. package/assets/stories/alert-dialog.stories.tsx +65 -0
  17. package/assets/stories/alert.stories.tsx +44 -0
  18. package/assets/stories/aspect-ratio.stories.tsx +37 -0
  19. package/assets/stories/avatar.stories.tsx +42 -0
  20. package/assets/stories/badge.stories.tsx +39 -0
  21. package/assets/stories/breadcrumb.stories.tsx +54 -0
  22. package/assets/stories/button.stories.tsx +46 -0
  23. package/assets/stories/calendar.stories.tsx +30 -0
  24. package/assets/stories/card.stories.tsx +50 -0
  25. package/assets/stories/carousel.stories.tsx +64 -0
  26. package/assets/stories/chart.stories.tsx +61 -0
  27. package/assets/stories/checkbox.stories.tsx +29 -0
  28. package/assets/stories/collapsible.stories.tsx +39 -0
  29. package/assets/stories/combobox.stories.tsx +57 -0
  30. package/assets/stories/command.stories.tsx +60 -0
  31. package/assets/stories/context-menu.stories.tsx +55 -0
  32. package/assets/stories/data-table.stories.tsx +93 -0
  33. package/assets/stories/date-picker.stories.tsx +27 -0
  34. package/assets/stories/dialog.stories.tsx +70 -0
  35. package/assets/stories/drawer.stories.tsx +62 -0
  36. package/assets/stories/dropdown-menu.stories.tsx +65 -0
  37. package/assets/stories/empty.stories.tsx +39 -0
  38. package/assets/stories/field.stories.tsx +42 -0
  39. package/assets/stories/form.stories.tsx +56 -0
  40. package/assets/stories/input-group.stories.tsx +41 -0
  41. package/assets/stories/input-otp.stories.tsx +48 -0
  42. package/assets/stories/input.stories.tsx +32 -0
  43. package/assets/stories/kbd.stories.tsx +30 -0
  44. package/assets/stories/label.stories.tsx +26 -0
  45. package/assets/stories/native-select.stories.tsx +39 -0
  46. package/assets/stories/navigation-menu.stories.tsx +41 -0
  47. package/assets/stories/pagination.stories.tsx +61 -0
  48. package/assets/stories/popover.stories.tsx +37 -0
  49. package/assets/stories/progress.stories.tsx +30 -0
  50. package/assets/stories/radio-group.stories.tsx +45 -0
  51. package/assets/stories/resizable.stories.tsx +54 -0
  52. package/assets/stories/scroll-area.stories.tsx +47 -0
  53. package/assets/stories/select.stories.tsx +57 -0
  54. package/assets/stories/separator.stories.tsx +28 -0
  55. package/assets/stories/sheet.stories.tsx +46 -0
  56. package/assets/stories/sidebar.stories.tsx +62 -0
  57. package/assets/stories/skeleton.stories.tsx +27 -0
  58. package/assets/stories/slider.stories.tsx +44 -0
  59. package/assets/stories/spinner.stories.tsx +25 -0
  60. package/assets/stories/switch.stories.tsx +29 -0
  61. package/assets/stories/table.stories.tsx +97 -0
  62. package/assets/stories/tabs.stories.tsx +55 -0
  63. package/assets/stories/textarea.stories.tsx +28 -0
  64. package/assets/stories/toast.stories.tsx +30 -0
  65. package/assets/stories/toggle-group.stories.tsx +41 -0
  66. package/assets/stories/toggle.stories.tsx +20 -0
  67. package/assets/stories/tooltip.stories.tsx +49 -0
  68. package/assets/tokens/accessible-first/content.json +32 -0
  69. package/assets/tokens/accessible-first/dark.tokens.json +581 -0
  70. package/assets/tokens/accessible-first/light.tokens.json +581 -0
  71. package/assets/tokens/accessible-first/shadcn.css +21 -0
  72. package/assets/tokens/accessible-first/theme.css +101 -0
  73. package/assets/tokens/accessible-first/tokens.css +331 -0
  74. package/assets/tokens/accessible-first/tokens.json +1616 -0
  75. package/assets/tokens/accessible-first/tokens.scoped.css +333 -0
  76. package/assets/tokens/brand-expressive/content.json +32 -0
  77. package/assets/tokens/brand-expressive/dark.tokens.json +585 -0
  78. package/assets/tokens/brand-expressive/light.tokens.json +585 -0
  79. package/assets/tokens/brand-expressive/shadcn.css +21 -0
  80. package/assets/tokens/brand-expressive/theme.css +101 -0
  81. package/assets/tokens/brand-expressive/tokens.css +331 -0
  82. package/assets/tokens/brand-expressive/tokens.json +1651 -0
  83. package/assets/tokens/brand-expressive/tokens.scoped.css +333 -0
  84. package/assets/tokens/content-first/content.json +32 -0
  85. package/assets/tokens/content-first/dark.tokens.json +582 -0
  86. package/assets/tokens/content-first/light.tokens.json +582 -0
  87. package/assets/tokens/content-first/shadcn.css +21 -0
  88. package/assets/tokens/content-first/theme.css +101 -0
  89. package/assets/tokens/content-first/tokens.css +331 -0
  90. package/assets/tokens/content-first/tokens.json +1631 -0
  91. package/assets/tokens/content-first/tokens.scoped.css +333 -0
  92. package/assets/tokens/dense-data/content.json +32 -0
  93. package/assets/tokens/dense-data/dark.tokens.json +580 -0
  94. package/assets/tokens/dense-data/light.tokens.json +580 -0
  95. package/assets/tokens/dense-data/shadcn.css +21 -0
  96. package/assets/tokens/dense-data/theme.css +101 -0
  97. package/assets/tokens/dense-data/tokens.css +331 -0
  98. package/assets/tokens/dense-data/tokens.json +1623 -0
  99. package/assets/tokens/dense-data/tokens.scoped.css +333 -0
  100. package/assets/tokens/index.json +143 -0
  101. package/assets/tokens/multi-brand/aster-dark.tokens.json +625 -0
  102. package/assets/tokens/multi-brand/aster-light.tokens.json +625 -0
  103. package/assets/tokens/multi-brand/birch-dark.tokens.json +625 -0
  104. package/assets/tokens/multi-brand/birch-light.tokens.json +625 -0
  105. package/assets/tokens/multi-brand/content.json +32 -0
  106. package/assets/tokens/multi-brand/coral-dark.tokens.json +625 -0
  107. package/assets/tokens/multi-brand/coral-light.tokens.json +625 -0
  108. package/assets/tokens/multi-brand/shadcn.css +21 -0
  109. package/assets/tokens/multi-brand/theme.css +101 -0
  110. package/assets/tokens/multi-brand/tokens.css +1002 -0
  111. package/assets/tokens/multi-brand/tokens.json +1754 -0
  112. package/assets/tokens/multi-brand/tokens.scoped.css +1022 -0
  113. package/assets/tokens/shadcn-map.json +34 -0
  114. package/assets/ui/components/accordion.tsx +60 -0
  115. package/assets/ui/components/alert-dialog.tsx +171 -0
  116. package/assets/ui/components/alert.tsx +56 -0
  117. package/assets/ui/components/aspect-ratio.tsx +17 -0
  118. package/assets/ui/components/avatar.tsx +96 -0
  119. package/assets/ui/components/badge.tsx +36 -0
  120. package/assets/ui/components/breadcrumb.tsx +99 -0
  121. package/assets/ui/components/button.tsx +53 -0
  122. package/assets/ui/components/calendar.tsx +169 -0
  123. package/assets/ui/components/card.tsx +72 -0
  124. package/assets/ui/components/carousel.tsx +224 -0
  125. package/assets/ui/components/chart.tsx +315 -0
  126. package/assets/ui/components/checkbox.tsx +29 -0
  127. package/assets/ui/components/collapsible.tsx +25 -0
  128. package/assets/ui/components/combobox.tsx +275 -0
  129. package/assets/ui/components/command.tsx +145 -0
  130. package/assets/ui/components/context-menu.tsx +218 -0
  131. package/assets/ui/components/data-table.tsx +307 -0
  132. package/assets/ui/components/date-picker.tsx +79 -0
  133. package/assets/ui/components/dialog.tsx +68 -0
  134. package/assets/ui/components/drawer.tsx +115 -0
  135. package/assets/ui/components/dropdown-menu.tsx +58 -0
  136. package/assets/ui/components/empty.tsx +92 -0
  137. package/assets/ui/components/field.tsx +234 -0
  138. package/assets/ui/components/form.tsx +146 -0
  139. package/assets/ui/components/input-group.tsx +154 -0
  140. package/assets/ui/components/input-otp.tsx +75 -0
  141. package/assets/ui/components/input.tsx +25 -0
  142. package/assets/ui/components/kbd.tsx +30 -0
  143. package/assets/ui/components/label.tsx +22 -0
  144. package/assets/ui/components/native-select.tsx +59 -0
  145. package/assets/ui/components/navigation-menu.tsx +149 -0
  146. package/assets/ui/components/pagination.tsx +108 -0
  147. package/assets/ui/components/popover.tsx +61 -0
  148. package/assets/ui/components/progress.tsx +31 -0
  149. package/assets/ui/components/radio-group.tsx +40 -0
  150. package/assets/ui/components/resizable.tsx +54 -0
  151. package/assets/ui/components/scroll-area.tsx +55 -0
  152. package/assets/ui/components/select.tsx +81 -0
  153. package/assets/ui/components/separator.tsx +35 -0
  154. package/assets/ui/components/sheet.tsx +114 -0
  155. package/assets/ui/components/sidebar.tsx +685 -0
  156. package/assets/ui/components/skeleton.tsx +15 -0
  157. package/assets/ui/components/slider.tsx +70 -0
  158. package/assets/ui/components/spinner.tsx +16 -0
  159. package/assets/ui/components/switch.tsx +32 -0
  160. package/assets/ui/components/table.tsx +78 -0
  161. package/assets/ui/components/tabs.tsx +49 -0
  162. package/assets/ui/components/textarea.tsx +25 -0
  163. package/assets/ui/components/toast.tsx +54 -0
  164. package/assets/ui/components/toggle-group.tsx +88 -0
  165. package/assets/ui/components/toggle.tsx +48 -0
  166. package/assets/ui/components/tooltip.tsx +34 -0
  167. package/assets/ui/lib/use-mobile.ts +20 -0
  168. package/assets/ui/lib/utils.ts +7 -0
  169. package/assets/ui/styles.css +27 -0
  170. package/bin/open-ds.js +6 -0
  171. package/package.json +56 -4
  172. package/src/agents.mjs +150 -0
  173. package/src/cli.mjs +445 -0
  174. package/src/components.mjs +69 -0
  175. package/src/context.mjs +143 -0
  176. package/src/create.mjs +377 -0
  177. package/src/docs.mjs +570 -0
  178. package/src/guidance.mjs +63 -0
  179. package/src/index.mjs +20 -0
  180. package/src/mcp.mjs +660 -0
  181. package/src/readmes.mjs +106 -0
  182. package/src/schemes.mjs +188 -0
  183. package/src/tokens.mjs +127 -0
  184. package/templates/project/.github/workflows/ci.yml +15 -0
  185. package/templates/project/.storybook/component-docs.mdx +26 -0
  186. package/templates/project/.storybook/main.ts +17 -0
  187. package/templates/project/.storybook/manager-head.html +3 -0
  188. package/templates/project/.storybook/manager.ts +37 -0
  189. package/templates/project/.storybook/preview-head.html +3 -0
  190. package/templates/project/.storybook/preview.tsx +82 -0
  191. package/templates/project/docs/docusaurus.config.ts +64 -0
  192. package/templates/project/docs/sidebars.ts +8 -0
  193. package/templates/project/docs/src/css/custom.css +275 -0
  194. package/templates/project/gitignore +6 -0
  195. package/templates/project/src/styles/index.css +16 -0
  196. package/templates/project/src/vite-env.d.ts +7 -0
  197. package/templates/project/stories/docs-blocks.tsx +190 -0
  198. package/templates/project/stories/samples.tsx +102 -0
  199. package/templates/project/stories/usage.tsx +31 -0
  200. package/templates/project/tokens/build.mjs +468 -0
  201. package/templates/project/tsconfig.json +15 -0
@@ -0,0 +1,331 @@
1
+ /* Dense data (dense-data) tokens. Generated by tokens/build.mjs from schemes/dense-data.json. Brands: default. Modes: light, dark (add class "dark"). */
2
+
3
+ :root {
4
+ --space-gap-tight: 0.25rem; /** Between things that belong together. */
5
+ --space-gap-default: 0.5rem; /** Between items in one group. */
6
+ --space-gap-group: 1rem; /** Between groups. */
7
+ --space-gap-section: 1.5rem; /** Between page sections. */
8
+ --space-inset-control-x: 0.75rem; /** Horizontal padding inside controls. */
9
+ --space-inset-container: 1rem; /** Padding inside cards and dialogs. */
10
+ --space-inset-cell-x: 0.75rem; /** Horizontal padding inside table cells. */
11
+ --size-control-default: 2rem; /** Height of buttons and inputs, and the smallest target. */
12
+ --size-control-compact: 1.5rem; /** Height of compact controls. */
13
+ --size-row: 2rem; /** Height of one table row. */
14
+ --size-icon: 1rem; /** Icon size next to text. */
15
+ --radius-round: 9999px; /** Fully round: avatars and dots. */
16
+ --border-width-default: 1px; /** Every border. */
17
+ --border-width-focus: 2px; /** The focus ring. */
18
+ --opacity-disabled: 0.4; /** Disabled controls. */
19
+ --type-display-font-size: 1.5rem;
20
+ --type-display-line-height: 1.75rem;
21
+ --type-display-font-weight: 600;
22
+ --type-title-font-size: 1.25rem;
23
+ --type-title-line-height: 1.5rem;
24
+ --type-title-font-weight: 600;
25
+ --type-heading-font-size: 1rem;
26
+ --type-heading-line-height: 1.25rem;
27
+ --type-heading-font-weight: 600;
28
+ --type-body-font-size: 0.875rem;
29
+ --type-body-line-height: 1.25rem;
30
+ --type-body-font-weight: 400;
31
+ --type-label-font-size: 0.75rem;
32
+ --type-label-line-height: 1rem;
33
+ --type-label-font-weight: 500;
34
+ --type-caption-font-size: 0.75rem;
35
+ --type-caption-line-height: 1rem;
36
+ --type-caption-font-weight: 400;
37
+ --type-data-font-size: 0.8125rem;
38
+ --type-data-line-height: 1rem;
39
+ --type-data-font-weight: 400;
40
+ --motion-duration-feedback: 120ms; /** Feedback speed: fast. */
41
+ --motion-easing-standard: cubic-bezier(0.2, 0, 0, 1); /** Feedback easing. */
42
+ --color-surface-canvas: #F7F8FA; /** The page background behind everything. */
43
+ --color-surface-default: #FFFFFF; /** The base fill for content. */
44
+ --color-surface-raised: #FFFFFF; /** Fills that float above content. */
45
+ --color-surface-sunken: #EEF1F5; /** A recessed fill, a step below content. */
46
+ --color-surface-selected: #EEEDFE; /** The fill of a selected or current item. */
47
+ --color-surface-inverse: #161B23; /** A reversed fill for small, short-lived messages. */
48
+ --color-surface-scrim: #0000008C; /** The see-through layer behind a modal. */
49
+ --color-text-primary: #161B23; /** Body text and headings. */
50
+ --color-text-secondary: #3D4655; /** Supporting text. */
51
+ --color-text-muted: #535D6D; /** The quietest text. */
52
+ --color-text-inverse: #FFFFFF; /** Text on an inverse fill. */
53
+ --color-text-on-action: #FFFFFF; /** Text and icons on the main action's fill. */
54
+ --color-text-link: #3B31B0; /** Links in running text. */
55
+ --color-border-default: #DDE2EA; /** Quiet edges and dividers. Decorative, so it has no contrast minimum. */
56
+ --color-border-strong: #6B7585; /** The edge of a control people must find. */
57
+ --color-border-focus: #4B3FD9; /** The focus ring. */
58
+ --color-action-primary: #4B3FD9; /** The one main action in a view. */
59
+ --color-action-primary-hover: #3B31B0; /** The main action under the pointer. */
60
+ --color-action-secondary: #FFFFFF; /** The fill of other actions. */
61
+ --color-action-secondary-hover: #EEF1F5; /** Other actions under the pointer. */
62
+ --color-status-info: #083C93; /** Neutral news: something changed and no action is needed. The lowest level of the urgency order. */
63
+ --color-status-info-subtle: #E1ECFF; /** The fill behind info status. */
64
+ --color-status-success: #1F7A3A; /** Confirmation that something worked. It sits outside the urgency order. */
65
+ --color-status-success-subtle: #E3F4EA; /** The fill behind success status. */
66
+ --color-status-warning: #8A5600; /** Caution: something may go wrong or needs a check, and it can be fixed. */
67
+ --color-status-warning-subtle: #FFF3D6; /** The fill behind warning status. */
68
+ --color-status-danger: #C42B2B; /** Real risk: errors, failed checks, actions that cannot be undone. The top of the urgency order. Overuse wears it out. */
69
+ --color-status-danger-subtle: #FDE7E7; /** The fill behind danger status. */
70
+ --color-category-1: #4B3FD9; /** Category 1: tells one item or series from another. It carries no meaning. */
71
+ --color-category-1-subtle: #EEEDFE; /** Category 1: the fill of a tag. */
72
+ --color-category-2: #0B4FC0; /** Category 2: tells one item or series from another. It carries no meaning. */
73
+ --color-category-2-subtle: #E1ECFF; /** Category 2: the fill of a tag. */
74
+ --color-category-3: #1F7A3A; /** Category 3: tells one item or series from another. It carries no meaning. */
75
+ --color-category-3-subtle: #E3F4EA; /** Category 3: the fill of a tag. */
76
+ --color-category-4: #8A5600; /** Category 4: tells one item or series from another. It carries no meaning. */
77
+ --color-category-4-subtle: #FFF3D6; /** Category 4: the fill of a tag. */
78
+ --color-category-5: #6B7585; /** Category 5: tells one item or series from another. It carries no meaning. */
79
+ --color-category-5-subtle: #EEF1F5; /** Category 5: the fill of a tag. */
80
+ --color-disabled-text: #6B7585; /** Text and icons of a control that cannot be used right now. */
81
+ --color-disabled-surface: #EEF1F5; /** The fill of a control that cannot be used right now. */
82
+ --color-disabled-border: #DDE2EA; /** The edge of a control that cannot be used right now. */
83
+ --radius-control: 0.125rem; /** Corner of buttons and inputs. */
84
+ --radius-badge: 0rem; /** Corner of badges and checkboxes. */
85
+ --radius-container: 0.25rem; /** Corner of cards, menus and dialogs. */
86
+ --type-display-font-family: "IBM Plex Sans", system-ui, sans-serif;
87
+ --type-title-font-family: "IBM Plex Sans", system-ui, sans-serif;
88
+ --type-heading-font-family: "IBM Plex Sans", system-ui, sans-serif;
89
+ --type-body-font-family: "IBM Plex Sans", system-ui, sans-serif;
90
+ --type-label-font-family: "IBM Plex Sans", system-ui, sans-serif;
91
+ --type-caption-font-family: "IBM Plex Sans", system-ui, sans-serif;
92
+ --type-data-font-family: "IBM Plex Mono", ui-monospace, monospace;
93
+ --elevation-card: 0px 0px 0px 0px #00000000; /** No shadow in this scheme. */
94
+ --elevation-overlay: 0px 8px 24px 0px #0D111729;
95
+ --button-height: var(--size-control-default); /** Button height. */
96
+ --button-padding-x: var(--space-inset-control-x); /** Horizontal padding inside a button. */
97
+ --button-font-size: var(--type-label-font-size); /** Button label size. */
98
+ --button-font-weight: var(--type-label-font-weight); /** Button label weight. */
99
+ --button-icon-size: var(--size-icon); /** Size of an icon inside a button. */
100
+ --input-height: var(--size-control-default); /** Input height. */
101
+ --input-padding-x: var(--space-inset-control-x); /** Horizontal padding inside an input. */
102
+ --input-font-size: var(--type-body-font-size); /** Typed text size. */
103
+ --badge-padding-x: var(--space-gap-tight); /** Horizontal padding inside a badge. */
104
+ --badge-font-size: var(--type-caption-font-size); /** Badge label size. */
105
+ --card-padding: var(--space-inset-container); /** Padding inside a card. */
106
+ --table-row-height: var(--size-row); /** Height of one data row. */
107
+ --table-cell-padding-x: var(--space-inset-cell-x); /** Horizontal padding inside a cell. */
108
+ --table-font-size: var(--type-data-font-size); /** Cell text size. */
109
+ --overlay-item-height: var(--size-control-default); /** Height of a menu item. */
110
+ --transition-duration: var(--motion-duration-feedback); /** Duration of feedback transitions. */
111
+ --transition-easing: var(--motion-easing-standard); /** Easing of feedback transitions. */
112
+ --button-primary-background: var(--color-action-primary); /** Primary button fill. */
113
+ --button-primary-background-hover: var(--color-action-primary-hover); /** Primary button fill on hover. */
114
+ --button-primary-label: var(--color-text-on-action); /** Primary button label color. */
115
+ --button-secondary-background: var(--color-action-secondary); /** Secondary button fill. */
116
+ --button-secondary-background-hover: var(--color-action-secondary-hover); /** Secondary button fill on hover. */
117
+ --button-secondary-label: var(--color-text-primary); /** Secondary button label color. */
118
+ --button-secondary-border: var(--color-border-strong); /** Secondary button border. */
119
+ --button-ghost-background-hover: var(--color-surface-sunken); /** Ghost button fill on hover. */
120
+ --button-ghost-label: var(--color-text-link); /** Ghost button label color. */
121
+ --button-radius: var(--radius-control); /** Button corner radius. */
122
+ --button-focus-ring: var(--color-border-focus); /** Focus ring color on any button. */
123
+ --button-disabled-background: var(--color-disabled-surface); /** Fill of a disabled button. */
124
+ --button-disabled-label: var(--color-disabled-text); /** Label of a disabled button. */
125
+ --button-disabled-border: var(--color-disabled-border); /** Border of a disabled secondary button. */
126
+ --input-background: var(--color-surface-default); /** Input fill. */
127
+ --input-border: var(--color-border-strong); /** Input border at rest. */
128
+ --input-border-focus: var(--color-border-focus); /** Input border when focused. */
129
+ --input-text: var(--color-text-primary); /** Typed text color. */
130
+ --input-placeholder: var(--color-text-muted); /** Placeholder text color. */
131
+ --input-radius: var(--radius-control); /** Input corner radius. */
132
+ --input-disabled-background: var(--color-disabled-surface); /** Fill of a disabled input. */
133
+ --input-disabled-border: var(--color-disabled-border); /** Border of a disabled input. */
134
+ --input-disabled-text: var(--color-disabled-text); /** Text in a disabled input. */
135
+ --control-checked: var(--color-action-primary); /** Fill of a checked checkbox or an on switch. */
136
+ --control-track: var(--color-border-strong); /** Track of an off switch. */
137
+ --control-thumb: var(--color-surface-default); /** Switch thumb and checkmark color. */
138
+ --control-radius: var(--radius-badge); /** Checkbox corner radius. */
139
+ --badge-radius: var(--radius-badge); /** Badge corner radius. */
140
+ --badge-neutral-background: var(--color-surface-sunken); /** Neutral badge fill. */
141
+ --badge-neutral-label: var(--color-text-secondary); /** Neutral badge label. */
142
+ --badge-success-background: var(--color-status-success-subtle); /** Success badge fill. */
143
+ --badge-success-label: var(--color-status-success); /** Success badge label. */
144
+ --badge-warning-background: var(--color-status-warning-subtle); /** Warning badge fill. */
145
+ --badge-warning-label: var(--color-status-warning); /** Warning badge label. */
146
+ --badge-danger-background: var(--color-status-danger-subtle); /** Danger badge fill. */
147
+ --badge-danger-label: var(--color-status-danger); /** Danger badge label. */
148
+ --badge-info-background: var(--color-status-info-subtle); /** Info badge fill. */
149
+ --badge-info-label: var(--color-status-info); /** Info badge label. */
150
+ --card-background: var(--color-surface-default); /** Card fill. */
151
+ --card-border: var(--color-border-default); /** Card border. */
152
+ --card-radius: var(--radius-container); /** Card corner radius. */
153
+ --card-shadow: var(--elevation-card); /** Card shadow. */
154
+ --table-header-background: var(--color-surface-sunken); /** Header row fill. */
155
+ --table-row-border: var(--color-border-default); /** Line between rows. */
156
+ --table-row-selected: var(--color-surface-selected); /** Fill of a selected row. */
157
+ --tabs-indicator: var(--color-action-primary); /** Active tab indicator. */
158
+ --tabs-label: var(--color-text-secondary); /** Inactive tab label. */
159
+ --tabs-label-active: var(--color-text-primary); /** Active tab label. */
160
+ --overlay-background: var(--color-surface-raised); /** Fill of a dialog, menu or toast. */
161
+ --overlay-radius: var(--radius-container); /** Corner radius of overlays. */
162
+ --overlay-shadow: var(--elevation-overlay); /** Shadow of overlays. */
163
+ --overlay-scrim: var(--color-surface-scrim); /** Color that dims the page behind a dialog. */
164
+ --tooltip-background: var(--color-surface-inverse); /** Tooltip fill. */
165
+ --tooltip-label: var(--color-text-inverse); /** Tooltip text. */
166
+ }
167
+
168
+ .dark {
169
+ --space-gap-tight: 0.25rem; /** Between things that belong together. */
170
+ --space-gap-default: 0.5rem; /** Between items in one group. */
171
+ --space-gap-group: 1rem; /** Between groups. */
172
+ --space-gap-section: 1.5rem; /** Between page sections. */
173
+ --space-inset-control-x: 0.75rem; /** Horizontal padding inside controls. */
174
+ --space-inset-container: 1rem; /** Padding inside cards and dialogs. */
175
+ --space-inset-cell-x: 0.75rem; /** Horizontal padding inside table cells. */
176
+ --size-control-default: 2rem; /** Height of buttons and inputs, and the smallest target. */
177
+ --size-control-compact: 1.5rem; /** Height of compact controls. */
178
+ --size-row: 2rem; /** Height of one table row. */
179
+ --size-icon: 1rem; /** Icon size next to text. */
180
+ --radius-round: 9999px; /** Fully round: avatars and dots. */
181
+ --border-width-default: 1px; /** Every border. */
182
+ --border-width-focus: 2px; /** The focus ring. */
183
+ --opacity-disabled: 0.4; /** Disabled controls. */
184
+ --type-display-font-size: 1.5rem;
185
+ --type-display-line-height: 1.75rem;
186
+ --type-display-font-weight: 600;
187
+ --type-title-font-size: 1.25rem;
188
+ --type-title-line-height: 1.5rem;
189
+ --type-title-font-weight: 600;
190
+ --type-heading-font-size: 1rem;
191
+ --type-heading-line-height: 1.25rem;
192
+ --type-heading-font-weight: 600;
193
+ --type-body-font-size: 0.875rem;
194
+ --type-body-line-height: 1.25rem;
195
+ --type-body-font-weight: 400;
196
+ --type-label-font-size: 0.75rem;
197
+ --type-label-line-height: 1rem;
198
+ --type-label-font-weight: 500;
199
+ --type-caption-font-size: 0.75rem;
200
+ --type-caption-line-height: 1rem;
201
+ --type-caption-font-weight: 400;
202
+ --type-data-font-size: 0.8125rem;
203
+ --type-data-line-height: 1rem;
204
+ --type-data-font-weight: 400;
205
+ --motion-duration-feedback: 120ms; /** Feedback speed: fast. */
206
+ --motion-easing-standard: cubic-bezier(0.2, 0, 0, 1); /** Feedback easing. */
207
+ --color-surface-canvas: #0D1117; /** The page background behind everything. */
208
+ --color-surface-default: #161B23; /** The base fill for content. */
209
+ --color-surface-raised: #262D38; /** Fills that float above content. */
210
+ --color-surface-sunken: #262D38; /** A recessed fill, a step below content. */
211
+ --color-surface-selected: #2C2588; /** The fill of a selected or current item. */
212
+ --color-surface-inverse: #F7F8FA; /** A reversed fill for small, short-lived messages. */
213
+ --color-surface-scrim: #000000B3; /** The see-through layer behind a modal. */
214
+ --color-text-primary: #F7F8FA; /** Body text and headings. */
215
+ --color-text-secondary: #C4CBD6; /** Supporting text. */
216
+ --color-text-muted: #969FAD; /** The quietest text. */
217
+ --color-text-inverse: #161B23; /** Text on an inverse fill. */
218
+ --color-text-on-action: #0D1117; /** Text and icons on the main action's fill. */
219
+ --color-text-link: #A9A3F6; /** Links in running text. */
220
+ --color-border-default: #262D38; /** Quiet edges and dividers. Decorative, so it has no contrast minimum. */
221
+ --color-border-strong: #6B7585; /** The edge of a control people must find. */
222
+ --color-border-focus: #A9A3F6; /** The focus ring. */
223
+ --color-action-primary: #A9A3F6; /** The one main action in a view. */
224
+ --color-action-primary-hover: #EEEDFE; /** The main action under the pointer. */
225
+ --color-action-secondary: #161B23; /** The fill of other actions. */
226
+ --color-action-secondary-hover: #262D38; /** Other actions under the pointer. */
227
+ --color-status-info: #8AB4F8; /** Neutral news: something changed and no action is needed. The lowest level of the urgency order. */
228
+ --color-status-info-subtle: #062C6E; /** The fill behind info status. */
229
+ --color-status-success: #5CC283; /** Confirmation that something worked. It sits outside the urgency order. */
230
+ --color-status-success-subtle: #123322; /** The fill behind success status. */
231
+ --color-status-warning: #F2B84B; /** Caution: something may go wrong or needs a check, and it can be fixed. */
232
+ --color-status-warning-subtle: #3A2A05; /** The fill behind warning status. */
233
+ --color-status-danger: #F28B8B; /** Real risk: errors, failed checks, actions that cannot be undone. The top of the urgency order. Overuse wears it out. */
234
+ --color-status-danger-subtle: #3D1414; /** The fill behind danger status. */
235
+ --color-category-1: #A9A3F6; /** Category 1: tells one item or series from another. It carries no meaning. */
236
+ --color-category-1-subtle: #2C2588; /** Category 1: the fill of a tag. */
237
+ --color-category-2: #8AB4F8; /** Category 2: tells one item or series from another. It carries no meaning. */
238
+ --color-category-2-subtle: #062C6E; /** Category 2: the fill of a tag. */
239
+ --color-category-3: #5CC283; /** Category 3: tells one item or series from another. It carries no meaning. */
240
+ --color-category-3-subtle: #123322; /** Category 3: the fill of a tag. */
241
+ --color-category-4: #F2B84B; /** Category 4: tells one item or series from another. It carries no meaning. */
242
+ --color-category-4-subtle: #3A2A05; /** Category 4: the fill of a tag. */
243
+ --color-category-5: #DDE2EA; /** Category 5: tells one item or series from another. It carries no meaning. */
244
+ --color-category-5-subtle: #262D38; /** Category 5: the fill of a tag. */
245
+ --color-disabled-text: #C4CBD6; /** Text and icons of a control that cannot be used right now. */
246
+ --color-disabled-surface: #262D38; /** The fill of a control that cannot be used right now. */
247
+ --color-disabled-border: #3D4655; /** The edge of a control that cannot be used right now. */
248
+ --radius-control: 0.125rem; /** Corner of buttons and inputs. */
249
+ --radius-badge: 0rem; /** Corner of badges and checkboxes. */
250
+ --radius-container: 0.25rem; /** Corner of cards, menus and dialogs. */
251
+ --type-display-font-family: "IBM Plex Sans", system-ui, sans-serif;
252
+ --type-title-font-family: "IBM Plex Sans", system-ui, sans-serif;
253
+ --type-heading-font-family: "IBM Plex Sans", system-ui, sans-serif;
254
+ --type-body-font-family: "IBM Plex Sans", system-ui, sans-serif;
255
+ --type-label-font-family: "IBM Plex Sans", system-ui, sans-serif;
256
+ --type-caption-font-family: "IBM Plex Sans", system-ui, sans-serif;
257
+ --type-data-font-family: "IBM Plex Mono", ui-monospace, monospace;
258
+ --elevation-card: 0px 0px 0px 0px #00000000; /** No shadow in this scheme. */
259
+ --elevation-overlay: 0px 8px 24px 0px #00000080;
260
+ --button-height: var(--size-control-default); /** Button height. */
261
+ --button-padding-x: var(--space-inset-control-x); /** Horizontal padding inside a button. */
262
+ --button-font-size: var(--type-label-font-size); /** Button label size. */
263
+ --button-font-weight: var(--type-label-font-weight); /** Button label weight. */
264
+ --button-icon-size: var(--size-icon); /** Size of an icon inside a button. */
265
+ --input-height: var(--size-control-default); /** Input height. */
266
+ --input-padding-x: var(--space-inset-control-x); /** Horizontal padding inside an input. */
267
+ --input-font-size: var(--type-body-font-size); /** Typed text size. */
268
+ --badge-padding-x: var(--space-gap-tight); /** Horizontal padding inside a badge. */
269
+ --badge-font-size: var(--type-caption-font-size); /** Badge label size. */
270
+ --card-padding: var(--space-inset-container); /** Padding inside a card. */
271
+ --table-row-height: var(--size-row); /** Height of one data row. */
272
+ --table-cell-padding-x: var(--space-inset-cell-x); /** Horizontal padding inside a cell. */
273
+ --table-font-size: var(--type-data-font-size); /** Cell text size. */
274
+ --overlay-item-height: var(--size-control-default); /** Height of a menu item. */
275
+ --transition-duration: var(--motion-duration-feedback); /** Duration of feedback transitions. */
276
+ --transition-easing: var(--motion-easing-standard); /** Easing of feedback transitions. */
277
+ --button-primary-background: var(--color-action-primary); /** Primary button fill. */
278
+ --button-primary-background-hover: var(--color-action-primary-hover); /** Primary button fill on hover. */
279
+ --button-primary-label: var(--color-text-on-action); /** Primary button label color. */
280
+ --button-secondary-background: var(--color-action-secondary); /** Secondary button fill. */
281
+ --button-secondary-background-hover: var(--color-action-secondary-hover); /** Secondary button fill on hover. */
282
+ --button-secondary-label: var(--color-text-primary); /** Secondary button label color. */
283
+ --button-secondary-border: var(--color-border-strong); /** Secondary button border. */
284
+ --button-ghost-background-hover: var(--color-surface-sunken); /** Ghost button fill on hover. */
285
+ --button-ghost-label: var(--color-text-link); /** Ghost button label color. */
286
+ --button-radius: var(--radius-control); /** Button corner radius. */
287
+ --button-focus-ring: var(--color-border-focus); /** Focus ring color on any button. */
288
+ --button-disabled-background: var(--color-disabled-surface); /** Fill of a disabled button. */
289
+ --button-disabled-label: var(--color-disabled-text); /** Label of a disabled button. */
290
+ --button-disabled-border: var(--color-disabled-border); /** Border of a disabled secondary button. */
291
+ --input-background: var(--color-surface-default); /** Input fill. */
292
+ --input-border: var(--color-border-strong); /** Input border at rest. */
293
+ --input-border-focus: var(--color-border-focus); /** Input border when focused. */
294
+ --input-text: var(--color-text-primary); /** Typed text color. */
295
+ --input-placeholder: var(--color-text-muted); /** Placeholder text color. */
296
+ --input-radius: var(--radius-control); /** Input corner radius. */
297
+ --input-disabled-background: var(--color-disabled-surface); /** Fill of a disabled input. */
298
+ --input-disabled-border: var(--color-disabled-border); /** Border of a disabled input. */
299
+ --input-disabled-text: var(--color-disabled-text); /** Text in a disabled input. */
300
+ --control-checked: var(--color-action-primary); /** Fill of a checked checkbox or an on switch. */
301
+ --control-track: var(--color-border-strong); /** Track of an off switch. */
302
+ --control-thumb: var(--color-surface-default); /** Switch thumb and checkmark color. */
303
+ --control-radius: var(--radius-badge); /** Checkbox corner radius. */
304
+ --badge-radius: var(--radius-badge); /** Badge corner radius. */
305
+ --badge-neutral-background: var(--color-surface-sunken); /** Neutral badge fill. */
306
+ --badge-neutral-label: var(--color-text-secondary); /** Neutral badge label. */
307
+ --badge-success-background: var(--color-status-success-subtle); /** Success badge fill. */
308
+ --badge-success-label: var(--color-status-success); /** Success badge label. */
309
+ --badge-warning-background: var(--color-status-warning-subtle); /** Warning badge fill. */
310
+ --badge-warning-label: var(--color-status-warning); /** Warning badge label. */
311
+ --badge-danger-background: var(--color-status-danger-subtle); /** Danger badge fill. */
312
+ --badge-danger-label: var(--color-status-danger); /** Danger badge label. */
313
+ --badge-info-background: var(--color-status-info-subtle); /** Info badge fill. */
314
+ --badge-info-label: var(--color-status-info); /** Info badge label. */
315
+ --card-background: var(--color-surface-default); /** Card fill. */
316
+ --card-border: var(--color-border-default); /** Card border. */
317
+ --card-radius: var(--radius-container); /** Card corner radius. */
318
+ --card-shadow: var(--elevation-card); /** Card shadow. */
319
+ --table-header-background: var(--color-surface-sunken); /** Header row fill. */
320
+ --table-row-border: var(--color-border-default); /** Line between rows. */
321
+ --table-row-selected: var(--color-surface-selected); /** Fill of a selected row. */
322
+ --tabs-indicator: var(--color-action-primary); /** Active tab indicator. */
323
+ --tabs-label: var(--color-text-secondary); /** Inactive tab label. */
324
+ --tabs-label-active: var(--color-text-primary); /** Active tab label. */
325
+ --overlay-background: var(--color-surface-raised); /** Fill of a dialog, menu or toast. */
326
+ --overlay-radius: var(--radius-container); /** Corner radius of overlays. */
327
+ --overlay-shadow: var(--elevation-overlay); /** Shadow of overlays. */
328
+ --overlay-scrim: var(--color-surface-scrim); /** Color that dims the page behind a dialog. */
329
+ --tooltip-background: var(--color-surface-inverse); /** Tooltip fill. */
330
+ --tooltip-label: var(--color-text-inverse); /** Tooltip text. */
331
+ }