PluginProbe
GutSlider – All in One Slider and Carousel Blocks for Gutenberg / 3.2.0
GutSlider – All in One Slider and Carousel Blocks for Gutenberg v3.2.0
3.2.0 3.1.0 3.0.0 2.13.2 2.13.1 2.13.0 trunk 1.0.0 2.1.0 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.1 2.5.3 2.5.4 2.5.5 All 57 releases
← All changes | admin/css/admin.css +1206 -374 3.0.0 → 3.2.0 View file →
@@ -10,40 +10,42 @@
10 10 * ---------------------------------------------------------------- */
11 11
12 12 .gs-app {
13 13 /* Brand */
14 - --gs-brand: #5034c5;
15 - --gs-brand-hover: #4229ad;
16 - --gs-brand-soft: #efecfd;
17 - --gs-brand-ring: rgba(80, 52, 197, 0.28);
18 - --gs-brand-grad: linear-gradient(135deg, #6a4be0 0%, #5034c5 55%, #3f27a6 100%);
14 + --gs-brand: #5325e8;
15 + --gs-brand-hover: #451dcc;
16 + --gs-brand-soft: #efebfe;
17 + --gs-brand-line: #d9cffb;
18 + --gs-brand-ring: rgba(83, 37, 232, 0.28);
19 + --gs-brand-grad: linear-gradient(135deg, #6a45f0 0%, #5325e8 55%, #3f1bbd 100%);
19 20
20 21 /* Surfaces */
21 - --gs-bg: #f6f7fb;
22 + --gs-bg: #f4f5f8;
22 23 --gs-surface: #fff;
23 - --gs-surface-2: #fbfbfe;
24 + --gs-surface-2: #fafafc;
24 25 --gs-surface-sunk: #f1f2f7;
25 26
26 27 /* Lines */
27 - --gs-line: #e7e8ef;
28 - --gs-line-strong: #d8dae4;
28 + --gs-line: #e4e6ec;
29 + --gs-line-strong: #d3d7e0;
29 30
30 31 /* Text */
31 - --gs-text: #14162b;
32 - --gs-text-2: #5c6079;
33 - --gs-text-3: #8b8fa6;
32 + --gs-text: #12141c;
33 + --gs-text-2: #5c6275;
34 + --gs-text-3: #8a90a2;
34 35
35 36 /* Status */
36 37 --gs-ok: #12855a;
37 - --gs-ok-soft: #e6f6ef;
38 + --gs-ok-soft: #e4f5ee;
38 39 --gs-danger: #c0362c;
39 40 --gs-danger-soft: #fdeceb;
40 - --gs-gold: #b7791f;
41 - --gs-gold-soft: #fdf3e0;
41 + --gs-gold: #b45309;
42 + --gs-gold-soft: #fdf2e3;
42 43
43 44 /* Shape */
44 45 --gs-r-sm: 8px;
45 - --gs-r: 12px;
46 + --gs-r-md: 10px;
47 + --gs-r: 14px;
46 48 --gs-r-lg: 18px;
47 49 --gs-r-full: 999px;
48 50
49 51 /* Elevation */
@@ -58,13 +60,14 @@
58 60 }
59 61
60 62 .gs-app[data-gs-theme='dark'],
61 63 .gs-app.gs-dark {
62 - --gs-brand: #8d76ff;
63 - --gs-brand-hover: #a08fff;
64 + --gs-brand: #9b83ff;
65 + --gs-brand-hover: #b09dff;
64 66 --gs-brand-soft: #241f3d;
65 - --gs-brand-ring: rgba(141, 118, 255, 0.35);
66 - --gs-brand-grad: linear-gradient(135deg, #6f56e8 0%, #5b3fd0 55%, #43299f 100%);
67 + --gs-brand-line: #362f5c;
68 + --gs-brand-ring: rgba(155, 131, 255, 0.35);
69 + --gs-brand-grad: linear-gradient(135deg, #7a5df0 0%, #5f3fd8 55%, #4529ad 100%);
67 70
68 71 --gs-bg: #0e0f1a;
69 72 --gs-surface: #16182a;
70 73 --gs-surface-2: #1b1d31;
@@ -100,11 +103,11 @@
100 103 body.gutslider-admin-page #wpbody-content {
101 104 padding-bottom: 0;
102 105 }
103 106
107 +/* The shell prints its own footer bar, so the wp-admin one is redundant. */
104 108 body.gutslider-admin-page #wpfooter {
105 - padding-left: 24px;
106 - padding-right: 24px;
109 + display: none;
107 110 }
108 111
109 112 /* Hide third-party nags printed outside our shell. Notices we render
110 113 inside .gs-app (settings errors, for example) are kept and restyled. */
@@ -124,11 +127,12 @@
124 127 * ---------------------------------------------------------------- */
125 128
126 129 .gs-app {
127 130 box-sizing: border-box;
131 + display: flex;
132 + flex-direction: column;
128 133 min-height: calc(100vh - 32px);
129 134 margin: 0;
130 - padding-bottom: 96px;
131 135 background: var(--gs-bg);
132 136 color: var(--gs-text);
133 137 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, Roboto, 'Helvetica Neue', Arial, sans-serif;
134 138 font-size: 14px;
@@ -161,9 +165,9 @@
161 165 }
162 166
163 167 .gs-shell {
164 168 width: 100%;
165 - max-width: 1240px;
169 + max-width: 1248px;
166 170 margin: 0 auto;
167 171 padding: 0 24px;
168 172 }
169 173
@@ -168,8 +172,10 @@
168 172 }
169 173
170 174 .gs-main {
171 175 display: block;
176 + flex: 1 0 auto;
177 + padding-bottom: 56px;
172 178 }
173 179
174 180 .gs-stack {
175 181 display: flex;
@@ -200,16 +206,18 @@
200 206 background: var(--gs-surface);
201 207 }
202 208 }
203 209
210 +/* Three tracks so the nav stays optically centred whatever flanks it. */
204 211 .gs-bar__inner {
205 - display: flex;
212 + display: grid;
213 + grid-template-columns: 1fr auto 1fr;
206 214 align-items: center;
207 215 gap: 24px;
208 - max-width: 1240px;
216 + max-width: 1440px;
209 217 margin: 0 auto;
210 - padding: 0 24px;
211 - height: 64px;
218 + padding: 0 28px;
219 + height: 60px;
212 220 }
213 221
214 222 .gs-brand {
215 223 display: flex;
@@ -216,9 +224,10 @@
216 224 align-items: center;
217 225 gap: 10px;
218 226 text-decoration: none;
219 227 color: var(--gs-text);
220 - flex-shrink: 0;
228 + justify-self: start;
229 + min-width: 0;
221 230 }
222 231
223 232 .gs-brand:hover,
224 233 .gs-brand:focus {
@@ -227,32 +236,26 @@
227 236
228 237 .gs-brand__mark {
229 238 display: grid;
230 239 place-items: center;
231 - width: 32px;
232 - height: 32px;
240 + width: 26px;
241 + height: 26px;
242 + flex-shrink: 0;
233 243 border-radius: var(--gs-r-sm);
234 - background: var(--gs-brand-grad);
244 + background: var(--gs-brand);
235 245 color: #fff;
236 - box-shadow: 0 4px 12px -4px var(--gs-brand-ring);
237 246 }
238 247
239 248 .gs-brand__mark svg {
240 - width: 17px;
241 - height: 17px;
249 + width: 14px;
250 + height: 14px;
242 251 display: block;
243 252 }
244 253
245 -.gs-brand__text {
246 - display: flex;
247 - align-items: center;
248 - gap: 8px;
249 -}
250 -
251 254 .gs-brand__name {
252 255 font-size: 15px;
253 256 font-weight: 650;
254 - letter-spacing: -0.01em;
257 + letter-spacing: -0.013em;
255 258 }
256 259
257 260 .gs-chip {
258 261 display: inline-flex;
@@ -257,21 +260,25 @@
257 260 .gs-chip {
258 261 display: inline-flex;
259 262 align-items: center;
260 263 height: 20px;
261 - padding: 0 8px;
262 - border-radius: var(--gs-r-full);
264 + padding: 0 7px;
265 + border-radius: 6px;
263 266 font-size: 11px;
264 - font-weight: 600;
265 - letter-spacing: 0.02em;
266 - background: var(--gs-surface-sunk);
267 - color: var(--gs-text-3);
267 + font-weight: 550;
268 + letter-spacing: 0;
269 + background: var(--gs-surface-2);
270 + color: var(--gs-text-2);
268 271 border: 1px solid var(--gs-line);
269 272 }
270 273
271 274 .gs-chip--pro {
272 - background: var(--gs-brand-grad);
273 - color: #fff;
275 + padding: 0 8px;
276 + font-size: 10px;
277 + font-weight: 700;
278 + letter-spacing: 0.06em;
279 + background: var(--gs-brand-soft);
280 + color: var(--gs-brand);
274 281 border-color: transparent;
275 282 }
276 283
277 284 /* Nav */
@@ -279,9 +286,8 @@
279 286 .gs-nav {
280 287 display: flex;
281 288 align-items: center;
282 289 gap: 2px;
283 - flex: 1;
284 290 min-width: 0;
285 291 overflow-x: auto;
286 292 scrollbar-width: none;
287 293 }
@@ -293,10 +299,10 @@
293 299 .gs-nav__link {
294 300 position: relative;
295 301 display: inline-flex;
296 302 align-items: center;
297 - height: 34px;
298 - padding: 0 14px;
303 + height: 32px;
304 + padding: 0 12px;
299 305 border-radius: var(--gs-r-sm);
300 306 font-size: 13.5px;
301 307 font-weight: 550;
302 308 text-decoration: none;
@@ -314,8 +320,9 @@
314 320
315 321 .gs-nav__link.is-active {
316 322 color: var(--gs-brand);
317 323 background: var(--gs-brand-soft);
324 + font-weight: 600;
318 325 }
319 326
320 327 .gs-bar__actions {
321 328 display: flex;
@@ -320,20 +327,20 @@
320 327 .gs-bar__actions {
321 328 display: flex;
322 329 align-items: center;
323 330 gap: 8px;
324 - flex-shrink: 0;
331 + justify-self: end;
325 332 }
326 333
327 334 .gs-icon-btn {
328 335 display: grid;
329 336 place-items: center;
330 - width: 34px;
331 - height: 34px;
337 + width: 32px;
338 + height: 32px;
332 339 padding: 0;
333 - border: 1px solid transparent;
340 + border: 1px solid var(--gs-line);
334 341 border-radius: var(--gs-r-sm);
335 - background: transparent;
342 + background: var(--gs-surface);
336 343 color: var(--gs-text-2);
337 344 cursor: pointer;
338 345 text-decoration: none;
339 346 transition: all var(--gs-fast);
@@ -339,10 +346,10 @@
339 346 transition: all var(--gs-fast);
340 347 }
341 348
342 349 .gs-icon-btn:hover {
343 - background: var(--gs-surface-sunk);
344 - border-color: var(--gs-line);
350 + background: var(--gs-surface-2);
351 + border-color: var(--gs-line-strong);
345 352 color: var(--gs-text);
346 353 }
347 354
348 355 .gs-icon {
@@ -371,11 +378,11 @@
371 378 position: relative;
372 379 display: inline-flex;
373 380 align-items: center;
374 381 justify-content: center;
375 - gap: 8px;
376 - height: 40px;
377 - padding: 0 18px;
382 + gap: 7px;
383 + height: 36px;
384 + padding: 0 14px;
378 385 border: 1px solid transparent;
379 386 border-radius: var(--gs-r-sm);
380 387 font-family: inherit;
381 388 font-size: 13.5px;
@@ -404,11 +411,9 @@
404 411
405 412 .gs-btn--primary {
406 413 background: var(--gs-brand);
407 414 color: #fff;
408 - box-shadow:
409 - 0 1px 2px rgba(20, 22, 43, 0.12),
410 - 0 6px 16px -8px var(--gs-brand-ring);
415 + box-shadow: 0 1px 2px rgba(18, 20, 28, 0.08);
411 416 }
412 417
413 418 .gs-btn--primary:hover,
414 419 .gs-btn--primary:focus {
@@ -545,20 +550,15 @@
545 550 }
546 551
547 552 .gs-eyebrow {
548 553 display: inline-block;
549 - margin-bottom: 14px;
550 - font-size: 11.5px;
554 + font-size: 10.5px;
551 555 font-weight: 700;
552 - letter-spacing: 0.09em;
556 + letter-spacing: 0.08em;
553 557 text-transform: uppercase;
554 558 color: var(--gs-brand);
555 559 }
556 560
557 -.gs-eyebrow--light {
558 - color: rgba(255, 255, 255, 0.72);
559 -}
560 -
561 561 .gs-page-head {
562 562 display: flex;
563 563 align-items: flex-end;
564 564 justify-content: space-between;
@@ -566,18 +566,58 @@
566 566 flex-wrap: wrap;
567 567 padding-top: 40px;
568 568 }
569 569
570 +.gs-page-head__actions {
571 + display: flex;
572 + align-items: center;
573 + gap: 10px;
574 + flex-wrap: wrap;
575 +}
576 +
570 577 .gs-page-title {
571 - font-size: 26px;
578 + font-size: 23px;
579 + letter-spacing: -0.026em;
572 580 }
573 581
574 582 .gs-page-sub {
575 - max-width: 62ch;
576 - margin-top: 6px;
583 + max-width: 68ch;
584 + margin-top: 5px;
585 + font-size: 13.5px;
577 586 color: var(--gs-text-2);
578 587 }
579 588
589 +/* Status pill — licence state in the page header. */
590 +
591 +.gs-pill {
592 + display: inline-flex;
593 + align-items: center;
594 + gap: 7px;
595 + padding: 7px 12px;
596 + border-radius: var(--gs-r-full);
597 + font-size: 12.5px;
598 + font-weight: 550;
599 + background: var(--gs-ok-soft);
600 + color: var(--gs-ok);
601 +}
602 +
603 +.gs-pill__dot {
604 + width: 7px;
605 + height: 7px;
606 + border-radius: 50%;
607 + background: currentcolor;
608 +}
609 +
610 +.gs-pill--expiring {
611 + background: var(--gs-gold-soft);
612 + color: var(--gs-gold);
613 +}
614 +
615 +.gs-pill--inactive {
616 + background: var(--gs-danger-soft);
617 + color: var(--gs-danger);
618 +}
619 +
580 620 .gs-count {
581 621 flex-shrink: 0;
582 622 padding: 6px 12px;
583 623 border-radius: var(--gs-r-full);
@@ -588,142 +628,194 @@
588 628 font-variant-numeric: tabular-nums;
589 629 color: var(--gs-text-2);
590 630 }
591 631
592 -.gs-section__head {
593 - margin-bottom: 20px;
632 +/* ------------------------------------------------------------------
633 + * 7. Dashboard layout
634 + * ---------------------------------------------------------------- */
635 +
636 +.gs-page {
637 + display: flex;
638 + flex-direction: column;
639 + gap: 22px;
640 +
641 + /* Matches the top opening on the blocks and settings screens. */
642 + padding-top: 40px;
643 + padding-bottom: 40px;
594 644 }
595 645
596 -.gs-section__title {
597 - font-size: 19px;
646 +.gs-page .gs-page-head {
647 + padding-top: 0;
598 648 }
599 649
600 -.gs-section__sub {
601 - margin-top: 4px;
650 +/* Top banner — licence prompts and similar, supplied by filter. */
651 +
652 +.gs-banner {
653 + display: flex;
654 + align-items: center;
655 + gap: 14px;
656 + flex-wrap: wrap;
657 + padding: 16px 18px;
658 + border-radius: var(--gs-r);
659 + border: 1px solid var(--gs-line);
660 + background: var(--gs-surface);
661 + box-shadow: var(--gs-shadow-sm);
662 +}
663 +
664 +.gs-banner__icon {
665 + display: grid;
666 + place-items: center;
667 + width: 36px;
668 + height: 36px;
669 + flex-shrink: 0;
670 + border-radius: var(--gs-r-sm);
671 + border: 1px solid var(--gs-line);
672 + background: var(--gs-brand-soft);
673 + color: var(--gs-brand);
674 +}
675 +
676 +.gs-banner__text {
677 + flex: 1;
678 + min-width: 220px;
679 +}
680 +
681 +.gs-banner__title {
682 + display: block;
683 + font-size: 14px;
684 + font-weight: 620;
685 + color: var(--gs-text);
686 +}
687 +
688 +.gs-banner__sub {
689 + margin-top: 2px;
690 + font-size: 12.5px;
691 + line-height: 1.5;
602 692 color: var(--gs-text-2);
603 693 }
604 694
605 -/* ------------------------------------------------------------------
606 - * 7. Hero
607 - * ---------------------------------------------------------------- */
695 +/* Toned banners keep a hairline border tinted from their own accent, so the
696 + edge reads as intentional rather than as a colour block on the page. */
608 697
609 -.gs-hero {
610 - position: relative;
611 - overflow: hidden;
612 - padding: 56px 0 52px;
698 +.gs-banner--warning {
699 + border-color: #f0ddc2;
700 + border-color: color-mix(in srgb, var(--gs-gold) 20%, transparent);
701 + background: var(--gs-gold-soft);
702 +}
703 +
704 +.gs-banner--warning .gs-banner__icon {
705 + border-color: #f0ddc2;
706 + border-color: color-mix(in srgb, var(--gs-gold) 20%, transparent);
613 707 background: var(--gs-surface);
614 - border-bottom: 1px solid var(--gs-line);
708 + color: var(--gs-gold);
615 709 }
616 710
617 -.gs-hero::before {
618 - content: '';
619 - position: absolute;
620 - top: -180px;
621 - right: -120px;
622 - width: 520px;
623 - height: 520px;
624 - border-radius: 50%;
625 - background: radial-gradient(circle, var(--gs-brand-ring) 0%, transparent 68%);
626 - opacity: 0.55;
627 - pointer-events: none;
711 +.gs-banner--error {
712 + border-color: #f7d7d4;
713 + border-color: color-mix(in srgb, var(--gs-danger) 20%, transparent);
714 + background: var(--gs-danger-soft);
628 715 }
629 716
630 -.gs-hero__grid {
631 - position: relative;
632 - display: grid;
633 - grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr);
634 - gap: 48px;
635 - align-items: center;
717 +.gs-banner--error .gs-banner__icon {
718 + border-color: #f7d7d4;
719 + border-color: color-mix(in srgb, var(--gs-danger) 20%, transparent);
720 + background: var(--gs-surface);
721 + color: var(--gs-danger);
636 722 }
637 723
638 -.gs-hero__title {
639 - font-size: clamp(28px, 3.4vw, 40px);
640 - letter-spacing: -0.03em;
724 +.gs-banner--info {
725 + border-color: var(--gs-brand-line);
726 + background: var(--gs-brand-soft);
641 727 }
642 728
643 -.gs-hero__lead {
644 - max-width: 52ch;
645 - margin-top: 14px;
646 - font-size: 15px;
647 - color: var(--gs-text-2);
729 +.gs-banner--info .gs-banner__icon {
730 + border-color: var(--gs-brand-line);
731 + background: var(--gs-surface);
648 732 }
649 733
650 -.gs-hero__actions {
651 - display: flex;
652 - gap: 10px;
653 - margin-top: 26px;
654 - flex-wrap: wrap;
655 -}
734 +/* Metric row */
656 735
657 -.gs-hero__stats {
736 +.gs-metrics {
658 737 display: grid;
659 - gap: 12px;
738 + grid-template-columns: repeat(4, minmax(0, 1fr));
739 + gap: 16px;
660 740 }
661 741
662 -.gs-stat {
742 +.gs-metric {
743 + display: flex;
744 + flex-direction: column;
745 + gap: 10px;
663 746 padding: 18px;
664 747 border-radius: var(--gs-r);
665 - background: var(--gs-surface-2);
748 + background: var(--gs-surface);
666 749 border: 1px solid var(--gs-line);
667 750 }
668 751
669 -.gs-stat__value {
670 - display: block;
671 - font-size: 30px;
672 - font-weight: 680;
673 - letter-spacing: -0.03em;
674 - line-height: 1.1;
675 - font-variant-numeric: tabular-nums;
752 +.gs-metric__head {
753 + display: flex;
754 + align-items: center;
755 + justify-content: space-between;
756 + gap: 10px;
676 757 }
677 758
678 -.gs-stat__value--sm {
679 - font-size: 17px;
680 - margin-bottom: 2px;
759 +.gs-metric__label {
760 + font-size: 12.5px;
761 + font-weight: 550;
762 + color: var(--gs-text-2);
681 763 }
682 764
683 -.gs-stat__label {
684 - display: block;
685 - font-size: 12.5px;
686 - font-weight: 600;
687 - color: var(--gs-text-2);
765 +.gs-metric__icon {
766 + display: grid;
767 + place-items: center;
768 + width: 26px;
769 + height: 26px;
770 + flex-shrink: 0;
771 + border-radius: 7px;
772 + background: var(--gs-brand-soft);
773 + color: var(--gs-brand);
688 774 }
689 775
690 -.gs-stat__meta {
691 - display: block;
692 - font-size: 12px;
693 - color: var(--gs-text-3);
776 +.gs-metric__icon .gs-icon {
777 + width: 14px;
778 + height: 14px;
694 779 }
695 780
696 -.gs-stat--split {
697 - display: grid;
698 - grid-template-columns: 1fr 1fr;
699 - gap: 18px;
781 +.gs-metric__value {
782 + display: flex;
783 + align-items: baseline;
784 + gap: 6px;
785 + font-size: 30px;
786 + font-weight: 680;
787 + line-height: 1;
788 + letter-spacing: -0.033em;
789 + font-variant-numeric: tabular-nums;
700 790 }
701 791
702 -.gs-stat--split .gs-stat__value {
703 - font-size: 22px;
792 +.gs-metric__unit {
793 + font-size: 13px;
794 + font-weight: 550;
795 + letter-spacing: 0;
796 + color: var(--gs-text-3);
704 797 }
705 798
706 -.gs-stat--status.is-pro {
707 - background: var(--gs-brand-soft);
708 - border-color: transparent;
799 +.gs-metric__foot {
800 + font-size: 12px;
801 + color: var(--gs-text-3);
709 802 }
710 803
711 -.gs-meter {
712 - margin-top: 12px;
713 - height: 6px;
714 - border-radius: var(--gs-r-full);
715 - background: var(--gs-surface-sunk);
716 - overflow: hidden;
804 +/* Two-column body */
805 +
806 +.gs-cols {
807 + display: grid;
808 + grid-template-columns: minmax(0, 1fr) 372px;
809 + align-items: start;
810 + gap: 22px;
717 811 }
718 812
719 -.gs-meter__fill {
720 - display: block;
721 - height: 100%;
722 - width: var(--gs-meter, 0%);
723 - border-radius: inherit;
724 - background: var(--gs-brand-grad);
725 - transition: width 600ms var(--gs-ease);
813 +.gs-col {
814 + display: flex;
815 + flex-direction: column;
816 + gap: 22px;
817 + min-width: 0;
726 818 }
727 819
728 820 /* ------------------------------------------------------------------
729 821 * 8. Cards & grids
@@ -728,20 +820,16 @@
728 820 /* ------------------------------------------------------------------
729 821 * 8. Cards & grids
730 822 * ---------------------------------------------------------------- */
731 823
732 -.gs-section {
733 - padding-top: 4px;
734 -}
735 -
736 824 .gs-shell.gs-stack {
737 825 padding-top: 40px;
738 826 padding-bottom: 40px;
739 827 }
740 828
741 -/* Extra breathing room where content follows the dashboard hero. */
742 -.gs-hero + .gs-shell.gs-stack {
743 - padding-top: 64px;
829 +/* The stack already opens with 40px, so the head must not add its own. */
830 +.gs-shell.gs-stack > .gs-page-head {
831 + padding-top: 0;
744 832 }
745 833
746 834 .gs-grid {
747 835 display: grid;
@@ -747,166 +835,400 @@
747 835 display: grid;
748 836 gap: 16px;
749 837 }
750 838
751 -/* Stretch, so cards in a row share one height regardless of copy length. */
752 -.gs-grid--3 {
753 - grid-template-columns: repeat(3, minmax(0, 1fr));
754 - align-items: stretch;
755 -}
756 -
757 -/* Stacked grids are siblings, not flex children, so they need their own
758 - separation — a little more than the in-grid gap to read as a new group. */
759 -.gs-grid + .gs-grid {
760 - margin-top: 24px;
761 -}
762 -
763 839 .gs-grid--cards {
764 840 grid-template-columns: repeat(auto-fill, minmax(268px, 1fr));
765 841 }
766 842
843 +/* ------------------------------------------------------------------
844 + * 8. Cards
845 + * ---------------------------------------------------------------- */
846 +
767 847 .gs-card {
768 848 display: flex;
769 849 flex-direction: column;
770 - gap: 14px;
771 - padding: 20px;
772 850 border-radius: var(--gs-r);
773 851 background: var(--gs-surface);
774 852 border: 1px solid var(--gs-line);
775 - box-shadow: var(--gs-shadow-sm);
776 853 text-decoration: none;
777 854 color: inherit;
778 855 transition:
779 - transform var(--gs-mid),
780 - box-shadow var(--gs-mid),
781 - border-color var(--gs-mid);
856 + border-color var(--gs-mid),
857 + box-shadow var(--gs-mid);
782 858 }
783 859
860 +/* Flush cards let their header, list and footer own the edges. */
861 +.gs-card--flush {
862 + overflow: hidden;
863 +}
864 +
865 +.gs-card--pad {
866 + gap: 16px;
867 + padding: 18px;
868 +}
869 +
870 +.gs-card__head {
871 + display: flex;
872 + align-items: center;
873 + justify-content: space-between;
874 + gap: 16px;
875 + padding: 16px 18px;
876 + border-bottom: 1px solid var(--gs-line);
877 +}
878 +
879 +/* Inside a padded card the header is just the top row, not a band. */
880 +.gs-card__head--plain {
881 + padding: 0;
882 + border-bottom: 0;
883 +}
884 +
885 +.gs-card__head--tight {
886 + padding: 15px 18px 11px;
887 + border-bottom: 0;
888 +}
889 +
890 +.gs-card__heading {
891 + font-size: 15px;
892 + font-weight: 620;
893 + letter-spacing: -0.008em;
894 +}
895 +
896 +.gs-card__sub {
897 + margin-top: 3px;
898 + font-size: 12.5px;
899 + line-height: 1.5;
900 + color: var(--gs-text-3);
901 +}
902 +
784 903 .gs-card__body {
785 904 display: flex;
786 905 flex-direction: column;
787 - gap: 6px;
906 + gap: 5px;
788 907 align-items: flex-start;
908 + padding: 16px;
789 909 }
790 910
791 -.gs-card__title {
792 - font-size: 15px;
793 - font-weight: 640;
911 +.gs-card__body .gs-card__sub {
912 + color: var(--gs-text-2);
794 913 }
795 914
796 -.gs-card__text {
797 - font-size: 13.5px;
915 +.gs-card__foot {
916 + display: flex;
917 + align-items: center;
918 + justify-content: space-between;
919 + gap: 16px;
920 + flex-wrap: wrap;
921 + padding: 13px 18px;
922 + background: var(--gs-surface-2);
923 + border-top: 1px solid var(--gs-line);
924 +}
925 +
926 +.gs-card__summary {
927 + font-size: 12.5px;
798 928 color: var(--gs-text-2);
929 + font-variant-numeric: tabular-nums;
799 930 }
800 931
801 932 .gs-card--link:hover,
802 933 .gs-card--link:focus {
803 - transform: translateY(-2px);
804 934 border-color: var(--gs-brand);
805 935 box-shadow: var(--gs-shadow);
806 936 color: inherit;
807 937 }
808 938
809 -.gs-card--link {
810 - flex-direction: row;
811 - gap: 14px;
812 - align-items: flex-start;
939 +/* ------------------------------------------------------------------
940 + * 8b. Block rows
941 + * ---------------------------------------------------------------- */
942 +
943 +.gs-rows {
944 + --gs-row-h: 62px;
945 + --gs-row-gap: 8px;
946 +
947 + display: flex;
948 + flex-direction: column;
949 + gap: var(--gs-row-gap);
950 +
951 + /* Exactly five rows, then scroll — the card must not run the length
952 + of the page. Scroll chaining is left alone so the wheel carries on
953 + down the page once the list bottoms out. */
954 + max-height: calc((5 * var(--gs-row-h)) + (4 * var(--gs-row-gap)) + 28px);
955 + overflow-y: auto;
956 + padding: 14px;
813 957 }
814 958
815 -.gs-card__icon {
959 +.gs-row {
960 + display: flex;
961 + align-items: center;
962 + gap: 12px;
963 + padding: 12px 16px;
964 + border-radius: var(--gs-r-md);
965 + background: var(--gs-surface);
966 + border: 1px solid var(--gs-line);
967 + transition:
968 + border-color var(--gs-fast),
969 + background var(--gs-fast);
970 +}
971 +
972 +.gs-row:hover {
973 + border-color: var(--gs-line-strong);
974 +}
975 +
976 +.gs-row.is-dirty {
977 + border-color: var(--gs-brand);
978 + background: var(--gs-brand-soft);
979 +}
980 +
981 +.gs-row.is-hidden {
982 + display: none;
983 +}
984 +
985 +.gs-row__icon {
816 986 display: grid;
817 987 place-items: center;
818 988 width: 34px;
819 989 height: 34px;
820 990 flex-shrink: 0;
821 - border-radius: var(--gs-r-sm);
991 + border-radius: 9px;
822 992 background: var(--gs-brand-soft);
823 993 color: var(--gs-brand);
824 994 }
825 995
826 -.gs-card--step {
827 - flex-direction: row;
828 - gap: 14px;
996 +.gs-row__icon .gs-icon {
997 + width: 17px;
998 + height: 17px;
999 +}
1000 +
1001 +.gs-row__text {
1002 + display: flex;
1003 + flex-direction: column;
1004 + gap: 2px;
1005 + flex: 1;
1006 + min-width: 0;
1007 +}
1008 +
1009 +/* Pinned line heights: the row must measure a predictable --gs-row-h so
1010 + the list crops to a whole number of rows. */
1011 +.gs-row__name {
1012 + font-size: 13.5px;
1013 + font-weight: 600;
1014 + line-height: 18px;
1015 + color: var(--gs-text);
1016 +}
1017 +
1018 +/* Off and locked blocks recede without disappearing. */
1019 +.gs-row.is-off .gs-row__icon,
1020 +.gs-row.is-locked .gs-row__icon {
1021 + background: var(--gs-surface-2);
1022 + color: var(--gs-text-3);
1023 +}
1024 +
1025 +.gs-row.is-off .gs-row__name,
1026 +.gs-row.is-locked .gs-row__name {
1027 + color: var(--gs-text-2);
1028 +}
1029 +
1030 +.gs-row__desc {
1031 + font-size: 12px;
1032 + line-height: 16px;
1033 + color: var(--gs-text-3);
1034 + overflow: hidden;
1035 + text-overflow: ellipsis;
1036 + white-space: nowrap;
1037 +}
1038 +
1039 +/* ------------------------------------------------------------------
1040 + * 8c. Get started
1041 + * ---------------------------------------------------------------- */
1042 +
1043 +.gs-progress {
1044 + display: flex;
1045 + align-items: center;
1046 + gap: 10px;
1047 + flex-shrink: 0;
1048 +}
1049 +
1050 +.gs-progress__count {
1051 + font-size: 12px;
1052 + font-weight: 550;
1053 + color: var(--gs-text-2);
1054 + white-space: nowrap;
1055 +}
1056 +
1057 +.gs-progress__track {
1058 + display: block;
1059 + width: 96px;
1060 + height: 6px;
1061 + border-radius: var(--gs-r-full);
1062 + background: var(--gs-line);
1063 + overflow: hidden;
1064 +}
1065 +
1066 +.gs-progress__fill {
1067 + display: block;
1068 + height: 100%;
1069 + border-radius: inherit;
1070 + background: var(--gs-brand);
1071 + transition: width 600ms var(--gs-ease);
1072 +}
1073 +
1074 +.gs-steps {
1075 + display: grid;
1076 + grid-template-columns: repeat(3, minmax(0, 1fr));
1077 + gap: 12px;
1078 +}
1079 +
1080 +.gs-step {
1081 + display: flex;
1082 + flex-direction: column;
829 1083 align-items: flex-start;
1084 + gap: 8px;
1085 + padding: 14px;
1086 + border-radius: var(--gs-r-md);
1087 + background: var(--gs-surface-2);
1088 + border: 1px solid var(--gs-line);
830 1089 }
831 1090
1091 +.gs-step.is-done {
1092 + background: var(--gs-brand-soft);
1093 + border-color: var(--gs-brand-line);
1094 +}
1095 +
1096 +.gs-step__top {
1097 + display: flex;
1098 + align-items: center;
1099 + gap: 8px;
1100 +}
1101 +
832 1102 .gs-step__n {
833 1103 font-size: 12px;
834 1104 font-weight: 700;
835 - letter-spacing: 0.05em;
1105 + letter-spacing: 0.04em;
836 1106 color: var(--gs-text-3);
837 - padding-top: 2px;
1107 + font-variant-numeric: tabular-nums;
838 1108 }
839 1109
840 -/* Feature row: the walkthrough gets the lion's share of the width, with
841 - the numbered steps riding alongside it. */
842 -/* The walkthrough still leads, but at a width where its 16:9 frame plus
843 - caption lands level with the three steps beside it. Both columns
844 - stretch, and the steps share the leftover height evenly. */
845 -.gs-grid--feature {
846 - grid-template-columns: minmax(0, 1.5fr) minmax(300px, 1fr);
847 - align-items: stretch;
1110 +.gs-step__check {
1111 + display: grid;
1112 + place-items: center;
1113 + width: 18px;
1114 + height: 18px;
1115 + flex-shrink: 0;
1116 + border-radius: 50%;
1117 + background: var(--gs-brand);
1118 + color: #fff;
848 1119 }
849 1120
850 -.gs-grid--feature > .gs-stack {
851 - height: 100%;
1121 +.gs-step__check .gs-icon {
1122 + width: 11px;
1123 + height: 11px;
1124 + stroke-width: 3;
852 1125 }
853 1126
854 -.gs-grid--feature .gs-card--step {
855 - flex: 1 1 0;
1127 +.gs-step__title {
1128 + font-size: 13.5px;
1129 + font-weight: 600;
856 1130 }
857 1131
858 -/* The video bleeds to the card edges and leads; copy sits underneath. */
859 -.gs-card--media {
860 - gap: 0;
1132 +.gs-step__text {
1133 + font-size: 12.5px;
1134 + line-height: 1.5;
1135 + color: var(--gs-text-2);
1136 +}
1137 +
1138 +/* ------------------------------------------------------------------
1139 + * 8d. Walkthrough
1140 + * ---------------------------------------------------------------- */
1141 +
1142 +.gs-video {
1143 + position: relative;
1144 + display: block;
1145 + width: 100%;
1146 + height: 196px;
861 1147 padding: 0;
1148 + border: 0;
1149 + background: #14152a;
1150 + cursor: pointer;
862 1151 overflow: hidden;
863 1152 }
864 1153
865 -.gs-card--media .gs-card__body {
866 - padding: 20px 24px 24px;
1154 +.gs-video__stage {
1155 + position: absolute;
1156 + inset: 0;
1157 + display: flex;
1158 + flex-direction: column;
1159 + align-items: center;
1160 + justify-content: center;
1161 + gap: 14px;
1162 + background:
1163 + radial-gradient(ellipse 55% 60% at 50% 15%, rgba(83, 37, 232, 0.9) 0%, rgba(83, 37, 232, 0) 100%);
867 1164 }
868 1165
869 -.gs-card--media:hover {
870 - transform: translateY(-2px);
871 - box-shadow: var(--gs-shadow);
1166 +.gs-video__slides {
1167 + display: flex;
1168 + align-items: center;
1169 + gap: 8px;
1170 + height: 104px;
872 1171 }
873 1172
874 -.gs-card__kicker {
875 - display: inline-flex;
1173 +.gs-video__slide {
1174 + width: 34px;
1175 + height: 72px;
1176 + border-radius: var(--gs-r-sm);
1177 + background: rgba(255, 255, 255, 0.06);
1178 + border: 1px solid rgba(255, 255, 255, 0.2);
1179 +}
1180 +
1181 +.gs-video__slide--main {
1182 + width: 150px;
1183 + height: 104px;
1184 + background: rgba(255, 255, 255, 0.12);
1185 +}
1186 +
1187 +.gs-video__dots {
1188 + display: flex;
876 1189 align-items: center;
877 1190 gap: 6px;
878 - margin-bottom: 2px;
879 - font-size: 11.5px;
880 - font-weight: 700;
881 - letter-spacing: 0.08em;
882 - text-transform: uppercase;
883 - color: var(--gs-brand);
884 1191 }
885 1192
886 -.gs-card__kicker .gs-icon {
887 - width: 13px;
888 - height: 13px;
1193 +.gs-video__dot {
1194 + width: 6px;
1195 + height: 6px;
1196 + border-radius: 50%;
1197 + background: rgba(255, 255, 255, 0.35);
889 1198 }
890 1199
891 -.gs-card__title--lg {
892 - font-size: 21px;
893 - letter-spacing: -0.02em;
1200 +.gs-video__dot.is-active {
1201 + background: #fff;
894 1202 }
895 1203
896 -.gs-embed {
897 - position: relative;
898 - padding-top: 56.25%;
899 - border-radius: var(--gs-r-sm);
900 - overflow: hidden;
901 - background: var(--gs-surface-sunk);
1204 +.gs-video__play {
1205 + position: absolute;
1206 + top: 50%;
1207 + left: 50%;
1208 + display: grid;
1209 + place-items: center;
1210 + width: 52px;
1211 + height: 52px;
1212 + transform: translate(-50%, -50%);
1213 + border-radius: 50%;
1214 + background: rgba(255, 255, 255, 0.95);
1215 + color: var(--gs-brand);
1216 + box-shadow: 0 6px 20px rgba(11, 11, 20, 0.35);
1217 + transition: transform var(--gs-mid);
902 1218 }
903 1219
904 -.gs-card--media .gs-embed {
905 - border-radius: 0;
1220 +.gs-video__play .gs-icon {
1221 + width: 19px;
1222 + height: 19px;
1223 + margin-left: 2px;
906 1224 }
907 1225
908 -.gs-embed iframe {
1226 +.gs-video:hover .gs-video__play {
1227 + transform: translate(-50%, -50%) scale(1.06);
1228 +}
1229 +
1230 +.gs-video iframe {
909 1231 position: absolute;
910 1232 inset: 0;
911 1233 width: 100%;
912 1234 height: 100%;
@@ -913,8 +1235,160 @@
913 1235 border: 0;
914 1236 }
915 1237
916 1238 /* ------------------------------------------------------------------
1239 + * 8e. What's new
1240 + * ---------------------------------------------------------------- */
1241 +
1242 +.gs-news {
1243 + display: flex;
1244 + flex-direction: column;
1245 + gap: 12px;
1246 + margin: 0;
1247 + padding: 0;
1248 + list-style: none;
1249 +}
1250 +
1251 +.gs-news__item {
1252 + display: flex;
1253 + align-items: flex-start;
1254 + gap: 10px;
1255 + margin: 0;
1256 +}
1257 +
1258 +.gs-news__text {
1259 + flex: 1;
1260 + font-size: 12.5px;
1261 + line-height: 1.45;
1262 + color: var(--gs-text-2);
1263 +}
1264 +
1265 +/* ------------------------------------------------------------------
1266 + * 8f. Help & support
1267 + * ---------------------------------------------------------------- */
1268 +
1269 +.gs-help {
1270 + display: flex;
1271 + align-items: center;
1272 + gap: 11px;
1273 + padding: 12px 18px;
1274 + border-top: 1px solid var(--gs-line);
1275 + text-decoration: none;
1276 + color: inherit;
1277 + transition: background var(--gs-fast);
1278 +}
1279 +
1280 +.gs-help:hover,
1281 +.gs-help:focus {
1282 + background: var(--gs-surface-2);
1283 + color: inherit;
1284 +}
1285 +
1286 +.gs-help__icon {
1287 + display: grid;
1288 + place-items: center;
1289 + width: 30px;
1290 + height: 30px;
1291 + flex-shrink: 0;
1292 + border-radius: var(--gs-r-sm);
1293 + background: var(--gs-brand-soft);
1294 + color: var(--gs-brand);
1295 +}
1296 +
1297 +.gs-help__icon .gs-icon {
1298 + width: 15px;
1299 + height: 15px;
1300 +}
1301 +
1302 +.gs-help__text {
1303 + display: flex;
1304 + flex-direction: column;
1305 + gap: 2px;
1306 + flex: 1;
1307 + min-width: 0;
1308 +}
1309 +
1310 +.gs-help__title {
1311 + font-size: 13px;
1312 + font-weight: 600;
1313 +}
1314 +
1315 +.gs-help__sub {
1316 + font-size: 12px;
1317 + color: var(--gs-text-3);
1318 +}
1319 +
1320 +.gs-help__chevron {
1321 + flex-shrink: 0;
1322 + color: var(--gs-text-3);
1323 +}
1324 +
1325 +/* ------------------------------------------------------------------
1326 + * 8g. More from the workshop
1327 + * ---------------------------------------------------------------- */
1328 +
1329 +.gs-workshop {
1330 + display: flex;
1331 + flex-direction: column;
1332 + gap: 14px;
1333 + padding-top: 12px;
1334 +}
1335 +
1336 +.gs-workshop__grid {
1337 + display: grid;
1338 + grid-template-columns: repeat(3, minmax(0, 1fr));
1339 + align-items: stretch;
1340 + gap: 16px;
1341 +}
1342 +
1343 +.gs-workshop__grid .gs-card {
1344 + gap: 8px;
1345 +}
1346 +
1347 +.gs-product__top {
1348 + display: flex;
1349 + align-items: center;
1350 + gap: 10px;
1351 +}
1352 +
1353 +.gs-product__title {
1354 + font-size: 14px;
1355 + font-weight: 600;
1356 + color: var(--gs-text);
1357 +}
1358 +
1359 +/* ------------------------------------------------------------------
1360 + * 8h. App footer
1361 + * ---------------------------------------------------------------- */
1362 +
1363 +.gs-appfoot {
1364 + flex-shrink: 0;
1365 + background: var(--gs-surface);
1366 + border-top: 1px solid var(--gs-line);
1367 +}
1368 +
1369 +.gs-appfoot__inner {
1370 + display: flex;
1371 + align-items: center;
1372 + justify-content: space-between;
1373 + gap: 16px;
1374 + flex-wrap: wrap;
1375 + max-width: 1248px;
1376 + margin: 0 auto;
1377 + padding: 16px 24px;
1378 + font-size: 12.5px;
1379 + color: var(--gs-text-3);
1380 +}
1381 +
1382 +.gs-appfoot__link {
1383 + color: var(--gs-text-2);
1384 +}
1385 +
1386 +.gs-appfoot__link:hover {
1387 + color: var(--gs-brand);
1388 +}
1389 +
1390 +/* ------------------------------------------------------------------
917 1391 * 9. Blocks toolbar
918 1392 * ---------------------------------------------------------------- */
919 1393
920 1394 .gs-toolbar {
@@ -1006,8 +1480,28 @@
1006 1480 .gs-search__input:not(:placeholder-shown) ~ .gs-search__kbd {
1007 1481 opacity: 0;
1008 1482 }
1009 1483
1484 +/* Compact variant for card headers, where the field sits beside a title. */
1485 +.gs-search--sm {
1486 + flex: 0 0 220px;
1487 + min-width: 0;
1488 +}
1489 +
1490 +.gs-search--sm .gs-icon {
1491 + left: 10px;
1492 + width: 14px;
1493 + height: 14px;
1494 +}
1495 +
1496 +.gs-search--sm input.gs-search__input {
1497 + height: 34px;
1498 + padding: 0 12px 0 32px;
1499 + border-color: var(--gs-line);
1500 + background: var(--gs-surface-2);
1501 + font-size: 13px;
1502 +}
1503 +
1010 1504 .gs-segment {
1011 1505 display: inline-flex;
1012 1506 gap: 2px;
1013 1507 padding: 3px;
@@ -1152,21 +1646,41 @@
1152 1646
1153 1647 .gs-tag {
1154 1648 display: inline-flex;
1155 1649 align-items: center;
1156 - height: 20px;
1650 + flex-shrink: 0;
1651 + height: 21px;
1157 1652 padding: 0 8px;
1158 - border-radius: var(--gs-r-full);
1159 - background: var(--gs-surface-sunk);
1653 + border-radius: 6px;
1654 + background: var(--gs-surface-2);
1160 1655 border: 1px solid var(--gs-line);
1161 1656 font-size: 10.5px;
1162 - font-weight: 700;
1163 - letter-spacing: 0.05em;
1164 - text-transform: uppercase;
1165 - color: var(--gs-text-3);
1657 + font-weight: 600;
1658 + letter-spacing: 0.03em;
1659 + color: var(--gs-text-2);
1166 1660 }
1167 1661
1168 1662 .gs-tag--pro {
1663 + background: var(--gs-brand-soft);
1664 + border-color: var(--gs-brand-line);
1665 + color: var(--gs-brand);
1666 +}
1667 +
1668 +/* Release-note tags. */
1669 +
1670 +.gs-tag--new {
1671 + background: var(--gs-brand-soft);
1672 + border-color: transparent;
1673 + color: var(--gs-brand);
1674 +}
1675 +
1676 +.gs-tag--improved {
1677 + background: var(--gs-ok-soft);
1678 + border-color: transparent;
1679 + color: var(--gs-ok);
1680 +}
1681 +
1682 +.gs-tag--fixed {
1169 1683 background: var(--gs-gold-soft);
1170 1684 border-color: transparent;
1171 1685 color: var(--gs-gold);
1172 1686 }
@@ -1173,24 +1687,29 @@
1173 1687
1174 1688 .gs-lock {
1175 1689 display: inline-flex;
1176 1690 align-items: center;
1691 + justify-content: center;
1177 1692 gap: 6px;
1178 1693 height: 28px;
1179 - padding: 0 12px;
1694 + min-width: 34px;
1695 + padding: 0 9px;
1696 + flex-shrink: 0;
1180 1697 border-radius: var(--gs-r-full);
1181 - background: var(--gs-gold-soft);
1182 - color: var(--gs-gold);
1698 + background: var(--gs-surface-2);
1699 + border: 1px solid var(--gs-line);
1700 + color: var(--gs-text-3);
1183 1701 font-size: 12px;
1184 1702 font-weight: 650;
1185 1703 text-decoration: none;
1186 - transition: filter var(--gs-fast);
1704 + transition: all var(--gs-fast);
1187 1705 }
1188 1706
1189 1707 .gs-lock:hover,
1190 1708 .gs-lock:focus {
1191 - color: var(--gs-gold);
1192 - filter: brightness(0.96);
1709 + background: var(--gs-brand-soft);
1710 + border-color: var(--gs-brand-line);
1711 + color: var(--gs-brand);
1193 1712 }
1194 1713
1195 1714 .gs-lock .gs-icon {
1196 1715 width: 13px;
@@ -1218,11 +1737,11 @@
1218 1737 }
1219 1738
1220 1739 .gs-switch__track {
1221 1740 display: block;
1222 - width: 40px;
1223 - height: 23px;
1224 - padding: 3px;
1741 + width: 34px;
1742 + height: 20px;
1743 + padding: 2px;
1225 1744 border-radius: var(--gs-r-full);
1226 1745 background: var(--gs-line-strong);
1227 1746 transition: background var(--gs-mid);
1228 1747 }
@@ -1228,13 +1747,13 @@
1228 1747 }
1229 1748
1230 1749 .gs-switch__thumb {
1231 1750 display: block;
1232 - width: 17px;
1233 - height: 17px;
1751 + width: 16px;
1752 + height: 16px;
1234 1753 border-radius: 50%;
1235 1754 background: #fff;
1236 - box-shadow: 0 1px 3px rgba(20, 22, 43, 0.3);
1755 + box-shadow: 0 1px 2px rgba(18, 20, 28, 0.25);
1237 1756 transform: translateX(0);
1238 1757 transition: transform var(--gs-mid);
1239 1758 }
1240 1759
@@ -1242,9 +1761,9 @@
1242 1761 background: var(--gs-brand);
1243 1762 }
1244 1763
1245 1764 .gs-switch__input:checked ~ .gs-switch__track .gs-switch__thumb {
1246 - transform: translateX(17px);
1765 + transform: translateX(14px);
1247 1766 }
1248 1767
1249 1768 .gs-switch__input:focus-visible ~ .gs-switch__track {
1250 1769 box-shadow: 0 0 0 3px var(--gs-brand-ring);
@@ -1288,8 +1807,22 @@
1288 1807 width: 28px;
1289 1808 height: 28px;
1290 1809 }
1291 1810
1811 +/* Inside a card the empty state is a quiet strip, not a dashed panel. */
1812 +.gs-empty--sm {
1813 + gap: 8px;
1814 + padding: 28px 18px;
1815 + border: 0;
1816 + border-radius: 0;
1817 + font-size: 13px;
1818 +}
1819 +
1820 +.gs-empty--sm .gs-icon {
1821 + width: 20px;
1822 + height: 20px;
1823 +}
1824 +
1292 1825 .gs-note {
1293 1826 display: flex;
1294 1827 align-items: flex-start;
1295 1828 gap: 12px;
@@ -1310,86 +1843,11 @@
1310 1843 font-size: inherit;
1311 1844 }
1312 1845
1313 1846 /* ------------------------------------------------------------------
1314 - * 13. Promo band
1847 + * 13. Settings
1315 1848 * ---------------------------------------------------------------- */
1316 1849
1317 -.gs-promo {
1318 - position: relative;
1319 - overflow: hidden;
1320 - display: grid;
1321 - grid-template-columns: minmax(0, 1.2fr) minmax(240px, 0.8fr);
1322 - gap: 40px;
1323 - align-items: center;
1324 - padding: 40px;
1325 - border-radius: var(--gs-r-lg);
1326 - background: var(--gs-brand-grad);
1327 - color: #fff;
1328 - box-shadow: var(--gs-shadow);
1329 -}
1330 -
1331 -.gs-promo::after {
1332 - content: '';
1333 - position: absolute;
1334 - right: -80px;
1335 - bottom: -140px;
1336 - width: 380px;
1337 - height: 380px;
1338 - border-radius: 50%;
1339 - background: rgba(255, 255, 255, 0.08);
1340 - pointer-events: none;
1341 -}
1342 -
1343 -.gs-promo__copy {
1344 - position: relative;
1345 -}
1346 -
1347 -.gs-promo__title {
1348 - font-size: 26px;
1349 - color: #fff;
1350 - letter-spacing: -0.03em;
1351 -}
1352 -
1353 -.gs-promo__text {
1354 - max-width: 48ch;
1355 - margin-top: 10px;
1356 - color: rgba(255, 255, 255, 0.82);
1357 -}
1358 -
1359 -.gs-promo .gs-btn {
1360 - margin-top: 22px;
1361 -}
1362 -
1363 -.gs-promo__list {
1364 - position: relative;
1365 - display: grid;
1366 - gap: 10px;
1367 - margin: 0;
1368 - padding: 0;
1369 - list-style: none;
1370 -}
1371 -
1372 -.gs-promo__list li {
1373 - display: flex;
1374 - align-items: center;
1375 - gap: 10px;
1376 - margin: 0;
1377 - font-size: 13.5px;
1378 - font-weight: 550;
1379 - color: rgba(255, 255, 255, 0.92);
1380 -}
1381 -
1382 -.gs-promo__list .gs-icon {
1383 - width: 15px;
1384 - height: 15px;
1385 - color: rgba(255, 255, 255, 0.7);
1386 -}
1387 -
1388 -/* ------------------------------------------------------------------
1389 - * 14. Settings
1390 - * ---------------------------------------------------------------- */
1391 -
1392 1850 .gs-settings {
1393 1851 display: grid;
1394 1852 grid-template-columns: 200px minmax(0, 1fr);
1395 1853 gap: 32px;
@@ -1607,9 +2065,9 @@
1607 2065 color: var(--gs-text);
1608 2066 }
1609 2067
1610 2068 /* ------------------------------------------------------------------
1611 - * 15. Save bar
2069 + * 14. Save bar
1612 2070 * ---------------------------------------------------------------- */
1613 2071
1614 2072 /* Kept in the layout so the slide-in can animate; visibility (rather than
1615 2073 display) keeps it out of the accessibility tree while it is parked. */
@@ -1700,9 +2158,9 @@
1700 2158 height: 36px;
1701 2159 }
1702 2160
1703 2161 /* ------------------------------------------------------------------
1704 - * 16. Toasts
2162 + * 15. Toasts
1705 2163 * ---------------------------------------------------------------- */
1706 2164
1707 2165 .gs-toasts {
1708 2166 position: fixed;
@@ -1775,27 +2233,31 @@
1775 2233 }
1776 2234 }
1777 2235
1778 2236 /* ------------------------------------------------------------------
1779 - * 17. Responsive
2237 + * 16. Responsive
1780 2238 * ---------------------------------------------------------------- */
1781 2239
1782 -@media (max-width: 1100px) {
1783 - .gs-grid--3 {
1784 - grid-template-columns: repeat(2, minmax(0, 1fr));
2240 +@media (max-width: 1240px) {
2241 + .gs-cols {
2242 + grid-template-columns: minmax(0, 1fr);
1785 2243 }
1786 2244
1787 - .gs-grid--feature {
1788 - grid-template-columns: minmax(0, 1fr);
2245 + /* The sidebar cards read better side by side once they drop below. */
2246 + .gs-col--side {
2247 + display: grid;
2248 + grid-template-columns: repeat(2, minmax(0, 1fr));
2249 + align-items: start;
1789 2250 }
2251 +}
1790 2252
1791 - .gs-hero__grid {
1792 - grid-template-columns: 1fr;
1793 - gap: 32px;
2253 +@media (max-width: 1100px) {
2254 + .gs-metrics {
2255 + grid-template-columns: repeat(2, minmax(0, 1fr));
1794 2256 }
1795 2257
1796 - .gs-hero__stats {
1797 - grid-template-columns: repeat(3, minmax(0, 1fr));
2258 + .gs-workshop__grid {
2259 + grid-template-columns: repeat(2, minmax(0, 1fr));
1798 2260 }
1799 2261
1800 2262 .gs-settings {
1801 2263 grid-template-columns: 1fr;
@@ -1818,28 +2280,29 @@
1818 2280 .gs-bar {
1819 2281 top: 46px;
1820 2282 }
1821 2283
2284 + /* Stack the three bar tracks: brand and actions share a row, the nav
2285 + runs full width underneath. */
1822 2286 .gs-bar__inner {
1823 2287 height: auto;
1824 2288 min-height: 60px;
1825 2289 padding: 10px 16px;
1826 - flex-wrap: wrap;
2290 + grid-template-columns: minmax(0, 1fr) auto;
1827 2291 gap: 10px;
1828 2292 }
1829 2293
1830 2294 .gs-nav {
1831 2295 order: 3;
1832 - width: 100%;
1833 - flex: 1 0 100%;
2296 + grid-column: 1 / -1;
1834 2297 }
1835 2298
1836 - .gs-bar__actions {
1837 - margin-left: auto;
2299 + .gs-shell {
2300 + padding: 0 16px;
1838 2301 }
1839 2302
1840 - .gs-shell {
1841 - padding: 0 16px;
2303 + .gs-appfoot__inner {
2304 + padding: 16px;
1842 2305 }
1843 2306
1844 2307 .gs-toolbar {
1845 2308 position: static;
@@ -1854,19 +2317,29 @@
1854 2317 .gs-toolbar__actions .gs-btn {
1855 2318 flex: 1;
1856 2319 }
1857 2320
1858 - .gs-grid--3,
1859 - .gs-hero__stats,
1860 - .gs-promo,
2321 + .gs-metrics,
2322 + .gs-steps,
2323 + .gs-workshop__grid,
2324 + .gs-col--side,
1861 2325 .gs-radio-cards {
1862 2326 grid-template-columns: 1fr;
1863 2327 }
1864 2328
1865 - .gs-promo {
1866 - padding: 28px;
2329 + .gs-card__head {
2330 + flex-direction: column;
2331 + align-items: stretch;
1867 2332 }
1868 2333
2334 + .gs-search--sm {
2335 + flex: 1 1 auto;
2336 + }
2337 +
2338 + .gs-row__desc {
2339 + white-space: normal;
2340 + }
2341 +
1869 2342 .gs-field {
1870 2343 grid-template-columns: 1fr;
1871 2344 gap: 14px;
1872 2345 align-items: start;
@@ -1899,9 +2372,9 @@
1899 2372 }
1900 2373 }
1901 2374
1902 2375 /* ------------------------------------------------------------------
1903 - * 18. Motion preferences
2376 + * 17. Motion preferences
1904 2377 * ---------------------------------------------------------------- */
1905 2378
1906 2379 @media (prefers-reduced-motion: reduce) {
1907 2380 .gs-app *,
@@ -1909,6 +2382,365 @@
1909 2382 .gs-app *::after {
1910 2383 animation-duration: 0.01ms !important;
1911 2384 animation-iteration-count: 1 !important;
1912 2385 transition-duration: 0.01ms !important;
2386 + }
2387 +}
2388 +
2389 +/* ------------------------------------------------------------------
2390 + * 8h. Free vs Pro (dashboard, without Pro)
2391 + * ---------------------------------------------------------------- */
2392 +
2393 +.gs-compare {
2394 + display: flex;
2395 + flex-direction: column;
2396 + gap: 16px;
2397 +}
2398 +
2399 +/* Upgrade banner */
2400 +
2401 +.gs-upsell {
2402 + position: relative;
2403 + display: grid;
2404 + grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
2405 + align-items: center;
2406 + gap: 32px;
2407 + padding: 32px 36px;
2408 + overflow: hidden;
2409 + border-radius: var(--gs-r-lg);
2410 + background: var(--gs-brand-grad);
2411 + color: #fff;
2412 + box-shadow: var(--gs-shadow-lg);
2413 + isolation: isolate;
2414 +}
2415 +
2416 +.gs-upsell::before,
2417 +.gs-upsell::after {
2418 + content: '';
2419 + position: absolute;
2420 + z-index: -1;
2421 + border-radius: 50%;
2422 + pointer-events: none;
2423 +}
2424 +
2425 +.gs-upsell::before {
2426 + top: -120px;
2427 + right: -60px;
2428 + width: 340px;
2429 + height: 340px;
2430 + background: radial-gradient(circle, rgba(255, 255, 255, 0.22), transparent 65%);
2431 +}
2432 +
2433 +.gs-upsell::after {
2434 + bottom: -160px;
2435 + left: 30%;
2436 + width: 420px;
2437 + height: 420px;
2438 + background: radial-gradient(circle, rgba(255, 196, 92, 0.18), transparent 65%);
2439 +}
2440 +
2441 +.gs-upsell__text {
2442 + display: flex;
2443 + flex-direction: column;
2444 + align-items: flex-start;
2445 + gap: 10px;
2446 +}
2447 +
2448 +.gs-upsell__eyebrow {
2449 + display: inline-flex;
2450 + align-items: center;
2451 + gap: 6px;
2452 + height: 26px;
2453 + padding: 0 10px;
2454 + border: 1px solid rgba(255, 255, 255, 0.28);
2455 + border-radius: var(--gs-r-full);
2456 + background: rgba(255, 255, 255, 0.12);
2457 + font-size: 11px;
2458 + font-weight: 700;
2459 + letter-spacing: 0.08em;
2460 + text-transform: uppercase;
2461 +}
2462 +
2463 +.gs-upsell__eyebrow svg {
2464 + width: 14px;
2465 + height: 14px;
2466 + color: #ffd27a;
2467 +}
2468 +
2469 +.gs-app .gs-upsell__title {
2470 + margin: 4px 0 0;
2471 + color: #fff;
2472 + font-size: 26px;
2473 + font-weight: 700;
2474 + line-height: 1.2;
2475 + letter-spacing: -0.02em;
2476 +}
2477 +
2478 +.gs-upsell__sub {
2479 + max-width: 520px;
2480 + color: rgba(255, 255, 255, 0.82);
2481 + font-size: 14px;
2482 + line-height: 1.6;
2483 +}
2484 +
2485 +.gs-upsell__actions {
2486 + display: flex;
2487 + flex-wrap: wrap;
2488 + gap: 10px;
2489 + margin-top: 8px;
2490 +}
2491 +
2492 +.gs-upsell__actions .gs-btn {
2493 + height: 40px;
2494 + padding: 0 18px;
2495 +}
2496 +
2497 +.gs-upsell__ghost {
2498 + border-color: rgba(255, 255, 255, 0.4);
2499 + background: transparent;
2500 + color: #fff;
2501 +}
2502 +
2503 +.gs-upsell__ghost:hover,
2504 +.gs-upsell__ghost:focus {
2505 + border-color: #fff;
2506 + background: rgba(255, 255, 255, 0.1);
2507 + color: #fff;
2508 +}
2509 +
2510 +.gs-upsell__stats {
2511 + display: grid;
2512 + gap: 10px;
2513 + margin: 0;
2514 + padding: 0;
2515 + list-style: none;
2516 +}
2517 +
2518 +.gs-upsell__stats li {
2519 + display: flex;
2520 + align-items: baseline;
2521 + gap: 10px;
2522 + margin: 0;
2523 + padding: 14px 18px;
2524 + border: 1px solid rgba(255, 255, 255, 0.18);
2525 + border-radius: var(--gs-r);
2526 + background: rgba(255, 255, 255, 0.08);
2527 + backdrop-filter: blur(6px);
2528 +}
2529 +
2530 +.gs-upsell__stats strong {
2531 + min-width: 58px;
2532 + font-size: 26px;
2533 + font-weight: 700;
2534 + letter-spacing: -0.02em;
2535 + line-height: 1;
2536 +}
2537 +
2538 +.gs-upsell__stats span {
2539 + color: rgba(255, 255, 255, 0.82);
2540 + font-size: 13px;
2541 +}
2542 +
2543 +/* Comparison table */
2544 +
2545 +.gs-compare__scroll {
2546 + position: relative;
2547 + overflow-x: auto;
2548 +}
2549 +
2550 +.gs-compare__table {
2551 + width: 100%;
2552 + min-width: 560px;
2553 + border-collapse: collapse;
2554 + font-size: 13.5px;
2555 +}
2556 +
2557 +.gs-compare__table th,
2558 +.gs-compare__table td {
2559 + padding: 12px 20px;
2560 + border-top: 1px solid var(--gs-line);
2561 + text-align: left;
2562 + vertical-align: middle;
2563 +}
2564 +
2565 +.gs-compare__table thead th {
2566 + position: sticky;
2567 + top: 0;
2568 + z-index: 1;
2569 + border-top: 0;
2570 + background: var(--gs-surface-2);
2571 + color: var(--gs-text-3);
2572 + font-size: 11px;
2573 + font-weight: 700;
2574 + letter-spacing: 0.06em;
2575 + text-transform: uppercase;
2576 +}
2577 +
2578 +.gs-compare__table .gs-compare__col {
2579 + width: 150px;
2580 + text-align: center;
2581 +}
2582 +
2583 +/* The Pro column is lightly tinted all the way down. */
2584 +.gs-compare__table .gs-compare__col--pro {
2585 + background: var(--gs-brand-soft);
2586 + border-left: 1px solid var(--gs-brand-line);
2587 +}
2588 +
2589 +.gs-compare__table thead .gs-compare__col--pro {
2590 + background: var(--gs-brand-soft);
2591 +}
2592 +
2593 +.gs-compare__badge {
2594 + display: inline-flex;
2595 + align-items: center;
2596 + height: 22px;
2597 + padding: 0 10px;
2598 + border-radius: var(--gs-r-full);
2599 + background: var(--gs-brand);
2600 + color: #fff;
2601 + font-size: 11px;
2602 + letter-spacing: 0.06em;
2603 +}
2604 +
2605 +.gs-compare__group th {
2606 + padding-top: 18px;
2607 + padding-bottom: 8px;
2608 + background: var(--gs-surface);
2609 + color: var(--gs-brand);
2610 + font-size: 11px;
2611 + font-weight: 700;
2612 + letter-spacing: 0.08em;
2613 + text-transform: uppercase;
2614 +}
2615 +
2616 +.gs-compare__table th.gs-compare__feature {
2617 + font-weight: 400;
2618 +}
2619 +
2620 +.gs-compare__label {
2621 + display: block;
2622 + color: var(--gs-text);
2623 + font-weight: 600;
2624 +}
2625 +
2626 +.gs-compare__hint {
2627 + display: block;
2628 + margin-top: 3px;
2629 + color: var(--gs-text-3);
2630 + font-size: 12.5px;
2631 + line-height: 1.45;
2632 +}
2633 +
2634 +.gs-compare__yes {
2635 + display: inline-grid;
2636 + place-items: center;
2637 + width: 24px;
2638 + height: 24px;
2639 + border-radius: 50%;
2640 + background: var(--gs-ok-soft);
2641 + color: var(--gs-ok);
2642 +}
2643 +
2644 +.gs-compare__yes.is-pro {
2645 + background: var(--gs-brand);
2646 + color: #fff;
2647 +}
2648 +
2649 +.gs-compare__yes svg {
2650 + width: 14px;
2651 + height: 14px;
2652 + stroke-width: 3;
2653 +}
2654 +
2655 +.gs-compare__no {
2656 + display: inline-block;
2657 + width: 12px;
2658 + height: 2px;
2659 + border-radius: 2px;
2660 + background: var(--gs-line-strong);
2661 + vertical-align: middle;
2662 +}
2663 +
2664 +.gs-compare__text {
2665 + color: var(--gs-text-2);
2666 + font-weight: 600;
2667 +}
2668 +
2669 +.gs-compare__text.is-pro {
2670 + color: var(--gs-brand);
2671 +}
2672 +
2673 +.gs-compare__foot {
2674 + display: flex;
2675 + align-items: center;
2676 + justify-content: space-between;
2677 + gap: 12px;
2678 + padding: 14px 20px;
2679 + border-top: 1px solid var(--gs-line);
2680 + background: var(--gs-surface-2);
2681 +}
2682 +
2683 +.gs-compare__foot .gs-btn--primary {
2684 + margin-left: auto;
2685 +}
2686 +
2687 +.gs-compare__note {
2688 + color: var(--gs-text-2);
2689 + font-size: 13px;
2690 +}
2691 +
2692 +/* "Free vs Pro" in the top bar. */
2693 +.gs-nav__link--upgrade {
2694 + display: inline-flex;
2695 + align-items: center;
2696 + gap: 6px;
2697 + color: var(--gs-brand);
2698 +}
2699 +
2700 +.gs-nav__link--upgrade svg {
2701 + width: 14px;
2702 + height: 14px;
2703 +}
2704 +
2705 +@media (max-width: 1100px) {
2706 + .gs-upsell {
2707 + grid-template-columns: 1fr;
2708 + gap: 22px;
2709 + }
2710 +
2711 + .gs-upsell__stats {
2712 + grid-template-columns: repeat(3, minmax(0, 1fr));
2713 + }
2714 +
2715 + .gs-upsell__stats li {
2716 + flex-direction: column;
2717 + gap: 4px;
2718 + }
2719 +}
2720 +
2721 +@media (max-width: 782px) {
2722 + .gs-upsell {
2723 + padding: 24px 20px;
2724 + }
2725 +
2726 + .gs-app .gs-upsell__title {
2727 + font-size: 22px;
2728 + }
2729 +
2730 + .gs-upsell__stats {
2731 + grid-template-columns: 1fr;
2732 + }
2733 +
2734 + .gs-upsell__stats li {
2735 + flex-direction: row;
2736 + }
2737 +
2738 + .gs-compare__table th,
2739 + .gs-compare__table td {
2740 + padding: 10px 14px;
2741 + }
2742 +
2743 + .gs-compare__table .gs-compare__col {
2744 + width: 96px;
1913 2745 }
1914 2746 }