@hewnui/themes 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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -2
  3. package/dist/authoring/css-vars.d.ts +10 -0
  4. package/dist/authoring/css-vars.js +83 -0
  5. package/dist/authoring/derive.d.ts +9 -0
  6. package/dist/authoring/derive.js +79 -0
  7. package/dist/authoring/export-css.d.ts +8 -0
  8. package/dist/authoring/export-css.js +60 -0
  9. package/dist/authoring/export-design-md.d.ts +5 -0
  10. package/dist/authoring/export-design-md.js +113 -0
  11. package/dist/authoring/export-dtcg.d.ts +6 -0
  12. package/dist/authoring/export-dtcg.js +85 -0
  13. package/dist/authoring/export-figma.d.ts +27 -0
  14. package/dist/authoring/export-figma.js +76 -0
  15. package/dist/authoring/export-formats.d.ts +27 -0
  16. package/dist/authoring/export-formats.js +62 -0
  17. package/dist/authoring/export-skill.d.ts +5 -0
  18. package/dist/authoring/export-skill.js +75 -0
  19. package/dist/authoring/export-sticker.d.ts +6 -0
  20. package/dist/authoring/export-sticker.js +54 -0
  21. package/dist/authoring/export-style-dictionary.d.ts +3 -0
  22. package/dist/authoring/export-style-dictionary.js +52 -0
  23. package/dist/authoring/figma-kit.d.ts +16 -0
  24. package/dist/authoring/figma-kit.js +41 -0
  25. package/dist/authoring/index.d.ts +21 -0
  26. package/dist/authoring/index.js +18 -0
  27. package/dist/authoring/oklch.d.ts +11 -0
  28. package/dist/authoring/oklch.js +116 -0
  29. package/dist/authoring/override-map.d.ts +9 -0
  30. package/dist/authoring/override-map.js +150 -0
  31. package/dist/authoring/pack-def.d.ts +7 -0
  32. package/dist/authoring/pack-def.js +3 -0
  33. package/dist/authoring/pack-meta.d.ts +10 -0
  34. package/dist/authoring/pack-meta.js +58 -0
  35. package/dist/authoring/packs-dual.d.ts +129 -0
  36. package/dist/authoring/packs-dual.js +130 -0
  37. package/dist/authoring/packs-single.d.ts +87 -0
  38. package/dist/authoring/packs-single.js +88 -0
  39. package/dist/authoring/packs.d.ts +8 -0
  40. package/dist/authoring/packs.js +26 -0
  41. package/dist/authoring/pro-apply.d.ts +8 -0
  42. package/dist/authoring/pro-apply.js +107 -0
  43. package/dist/authoring/propose.d.ts +21 -0
  44. package/dist/authoring/propose.js +162 -0
  45. package/dist/authoring/ramps.d.ts +13 -0
  46. package/dist/authoring/ramps.js +40 -0
  47. package/dist/authoring/status-ramps.d.ts +13 -0
  48. package/dist/authoring/status-ramps.js +76 -0
  49. package/dist/authoring/token-entries.d.ts +10 -0
  50. package/dist/authoring/token-entries.js +52 -0
  51. package/dist/authoring/types.d.ts +110 -0
  52. package/dist/authoring/types.js +11 -0
  53. package/exports/clay/DESIGN.md +138 -0
  54. package/exports/clay/SKILL.md +94 -0
  55. package/exports/clay/theme.css +37 -0
  56. package/exports/clay/tokens.dtcg.json +200 -0
  57. package/exports/dune/DESIGN.md +138 -0
  58. package/exports/dune/SKILL.md +94 -0
  59. package/exports/dune/theme.css +37 -0
  60. package/exports/dune/tokens.dtcg.json +200 -0
  61. package/exports/ember/DESIGN.md +138 -0
  62. package/exports/ember/SKILL.md +94 -0
  63. package/exports/ember/theme.css +37 -0
  64. package/exports/ember/tokens.dtcg.json +200 -0
  65. package/exports/forest/DESIGN.md +138 -0
  66. package/exports/forest/SKILL.md +94 -0
  67. package/exports/forest/theme.css +67 -0
  68. package/exports/forest/tokens.dtcg.json +348 -0
  69. package/exports/graphite/DESIGN.md +138 -0
  70. package/exports/graphite/SKILL.md +94 -0
  71. package/exports/graphite/theme.css +67 -0
  72. package/exports/graphite/tokens.dtcg.json +348 -0
  73. package/exports/index.json +45 -0
  74. package/exports/tide/DESIGN.md +138 -0
  75. package/exports/tide/SKILL.md +94 -0
  76. package/exports/tide/theme.css +67 -0
  77. package/exports/tide/tokens.dtcg.json +348 -0
  78. package/figma/README.md +16 -0
  79. package/figma/hewn.tokens.json +1308 -0
  80. package/figma/sticker-sheet.svg +93 -0
  81. package/package.json +98 -4
  82. package/src/authoring/css-vars.ts +92 -0
  83. package/src/authoring/derive.ts +106 -0
  84. package/src/authoring/export-css.ts +86 -0
  85. package/src/authoring/export-design-md.ts +134 -0
  86. package/src/authoring/export-dtcg.ts +116 -0
  87. package/src/authoring/export-figma.ts +109 -0
  88. package/src/authoring/export-formats.ts +101 -0
  89. package/src/authoring/export-skill.ts +93 -0
  90. package/src/authoring/export-sticker.ts +60 -0
  91. package/src/authoring/export-style-dictionary.ts +67 -0
  92. package/src/authoring/figma-kit.ts +60 -0
  93. package/src/authoring/index.ts +61 -0
  94. package/src/authoring/oklch.ts +137 -0
  95. package/src/authoring/override-map.ts +191 -0
  96. package/src/authoring/pack-def.ts +11 -0
  97. package/src/authoring/pack-meta.ts +66 -0
  98. package/src/authoring/packs-dual.ts +131 -0
  99. package/src/authoring/packs-single.ts +89 -0
  100. package/src/authoring/packs.ts +43 -0
  101. package/src/authoring/pro-apply.ts +156 -0
  102. package/src/authoring/propose.ts +181 -0
  103. package/src/authoring/ramps.ts +62 -0
  104. package/src/authoring/status-ramps.ts +98 -0
  105. package/src/authoring/token-entries.ts +59 -0
  106. package/src/authoring/types.ts +133 -0
  107. package/src/glass-buttons.css +46 -0
  108. package/src/glass.css +266 -0
  109. package/src/motion.css +60 -0
  110. package/src/packs/clay.css +45 -0
  111. package/src/packs/dune.css +45 -0
  112. package/src/packs/ember.css +45 -0
  113. package/src/packs/forest.css +80 -0
  114. package/src/packs/graphite.css +79 -0
  115. package/src/packs/tide.css +79 -0
  116. package/src/radius.css +25 -0
  117. package/src/tokens.css +104 -0
@@ -0,0 +1,46 @@
1
+ html[data-material="glass"] [data-kp-control="button-primary"] {
2
+ background: linear-gradient(
3
+ 180deg,
4
+ color-mix(in oklch, var(--kp-accent) 92%, white 10%),
5
+ var(--kp-accent)
6
+ );
7
+ box-shadow:
8
+ 0 1px 2px oklch(0 0 0 / 16%),
9
+ 0 10px 24px -12px color-mix(in oklch, var(--kp-accent) 58%, transparent),
10
+ inset 0 1px 0 oklch(1 0 0 / 36%),
11
+ inset 0 0 0 1px oklch(1 0 0 / 8%);
12
+ }
13
+
14
+ html[data-material="glass"] [data-kp-control="button-secondary"] {
15
+ background: color-mix(in oklch, var(--kp-surface) 48%, transparent);
16
+ border-color: color-mix(in oklch, var(--kp-foreground) 18%, transparent);
17
+ box-shadow:
18
+ 0 1px 2px oklch(0 0 0 / 10%),
19
+ inset 0 1px 0 oklch(1 0 0 / 42%),
20
+ inset 0 0 0 1px oklch(1 0 0 / 6%);
21
+ backdrop-filter: blur(12px) saturate(1.25);
22
+ -webkit-backdrop-filter: blur(12px) saturate(1.25);
23
+ }
24
+
25
+ html[data-material="glass"] [data-kp-control="button-ghost"] {
26
+ background: color-mix(in oklch, var(--kp-muted) 28%, transparent);
27
+ box-shadow: inset 0 1px 0 oklch(1 0 0 / 18%);
28
+ backdrop-filter: blur(8px) saturate(1.15);
29
+ -webkit-backdrop-filter: blur(8px) saturate(1.15);
30
+ }
31
+
32
+ html[data-material="glass"] [data-kp-control="button-ghost"]:hover {
33
+ background: color-mix(in oklch, var(--kp-muted) 48%, transparent);
34
+ }
35
+
36
+ html[data-material="glass"] [data-kp-control="button-danger"] {
37
+ background: linear-gradient(
38
+ 180deg,
39
+ color-mix(in oklch, var(--kp-danger) 90%, white 8%),
40
+ var(--kp-danger)
41
+ );
42
+ box-shadow:
43
+ 0 1px 2px oklch(0 0 0 / 16%),
44
+ 0 10px 24px -12px color-mix(in oklch, var(--kp-danger) 52%, transparent),
45
+ inset 0 1px 0 oklch(1 0 0 / 28%);
46
+ }
package/src/glass.css ADDED
@@ -0,0 +1,266 @@
1
+ /* Material surfaces — specificity must beat Tailwind bg-* utilities. */
2
+
3
+ html[data-material="glass"] {
4
+ --kp-glass-blur: 22px;
5
+ --kp-glass-saturate: 1.35;
6
+ --kp-glass-fill: color-mix(in oklch, var(--kp-surface) 46%, transparent);
7
+ --kp-glass-sheen: linear-gradient(
8
+ 148deg,
9
+ color-mix(in oklch, var(--kp-glass-tint) 70%, white 8%),
10
+ color-mix(in oklch, var(--kp-surface) 22%, transparent) 42%,
11
+ color-mix(in oklch, var(--kp-surface) 38%, transparent)
12
+ );
13
+ --kp-glass-border: color-mix(in oklch, var(--kp-foreground) 16%, transparent);
14
+ }
15
+
16
+ html[data-material="glass"] body {
17
+ background-color: var(--kp-background);
18
+ background-image:
19
+ radial-gradient(
20
+ ellipse 70% 50% at 12% -8%,
21
+ var(--kp-glass-tint),
22
+ transparent 58%
23
+ ),
24
+ radial-gradient(
25
+ ellipse 55% 45% at 92% 18%,
26
+ color-mix(in oklch, var(--kp-glass-tint) 72%, transparent),
27
+ transparent 52%
28
+ ),
29
+ radial-gradient(
30
+ ellipse 40% 35% at 48% 88%,
31
+ color-mix(in oklch, var(--kp-accent) 14%, transparent),
32
+ transparent 60%
33
+ );
34
+ background-attachment: fixed;
35
+ }
36
+
37
+ html[data-material="glass"] [data-kp-surface] {
38
+ background-color: var(--kp-glass-fill) !important;
39
+ background-image: var(--kp-glass-sheen) !important;
40
+ border-color: var(--kp-glass-border) !important;
41
+ box-shadow:
42
+ inset 0 1px 0 oklch(1 0 0 / 38%),
43
+ inset 0 0 0 1px oklch(1 0 0 / 6%),
44
+ var(--kp-shadow-surface);
45
+ }
46
+
47
+ /*
48
+ Flushed fields stay underline-only under glass material.
49
+ Outline / filled / glass variants keep panel glass via data-kp-surface.
50
+ */
51
+ html[data-material="glass"] [data-kp-field="flushed"] {
52
+ background-color: transparent !important;
53
+ background-image: none !important;
54
+ border-top-color: transparent !important;
55
+ border-left-color: transparent !important;
56
+ border-right-color: transparent !important;
57
+ border-bottom-color: color-mix(
58
+ in oklch,
59
+ var(--kp-foreground) 34%,
60
+ transparent
61
+ ) !important;
62
+ box-shadow: none !important;
63
+ backdrop-filter: none !important;
64
+ -webkit-backdrop-filter: none !important;
65
+ }
66
+
67
+ html[data-material="glass"] [data-kp-field="flushed"]:focus-within,
68
+ html[data-material="glass"] [data-kp-field="flushed"]:focus-visible {
69
+ border-bottom-color: var(--kp-ring) !important;
70
+ box-shadow: 0 1px 0 0
71
+ color-mix(in oklch, var(--kp-ring) 55%, transparent) !important;
72
+ }
73
+
74
+ /* Field-scale glass: slightly denser fill than large panels for readability. */
75
+ html[data-material="glass"] input[data-kp-surface],
76
+ html[data-material="glass"] textarea[data-kp-surface],
77
+ html[data-material="glass"] button[data-kp-surface],
78
+ html[data-material="glass"] [role="group"][data-kp-surface] {
79
+ --kp-glass-fill: color-mix(in oklch, var(--kp-surface) 58%, transparent);
80
+ }
81
+
82
+ /* Upload zone keeps dashed geometry under glass; denser fill for readability. */
83
+ html[data-material="glass"] [data-kp-upload="zone"] {
84
+ --kp-glass-fill: color-mix(in oklch, var(--kp-surface) 54%, transparent);
85
+ border-style: dashed !important;
86
+ }
87
+
88
+ html[data-material="glass"] [data-kp-upload="zone"][data-drop-target] {
89
+ --kp-glass-fill: color-mix(in oklch, var(--kp-accent) 16%, var(--kp-surface));
90
+ border-style: solid !important;
91
+ border-color: var(--kp-accent) !important;
92
+ }
93
+
94
+ html[data-material="glass"] [data-kp-upload="row"] {
95
+ --kp-glass-fill: color-mix(in oklch, var(--kp-surface) 62%, transparent);
96
+ }
97
+
98
+ @supports (backdrop-filter: blur(1px)) {
99
+ html[data-material="glass"] [data-kp-surface] {
100
+ backdrop-filter: blur(var(--kp-glass-blur))
101
+ saturate(var(--kp-glass-saturate));
102
+ -webkit-backdrop-filter: blur(var(--kp-glass-blur))
103
+ saturate(var(--kp-glass-saturate));
104
+ }
105
+ }
106
+
107
+ /* Interactive controls keep their own states — never panel-glass. */
108
+ html[data-material="glass"] [data-kp-control="switch"] {
109
+ background-color: color-mix(in oklch, var(--kp-muted) 55%, transparent);
110
+ border-color: color-mix(in oklch, var(--kp-foreground) 24%, transparent);
111
+ box-shadow:
112
+ inset 0 1px 2px oklch(0 0 0 / 16%),
113
+ inset 0 -1px 0 oklch(1 0 0 / 22%),
114
+ inset 0 0 0 1px oklch(1 0 0 / 10%);
115
+ backdrop-filter: blur(10px) saturate(1.25);
116
+ -webkit-backdrop-filter: blur(10px) saturate(1.25);
117
+ }
118
+
119
+ html[data-material="glass"]
120
+ .group[data-selected]
121
+ > [data-kp-control="switch"] {
122
+ background-color: color-mix(in oklch, var(--kp-accent) 88%, white 6%);
123
+ border-color: color-mix(in oklch, var(--kp-accent) 80%, white 8%);
124
+ box-shadow:
125
+ inset 0 1px 0 oklch(1 0 0 / 34%),
126
+ 0 0 0 3px color-mix(in oklch, var(--kp-accent) 26%, transparent),
127
+ 0 10px 22px -12px color-mix(in oklch, var(--kp-accent) 60%, transparent);
128
+ backdrop-filter: blur(8px) saturate(1.35);
129
+ -webkit-backdrop-filter: blur(8px) saturate(1.35);
130
+ }
131
+
132
+ html[data-material="glass"] [data-kp-control="switch-thumb"] {
133
+ background: linear-gradient(
134
+ 180deg,
135
+ oklch(1 0 0 / 96%),
136
+ color-mix(in oklch, var(--kp-surface-raised) 88%, white)
137
+ );
138
+ box-shadow:
139
+ 0 1px 2px oklch(0 0 0 / 24%),
140
+ 0 6px 14px oklch(0 0 0 / 14%),
141
+ inset 0 1px 0 oklch(1 0 0 / 90%);
142
+ }
143
+
144
+ html[data-material="glass"] [data-kp-control="checkbox"] {
145
+ background-color: color-mix(in oklch, var(--kp-surface) 58%, transparent);
146
+ border-color: color-mix(in oklch, var(--kp-foreground) 26%, transparent);
147
+ box-shadow:
148
+ inset 0 1px 0 oklch(1 0 0 / 45%),
149
+ 0 1px 2px oklch(0 0 0 / 10%);
150
+ backdrop-filter: blur(8px) saturate(1.2);
151
+ -webkit-backdrop-filter: blur(8px) saturate(1.2);
152
+ }
153
+
154
+ html[data-material="glass"]
155
+ .group[data-selected]
156
+ > [data-kp-control="checkbox"] {
157
+ background-color: var(--kp-accent);
158
+ border-color: var(--kp-accent);
159
+ box-shadow:
160
+ inset 0 1px 0 oklch(1 0 0 / 32%),
161
+ 0 0 0 3px color-mix(in oklch, var(--kp-accent) 22%, transparent);
162
+ backdrop-filter: none;
163
+ -webkit-backdrop-filter: none;
164
+ }
165
+
166
+ html[data-material="glass"] [data-kp-control="radio"] {
167
+ background-color: color-mix(in oklch, var(--kp-surface) 58%, transparent);
168
+ border-color: color-mix(in oklch, var(--kp-foreground) 34%, transparent);
169
+ box-shadow:
170
+ inset 0 1px 0 oklch(1 0 0 / 42%),
171
+ inset 0 0 0 1px oklch(1 0 0 / 6%);
172
+ backdrop-filter: blur(8px) saturate(1.2);
173
+ -webkit-backdrop-filter: blur(8px) saturate(1.2);
174
+ }
175
+
176
+ html[data-material="glass"]
177
+ .group[data-selected]
178
+ > [data-kp-control="radio"] {
179
+ background-color: var(--kp-accent);
180
+ border-color: var(--kp-accent);
181
+ box-shadow: inset 0 1px 0 oklch(1 0 0 / 34%);
182
+ backdrop-filter: none;
183
+ -webkit-backdrop-filter: none;
184
+ }
185
+
186
+ html[data-material="glass"] [data-kp-control="tabs"] {
187
+ background-color: color-mix(in oklch, var(--kp-muted) 48%, transparent);
188
+ border-color: color-mix(in oklch, var(--kp-foreground) 14%, transparent);
189
+ box-shadow: inset 0 1px 2px oklch(0 0 0 / 10%);
190
+ backdrop-filter: blur(12px) saturate(1.2);
191
+ -webkit-backdrop-filter: blur(12px) saturate(1.2);
192
+ }
193
+
194
+ /* Toasts: denser frosted panel + tone sheen (not generic data-kp-surface). */
195
+ html[data-material="glass"] [data-kp-control="toast"] {
196
+ background-color: color-mix(
197
+ in oklch,
198
+ var(--kp-surface-raised) 62%,
199
+ transparent
200
+ ) !important;
201
+ background-image: linear-gradient(
202
+ 152deg,
203
+ color-mix(in oklch, var(--toast-tone) 22%, transparent),
204
+ color-mix(in oklch, var(--kp-glass-tint) 28%, transparent) 38%,
205
+ color-mix(in oklch, var(--kp-surface-raised) 35%, transparent) 72%
206
+ ) !important;
207
+ border-color: color-mix(
208
+ in oklch,
209
+ var(--toast-tone) 34%,
210
+ var(--kp-glass-border)
211
+ ) !important;
212
+ box-shadow:
213
+ inset 0 1px 0 oklch(1 0 0 / 42%),
214
+ inset 0 0 0 1px oklch(1 0 0 / 8%),
215
+ 0 18px 40px -24px oklch(0 0 0 / 45%),
216
+ var(--kp-shadow-surface);
217
+ backdrop-filter: blur(18px) saturate(1.35);
218
+ -webkit-backdrop-filter: blur(18px) saturate(1.35);
219
+ }
220
+
221
+ html[data-material="glass"] [data-kp-control="toast"] [data-kp-toast="icon"] {
222
+ background-color: color-mix(
223
+ in oklch,
224
+ var(--toast-tone) 22%,
225
+ transparent
226
+ );
227
+ box-shadow:
228
+ inset 0 1px 0 oklch(1 0 0 / 38%),
229
+ inset 0 0 0 1px color-mix(in oklch, var(--toast-tone) 28%, transparent);
230
+ backdrop-filter: blur(8px) saturate(1.25);
231
+ -webkit-backdrop-filter: blur(8px) saturate(1.25);
232
+ }
233
+
234
+ html[data-material="glass"] [data-kp-control="tab-indicator"] {
235
+ background: color-mix(in oklch, var(--kp-surface-raised) 72%, transparent);
236
+ box-shadow:
237
+ 0 1px 2px oklch(0 0 0 / 12%),
238
+ 0 8px 20px -12px oklch(0 0 0 / 30%),
239
+ inset 0 1px 0 oklch(1 0 0 / 55%);
240
+ backdrop-filter: blur(10px) saturate(1.25);
241
+ -webkit-backdrop-filter: blur(10px) saturate(1.25);
242
+ }
243
+
244
+ html[data-mode="dark"][data-material="glass"] [data-kp-surface] {
245
+ --kp-glass-fill: color-mix(in oklch, var(--kp-surface) 52%, transparent);
246
+ box-shadow:
247
+ inset 0 1px 0 oklch(1 0 0 / 12%),
248
+ inset 0 0 0 1px oklch(1 0 0 / 5%),
249
+ var(--kp-shadow-surface);
250
+ }
251
+
252
+ html[data-theme="ember"][data-material="glass"] {
253
+ --kp-glass-blur: 24px;
254
+ --kp-glass-saturate: 1.42;
255
+ }
256
+
257
+ html[data-theme="dune"][data-material="glass"],
258
+ html[data-theme="clay"][data-material="glass"] {
259
+ --kp-glass-blur: 20px;
260
+ --kp-glass-saturate: 1.22;
261
+ }
262
+
263
+ html[data-theme="graphite"][data-material="glass"] {
264
+ --kp-glass-blur: 18px;
265
+ --kp-glass-saturate: 1.15;
266
+ }
package/src/motion.css ADDED
@@ -0,0 +1,60 @@
1
+ /* Shared motion scale. Packs still set --kp-motion-duration / spring
2
+ character; these tokens are the free-library contract for CSS transitions. */
3
+
4
+ :root {
5
+ --kp-motion-duration-instant: 0ms;
6
+ --kp-motion-duration-fast: 120ms;
7
+ --kp-motion-duration-slow: 360ms;
8
+ --kp-motion-ease-standard: cubic-bezier(0.2, 0, 0, 1);
9
+ --kp-motion-ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
10
+ --kp-motion-ease-exit: cubic-bezier(0.4, 0, 1, 1);
11
+ --kp-motion-ease-linear: linear;
12
+ --kp-motion-ease: var(--kp-motion-ease-standard);
13
+ }
14
+
15
+ /* Pack default when no theme pack has applied yet. */
16
+ :root {
17
+ --kp-motion-duration: 200ms;
18
+ --kp-motion-stiffness: 360;
19
+ --kp-motion-damping: 28;
20
+ }
21
+
22
+ /*
23
+ Mode attribute is written by MotionProvider (effective mode).
24
+ reduced/off zero timing tokens so CSS-only surfaces collapse safely.
25
+ Transform/layout animation remains forbidden in sources (see check:motion).
26
+ */
27
+ html[data-motion="reduced"],
28
+ html[data-motion="off"] {
29
+ --kp-motion-duration-instant: 0ms;
30
+ --kp-motion-duration-fast: 0ms;
31
+ --kp-motion-duration: 0ms;
32
+ --kp-motion-duration-slow: 0ms;
33
+ }
34
+
35
+ html[data-motion="reduced"] .kp-spinner,
36
+ html[data-motion="off"] .kp-spinner,
37
+ html[data-motion="reduced"] .kp-progress-indeterminate,
38
+ html[data-motion="off"] .kp-progress-indeterminate,
39
+ html[data-motion="reduced"] [data-kp-control="skeleton"],
40
+ html[data-motion="off"] [data-kp-control="skeleton"] {
41
+ animation: none;
42
+ }
43
+
44
+ html[data-motion="reduced"] .kp-spinner,
45
+ html[data-motion="off"] .kp-spinner {
46
+ opacity: 0.72;
47
+ border-color: color-mix(in oklch, currentColor 35%, transparent);
48
+ border-top-color: currentColor;
49
+ }
50
+
51
+ html[data-motion="reduced"] .kp-progress-indeterminate,
52
+ html[data-motion="off"] .kp-progress-indeterminate {
53
+ opacity: 0.7;
54
+ left: 33%;
55
+ }
56
+
57
+ html[data-motion="reduced"] [data-kp-control="skeleton"],
58
+ html[data-motion="off"] [data-kp-control="skeleton"] {
59
+ opacity: 0.85;
60
+ }
@@ -0,0 +1,45 @@
1
+ [data-theme="clay"][data-mode="light"] {
2
+ color-scheme: light;
3
+ --kp-background: oklch(0.955 0.02 55);
4
+ --kp-foreground: oklch(0.27 0.045 40);
5
+ --kp-surface: oklch(0.98 0.012 50);
6
+ --kp-surface-raised: oklch(0.995 0.006 45);
7
+ --kp-muted: oklch(0.915 0.025 50);
8
+ --kp-muted-foreground: oklch(0.5 0.045 40);
9
+ --kp-accent: oklch(0.55 0.12 40);
10
+ --kp-accent-foreground: oklch(0.98 0.01 50);
11
+ --kp-border: oklch(0.4 0.05 40 / 16%);
12
+ --kp-ring: oklch(0.6 0.13 40);
13
+ --kp-danger: oklch(0.54 0.17 28);
14
+ --kp-danger-foreground: oklch(0.985 0.01 28);
15
+ --kp-danger-subtle: oklch(0.94 0.035 28);
16
+ --kp-danger-border: oklch(0.56 0.12 28 / 40%);
17
+ --kp-success: oklch(0.55 0.15 145);
18
+ --kp-success-foreground: oklch(0.985 0.01 145);
19
+ --kp-success-subtle: oklch(0.94 0.035 145);
20
+ --kp-success-border: oklch(0.55 0.12 145 / 40%);
21
+ --kp-warning: oklch(0.75 0.14 55);
22
+ --kp-warning-foreground: oklch(0.25 0.05 55);
23
+ --kp-warning-subtle: oklch(0.94 0.04 55);
24
+ --kp-warning-border: oklch(0.72 0.12 55 / 40%);
25
+ --kp-info: oklch(0.52 0.11 230);
26
+ --kp-info-foreground: oklch(0.985 0.01 230);
27
+ --kp-info-subtle: oklch(0.94 0.03 230);
28
+ --kp-info-border: oklch(0.52 0.09 230 / 40%);
29
+ --kp-glass-tint: oklch(0.74 0.1 45 / 28%);
30
+ --kp-radius-sm: 0.5rem;
31
+ --kp-radius-md: 0.8rem;
32
+ --kp-radius-lg: 1.05rem;
33
+ --kp-radius-panel: 1.05rem;
34
+ --kp-density: 1;
35
+ --kp-motion-duration: 270ms;
36
+ --kp-motion-stiffness: 320;
37
+ --kp-motion-damping: 27;
38
+ --kp-shadow-surface:
39
+ 0 1px 2px oklch(0.32 0.05 40 / 6%),
40
+ 0 18px 42px -26px oklch(0.42 0.06 45 / 28%);
41
+ --kp-font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui,
42
+ sans-serif;
43
+ --kp-font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
44
+ --kp-font-display: var(--font-space-grotesk, "Space Grotesk"), var(--kp-font-sans);
45
+ }
@@ -0,0 +1,45 @@
1
+ [data-theme="dune"][data-mode="light"] {
2
+ color-scheme: light;
3
+ --kp-background: oklch(0.96 0.02 85);
4
+ --kp-foreground: oklch(0.28 0.04 65);
5
+ --kp-surface: oklch(0.985 0.012 90);
6
+ --kp-surface-raised: oklch(0.995 0.006 95);
7
+ --kp-muted: oklch(0.92 0.025 85);
8
+ --kp-muted-foreground: oklch(0.5 0.04 70);
9
+ --kp-accent: oklch(0.58 0.11 70);
10
+ --kp-accent-foreground: oklch(0.98 0.01 90);
11
+ --kp-border: oklch(0.4 0.04 70 / 16%);
12
+ --kp-ring: oklch(0.62 0.12 70);
13
+ --kp-danger: oklch(0.55 0.16 30);
14
+ --kp-danger-foreground: oklch(0.985 0.01 30);
15
+ --kp-danger-subtle: oklch(0.94 0.035 30);
16
+ --kp-danger-border: oklch(0.56 0.12 30 / 40%);
17
+ --kp-success: oklch(0.55 0.15 140);
18
+ --kp-success-foreground: oklch(0.985 0.01 140);
19
+ --kp-success-subtle: oklch(0.94 0.035 140);
20
+ --kp-success-border: oklch(0.55 0.12 140 / 40%);
21
+ --kp-warning: oklch(0.75 0.14 70);
22
+ --kp-warning-foreground: oklch(0.25 0.05 70);
23
+ --kp-warning-subtle: oklch(0.94 0.04 70);
24
+ --kp-warning-border: oklch(0.72 0.12 70 / 40%);
25
+ --kp-info: oklch(0.52 0.11 230);
26
+ --kp-info-foreground: oklch(0.985 0.01 230);
27
+ --kp-info-subtle: oklch(0.94 0.03 230);
28
+ --kp-info-border: oklch(0.52 0.09 230 / 40%);
29
+ --kp-glass-tint: oklch(0.78 0.09 80 / 30%);
30
+ --kp-radius-sm: 0.55rem;
31
+ --kp-radius-md: 0.85rem;
32
+ --kp-radius-lg: 1.15rem;
33
+ --kp-radius-panel: 1.15rem;
34
+ --kp-density: 0.95;
35
+ --kp-motion-duration: 280ms;
36
+ --kp-motion-stiffness: 300;
37
+ --kp-motion-damping: 26;
38
+ --kp-shadow-surface:
39
+ 0 1px 2px oklch(0.35 0.04 70 / 6%),
40
+ 0 18px 44px -26px oklch(0.45 0.05 75 / 26%);
41
+ --kp-font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui,
42
+ sans-serif;
43
+ --kp-font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
44
+ --kp-font-display: var(--font-space-grotesk, "Space Grotesk"), var(--kp-font-sans);
45
+ }
@@ -0,0 +1,45 @@
1
+ [data-theme="ember"][data-mode="dark"] {
2
+ color-scheme: dark;
3
+ --kp-background: oklch(0.17 0.02 40);
4
+ --kp-foreground: oklch(0.93 0.02 70);
5
+ --kp-surface: oklch(0.21 0.025 40);
6
+ --kp-surface-raised: oklch(0.255 0.03 42);
7
+ --kp-muted: oklch(0.275 0.028 40);
8
+ --kp-muted-foreground: oklch(0.72 0.03 60);
9
+ --kp-accent: oklch(0.7 0.15 50);
10
+ --kp-accent-foreground: oklch(0.985 0.015 50);
11
+ --kp-border: oklch(0.84 0.03 60 / 14%);
12
+ --kp-ring: oklch(0.7 0.15 50);
13
+ --kp-danger: oklch(0.66 0.17 28);
14
+ --kp-danger-foreground: oklch(0.985 0.01 28);
15
+ --kp-danger-subtle: oklch(0.32 0.05 28);
16
+ --kp-danger-border: oklch(0.72 0.1 28 / 40%);
17
+ --kp-success: oklch(0.72 0.14 145);
18
+ --kp-success-foreground: oklch(0.985 0.01 145);
19
+ --kp-success-subtle: oklch(0.32 0.045 145);
20
+ --kp-success-border: oklch(0.72 0.1 145 / 40%);
21
+ --kp-warning: oklch(0.78 0.12 70);
22
+ --kp-warning-foreground: oklch(0.22 0.04 70);
23
+ --kp-warning-subtle: oklch(0.34 0.04 70);
24
+ --kp-warning-border: oklch(0.78 0.1 70 / 40%);
25
+ --kp-info: oklch(0.72 0.1 230);
26
+ --kp-info-foreground: oklch(0.985 0.01 230);
27
+ --kp-info-subtle: oklch(0.32 0.035 230);
28
+ --kp-info-border: oklch(0.72 0.08 230 / 40%);
29
+ --kp-glass-tint: oklch(0.58 0.15 50 / 28%);
30
+ --kp-radius-sm: 0.45rem;
31
+ --kp-radius-md: 0.7rem;
32
+ --kp-radius-lg: 0.95rem;
33
+ --kp-radius-panel: 0.95rem;
34
+ --kp-density: 1.05;
35
+ --kp-motion-duration: 230ms;
36
+ --kp-motion-stiffness: 400;
37
+ --kp-motion-damping: 28;
38
+ --kp-shadow-surface:
39
+ 0 1px 2px oklch(0.08 0.03 40 / 40%),
40
+ 0 22px 48px -28px oklch(0.12 0.05 45 / 80%);
41
+ --kp-font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui,
42
+ sans-serif;
43
+ --kp-font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
44
+ --kp-font-display: var(--font-space-grotesk, "Space Grotesk"), var(--kp-font-sans);
45
+ }
@@ -0,0 +1,80 @@
1
+ :root,
2
+ [data-theme="forest"][data-mode="light"] {
3
+ color-scheme: light;
4
+ --kp-background: oklch(0.972 0.012 145);
5
+ --kp-foreground: oklch(0.225 0.028 145);
6
+ --kp-surface: oklch(0.995 0.004 145);
7
+ --kp-surface-raised: oklch(1 0 0);
8
+ --kp-muted: oklch(0.925 0.022 145);
9
+ --kp-muted-foreground: oklch(0.49 0.035 145);
10
+ --kp-accent: oklch(0.49 0.105 148);
11
+ --kp-accent-foreground: oklch(0.985 0.008 145);
12
+ --kp-border: oklch(0.36 0.035 145 / 14%);
13
+ --kp-ring: oklch(0.55 0.12 148);
14
+ --kp-danger: oklch(0.56 0.17 27);
15
+ --kp-danger-foreground: oklch(0.985 0.01 27);
16
+ --kp-danger-subtle: oklch(0.94 0.035 27);
17
+ --kp-danger-border: oklch(0.56 0.12 27 / 40%);
18
+ --kp-success: oklch(0.55 0.15 148);
19
+ --kp-success-foreground: oklch(0.985 0.01 148);
20
+ --kp-success-subtle: oklch(0.94 0.035 148);
21
+ --kp-success-border: oklch(0.55 0.12 148 / 40%);
22
+ --kp-warning: oklch(0.75 0.14 78);
23
+ --kp-warning-foreground: oklch(0.25 0.05 78);
24
+ --kp-warning-subtle: oklch(0.94 0.04 78);
25
+ --kp-warning-border: oklch(0.72 0.12 78 / 40%);
26
+ --kp-info: oklch(0.52 0.11 220);
27
+ --kp-info-foreground: oklch(0.985 0.01 220);
28
+ --kp-info-subtle: oklch(0.94 0.03 220);
29
+ --kp-info-border: oklch(0.52 0.09 220 / 40%);
30
+ --kp-glass-tint: oklch(0.72 0.12 148 / 28%);
31
+ --kp-radius-sm: 0.5rem;
32
+ --kp-radius-md: 0.75rem;
33
+ --kp-radius-lg: 1rem;
34
+ --kp-radius-panel: 1rem;
35
+ --kp-density: 1;
36
+ --kp-motion-duration: 260ms;
37
+ --kp-motion-stiffness: 360;
38
+ --kp-motion-damping: 28;
39
+ --kp-shadow-surface:
40
+ 0 1px 2px oklch(0.2 0.03 145 / 5%),
41
+ 0 16px 40px -28px oklch(0.2 0.04 145 / 32%);
42
+ --kp-font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui,
43
+ sans-serif;
44
+ --kp-font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
45
+ --kp-font-display: var(--font-space-grotesk, "Space Grotesk"), var(--kp-font-sans);
46
+ }
47
+
48
+ [data-theme="forest"][data-mode="dark"] {
49
+ color-scheme: dark;
50
+ --kp-background: oklch(0.185 0.018 145);
51
+ --kp-foreground: oklch(0.93 0.018 145);
52
+ --kp-surface: oklch(0.225 0.024 145);
53
+ --kp-surface-raised: oklch(0.265 0.028 145);
54
+ --kp-muted: oklch(0.285 0.026 145);
55
+ --kp-muted-foreground: oklch(0.715 0.03 145);
56
+ --kp-accent: oklch(0.71 0.12 148);
57
+ --kp-accent-foreground: oklch(0.985 0.01 145);
58
+ --kp-border: oklch(0.86 0.025 145 / 13%);
59
+ --kp-ring: oklch(0.71 0.12 148);
60
+ --kp-danger: oklch(0.68 0.16 27);
61
+ --kp-danger-foreground: oklch(0.985 0.01 27);
62
+ --kp-danger-subtle: oklch(0.32 0.05 27);
63
+ --kp-danger-border: oklch(0.72 0.1 27 / 40%);
64
+ --kp-success: oklch(0.72 0.14 148);
65
+ --kp-success-foreground: oklch(0.985 0.01 148);
66
+ --kp-success-subtle: oklch(0.32 0.045 148);
67
+ --kp-success-border: oklch(0.72 0.1 148 / 40%);
68
+ --kp-warning: oklch(0.78 0.12 78);
69
+ --kp-warning-foreground: oklch(0.22 0.04 78);
70
+ --kp-warning-subtle: oklch(0.34 0.04 78);
71
+ --kp-warning-border: oklch(0.78 0.1 78 / 40%);
72
+ --kp-info: oklch(0.72 0.1 220);
73
+ --kp-info-foreground: oklch(0.985 0.01 220);
74
+ --kp-info-subtle: oklch(0.32 0.035 220);
75
+ --kp-info-border: oklch(0.72 0.08 220 / 40%);
76
+ --kp-glass-tint: oklch(0.63 0.13 148 / 24%);
77
+ --kp-shadow-surface:
78
+ 0 1px 2px oklch(0.05 0.01 145 / 32%),
79
+ 0 22px 48px -30px oklch(0.05 0.02 145 / 86%);
80
+ }
@@ -0,0 +1,79 @@
1
+ [data-theme="graphite"][data-mode="light"] {
2
+ color-scheme: light;
3
+ --kp-background: oklch(0.965 0.005 255);
4
+ --kp-foreground: oklch(0.23 0.02 255);
5
+ --kp-surface: oklch(0.99 0.003 255);
6
+ --kp-surface-raised: oklch(1 0 0);
7
+ --kp-muted: oklch(0.925 0.008 255);
8
+ --kp-muted-foreground: oklch(0.47 0.02 255);
9
+ --kp-accent: oklch(0.48 0.06 250);
10
+ --kp-accent-foreground: oklch(0.98 0.01 250);
11
+ --kp-border: oklch(0.34 0.02 255 / 14%);
12
+ --kp-ring: oklch(0.55 0.07 250);
13
+ --kp-danger: oklch(0.55 0.17 27);
14
+ --kp-danger-foreground: oklch(0.985 0.01 27);
15
+ --kp-danger-subtle: oklch(0.94 0.035 27);
16
+ --kp-danger-border: oklch(0.56 0.12 27 / 40%);
17
+ --kp-success: oklch(0.55 0.15 150);
18
+ --kp-success-foreground: oklch(0.985 0.01 150);
19
+ --kp-success-subtle: oklch(0.94 0.035 150);
20
+ --kp-success-border: oklch(0.55 0.12 150 / 40%);
21
+ --kp-warning: oklch(0.75 0.14 75);
22
+ --kp-warning-foreground: oklch(0.25 0.05 75);
23
+ --kp-warning-subtle: oklch(0.94 0.04 75);
24
+ --kp-warning-border: oklch(0.72 0.12 75 / 40%);
25
+ --kp-info: oklch(0.52 0.11 250);
26
+ --kp-info-foreground: oklch(0.985 0.01 250);
27
+ --kp-info-subtle: oklch(0.94 0.03 250);
28
+ --kp-info-border: oklch(0.52 0.09 250 / 40%);
29
+ --kp-glass-tint: oklch(0.7 0.06 250 / 26%);
30
+ --kp-radius-sm: 0.4rem;
31
+ --kp-radius-md: 0.6rem;
32
+ --kp-radius-lg: 0.85rem;
33
+ --kp-radius-panel: 0.85rem;
34
+ --kp-density: 1.05;
35
+ --kp-motion-duration: 220ms;
36
+ --kp-motion-stiffness: 420;
37
+ --kp-motion-damping: 32;
38
+ --kp-shadow-surface:
39
+ 0 1px 2px oklch(0.2 0.02 255 / 6%),
40
+ 0 14px 36px -26px oklch(0.25 0.03 255 / 30%);
41
+ --kp-font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui,
42
+ sans-serif;
43
+ --kp-font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
44
+ --kp-font-display: var(--font-space-grotesk, "Space Grotesk"), var(--kp-font-sans);
45
+ }
46
+
47
+ [data-theme="graphite"][data-mode="dark"] {
48
+ color-scheme: dark;
49
+ --kp-background: oklch(0.17 0.012 255);
50
+ --kp-foreground: oklch(0.93 0.01 255);
51
+ --kp-surface: oklch(0.21 0.015 255);
52
+ --kp-surface-raised: oklch(0.25 0.018 255);
53
+ --kp-muted: oklch(0.27 0.016 255);
54
+ --kp-muted-foreground: oklch(0.715 0.015 255);
55
+ --kp-accent: oklch(0.7 0.07 245);
56
+ --kp-accent-foreground: oklch(0.985 0.008 255);
57
+ --kp-border: oklch(0.85 0.012 255 / 12%);
58
+ --kp-ring: oklch(0.7 0.07 245);
59
+ --kp-danger: oklch(0.68 0.16 27);
60
+ --kp-danger-foreground: oklch(0.985 0.01 27);
61
+ --kp-danger-subtle: oklch(0.32 0.05 27);
62
+ --kp-danger-border: oklch(0.72 0.1 27 / 40%);
63
+ --kp-success: oklch(0.72 0.14 150);
64
+ --kp-success-foreground: oklch(0.985 0.01 150);
65
+ --kp-success-subtle: oklch(0.32 0.045 150);
66
+ --kp-success-border: oklch(0.72 0.1 150 / 40%);
67
+ --kp-warning: oklch(0.78 0.12 75);
68
+ --kp-warning-foreground: oklch(0.22 0.04 75);
69
+ --kp-warning-subtle: oklch(0.34 0.04 75);
70
+ --kp-warning-border: oklch(0.78 0.1 75 / 40%);
71
+ --kp-info: oklch(0.72 0.1 250);
72
+ --kp-info-foreground: oklch(0.985 0.01 250);
73
+ --kp-info-subtle: oklch(0.32 0.035 250);
74
+ --kp-info-border: oklch(0.72 0.08 250 / 40%);
75
+ --kp-glass-tint: oklch(0.58 0.07 245 / 22%);
76
+ --kp-shadow-surface:
77
+ 0 1px 2px oklch(0.05 0.01 255 / 40%),
78
+ 0 20px 44px -28px oklch(0.05 0.02 255 / 88%);
79
+ }