twntyx-css 1.0.7 → 1.0.9

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 (43) hide show
  1. package/README.md +42 -3
  2. package/llm/components/avatar.json +3 -1
  3. package/llm/components/badge.json +10 -120
  4. package/llm/components/breadcrumb.json +0 -2
  5. package/llm/components/button-container.json +0 -1
  6. package/llm/components/button.json +12 -105
  7. package/llm/components/chat-footer.json +10 -27
  8. package/llm/components/chat.json +1 -1
  9. package/llm/components/checkmark.json +0 -2
  10. package/llm/components/combobox.json +1 -0
  11. package/llm/components/command-palette.json +7 -88
  12. package/llm/components/datepicker.json +1 -0
  13. package/llm/components/icons-reference.json +1 -1
  14. package/llm/components/join.json +2 -0
  15. package/llm/components/menu.json +2 -2
  16. package/llm/components/progress-bullet.json +0 -2
  17. package/llm/components/scrollbar.json +1 -0
  18. package/llm/components/surface.json +0 -1
  19. package/llm/components/table.json +1 -1
  20. package/llm/examples/badge.html +1 -1
  21. package/llm/examples/chat-footer.html +1 -1
  22. package/llm/examples/command-palette.html +1 -1
  23. package/llm/index.json +3 -3
  24. package/llm/tokens.json +44 -20
  25. package/package.json +1 -1
  26. package/styles/animation.css +8 -8
  27. package/styles/avatar.css +2 -2
  28. package/styles/background-ai.css +5 -11
  29. package/styles/badge.css +48 -9
  30. package/styles/button.css +20 -1
  31. package/styles/chat.css +153 -146
  32. package/styles/collapsible.css +11 -2
  33. package/styles/colors.css +25 -17
  34. package/styles/join.css +60 -59
  35. package/styles/menu.css +2 -2
  36. package/styles/modal.css +1 -1
  37. package/styles/scrollbar.css +18 -0
  38. package/styles/shared.css +2 -2
  39. package/styles/surface.css +25 -4
  40. package/styles/table.css +1 -11
  41. package/styles/toast.css +1 -1
  42. package/styles/typography.css +38 -34
  43. package/styles/utility.css +1 -2
@@ -2,7 +2,7 @@
2
2
  "id": "icons-reference",
3
3
  "name": "Icons reference",
4
4
  "status": "stable",
5
- "summary": "Collection of icons used throughout the application, twntyX uses [Google's Material Symbols and Icons](https://fonts.google.com/icons?icon.style=Rounded&icon.query=soun&icon.size=24) (weight 300, rounded), which provides us with an extensive icon library with over 2,500 glyphs",
5
+ "summary": "Collection of icons used throughout the application, twntyX uses [Google's Material Symbols and Icons](https://fonts.google.com/icons?icon.style=Rounded&icon.query=soun&icon.size=24) (weight 300, grade 0, optical size 24px, rounded), which provides us with an extensive icon library with over 2,500 glyphs",
6
6
  "keywords": [
7
7
  "assets",
8
8
  "collection",
@@ -64,6 +64,7 @@
64
64
  "background-brand-active",
65
65
  "background-error",
66
66
  "background-inverted",
67
+ "background-success",
67
68
  "background-surface",
68
69
  "background-surface-elevated",
69
70
  "brand-default",
@@ -75,6 +76,7 @@
75
76
  "line-default",
76
77
  "line-error",
77
78
  "line-strong",
79
+ "line-success",
78
80
  "text-attention",
79
81
  "text-brand",
80
82
  "text-brand-active",
@@ -163,7 +163,6 @@
163
163
  ],
164
164
  "tokenUsage": [
165
165
  "background-brand",
166
- "background-error",
167
166
  "background-page",
168
167
  "background-surface",
169
168
  "background-surface-elevated",
@@ -172,8 +171,9 @@
172
171
  "core-white",
173
172
  "line-brand",
174
173
  "line-default",
174
+ "line-highlight",
175
175
  "line-strong",
176
- "text-brand",
176
+ "text-brand-active",
177
177
  "text-default",
178
178
  "text-disabled",
179
179
  "text-link",
@@ -150,9 +150,7 @@
150
150
  "core-black",
151
151
  "core-ui-100",
152
152
  "core-ui-300",
153
- "core-ui-400",
154
153
  "core-ui-50",
155
- "core-ui-600",
156
154
  "core-ui-700",
157
155
  "core-ui-800",
158
156
  "core-ui-900",
@@ -71,6 +71,7 @@
71
71
  "Do not remove required accessibility attributes when component is interactive."
72
72
  ],
73
73
  "tokenUsage": [
74
+ "background-brand",
74
75
  "core-ui-100",
75
76
  "core-ui-300",
76
77
  "core-ui-400",
@@ -130,7 +130,6 @@
130
130
  "background-warning-active",
131
131
  "brand-default",
132
132
  "brand-moderate",
133
- "brand-soft",
134
133
  "brand-strong",
135
134
  "core-black",
136
135
  "core-ui-200",
@@ -171,7 +171,6 @@
171
171
  "core-ui-400",
172
172
  "core-ui-50",
173
173
  "core-ui-500",
174
- "core-ui-600",
175
174
  "core-ui-700",
176
175
  "core-ui-800",
177
176
  "core-ui-900",
@@ -186,6 +185,7 @@
186
185
  "line-success",
187
186
  "line-warning",
188
187
  "text-brand",
188
+ "text-brand-active",
189
189
  "text-default",
190
190
  "text-disabled",
191
191
  "text-error",
@@ -1 +1 @@
1
- <div class="badge badge-placeholder">Badge</div>
1
+ <div class="badge">Badge</div>
@@ -1 +1 @@
1
- <div class="chat-footer chat-footer-full">Chat footer</div>
1
+ <div class="chat-footer">Chat footer</div>
@@ -1 +1 @@
1
- <div class="command">Command palette</div>
1
+ <div class="command-palette">Command palette</div>
package/llm/index.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "llmSchemaVersion": "1.0.0",
3
- "designSystemVersion": "1.0.7",
3
+ "designSystemVersion": "1.0.9",
4
4
  "packageName": "twntyx-css",
5
5
  "apiModel": "html-class",
6
- "sourceFingerprint": "edc2ab201c2009b080557686438a6f36046b978edb2a8a34abd944be502d8401",
6
+ "sourceFingerprint": "da5c687a1df4907a77f8f1b512ad33f27f39b7edff70707323b7590abd5d56ba",
7
7
  "files": {
8
8
  "schema": "schema.json",
9
9
  "tokens": "tokens.json",
@@ -728,7 +728,7 @@
728
728
  "name": "Icons reference",
729
729
  "file": "components/icons-reference.json",
730
730
  "status": "stable",
731
- "summary": "Collection of icons used throughout the application, twntyX uses [Google's Material Symbols and Icons](https://fonts.google.com/icons?icon.style=Rounded&icon.query=soun&icon.size=24) (weight 300, rounded), which provides us with an extensive icon library with over 2,500 glyphs",
731
+ "summary": "Collection of icons used throughout the application, twntyX uses [Google's Material Symbols and Icons](https://fonts.google.com/icons?icon.style=Rounded&icon.query=soun&icon.size=24) (weight 300, grade 0, optical size 24px, rounded), which provides us with an extensive icon library with over 2,500 glyphs",
732
732
  "keywords": [
733
733
  "assets",
734
734
  "collection",
package/llm/tokens.json CHANGED
@@ -374,7 +374,7 @@
374
374
  "dark": "#0e2668"
375
375
  },
376
376
  "resolvedValues": {
377
- "light": "#cdd6ef",
377
+ "light": "#a9bae7",
378
378
  "dark": "#0e2668"
379
379
  },
380
380
  "sourcePaths": [
@@ -432,7 +432,7 @@
432
432
  "dark": "#5a5248"
433
433
  },
434
434
  "resolvedValues": {
435
- "light": "#f3f0eb",
435
+ "light": "#f9f7f3",
436
436
  "dark": "#5a5248"
437
437
  },
438
438
  "sourcePaths": [
@@ -578,7 +578,7 @@
578
578
  },
579
579
  "resolvedValues": {
580
580
  "light": "#e6f6ef",
581
- "dark": "#0e6842"
581
+ "dark": "#084028"
582
582
  },
583
583
  "sourcePaths": [
584
584
  "assets/styles/colors.css",
@@ -635,7 +635,7 @@
635
635
  "dark": "#1ba46b"
636
636
  },
637
637
  "resolvedValues": {
638
- "light": "#cdefe1",
638
+ "light": "hsl(155, 56%, 65%)",
639
639
  "dark": "#1ba46b"
640
640
  },
641
641
  "sourcePaths": [
@@ -730,6 +730,30 @@
730
730
  "config/dataColors.js"
731
731
  ]
732
732
  },
733
+ {
734
+ "id": "background-surface-sunken-darker",
735
+ "cssVariable": "--color-background-surface-sunken-darker",
736
+ "category": "background",
737
+ "semanticIntent": {
738
+ "name": "Background Surface Sunken Darker",
739
+ "path": [
740
+ "background"
741
+ ],
742
+ "reference": null
743
+ },
744
+ "values": {
745
+ "light": "#ede9e2",
746
+ "dark": "#302b24"
747
+ },
748
+ "resolvedValues": {
749
+ "light": "#ede9e2",
750
+ "dark": "#302b24"
751
+ },
752
+ "sourcePaths": [
753
+ "assets/styles/colors.css",
754
+ "config/dataColors.js"
755
+ ]
756
+ },
733
757
  {
734
758
  "id": "background-warning",
735
759
  "cssVariable": "--color-background-warning",
@@ -1596,11 +1620,11 @@
1596
1620
  },
1597
1621
  "values": {
1598
1622
  "light": "#a9e7cd",
1599
- "dark": "#a9e7cd"
1623
+ "dark": "hsl(155, 56%, 65%)"
1600
1624
  },
1601
1625
  "resolvedValues": {
1602
- "light": "#a9e7cd",
1603
- "dark": "#a9e7cd"
1626
+ "light": "hsl(155, 56%, 65%)",
1627
+ "dark": "hsl(155, 56%, 65%)"
1604
1628
  },
1605
1629
  "sourcePaths": [
1606
1630
  "assets/styles/colors.css",
@@ -2146,11 +2170,11 @@
2146
2170
  },
2147
2171
  "values": {
2148
2172
  "light": "#e7a9b2",
2149
- "dark": "#e7a9b2"
2173
+ "dark": "hsl(351, 56%, 80%)"
2150
2174
  },
2151
2175
  "resolvedValues": {
2152
- "light": "#e7a9b2",
2153
- "dark": "#e7a9b2"
2176
+ "light": "hsl(351, 56%, 80%)",
2177
+ "dark": "hsl(351, 56%, 80%)"
2154
2178
  },
2155
2179
  "sourcePaths": [
2156
2180
  "assets/styles/colors.css",
@@ -2977,8 +3001,8 @@
2977
3001
  "dark": "#403108"
2978
3002
  },
2979
3003
  "resolvedValues": {
2980
- "light": "#efe6cd",
2981
- "dark": "#403108"
3004
+ "light": "#e7d6a9",
3005
+ "dark": "#68500e"
2982
3006
  },
2983
3007
  "sourcePaths": [
2984
3008
  "assets/styles/colors.css",
@@ -3151,8 +3175,8 @@
3151
3175
  "dark": "#871425"
3152
3176
  },
3153
3177
  "resolvedValues": {
3154
- "light": "#efcdd2",
3155
- "dark": "#871425"
3178
+ "light": "hsl(351, 56%, 80%)",
3179
+ "dark": "#680e1c"
3156
3180
  },
3157
3181
  "sourcePaths": [
3158
3182
  "assets/styles/colors.css",
@@ -3286,8 +3310,8 @@
3286
3310
  "dark": "#1b3fa4"
3287
3311
  },
3288
3312
  "resolvedValues": {
3289
- "light": "#cdd6ef",
3290
- "dark": "#1b3fa4"
3313
+ "light": "#a9bae7",
3314
+ "dark": "#0e2668"
3291
3315
  },
3292
3316
  "sourcePaths": [
3293
3317
  "assets/styles/colors.css",
@@ -3402,8 +3426,8 @@
3402
3426
  "dark": "#1ba46b"
3403
3427
  },
3404
3428
  "resolvedValues": {
3405
- "light": "#cdefe1",
3406
- "dark": "#1ba46b"
3429
+ "light": "hsl(155, 56%, 65%)",
3430
+ "dark": "#0e6842"
3407
3431
  },
3408
3432
  "sourcePaths": [
3409
3433
  "assets/styles/colors.css",
@@ -3431,8 +3455,8 @@
3431
3455
  "dark": "#873c14"
3432
3456
  },
3433
3457
  "resolvedValues": {
3434
- "light": "#efd9cd",
3435
- "dark": "#873c14"
3458
+ "light": "#e7bfa9",
3459
+ "dark": "#682d0e"
3436
3460
  },
3437
3461
  "sourcePaths": [
3438
3462
  "assets/styles/colors.css",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twntyx-css",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "exports": {
5
5
  "./llm": "./llm/index.json",
6
6
  "./llm/components/*": "./llm/components/*.json",
@@ -1357,7 +1357,7 @@
1357
1357
 
1358
1358
  @keyframes tooltipSlideDown {
1359
1359
  0% {
1360
- transform: translate(0, -1rem);
1360
+ transform: translate(0, 1rem);
1361
1361
  opacity: 0;
1362
1362
  }
1363
1363
  100% {
@@ -1368,7 +1368,7 @@
1368
1368
 
1369
1369
  @keyframes tooltipSlideUp {
1370
1370
  0% {
1371
- transform: translate(0, 1rem);
1371
+ transform: translate(0, -1rem);
1372
1372
  opacity: 0;
1373
1373
  }
1374
1374
  100% {
@@ -1379,7 +1379,7 @@
1379
1379
 
1380
1380
  @keyframes tooltipSlideRight {
1381
1381
  0% {
1382
- transform: translateX(1rem);
1382
+ transform: translateX(-1rem);
1383
1383
  opacity: 0;
1384
1384
  }
1385
1385
  100% {
@@ -1390,7 +1390,7 @@
1390
1390
 
1391
1391
  @keyframes tooltipSlideLeft {
1392
1392
  0% {
1393
- transform: translateX(-1rem);
1393
+ transform: translateX(1rem);
1394
1394
  opacity: 0;
1395
1395
  }
1396
1396
  100% {
@@ -2057,7 +2057,7 @@
2057
2057
  @keyframes tooltip-in-top {
2058
2058
  0% {
2059
2059
  opacity: 0;
2060
- transform: translateY(4px);
2060
+ transform: translateY(-4px);
2061
2061
  }
2062
2062
  100% {
2063
2063
  opacity: 1;
@@ -2068,7 +2068,7 @@
2068
2068
  @keyframes tooltip-in-bottom {
2069
2069
  0% {
2070
2070
  opacity: 0;
2071
- transform: translateY(-4px);
2071
+ transform: translateY(4px);
2072
2072
  }
2073
2073
  100% {
2074
2074
  opacity: 1;
@@ -2079,7 +2079,7 @@
2079
2079
  @keyframes tooltip-in-left {
2080
2080
  0% {
2081
2081
  opacity: 0;
2082
- transform: translateX(4px);
2082
+ transform: translateX(-4px);
2083
2083
  }
2084
2084
  100% {
2085
2085
  opacity: 1;
@@ -2090,7 +2090,7 @@
2090
2090
  @keyframes tooltip-in-right {
2091
2091
  0% {
2092
2092
  opacity: 0;
2093
- transform: translateX(-4px);
2093
+ transform: translateX(4px);
2094
2094
  }
2095
2095
  100% {
2096
2096
  opacity: 1;
package/styles/avatar.css CHANGED
@@ -57,10 +57,10 @@
57
57
  /* Placeholder styling */
58
58
  &.placeholder {
59
59
  .avatar-inner {
60
- @apply flex justify-center items-center bg-background-neutral;
60
+ @apply flex justify-center items-center border border-line-strong/25 bg-background-surface-sunken;
61
61
 
62
62
  span {
63
- @apply text-text-secondary;
63
+ @apply text-text-secondary font-bold text-xxs;
64
64
  }
65
65
  }
66
66
 
@@ -3,7 +3,7 @@
3
3
  /*----------------------------*/
4
4
 
5
5
  :root {
6
- --light-gradient: repeating-linear-gradient(
6
+ --light-gradient: repeating-linear-gradient(
7
7
  100deg,
8
8
  color-mix(in srgb, var(--color-core-white) 100%, transparent 0%) 0%,
9
9
  color-mix(in srgb, var(--color-core-white) 20%, transparent 80%) 7%,
@@ -19,10 +19,9 @@
19
19
  transparent 25%,
20
20
  color-mix(in srgb, var(--color-brand-moderate) 100%, transparent 0%) 30%
21
21
  );
22
-
23
22
  }
24
23
  :root.dark {
25
- --light-gradient: repeating-linear-gradient(
24
+ --light-gradient: repeating-linear-gradient(
26
25
  100deg,
27
26
  color-mix(in srgb, var(--color-core-black) 100%, transparent 0%) 0%,
28
27
  color-mix(in srgb, var(--color-core-black) 20%, transparent 80%) 7%,
@@ -30,7 +29,7 @@
30
29
  transparent 12%,
31
30
  color-mix(in srgb, var(--color-core-black) 100%, transparent 0%) 16%
32
31
  );
33
- --light-borealis: repeating-linear-gradient(
32
+ --light-borealis: repeating-linear-gradient(
34
33
  100deg,
35
34
  color-mix(in srgb, var(--color-brand-default) 100%, transparent 0%) 10%,
36
35
  color-mix(in srgb, var(--color-brand-soft) 100%, transparent 0%) 15%,
@@ -40,17 +39,14 @@
40
39
  );
41
40
  }
42
41
 
43
- @utility background-ai-silk{
42
+ @utility background-ai-silk {
44
43
  @apply relative overflow-clip;
45
-
44
+
46
45
  &::before,
47
46
  &::after {
48
47
  @apply content-[''] absolute inset-0 pointer-events-none will-change-transform animate-[borealis_60s_linear_infinite] bg-[image:var(--light-gradient),var(--light-borealis)];
49
- ;
50
48
  }
51
49
 
52
-
53
-
54
50
  &::before {
55
51
  @apply z-0 -inset-[10px] opacity-20 mix-blend-darken;
56
52
  mask-image: radial-gradient(ellipse at 100% 0%, black 10%, transparent 70%);
@@ -98,8 +94,6 @@
98
94
  }
99
95
  }
100
96
 
101
-
102
-
103
97
  @utility background-ai-circles {
104
98
  @apply bg-core-white to-brand-light/50 from-brand-soft bg-size-[520px_100%] bg-repeat-x animate-[badge-ai-gradient_10s_linear_infinite] bg-[radial-gradient(520px_520px_at_50%_50%,_var(--tw-gradient-from)_0%,_var(--tw-gradient-to)_30%)];
105
99
 
package/styles/badge.css CHANGED
@@ -5,7 +5,7 @@
5
5
  @utility badge {
6
6
  @apply font-body inline-flex gap-1 justify-center items-center font-semibold rounded-full border cursor-default shrink-0;
7
7
 
8
- &[role="status"] {
8
+ &[role='status'] {
9
9
  @apply cursor-default;
10
10
  }
11
11
 
@@ -23,6 +23,10 @@
23
23
  &.badge-lg {
24
24
  @apply px-0 size-4;
25
25
  }
26
+
27
+ &.badge-xl {
28
+ @apply px-0 size-5;
29
+ }
26
30
  }
27
31
 
28
32
  /* Icon styles */
@@ -86,6 +90,20 @@
86
90
  }
87
91
  }
88
92
 
93
+ &.badge-xl {
94
+ @apply gap-2 px-3 py-1 text-base [&>svg]:size-5 min-h-[30px] min-w-[30px];
95
+ &:has(svg:first-child) {
96
+ @apply pl-2;
97
+ }
98
+ &:has(.button-close:last-child) {
99
+ @apply pr-1;
100
+ }
101
+ .button.button-close,
102
+ .button-close {
103
+ --close-size: calc(40px - 0.5rem - 2px) !important;
104
+ }
105
+ }
106
+
89
107
  /* VARIANTS */
90
108
 
91
109
  & {
@@ -178,6 +196,23 @@
178
196
  }
179
197
  }
180
198
  }
199
+ &.badge-warning {
200
+ @apply surface-warning;
201
+ &.badge-interactive {
202
+ @apply surface-interactive-warning;
203
+ }
204
+ &:empty {
205
+ @apply bg-text-warning from-text-warning to-text-warning border-text-warning text-core-white dark:text-core-black;
206
+ }
207
+ &.badge-filled {
208
+ @apply bg-background-brand border-background-brand text-core-white dark:text-core-black;
209
+ &.badge-interactive {
210
+ &:hover {
211
+ @apply from-text-warning/75 to-text-warning/75 border-text-warning;
212
+ }
213
+ }
214
+ }
215
+ }
181
216
 
182
217
  &.badge-info {
183
218
  @apply surface-info;
@@ -198,7 +233,7 @@
198
233
  }
199
234
 
200
235
  &.badge-attention {
201
- @apply surface-attention;
236
+ @apply surface-attention text-text-attention;
202
237
  &.badge-interactive {
203
238
  @apply surface-interactive-attention;
204
239
  }
@@ -216,7 +251,7 @@
216
251
  }
217
252
 
218
253
  &.badge-brand {
219
- @apply border-line-brand bg-background-brand/20 text-brand-default;
254
+ @apply border-line-brand/20 bg-background-brand/20 text-brand-default;
220
255
  &.badge-interactive {
221
256
  @apply surface-interactive-brand;
222
257
  }
@@ -246,7 +281,7 @@
246
281
 
247
282
  /* Role fit badges */
248
283
 
249
- &[class*="-status-"].badge {
284
+ &[class*='-status-'].badge {
250
285
  @apply font-medium rounded border-none;
251
286
  }
252
287
 
@@ -254,21 +289,25 @@
254
289
  @apply bg-core-ui-200 dark:bg-core-ui-700 text-core-ui-600 dark:text-core-ui-300;
255
290
  }
256
291
  &.badge-status-verylow {
257
- @apply bg-core-red-100 text-core-red-700;
292
+ @apply bg-core-red-100 text-core-red-700 dark:bg-core-red-900 dark:text-core-red-300;
258
293
  }
259
294
  &.badge-status-low {
260
- @apply bg-core-orange-100 text-core-orange-700;
295
+ @apply bg-core-orange-100 text-core-orange-700 dark:bg-core-orange-900 dark:text-core-orange-300;
261
296
  }
262
297
  &.badge-status-medium {
263
- @apply bg-core-green-50 text-core-green-700;
298
+ @apply bg-core-green-50 text-core-green-700 dark:bg-core-green-950 dark:text-core-green-400;
264
299
  }
265
300
  &.badge-status-high {
266
- @apply bg-core-green-100 text-core-green-800;
301
+ @apply bg-core-green-100 text-core-green-800 dark:bg-core-green-900 dark:text-core-green-300;
267
302
  }
268
303
  &.badge-status-veryhigh {
269
- @apply relative bg-core-green-200 text-core-green-900;
304
+ @apply relative bg-core-green-200 text-core-green-900 dark:bg-core-green-800 dark:text-core-green-200;
270
305
  &::after {
271
306
  @apply content-[''] overflow-hidden rounded-[inherit] block absolute z-0 inset-0 bg-blend-color-dodge opacity-50 animate-shine bg-[linear-gradient(30deg,_rgba(255,255,255,0)_35%,_rgba(255,255,255,1)_50%,_rgba(255,255,255,0)_60%)] dark:opacity-20 bg-no-repeat pointer-events-none;
272
307
  }
273
308
  }
274
309
  }
310
+
311
+ @utility badge-number {
312
+ @apply inline-flex min-w-5 items-center justify-center rounded-full bg-background-brand px-1.5 py-0.5 text-[10px] font-semibold leading-none text-text-inverted;
313
+ }
package/styles/button.css CHANGED
@@ -110,7 +110,7 @@
110
110
  &,
111
111
  &:hover,
112
112
  &:active {
113
- @apply bg-none text-shadow-none bg-core-ui-100 dark:bg-core-ui-800 text-text-secondary/75 border-line-default;
113
+ @apply bg-none text-shadow-none bg-background-surface-elevated text-text-secondary/75 border-line-default;
114
114
  }
115
115
  }
116
116
  &.button-secondary {
@@ -317,6 +317,14 @@
317
317
  }
318
318
  }
319
319
 
320
+ @utility button-constructive {
321
+ @apply border backdrop-blur include-border-destructive bg-background-success border-line-success hover:border-line-success text-text-success active:bg-background-surface-elevated;
322
+
323
+ &.is-active {
324
+ @apply bg-background-surface-elevated;
325
+ }
326
+ }
327
+
320
328
  @utility button-discreet {
321
329
  @apply border text-text-tertiary border-line-default/0 disabled:border-line-default;
322
330
 
@@ -331,6 +339,17 @@
331
339
  @apply include-interactive text-text-default include-hover-primary;
332
340
  }
333
341
 
342
+ @utility button-ai {
343
+ @apply bg-background-surface include-border-secondary;
344
+
345
+ > * {
346
+ @apply relative z-10;
347
+ }
348
+ > i {
349
+ @apply content-[''] absolute z-0 rounded-[inherit] inset-0 background-ai-circles;
350
+ }
351
+ }
352
+
334
353
  /* Close */
335
354
  .button.button-close,
336
355
  .button-close {