@nous-research/ui 0.14.2 → 0.16.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 (216) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/README.md +24 -4
  3. package/dist/fonts.js +1 -0
  4. package/dist/hooks/use-capped-frame.js +1 -0
  5. package/dist/hooks/use-css-var-dims.js +1 -0
  6. package/dist/hooks/use-gpu-tier.js +1 -0
  7. package/dist/hooks/use-render-loop.js +1 -0
  8. package/dist/hooks/use-smooth-controls.js +1 -0
  9. package/dist/index.js +1 -0
  10. package/dist/ui/basic-page.js +1 -0
  11. package/dist/ui/components/animated-count.js +1 -0
  12. package/dist/ui/components/ascii.js +1 -0
  13. package/dist/ui/components/badge.js +2 -1
  14. package/dist/ui/components/badges/nous-girl.js +1 -0
  15. package/dist/ui/components/blend-mode.js +1 -0
  16. package/dist/ui/components/blink.js +1 -0
  17. package/dist/ui/components/button.js +2 -1
  18. package/dist/ui/components/checkbox.js +1 -0
  19. package/dist/ui/components/command-block.js +4 -3
  20. package/dist/ui/components/cursor.js +1 -0
  21. package/dist/ui/components/dropdown-menu.js +1 -0
  22. package/dist/ui/components/fit-text/index.js +1 -0
  23. package/dist/ui/components/graphs/bar-chart.js +1 -0
  24. package/dist/ui/components/graphs/index.js +1 -0
  25. package/dist/ui/components/graphs/line-chart.js +1 -0
  26. package/dist/ui/components/graphs/utils.js +1 -0
  27. package/dist/ui/components/grid/index.js +1 -0
  28. package/dist/ui/components/hover-bg.js +1 -0
  29. package/dist/ui/components/icons/arrow.js +1 -0
  30. package/dist/ui/components/icons/check.js +1 -0
  31. package/dist/ui/components/icons/chevron.js +1 -0
  32. package/dist/ui/components/icons/discord.js +1 -0
  33. package/dist/ui/components/icons/eye.js +1 -0
  34. package/dist/ui/components/icons/gear.js +1 -0
  35. package/dist/ui/components/icons/github.js +1 -0
  36. package/dist/ui/components/icons/hamburger.js +1 -0
  37. package/dist/ui/components/icons/heart.js +1 -0
  38. package/dist/ui/components/icons/index.js +1 -0
  39. package/dist/ui/components/icons/link.js +1 -0
  40. package/dist/ui/components/icons/minus.js +1 -0
  41. package/dist/ui/components/icons/search.js +1 -0
  42. package/dist/ui/components/image-distortion.js +1 -0
  43. package/dist/ui/components/leva-client.js +1 -0
  44. package/dist/ui/components/list-item.js +3 -2
  45. package/dist/ui/components/modal/index.js +1 -0
  46. package/dist/ui/components/modal/modal.css +1 -1
  47. package/dist/ui/components/overlays/blend-modes.js +1 -0
  48. package/dist/ui/components/overlays/glitch.js +1 -0
  49. package/dist/ui/components/overlays/greys.js +1 -0
  50. package/dist/ui/components/overlays/index.js +1 -0
  51. package/dist/ui/components/overlays/lens-layers.js +1 -0
  52. package/dist/ui/components/overlays/lens.js +1 -0
  53. package/dist/ui/components/overlays/noise.js +1 -0
  54. package/dist/ui/components/overlays/vignette.js +1 -0
  55. package/dist/ui/components/poster.js +1 -0
  56. package/dist/ui/components/progress.js +1 -0
  57. package/dist/ui/components/scene-canvas.js +1 -0
  58. package/dist/ui/components/scramble.js +1 -0
  59. package/dist/ui/components/segmented.js +5 -4
  60. package/dist/ui/components/select.js +1 -0
  61. package/dist/ui/components/selection-switcher.js +1 -0
  62. package/dist/ui/components/shader.js +1 -0
  63. package/dist/ui/components/socials.js +1 -0
  64. package/dist/ui/components/spinner.js +1 -0
  65. package/dist/ui/components/stats.js +2 -1
  66. package/dist/ui/components/switch.js +1 -0
  67. package/dist/ui/components/tabs.js +4 -3
  68. package/dist/ui/components/terminal-demo.js +2 -1
  69. package/dist/ui/components/theme-toggle.js +1 -0
  70. package/dist/ui/components/tier-card.js +2 -1
  71. package/dist/ui/components/tv.js +1 -0
  72. package/dist/ui/components/typography/h1.js +1 -0
  73. package/dist/ui/components/typography/h2.js +1 -0
  74. package/dist/ui/components/typography/index.js +1 -0
  75. package/dist/ui/components/typography/legend.js +1 -0
  76. package/dist/ui/components/typography/small.js +1 -0
  77. package/dist/ui/components/watchlist.js +2 -1
  78. package/dist/ui/footer.js +1 -0
  79. package/dist/ui/globals.css +33 -1
  80. package/dist/ui/header.js +1 -0
  81. package/dist/ui/layout-wrapper.js +2 -1
  82. package/dist/utils/color.js +1 -0
  83. package/dist/utils/index.js +1 -0
  84. package/dist/utils/poly.js +1 -0
  85. package/package.json +4 -2
  86. package/src/assets/filler-bg0.webp +0 -0
  87. package/src/assets.d.ts +38 -0
  88. package/src/fonts/Collapse-Bold.woff2 +0 -0
  89. package/src/fonts/Collapse-BoldItalic.woff2 +0 -0
  90. package/src/fonts/Collapse-Italic.woff2 +0 -0
  91. package/src/fonts/Collapse-Light.woff2 +0 -0
  92. package/src/fonts/Collapse-LightItalic.woff2 +0 -0
  93. package/src/fonts/Collapse-Regular.woff2 +0 -0
  94. package/src/fonts/Collapse-Thin.woff2 +0 -0
  95. package/src/fonts/Collapse-ThinItalic.woff2 +0 -0
  96. package/src/fonts/Mondwest-Regular.woff2 +0 -0
  97. package/src/fonts/Neuebit-Bold.woff2 +0 -0
  98. package/src/fonts/RulesCompressed-Medium.woff2 +0 -0
  99. package/src/fonts/RulesCompressed-Regular.woff2 +0 -0
  100. package/src/fonts/RulesExpanded-Bold.woff2 +0 -0
  101. package/src/fonts/RulesExpanded-Regular.woff2 +0 -0
  102. package/src/fonts.ts +6 -0
  103. package/src/hooks/use-capped-frame.ts +18 -0
  104. package/src/hooks/use-css-var-dims.ts +39 -0
  105. package/src/hooks/use-gpu-tier.ts +165 -0
  106. package/src/hooks/use-render-loop.ts +121 -0
  107. package/src/hooks/use-smooth-controls.ts +318 -0
  108. package/src/index.ts +109 -0
  109. package/src/ui/basic-page.tsx +34 -0
  110. package/src/ui/build.css +4 -0
  111. package/src/ui/components/animated-count.stories.tsx +67 -0
  112. package/src/ui/components/animated-count.tsx +168 -0
  113. package/src/ui/components/ascii.stories.tsx +30 -0
  114. package/src/ui/components/ascii.tsx +110 -0
  115. package/src/ui/components/badge.stories.tsx +31 -0
  116. package/src/ui/components/badge.tsx +60 -0
  117. package/src/ui/components/badges/nous-girl.tsx +52 -0
  118. package/src/ui/components/blend-mode.stories.tsx +33 -0
  119. package/src/ui/components/blend-mode.tsx +129 -0
  120. package/src/ui/components/blink.stories.tsx +32 -0
  121. package/src/ui/components/blink.tsx +21 -0
  122. package/src/ui/components/button.stories.tsx +68 -0
  123. package/src/ui/components/button.tsx +170 -0
  124. package/src/ui/components/checkbox.stories.tsx +113 -0
  125. package/src/ui/components/checkbox.tsx +36 -0
  126. package/src/ui/components/command-block.stories.tsx +52 -0
  127. package/src/ui/components/command-block.tsx +86 -0
  128. package/src/ui/components/cursor.tsx +115 -0
  129. package/src/ui/components/dropdown-menu.stories.tsx +52 -0
  130. package/src/ui/components/dropdown-menu.tsx +117 -0
  131. package/src/ui/components/fit-text/fit-text.css +42 -0
  132. package/src/ui/components/fit-text/index.stories.tsx +33 -0
  133. package/src/ui/components/fit-text/index.tsx +45 -0
  134. package/src/ui/components/graphs/bar-chart.tsx +153 -0
  135. package/src/ui/components/graphs/index.stories.tsx +64 -0
  136. package/src/ui/components/graphs/index.tsx +4 -0
  137. package/src/ui/components/graphs/line-chart.tsx +213 -0
  138. package/src/ui/components/graphs/utils.tsx +265 -0
  139. package/src/ui/components/grid/grid.css +79 -0
  140. package/src/ui/components/grid/index.tsx +19 -0
  141. package/src/ui/components/hover-bg.stories.tsx +29 -0
  142. package/src/ui/components/hover-bg.tsx +15 -0
  143. package/src/ui/components/icons/arrow.tsx +42 -0
  144. package/src/ui/components/icons/check.tsx +14 -0
  145. package/src/ui/components/icons/chevron.tsx +45 -0
  146. package/src/ui/components/icons/discord.tsx +16 -0
  147. package/src/ui/components/icons/eye.tsx +12 -0
  148. package/src/ui/components/icons/gear.tsx +51 -0
  149. package/src/ui/components/icons/github.tsx +16 -0
  150. package/src/ui/components/icons/hamburger.tsx +52 -0
  151. package/src/ui/components/icons/heart.tsx +12 -0
  152. package/src/ui/components/icons/index.ts +12 -0
  153. package/src/ui/components/icons/link.tsx +14 -0
  154. package/src/ui/components/icons/minus.tsx +14 -0
  155. package/src/ui/components/icons/search.tsx +28 -0
  156. package/src/ui/components/image-distortion.stories.tsx +120 -0
  157. package/src/ui/components/image-distortion.tsx +498 -0
  158. package/src/ui/components/leva-client.tsx +14 -0
  159. package/src/ui/components/list-item.stories.tsx +83 -0
  160. package/src/ui/components/list-item.tsx +37 -0
  161. package/src/ui/components/modal/index.stories.tsx +46 -0
  162. package/src/ui/components/modal/index.tsx +48 -0
  163. package/src/ui/components/modal/modal.css +36 -0
  164. package/src/ui/components/overlays/blend-modes.ts +13 -0
  165. package/src/ui/components/overlays/glitch.tsx +243 -0
  166. package/src/ui/components/overlays/greys.tsx +386 -0
  167. package/src/ui/components/overlays/index.tsx +47 -0
  168. package/src/ui/components/overlays/lens-layers.tsx +119 -0
  169. package/src/ui/components/overlays/lens.ts +91 -0
  170. package/src/ui/components/overlays/noise.tsx +174 -0
  171. package/src/ui/components/overlays/vignette.tsx +60 -0
  172. package/src/ui/components/poster.stories.tsx +513 -0
  173. package/src/ui/components/poster.tsx +411 -0
  174. package/src/ui/components/progress.stories.tsx +48 -0
  175. package/src/ui/components/progress.tsx +56 -0
  176. package/src/ui/components/scene-canvas.tsx +254 -0
  177. package/src/ui/components/scramble.stories.tsx +49 -0
  178. package/src/ui/components/scramble.tsx +95 -0
  179. package/src/ui/components/segmented.stories.tsx +101 -0
  180. package/src/ui/components/segmented.tsx +81 -0
  181. package/src/ui/components/select.stories.tsx +88 -0
  182. package/src/ui/components/select.tsx +267 -0
  183. package/src/ui/components/selection-switcher.tsx +44 -0
  184. package/src/ui/components/shader.tsx +83 -0
  185. package/src/ui/components/socials.tsx +42 -0
  186. package/src/ui/components/spinner.stories.tsx +101 -0
  187. package/src/ui/components/spinner.tsx +60 -0
  188. package/src/ui/components/stats.stories.tsx +24 -0
  189. package/src/ui/components/stats.tsx +53 -0
  190. package/src/ui/components/switch.stories.tsx +77 -0
  191. package/src/ui/components/switch.tsx +48 -0
  192. package/src/ui/components/tabs.stories.tsx +101 -0
  193. package/src/ui/components/tabs.tsx +66 -0
  194. package/src/ui/components/terminal-demo.stories.tsx +67 -0
  195. package/src/ui/components/terminal-demo.tsx +189 -0
  196. package/src/ui/components/theme-toggle.stories.tsx +47 -0
  197. package/src/ui/components/theme-toggle.tsx +66 -0
  198. package/src/ui/components/tier-card.stories.tsx +217 -0
  199. package/src/ui/components/tier-card.tsx +190 -0
  200. package/src/ui/components/tv.stories.tsx +37 -0
  201. package/src/ui/components/tv.tsx +257 -0
  202. package/src/ui/components/typography/h1.tsx +18 -0
  203. package/src/ui/components/typography/h2.tsx +18 -0
  204. package/src/ui/components/typography/index.tsx +54 -0
  205. package/src/ui/components/typography/legend.tsx +24 -0
  206. package/src/ui/components/typography/small.tsx +11 -0
  207. package/src/ui/components/watchlist.stories.tsx +33 -0
  208. package/src/ui/components/watchlist.tsx +105 -0
  209. package/src/ui/fonts.css +63 -0
  210. package/src/ui/footer.tsx +111 -0
  211. package/src/ui/globals.css +383 -0
  212. package/src/ui/header.tsx +398 -0
  213. package/src/ui/layout-wrapper.tsx +11 -0
  214. package/src/utils/color.ts +21 -0
  215. package/src/utils/index.ts +62 -0
  216. package/src/utils/poly.ts +26 -0
@@ -0,0 +1,383 @@
1
+ @source ".";
2
+ @import './components/fit-text/fit-text.css' layer(components);
3
+ @import './components/grid/grid.css' layer(components);
4
+ @import './components/modal/modal.css' layer(components);
5
+
6
+ @view-transition {
7
+ navigation: auto;
8
+ }
9
+
10
+ @media (prefers-reduced-motion: reduce) {
11
+ @view-transition {
12
+ navigation: none;
13
+ }
14
+ }
15
+
16
+ ::view-transition-old(page),
17
+ ::view-transition-new(page) {
18
+ animation-duration: 0.25s;
19
+ animation-timing-function: ease-out;
20
+ }
21
+
22
+ ::view-transition-old(page) {
23
+ animation: fade-out 0.25s ease-out;
24
+ }
25
+
26
+ ::view-transition-new(page) {
27
+ animation: fade-in 0.25s ease-out;
28
+ }
29
+
30
+ @keyframes fade-out {
31
+ to {
32
+ opacity: 0;
33
+ }
34
+ }
35
+
36
+ @keyframes fade-in {
37
+ from {
38
+ opacity: 0;
39
+ }
40
+ }
41
+
42
+ @keyframes slide-down {
43
+ from {
44
+ opacity: 0;
45
+ transform: translateY(-6px);
46
+ }
47
+ }
48
+
49
+ @keyframes slide-up {
50
+ from {
51
+ opacity: 0;
52
+ transform: translateY(6px);
53
+ }
54
+ }
55
+
56
+ .animate-slide-down {
57
+ animation: slide-down 0.6s ease-out both;
58
+ }
59
+
60
+ .animate-slide-up {
61
+ animation: slide-up 0.6s ease-out both;
62
+ }
63
+
64
+ .animate-fade-in {
65
+ animation: fade-in 0.5s ease-out both;
66
+ }
67
+
68
+ @keyframes blink {
69
+ 0%,
70
+ 100% {
71
+ opacity: 1;
72
+ }
73
+ 50% {
74
+ opacity: 0;
75
+ }
76
+ }
77
+
78
+ @keyframes spin-slow {
79
+ from {
80
+ transform: rotate(0deg);
81
+ }
82
+ to {
83
+ transform: rotate(360deg);
84
+ }
85
+ }
86
+
87
+ .animate-spin-slow {
88
+ animation: spin-slow 12s linear infinite;
89
+ }
90
+
91
+ @keyframes march {
92
+ to {
93
+ background-position: 0.5rem 0;
94
+ }
95
+ }
96
+
97
+ .group:hover .blink {
98
+ animation: blink 1s step-end infinite;
99
+ }
100
+
101
+ .dither {
102
+ background: repeating-conic-gradient(currentColor 0% 25%, transparent 0% 50%)
103
+ 0 0 / 2px 2px;
104
+ }
105
+
106
+ @custom-variant dark (&:is(.dark *));
107
+
108
+ @theme inline {
109
+ --color-background: var(--background);
110
+ --color-background-base: var(--background-base);
111
+ --color-midground: var(--midground);
112
+ --color-midground-base: var(--midground-base);
113
+ --color-foreground: var(--foreground);
114
+ --color-foreground-base: var(--foreground-base);
115
+ --color-gesso: #eaeaea;
116
+
117
+ /* Semantic tokens — defaults for DS preview; consumers (e.g. shadcn-style
118
+ dashboards) can remap these via their own @theme inline. */
119
+ --color-destructive: var(--destructive, #fb2c36);
120
+ --color-destructive-foreground: var(--destructive-foreground, #ffffff);
121
+ --color-success: var(--success, #4ade80);
122
+ --color-warning: var(--warning, #ffbd38);
123
+
124
+ /* Text hierarchy — semantic tokens with WCAG AA-targeted defaults.
125
+ Consumers can override `--text-*` on `:root` (or any scope) without
126
+ touching DS internals. No value here goes below 0.65 effective alpha
127
+ for primary/secondary so stacked `/N` opacity is unnecessary. */
128
+ --color-text-primary: var(--text-primary, var(--midground));
129
+ --color-text-secondary: var(
130
+ --text-secondary,
131
+ color-mix(in srgb, var(--midground-base) 80%, transparent)
132
+ );
133
+ --color-text-tertiary: var(
134
+ --text-tertiary,
135
+ color-mix(in srgb, var(--midground-base) 65%, transparent)
136
+ );
137
+ --color-text-disabled: var(
138
+ --text-disabled,
139
+ color-mix(in srgb, var(--midground-base) 45%, transparent)
140
+ );
141
+ --color-text-on-accent: var(--text-on-accent, var(--background));
142
+ --color-text-display: var(--text-display, var(--midground));
143
+
144
+ --color-current: currentColor;
145
+ --color-transparent: transparent;
146
+
147
+ --gap-inherit: inherit;
148
+ --height-between-header-footer: max(
149
+ 400px,
150
+ calc(
151
+ 100dvh - 5rem -
152
+ (var(--header-height, 3.5rem) + var(--footer-height, 4.35rem))
153
+ )
154
+ );
155
+ }
156
+
157
+ :root {
158
+ --background: color-mix(in srgb, #170d02 100%, transparent);
159
+ --background-base: #170d02;
160
+ --background-alpha: 1;
161
+ --midground: color-mix(in srgb, #ffac02 100%, transparent);
162
+ --midground-base: #ffac02;
163
+ --midground-alpha: 1;
164
+ --foreground: color-mix(in srgb, #fff 100%, transparent);
165
+ --foreground-base: #fff;
166
+ --foreground-alpha: 1;
167
+ --font-sans: 'Collapse', sans-serif;
168
+ --font-mono: 'Courier Prime', monospace;
169
+ --font-rules-compressed: 'Rules Compressed', sans-serif;
170
+ --font-rules-expanded: 'Rules Expanded', sans-serif;
171
+ --font-mondwest: 'Mondwest', sans-serif;
172
+ --vsq: calc(0.5vw + 0.5vh);
173
+ }
174
+
175
+ @property --fit-captured-length {
176
+ syntax: '<length>';
177
+ initial-value: 0px;
178
+ inherits: true;
179
+ }
180
+
181
+ @utility font-compressed {
182
+ font-family: var(--font-rules-compressed);
183
+ }
184
+
185
+ @utility font-expanded {
186
+ font-family: var(--font-rules-expanded);
187
+ }
188
+
189
+ @utility font-mondwest {
190
+ font-family: var(--font-mondwest);
191
+ }
192
+
193
+ @utility font-courier {
194
+ font-family: 'Courier New', var(--font-mono), monospace;
195
+ }
196
+
197
+ /* Brand display style — opt-in uppercase + tracking. Purely typographic;
198
+ composes with any font utility (font-mondwest, font-compressed,
199
+ font-mono, font-courier) and any color utility. Use on chrome
200
+ (buttons, badges, nav section headings, page titles) where the brand
201
+ look is intentional. Body content should NOT use this utility.
202
+ Consumers wanting the canonical look apply `text-display font-mondwest`
203
+ together. */
204
+ @utility text-display {
205
+ text-transform: uppercase;
206
+ letter-spacing: 0.05em;
207
+ }
208
+
209
+ @utility font-serif {
210
+ font-family: 'Times New Roman', Times, serif;
211
+ }
212
+
213
+ @utility text-box-trim-none {
214
+ text-box-trim: none;
215
+ }
216
+
217
+ @utility text-box-trim-both {
218
+ text-box-trim: trim-both;
219
+ }
220
+
221
+ @utility text-box-trim-start {
222
+ text-box-trim: trim-start;
223
+ }
224
+
225
+ @utility text-box-trim-end {
226
+ text-box-trim: trim-end;
227
+ }
228
+
229
+ @utility grid-cols-auto-fit {
230
+ grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
231
+ }
232
+
233
+ @utility h-between-header-footer {
234
+ min-height: var(--height-between-header-footer);
235
+ }
236
+
237
+ @utility w-fill {
238
+ width: -webkit-fill-available;
239
+ }
240
+
241
+ @utility h-fill {
242
+ height: -webkit-fill-available;
243
+ }
244
+
245
+ @utility antialiased {
246
+ -webkit-font-smoothing: antialiased;
247
+ -moz-osx-font-smoothing: grayscale;
248
+ text-rendering: optimizeLegibility;
249
+ }
250
+
251
+ @utility underline-from-font {
252
+ text-decoration-skip-ink: auto;
253
+ text-underline-position: from-font;
254
+ }
255
+
256
+ @keyframes gradient-stroke {
257
+ 0% {
258
+ background-position: 15% 15%;
259
+ }
260
+
261
+ 100% {
262
+ background-position: 75% 75%;
263
+ }
264
+ }
265
+
266
+ .arc-border {
267
+ --_t: clamp(0%, (0.5 - var(--foreground-alpha, 1)) * 99900%, 100%);
268
+ --arc-c0: color-mix(in srgb, var(--foreground) var(--_t), transparent);
269
+ --arc-c1: var(--midground);
270
+ --arc-c2: var(--background);
271
+ --arc-angle: 160deg;
272
+ --arc-width: 1.25px;
273
+ --arc-inset: -2px;
274
+ --arc-duration: 2.23s;
275
+ --arc-gradient: linear-gradient(
276
+ var(--arc-angle),
277
+ transparent 0%,
278
+ var(--arc-c0) 15%,
279
+ var(--arc-c1) 20%,
280
+ var(--arc-c2) 25%,
281
+ transparent 35%,
282
+ transparent 40%,
283
+ var(--arc-c0) 55%,
284
+ var(--arc-c1) 60%,
285
+ var(--arc-c2) 65%,
286
+ transparent 75%,
287
+ transparent 80%,
288
+ var(--arc-c0) 95%,
289
+ var(--arc-c1) 100%
290
+ );
291
+
292
+ @apply pointer-events-none absolute z-[-1] overflow-hidden rounded-[inherit];
293
+
294
+ inset: var(--arc-inset);
295
+ padding: var(--arc-width);
296
+ mask:
297
+ linear-gradient(#000 0 0) content-box,
298
+ linear-gradient(#000 0 0);
299
+ -webkit-mask-composite: xor;
300
+ mask-composite: exclude;
301
+
302
+ &::before {
303
+ content: '';
304
+ @apply absolute inset-0 rounded-[inherit];
305
+ background: var(--arc-gradient);
306
+ background-size: 300% 300%;
307
+ animation: gradient-stroke var(--arc-duration) linear infinite;
308
+ }
309
+ }
310
+
311
+ @layer base {
312
+ * {
313
+ @apply antialiased;
314
+
315
+ scrollbar-width: thin;
316
+ scrollbar-color: transparent transparent;
317
+
318
+ &:hover {
319
+ scrollbar-color: color-mix(in srgb, var(--midground) 20%, transparent)
320
+ transparent;
321
+ }
322
+ }
323
+
324
+ ::-webkit-scrollbar {
325
+ width: 0.25rem;
326
+ height: 0.25rem;
327
+ }
328
+
329
+ ::-webkit-scrollbar-track,
330
+ ::-webkit-scrollbar-button {
331
+ display: none;
332
+ }
333
+
334
+ ::-webkit-scrollbar-thumb {
335
+ background: transparent;
336
+ border-radius: 1rem;
337
+ min-height: 1rem;
338
+ }
339
+
340
+ *:hover::-webkit-scrollbar-thumb {
341
+ background: color-mix(in srgb, var(--midground) 20%, transparent);
342
+ }
343
+
344
+ html,
345
+ body {
346
+ scrollbar-color: color-mix(in srgb, var(--midground) 65%, transparent)
347
+ transparent;
348
+ }
349
+
350
+ html:hover,
351
+ body:hover {
352
+ scrollbar-color: color-mix(in srgb, var(--midground) 80%, transparent)
353
+ transparent;
354
+ }
355
+
356
+ html::-webkit-scrollbar-thumb,
357
+ body::-webkit-scrollbar-thumb {
358
+ background: color-mix(in srgb, var(--midground) 65%, transparent);
359
+ }
360
+
361
+ html:hover::-webkit-scrollbar-thumb,
362
+ body:hover::-webkit-scrollbar-thumb {
363
+ background: color-mix(in srgb, var(--midground) 80%, transparent);
364
+ }
365
+
366
+ html {
367
+ font-size: clamp(14px, calc(14px + 2 * ((100vw - 1400px) / 400)), 18px);
368
+ }
369
+
370
+ body {
371
+ @apply bg-background text-foreground;
372
+ }
373
+
374
+ .underline {
375
+ @apply underline-from-font underline decoration-current/25 decoration-solid decoration-auto underline-offset-1 transition-[text-decoration-color] hover:decoration-current;
376
+ }
377
+
378
+ *::selection,
379
+ code {
380
+ background: var(--selection-bg, var(--midground));
381
+ @apply text-background;
382
+ }
383
+ }