@geenius/storybook 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,777 @@
1
+ /* ============================================================================
2
+ @geenius/storybook — Shell Layout Styles
3
+ ============================================================================
4
+ Framework-agnostic CSS for the storybook shell: sidebar, main content area,
5
+ comparison panels, dashboard, cards, metrics, and responsive breakpoints.
6
+
7
+ All classes use the `gsb-` prefix to avoid collisions with component styles.
8
+ ============================================================================ */
9
+
10
+ /* ---------------------------------------------------------------------------
11
+ 0. Reset & Base
12
+ --------------------------------------------------------------------------- */
13
+
14
+ :root {
15
+ color-scheme: dark;
16
+
17
+ --gsb-bg: #071018;
18
+ --gsb-bg-soft: rgba(12, 22, 34, 0.92);
19
+ --gsb-panel: rgba(13, 24, 38, 0.82);
20
+ --gsb-panel-strong: rgba(18, 32, 48, 0.94);
21
+ --gsb-border: rgba(160, 194, 226, 0.14);
22
+ --gsb-border-strong: rgba(145, 196, 255, 0.26);
23
+ --gsb-text: #edf7ff;
24
+ --gsb-text-muted: #9eb3c8;
25
+ --gsb-text-soft: #7d93a8;
26
+ --gsb-accent: #4ec6ff;
27
+ --gsb-accent-soft: rgba(78, 198, 255, 0.16);
28
+ --gsb-success: #55d7a7;
29
+ --gsb-warning: #f4c96b;
30
+ --gsb-danger: #ff7f7f;
31
+ --gsb-shadow: 0 22px 54px rgba(0, 0, 0, 0.36);
32
+ --gsb-radius: 18px;
33
+ --gsb-radius-lg: 24px;
34
+ --gsb-radius-xl: 28px;
35
+ --gsb-sidebar-width: 320px;
36
+ --gsb-transition: 120ms ease;
37
+ }
38
+
39
+ [data-theme='light'] {
40
+ color-scheme: light;
41
+
42
+ --gsb-bg: #f4f7fa;
43
+ --gsb-bg-soft: rgba(255, 255, 255, 0.92);
44
+ --gsb-panel: rgba(255, 255, 255, 0.88);
45
+ --gsb-panel-strong: rgba(255, 255, 255, 0.96);
46
+ --gsb-border: rgba(0, 30, 60, 0.1);
47
+ --gsb-border-strong: rgba(0, 80, 180, 0.2);
48
+ --gsb-text: #0a1628;
49
+ --gsb-text-muted: #506580;
50
+ --gsb-text-soft: #7890a8;
51
+ --gsb-accent: #1a8fd4;
52
+ --gsb-accent-soft: rgba(26, 143, 212, 0.12);
53
+ --gsb-success: #1fa872;
54
+ --gsb-warning: #c49520;
55
+ --gsb-danger: #d45050;
56
+ --gsb-shadow: 0 22px 54px rgba(0, 0, 0, 0.08);
57
+ }
58
+
59
+ * {
60
+ box-sizing: border-box;
61
+ }
62
+
63
+ html,
64
+ body,
65
+ #root {
66
+ min-height: 100%;
67
+ }
68
+
69
+ body {
70
+ margin: 0;
71
+ color: var(--gsb-text);
72
+ font-family: 'IBM Plex Sans', 'Inter', ui-sans-serif, system-ui, sans-serif;
73
+ background:
74
+ radial-gradient(circle at top left, rgba(56, 189, 248, 0.18), transparent 36%),
75
+ radial-gradient(circle at top right, rgba(85, 215, 167, 0.14), transparent 28%),
76
+ linear-gradient(180deg, var(--gsb-bg) 0%, color-mix(in oklch, var(--gsb-bg) 80%, black) 100%);
77
+ }
78
+
79
+ [data-theme='light'] body {
80
+ background:
81
+ radial-gradient(circle at top left, rgba(56, 189, 248, 0.06), transparent 36%),
82
+ radial-gradient(circle at top right, rgba(85, 215, 167, 0.05), transparent 28%),
83
+ linear-gradient(180deg, var(--gsb-bg) 0%, #e8edf2 100%);
84
+ }
85
+
86
+ a {
87
+ color: inherit;
88
+ }
89
+
90
+ button,
91
+ input,
92
+ textarea,
93
+ select {
94
+ font: inherit;
95
+ }
96
+
97
+ /* ---------------------------------------------------------------------------
98
+ 1. Shell Layout — sidebar + main grid
99
+ --------------------------------------------------------------------------- */
100
+
101
+ .gsb-shell {
102
+ min-height: 100vh;
103
+ display: grid;
104
+ grid-template-columns: var(--gsb-sidebar-width) minmax(0, 1fr);
105
+ }
106
+
107
+ /* ---------------------------------------------------------------------------
108
+ 2. Sidebar
109
+ --------------------------------------------------------------------------- */
110
+
111
+ .gsb-sidebar {
112
+ position: sticky;
113
+ top: 0;
114
+ max-height: 100vh;
115
+ overflow: auto;
116
+ padding: 1.5rem 1.25rem;
117
+ background: linear-gradient(
118
+ 180deg,
119
+ color-mix(in oklch, var(--gsb-bg) 98%, transparent),
120
+ color-mix(in oklch, var(--gsb-bg) 90%, transparent)
121
+ );
122
+ border-right: 1px solid var(--gsb-border);
123
+ backdrop-filter: blur(22px);
124
+ }
125
+
126
+ .gsb-sidebar__top {
127
+ display: flex;
128
+ align-items: flex-start;
129
+ justify-content: space-between;
130
+ gap: 0.75rem;
131
+ margin-bottom: 1rem;
132
+ }
133
+
134
+ .gsb-sidebar__brand {
135
+ display: grid;
136
+ gap: 0.3rem;
137
+ }
138
+
139
+ .gsb-sidebar__title {
140
+ margin: 0;
141
+ font-size: 1.35rem;
142
+ font-weight: 700;
143
+ line-height: 1.05;
144
+ }
145
+
146
+ .gsb-sidebar__summary {
147
+ margin: 0;
148
+ color: var(--gsb-text-muted);
149
+ line-height: 1.55;
150
+ font-size: 0.82rem;
151
+ }
152
+
153
+ /* Eyebrow label */
154
+ .gsb-eyebrow {
155
+ margin: 0;
156
+ font-size: 0.7rem;
157
+ font-weight: 700;
158
+ letter-spacing: 0.24em;
159
+ text-transform: uppercase;
160
+ color: var(--gsb-accent);
161
+ }
162
+
163
+ /* Component count badge */
164
+ .gsb-count {
165
+ flex-shrink: 0;
166
+ display: inline-flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ min-width: 2.1rem;
170
+ padding: 0.35rem 0.6rem;
171
+ border-radius: 999px;
172
+ border: 1px solid var(--gsb-border-strong);
173
+ background: var(--gsb-accent-soft);
174
+ color: var(--gsb-accent);
175
+ font-size: 0.72rem;
176
+ font-weight: 700;
177
+ }
178
+
179
+ /* Search */
180
+ .gsb-search {
181
+ margin-bottom: 1rem;
182
+ }
183
+
184
+ .gsb-search__input {
185
+ width: 100%;
186
+ border: 1px solid var(--gsb-border);
187
+ border-radius: 16px;
188
+ padding: 0.82rem 0.95rem;
189
+ background: rgba(255, 255, 255, 0.03);
190
+ color: var(--gsb-text);
191
+ outline: none;
192
+ transition: border-color var(--gsb-transition), background var(--gsb-transition);
193
+ }
194
+
195
+ .gsb-search__input::placeholder {
196
+ color: var(--gsb-text-soft);
197
+ }
198
+
199
+ .gsb-search__input:focus {
200
+ border-color: var(--gsb-border-strong);
201
+ background: rgba(255, 255, 255, 0.05);
202
+ }
203
+
204
+ [data-theme='light'] .gsb-search__input {
205
+ background: rgba(0, 0, 0, 0.02);
206
+ }
207
+
208
+ [data-theme='light'] .gsb-search__input:focus {
209
+ background: rgba(0, 0, 0, 0.04);
210
+ }
211
+
212
+ /* Sections & items */
213
+ .gsb-sidebar__section + .gsb-sidebar__section {
214
+ margin-top: 1.15rem;
215
+ }
216
+
217
+ .gsb-sidebar__section-title {
218
+ margin: 0 0 0.6rem;
219
+ font-size: 0.72rem;
220
+ font-weight: 700;
221
+ letter-spacing: 0.18em;
222
+ text-transform: uppercase;
223
+ color: var(--gsb-text-soft);
224
+ }
225
+
226
+ .gsb-sidebar__items {
227
+ display: grid;
228
+ gap: 0.55rem;
229
+ }
230
+
231
+ .gsb-sidebar__item {
232
+ width: 100%;
233
+ padding: 0.95rem 1rem;
234
+ border: 1px solid transparent;
235
+ border-radius: var(--gsb-radius);
236
+ background: rgba(255, 255, 255, 0.03);
237
+ color: inherit;
238
+ text-align: left;
239
+ cursor: pointer;
240
+ transition: transform var(--gsb-transition), border-color var(--gsb-transition),
241
+ background var(--gsb-transition);
242
+ }
243
+
244
+ [data-theme='light'] .gsb-sidebar__item {
245
+ background: rgba(0, 0, 0, 0.02);
246
+ }
247
+
248
+ .gsb-sidebar__item:hover {
249
+ transform: translateY(-1px);
250
+ border-color: var(--gsb-border);
251
+ background: rgba(255, 255, 255, 0.05);
252
+ }
253
+
254
+ [data-theme='light'] .gsb-sidebar__item:hover {
255
+ background: rgba(0, 0, 0, 0.04);
256
+ }
257
+
258
+ .gsb-sidebar__item.is-active {
259
+ border-color: var(--gsb-border-strong);
260
+ background: linear-gradient(
261
+ 180deg,
262
+ var(--gsb-accent-soft),
263
+ color-mix(in oklch, var(--gsb-accent-soft) 50%, transparent)
264
+ );
265
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
266
+ }
267
+
268
+ .gsb-sidebar__item-title {
269
+ display: flex;
270
+ align-items: center;
271
+ justify-content: space-between;
272
+ gap: 0.8rem;
273
+ margin: 0;
274
+ font-size: 0.95rem;
275
+ font-weight: 600;
276
+ }
277
+
278
+ .gsb-sidebar__item-id {
279
+ margin-top: 0.45rem;
280
+ font-size: 0.72rem;
281
+ font-family: ui-monospace, 'SFMono-Regular', monospace;
282
+ color: var(--gsb-text-soft);
283
+ }
284
+
285
+ .gsb-sidebar__item-description {
286
+ margin-top: 0.45rem;
287
+ font-size: 0.82rem;
288
+ color: var(--gsb-text-muted);
289
+ line-height: 1.45;
290
+ }
291
+
292
+ /* Theme toggle button */
293
+ .gsb-theme-toggle {
294
+ display: inline-flex;
295
+ align-items: center;
296
+ gap: 0.5rem;
297
+ padding: 0.5rem 0.85rem;
298
+ border: 1px solid var(--gsb-border);
299
+ border-radius: 999px;
300
+ background: rgba(255, 255, 255, 0.04);
301
+ color: var(--gsb-text-muted);
302
+ font-size: 0.78rem;
303
+ font-weight: 600;
304
+ cursor: pointer;
305
+ transition: border-color var(--gsb-transition), background var(--gsb-transition);
306
+ }
307
+
308
+ .gsb-theme-toggle:hover {
309
+ border-color: var(--gsb-border-strong);
310
+ background: rgba(255, 255, 255, 0.07);
311
+ }
312
+
313
+ /* Empty state */
314
+ .gsb-empty {
315
+ padding: 1.4rem 1rem;
316
+ border: 1px dashed var(--gsb-border);
317
+ border-radius: var(--gsb-radius);
318
+ color: var(--gsb-text-muted);
319
+ text-align: center;
320
+ }
321
+
322
+ /* ---------------------------------------------------------------------------
323
+ 3. Main Content Area
324
+ --------------------------------------------------------------------------- */
325
+
326
+ .gsb-main {
327
+ min-width: 0;
328
+ }
329
+
330
+ .gsb-main__inner {
331
+ max-width: 1280px;
332
+ margin: 0 auto;
333
+ padding: 1.4rem clamp(1rem, 2vw, 2rem) 2rem;
334
+ }
335
+
336
+ /* Mobile topbar */
337
+ .gsb-topbar {
338
+ display: none;
339
+ margin-bottom: 0.85rem;
340
+ }
341
+
342
+ .gsb-nav-toggle {
343
+ display: inline-flex;
344
+ align-items: center;
345
+ gap: 0.6rem;
346
+ border: 1px solid var(--gsb-border);
347
+ border-radius: 999px;
348
+ padding: 0.68rem 1rem;
349
+ background: rgba(255, 255, 255, 0.04);
350
+ color: inherit;
351
+ cursor: pointer;
352
+ }
353
+
354
+ .gsb-nav-toggle:hover {
355
+ border-color: var(--gsb-border-strong);
356
+ }
357
+
358
+ /* ---------------------------------------------------------------------------
359
+ 4. Hero / Landing Section
360
+ --------------------------------------------------------------------------- */
361
+
362
+ .gsb-hero {
363
+ display: grid;
364
+ gap: 1.25rem;
365
+ padding: 1.5rem;
366
+ border: 1px solid var(--gsb-border);
367
+ border-radius: var(--gsb-radius-xl);
368
+ background:
369
+ linear-gradient(135deg, var(--gsb-accent-soft), transparent 36%),
370
+ linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.02)),
371
+ var(--gsb-bg-soft);
372
+ box-shadow: var(--gsb-shadow);
373
+ }
374
+
375
+ .gsb-hero__title {
376
+ margin: 0;
377
+ font-size: 1.35rem;
378
+ font-weight: 700;
379
+ line-height: 1.05;
380
+ }
381
+
382
+ .gsb-hero__summary {
383
+ margin: 0;
384
+ color: var(--gsb-text-muted);
385
+ line-height: 1.55;
386
+ }
387
+
388
+ .gsb-hero__meta {
389
+ display: flex;
390
+ flex-wrap: wrap;
391
+ align-items: center;
392
+ gap: 0.5rem;
393
+ }
394
+
395
+ /* Pill / tag */
396
+ .gsb-pill {
397
+ display: inline-flex;
398
+ align-items: center;
399
+ gap: 0.4rem;
400
+ padding: 0.34rem 0.68rem;
401
+ border-radius: 999px;
402
+ background: rgba(255, 255, 255, 0.05);
403
+ border: 1px solid rgba(255, 255, 255, 0.08);
404
+ font-size: 0.72rem;
405
+ color: var(--gsb-text-muted);
406
+ }
407
+
408
+ .gsb-pill--accent {
409
+ background: var(--gsb-accent-soft);
410
+ border-color: var(--gsb-border-strong);
411
+ color: var(--gsb-accent);
412
+ }
413
+
414
+ /* ---------------------------------------------------------------------------
415
+ 5. Story Space — content area below the hero
416
+ --------------------------------------------------------------------------- */
417
+
418
+ .gsb-story-space {
419
+ margin-top: 1.4rem;
420
+ }
421
+
422
+ /* Story deck — section of stories */
423
+ .gsb-story-deck {
424
+ display: grid;
425
+ gap: 1rem;
426
+ }
427
+
428
+ .gsb-story-deck__header {
429
+ display: grid;
430
+ gap: 0.5rem;
431
+ }
432
+
433
+ .gsb-story-deck__title {
434
+ margin: 0;
435
+ font-size: 1.35rem;
436
+ font-weight: 700;
437
+ line-height: 1.05;
438
+ }
439
+
440
+ .gsb-story-deck__summary {
441
+ margin: 0;
442
+ color: var(--gsb-text-muted);
443
+ line-height: 1.55;
444
+ }
445
+
446
+ /* ---------------------------------------------------------------------------
447
+ 6. Grid Layouts
448
+ --------------------------------------------------------------------------- */
449
+
450
+ .gsb-story-grid {
451
+ display: grid;
452
+ gap: 1rem;
453
+ }
454
+
455
+ .gsb-story-grid--2 {
456
+ grid-template-columns: repeat(2, minmax(0, 1fr));
457
+ }
458
+
459
+ .gsb-story-grid--3 {
460
+ grid-template-columns: repeat(3, minmax(0, 1fr));
461
+ }
462
+
463
+ /* ---------------------------------------------------------------------------
464
+ 7. Cards
465
+ --------------------------------------------------------------------------- */
466
+
467
+ .gsb-card {
468
+ display: grid;
469
+ gap: 0.8rem;
470
+ padding: 1rem;
471
+ border: 1px solid var(--gsb-border);
472
+ border-radius: var(--gsb-radius-lg);
473
+ background: var(--gsb-panel);
474
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
475
+ min-width: 0;
476
+ }
477
+
478
+ .gsb-card--accent {
479
+ border-color: var(--gsb-border-strong);
480
+ background: linear-gradient(
481
+ 180deg,
482
+ var(--gsb-accent-soft),
483
+ color-mix(in oklch, var(--gsb-panel) 86%, transparent)
484
+ );
485
+ }
486
+
487
+ .gsb-card--success {
488
+ border-color: rgba(85, 215, 167, 0.28);
489
+ background: linear-gradient(
490
+ 180deg,
491
+ rgba(85, 215, 167, 0.12),
492
+ color-mix(in oklch, var(--gsb-panel) 86%, transparent)
493
+ );
494
+ }
495
+
496
+ .gsb-card--warning {
497
+ border-color: rgba(244, 201, 107, 0.3);
498
+ background: linear-gradient(
499
+ 180deg,
500
+ rgba(244, 201, 107, 0.12),
501
+ color-mix(in oklch, var(--gsb-panel) 86%, transparent)
502
+ );
503
+ }
504
+
505
+ .gsb-card--danger {
506
+ border-color: rgba(255, 127, 127, 0.28);
507
+ background: linear-gradient(
508
+ 180deg,
509
+ rgba(255, 127, 127, 0.12),
510
+ color-mix(in oklch, var(--gsb-panel) 86%, transparent)
511
+ );
512
+ }
513
+
514
+ .gsb-card--interactive {
515
+ cursor: pointer;
516
+ transition: transform var(--gsb-transition), border-color var(--gsb-transition);
517
+ }
518
+
519
+ .gsb-card--interactive:hover {
520
+ transform: translateY(-2px);
521
+ border-color: var(--gsb-border-strong);
522
+ }
523
+
524
+ .gsb-card__title {
525
+ margin: 0;
526
+ font-size: 1rem;
527
+ font-weight: 650;
528
+ }
529
+
530
+ .gsb-card__summary {
531
+ margin: 0;
532
+ font-size: 0.9rem;
533
+ color: var(--gsb-text-muted);
534
+ line-height: 1.5;
535
+ }
536
+
537
+ /* ---------------------------------------------------------------------------
538
+ 8. Note / Callout
539
+ --------------------------------------------------------------------------- */
540
+
541
+ .gsb-note {
542
+ display: flex;
543
+ gap: 0.7rem;
544
+ padding: 0.9rem 1rem;
545
+ border-radius: var(--gsb-radius);
546
+ border: 1px solid var(--gsb-border);
547
+ background: rgba(255, 255, 255, 0.03);
548
+ color: var(--gsb-text-muted);
549
+ }
550
+
551
+ .gsb-note::before {
552
+ content: 'i';
553
+ flex-shrink: 0;
554
+ width: 1.35rem;
555
+ height: 1.35rem;
556
+ border-radius: 999px;
557
+ display: inline-flex;
558
+ align-items: center;
559
+ justify-content: center;
560
+ font-size: 0.72rem;
561
+ font-weight: 700;
562
+ background: rgba(78, 198, 255, 0.18);
563
+ color: var(--gsb-accent);
564
+ }
565
+
566
+ .gsb-note--warning::before {
567
+ content: '!';
568
+ background: rgba(244, 201, 107, 0.2);
569
+ color: var(--gsb-warning);
570
+ }
571
+
572
+ .gsb-note--success::before {
573
+ content: '\2713';
574
+ background: rgba(85, 215, 167, 0.2);
575
+ color: var(--gsb-success);
576
+ }
577
+
578
+ .gsb-note--danger::before {
579
+ content: '\00d7';
580
+ background: rgba(255, 127, 127, 0.2);
581
+ color: var(--gsb-danger);
582
+ }
583
+
584
+ /* ---------------------------------------------------------------------------
585
+ 9. Metrics
586
+ --------------------------------------------------------------------------- */
587
+
588
+ .gsb-metrics {
589
+ display: grid;
590
+ gap: 0.8rem;
591
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
592
+ }
593
+
594
+ .gsb-metric {
595
+ padding: 0.9rem 1rem;
596
+ border-radius: 20px;
597
+ border: 1px solid var(--gsb-border);
598
+ background: rgba(255, 255, 255, 0.03);
599
+ }
600
+
601
+ [data-theme='light'] .gsb-metric {
602
+ background: rgba(0, 0, 0, 0.02);
603
+ }
604
+
605
+ .gsb-metric__label {
606
+ margin: 0;
607
+ font-size: 0.72rem;
608
+ font-weight: 700;
609
+ letter-spacing: 0.18em;
610
+ text-transform: uppercase;
611
+ color: var(--gsb-text-soft);
612
+ }
613
+
614
+ .gsb-metric__value {
615
+ margin: 0.42rem 0 0;
616
+ font-size: 1.2rem;
617
+ font-weight: 700;
618
+ }
619
+
620
+ .gsb-metric__detail {
621
+ margin: 0.32rem 0 0;
622
+ font-size: 0.82rem;
623
+ color: var(--gsb-text-muted);
624
+ }
625
+
626
+ /* ---------------------------------------------------------------------------
627
+ 10. Comparison Panels (TW vs CSS side-by-side)
628
+ --------------------------------------------------------------------------- */
629
+
630
+ .gsb-comparison {
631
+ display: grid;
632
+ gap: 1rem;
633
+ grid-template-columns: repeat(2, minmax(0, 1fr));
634
+ }
635
+
636
+ .gsb-comparison__pane {
637
+ display: grid;
638
+ gap: 0.8rem;
639
+ min-width: 0;
640
+ }
641
+
642
+ .gsb-comparison__label {
643
+ display: inline-flex;
644
+ align-items: center;
645
+ gap: 0.4rem;
646
+ font-size: 0.72rem;
647
+ font-weight: 700;
648
+ text-transform: uppercase;
649
+ letter-spacing: 0.1em;
650
+ }
651
+
652
+ .gsb-comparison__label--tw {
653
+ color: oklch(0.7 0.15 200);
654
+ }
655
+
656
+ .gsb-comparison__label--css {
657
+ color: oklch(0.7 0.15 140);
658
+ }
659
+
660
+ .gsb-comparison__badge {
661
+ font-size: 0.6rem;
662
+ padding: 0.1rem 0.35rem;
663
+ border-radius: 999px;
664
+ font-weight: 700;
665
+ }
666
+
667
+ .gsb-comparison__badge--tw {
668
+ background: oklch(0.7 0.15 200 / 0.15);
669
+ color: oklch(0.7 0.15 200);
670
+ }
671
+
672
+ .gsb-comparison__badge--css {
673
+ background: oklch(0.7 0.15 140 / 0.15);
674
+ color: oklch(0.7 0.15 140);
675
+ }
676
+
677
+ .gsb-comparison__canvas {
678
+ padding: 1rem;
679
+ border-radius: 22px;
680
+ border: 1px solid var(--gsb-border);
681
+ background: var(--gsb-panel-strong);
682
+ min-height: 100%;
683
+ }
684
+
685
+ /* ---------------------------------------------------------------------------
686
+ 11. Utility Classes
687
+ --------------------------------------------------------------------------- */
688
+
689
+ .gsb-stack {
690
+ display: grid;
691
+ gap: 1rem;
692
+ }
693
+
694
+ .gsb-inline {
695
+ display: flex;
696
+ flex-wrap: wrap;
697
+ gap: 0.75rem;
698
+ align-items: center;
699
+ }
700
+
701
+ .gsb-frame {
702
+ padding: 1rem;
703
+ border-radius: 22px;
704
+ border: 1px solid var(--gsb-border);
705
+ background: rgba(255, 255, 255, 0.03);
706
+ }
707
+
708
+ .gsb-muted {
709
+ margin: 0;
710
+ color: var(--gsb-text-muted);
711
+ line-height: 1.55;
712
+ }
713
+
714
+ /* Backdrop for mobile sidebar */
715
+ .gsb-backdrop {
716
+ display: none;
717
+ }
718
+
719
+ /* ---------------------------------------------------------------------------
720
+ 12. Responsive Breakpoints
721
+ --------------------------------------------------------------------------- */
722
+
723
+ @media (max-width: 1080px) {
724
+ .gsb-story-grid--3 {
725
+ grid-template-columns: repeat(2, minmax(0, 1fr));
726
+ }
727
+ }
728
+
729
+ @media (max-width: 860px) {
730
+ .gsb-shell {
731
+ grid-template-columns: 1fr;
732
+ }
733
+
734
+ .gsb-topbar {
735
+ display: flex;
736
+ }
737
+
738
+ .gsb-sidebar {
739
+ position: fixed;
740
+ inset: 0 auto 0 0;
741
+ z-index: 30;
742
+ width: min(90vw, 340px);
743
+ transform: translateX(-100%);
744
+ transition: transform 160ms ease;
745
+ box-shadow: var(--gsb-shadow);
746
+ }
747
+
748
+ .gsb-sidebar.is-open {
749
+ transform: translateX(0);
750
+ }
751
+
752
+ .gsb-backdrop {
753
+ display: block;
754
+ position: fixed;
755
+ inset: 0;
756
+ z-index: 20;
757
+ background: rgba(3, 8, 12, 0.68);
758
+ backdrop-filter: blur(8px);
759
+ }
760
+
761
+ .gsb-comparison,
762
+ .gsb-story-grid--2,
763
+ .gsb-story-grid--3 {
764
+ grid-template-columns: 1fr;
765
+ }
766
+ }
767
+
768
+ @media (max-width: 640px) {
769
+ .gsb-main__inner {
770
+ padding: 1rem 0.85rem 1.5rem;
771
+ }
772
+
773
+ .gsb-hero {
774
+ padding: 1.15rem;
775
+ border-radius: var(--gsb-radius-lg);
776
+ }
777
+ }