@refine-studio/ui 0.0.0 → 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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -2
  3. package/dist/components/accordion/accordion.d.ts +15 -0
  4. package/dist/components/accordion/accordion.js +58 -0
  5. package/dist/components/accordion/accordion.js.map +1 -0
  6. package/dist/components/alert/alert.d.ts +24 -0
  7. package/dist/components/alert/alert.js +98 -0
  8. package/dist/components/alert/alert.js.map +1 -0
  9. package/dist/components/alert-dialog/alert-dialog.d.ts +36 -0
  10. package/dist/components/alert-dialog/alert-dialog.js +112 -0
  11. package/dist/components/alert-dialog/alert-dialog.js.map +1 -0
  12. package/dist/components/app-shell/app-shell.d.ts +77 -0
  13. package/dist/components/app-shell/app-shell.js +224 -0
  14. package/dist/components/app-shell/app-shell.js.map +1 -0
  15. package/dist/components/avatar/avatar.d.ts +32 -0
  16. package/dist/components/avatar/avatar.js +83 -0
  17. package/dist/components/avatar/avatar.js.map +1 -0
  18. package/dist/components/badge/badge.d.ts +15 -0
  19. package/dist/components/badge/badge.js +50 -0
  20. package/dist/components/badge/badge.js.map +1 -0
  21. package/dist/components/breadcrumb/breadcrumb.d.ts +24 -0
  22. package/dist/components/breadcrumb/breadcrumb.js +82 -0
  23. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  24. package/dist/components/button/button.d.ts +15 -0
  25. package/dist/components/button/button.js +75 -0
  26. package/dist/components/button/button.js.map +1 -0
  27. package/dist/components/card/card.d.ts +46 -0
  28. package/dist/components/card/card.js +124 -0
  29. package/dist/components/card/card.js.map +1 -0
  30. package/dist/components/checkbox/checkbox.d.ts +6 -0
  31. package/dist/components/checkbox/checkbox.js +31 -0
  32. package/dist/components/checkbox/checkbox.js.map +1 -0
  33. package/dist/components/chip/chip.d.ts +25 -0
  34. package/dist/components/chip/chip.js +54 -0
  35. package/dist/components/chip/chip.js.map +1 -0
  36. package/dist/components/code/code.d.ts +15 -0
  37. package/dist/components/code/code.js +63 -0
  38. package/dist/components/code/code.js.map +1 -0
  39. package/dist/components/collapsible/collapsible.d.ts +14 -0
  40. package/dist/components/collapsible/collapsible.js +55 -0
  41. package/dist/components/collapsible/collapsible.js.map +1 -0
  42. package/dist/components/combobox/combobox.d.ts +33 -0
  43. package/dist/components/combobox/combobox.js +244 -0
  44. package/dist/components/combobox/combobox.js.map +1 -0
  45. package/dist/components/command-menu/command-menu.d.ts +35 -0
  46. package/dist/components/command-menu/command-menu.js +116 -0
  47. package/dist/components/command-menu/command-menu.js.map +1 -0
  48. package/dist/components/context-menu/context-menu.d.ts +45 -0
  49. package/dist/components/context-menu/context-menu.js +136 -0
  50. package/dist/components/context-menu/context-menu.js.map +1 -0
  51. package/dist/components/data-table/data-table.d.ts +49 -0
  52. package/dist/components/data-table/data-table.js +171 -0
  53. package/dist/components/data-table/data-table.js.map +1 -0
  54. package/dist/components/data-table/sort-rows.d.ts +6 -0
  55. package/dist/components/data-table/sort-rows.js +33 -0
  56. package/dist/components/data-table/sort-rows.js.map +1 -0
  57. package/dist/components/dialog/dialog.d.ts +42 -0
  58. package/dist/components/dialog/dialog.js +118 -0
  59. package/dist/components/dialog/dialog.js.map +1 -0
  60. package/dist/components/dropdown-menu/dropdown-menu.d.ts +45 -0
  61. package/dist/components/dropdown-menu/dropdown-menu.js +137 -0
  62. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -0
  63. package/dist/components/dropdown-menu/menu-styles.d.ts +10 -0
  64. package/dist/components/dropdown-menu/menu-styles.js +34 -0
  65. package/dist/components/dropdown-menu/menu-styles.js.map +1 -0
  66. package/dist/components/empty-state/empty-state.d.ts +12 -0
  67. package/dist/components/empty-state/empty-state.js +46 -0
  68. package/dist/components/empty-state/empty-state.js.map +1 -0
  69. package/dist/components/eyebrow/eyebrow.d.ts +9 -0
  70. package/dist/components/eyebrow/eyebrow.js +25 -0
  71. package/dist/components/eyebrow/eyebrow.js.map +1 -0
  72. package/dist/components/field/field.d.ts +56 -0
  73. package/dist/components/field/field.js +135 -0
  74. package/dist/components/field/field.js.map +1 -0
  75. package/dist/components/glow-border/glow-border.d.ts +9 -0
  76. package/dist/components/glow-border/glow-border.js +39 -0
  77. package/dist/components/glow-border/glow-border.js.map +1 -0
  78. package/dist/components/hex-field/hex-field.d.ts +12 -0
  79. package/dist/components/hex-field/hex-field.js +86 -0
  80. package/dist/components/hex-field/hex-field.js.map +1 -0
  81. package/dist/components/input/input.d.ts +14 -0
  82. package/dist/components/input/input.js +52 -0
  83. package/dist/components/input/input.js.map +1 -0
  84. package/dist/components/kbd/kbd.d.ts +9 -0
  85. package/dist/components/kbd/kbd.js +26 -0
  86. package/dist/components/kbd/kbd.js.map +1 -0
  87. package/dist/components/label/label.d.ts +6 -0
  88. package/dist/components/label/label.js +17 -0
  89. package/dist/components/label/label.js.map +1 -0
  90. package/dist/components/logo/logo-paths.d.ts +5 -0
  91. package/dist/components/logo/logo-paths.js +20 -0
  92. package/dist/components/logo/logo-paths.js.map +1 -0
  93. package/dist/components/logo/logo.d.ts +18 -0
  94. package/dist/components/logo/logo.js +94 -0
  95. package/dist/components/logo/logo.js.map +1 -0
  96. package/dist/components/marquee/marquee.d.ts +15 -0
  97. package/dist/components/marquee/marquee.js +54 -0
  98. package/dist/components/marquee/marquee.js.map +1 -0
  99. package/dist/components/page-header/page-header.d.ts +15 -0
  100. package/dist/components/page-header/page-header.js +50 -0
  101. package/dist/components/page-header/page-header.js.map +1 -0
  102. package/dist/components/pagination/pagination.d.ts +28 -0
  103. package/dist/components/pagination/pagination.js +95 -0
  104. package/dist/components/pagination/pagination.js.map +1 -0
  105. package/dist/components/popover/popover.d.ts +14 -0
  106. package/dist/components/popover/popover.js +48 -0
  107. package/dist/components/popover/popover.js.map +1 -0
  108. package/dist/components/progress/progress.d.ts +14 -0
  109. package/dist/components/progress/progress.js +41 -0
  110. package/dist/components/progress/progress.js.map +1 -0
  111. package/dist/components/radio-group/radio-group.d.ts +10 -0
  112. package/dist/components/radio-group/radio-group.js +33 -0
  113. package/dist/components/radio-group/radio-group.js.map +1 -0
  114. package/dist/components/section-heading/section-heading.d.ts +18 -0
  115. package/dist/components/section-heading/section-heading.js +57 -0
  116. package/dist/components/section-heading/section-heading.js.map +1 -0
  117. package/dist/components/select/select.d.ts +32 -0
  118. package/dist/components/select/select.js +100 -0
  119. package/dist/components/select/select.js.map +1 -0
  120. package/dist/components/separator/separator.d.ts +10 -0
  121. package/dist/components/separator/separator.js +37 -0
  122. package/dist/components/separator/separator.js.map +1 -0
  123. package/dist/components/sheet/sheet.d.ts +29 -0
  124. package/dist/components/sheet/sheet.js +130 -0
  125. package/dist/components/sheet/sheet.js.map +1 -0
  126. package/dist/components/skeleton/skeleton.d.ts +5 -0
  127. package/dist/components/skeleton/skeleton.js +18 -0
  128. package/dist/components/skeleton/skeleton.js.map +1 -0
  129. package/dist/components/slider/slider.d.ts +10 -0
  130. package/dist/components/slider/slider.js +36 -0
  131. package/dist/components/slider/slider.js.map +1 -0
  132. package/dist/components/spinner/spinner.d.ts +9 -0
  133. package/dist/components/spinner/spinner.js +40 -0
  134. package/dist/components/spinner/spinner.js.map +1 -0
  135. package/dist/components/spotlight/spotlight.d.ts +9 -0
  136. package/dist/components/spotlight/spotlight.js +32 -0
  137. package/dist/components/spotlight/spotlight.js.map +1 -0
  138. package/dist/components/starfield/starfield.d.ts +11 -0
  139. package/dist/components/starfield/starfield.js +76 -0
  140. package/dist/components/starfield/starfield.js.map +1 -0
  141. package/dist/components/stat/stat.d.ts +28 -0
  142. package/dist/components/stat/stat.js +100 -0
  143. package/dist/components/stat/stat.js.map +1 -0
  144. package/dist/components/switch/switch.d.ts +13 -0
  145. package/dist/components/switch/switch.js +44 -0
  146. package/dist/components/switch/switch.js.map +1 -0
  147. package/dist/components/table/table.d.ts +52 -0
  148. package/dist/components/table/table.js +96 -0
  149. package/dist/components/table/table.js.map +1 -0
  150. package/dist/components/tabs/tabs.d.ts +24 -0
  151. package/dist/components/tabs/tabs.js +89 -0
  152. package/dist/components/tabs/tabs.js.map +1 -0
  153. package/dist/components/textarea/textarea.d.ts +5 -0
  154. package/dist/components/textarea/textarea.js +20 -0
  155. package/dist/components/textarea/textarea.js.map +1 -0
  156. package/dist/components/theme-switcher/theme-switcher.d.ts +7 -0
  157. package/dist/components/theme-switcher/theme-switcher.js +57 -0
  158. package/dist/components/theme-switcher/theme-switcher.js.map +1 -0
  159. package/dist/components/toaster/toaster.d.ts +7 -0
  160. package/dist/components/toaster/toaster.js +43 -0
  161. package/dist/components/toaster/toaster.js.map +1 -0
  162. package/dist/components/toggle-group/toggle-group.d.ts +24 -0
  163. package/dist/components/toggle-group/toggle-group.js +84 -0
  164. package/dist/components/toggle-group/toggle-group.js.map +1 -0
  165. package/dist/components/tooltip/tooltip.d.ts +19 -0
  166. package/dist/components/tooltip/tooltip.js +49 -0
  167. package/dist/components/tooltip/tooltip.js.map +1 -0
  168. package/dist/fonts/geist-cyrillic-ext-wght-normal.woff2 +0 -0
  169. package/dist/fonts/geist-cyrillic-wght-normal.woff2 +0 -0
  170. package/dist/fonts/geist-latin-ext-wght-normal.woff2 +0 -0
  171. package/dist/fonts/geist-latin-wght-normal.woff2 +0 -0
  172. package/dist/fonts/geist-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  173. package/dist/fonts/geist-mono-cyrillic-wght-normal.woff2 +0 -0
  174. package/dist/fonts/geist-mono-latin-ext-wght-normal.woff2 +0 -0
  175. package/dist/fonts/geist-mono-latin-wght-normal.woff2 +0 -0
  176. package/dist/fonts/geist-mono-symbols2-wght-normal.woff2 +0 -0
  177. package/dist/fonts/geist-mono-vietnamese-wght-normal.woff2 +0 -0
  178. package/dist/fonts/geist-mono.LICENSE +93 -0
  179. package/dist/fonts/geist-vietnamese-wght-normal.woff2 +0 -0
  180. package/dist/fonts/geist.LICENSE +93 -0
  181. package/dist/icons/create-refine-icon.d.ts +13 -0
  182. package/dist/icons/create-refine-icon.js +37 -0
  183. package/dist/icons/create-refine-icon.js.map +1 -0
  184. package/dist/icons/icon.d.ts +10 -0
  185. package/dist/icons/icon.js +13 -0
  186. package/dist/icons/icon.js.map +1 -0
  187. package/dist/icons/refine-icon-names.d.ts +1857 -0
  188. package/dist/icons/refine-icon-names.js +471 -0
  189. package/dist/icons/refine-icon-names.js.map +1 -0
  190. package/dist/icons/refine-icons.d.ts +1852 -0
  191. package/dist/icons/refine-icons.js +604 -0
  192. package/dist/icons/refine-icons.js.map +1 -0
  193. package/dist/index.d.ts +61 -0
  194. package/dist/index.js +61 -0
  195. package/dist/lib/cn.d.ts +5 -0
  196. package/dist/lib/cn.js +49 -0
  197. package/dist/lib/cn.js.map +1 -0
  198. package/dist/lib/use-breakpoint.d.ts +16 -0
  199. package/dist/lib/use-breakpoint.js +52 -0
  200. package/dist/lib/use-breakpoint.js.map +1 -0
  201. package/dist/styles.css +697 -0
  202. package/dist/theme/theme-provider.d.ts +31 -0
  203. package/dist/theme/theme-provider.js +115 -0
  204. package/dist/theme/theme-provider.js.map +1 -0
  205. package/dist/theme/theme-scope.d.ts +12 -0
  206. package/dist/theme/theme-scope.js +22 -0
  207. package/dist/theme/theme-scope.js.map +1 -0
  208. package/dist/theme/theme.d.ts +20 -0
  209. package/dist/theme/theme.js +37 -0
  210. package/dist/theme/theme.js.map +1 -0
  211. package/package.json +91 -5
@@ -0,0 +1,697 @@
1
+ @source './';
2
+
3
+ /*
4
+ * Refine UI design tokens.
5
+ *
6
+ * One brand: refine.studio's teal gem, zinc neutrals and the website's radii.
7
+ * Scoped knobs are raw primitives that a class or data attribute overrides on
8
+ * any subtree. The `@theme inline` block composes them inside each utility,
9
+ * so a subtree that changes mode or `--density` restyles itself without
10
+ * redefining a single semantic token.
11
+ *
12
+ * .light / .dark / .on-gem colour mode
13
+ * data-density="compact|comfortable|spacious"
14
+ * --heading-weight weight of every display and headline step
15
+ */
16
+
17
+ @import "tw-animate-css";
18
+ /* geist-cyrillic-ext-wght-normal */
19
+ @font-face {
20
+ font-family: 'Geist Variable';
21
+ font-style: normal;
22
+ font-display: swap;
23
+ font-weight: 100 900;
24
+ src: url(./fonts/geist-cyrillic-ext-wght-normal.woff2) format('woff2-variations');
25
+ unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
26
+ }
27
+
28
+ /* geist-cyrillic-wght-normal */
29
+ @font-face {
30
+ font-family: 'Geist Variable';
31
+ font-style: normal;
32
+ font-display: swap;
33
+ font-weight: 100 900;
34
+ src: url(./fonts/geist-cyrillic-wght-normal.woff2) format('woff2-variations');
35
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
36
+ }
37
+
38
+ /* geist-vietnamese-wght-normal */
39
+ @font-face {
40
+ font-family: 'Geist Variable';
41
+ font-style: normal;
42
+ font-display: swap;
43
+ font-weight: 100 900;
44
+ src: url(./fonts/geist-vietnamese-wght-normal.woff2) format('woff2-variations');
45
+ unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
46
+ }
47
+
48
+ /* geist-latin-ext-wght-normal */
49
+ @font-face {
50
+ font-family: 'Geist Variable';
51
+ font-style: normal;
52
+ font-display: swap;
53
+ font-weight: 100 900;
54
+ src: url(./fonts/geist-latin-ext-wght-normal.woff2) format('woff2-variations');
55
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
56
+ }
57
+
58
+ /* geist-latin-wght-normal */
59
+ @font-face {
60
+ font-family: 'Geist Variable';
61
+ font-style: normal;
62
+ font-display: swap;
63
+ font-weight: 100 900;
64
+ src: url(./fonts/geist-latin-wght-normal.woff2) format('woff2-variations');
65
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
66
+ }
67
+ /* geist-mono-cyrillic-ext-wght-normal */
68
+ @font-face {
69
+ font-family: 'Geist Mono Variable';
70
+ font-style: normal;
71
+ font-display: swap;
72
+ font-weight: 100 900;
73
+ src: url(./fonts/geist-mono-cyrillic-ext-wght-normal.woff2) format('woff2-variations');
74
+ unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
75
+ }
76
+
77
+ /* geist-mono-cyrillic-wght-normal */
78
+ @font-face {
79
+ font-family: 'Geist Mono Variable';
80
+ font-style: normal;
81
+ font-display: swap;
82
+ font-weight: 100 900;
83
+ src: url(./fonts/geist-mono-cyrillic-wght-normal.woff2) format('woff2-variations');
84
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
85
+ }
86
+
87
+ /* geist-mono-symbols2-wght-normal */
88
+ @font-face {
89
+ font-family: 'Geist Mono Variable';
90
+ font-style: normal;
91
+ font-display: swap;
92
+ font-weight: 100 900;
93
+ src: url(./fonts/geist-mono-symbols2-wght-normal.woff2) format('woff2-variations');
94
+ unicode-range: U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F;
95
+ }
96
+
97
+ /* geist-mono-vietnamese-wght-normal */
98
+ @font-face {
99
+ font-family: 'Geist Mono Variable';
100
+ font-style: normal;
101
+ font-display: swap;
102
+ font-weight: 100 900;
103
+ src: url(./fonts/geist-mono-vietnamese-wght-normal.woff2) format('woff2-variations');
104
+ unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
105
+ }
106
+
107
+ /* geist-mono-latin-ext-wght-normal */
108
+ @font-face {
109
+ font-family: 'Geist Mono Variable';
110
+ font-style: normal;
111
+ font-display: swap;
112
+ font-weight: 100 900;
113
+ src: url(./fonts/geist-mono-latin-ext-wght-normal.woff2) format('woff2-variations');
114
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
115
+ }
116
+
117
+ /* geist-mono-latin-wght-normal */
118
+ @font-face {
119
+ font-family: 'Geist Mono Variable';
120
+ font-style: normal;
121
+ font-display: swap;
122
+ font-weight: 100 900;
123
+ src: url(./fonts/geist-mono-latin-wght-normal.woff2) format('woff2-variations');
124
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
125
+ }
126
+
127
+ @custom-variant dark (&:where(.dark, .dark *));
128
+ @custom-variant light (&:where(.light, .light *));
129
+
130
+ /* Primitives: the refine teal and density. */
131
+
132
+ :root {
133
+ --gem-h: 182;
134
+ --gem-c: 0.14;
135
+ }
136
+
137
+ :root,
138
+ [data-density="comfortable"] {
139
+ --density: 1;
140
+ }
141
+
142
+ [data-density="compact"] {
143
+ --density: 0.85;
144
+ }
145
+
146
+ [data-density="spacious"] {
147
+ --density: 1.15;
148
+ }
149
+
150
+ /* The weight of every display and headline step. An app overrides it in one place. */
151
+
152
+ :root {
153
+ --heading-weight: 700;
154
+ }
155
+
156
+ /* Colour modes. Neutrals are zinc, as on refine.studio. */
157
+
158
+ :root,
159
+ .light {
160
+ color-scheme: light;
161
+
162
+ --canvas: oklch(0.985 0.001 286);
163
+ --background: oklch(1 0 0);
164
+ --foreground: oklch(0.141 0.005 286);
165
+ --card: oklch(1 0 0);
166
+ --card-foreground: oklch(0.141 0.005 286);
167
+ --popover: oklch(1 0 0);
168
+ --popover-foreground: oklch(0.141 0.005 286);
169
+ --muted: oklch(0.967 0.001 286);
170
+ --muted-foreground: oklch(0.48 0.014 286);
171
+ --subtle: oklch(0.6 0.012 286);
172
+ --disabled: oklch(0.75 0.008 286);
173
+ --border: oklch(0.905 0.004 286);
174
+ --input: oklch(0.87 0.006 286);
175
+ --primary: oklch(0.21 0.006 286);
176
+ --primary-foreground: oklch(0.985 0 0);
177
+ --secondary: oklch(0.955 0.002 286);
178
+ --secondary-foreground: oklch(0.21 0.006 286);
179
+ --hover: oklch(0.141 0.005 286 / 0.05);
180
+ --pressed: oklch(0.141 0.005 286 / 0.09);
181
+ --scrim: oklch(0.141 0.005 286 / 0.35);
182
+
183
+ --gem-l: 0.7;
184
+ --gem-ink-l: 0.5;
185
+ --gem-soft-l: 0.965;
186
+ --gem-soft-cf: 0.22;
187
+
188
+ --success: oklch(0.63 0.17 152);
189
+ --success-soft: oklch(0.962 0.044 157);
190
+ --success-ink: oklch(0.45 0.12 152);
191
+ --success-foreground: oklch(0.2 0.05 152);
192
+ --warning: oklch(0.77 0.165 70);
193
+ --warning-soft: oklch(0.973 0.071 103);
194
+ --warning-ink: oklch(0.5 0.12 55);
195
+ --warning-foreground: oklch(0.2 0.05 60);
196
+ --orange: oklch(0.68 0.18 47);
197
+ --orange-soft: oklch(0.968 0.035 55);
198
+ --orange-ink: oklch(0.5 0.15 42);
199
+ --orange-foreground: oklch(0.2 0.05 47);
200
+ --danger: oklch(0.58 0.22 25);
201
+ --danger-soft: oklch(0.966 0.018 18);
202
+ --danger-ink: oklch(0.5 0.19 25);
203
+ --danger-foreground: oklch(0.985 0.01 25);
204
+ --info: oklch(0.6 0.18 250);
205
+ --info-soft: oklch(0.962 0.025 240);
206
+ --info-ink: oklch(0.47 0.16 255);
207
+ --info-foreground: oklch(0.18 0.05 250);
208
+ --violet: oklch(0.56 0.2 295);
209
+ --violet-soft: oklch(0.962 0.03 300);
210
+ --violet-ink: oklch(0.48 0.18 295);
211
+ --violet-foreground: oklch(0.985 0.01 295);
212
+
213
+ --shadow-color: oklch(0.141 0.005 286);
214
+ --shadow-strength: 1;
215
+ }
216
+
217
+ .dark {
218
+ color-scheme: dark;
219
+
220
+ --canvas: oklch(0.11 0.004 286);
221
+ --background: oklch(0.141 0.005 286);
222
+ --foreground: oklch(0.985 0 0);
223
+ --card: oklch(0.17 0.006 286);
224
+ --card-foreground: oklch(0.985 0 0);
225
+ --popover: oklch(0.19 0.006 286);
226
+ --popover-foreground: oklch(0.985 0 0);
227
+ --muted: oklch(0.225 0.006 286);
228
+ --muted-foreground: oklch(0.72 0.012 286);
229
+ --subtle: oklch(0.58 0.012 286);
230
+ --disabled: oklch(0.42 0.008 286);
231
+ --border: oklch(0.29 0.006 286);
232
+ --input: oklch(0.34 0.008 286);
233
+ --primary: oklch(0.985 0 0);
234
+ --primary-foreground: oklch(0.21 0.006 286);
235
+ --secondary: oklch(0.25 0.006 286);
236
+ --secondary-foreground: oklch(0.985 0 0);
237
+ --hover: oklch(1 0 0 / 0.06);
238
+ --pressed: oklch(1 0 0 / 0.1);
239
+ --scrim: oklch(0 0 0 / 0.6);
240
+
241
+ --gem-l: 0.78;
242
+ --gem-ink-l: 0.82;
243
+ --gem-soft-l: 0.28;
244
+ --gem-soft-cf: 0.35;
245
+
246
+ --success: oklch(0.72 0.17 152);
247
+ --success-soft: oklch(0.27 0.05 157);
248
+ --success-ink: oklch(0.82 0.14 155);
249
+ --success-foreground: oklch(0.2 0.05 152);
250
+ --warning: oklch(0.8 0.16 75);
251
+ --warning-soft: oklch(0.29 0.05 75);
252
+ --warning-ink: oklch(0.86 0.13 85);
253
+ --warning-foreground: oklch(0.2 0.05 60);
254
+ --orange: oklch(0.74 0.16 50);
255
+ --orange-soft: oklch(0.28 0.055 48);
256
+ --orange-ink: oklch(0.83 0.11 58);
257
+ --orange-foreground: oklch(0.2 0.05 47);
258
+ --danger: oklch(0.68 0.2 22);
259
+ --danger-soft: oklch(0.27 0.06 20);
260
+ --danger-ink: oklch(0.8 0.12 20);
261
+ --danger-foreground: oklch(0.18 0.05 25);
262
+ --info: oklch(0.7 0.15 245);
263
+ --info-soft: oklch(0.27 0.05 245);
264
+ --info-ink: oklch(0.82 0.1 240);
265
+ --info-foreground: oklch(0.18 0.05 250);
266
+ --violet: oklch(0.72 0.15 295);
267
+ --violet-soft: oklch(0.27 0.06 295);
268
+ --violet-ink: oklch(0.83 0.1 300);
269
+ --violet-foreground: oklch(0.18 0.05 295);
270
+
271
+ --shadow-color: oklch(0 0 0);
272
+ --shadow-strength: 4;
273
+ }
274
+
275
+ /*
276
+ * The website's "overlay" register: white ink straight on a gem gradient.
277
+ * Pair it with `bg-gem-gradient` for a full-bleed brand moment.
278
+ */
279
+ .on-gem {
280
+ --foreground: oklch(0.99 0.01 var(--gem-h));
281
+ --muted-foreground: oklch(0.99 0.01 var(--gem-h) / 0.8);
282
+ --border: oklch(1 0 0 / 0.35);
283
+ --input: oklch(1 0 0 / 0.5);
284
+ --hover: oklch(1 0 0 / 0.12);
285
+ --pressed: oklch(1 0 0 / 0.2);
286
+ --primary: oklch(0.99 0 0);
287
+ --primary-foreground: oklch(0.25 calc(var(--gem-c) * 0.5) var(--gem-h));
288
+
289
+ color: var(--foreground);
290
+ }
291
+
292
+ @theme inline {
293
+ --font-sans: "Geist Variable", ui-sans-serif, system-ui, sans-serif;
294
+ --font-mono: "Geist Mono Variable", ui-monospace, "SFMono-Regular", monospace;
295
+ --font-display: var(--font-sans);
296
+
297
+ --color-canvas: var(--canvas);
298
+ --color-background: var(--background);
299
+ --color-foreground: var(--foreground);
300
+ --color-card: var(--card);
301
+ --color-card-foreground: var(--card-foreground);
302
+ --color-popover: var(--popover);
303
+ --color-popover-foreground: var(--popover-foreground);
304
+ --color-muted: var(--muted);
305
+ --color-muted-foreground: var(--muted-foreground);
306
+ --color-subtle: var(--subtle);
307
+ --color-disabled: var(--disabled);
308
+ --color-border: var(--border);
309
+ --color-input: var(--input);
310
+ --color-ring: oklch(var(--gem-l) var(--gem-c) var(--gem-h));
311
+ --color-primary: var(--primary);
312
+ --color-primary-foreground: var(--primary-foreground);
313
+ --color-secondary: var(--secondary);
314
+ --color-secondary-foreground: var(--secondary-foreground);
315
+ --color-hover: var(--hover);
316
+ --color-pressed: var(--pressed);
317
+ --color-scrim: var(--scrim);
318
+
319
+ --color-gem: oklch(var(--gem-l) var(--gem-c) var(--gem-h));
320
+ --color-gem-foreground: oklch(0.2 calc(var(--gem-c) * 0.35) var(--gem-h));
321
+ --color-gem-soft: oklch(
322
+ var(--gem-soft-l) calc(var(--gem-c) * var(--gem-soft-cf)) var(--gem-h)
323
+ );
324
+ --color-gem-ink: oklch(var(--gem-ink-l) var(--gem-c) var(--gem-h));
325
+ --color-gem-50: oklch(0.975 calc(var(--gem-c) * 0.15) var(--gem-h));
326
+ --color-gem-100: oklch(0.945 calc(var(--gem-c) * 0.3) var(--gem-h));
327
+ --color-gem-200: oklch(0.895 calc(var(--gem-c) * 0.55) var(--gem-h));
328
+ --color-gem-300: oklch(0.835 calc(var(--gem-c) * 0.8) var(--gem-h));
329
+ --color-gem-400: oklch(0.775 var(--gem-c) var(--gem-h));
330
+ --color-gem-500: oklch(0.705 var(--gem-c) var(--gem-h));
331
+ --color-gem-600: oklch(0.6 calc(var(--gem-c) * 0.9) var(--gem-h));
332
+ --color-gem-700: oklch(0.51 calc(var(--gem-c) * 0.8) var(--gem-h));
333
+ --color-gem-800: oklch(0.44 calc(var(--gem-c) * 0.65) var(--gem-h));
334
+ --color-gem-900: oklch(0.38 calc(var(--gem-c) * 0.55) var(--gem-h));
335
+ --color-gem-950: oklch(0.27 calc(var(--gem-c) * 0.45) var(--gem-h));
336
+
337
+ --color-success: var(--success);
338
+ --color-success-soft: var(--success-soft);
339
+ --color-success-ink: var(--success-ink);
340
+ --color-success-foreground: var(--success-foreground);
341
+ --color-warning: var(--warning);
342
+ --color-warning-soft: var(--warning-soft);
343
+ --color-warning-ink: var(--warning-ink);
344
+ --color-warning-foreground: var(--warning-foreground);
345
+ --color-orange: var(--orange);
346
+ --color-orange-soft: var(--orange-soft);
347
+ --color-orange-ink: var(--orange-ink);
348
+ --color-orange-foreground: var(--orange-foreground);
349
+ --color-danger: var(--danger);
350
+ --color-danger-soft: var(--danger-soft);
351
+ --color-danger-ink: var(--danger-ink);
352
+ --color-danger-foreground: var(--danger-foreground);
353
+ --color-info: var(--info);
354
+ --color-info-soft: var(--info-soft);
355
+ --color-info-ink: var(--info-ink);
356
+ --color-info-foreground: var(--info-foreground);
357
+ --color-violet: var(--violet);
358
+ --color-violet-soft: var(--violet-soft);
359
+ --color-violet-ink: var(--violet-ink);
360
+ --color-violet-foreground: var(--violet-foreground);
361
+
362
+ --radius-inner: 0.3125rem;
363
+ --radius-control: 0.5rem;
364
+ --radius-card: 0.75rem;
365
+ --radius-panel: 1.25rem;
366
+
367
+ --spacing-control-xs: calc(1.5rem * var(--density));
368
+ --spacing-control-sm: calc(2rem * var(--density));
369
+ --spacing-control-md: calc(2.5rem * var(--density));
370
+ --spacing-control-lg: calc(3rem * var(--density));
371
+ --spacing-control-xl: calc(3.5rem * var(--density));
372
+
373
+ --shadow-soft: 0 24px 48px -12px
374
+ oklch(from var(--shadow-color) l c h / calc(0.06 * var(--shadow-strength)));
375
+ --shadow-float:
376
+ 0 2px 6px -1px
377
+ oklch(
378
+ from var(--shadow-color) l c h / calc(0.06 * var(--shadow-strength))
379
+ ),
380
+ 0 16px 40px -8px
381
+ oklch(
382
+ from var(--shadow-color) l c h / calc(0.14 * var(--shadow-strength))
383
+ );
384
+ --shadow-glow:
385
+ 0 0 0 1px oklch(var(--gem-l) var(--gem-c) var(--gem-h) / 0.35),
386
+ 0 8px 32px -4px oklch(var(--gem-l) var(--gem-c) var(--gem-h) / 0.45);
387
+
388
+ --text-display-2xl--font-weight: var(--heading-weight);
389
+ --text-display-xl--font-weight: var(--heading-weight);
390
+ --text-display-lg--font-weight: var(--heading-weight);
391
+ --text-display-md--font-weight: var(--heading-weight);
392
+ --text-display-sm--font-weight: var(--heading-weight);
393
+ --text-headline-lg--font-weight: var(--heading-weight);
394
+ --text-headline-md--font-weight: var(--heading-weight);
395
+ --text-headline-sm--font-weight: var(--heading-weight);
396
+ }
397
+
398
+ @theme {
399
+ --text-display-2xl: 6rem;
400
+ --text-display-2xl--line-height: 1;
401
+ --text-display-2xl--letter-spacing: -0.045em;
402
+ --text-display-xl: 4.5rem;
403
+ --text-display-xl--line-height: 1;
404
+ --text-display-xl--letter-spacing: -0.04em;
405
+ --text-display-lg: 3.5rem;
406
+ --text-display-lg--line-height: 1.05;
407
+ --text-display-lg--letter-spacing: -0.035em;
408
+ --text-display-md: 2.75rem;
409
+ --text-display-md--line-height: 1.1;
410
+ --text-display-md--letter-spacing: -0.03em;
411
+ --text-display-sm: 2.25rem;
412
+ --text-display-sm--line-height: 1.15;
413
+ --text-display-sm--letter-spacing: -0.025em;
414
+ --text-headline-lg: 1.75rem;
415
+ --text-headline-lg--line-height: 1.2;
416
+ --text-headline-lg--letter-spacing: -0.02em;
417
+ --text-headline-md: 1.375rem;
418
+ --text-headline-md--line-height: 1.3;
419
+ --text-headline-md--letter-spacing: -0.015em;
420
+ --text-headline-sm: 1.125rem;
421
+ --text-headline-sm--line-height: 1.4;
422
+ --text-headline-sm--letter-spacing: -0.01em;
423
+ --text-body-lg: 1.125rem;
424
+ --text-body-lg--line-height: 1.65;
425
+ --text-body: 0.9375rem;
426
+ --text-body--line-height: 1.6;
427
+ --text-body-sm: 0.8125rem;
428
+ --text-body-sm--line-height: 1.5;
429
+ --text-caption: 0.75rem;
430
+ --text-caption--line-height: 1.4;
431
+ --text-micro: 0.625rem;
432
+ --text-micro--line-height: 1.4;
433
+
434
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
435
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
436
+
437
+ --animate-shimmer: shimmer 1.8s linear infinite;
438
+ --animate-facet-spin: facet-spin 1.1s var(--ease-spring) infinite;
439
+ --animate-twinkle: twinkle 4s ease-in-out infinite;
440
+ --animate-hex-wave: hex-wave 6s ease-in-out infinite;
441
+ --animate-marquee: marquee var(--marquee-duration, 30s) linear infinite;
442
+ --animate-rise: rise 0.5s var(--ease-out-expo) both;
443
+ --animate-indeterminate: indeterminate 1.4s var(--ease-out-expo) infinite;
444
+
445
+ @keyframes shimmer {
446
+ from {
447
+ background-position: 200% 0;
448
+ }
449
+ to {
450
+ background-position: -200% 0;
451
+ }
452
+ }
453
+
454
+ @keyframes facet-spin {
455
+ 0% {
456
+ transform: rotate(0deg) scale(1);
457
+ }
458
+ 50% {
459
+ transform: rotate(180deg) scale(0.82);
460
+ }
461
+ 100% {
462
+ transform: rotate(360deg) scale(1);
463
+ }
464
+ }
465
+
466
+ @keyframes twinkle {
467
+ 0%,
468
+ 100% {
469
+ opacity: 0.25;
470
+ }
471
+ 50% {
472
+ opacity: 1;
473
+ }
474
+ }
475
+
476
+ @keyframes hex-wave {
477
+ 0%,
478
+ 100% {
479
+ opacity: 0.15;
480
+ }
481
+ 50% {
482
+ opacity: 1;
483
+ }
484
+ }
485
+
486
+ @keyframes marquee {
487
+ from {
488
+ transform: translateX(0);
489
+ }
490
+ to {
491
+ transform: translateX(-50%);
492
+ }
493
+ }
494
+
495
+ @keyframes indeterminate {
496
+ from {
497
+ transform: translateX(-100%) scaleX(0.4);
498
+ }
499
+ to {
500
+ transform: translateX(250%) scaleX(0.4);
501
+ }
502
+ }
503
+
504
+ @keyframes rise {
505
+ from {
506
+ opacity: 0;
507
+ transform: translateY(1.25rem);
508
+ }
509
+ to {
510
+ opacity: 1;
511
+ transform: translateY(0);
512
+ }
513
+ }
514
+ }
515
+
516
+ /*
517
+ * Chart colours: categorical series, used in order from chart-1.
518
+ * Tailwind's 500 step, the same in light and dark. Neighbours in the order
519
+ * stay apart under protanopia, deuteranopia and tritanopia. The fills reach
520
+ * 2:1 on white, not 3:1, so every chart carries a legend or direct labels.
521
+ */
522
+
523
+ :root {
524
+ --chart-1: oklch(0.704 0.14 182.503);
525
+ --chart-2: oklch(0.667 0.295 322.15);
526
+ --chart-3: oklch(0.723 0.219 149.579);
527
+ --chart-4: oklch(0.606 0.25 292.717);
528
+ --chart-5: oklch(0.637 0.237 25.331);
529
+ --chart-6: oklch(0.685 0.169 237.323);
530
+ --chart-7: oklch(0.656 0.241 354.308);
531
+ --chart-8: oklch(0.769 0.188 70.08);
532
+ }
533
+
534
+ @theme inline {
535
+ --color-chart-1: var(--chart-1);
536
+ --color-chart-2: var(--chart-2);
537
+ --color-chart-3: var(--chart-3);
538
+ --color-chart-4: var(--chart-4);
539
+ --color-chart-5: var(--chart-5);
540
+ --color-chart-6: var(--chart-6);
541
+ --color-chart-7: var(--chart-7);
542
+ --color-chart-8: var(--chart-8);
543
+ }
544
+
545
+ /* Utilities that carry the brand. */
546
+
547
+ @utility focus-ring {
548
+ outline: 2px solid transparent;
549
+ outline-offset: 2px;
550
+ transition-property: outline-color, outline-offset;
551
+ transition-duration: 120ms;
552
+
553
+ &:focus-visible {
554
+ outline-color: var(--color-ring);
555
+ }
556
+ }
557
+
558
+ @utility font-display {
559
+ font-family: var(--font-display);
560
+ }
561
+
562
+ @utility eyebrow {
563
+ font-family: var(--font-mono);
564
+ font-size: 0.6875rem;
565
+ font-weight: 500;
566
+ letter-spacing: 0.14em;
567
+ line-height: 1;
568
+ text-transform: uppercase;
569
+ }
570
+
571
+ @utility card-surface {
572
+ border: 1px solid var(--color-border);
573
+ border-radius: var(--radius-card);
574
+ background-color: var(--color-card);
575
+ color: var(--color-card-foreground);
576
+ box-shadow: var(--shadow-soft);
577
+ }
578
+
579
+ @utility glass {
580
+ background-color: oklch(from var(--background) l c h / 0.72);
581
+ backdrop-filter: blur(16px) saturate(1.4);
582
+ }
583
+
584
+ @utility bg-gem-gradient {
585
+ background-image: linear-gradient(
586
+ to right,
587
+ oklch(0.775 var(--gem-c) var(--gem-h)),
588
+ oklch(0.705 var(--gem-c) var(--gem-h))
589
+ );
590
+ }
591
+
592
+ @utility bg-gem-radiance {
593
+ background-image:
594
+ radial-gradient(
595
+ 60% 80% at 15% 0%,
596
+ oklch(0.775 var(--gem-c) var(--gem-h) / 0.35),
597
+ transparent 70%
598
+ ),
599
+ radial-gradient(
600
+ 50% 70% at 100% 100%,
601
+ oklch(0.6 var(--gem-c) calc(var(--gem-h) + 40) / 0.25),
602
+ transparent 70%
603
+ );
604
+ }
605
+
606
+ @utility text-gem-gradient {
607
+ background-image: linear-gradient(
608
+ 120deg,
609
+ oklch(0.84 calc(var(--gem-c) * 0.8) calc(var(--gem-h) - 20)),
610
+ oklch(0.7 var(--gem-c) var(--gem-h)) 50%,
611
+ oklch(0.58 var(--gem-c) calc(var(--gem-h) + 30))
612
+ );
613
+ background-clip: text;
614
+ color: transparent;
615
+ }
616
+
617
+ @utility pattern-hex {
618
+ background-color: currentColor;
619
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='48.5' viewBox='0 0 28 48.5'%3E%3Cpath fill='none' stroke='black' stroke-width='1' d='M14 0.5 27.5 8.3v15.6L14 31.7 0.5 23.9V8.3zM14 31.7v16.8M0.5 8.3 0.5 0M27.5 8.3V0'/%3E%3C/svg%3E");
620
+ mask-size: 28px 48.5px;
621
+ }
622
+
623
+ @utility pattern-grid {
624
+ background-color: currentColor;
625
+ mask-image:
626
+ linear-gradient(to right, black 1px, transparent 1px),
627
+ linear-gradient(to bottom, black 1px, transparent 1px);
628
+ mask-size: 32px 32px;
629
+ mask-composite: add;
630
+ }
631
+
632
+ @utility pattern-dots {
633
+ background-color: currentColor;
634
+ mask-image: radial-gradient(circle at center, black 1px, transparent 1.5px);
635
+ mask-size: 16px 16px;
636
+ }
637
+
638
+ @utility mask-fade-b {
639
+ mask-image: linear-gradient(to bottom, black 40%, transparent);
640
+ }
641
+
642
+ @utility mask-fade-x {
643
+ mask-image: linear-gradient(
644
+ to right,
645
+ transparent,
646
+ black 12%,
647
+ black 88%,
648
+ transparent
649
+ );
650
+ }
651
+
652
+ @utility skeleton-shimmer {
653
+ background-image: linear-gradient(
654
+ 90deg,
655
+ var(--color-muted) 0%,
656
+ oklch(from var(--muted) calc(l + 0.04) c h) 50%,
657
+ var(--color-muted) 100%
658
+ );
659
+ background-size: 200% 100%;
660
+ }
661
+
662
+ @layer base {
663
+ *,
664
+ ::before,
665
+ ::after {
666
+ border-color: var(--color-border);
667
+ }
668
+
669
+ html {
670
+ scrollbar-color: var(--color-input) transparent;
671
+ scrollbar-width: thin;
672
+ }
673
+
674
+ body {
675
+ background-color: var(--color-background);
676
+ color: var(--color-foreground);
677
+ font-family: var(--font-sans);
678
+ font-feature-settings: "ss01", "cv11";
679
+ -webkit-font-smoothing: antialiased;
680
+ -moz-osx-font-smoothing: grayscale;
681
+ }
682
+
683
+ ::selection {
684
+ background-color: oklch(var(--gem-l) var(--gem-c) var(--gem-h) / 0.3);
685
+ }
686
+
687
+ @media (prefers-reduced-motion: reduce) {
688
+ *,
689
+ ::before,
690
+ ::after {
691
+ animation-duration: 0.01ms !important;
692
+ animation-iteration-count: 1 !important;
693
+ transition-duration: 0.01ms !important;
694
+ scroll-behavior: auto !important;
695
+ }
696
+ }
697
+ }