@stasho/ds 0.8.0 → 0.9.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stasho/ds",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "description": "stasho design system",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@ const VARIANT_BG_CLASS: Record<AlertVariant, string> = {
30
30
 
31
31
  const alertVariants = cva(
32
32
  [
33
- "relative overflow-hidden rounded-none border",
33
+ "relative overflow-hidden rounded-sm border",
34
34
  "px-3 py-2",
35
35
  "transition-all duration-200",
36
36
  "motion-reduce:transition-none",
@@ -5,7 +5,7 @@ import { cn } from "@ac/lib/cn";
5
5
  const badgeVariants = cva(
6
6
  [
7
7
  "inline-flex items-center justify-center gap-1.5",
8
- "rounded-[2px] font-mono uppercase tracking-wider",
8
+ "rounded-sm font-mono uppercase tracking-wider",
9
9
  "whitespace-nowrap select-none",
10
10
  ].join(" "),
11
11
  {
@@ -12,7 +12,7 @@ import { cn } from "@ac/lib/cn";
12
12
  const buttonVariants = cva(
13
13
  [
14
14
  "inline-flex items-center font-body font-bold leading-none",
15
- "rounded-none border-0 text-white",
15
+ "rounded-sm border-0 text-white",
16
16
  "transition-[background,box-shadow,transform] duration-150 ease-out",
17
17
  "active:translate-y-px",
18
18
  "focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",
@@ -26,9 +26,9 @@ const checkboxVariants = cva(
26
26
  {
27
27
  variants: {
28
28
  size: {
29
- xs: "size-3.5 rounded-none",
30
- sm: "size-4 rounded-none",
31
- md: "size-5 rounded-none",
29
+ xs: "size-3.5 rounded-sm",
30
+ sm: "size-4 rounded-sm",
31
+ md: "size-5 rounded-sm",
32
32
  },
33
33
  },
34
34
  defaultVariants: {
@@ -10,7 +10,7 @@ const triggerVariants = cva(
10
10
  "inline-flex items-center justify-between",
11
11
  "w-full font-sans text-foreground",
12
12
  "bg-background dark:bg-surface",
13
- "border border-edge rounded-none",
13
+ "border border-edge rounded-sm",
14
14
  "hover:border-edge-hover",
15
15
  "focus-visible:outline-none",
16
16
  "focus-visible:border-accent-700 dark:focus-visible:border-accent",
@@ -112,7 +112,7 @@ const Combobox = forwardRef<HTMLButtonElement, ComboboxProps>(
112
112
  <Popover.Content
113
113
  className={cn(
114
114
  "z-50 w-[var(--radix-popover-trigger-width)]",
115
- "overflow-hidden rounded-none",
115
+ "overflow-hidden rounded-sm",
116
116
  "bg-popover-bg border border-popover-border shadow",
117
117
  )}
118
118
  sideOffset={4}
@@ -141,7 +141,7 @@ const Combobox = forwardRef<HTMLButtonElement, ComboboxProps>(
141
141
  setOpen(false);
142
142
  }}
143
143
  className={cn(
144
- "relative flex items-center rounded-none px-4 py-2",
144
+ "relative flex items-center rounded-sm px-4 py-2",
145
145
  "text-sm text-foreground cursor-pointer select-none",
146
146
  "outline-none",
147
147
  "data-[selected=true]:bg-muted",
@@ -162,7 +162,7 @@ const CopyableText = forwardRef<HTMLSpanElement, CopyableTextProps>(
162
162
  onClick={handleCopy}
163
163
  className={cn(
164
164
  "relative inline-flex items-center justify-center",
165
- "rounded-none cursor-pointer shrink-0",
165
+ "rounded-sm cursor-pointer shrink-0",
166
166
  "hover:bg-foreground/10 transition-colors",
167
167
  btnCn,
168
168
  )}
@@ -207,7 +207,7 @@ const CopyableText = forwardRef<HTMLSpanElement, CopyableTextProps>(
207
207
  rel="noopener noreferrer"
208
208
  onClick={(e) => e.stopPropagation()}
209
209
  className={cn(
210
- "inline-flex items-center justify-center rounded-none shrink-0",
210
+ "inline-flex items-center justify-center rounded-sm shrink-0",
211
211
  "text-muted-foreground hover:text-foreground",
212
212
  "hover:bg-foreground/10 transition-colors",
213
213
  btnCn,
@@ -38,7 +38,7 @@ const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(
38
38
  <DialogPrimitive.Content
39
39
  ref={ref}
40
40
  className={cn(
41
- "relative w-full max-w-md rounded-xl bg-surface p-6",
41
+ "relative w-full max-w-md rounded-xl border border-edge bg-surface p-6",
42
42
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
43
43
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
44
44
  "motion-reduce:animate-none",
@@ -56,7 +56,7 @@ const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(
56
56
  {locked ? null : (
57
57
  <DialogPrimitive.Close
58
58
  className={cn(
59
- "absolute top-4 right-4 rounded-none",
59
+ "absolute top-4 right-4 rounded-sm",
60
60
  "text-muted-foreground transition-colors hover:text-foreground",
61
61
  "focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",
62
62
  )}
@@ -6,7 +6,7 @@ const inputVariants = cva(
6
6
  [
7
7
  "w-full font-sans text-foreground",
8
8
  "bg-background dark:bg-surface",
9
- "border border-edge rounded-none",
9
+ "border border-edge rounded-sm",
10
10
  "placeholder:text-muted-foreground",
11
11
  "focus-visible:outline-none",
12
12
  "focus-visible:border-accent-700 dark:focus-visible:border-accent",
@@ -10,7 +10,7 @@ const triggerVariants = cva(
10
10
  "inline-flex items-center gap-1.5",
11
11
  "w-full font-sans text-foreground",
12
12
  "bg-background dark:bg-surface",
13
- "border border-edge rounded-none",
13
+ "border border-edge rounded-sm",
14
14
  "hover:border-edge-hover",
15
15
  "focus-visible:outline-none",
16
16
  "focus-visible:border-accent-700 dark:focus-visible:border-accent",
@@ -35,7 +35,7 @@ const triggerVariants = cva(
35
35
 
36
36
  const tagVariants = cva(
37
37
  [
38
- "inline-flex items-center gap-1 rounded-[2px] bg-muted",
38
+ "inline-flex items-center gap-1 rounded-sm bg-muted",
39
39
  "text-foreground max-w-32 select-none",
40
40
  ].join(" "),
41
41
  {
@@ -165,7 +165,7 @@ const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(
165
165
  aria-label={`Remove ${opt.label}`}
166
166
  onClick={(e) => removeTag(e, opt.value)}
167
167
  className={cn(
168
- "shrink-0 rounded-[2px]",
168
+ "shrink-0 rounded-sm",
169
169
  "hover:bg-foreground/10 transition-colors",
170
170
  size === "sm" ? "size-3.5" : "size-4",
171
171
  )}
@@ -195,7 +195,7 @@ const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(
195
195
  aria-label="Clear all"
196
196
  onClick={clearAll}
197
197
  className={cn(
198
- "shrink-0 rounded-[2px]",
198
+ "shrink-0 rounded-sm",
199
199
  "text-muted-foreground",
200
200
  "hover:text-foreground transition-colors",
201
201
  size === "sm" ? "size-4" : "size-5",
@@ -232,7 +232,7 @@ const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(
232
232
  <Popover.Content
233
233
  className={cn(
234
234
  "z-50 w-[var(--radix-popover-trigger-width)]",
235
- "overflow-hidden rounded-none",
235
+ "overflow-hidden rounded-sm",
236
236
  "bg-popover-bg border border-popover-border shadow",
237
237
  )}
238
238
  sideOffset={4}
@@ -268,7 +268,7 @@ const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(
268
268
  onSelect={() => toggle(option.value)}
269
269
  className={cn(
270
270
  "relative flex items-center gap-2",
271
- "rounded-none px-3 py-2",
271
+ "rounded-sm px-3 py-2",
272
272
  "text-sm text-foreground",
273
273
  "cursor-pointer select-none",
274
274
  "outline-none",
@@ -281,7 +281,7 @@ const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(
281
281
  className={cn(
282
282
  "flex size-4 shrink-0 items-center",
283
283
  "justify-center",
284
- "rounded-none border transition-colors",
284
+ "rounded-sm border transition-colors",
285
285
  selected
286
286
  ? "border-accent bg-accent text-accent-foreground"
287
287
  : "border-edge bg-surface",
@@ -80,7 +80,7 @@ type PaginationProps = Omit<HTMLAttributes<HTMLElement>, "onChange"> & {
80
80
 
81
81
  const NAV_BUTTON = [
82
82
  "inline-flex items-center justify-center",
83
- "size-8 rounded-none",
83
+ "size-8 rounded-sm",
84
84
  "text-foreground/60 hover:text-accent-500 dark:hover:text-accent",
85
85
  "transition-colors cursor-pointer",
86
86
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",
@@ -90,7 +90,7 @@ const NAV_DISABLED = "text-foreground/30 cursor-not-allowed";
90
90
 
91
91
  const PAGE_BUTTON = [
92
92
  "inline-flex items-center justify-center",
93
- "size-[26px] rounded-none",
93
+ "size-[26px] rounded-sm",
94
94
  "font-mono text-sm",
95
95
  "text-foreground/60 hover:text-accent-500 dark:hover:text-accent",
96
96
  "transition-colors cursor-pointer",
@@ -9,7 +9,7 @@ const triggerVariants = cva(
9
9
  "inline-flex items-center justify-between",
10
10
  "w-full font-sans text-foreground",
11
11
  "bg-background dark:bg-surface",
12
- "border border-edge rounded-none",
12
+ "border border-edge rounded-sm",
13
13
  "hover:border-edge-hover",
14
14
  "focus-visible:outline-none",
15
15
  "focus-visible:border-accent-700 dark:focus-visible:border-accent",
@@ -89,7 +89,7 @@ const Select = forwardRef<HTMLButtonElement, SelectProps>(
89
89
  <SelectPrimitive.Portal>
90
90
  <SelectPrimitive.Content
91
91
  className={cn(
92
- "z-50 overflow-hidden rounded-none",
92
+ "z-50 overflow-hidden rounded-sm",
93
93
  "bg-popover-bg border border-popover-border shadow",
94
94
  )}
95
95
  position="popper"
@@ -102,7 +102,7 @@ const Select = forwardRef<HTMLButtonElement, SelectProps>(
102
102
  value={option.value}
103
103
  disabled={option.disabled ?? false}
104
104
  className={cn(
105
- "relative flex items-center rounded-none px-4 py-2",
105
+ "relative flex items-center rounded-sm px-4 py-2",
106
106
  "text-sm text-foreground cursor-pointer select-none",
107
107
  "outline-none",
108
108
  "data-[highlighted]:bg-muted",
@@ -114,7 +114,7 @@ const Slider = forwardRef<
114
114
  <span
115
115
  className={cn(
116
116
  "absolute bottom-full left-1/2 -translate-x-1/2 mb-2",
117
- "rounded-none bg-popover-bg border border-popover-border px-2 py-1",
117
+ "rounded-sm bg-popover-bg border border-popover-border px-2 py-1",
118
118
  "text-xs text-foreground whitespace-nowrap pointer-events-none",
119
119
  )}
120
120
  >
@@ -115,7 +115,7 @@ const StepperIndicator = forwardRef<HTMLDivElement, StepperIndicatorProps>(
115
115
  ref={ref}
116
116
  data-state={state}
117
117
  className={cn(
118
- "relative flex size-8 items-center justify-center rounded-[2px]",
118
+ "relative flex size-8 items-center justify-center rounded-sm",
119
119
  "font-sans text-sm font-semibold",
120
120
  "border border-edge text-foreground/45 bg-transparent",
121
121
  "data-[state=active]:border-accent data-[state=active]:text-accent-500 dark:data-[state=active]:text-accent",
@@ -6,7 +6,7 @@ import { cn } from "@ac/lib/cn";
6
6
  const switchVariants = cva(
7
7
  [
8
8
  "peer inline-flex shrink-0 cursor-pointer",
9
- "items-center rounded-[2px]",
9
+ "items-center rounded-sm",
10
10
  "border border-edge bg-muted dark:bg-neutral-900",
11
11
  "[box-shadow:inset_0_1px_0_rgba(255,255,255,0.7),inset_0_-1px_0_rgba(0,0,0,0.10)]",
12
12
  "dark:[box-shadow:inset_0_1px_0_rgba(255,255,255,0.06),inset_0_-1px_0_rgba(0,0,0,0.4)]",
@@ -34,7 +34,7 @@ const switchVariants = cva(
34
34
 
35
35
  const thumbVariants = cva(
36
36
  [
37
- "pointer-events-none block rounded-[2px]",
37
+ "pointer-events-none block rounded-sm",
38
38
  "bg-edge data-[state=checked]:bg-accent",
39
39
  "transition-all motion-reduce:transition-none",
40
40
  "data-[state=unchecked]:translate-x-0.5",
@@ -221,43 +221,40 @@ export function Table<T>({
221
221
  </td>
222
222
  </tr>
223
223
  ) : (
224
- sortedData.map((row) => (
225
- <tr
226
- key={keyExtractor(row)}
227
- className={cn(
228
- "border-b border-edge transition-all",
229
- activeKey === keyExtractor(row)
230
- ? "bg-accent/15 shadow-[inset_3px_0_0_var(--accent)]"
231
- : "even:bg-muted/30",
232
- "hover:bg-muted/50",
233
- onRowClick &&
234
- "cursor-pointer hover:shadow-[inset_3px_0_0_var(--accent)]",
235
- )}
236
- aria-current={
237
- activeKey === keyExtractor(row) ? "true" : undefined
238
- }
239
- style={{ transitionDuration: "var(--duration-fast)" }}
240
- tabIndex={onRowClick ? 0 : undefined}
241
- onClick={onRowClick ? () => onRowClick(row) : undefined}
242
- onKeyDown={
243
- onRowClick
244
- ? (e) => handleRowKeyDown(e, row)
245
- : undefined
246
- }
247
- >
248
- {columns.map((col) => (
249
- <td
250
- key={col.id ?? col.header}
251
- className={cn(
252
- "px-4 py-3 text-sm",
253
- alignClass[col.align ?? "left"],
254
- )}
255
- >
256
- {col.accessor(row)}
257
- </td>
258
- ))}
259
- </tr>
260
- ))
224
+ sortedData.map((row) => {
225
+ const isActive = activeKey === keyExtractor(row);
226
+ return (
227
+ <tr
228
+ key={keyExtractor(row)}
229
+ className={cn(
230
+ "border-b border-edge transition-all",
231
+ isActive
232
+ ? "bg-accent/15 shadow-[inset_3px_0_0_var(--accent)] hover:bg-accent/20"
233
+ : "even:bg-muted/30 hover:bg-muted/50",
234
+ onRowClick && "cursor-pointer",
235
+ )}
236
+ aria-current={isActive ? "true" : undefined}
237
+ style={{ transitionDuration: "var(--duration-fast)" }}
238
+ tabIndex={onRowClick ? 0 : undefined}
239
+ onClick={onRowClick ? () => onRowClick(row) : undefined}
240
+ onKeyDown={
241
+ onRowClick ? (e) => handleRowKeyDown(e, row) : undefined
242
+ }
243
+ >
244
+ {columns.map((col) => (
245
+ <td
246
+ key={col.id ?? col.header}
247
+ className={cn(
248
+ "px-4 py-3 text-sm",
249
+ alignClass[col.align ?? "left"],
250
+ )}
251
+ >
252
+ {col.accessor(row)}
253
+ </td>
254
+ ))}
255
+ </tr>
256
+ );
257
+ })
261
258
  )}
262
259
  </tbody>
263
260
  </table>
@@ -211,7 +211,7 @@ const OverflowTrigger = forwardRef<HTMLButtonElement, OverflowTriggerProps>(
211
211
  "motion-reduce:transition-none",
212
212
  isPill
213
213
  ? cn(
214
- "relative z-10 rounded-[2px]",
214
+ "relative z-10 rounded-sm",
215
215
  isSmall ? "px-2 py-0.5 text-xs" : "px-3 py-1.5 text-sm",
216
216
  )
217
217
  : isSmall
@@ -227,7 +227,7 @@ const OverflowTrigger = forwardRef<HTMLButtonElement, OverflowTriggerProps>(
227
227
  <DropdownMenu.Content
228
228
  className={cn(
229
229
  "z-50 min-w-[8rem]",
230
- "rounded-none bg-popover-bg border border-popover-border shadow",
230
+ "rounded-sm bg-popover-bg border border-popover-border shadow",
231
231
  "p-1",
232
232
  "motion-reduce:transition-none",
233
233
  )}
@@ -252,7 +252,7 @@ const OverflowTrigger = forwardRef<HTMLButtonElement, OverflowTriggerProps>(
252
252
  });
253
253
  }}
254
254
  className={cn(
255
- "flex w-full items-center rounded-none px-3 py-2",
255
+ "flex w-full items-center rounded-sm px-3 py-2",
256
256
  "text-sm text-foreground cursor-pointer select-none",
257
257
  "outline-none",
258
258
  "hover:bg-muted focus-visible:bg-muted",
@@ -360,7 +360,7 @@ const TabsList = forwardRef<HTMLDivElement, TabsListProps>(
360
360
  "group relative flex",
361
361
  isPill
362
362
  ? [
363
- "rounded-[2px] bg-muted border border-edge",
363
+ "rounded-sm bg-muted border border-edge",
364
364
  isSmall ? "p-0.5" : "p-1",
365
365
  !isCollapse && "inline-flex",
366
366
  ]
@@ -387,7 +387,7 @@ const TabsList = forwardRef<HTMLDivElement, TabsListProps>(
387
387
  isPill
388
388
  ? [
389
389
  isSmall ? "inset-y-0.5" : "inset-y-1",
390
- "rounded-[2px] bg-accent/15",
390
+ "rounded-sm bg-accent/15",
391
391
  ready ? "opacity-100" : "opacity-0",
392
392
  ready
393
393
  ? "transition-[transform,width,opacity] duration-200 ease-out"
@@ -435,7 +435,7 @@ const TabsTrigger = forwardRef<
435
435
  "group-data-[size=sm]:text-sm group-data-[size=sm]:gap-1.5",
436
436
  // Pill variant overrides (via group data attribute on TabsList)
437
437
  "group-data-[variant=pill]:relative group-data-[variant=pill]:z-10",
438
- "group-data-[variant=pill]:rounded-[2px]",
438
+ "group-data-[variant=pill]:rounded-sm",
439
439
  "group-data-[variant=pill]:px-5 group-data-[variant=pill]:py-1.5",
440
440
  "group-data-[variant=pill]:text-sm",
441
441
  "group-data-[variant=pill]:text-muted-foreground",
@@ -6,7 +6,7 @@ const textareaVariants = cva(
6
6
  [
7
7
  "w-full font-sans text-foreground",
8
8
  "bg-background dark:bg-surface",
9
- "border border-edge rounded-none",
9
+ "border border-edge rounded-sm",
10
10
  "placeholder:text-muted-foreground",
11
11
  "focus-visible:outline-none",
12
12
  "focus-visible:border-accent-700 dark:focus-visible:border-accent",
@@ -16,7 +16,7 @@ const TooltipContent = forwardRef<
16
16
  sideOffset={sideOffset}
17
17
  className={cn(
18
18
  [
19
- "z-50 rounded-none bg-popover-bg border border-popover-border px-3 py-1.5",
19
+ "z-50 rounded-sm bg-popover-bg border border-popover-border px-3 py-1.5",
20
20
  "text-sm text-foreground shadow-sm",
21
21
  "animate-in fade-in-0 zoom-in-95",
22
22
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
@@ -9,7 +9,7 @@ const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(
9
9
  <div
10
10
  ref={ref}
11
11
  aria-hidden="true"
12
- className={cn("animate-pulse motion-reduce:animate-none rounded-none bg-muted", className)}
12
+ className={cn("animate-pulse motion-reduce:animate-none rounded-sm bg-muted", className)}
13
13
  {...rest}
14
14
  />
15
15
  );
@@ -119,11 +119,11 @@
119
119
  --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif;
120
120
  --font-mono: "Departure Mono", ui-monospace, monospace;
121
121
 
122
- /* Radius vocabulary (Abyssal Void — 0/0/2/4, full reserved for round-by-design) */
123
- --radius-sm: 0;
124
- --radius-md: 0;
125
- --radius-lg: 2px;
126
- --radius-xl: 4px;
122
+ /* Radius vocabulary (Abyssal Void — 4/6/8 hard floor, full reserved for round-by-design) */
123
+ --radius-sm: 4px;
124
+ --radius-md: 4px;
125
+ --radius-lg: 6px;
126
+ --radius-xl: 8px;
127
127
  }
128
128
 
129
129
  /* ──────────────────────────────────────────────
@@ -148,8 +148,8 @@
148
148
  --muted-foreground: oklch(0.55 0.014 270);
149
149
  --surface: oklch(0.94 0.009 270);
150
150
  --surface-foreground: oklch(0.22 0.015 270);
151
- --edge: oklch(0.87 0.013 270);
152
- --edge-hover: oklch(0.80 0.015 270);
151
+ --edge: rgba(0, 0, 0, 0.14);
152
+ --edge-hover: rgba(0, 0, 0, 0.22);
153
153
  --popover-bg: var(--surface);
154
154
  --popover-border: var(--edge);
155
155
 
@@ -180,8 +180,8 @@
180
180
  --muted-foreground: oklch(0.62 0.012 273);
181
181
  --surface: oklch(0.18 0.005 273);
182
182
  --surface-foreground: #f3f3f3;
183
- --edge: rgba(255, 255, 255, 0.16);
184
- --edge-hover: rgba(255, 255, 255, 0.24);
183
+ --edge: rgba(255, 255, 255, 0.10);
184
+ --edge-hover: rgba(255, 255, 255, 0.20);
185
185
  --popover-bg: var(--surface);
186
186
  --popover-border: var(--edge);
187
187
 
@@ -223,7 +223,7 @@
223
223
  detected from source files. This directive feeds
224
224
  them directly into the candidate list.
225
225
  ────────────────────────────────────────────── */
226
- @source inline("group-data-[variant=pill]:relative group-data-[variant=pill]:z-10 group-data-[variant=pill]:rounded-[2px] group-data-[variant=pill]:px-5 group-data-[variant=pill]:py-1.5 group-data-[variant=pill]:text-sm group-data-[variant=pill]:text-muted-foreground group-data-[variant=pill]:translate-y-0 group-data-[variant=pill]:hover:text-accent-500 dark:group-data-[variant=pill]:hover:text-accent group-data-[variant=pill]:data-[state=active]:text-accent-500 dark:group-data-[variant=pill]:data-[state=active]:text-accent group-data-[variant=pill]:data-[state=active]:translate-y-0");
226
+ @source inline("group-data-[variant=pill]:relative group-data-[variant=pill]:z-10 group-data-[variant=pill]:rounded-sm group-data-[variant=pill]:px-5 group-data-[variant=pill]:py-1.5 group-data-[variant=pill]:text-sm group-data-[variant=pill]:text-muted-foreground group-data-[variant=pill]:translate-y-0 group-data-[variant=pill]:hover:text-accent-500 dark:group-data-[variant=pill]:hover:text-accent group-data-[variant=pill]:data-[state=active]:text-accent-500 dark:group-data-[variant=pill]:data-[state=active]:text-accent group-data-[variant=pill]:data-[state=active]:translate-y-0");
227
227
 
228
228
  /* ──────────────────────────────────────────────
229
229
  Utilities: gradient border effects