@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.
package/dist/orbs.css ADDED
@@ -0,0 +1,1578 @@
1
+ /*!
2
+ * CASOON Atlas Orbs - Floating Orb Effects 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
+ * Floating animated orb particles with physics and visual effects
9
+ * Part of CASOON Atlas UI effects library
10
+ *
11
+ * Usage: @import "@casoon/atlas-styles/orbs";
12
+ * Package: @casoon/atlas-styles
13
+ */
14
+
15
+ /* Note: @import "tailwindcss"; should be added by the consumer */
16
+
17
+ /*!
18
+ * CASOON Atlas Orbs - Complete Orb System with Animations
19
+ * Advanced floating orb effects with physics-based animations
20
+ * Scene presets and customizable orb compositions
21
+ *
22
+ * SSR-safe, tree-shakeable, framework-agnostic
23
+ */
24
+
25
+ /* Note: @import "tailwindcss"; should be added by the consumer */
26
+
27
+ /* =========================================================
28
+ Orbs Theme Tokens
29
+ ========================================================= */
30
+ @theme {
31
+ /* Base palette colors */
32
+ --cs-text: #0f172a;
33
+ --cs-text-inverse: #ffffff;
34
+ --cs-bg: #ffffff;
35
+ --cs-surface: #ffffff;
36
+ --cs-surface-2: #f8fafc;
37
+ --cs-border: #e5e7eb;
38
+
39
+ /* Orb colors */
40
+ --cs-orb-blue: #3b82f6;
41
+ --cs-orb-blue-light: #93c5fd;
42
+ --cs-orb-blue-lighter: #dbeafe;
43
+
44
+ --cs-orb-purple: #9333ea;
45
+ --cs-orb-purple-light: #c4b5fd;
46
+ --cs-orb-purple-lighter: #ede9fe;
47
+
48
+ --cs-orb-pink: #ec4899;
49
+ --cs-orb-pink-light: #fbcfe8;
50
+ --cs-orb-pink-lighter: #fdf2f8;
51
+
52
+ --cs-orb-custom-primary: #667eea;
53
+ --cs-orb-custom-secondary: #764ba2;
54
+ --cs-orb-custom-accent: #f093fb;
55
+
56
+ /* Opacity tokens */
57
+ --cs-opacity-strong: 0.5;
58
+ --cs-opacity-medium: 0.3;
59
+ --cs-opacity-weak: 0.1;
60
+
61
+ /* Motion & transitions */
62
+ --cs-transition: 180ms cubic-bezier(0.2, 0.8, 0.2, 1);
63
+ --cs-anim-ease-inout: cubic-bezier(0.4, 0, 0.2, 1);
64
+ --cs-anim-ease-emph: cubic-bezier(0.2, 0.8, 0.2, 1);
65
+ --cs-anim-duration-float: 6s;
66
+ --cs-anim-duration-pulse: 4s;
67
+ --cs-anim-duration-drift: 8s;
68
+
69
+ /* Elevation & z-index scale */
70
+ --cs-shadow-0: none;
71
+ --cs-shadow-1: 0 1px 2px rgba(2, 6, 23, 0.06), 0 1px 1px rgba(2, 6, 23, 0.04);
72
+ --cs-shadow-2: 0 2px 6px rgba(2, 6, 23, 0.08), 0 1px 2px rgba(2, 6, 23, 0.06);
73
+ --cs-shadow-3: 0 8px 24px rgba(2, 6, 23, 0.1), 0 2px 6px rgba(2, 6, 23, 0.06);
74
+ --cs-shadow-4:
75
+ 0 16px 40px rgba(2, 6, 23, 0.12), 0 4px 10px rgba(2, 6, 23, 0.08);
76
+
77
+ --cs-z-tooltip: 60;
78
+ --cs-z-dropdown: 70;
79
+ --cs-z-toast: 80;
80
+ --cs-z-modal: 90;
81
+ --cs-z-orb: 10;
82
+
83
+ /* Density */
84
+ --cs-density: 1;
85
+
86
+ /* Fallback radial gradients (rgba-based, no color-mix) */
87
+ --cs-orb-fallback-blue: radial-gradient(
88
+ circle,
89
+ rgba(59, 130, 246, var(--cs-opacity-strong)) 0%,
90
+ rgba(147, 197, 253, var(--cs-opacity-medium)) 50%,
91
+ rgba(219, 234, 254, var(--cs-opacity-weak)) 100%
92
+ );
93
+
94
+ --cs-orb-fallback-purple: radial-gradient(
95
+ circle,
96
+ rgba(147, 51, 234, var(--cs-opacity-strong)) 0%,
97
+ rgba(196, 181, 253, var(--cs-opacity-medium)) 50%,
98
+ rgba(237, 233, 254, var(--cs-opacity-weak)) 100%
99
+ );
100
+
101
+ --cs-orb-fallback-pink: radial-gradient(
102
+ circle,
103
+ rgba(236, 72, 153, var(--cs-opacity-strong)) 0%,
104
+ rgba(251, 207, 232, var(--cs-opacity-medium)) 50%,
105
+ rgba(253, 242, 248, var(--cs-opacity-weak)) 100%
106
+ );
107
+
108
+ --cs-orb-fallback-custom: radial-gradient(
109
+ circle,
110
+ rgba(102, 126, 234, var(--cs-opacity-strong)) 0%,
111
+ rgba(118, 75, 162, var(--cs-opacity-medium)) 50%,
112
+ rgba(240, 147, 251, var(--cs-opacity-weak)) 100%
113
+ );
114
+
115
+ /* Progressive gradients with color-mix (upgrade path) */
116
+ --cs-orb-gradient-blue: radial-gradient(
117
+ circle,
118
+ color-mix(
119
+ in srgb,
120
+ var(--cs-orb-blue) calc(var(--cs-opacity-strong) * 100%),
121
+ transparent
122
+ )
123
+ 0%,
124
+ color-mix(
125
+ in srgb,
126
+ var(--cs-orb-blue-light) calc(var(--cs-opacity-medium) * 100%),
127
+ transparent
128
+ )
129
+ 50%,
130
+ color-mix(
131
+ in srgb,
132
+ var(--cs-orb-blue-lighter) calc(var(--cs-opacity-weak) * 100%),
133
+ transparent
134
+ )
135
+ 100%
136
+ );
137
+
138
+ --cs-orb-gradient-purple: radial-gradient(
139
+ circle,
140
+ color-mix(
141
+ in srgb,
142
+ var(--cs-orb-purple) calc(var(--cs-opacity-strong) * 100%),
143
+ transparent
144
+ )
145
+ 0%,
146
+ color-mix(
147
+ in srgb,
148
+ var(--cs-orb-purple-light) calc(var(--cs-opacity-medium) * 100%),
149
+ transparent
150
+ )
151
+ 50%,
152
+ color-mix(
153
+ in srgb,
154
+ var(--cs-orb-purple-lighter) calc(var(--cs-opacity-weak) * 100%),
155
+ transparent
156
+ )
157
+ 100%
158
+ );
159
+
160
+ --cs-orb-gradient-pink: radial-gradient(
161
+ circle,
162
+ color-mix(
163
+ in srgb,
164
+ var(--cs-orb-pink) calc(var(--cs-opacity-strong) * 100%),
165
+ transparent
166
+ )
167
+ 0%,
168
+ color-mix(
169
+ in srgb,
170
+ var(--cs-orb-pink-light) calc(var(--cs-opacity-medium) * 100%),
171
+ transparent
172
+ )
173
+ 50%,
174
+ color-mix(
175
+ in srgb,
176
+ var(--cs-orb-pink-lighter) calc(var(--cs-opacity-weak) * 100%),
177
+ transparent
178
+ )
179
+ 100%
180
+ );
181
+
182
+ --cs-orb-gradient-custom: radial-gradient(
183
+ circle,
184
+ color-mix(
185
+ in srgb,
186
+ var(--cs-orb-custom-primary) calc(var(--cs-opacity-strong) * 100%),
187
+ transparent
188
+ )
189
+ 0%,
190
+ color-mix(
191
+ in srgb,
192
+ var(--cs-orb-custom-secondary) calc(var(--cs-opacity-medium) * 100%),
193
+ transparent
194
+ )
195
+ 50%,
196
+ color-mix(
197
+ in srgb,
198
+ var(--cs-orb-custom-accent) calc(var(--cs-opacity-weak) * 100%),
199
+ transparent
200
+ )
201
+ 100%
202
+ );
203
+ }
204
+
205
+ /* =========================================================
206
+ Base Orb Utility
207
+ ========================================================= */
208
+ @utility cs-orb {
209
+ border-radius: 50%;
210
+ filter: blur(1px);
211
+ opacity: 0.7;
212
+ pointer-events: none;
213
+ position: relative;
214
+ z-index: var(--cs-z-orb);
215
+
216
+ &[data-size~='responsive'] {
217
+ @container (min-width: 480px) {
218
+ width: 120px;
219
+ height: 120px;
220
+ }
221
+ @container (min-width: 768px) {
222
+ width: 180px;
223
+ height: 180px;
224
+ }
225
+ @container (min-width: 1024px) {
226
+ width: 240px;
227
+ height: 240px;
228
+ }
229
+ }
230
+ }
231
+
232
+ /* =========================================================
233
+ Orb Size Utilities
234
+ ========================================================= */
235
+ @utility cs-orb-xs {
236
+ width: 50px;
237
+ height: 50px;
238
+ }
239
+ @utility cs-orb-sm {
240
+ width: 75px;
241
+ height: 75px;
242
+ }
243
+ @utility cs-orb-md {
244
+ width: 100px;
245
+ height: 100px;
246
+ }
247
+ @utility cs-orb-lg {
248
+ width: 150px;
249
+ height: 150px;
250
+ }
251
+ @utility cs-orb-xl {
252
+ width: 200px;
253
+ height: 200px;
254
+ }
255
+ @utility cs-orb-2xl {
256
+ width: 300px;
257
+ height: 300px;
258
+ }
259
+ @utility cs-orb-3xl {
260
+ width: 400px;
261
+ height: 400px;
262
+ }
263
+ @utility cs-orb-4xl {
264
+ width: 500px;
265
+ height: 500px;
266
+ }
267
+ @utility cs-orb-5xl {
268
+ width: 600px;
269
+ height: 600px;
270
+ }
271
+ @utility cs-orb-massive {
272
+ width: 800px;
273
+ height: 800px;
274
+ }
275
+
276
+ /* =========================================================
277
+ Blur Level Utilities
278
+ ========================================================= */
279
+ @utility cs-orb-blur-none {
280
+ filter: blur(0);
281
+ }
282
+ @utility cs-orb-blur-sm {
283
+ filter: blur(2px);
284
+ }
285
+ @utility cs-orb-blur-md {
286
+ filter: blur(4px);
287
+ }
288
+ @utility cs-orb-blur-lg {
289
+ filter: blur(8px);
290
+ }
291
+
292
+ /* =========================================================
293
+ Positioning Utilities
294
+ ========================================================= */
295
+ @utility cs-orb-absolute {
296
+ position: absolute;
297
+ }
298
+ @utility cs-orb-fixed {
299
+ position: fixed;
300
+ }
301
+
302
+ /* =========================================================
303
+ Color Gradient Utilities with Progressive Enhancement
304
+ ========================================================= */
305
+ @utility cs-orb-gradient-blue {
306
+ background: var(--cs-orb-fallback-blue);
307
+
308
+ @supports (background: color-mix(in srgb, red 50%, transparent)) {
309
+ background: var(--cs-orb-gradient-blue);
310
+ }
311
+ }
312
+
313
+ @utility cs-orb-gradient-purple {
314
+ background: var(--cs-orb-fallback-purple);
315
+
316
+ @supports (background: color-mix(in srgb, red 50%, transparent)) {
317
+ background: var(--cs-orb-gradient-purple);
318
+ }
319
+ }
320
+
321
+ @utility cs-orb-gradient-pink {
322
+ background: var(--cs-orb-fallback-pink);
323
+
324
+ @supports (background: color-mix(in srgb, red 50%, transparent)) {
325
+ background: var(--cs-orb-gradient-pink);
326
+ }
327
+ }
328
+
329
+ @utility cs-orb-gradient-custom {
330
+ background: var(--cs-orb-fallback-custom);
331
+
332
+ @supports (background: color-mix(in srgb, red 50%, transparent)) {
333
+ background: var(--cs-orb-gradient-custom);
334
+ }
335
+ }
336
+
337
+ /* =========================================================
338
+ Container Query Utility
339
+ ========================================================= */
340
+ @utility cs-cq {
341
+ container-type: inline-size;
342
+ }
343
+
344
+ /* =========================================================
345
+ ENHANCED ORB ANIMATIONS (v0.8.x)
346
+ ========================================================= */
347
+
348
+ /* Float Animation */
349
+ @utility cs-orb-float {
350
+ animation: cs-orb-float-kf var(--cs-anim-duration-float)
351
+ var(--cs-anim-ease-inout) infinite;
352
+ }
353
+
354
+ /* Pulse Animation */
355
+ @utility cs-orb-pulse {
356
+ animation: cs-orb-pulse-kf var(--cs-anim-duration-pulse)
357
+ var(--cs-anim-ease-inout) infinite;
358
+ }
359
+
360
+ /* Drift Animation */
361
+ @utility cs-orb-drift {
362
+ animation: cs-orb-drift-kf var(--cs-anim-duration-drift)
363
+ var(--cs-anim-ease-inout) infinite;
364
+ }
365
+
366
+ /* Morph Animation */
367
+ @utility cs-orb-morph {
368
+ animation: cs-orb-morph 12s ease-in-out infinite;
369
+ }
370
+
371
+ /* Shimmer Animation */
372
+ @utility cs-orb-shimmer {
373
+ background: linear-gradient(
374
+ 270deg,
375
+ var(--cs-orb-blue),
376
+ var(--cs-orb-blue-light),
377
+ var(--cs-orb-blue)
378
+ );
379
+ background-size: 600% 600%;
380
+ animation: cs-orb-shimmer 10s infinite;
381
+ }
382
+
383
+ /* Bloom Animation (hover/focus triggered) */
384
+ @utility cs-orb-bloom {
385
+ &:hover,
386
+ &:focus-visible {
387
+ transform-origin: 50%;
388
+ animation: cs-orb-bloom 2s ease-in-out infinite;
389
+ }
390
+ }
391
+
392
+ /* Zen Animation (combined float + morph) */
393
+ @utility cs-orb-zen {
394
+ animation:
395
+ cs-orb-float-kf var(--cs-anim-duration-float) var(--cs-anim-ease-inout)
396
+ infinite,
397
+ cs-orb-morph 14s ease-in-out infinite;
398
+ }
399
+
400
+ /* Advanced Movement Animations */
401
+ @utility cs-orb-orbit {
402
+ animation: cs-orb-orbit 20s linear infinite;
403
+ }
404
+
405
+ @utility cs-orb-orbit-reverse {
406
+ animation: cs-orb-orbit 20s linear infinite reverse;
407
+ }
408
+
409
+ @utility cs-orb-figure-8 {
410
+ animation: cs-orb-figure-8 16s ease-in-out infinite;
411
+ }
412
+
413
+ @utility cs-orb-wander {
414
+ animation: cs-orb-wander 25s ease-in-out infinite;
415
+ }
416
+
417
+ @utility cs-orb-swing {
418
+ animation: cs-orb-swing 8s ease-in-out infinite;
419
+ }
420
+
421
+ @utility cs-orb-bounce {
422
+ animation: cs-orb-bounce 3s ease-in-out infinite;
423
+ }
424
+
425
+ @utility cs-orb-magnetic {
426
+ animation: cs-orb-magnetic 12s ease-in-out infinite;
427
+ }
428
+
429
+ /* Color & Visual Effects */
430
+ @utility cs-orb-hue-shift {
431
+ animation: cs-orb-hue-shift 10s linear infinite;
432
+ }
433
+
434
+ @utility cs-orb-rainbow {
435
+ background: linear-gradient(
436
+ 45deg,
437
+ #ff6b6b,
438
+ #4ecdc4,
439
+ #45b7d1,
440
+ #f9ca24,
441
+ #f0932b,
442
+ #eb4d4b,
443
+ #6c5ce7
444
+ )
445
+ 0 0/400% 400%;
446
+ animation: cs-orb-rainbow 8s infinite;
447
+ }
448
+
449
+ @utility cs-orb-color-pulse {
450
+ animation: cs-orb-color-pulse 4s ease-in-out infinite;
451
+ }
452
+
453
+ @utility cs-orb-color-breathe {
454
+ animation: cs-orb-color-breathe 6s ease-in-out infinite;
455
+ }
456
+
457
+ @utility cs-orb-glow {
458
+ animation: cs-orb-glow 3s ease-in-out infinite;
459
+ }
460
+
461
+ @utility cs-orb-flicker {
462
+ animation: cs-orb-flicker 2s ease-in-out infinite;
463
+ }
464
+
465
+ @utility cs-orb-scale-pulse {
466
+ animation: cs-orb-scale-pulse 4s ease-in-out infinite;
467
+ }
468
+
469
+ @utility cs-orb-elastic {
470
+ animation: cs-orb-elastic 3s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
471
+ }
472
+
473
+ /* Complex Combined Animations */
474
+ @utility cs-orb-dream {
475
+ animation:
476
+ cs-orb-float-kf 12s ease-in-out infinite,
477
+ cs-orb-hue-shift 15s linear infinite,
478
+ cs-orb-scale-pulse 8s ease-in-out infinite;
479
+ }
480
+
481
+ @utility cs-orb-cosmic {
482
+ animation:
483
+ cs-orb-orbit 30s linear infinite,
484
+ cs-orb-rainbow 10s infinite,
485
+ cs-orb-glow 4s ease-in-out infinite;
486
+ }
487
+
488
+ @utility cs-orb-chaos {
489
+ animation:
490
+ cs-orb-wander 20s ease-in-out infinite,
491
+ cs-orb-flicker 1.5s ease-in-out infinite,
492
+ cs-orb-elastic 5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
493
+ }
494
+
495
+ /* =========================================================
496
+ ANIMATION SPEED CONTROLS
497
+ ========================================================= */
498
+ @utility cs-orb-slow {
499
+ animation-duration: calc(var(--cs-orb-speed, 1) * 2);
500
+ }
501
+
502
+ @utility cs-orb-fast {
503
+ animation-duration: calc(var(--cs-orb-speed, 1) * 0.5);
504
+ }
505
+
506
+ /* =========================================================
507
+ INTERACTIVE ANIMATION CONTROLS
508
+ ========================================================= */
509
+ @utility cs-orb-pause-hover {
510
+ &:hover {
511
+ animation-play-state: paused;
512
+ }
513
+ }
514
+
515
+ @utility cs-orb-reverse-hover {
516
+ &:hover {
517
+ animation-direction: reverse;
518
+ }
519
+ }
520
+
521
+ @utility cs-orb-trigger-hover {
522
+ animation-play-state: paused;
523
+
524
+ &:hover {
525
+ animation-play-state: running;
526
+ }
527
+ }
528
+
529
+ /* =========================================================
530
+ CORE UTILITY HELPER CLASSES
531
+ ========================================================= */
532
+ @utility cs-sr-only {
533
+ position: absolute;
534
+ width: 1px;
535
+ height: 1px;
536
+ padding: 0;
537
+ margin: -1px;
538
+ overflow: hidden;
539
+ clip: rect(0, 0, 0, 0);
540
+ white-space: nowrap;
541
+ border: 0;
542
+ }
543
+
544
+ /* =========================================================
545
+ GLOW EFFECTS
546
+ ========================================================= */
547
+ @utility cs-glow {
548
+ box-shadow: 0 0 transparent;
549
+ }
550
+
551
+ @utility cs-glow-blue {
552
+ box-shadow: 0 0 24px 8px var(--cs-orb-blue);
553
+
554
+ @supports (color: color-mix(in lab, red, red)) {
555
+ box-shadow: 0 0 24px 8px
556
+ color-mix(in srgb, var(--cs-orb-blue) 35%, transparent);
557
+ }
558
+
559
+ @supports not (color: color-mix(in srgb, red 50%, white)) {
560
+ box-shadow: 0 0 24px 8px rgba(59, 130, 246, 0.35);
561
+ }
562
+ }
563
+
564
+ @utility cs-glow-pink {
565
+ box-shadow: 0 0 24px 8px var(--cs-orb-pink);
566
+
567
+ @supports (color: color-mix(in lab, red, red)) {
568
+ box-shadow: 0 0 24px 8px
569
+ color-mix(in srgb, var(--cs-orb-pink) 35%, transparent);
570
+ }
571
+
572
+ @supports not (color: color-mix(in srgb, red 50%, white)) {
573
+ box-shadow: 0 0 24px 8px rgba(236, 72, 153, 0.35);
574
+ }
575
+ }
576
+
577
+ /* =========================================================
578
+ CORE POSITIONING UTILITIES
579
+ ========================================================= */
580
+ @utility cs-will-transform {
581
+ will-change: transform;
582
+ }
583
+
584
+ /* =========================================================
585
+ CARD COMPONENTS
586
+ ========================================================= */
587
+ @utility cs-card {
588
+ position: relative;
589
+ background: var(--cs-surface);
590
+ border: 1px solid var(--cs-border);
591
+ border-radius: calc(12px * var(--cs-density));
592
+ box-shadow: var(--cs-shadow-2);
593
+ padding: calc(16px * var(--cs-density));
594
+ transition:
595
+ box-shadow var(--cs-transition),
596
+ transform var(--cs-transition);
597
+
598
+ &:hover {
599
+ box-shadow: var(--cs-shadow-3);
600
+ transform: translateY(-1px);
601
+ }
602
+ }
603
+
604
+ @utility cs-card-title {
605
+ color: var(--cs-text);
606
+ font-weight: 600;
607
+ margin-bottom: 0.5em;
608
+ }
609
+
610
+ @utility cs-card-hover-orb {
611
+ position: relative;
612
+ overflow: hidden;
613
+
614
+ &::before {
615
+ content: '';
616
+ position: absolute;
617
+ top: -25%;
618
+ left: -25%;
619
+ width: 200%;
620
+ height: 200%;
621
+ background: var(--cs-orb-fallback-blue);
622
+ filter: blur(32px);
623
+ opacity: 0;
624
+ pointer-events: none;
625
+ z-index: 0;
626
+ transition: opacity 0.5s;
627
+ }
628
+
629
+ &:hover::before {
630
+ opacity: 0.6;
631
+ }
632
+ }
633
+
634
+ @utility cs-card-hover-orb-shimmer {
635
+ &::before {
636
+ background: linear-gradient(135deg, #3b82f6, #93c5fd, #3b82f6) 0 0/300% 300%;
637
+ animation: cs-orb-shimmer 6s linear infinite;
638
+ }
639
+ }
640
+
641
+ @utility cs-surface-pop {
642
+ background: var(--cs-surface);
643
+ border: 1px solid var(--cs-border);
644
+ border-radius: 12px;
645
+ box-shadow: var(--cs-shadow-4);
646
+ }
647
+
648
+ /* =========================================================
649
+ ACRYLIC/GLASSMORPHISM EFFECT
650
+ ========================================================= */
651
+ @utility cs-acrylic {
652
+ background: var(--cs-surface);
653
+ border: 1px solid var(--cs-border);
654
+ backdrop-filter: blur(10px) saturate(140%);
655
+ -webkit-backdrop-filter: blur(10px) saturate(140%);
656
+
657
+ @supports (color: color-mix(in lab, red, red)) {
658
+ background: color-mix(in srgb, var(--cs-surface) 70%, transparent);
659
+ border: 1px solid color-mix(in srgb, var(--cs-border) 70%, transparent);
660
+ }
661
+
662
+ @supports not (backdrop-filter: blur(10px)) {
663
+ background: rgba(255, 255, 255, 0.75);
664
+ }
665
+ }
666
+
667
+ /* =========================================================
668
+ BUTTON COMPONENTS
669
+ ========================================================= */
670
+ @utility cs-btn {
671
+ --_pad-y: calc(8px * var(--cs-density));
672
+ --_pad-x: calc(14px * var(--cs-density));
673
+
674
+ display: inline-flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ gap: 0.5rem;
678
+ padding: var(--_pad-y) var(--_pad-x);
679
+ border: 1px solid var(--cs-border);
680
+ border-radius: calc(10px * var(--cs-density));
681
+ background: var(--cs-surface-2);
682
+ color: var(--cs-text);
683
+ font-weight: 600;
684
+ line-height: 1.2;
685
+ box-shadow: var(--cs-shadow-1);
686
+ transition:
687
+ background var(--cs-transition),
688
+ box-shadow var(--cs-transition),
689
+ transform var(--cs-transition);
690
+
691
+ &:hover {
692
+ box-shadow: var(--cs-shadow-2);
693
+ transform: translateY(-1px);
694
+ }
695
+
696
+ &:active {
697
+ transform: translateY(0);
698
+ }
699
+ }
700
+
701
+ @utility cs-btn-primary {
702
+ background: var(--cs-orb-blue);
703
+ border-color: var(--cs-orb-blue);
704
+ color: var(--cs-text);
705
+
706
+ @supports (color: color-mix(in lab, red, red)) {
707
+ background: color-mix(in srgb, var(--cs-orb-blue) 12%, var(--cs-surface));
708
+ border-color: color-mix(in srgb, var(--cs-orb-blue) 35%, var(--cs-border));
709
+ }
710
+
711
+ @supports not (color: color-mix(in srgb, red 50%, white)) {
712
+ background: #eef5ff;
713
+ border-color: #b8d1ff;
714
+ }
715
+ }
716
+
717
+ @utility cs-btn-orb {
718
+ position: relative;
719
+ overflow: hidden;
720
+ z-index: 1;
721
+
722
+ &::after {
723
+ content: '';
724
+ position: absolute;
725
+ inset: -50%;
726
+ background: radial-gradient(
727
+ circle at center,
728
+ var(--cs-orb-blue-light),
729
+ transparent 70%
730
+ );
731
+ opacity: 0;
732
+ transform: scale(0.5);
733
+ transition:
734
+ opacity 0.4s,
735
+ transform 0.4s;
736
+ z-index: 0;
737
+ }
738
+
739
+ &:hover::after {
740
+ opacity: 0.4;
741
+ transform: scale(1.2);
742
+ }
743
+ }
744
+
745
+ /* =========================================================
746
+ LAYOUT COMPONENTS
747
+ ========================================================= */
748
+ @utility cs-section-orb {
749
+ position: relative;
750
+ overflow: clip;
751
+
752
+ & > .cs-orb {
753
+ position: absolute;
754
+ inset: auto;
755
+ }
756
+ }
757
+
758
+ @utility cs-orb-modal-backdrop {
759
+ position: absolute;
760
+ inset: 0;
761
+ background: var(--cs-orb-fallback-purple);
762
+ filter: blur(60px);
763
+ opacity: 0.4;
764
+ pointer-events: none;
765
+ z-index: var(--cs-z-modal);
766
+ }
767
+
768
+ /* =========================================================
769
+ KEYFRAME ANIMATIONS
770
+ ========================================================= */
771
+
772
+ /* Basic Movement Animations */
773
+ @keyframes cs-orb-float-kf {
774
+ 0%,
775
+ 100% {
776
+ transform: translateY(0);
777
+ }
778
+ 50% {
779
+ transform: translateY(-20px);
780
+ }
781
+ }
782
+
783
+ @keyframes cs-orb-pulse-kf {
784
+ 0%,
785
+ 100% {
786
+ opacity: 0.7;
787
+ transform: scale(1);
788
+ }
789
+ 50% {
790
+ opacity: 1;
791
+ transform: scale(1.05);
792
+ }
793
+ }
794
+
795
+ @keyframes cs-orb-drift-kf {
796
+ 0% {
797
+ transform: translate(0);
798
+ }
799
+ 33% {
800
+ transform: translate(30px);
801
+ }
802
+ 66% {
803
+ transform: translate(-20px);
804
+ }
805
+ 100% {
806
+ transform: translate(0);
807
+ }
808
+ }
809
+
810
+ @keyframes cs-orb-morph {
811
+ 0% {
812
+ border-radius: 50%;
813
+ }
814
+ 25% {
815
+ border-radius: 55% 45% 60% 40% / 60% 40% 55% 45%;
816
+ }
817
+ 50% {
818
+ border-radius: 50% 50% 60% 40% / 40% 60% 50% 50%;
819
+ }
820
+ 75% {
821
+ border-radius: 45% 55% 50% 50% / 50% 50% 45% 55%;
822
+ }
823
+ 100% {
824
+ border-radius: 50%;
825
+ }
826
+ }
827
+
828
+ @keyframes cs-orb-bloom {
829
+ 0%,
830
+ 100% {
831
+ opacity: 0.7;
832
+ transform: scale(1);
833
+ }
834
+ 50% {
835
+ opacity: 1;
836
+ transform: scale(1.12);
837
+ }
838
+ }
839
+
840
+ @keyframes cs-orb-shimmer {
841
+ 0% {
842
+ background-position: 0%;
843
+ }
844
+ 50% {
845
+ background-position: 100%;
846
+ }
847
+ 100% {
848
+ background-position: 0%;
849
+ }
850
+ }
851
+
852
+ /* Complex Movement Animations */
853
+ @keyframes cs-orb-orbit {
854
+ 0% {
855
+ transform: rotate(0deg) translate(100px) rotate(0deg);
856
+ }
857
+ 100% {
858
+ transform: rotate(360deg) translate(100px) rotate(-360deg);
859
+ }
860
+ }
861
+
862
+ @keyframes cs-orb-figure-8 {
863
+ 0% {
864
+ transform: translate(0);
865
+ }
866
+ 12.5% {
867
+ transform: translate(30px, -15px);
868
+ }
869
+ 25% {
870
+ transform: translate(40px);
871
+ }
872
+ 37.5% {
873
+ transform: translate(30px, 15px);
874
+ }
875
+ 50% {
876
+ transform: translate(0);
877
+ }
878
+ 62.5% {
879
+ transform: translate(-30px, 15px);
880
+ }
881
+ 75% {
882
+ transform: translate(-40px);
883
+ }
884
+ 87.5% {
885
+ transform: translate(-30px, -15px);
886
+ }
887
+ 100% {
888
+ transform: translate(0);
889
+ }
890
+ }
891
+
892
+ @keyframes cs-orb-wander {
893
+ 0% {
894
+ transform: translate(0);
895
+ }
896
+ 10% {
897
+ transform: translate(25px, -30px);
898
+ }
899
+ 20% {
900
+ transform: translate(-15px, -45px);
901
+ }
902
+ 30% {
903
+ transform: translate(40px, -20px);
904
+ }
905
+ 40% {
906
+ transform: translate(10px, 35px);
907
+ }
908
+ 50% {
909
+ transform: translate(-35px, 15px);
910
+ }
911
+ 60% {
912
+ transform: translate(-20px, -25px);
913
+ }
914
+ 70% {
915
+ transform: translate(30px, 40px);
916
+ }
917
+ 80% {
918
+ transform: translate(-40px, -10px);
919
+ }
920
+ 90% {
921
+ transform: translate(20px, -35px);
922
+ }
923
+ 100% {
924
+ transform: translate(0);
925
+ }
926
+ }
927
+
928
+ @keyframes cs-orb-swing {
929
+ 0%,
930
+ 100% {
931
+ transform: rotate(-15deg) translate(0);
932
+ }
933
+ 50% {
934
+ transform: rotate(15deg) translate(0);
935
+ }
936
+ }
937
+
938
+ @keyframes cs-orb-bounce {
939
+ 0%,
940
+ 20%,
941
+ 53%,
942
+ 80%,
943
+ 100% {
944
+ transform: translateY(0);
945
+ }
946
+ 40%,
947
+ 43% {
948
+ transform: translateY(-30px);
949
+ }
950
+ 70% {
951
+ transform: translateY(-15px);
952
+ }
953
+ 90% {
954
+ transform: translateY(-4px);
955
+ }
956
+ }
957
+
958
+ @keyframes cs-orb-magnetic {
959
+ 0% {
960
+ transform: translate(0);
961
+ }
962
+ 25% {
963
+ transform: translate(50px, 20px) scale(1.1);
964
+ }
965
+ 50% {
966
+ transform: translate(-30px, -40px) scale(0.9);
967
+ }
968
+ 75% {
969
+ transform: translate(-50px, 30px) scale(1.05);
970
+ }
971
+ 100% {
972
+ transform: translate(0);
973
+ }
974
+ }
975
+
976
+ /* Color & Visual Effect Animations */
977
+ @keyframes cs-orb-hue-shift {
978
+ 0% {
979
+ filter: hue-rotate(0deg);
980
+ }
981
+ 100% {
982
+ filter: hue-rotate(360deg);
983
+ }
984
+ }
985
+
986
+ @keyframes cs-orb-rainbow {
987
+ 0% {
988
+ background-position: 0% 0%;
989
+ }
990
+ 25% {
991
+ background-position: 100% 0%;
992
+ }
993
+ 50% {
994
+ background-position: 100% 100%;
995
+ }
996
+ 75% {
997
+ background-position: 0% 100%;
998
+ }
999
+ 100% {
1000
+ background-position: 0% 0%;
1001
+ }
1002
+ }
1003
+
1004
+ @keyframes cs-orb-color-pulse {
1005
+ 0%,
1006
+ 100% {
1007
+ filter: brightness(1) saturate(1);
1008
+ }
1009
+ 50% {
1010
+ filter: brightness(1.3) saturate(1.5);
1011
+ }
1012
+ }
1013
+
1014
+ @keyframes cs-orb-color-breathe {
1015
+ 0%,
1016
+ 100% {
1017
+ filter: brightness(0.8) contrast(1.1);
1018
+ opacity: 0.7;
1019
+ }
1020
+ 50% {
1021
+ filter: brightness(1.2) contrast(1.3);
1022
+ opacity: 1;
1023
+ }
1024
+ }
1025
+
1026
+ @keyframes cs-orb-glow {
1027
+ 0%,
1028
+ 100% {
1029
+ box-shadow: 0 0 20px rgba(79, 124, 255, 0.3);
1030
+ }
1031
+ 50% {
1032
+ box-shadow:
1033
+ 0 0 40px rgba(79, 124, 255, 0.8),
1034
+ 0 0 80px rgba(79, 124, 255, 0.4);
1035
+ }
1036
+ }
1037
+
1038
+ @keyframes cs-orb-flicker {
1039
+ 0%,
1040
+ 100% {
1041
+ opacity: 0.7;
1042
+ }
1043
+ 10% {
1044
+ opacity: 0.9;
1045
+ }
1046
+ 20% {
1047
+ opacity: 0.5;
1048
+ }
1049
+ 30% {
1050
+ opacity: 1;
1051
+ }
1052
+ 40% {
1053
+ opacity: 0.6;
1054
+ }
1055
+ 50% {
1056
+ opacity: 0.8;
1057
+ }
1058
+ 60% {
1059
+ opacity: 0.4;
1060
+ }
1061
+ 70% {
1062
+ opacity: 0.9;
1063
+ }
1064
+ 80% {
1065
+ opacity: 0.7;
1066
+ }
1067
+ 90% {
1068
+ opacity: 1;
1069
+ }
1070
+ }
1071
+
1072
+ @keyframes cs-orb-scale-pulse {
1073
+ 0%,
1074
+ 100% {
1075
+ transform: scale(1);
1076
+ }
1077
+ 50% {
1078
+ transform: scale(1.15);
1079
+ }
1080
+ }
1081
+
1082
+ @keyframes cs-orb-elastic {
1083
+ 0%,
1084
+ 100% {
1085
+ transform: scale(1);
1086
+ }
1087
+ 25% {
1088
+ transform: scale(1.1, 0.9);
1089
+ }
1090
+ 50% {
1091
+ transform: scale(0.9, 1.1);
1092
+ }
1093
+ 75% {
1094
+ transform: scale(1.05, 0.95);
1095
+ }
1096
+ }
1097
+
1098
+ /* =========================================================
1099
+ ACCESSIBILITY & RESPONSIVE DESIGN
1100
+ ========================================================= */
1101
+
1102
+ /* Reduced motion support */
1103
+ @media (prefers-reduced-motion: reduce) {
1104
+ .cs-orb-float,
1105
+ .cs-orb-pulse,
1106
+ .cs-orb-drift,
1107
+ .cs-orb-bloom,
1108
+ .cs-orb-shimmer,
1109
+ .cs-orb-morph,
1110
+ .cs-orb-zen,
1111
+ .cs-card-hover-orb::before,
1112
+ .cs-btn-orb::after {
1113
+ transition: none !important;
1114
+ animation: none !important;
1115
+ }
1116
+ }
1117
+
1118
+ /* High contrast mode */
1119
+ @media (prefers-contrast: more) {
1120
+ .cs-orb {
1121
+ filter: none;
1122
+ opacity: 0.9;
1123
+ }
1124
+
1125
+ .cs-card,
1126
+ .cs-btn {
1127
+ box-shadow: var(--cs-shadow-1);
1128
+ }
1129
+ }
1130
+
1131
+ /* Forced colors mode (Windows High Contrast) */
1132
+ @media (forced-colors: active) {
1133
+ .cs-orb {
1134
+ opacity: 0.15;
1135
+ background: CanvasText;
1136
+ }
1137
+
1138
+ .cs-btn {
1139
+ border: 1px solid ButtonText;
1140
+ }
1141
+ }
1142
+
1143
+ /* Mobile optimizations */
1144
+ @media (max-width: 480px) {
1145
+ .cs-orb:is(.cs-orb-blur-lg, .cs-orb-blur-md) {
1146
+ filter: blur(2px);
1147
+ }
1148
+
1149
+ .cs-orb-float {
1150
+ animation-duration: calc(var(--cs-anim-duration-float) * 1.25);
1151
+ }
1152
+ }
1153
+
1154
+ /* Focus styles */
1155
+ .cs-focus-ring:focus-visible,
1156
+ .cs-btn:focus-visible,
1157
+ .cs-card:focus-visible {
1158
+ outline: 2px solid var(--cs-orb-blue);
1159
+ outline-offset: 2px;
1160
+
1161
+ @supports (color: color-mix(in lab, red, red)) {
1162
+ outline: 2px solid color-mix(in srgb, var(--cs-orb-blue) 60%, transparent);
1163
+ }
1164
+
1165
+ @supports not (color: color-mix(in srgb, red 50%, white)) {
1166
+ outline: 2px solid #3b82f6;
1167
+ }
1168
+ }
1169
+
1170
+ /* Print styles */
1171
+ @media print {
1172
+ .cs-orb {
1173
+ filter: none !important;
1174
+ opacity: 0.15 !important;
1175
+ }
1176
+
1177
+ .cs-card,
1178
+ .cs-btn,
1179
+ .cs-surface-pop {
1180
+ box-shadow: none !important;
1181
+ border: 1px solid black !important;
1182
+ }
1183
+ }
1184
+
1185
+ /* =========================================================
1186
+ ORB SCENE PRESETS - Complete Background Compositions
1187
+ ========================================================= */
1188
+
1189
+ /* Galaxy Scene - Multiple cosmic orbs */
1190
+ .cs-orb-scene-galaxy {
1191
+ position: relative;
1192
+ overflow: hidden;
1193
+ }
1194
+
1195
+ .cs-orb-scene-galaxy::before,
1196
+ .cs-orb-scene-galaxy::after {
1197
+ content: '';
1198
+ position: absolute;
1199
+ border-radius: 50%;
1200
+ pointer-events: none;
1201
+ z-index: var(--cs-z-orb);
1202
+ }
1203
+
1204
+ /* Main galaxy orb */
1205
+ .cs-orb-scene-galaxy::before {
1206
+ width: 300px;
1207
+ height: 300px;
1208
+ background: radial-gradient(
1209
+ circle,
1210
+ color-mix(in srgb, var(--cs-orb-purple) 40%, transparent) 0%,
1211
+ color-mix(in srgb, var(--cs-orb-blue) 25%, transparent) 40%,
1212
+ color-mix(in srgb, var(--cs-orb-pink) 15%, transparent) 70%,
1213
+ transparent 100%
1214
+ );
1215
+ filter: blur(60px);
1216
+ top: -150px;
1217
+ right: -150px;
1218
+ animation: cs-orb-float-kf 8s ease-in-out infinite;
1219
+ }
1220
+
1221
+ /* Secondary galaxy orb */
1222
+ .cs-orb-scene-galaxy::after {
1223
+ width: 200px;
1224
+ height: 200px;
1225
+ background: radial-gradient(
1226
+ circle,
1227
+ color-mix(in srgb, var(--cs-orb-blue) 35%, transparent) 0%,
1228
+ color-mix(in srgb, var(--cs-orb-purple) 20%, transparent) 50%,
1229
+ transparent 100%
1230
+ );
1231
+ filter: blur(40px);
1232
+ bottom: -100px;
1233
+ left: -100px;
1234
+ animation: cs-orb-pulse-kf 6s ease-in-out infinite;
1235
+ }
1236
+
1237
+ /* Underwater Scene - Blue/turquoise composition */
1238
+ .cs-orb-scene-underwater {
1239
+ position: relative;
1240
+ overflow: hidden;
1241
+ background: linear-gradient(
1242
+ 135deg,
1243
+ color-mix(in srgb, var(--cs-orb-blue) 8%, var(--cs-bg)) 0%,
1244
+ color-mix(in srgb, var(--cs-orb-blue-light) 5%, var(--cs-bg)) 100%
1245
+ );
1246
+ }
1247
+
1248
+ .cs-orb-scene-underwater::before,
1249
+ .cs-orb-scene-underwater::after {
1250
+ content: '';
1251
+ position: absolute;
1252
+ border-radius: 50%;
1253
+ pointer-events: none;
1254
+ z-index: var(--cs-z-orb);
1255
+ }
1256
+
1257
+ /* Large underwater orb */
1258
+ .cs-orb-scene-underwater::before {
1259
+ width: 400px;
1260
+ height: 400px;
1261
+ background: radial-gradient(
1262
+ circle,
1263
+ color-mix(in srgb, #00bcd4 30%, transparent) 0%,
1264
+ color-mix(in srgb, #4dd0e1 20%, transparent) 40%,
1265
+ color-mix(in srgb, #80deea 10%, transparent) 70%,
1266
+ transparent 100%
1267
+ );
1268
+ filter: blur(80px);
1269
+ top: 50%;
1270
+ left: 50%;
1271
+ transform: translate(-50%, -50%);
1272
+ animation: cs-orb-drift-kf 12s ease-in-out infinite;
1273
+ }
1274
+
1275
+ /* Floating bubbles effect */
1276
+ .cs-orb-scene-underwater::after {
1277
+ width: 150px;
1278
+ height: 150px;
1279
+ background: radial-gradient(
1280
+ circle,
1281
+ color-mix(in srgb, #b2ebf2 25%, transparent) 0%,
1282
+ color-mix(in srgb, #e0f2f1 15%, transparent) 60%,
1283
+ transparent 100%
1284
+ );
1285
+ filter: blur(20px);
1286
+ top: 20%;
1287
+ right: 20%;
1288
+ animation: cs-orb-wander 15s ease-in-out infinite;
1289
+ }
1290
+
1291
+ /* Aurora Scene - Northern lights effect */
1292
+ .cs-orb-scene-aurora {
1293
+ position: relative;
1294
+ overflow: hidden;
1295
+ background: linear-gradient(
1296
+ 45deg,
1297
+ color-mix(in srgb, #1a237e 15%, var(--cs-bg)) 0%,
1298
+ color-mix(in srgb, #283593 10%, var(--cs-bg)) 50%,
1299
+ color-mix(in srgb, #1a237e 15%, var(--cs-bg)) 100%
1300
+ );
1301
+ }
1302
+
1303
+ .cs-orb-scene-aurora::before {
1304
+ content: '';
1305
+ position: absolute;
1306
+ width: 100%;
1307
+ height: 60%;
1308
+ top: 0;
1309
+ left: 0;
1310
+ background: linear-gradient(
1311
+ 180deg,
1312
+ color-mix(in srgb, #4fc3f7 20%, transparent) 0%,
1313
+ color-mix(in srgb, #81c784 15%, transparent) 30%,
1314
+ color-mix(in srgb, #ffb74d 10%, transparent) 60%,
1315
+ transparent 100%
1316
+ );
1317
+ filter: blur(60px);
1318
+ animation: cs-aurora-wave 20s ease-in-out infinite;
1319
+ pointer-events: none;
1320
+ z-index: var(--cs-z-orb);
1321
+ }
1322
+
1323
+ @keyframes cs-aurora-wave {
1324
+ 0%,
1325
+ 100% {
1326
+ opacity: 0.6;
1327
+ transform: translateY(0) scaleY(1);
1328
+ }
1329
+ 25% {
1330
+ opacity: 0.8;
1331
+ transform: translateY(-20px) scaleY(1.1);
1332
+ }
1333
+ 50% {
1334
+ opacity: 0.7;
1335
+ transform: translateY(-10px) scaleY(0.9);
1336
+ }
1337
+ 75% {
1338
+ opacity: 0.9;
1339
+ transform: translateY(-30px) scaleY(1.2);
1340
+ }
1341
+ }
1342
+
1343
+ /* Nebula Scene - Space dust and gas clouds */
1344
+ .cs-orb-scene-nebula {
1345
+ position: relative;
1346
+ overflow: hidden;
1347
+ background: radial-gradient(
1348
+ ellipse at center,
1349
+ color-mix(in srgb, var(--cs-orb-purple) 12%, var(--cs-bg)) 0%,
1350
+ color-mix(in srgb, var(--cs-orb-pink) 8%, var(--cs-bg)) 40%,
1351
+ var(--cs-bg) 100%
1352
+ );
1353
+ }
1354
+
1355
+ .cs-orb-scene-nebula::before,
1356
+ .cs-orb-scene-nebula::after {
1357
+ content: '';
1358
+ position: absolute;
1359
+ pointer-events: none;
1360
+ z-index: var(--cs-z-orb);
1361
+ }
1362
+
1363
+ /* Main nebula cloud */
1364
+ .cs-orb-scene-nebula::before {
1365
+ width: 500px;
1366
+ height: 300px;
1367
+ background: linear-gradient(
1368
+ 45deg,
1369
+ color-mix(in srgb, var(--cs-orb-purple) 25%, transparent) 0%,
1370
+ color-mix(in srgb, var(--cs-orb-pink) 20%, transparent) 30%,
1371
+ color-mix(in srgb, var(--cs-orb-custom-primary) 15%, transparent) 60%,
1372
+ transparent 100%
1373
+ );
1374
+ border-radius: 60% 40% 70% 30% / 50% 60% 40% 50%;
1375
+ filter: blur(100px);
1376
+ top: 10%;
1377
+ left: 20%;
1378
+ animation:
1379
+ cs-orb-morph 25s ease-in-out infinite,
1380
+ cs-orb-drift-kf 30s ease-in-out infinite;
1381
+ }
1382
+
1383
+ /* Secondary nebula dust */
1384
+ .cs-orb-scene-nebula::after {
1385
+ width: 250px;
1386
+ height: 250px;
1387
+ background: radial-gradient(
1388
+ ellipse,
1389
+ color-mix(in srgb, var(--cs-orb-blue) 20%, transparent) 0%,
1390
+ color-mix(in srgb, var(--cs-orb-purple-light) 15%, transparent) 50%,
1391
+ transparent 100%
1392
+ );
1393
+ border-radius: 50%;
1394
+ filter: blur(60px);
1395
+ bottom: 20%;
1396
+ right: 15%;
1397
+ animation: cs-orb-shimmer 18s ease-in-out infinite;
1398
+ }
1399
+
1400
+ /* Forest Scene - Natural, organic orbs */
1401
+ .cs-orb-scene-forest {
1402
+ position: relative;
1403
+ overflow: hidden;
1404
+ background: linear-gradient(
1405
+ 135deg,
1406
+ color-mix(in srgb, #2e7d32 8%, var(--cs-bg)) 0%,
1407
+ color-mix(in srgb, #388e3c 6%, var(--cs-bg)) 50%,
1408
+ color-mix(in srgb, #1b5e20 10%, var(--cs-bg)) 100%
1409
+ );
1410
+ }
1411
+
1412
+ .cs-orb-scene-forest::before,
1413
+ .cs-orb-scene-forest::after {
1414
+ content: '';
1415
+ position: absolute;
1416
+ border-radius: 50%;
1417
+ pointer-events: none;
1418
+ z-index: var(--cs-z-orb);
1419
+ }
1420
+
1421
+ /* Sunlight filtering through trees */
1422
+ .cs-orb-scene-forest::before {
1423
+ width: 200px;
1424
+ height: 400px;
1425
+ background: linear-gradient(
1426
+ 0deg,
1427
+ transparent 0%,
1428
+ color-mix(in srgb, #ffeb3b 15%, transparent) 20%,
1429
+ color-mix(in srgb, #ffc107 20%, transparent) 50%,
1430
+ color-mix(in srgb, #ff9800 10%, transparent) 80%,
1431
+ transparent 100%
1432
+ );
1433
+ border-radius: 50% 50% 80% 20% / 60% 40% 60% 40%;
1434
+ filter: blur(40px);
1435
+ top: -100px;
1436
+ right: 30%;
1437
+ animation: cs-forest-light 15s ease-in-out infinite;
1438
+ transform: rotate(15deg);
1439
+ }
1440
+
1441
+ /* Forest fireflies/magic */
1442
+ .cs-orb-scene-forest::after {
1443
+ width: 100px;
1444
+ height: 100px;
1445
+ background: radial-gradient(
1446
+ circle,
1447
+ color-mix(in srgb, #76ff03 30%, transparent) 0%,
1448
+ color-mix(in srgb, #8bc34a 20%, transparent) 40%,
1449
+ color-mix(in srgb, #4caf50 10%, transparent) 70%,
1450
+ transparent 100%
1451
+ );
1452
+ filter: blur(20px);
1453
+ bottom: 30%;
1454
+ left: 25%;
1455
+ animation:
1456
+ cs-orb-flicker 3s ease-in-out infinite,
1457
+ cs-orb-wander 20s ease-in-out infinite;
1458
+ }
1459
+
1460
+ @keyframes cs-forest-light {
1461
+ 0%,
1462
+ 100% {
1463
+ opacity: 0.3;
1464
+ transform: rotate(15deg) translateY(0);
1465
+ }
1466
+ 25% {
1467
+ opacity: 0.6;
1468
+ transform: rotate(12deg) translateY(-10px);
1469
+ }
1470
+ 50% {
1471
+ opacity: 0.4;
1472
+ transform: rotate(18deg) translateY(-5px);
1473
+ }
1474
+ 75% {
1475
+ opacity: 0.7;
1476
+ transform: rotate(10deg) translateY(-15px);
1477
+ }
1478
+ }
1479
+
1480
+ /* Sunset Scene - Warm, golden orbs */
1481
+ .cs-orb-scene-sunset {
1482
+ position: relative;
1483
+ overflow: hidden;
1484
+ background: linear-gradient(
1485
+ 45deg,
1486
+ color-mix(in srgb, #ff6f00 12%, var(--cs-bg)) 0%,
1487
+ color-mix(in srgb, #ff8f00 8%, var(--cs-bg)) 30%,
1488
+ color-mix(in srgb, #ffc107 6%, var(--cs-bg)) 70%,
1489
+ var(--cs-bg) 100%
1490
+ );
1491
+ }
1492
+
1493
+ .cs-orb-scene-sunset::before,
1494
+ .cs-orb-scene-sunset::after {
1495
+ content: '';
1496
+ position: absolute;
1497
+ border-radius: 50%;
1498
+ pointer-events: none;
1499
+ z-index: var(--cs-z-orb);
1500
+ }
1501
+
1502
+ /* Main sun orb */
1503
+ .cs-orb-scene-sunset::before {
1504
+ width: 350px;
1505
+ height: 350px;
1506
+ background: radial-gradient(
1507
+ circle,
1508
+ color-mix(in srgb, #ffeb3b 35%, transparent) 0%,
1509
+ color-mix(in srgb, #ff9800 25%, transparent) 30%,
1510
+ color-mix(in srgb, #ff5722 15%, transparent) 60%,
1511
+ transparent 100%
1512
+ );
1513
+ filter: blur(80px);
1514
+ top: -175px;
1515
+ left: 70%;
1516
+ animation: cs-orb-color-breathe 8s ease-in-out infinite;
1517
+ }
1518
+
1519
+ /* Warm atmospheric glow */
1520
+ .cs-orb-scene-sunset::after {
1521
+ width: 250px;
1522
+ height: 150px;
1523
+ background: linear-gradient(
1524
+ 135deg,
1525
+ color-mix(in srgb, #ffab40 20%, transparent) 0%,
1526
+ color-mix(in srgb, #ff7043 15%, transparent) 50%,
1527
+ transparent 100%
1528
+ );
1529
+ border-radius: 60% 40% 70% 30% / 50% 60% 40% 50%;
1530
+ filter: blur(60px);
1531
+ bottom: 20%;
1532
+ left: 10%;
1533
+ animation: cs-orb-drift-kf 12s ease-in-out infinite;
1534
+ }
1535
+
1536
+ /* Responsive adjustments for scenes */
1537
+ @container (max-width: 768px) {
1538
+ .cs-orb-scene-galaxy::before {
1539
+ width: 200px;
1540
+ height: 200px;
1541
+ filter: blur(40px);
1542
+ }
1543
+
1544
+ .cs-orb-scene-galaxy::after {
1545
+ width: 150px;
1546
+ height: 150px;
1547
+ filter: blur(30px);
1548
+ }
1549
+
1550
+ .cs-orb-scene-underwater::before {
1551
+ width: 250px;
1552
+ height: 250px;
1553
+ filter: blur(50px);
1554
+ }
1555
+
1556
+ .cs-orb-scene-nebula::before {
1557
+ width: 300px;
1558
+ height: 200px;
1559
+ filter: blur(60px);
1560
+ }
1561
+ }
1562
+
1563
+ /* Accessibility - respect reduced motion for scenes */
1564
+ @media (prefers-reduced-motion: reduce) {
1565
+ .cs-orb-scene-galaxy::before,
1566
+ .cs-orb-scene-galaxy::after,
1567
+ .cs-orb-scene-underwater::before,
1568
+ .cs-orb-scene-underwater::after,
1569
+ .cs-orb-scene-aurora::before,
1570
+ .cs-orb-scene-nebula::before,
1571
+ .cs-orb-scene-nebula::after,
1572
+ .cs-orb-scene-forest::before,
1573
+ .cs-orb-scene-forest::after,
1574
+ .cs-orb-scene-sunset::before,
1575
+ .cs-orb-scene-sunset::after {
1576
+ animation: none !important;
1577
+ }
1578
+ }