@casoon/atlas-styles 0.0.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.
@@ -0,0 +1,1410 @@
1
+ /*!
2
+ * CASOON Atlas Utilities - Comprehensive Utility System for Tailwind v4
3
+ * Version: 0.0.1
4
+ * Repository: https://github.com/casoon/atlas
5
+ * Author: Jörn Seidel (joern.seidel@casoon.de)
6
+ * License: MIT
7
+ *
8
+ * Complete utility system with modern design tokens
9
+ * Part of CASOON Atlas UI effects library
10
+ *
11
+ * Usage: @import "@casoon/atlas-styles/utilities";
12
+ * Package: @casoon/atlas-styles
13
+ */
14
+
15
+ /* Note: @import "tailwindcss"; should be added by the consumer */
16
+
17
+ /*!
18
+ * CASOON Atlas Utilities - Complete Utility System for Tailwind v4
19
+ * TOTAL: 8 CSS FILES → Pure Tailwind v4 (120+ classes + 80+ @utility)
20
+ *
21
+ * Features:
22
+ * ✅ Tree-Shaking Support with @utility directives
23
+ * ✅ Modern Design System with comprehensive tokens
24
+ * ✅ Accessibility-first components and utilities
25
+ * ✅ Progressive Enhancement & Fallbacks
26
+ * ✅ Container Queries & Responsive Design
27
+ * ✅ Performance optimized with reduced motion support
28
+ * ✅ SSR-safe, tree-shakeable, framework-agnostic
29
+ */
30
+
31
+ /* Note: @import "tailwindcss"; should be added by the consumer */
32
+
33
+ /* =========================================================
34
+ CONSOLIDATED DESIGN TOKENS & THEME
35
+ Complete design system with light/dark theme support
36
+ ========================================================= */
37
+ @theme {
38
+ /* === CORE COLOR SYSTEM === */
39
+ --cs-bg: #0b0c0f;
40
+ --cs-surface: #14161a;
41
+ --cs-elev1: #1b1e24;
42
+ --cs-elev2: #21252d;
43
+ --cs-text: #eef1f6;
44
+ --cs-text-muted: #b6bfcc;
45
+ --cs-border: #2a2f39;
46
+ --cs-brand: #4f7cff;
47
+ --cs-brand-contrast: #0b0d12;
48
+ --cs-brand-ink: var(--cs-brand-contrast);
49
+
50
+ /* STATE COLORS */
51
+ --cs-success: #22c55e;
52
+ --cs-warning: #f59e0b;
53
+ --cs-danger: #ef4444;
54
+ --cs-info: #06b6d4;
55
+
56
+ /* === TYPOGRAPHY SYSTEM === */
57
+ --cs-font-sans:
58
+ ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Inter,
59
+ 'Helvetica Neue', Arial, 'Noto Sans', 'Liberation Sans', sans-serif;
60
+ --cs-font-mono:
61
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',
62
+ 'Courier New', monospace;
63
+ --cs-font-size: 16px;
64
+ --cs-line: 1.5;
65
+
66
+ /* FLUID TYPOGRAPHY SCALE */
67
+ --cs-fs-xs: clamp(0.78rem, 0.75rem + 0.2cqi, 0.84rem);
68
+ --cs-fs-sm: clamp(0.88rem, 0.82rem + 0.3cqi, 0.95rem);
69
+ --cs-fs-md: clamp(1rem, 0.95rem + 0.4cqi, 1.125rem);
70
+ --cs-fs-lg: clamp(1.25rem, 1.05rem + 0.8cqi, 1.5rem);
71
+ --cs-fs-xl: clamp(1.5rem, 1.2rem + 1.2cqi, 1.875rem);
72
+ --cs-fs-2xl: clamp(1.875rem, 1.4rem + 1.6cqi, 2.25rem);
73
+
74
+ /* TYPOGRAPHY UTILITIES */
75
+ --cs-leading-relaxed: 1.625;
76
+ --cs-leading-loose: 2;
77
+ --cs-text-balance: balance;
78
+
79
+ /* === SPACING SYSTEM === */
80
+ --cs-density: 1;
81
+ --cs-space-1: calc(4px * var(--cs-density));
82
+ --cs-space-2: calc(8px * var(--cs-density));
83
+ --cs-space-3: calc(12px * var(--cs-density));
84
+ --cs-space-4: calc(16px * var(--cs-density));
85
+ --cs-space-6: calc(24px * var(--cs-density));
86
+ --cs-space-8: calc(32px * var(--cs-density));
87
+
88
+ /* === RADIUS & SHADOW SYSTEM === */
89
+ --cs-radius: 10px;
90
+ --cs-radius-sm: calc(var(--cs-radius) - 4px);
91
+ --cs-radius-lg: calc(var(--cs-radius) + 6px);
92
+
93
+ --cs-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px 1px rgba(0, 0, 0, 0.1);
94
+ --cs-shadow-2: 0 8px 24px rgba(0, 0, 0, 0.22), 0 2px 8px rgba(0, 0, 0, 0.18);
95
+
96
+ /* === MOTION SYSTEM === */
97
+ --cs-transition: 180ms cubic-bezier(0.2, 0.6, 0.2, 1);
98
+ --cs-anim-duration-sm: 160ms;
99
+ --cs-anim-duration-md: 280ms;
100
+ --cs-anim-duration-lg: 420ms;
101
+ --cs-anim-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
102
+ --cs-anim-ease-in: cubic-bezier(0.32, 0, 0.67, 0);
103
+ --cs-anim-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
104
+
105
+ /* === Z-INDEX SYSTEM === */
106
+ --cs-z-0: 0;
107
+ --cs-z-1: 1;
108
+ --cs-z-base: 1;
109
+ --cs-z-10: 10;
110
+ --cs-z-20: 20;
111
+ --cs-z-30: 30;
112
+ --cs-z-popover: 30;
113
+ --cs-z-40: 40;
114
+ --cs-z-tooltip: 40;
115
+ --cs-z-50: 50;
116
+ --cs-z-toast: 50;
117
+ --cs-z-60: 60;
118
+ --cs-z-modal: 60;
119
+ --cs-z-70: 70;
120
+ --cs-z-80: 80;
121
+ --cs-z-90: 90;
122
+ --cs-z-100: 100;
123
+ --cs-z-200: 200;
124
+ --cs-z-300: 300;
125
+ --cs-z-400: 400;
126
+ --cs-z-500: 500;
127
+ --cs-z-600: 600;
128
+ --cs-z-700: 700;
129
+ --cs-z-800: 800;
130
+ --cs-z-900: 900;
131
+ --cs-z-999: 999;
132
+ --cs-z-9999: 9999;
133
+ --cs-z-max: 2147483647;
134
+
135
+ /* === LAYOUT SYSTEM === */
136
+ --cs-page-max: 1200px;
137
+ --cs-page-pad: var(--cs-space-4);
138
+
139
+ /* === GLASS/BACKDROP SYSTEM === */
140
+ --cs-acrylic-blur: 14px;
141
+ --cs-acrylic-tint: rgba(20, 22, 26, 0.55);
142
+ --cs-acrylic-border: rgba(255, 255, 255, 0.06);
143
+
144
+ /* === PROGRESSIVE COLOR TOKENS === */
145
+ --cs-brand-oklch: oklch(60% 0.15 255);
146
+ }
147
+
148
+ /* =========================================================
149
+ LIGHT THEME SUPPORT
150
+ Complete theme switching system
151
+ ========================================================= */
152
+ @media (prefers-color-scheme: light) {
153
+ @theme {
154
+ --cs-bg: #ffffff;
155
+ --cs-surface: #f7f8fa;
156
+ --cs-elev1: #ffffff;
157
+ --cs-elev2: #ffffff;
158
+ --cs-text: #101217;
159
+ --cs-text-muted: #475066;
160
+ --cs-border: #dfe3ea;
161
+ --cs-brand: #375dfb;
162
+ --cs-brand-contrast: #ffffff;
163
+ --cs-shadow-1:
164
+ 0 1px 2px rgba(18, 24, 40, 0.06), 0 1px 1px rgba(18, 24, 40, 0.04);
165
+ --cs-shadow-2:
166
+ 0 10px 24px rgba(18, 24, 40, 0.1), 0 2px 8px rgba(18, 24, 40, 0.06);
167
+ --cs-acrylic-tint: rgba(255, 255, 255, 0.65);
168
+ --cs-acrylic-border: rgba(0, 0, 0, 0.06);
169
+ }
170
+ }
171
+
172
+ /* Manual theme override classes */
173
+ .cs-theme-light {
174
+ --cs-bg: #ffffff;
175
+ --cs-surface: #f7f8fa;
176
+ --cs-elev1: #ffffff;
177
+ --cs-elev2: #ffffff;
178
+ --cs-text: #101217;
179
+ --cs-text-muted: #475066;
180
+ --cs-border: #dfe3ea;
181
+ --cs-brand: #375dfb;
182
+ --cs-brand-contrast: #ffffff;
183
+ --cs-shadow-1:
184
+ 0 1px 2px rgba(18, 24, 40, 0.06), 0 1px 1px rgba(18, 24, 40, 0.04);
185
+ --cs-shadow-2:
186
+ 0 10px 24px rgba(18, 24, 40, 0.1), 0 2px 8px rgba(18, 24, 40, 0.06);
187
+ --cs-acrylic-tint: rgba(255, 255, 255, 0.65);
188
+ --cs-acrylic-border: rgba(0, 0, 0, 0.06);
189
+ }
190
+
191
+ .cs-theme-dark {
192
+ --cs-bg: #0b0c0f;
193
+ --cs-surface: #14161a;
194
+ --cs-elev1: #1b1e24;
195
+ --cs-elev2: #21252d;
196
+ --cs-text: #eef1f6;
197
+ --cs-text-muted: #b6bfcc;
198
+ --cs-border: #2a2f39;
199
+ --cs-brand: #4f7cff;
200
+ --cs-brand-contrast: #0b0d12;
201
+ }
202
+
203
+ /* =========================================================
204
+ ACCESSIBILITY UTILITIES
205
+ Screen readers, focus management, keyboard navigation
206
+ ========================================================= */
207
+
208
+ @utility cs-sr-only {
209
+ position: absolute;
210
+ width: 1px;
211
+ height: 1px;
212
+ padding: 0;
213
+ margin: -1px;
214
+ overflow: hidden;
215
+ clip: rect(0, 0, 0, 0);
216
+ white-space: nowrap;
217
+ border: 0;
218
+ }
219
+
220
+ @utility cs-focus-ring {
221
+ outline: none;
222
+
223
+ &:focus-visible {
224
+ outline: 2px solid transparent;
225
+ outline-offset: 2px;
226
+ box-shadow:
227
+ 0 0 0 2px var(--cs-brand, #4f7cff),
228
+ 0 0 0 4px color-mix(in srgb, var(--cs-brand, #4f7cff) 20%, transparent);
229
+ transition: box-shadow var(--cs-transition);
230
+ }
231
+ }
232
+
233
+ @utility cs-focus-ring-within {
234
+ &:focus-within {
235
+ box-shadow:
236
+ 0 0 0 2px var(--cs-brand, #4f7cff),
237
+ 0 0 0 6px color-mix(in srgb, var(--cs-brand, #4f7cff) 22%, transparent);
238
+ border-radius: var(--cs-radius);
239
+ }
240
+ }
241
+
242
+ /* =========================================================
243
+ Z-INDEX UTILITIES
244
+ Complete z-index scale for modern UI layering
245
+ ========================================================= */
246
+
247
+ @utility cs-z-0 {
248
+ z-index: var(--cs-z-0);
249
+ position: relative;
250
+ }
251
+ @utility cs-z-1 {
252
+ z-index: var(--cs-z-1);
253
+ position: relative;
254
+ }
255
+ @utility cs-z-base {
256
+ z-index: var(--cs-z-base);
257
+ position: relative;
258
+ }
259
+ @utility cs-z-10 {
260
+ z-index: var(--cs-z-10);
261
+ position: relative;
262
+ }
263
+ @utility cs-z-20 {
264
+ z-index: var(--cs-z-20);
265
+ position: relative;
266
+ }
267
+ @utility cs-z-30 {
268
+ z-index: var(--cs-z-30);
269
+ position: relative;
270
+ }
271
+ @utility cs-z-popover {
272
+ z-index: var(--cs-z-popover);
273
+ position: relative;
274
+ }
275
+ @utility cs-z-40 {
276
+ z-index: var(--cs-z-40);
277
+ position: relative;
278
+ }
279
+ @utility cs-z-tooltip {
280
+ z-index: var(--cs-z-tooltip);
281
+ position: relative;
282
+ }
283
+ @utility cs-z-50 {
284
+ z-index: var(--cs-z-50);
285
+ position: relative;
286
+ }
287
+ @utility cs-z-toast {
288
+ z-index: var(--cs-z-toast);
289
+ position: relative;
290
+ }
291
+ @utility cs-z-60 {
292
+ z-index: var(--cs-z-60);
293
+ position: relative;
294
+ }
295
+ @utility cs-z-modal {
296
+ z-index: var(--cs-z-modal);
297
+ position: relative;
298
+ }
299
+ @utility cs-z-70 {
300
+ z-index: var(--cs-z-70);
301
+ position: relative;
302
+ }
303
+ @utility cs-z-80 {
304
+ z-index: var(--cs-z-80);
305
+ position: relative;
306
+ }
307
+ @utility cs-z-90 {
308
+ z-index: var(--cs-z-90);
309
+ position: relative;
310
+ }
311
+ @utility cs-z-100 {
312
+ z-index: var(--cs-z-100);
313
+ position: relative;
314
+ }
315
+ @utility cs-z-200 {
316
+ z-index: var(--cs-z-200);
317
+ position: relative;
318
+ }
319
+ @utility cs-z-300 {
320
+ z-index: var(--cs-z-300);
321
+ position: relative;
322
+ }
323
+ @utility cs-z-400 {
324
+ z-index: var(--cs-z-400);
325
+ position: relative;
326
+ }
327
+ @utility cs-z-500 {
328
+ z-index: var(--cs-z-500);
329
+ position: relative;
330
+ }
331
+ @utility cs-z-600 {
332
+ z-index: var(--cs-z-600);
333
+ position: relative;
334
+ }
335
+ @utility cs-z-700 {
336
+ z-index: var(--cs-z-700);
337
+ position: relative;
338
+ }
339
+ @utility cs-z-800 {
340
+ z-index: var(--cs-z-800);
341
+ position: relative;
342
+ }
343
+ @utility cs-z-900 {
344
+ z-index: var(--cs-z-900);
345
+ position: relative;
346
+ }
347
+ @utility cs-z-999 {
348
+ z-index: var(--cs-z-999);
349
+ position: relative;
350
+ }
351
+ @utility cs-z-9999 {
352
+ z-index: var(--cs-z-9999);
353
+ position: relative;
354
+ }
355
+ @utility cs-z-max {
356
+ z-index: var(--cs-z-max);
357
+ position: relative;
358
+ }
359
+
360
+ /* =========================================================
361
+ CORE UTILITIES & COMPONENTS
362
+ Main utility definitions using modern @utility syntax
363
+ ========================================================= */
364
+
365
+ /* === LOADING & PROGRESS UTILITIES === */
366
+
367
+ @utility cs-spinner {
368
+ animation: cs-rotate 1s linear infinite;
369
+ will-change: transform;
370
+ }
371
+
372
+ @utility cs-skeleton {
373
+ background: linear-gradient(
374
+ 90deg,
375
+ var(--cs-border) 25%,
376
+ var(--cs-elev1) 50%,
377
+ var(--cs-border) 75%
378
+ );
379
+ background-size: 200% 100%;
380
+ animation: cs-shimmer 1.5s ease-in-out infinite;
381
+ border-radius: var(--cs-radius);
382
+ }
383
+
384
+ @keyframes cs-shimmer {
385
+ 0% {
386
+ background-position: -200% 0;
387
+ }
388
+ 100% {
389
+ background-position: 200% 0;
390
+ }
391
+ }
392
+
393
+ @keyframes cs-rotate {
394
+ from {
395
+ transform: rotate(0deg);
396
+ }
397
+ to {
398
+ transform: rotate(360deg);
399
+ }
400
+ }
401
+
402
+ @utility cs-progress {
403
+ width: 100%;
404
+ height: 8px;
405
+ background: var(--cs-border);
406
+ border-radius: var(--cs-radius);
407
+ overflow: hidden;
408
+ position: relative;
409
+ }
410
+
411
+ @utility cs-progress-bar {
412
+ height: 100%;
413
+ background: var(--cs-brand);
414
+ border-radius: inherit;
415
+ transition: width var(--cs-transition);
416
+ }
417
+
418
+ @utility cs-progress-indeterminate {
419
+ background: linear-gradient(90deg, transparent, var(--cs-brand), transparent);
420
+ background-size: 200% 100%;
421
+ animation: cs-progress-slide 1.5s ease-in-out infinite;
422
+ }
423
+
424
+ @keyframes cs-progress-slide {
425
+ 0% {
426
+ background-position: -200% 0;
427
+ }
428
+ 100% {
429
+ background-position: 200% 0;
430
+ }
431
+ }
432
+
433
+ /* === SCROLL & OVERFLOW UTILITIES === */
434
+
435
+ @utility cs-scroll-smooth {
436
+ scroll-behavior: smooth;
437
+ }
438
+
439
+ @utility cs-scroll-auto {
440
+ scroll-behavior: auto;
441
+ }
442
+
443
+ @utility cs-scrollbar-thin {
444
+ scrollbar-width: thin;
445
+ }
446
+
447
+ @utility cs-scrollbar-none {
448
+ scrollbar-width: none;
449
+ -ms-overflow-style: none;
450
+
451
+ &::-webkit-scrollbar {
452
+ display: none;
453
+ }
454
+ }
455
+
456
+ @utility cs-snap-x {
457
+ scroll-snap-type: x mandatory;
458
+ }
459
+
460
+ @utility cs-snap-y {
461
+ scroll-snap-type: y mandatory;
462
+ }
463
+
464
+ @utility cs-snap-both {
465
+ scroll-snap-type: both mandatory;
466
+ }
467
+
468
+ @utility cs-snap-none {
469
+ scroll-snap-type: none;
470
+ }
471
+
472
+ @utility cs-snap-start {
473
+ scroll-snap-align: start;
474
+ }
475
+
476
+ @utility cs-snap-end {
477
+ scroll-snap-align: end;
478
+ }
479
+
480
+ @utility cs-snap-center {
481
+ scroll-snap-align: center;
482
+ }
483
+
484
+ /* === ENHANCED CARD UTILITIES === */
485
+
486
+ @utility cs-card-product {
487
+ background: var(--cs-elev1);
488
+ border: 1px solid var(--cs-border);
489
+ border-radius: var(--cs-radius-lg);
490
+ padding: var(--cs-space-6);
491
+ transition: all var(--cs-transition);
492
+ position: relative;
493
+ overflow: hidden;
494
+
495
+ &:hover {
496
+ transform: translateY(-2px);
497
+ box-shadow: var(--cs-shadow-2);
498
+ border-color: var(--cs-brand);
499
+ }
500
+ }
501
+
502
+ @utility cs-card-hero {
503
+ background: linear-gradient(135deg, var(--cs-elev1), var(--cs-elev2));
504
+ border: 1px solid var(--cs-border);
505
+ border-radius: var(--cs-radius-lg);
506
+ padding: var(--cs-space-8);
507
+ text-align: center;
508
+ position: relative;
509
+ overflow: hidden;
510
+
511
+ &::before {
512
+ content: '';
513
+ position: absolute;
514
+ top: 0;
515
+ left: 0;
516
+ right: 0;
517
+ height: 4px;
518
+ background: linear-gradient(
519
+ 90deg,
520
+ var(--cs-brand),
521
+ var(--cs-success),
522
+ var(--cs-info)
523
+ );
524
+ }
525
+ }
526
+
527
+ @utility cs-card-compact {
528
+ background: var(--cs-elev1);
529
+ border: 1px solid var(--cs-border);
530
+ border-radius: var(--cs-radius);
531
+ padding: var(--cs-space-4);
532
+ display: flex;
533
+ align-items: center;
534
+ gap: var(--cs-space-3);
535
+ transition: all var(--cs-transition);
536
+
537
+ &:hover {
538
+ background: var(--cs-elev2);
539
+ }
540
+ }
541
+
542
+ @utility cs-container-fluid {
543
+ width: 100%;
544
+ padding-left: var(--cs-page-pad);
545
+ padding-right: var(--cs-page-pad);
546
+ margin-left: auto;
547
+ margin-right: auto;
548
+ max-width: none;
549
+ background-color: var(--cs-surface, #14161a);
550
+ color: var(--cs-text, #eef1f6);
551
+
552
+ @container (min-width: 768px) {
553
+ padding-left: calc(var(--cs-page-pad) + var(--cs-space-2));
554
+ padding-right: calc(var(--cs-page-pad) + var(--cs-space-2));
555
+ }
556
+
557
+ @container (min-width: 1200px) {
558
+ max-width: var(--cs-page-max);
559
+ }
560
+ }
561
+
562
+ /* =========================================================
563
+ LAYOUT UTILITIES
564
+ Modern layout patterns and micro-recipes
565
+ ========================================================= */
566
+
567
+ @utility cs-stack {
568
+ display: grid;
569
+ gap: var(--cs-space-3);
570
+ }
571
+
572
+ @utility cs-stack-sm {
573
+ display: grid;
574
+ gap: var(--cs-space-2);
575
+ }
576
+
577
+ @utility cs-stack-lg {
578
+ display: grid;
579
+ gap: var(--cs-space-6);
580
+ }
581
+
582
+ @utility cs-cluster {
583
+ display: flex;
584
+ flex-wrap: wrap;
585
+ gap: var(--cs-space-2);
586
+ align-items: center;
587
+ }
588
+
589
+ @utility cs-center {
590
+ display: grid;
591
+ place-items: center;
592
+ }
593
+
594
+ @utility cs-grid-fit {
595
+ display: grid;
596
+ gap: var(--cs-space-3);
597
+ grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
598
+ }
599
+
600
+ @utility cs-aspect {
601
+ aspect-ratio: var(--cs-aspect, 16 / 9);
602
+ }
603
+
604
+ @utility cs-bleed-x {
605
+ margin-inline: calc(var(--cs-page-pad) * -1);
606
+
607
+ @container (min-width: 960px) {
608
+ margin-inline: calc((var(--cs-page-pad) + var(--cs-space-3)) * -1);
609
+ }
610
+ }
611
+
612
+ @utility cs-safe-pad {
613
+ padding-inline: max(var(--cs-page-pad), env(safe-area-inset-left));
614
+ padding-inline-end: max(var(--cs-page-pad), env(safe-area-inset-right));
615
+ padding-block-end: max(var(--cs-space-4), env(safe-area-inset-bottom));
616
+ }
617
+
618
+ /* Layout positioning utilities */
619
+ @utility cs-sticky {
620
+ position: sticky;
621
+ top: 0;
622
+ }
623
+
624
+ @utility cs-will-change-transform {
625
+ will-change: transform;
626
+ }
627
+
628
+ @utility cs-will-change-opacity {
629
+ will-change: opacity;
630
+ }
631
+
632
+ /* =========================================================
633
+ TYPOGRAPHY UTILITIES
634
+ Fluid typography with line height optimization
635
+ ========================================================= */
636
+
637
+ @utility cs-text-xs {
638
+ font-size: var(--cs-fs-xs);
639
+ line-height: var(--cs-line);
640
+ }
641
+
642
+ @utility cs-text-sm {
643
+ font-size: var(--cs-fs-sm);
644
+ line-height: var(--cs-line);
645
+ }
646
+
647
+ @utility cs-text-md {
648
+ font-size: var(--cs-fs-md);
649
+ line-height: var(--cs-line);
650
+ }
651
+
652
+ @utility cs-text-lg {
653
+ font-size: var(--cs-fs-lg);
654
+ line-height: calc(var(--cs-line) + 0.05);
655
+ }
656
+
657
+ @utility cs-text-xl {
658
+ font-size: var(--cs-fs-xl);
659
+ line-height: calc(var(--cs-line) + 0.1);
660
+ }
661
+
662
+ @utility cs-text-2xl {
663
+ font-size: var(--cs-fs-2xl);
664
+ line-height: calc(var(--cs-line) + 0.12);
665
+ }
666
+
667
+ @utility cs-font-sans {
668
+ font-family: var(--cs-font-sans);
669
+ }
670
+
671
+ @utility cs-font-mono {
672
+ font-family: var(--cs-font-mono);
673
+ }
674
+
675
+ /* =========================================================
676
+ GRID UTILITIES
677
+ Advanced grid system with auto-fit patterns
678
+ ========================================================= */
679
+
680
+ @utility cs-grid-auto-fit-sm {
681
+ display: grid;
682
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
683
+ gap: var(--cs-space-4);
684
+ }
685
+
686
+ @utility cs-grid-auto-fit-md {
687
+ display: grid;
688
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
689
+ gap: var(--cs-space-4);
690
+ }
691
+
692
+ @utility cs-grid-auto-fit-lg {
693
+ display: grid;
694
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
695
+ gap: var(--cs-space-4);
696
+ }
697
+
698
+ @utility cs-grid-12 {
699
+ display: grid;
700
+ grid-template-columns: repeat(12, 1fr);
701
+ gap: var(--cs-space-4);
702
+ }
703
+
704
+ /* Fixed grid columns */
705
+ @utility cs-grid-cols-2 {
706
+ display: grid;
707
+ grid-template-columns: repeat(2, 1fr);
708
+ gap: var(--cs-space-4);
709
+ }
710
+
711
+ @utility cs-grid-cols-3 {
712
+ display: grid;
713
+ grid-template-columns: repeat(3, 1fr);
714
+ gap: var(--cs-space-4);
715
+ }
716
+
717
+ @utility cs-grid-cols-4 {
718
+ display: grid;
719
+ grid-template-columns: repeat(4, 1fr);
720
+ gap: var(--cs-space-4);
721
+ }
722
+
723
+ @utility cs-grid-cols-6 {
724
+ display: grid;
725
+ grid-template-columns: repeat(6, 1fr);
726
+ gap: var(--cs-space-4);
727
+ }
728
+
729
+ @utility cs-grid-cols-8 {
730
+ display: grid;
731
+ grid-template-columns: repeat(8, 1fr);
732
+ gap: var(--cs-space-4);
733
+ }
734
+
735
+ @utility cs-grid-cols-9 {
736
+ display: grid;
737
+ grid-template-columns: repeat(9, 1fr);
738
+ gap: var(--cs-space-4);
739
+ }
740
+
741
+ @utility cs-grid-cols-12 {
742
+ display: grid;
743
+ grid-template-columns: repeat(12, 1fr);
744
+ gap: var(--cs-space-4);
745
+ }
746
+
747
+ /* Column spanning utilities for use within cs-grid-12 */
748
+ @utility cs-col-1 {
749
+ grid-column: span 1;
750
+ }
751
+ @utility cs-col-2 {
752
+ grid-column: span 2;
753
+ }
754
+ @utility cs-col-3 {
755
+ grid-column: span 3;
756
+ }
757
+ @utility cs-col-4 {
758
+ grid-column: span 4;
759
+ }
760
+ @utility cs-col-5 {
761
+ grid-column: span 5;
762
+ }
763
+ @utility cs-col-6 {
764
+ grid-column: span 6;
765
+ }
766
+ @utility cs-col-7 {
767
+ grid-column: span 7;
768
+ }
769
+ @utility cs-col-8 {
770
+ grid-column: span 8;
771
+ }
772
+ @utility cs-col-9 {
773
+ grid-column: span 9;
774
+ }
775
+ @utility cs-col-10 {
776
+ grid-column: span 10;
777
+ }
778
+ @utility cs-col-11 {
779
+ grid-column: span 11;
780
+ }
781
+ @utility cs-col-12 {
782
+ grid-column: span 12;
783
+ }
784
+
785
+ /* =========================================================
786
+ SPACING UTILITIES
787
+ Gap, padding, margin utilities using design tokens
788
+ ========================================================= */
789
+
790
+ @utility cs-space-1 {
791
+ gap: var(--cs-space-1);
792
+ }
793
+ @utility cs-space-2 {
794
+ gap: var(--cs-space-2);
795
+ }
796
+ @utility cs-space-3 {
797
+ gap: var(--cs-space-3);
798
+ }
799
+ @utility cs-space-4 {
800
+ gap: var(--cs-space-4);
801
+ }
802
+ @utility cs-space-6 {
803
+ gap: var(--cs-space-6);
804
+ }
805
+ @utility cs-space-8 {
806
+ gap: var(--cs-space-8);
807
+ }
808
+
809
+ @utility cs-p-1 {
810
+ padding: var(--cs-space-1);
811
+ }
812
+ @utility cs-p-2 {
813
+ padding: var(--cs-space-2);
814
+ }
815
+ @utility cs-p-3 {
816
+ padding: var(--cs-space-3);
817
+ }
818
+ @utility cs-p-4 {
819
+ padding: var(--cs-space-4);
820
+ }
821
+ @utility cs-p-6 {
822
+ padding: var(--cs-space-6);
823
+ }
824
+ @utility cs-p-8 {
825
+ padding: var(--cs-space-8);
826
+ }
827
+
828
+ @utility cs-m-1 {
829
+ margin: var(--cs-space-1);
830
+ }
831
+ @utility cs-m-2 {
832
+ margin: var(--cs-space-2);
833
+ }
834
+ @utility cs-m-3 {
835
+ margin: var(--cs-space-3);
836
+ }
837
+ @utility cs-m-4 {
838
+ margin: var(--cs-space-4);
839
+ }
840
+ @utility cs-m-6 {
841
+ margin: var(--cs-space-6);
842
+ }
843
+ @utility cs-m-8 {
844
+ margin: var(--cs-space-8);
845
+ }
846
+
847
+ /* Directional spacing utilities */
848
+ @utility cs-px-1 {
849
+ padding-inline: var(--cs-space-1);
850
+ }
851
+ @utility cs-px-2 {
852
+ padding-inline: var(--cs-space-2);
853
+ }
854
+ @utility cs-px-3 {
855
+ padding-inline: var(--cs-space-3);
856
+ }
857
+ @utility cs-px-4 {
858
+ padding-inline: var(--cs-space-4);
859
+ }
860
+
861
+ @utility cs-py-1 {
862
+ padding-block: var(--cs-space-1);
863
+ }
864
+ @utility cs-py-2 {
865
+ padding-block: var(--cs-space-2);
866
+ }
867
+ @utility cs-py-3 {
868
+ padding-block: var(--cs-space-3);
869
+ }
870
+ @utility cs-py-4 {
871
+ padding-block: var(--cs-space-4);
872
+ }
873
+
874
+ /* === TYPOGRAPHY UTILITIES === */
875
+
876
+ @utility cs-text-balance {
877
+ text-wrap: var(--cs-text-balance);
878
+ }
879
+
880
+ @utility cs-text-gradient {
881
+ background: linear-gradient(135deg, var(--cs-brand), var(--cs-success));
882
+ background-clip: text;
883
+ -webkit-background-clip: text;
884
+ -webkit-text-fill-color: transparent;
885
+ color: transparent;
886
+ }
887
+
888
+ @utility cs-prose {
889
+ max-width: 65ch;
890
+ line-height: var(--cs-leading-relaxed);
891
+
892
+ & h1,
893
+ & h2,
894
+ & h3 {
895
+ text-wrap: var(--cs-text-balance);
896
+ margin-top: 2em;
897
+ margin-bottom: 1em;
898
+ }
899
+
900
+ & p {
901
+ margin-bottom: 1.25em;
902
+ }
903
+
904
+ & ul,
905
+ & ol {
906
+ padding-left: 2em;
907
+ margin-bottom: 1.25em;
908
+ }
909
+
910
+ & blockquote {
911
+ border-left: 4px solid var(--cs-border);
912
+ padding-left: 1em;
913
+ font-style: italic;
914
+ margin: 1.5em 0;
915
+ }
916
+ }
917
+
918
+ @utility cs-font-feature-numbers {
919
+ font-feature-settings: 'tnum';
920
+ }
921
+
922
+ /* =========================================================
923
+ REDUCED MOTION SUPPORT & ACCESSIBILITY
924
+ Full accessibility compliance for motion-sensitive users
925
+ ========================================================= */
926
+
927
+ @utility cs-surface {
928
+ background: var(--cs-surface);
929
+ color: var(--cs-text);
930
+ }
931
+
932
+ @utility cs-surface-elevated {
933
+ background: var(--cs-elev1);
934
+ color: var(--cs-text);
935
+ }
936
+
937
+ @utility cs-surface-raised {
938
+ background: var(--cs-elev2);
939
+ color: var(--cs-text);
940
+ }
941
+
942
+ @utility cs-bg-brand {
943
+ background-color: var(--cs-brand, #4f7cff);
944
+ color: var(--cs-brand-ink, #0b0d12);
945
+ }
946
+
947
+ /* Radius utilities */
948
+ @utility cs-radius-sm {
949
+ border-radius: var(--cs-radius-sm);
950
+ }
951
+ @utility cs-radius {
952
+ border-radius: var(--cs-radius);
953
+ }
954
+ @utility cs-radius-lg {
955
+ border-radius: var(--cs-radius-lg);
956
+ }
957
+
958
+ /* Shadow utilities */
959
+ @utility cs-shadow {
960
+ box-shadow: var(--cs-shadow-1);
961
+ }
962
+ @utility cs-shadow-lg {
963
+ box-shadow: var(--cs-shadow-2);
964
+ }
965
+
966
+ /* =========================================================
967
+ CARD COMPONENTS
968
+ Complete card system with variants
969
+ ========================================================= */
970
+
971
+ @utility cs-card {
972
+ background: var(--cs-surface);
973
+ border: 1px solid var(--cs-border);
974
+ border-radius: var(--cs-radius);
975
+ padding: var(--cs-space-4);
976
+ box-shadow: var(--cs-shadow-1);
977
+ }
978
+
979
+ @utility cs-card-elevated {
980
+ background: var(--cs-elev1);
981
+ border: 1px solid var(--cs-border);
982
+ border-radius: var(--cs-radius);
983
+ padding: var(--cs-space-4);
984
+ box-shadow: var(--cs-shadow-2);
985
+ }
986
+
987
+ /* =========================================================
988
+ BUTTON COMPONENTS
989
+ Complete button system with variants
990
+ ========================================================= */
991
+
992
+ @utility cs-btn {
993
+ display: inline-flex;
994
+ align-items: center;
995
+ justify-content: center;
996
+ padding: var(--cs-space-2) var(--cs-space-4);
997
+ border-radius: var(--cs-radius);
998
+ font-weight: 500;
999
+ text-decoration: none;
1000
+ transition: var(--cs-transition);
1001
+ cursor: pointer;
1002
+ border: 0;
1003
+ min-height: 44px; /* Touch target compliance */
1004
+ min-width: 44px;
1005
+ }
1006
+
1007
+ @utility cs-btn-primary {
1008
+ background: var(--cs-brand);
1009
+ color: var(--cs-brand-contrast);
1010
+
1011
+ &:hover {
1012
+ background: color-mix(in srgb, var(--cs-brand) 85%, black);
1013
+ }
1014
+
1015
+ &:focus-visible {
1016
+ outline: 2px solid transparent;
1017
+ outline-offset: 2px;
1018
+ box-shadow:
1019
+ 0 0 0 2px var(--cs-brand),
1020
+ 0 0 0 4px color-mix(in srgb, var(--cs-brand) 25%, transparent);
1021
+ }
1022
+ }
1023
+
1024
+ @utility cs-btn-secondary {
1025
+ background: var(--cs-elev1);
1026
+ color: var(--cs-text);
1027
+ border: 1px solid var(--cs-border);
1028
+
1029
+ &:hover {
1030
+ background: var(--cs-elev2);
1031
+ }
1032
+
1033
+ &:focus-visible {
1034
+ outline: 2px solid transparent;
1035
+ outline-offset: 2px;
1036
+ box-shadow:
1037
+ 0 0 0 2px var(--cs-border),
1038
+ 0 0 0 4px color-mix(in srgb, var(--cs-text) 15%, transparent);
1039
+ }
1040
+ }
1041
+
1042
+ @utility cs-btn-outline {
1043
+ background: transparent;
1044
+ color: var(--cs-brand);
1045
+ border: 1px solid var(--cs-brand);
1046
+
1047
+ &:hover {
1048
+ background: var(--cs-brand);
1049
+ color: var(--cs-brand-contrast);
1050
+ }
1051
+
1052
+ &:focus-visible {
1053
+ outline: 2px solid transparent;
1054
+ outline-offset: 2px;
1055
+ box-shadow:
1056
+ 0 0 0 2px var(--cs-brand),
1057
+ 0 0 0 4px color-mix(in srgb, var(--cs-brand) 25%, transparent);
1058
+ }
1059
+ }
1060
+
1061
+ @utility cs-btn-ghost {
1062
+ background: transparent;
1063
+ color: var(--cs-text);
1064
+ border: 1px solid transparent;
1065
+
1066
+ &:hover {
1067
+ background: var(--cs-elev1);
1068
+ border-color: var(--cs-border);
1069
+ }
1070
+
1071
+ &:focus-visible {
1072
+ outline: 2px solid transparent;
1073
+ outline-offset: 2px;
1074
+ box-shadow:
1075
+ 0 0 0 2px var(--cs-border),
1076
+ 0 0 0 4px color-mix(in srgb, var(--cs-text) 15%, transparent);
1077
+ }
1078
+ }
1079
+
1080
+ /* Button sizes */
1081
+ @utility cs-btn-sm {
1082
+ padding: var(--cs-space-1) var(--cs-space-3);
1083
+ font-size: var(--cs-fs-sm);
1084
+ min-height: 36px;
1085
+ min-width: 36px;
1086
+ }
1087
+
1088
+ @utility cs-btn-lg {
1089
+ padding: var(--cs-space-3) var(--cs-space-6);
1090
+ font-size: var(--cs-fs-lg);
1091
+ min-height: 52px;
1092
+ min-width: 52px;
1093
+ }
1094
+
1095
+ /* =========================================================
1096
+ ALERT COMPONENTS
1097
+ Semantic feedback alerts with state colors
1098
+ ========================================================= */
1099
+
1100
+ @utility cs-alert {
1101
+ display: flex;
1102
+ align-items: center;
1103
+ gap: var(--cs-space-3);
1104
+ padding: var(--cs-space-4);
1105
+ border: 1px solid var(--cs-border);
1106
+ border-radius: var(--cs-radius);
1107
+ background: var(--cs-surface);
1108
+ }
1109
+
1110
+ @utility cs-alert-info {
1111
+ border-color: var(--cs-info, #0ea5e9);
1112
+ background: color-mix(in srgb, var(--cs-info, #0ea5e9) 8%, var(--cs-surface));
1113
+ color: var(--cs-info, #0ea5e9);
1114
+ }
1115
+
1116
+ @utility cs-alert-success {
1117
+ border-color: var(--cs-success, #22c55e);
1118
+ background: color-mix(
1119
+ in srgb,
1120
+ var(--cs-success, #22c55e) 8%,
1121
+ var(--cs-surface)
1122
+ );
1123
+ color: var(--cs-success, #22c55e);
1124
+ }
1125
+
1126
+ @utility cs-alert-warning {
1127
+ border-color: var(--cs-warning, #f59e0b);
1128
+ background: color-mix(
1129
+ in srgb,
1130
+ var(--cs-warning, #f59e0b) 8%,
1131
+ var(--cs-surface)
1132
+ );
1133
+ color: var(--cs-warning, #f59e0b);
1134
+ }
1135
+
1136
+ @utility cs-alert-danger {
1137
+ border-color: var(--cs-danger, #ef4444);
1138
+ background: color-mix(
1139
+ in srgb,
1140
+ var(--cs-danger, #ef4444) 8%,
1141
+ var(--cs-surface)
1142
+ );
1143
+ color: var(--cs-danger, #ef4444);
1144
+ }
1145
+
1146
+ /* =========================================================
1147
+ BADGE COMPONENTS
1148
+ Status badges and tags with variants
1149
+ ========================================================= */
1150
+
1151
+ @utility cs-badge {
1152
+ display: inline-flex;
1153
+ align-items: center;
1154
+ gap: var(--cs-space-1);
1155
+ padding: var(--cs-space-1) var(--cs-space-2);
1156
+ border-radius: var(--cs-radius-sm);
1157
+ font-size: var(--cs-fs-xs);
1158
+ font-weight: 600;
1159
+ line-height: 1;
1160
+ white-space: nowrap;
1161
+ }
1162
+
1163
+ @utility cs-badge-primary {
1164
+ background: var(--cs-brand);
1165
+ color: var(--cs-brand-ink);
1166
+ }
1167
+
1168
+ @utility cs-badge-secondary {
1169
+ background: var(--cs-text-muted);
1170
+ color: var(--cs-bg);
1171
+ }
1172
+
1173
+ @utility cs-badge-success {
1174
+ background: var(--cs-success, #22c55e);
1175
+ color: white;
1176
+ }
1177
+
1178
+ @utility cs-badge-warning {
1179
+ background: var(--cs-warning, #f59e0b);
1180
+ color: white;
1181
+ }
1182
+
1183
+ @utility cs-badge-danger {
1184
+ background: var(--cs-danger, #ef4444);
1185
+ color: white;
1186
+ }
1187
+
1188
+ @utility cs-badge-outline {
1189
+ background: transparent;
1190
+ border: 1px solid currentColor;
1191
+ }
1192
+
1193
+ /* =========================================================
1194
+ ACRYLIC SURFACE COMPONENT
1195
+ Modern glass effect with backdrop filtering
1196
+ ========================================================= */
1197
+
1198
+ @utility cs-acrylic {
1199
+ background: var(--cs-acrylic-tint, rgba(20, 22, 26, 0.55));
1200
+ border: 1px solid var(--cs-acrylic-border, rgba(255, 255, 255, 0.06));
1201
+ border-radius: var(--cs-radius, 10px);
1202
+ box-shadow: var(--cs-shadow-2);
1203
+ -webkit-backdrop-filter: saturate(140%) blur(var(--cs-acrylic-blur, 14px));
1204
+ backdrop-filter: saturate(140%) blur(var(--cs-acrylic-blur, 14px));
1205
+ background-clip: padding-box;
1206
+
1207
+ @media (max-width: 480px) {
1208
+ --cs-acrylic-blur: 8px;
1209
+ box-shadow: var(--cs-shadow-1);
1210
+ }
1211
+ }
1212
+
1213
+ /* =========================================================
1214
+ ANIMATION UTILITIES
1215
+ Performance-optimized micro-interactions
1216
+ ========================================================= */
1217
+
1218
+ @utility cs-pulse {
1219
+ animation: csPulse 1.2s ease-in-out infinite;
1220
+ will-change: transform, opacity;
1221
+ }
1222
+
1223
+ @keyframes csPulse {
1224
+ 0% {
1225
+ transform: scale(1);
1226
+ opacity: 1;
1227
+ }
1228
+ 50% {
1229
+ transform: scale(1.05);
1230
+ opacity: 0.75;
1231
+ }
1232
+ 100% {
1233
+ transform: scale(1);
1234
+ opacity: 1;
1235
+ }
1236
+ }
1237
+
1238
+ @utility cs-fade-delayed {
1239
+ opacity: 0;
1240
+ animation: csFadeIn var(--cs-anim-duration-lg, 420ms)
1241
+ var(--cs-anim-ease-out, ease-out) forwards;
1242
+ animation-delay: 0.4s;
1243
+ }
1244
+
1245
+ @keyframes csFadeIn {
1246
+ from {
1247
+ opacity: 0;
1248
+ }
1249
+ to {
1250
+ opacity: 1;
1251
+ }
1252
+ }
1253
+
1254
+ @utility cs-shimmer {
1255
+ position: relative;
1256
+ overflow: hidden;
1257
+ background: linear-gradient(
1258
+ 90deg,
1259
+ var(--cs-elev1),
1260
+ var(--cs-elev2),
1261
+ var(--cs-elev1)
1262
+ );
1263
+ background-size: 200% 100%;
1264
+ animation: csShimmer 2s linear infinite;
1265
+ }
1266
+
1267
+ @keyframes csShimmer {
1268
+ 0% {
1269
+ background-position: 200% 0;
1270
+ }
1271
+ 100% {
1272
+ background-position: -200% 0;
1273
+ }
1274
+ }
1275
+
1276
+ @utility cs-spin {
1277
+ animation: csSpin 1s linear infinite;
1278
+ }
1279
+
1280
+ @keyframes csSpin {
1281
+ to {
1282
+ transform: rotate(360deg);
1283
+ }
1284
+ }
1285
+
1286
+ /* Glow effect utility */
1287
+ @utility cs-glow {
1288
+ box-shadow: 0 0 0 transparent;
1289
+ transition: box-shadow 0.4s ease-out;
1290
+
1291
+ &.cs-glow-active {
1292
+ box-shadow:
1293
+ 0 0 0 3px color-mix(in srgb, var(--cs-brand, #4f7cff) 40%, transparent),
1294
+ 0 0 12px color-mix(in srgb, var(--cs-brand, #4f7cff) 65%, transparent);
1295
+ }
1296
+ }
1297
+
1298
+ /* =========================================================
1299
+ RESPONSIVE VISIBILITY UTILITIES
1300
+ Container query based visibility controls
1301
+ ========================================================= */
1302
+
1303
+ @container (max-width: 640px) {
1304
+ .cs-hide-mobile {
1305
+ display: none !important;
1306
+ }
1307
+ .cs-show-mobile {
1308
+ display: block !important;
1309
+ }
1310
+ }
1311
+
1312
+ @container (min-width: 641px) and (max-width: 1024px) {
1313
+ .cs-hide-tablet {
1314
+ display: none !important;
1315
+ }
1316
+ .cs-show-tablet {
1317
+ display: block !important;
1318
+ }
1319
+ }
1320
+
1321
+ @container (min-width: 1025px) {
1322
+ .cs-hide-desktop {
1323
+ display: none !important;
1324
+ }
1325
+ .cs-show-desktop {
1326
+ display: block !important;
1327
+ }
1328
+ }
1329
+
1330
+ /* =========================================================
1331
+ PROGRESSIVE ENHANCEMENT
1332
+ Modern CSS features with fallbacks
1333
+ ========================================================= */
1334
+
1335
+ /* Progressive enhancement for color-mix support */
1336
+ @supports not (color: color-mix(in srgb, red 50%, blue)) {
1337
+ .cs-btn-primary:hover {
1338
+ background: rgba(79, 124, 255, 0.85);
1339
+ }
1340
+
1341
+ .cs-alert-info {
1342
+ background: rgba(14, 165, 233, 0.08);
1343
+ }
1344
+
1345
+ .cs-alert-success {
1346
+ background: rgba(34, 197, 94, 0.08);
1347
+ }
1348
+
1349
+ .cs-alert-warning {
1350
+ background: rgba(245, 158, 11, 0.08);
1351
+ }
1352
+
1353
+ .cs-alert-danger {
1354
+ background: rgba(239, 68, 68, 0.08);
1355
+ }
1356
+ }
1357
+
1358
+ /* Fallback for backdrop-filter */
1359
+ @supports not (backdrop-filter: blur(1px)) {
1360
+ .cs-acrylic {
1361
+ background: color-mix(in srgb, var(--cs-acrylic-tint) 80%, var(--cs-elev1));
1362
+ }
1363
+ }
1364
+
1365
+ /* Progressive enhancement for oklch colors */
1366
+ @supports (color: oklch(60% 0.2 250)) {
1367
+ .cs-theme {
1368
+ --cs-brand-oklch: oklch(from var(--cs-brand) l c h);
1369
+ }
1370
+ }
1371
+
1372
+ /* =========================================================
1373
+ ACCESSIBILITY OPTIMIZATIONS
1374
+ Reduced motion and high contrast support
1375
+ ========================================================= */
1376
+
1377
+ @media (prefers-reduced-motion: reduce) {
1378
+ .cs-pulse,
1379
+ .cs-shimmer,
1380
+ .cs-fade-delayed,
1381
+ .cs-spin {
1382
+ animation: none !important;
1383
+ }
1384
+
1385
+ .cs-btn:hover,
1386
+ .cs-focus-ring:focus-visible,
1387
+ .cs-focus-ring-within:focus-within {
1388
+ transition: none !important;
1389
+ }
1390
+
1391
+ .cs-glow {
1392
+ transition: none !important;
1393
+ }
1394
+ }
1395
+
1396
+ @media (prefers-contrast: high) {
1397
+ .cs-theme {
1398
+ --cs-border: currentColor;
1399
+ --cs-text-muted: var(--cs-text);
1400
+ }
1401
+
1402
+ .cs-btn {
1403
+ border: 2px solid currentColor;
1404
+ }
1405
+
1406
+ .cs-card,
1407
+ .cs-card-elevated {
1408
+ border: 2px solid var(--cs-border);
1409
+ }
1410
+ }