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 +2561 -229 2.11.2 → 3.2.0 View file →
@@ -1,414 +1,2746 @@
1 -#wpcontent {
2 - padding-left: 0 !important;
1 +/**
2 + * GutSlider admin dashboard.
3 + *
4 + * A small design system: tokens, shell, cards, controls.
5 + * Scoped under .gs-app so nothing leaks into wp-admin.
6 + */
7 +
8 +/* ------------------------------------------------------------------
9 + * 1. Tokens
10 + * ---------------------------------------------------------------- */
11 +
12 +.gs-app {
13 + /* Brand */
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%);
20 +
21 + /* Surfaces */
22 + --gs-bg: #f4f5f8;
23 + --gs-surface: #fff;
24 + --gs-surface-2: #fafafc;
25 + --gs-surface-sunk: #f1f2f7;
26 +
27 + /* Lines */
28 + --gs-line: #e4e6ec;
29 + --gs-line-strong: #d3d7e0;
30 +
31 + /* Text */
32 + --gs-text: #12141c;
33 + --gs-text-2: #5c6275;
34 + --gs-text-3: #8a90a2;
35 +
36 + /* Status */
37 + --gs-ok: #12855a;
38 + --gs-ok-soft: #e4f5ee;
39 + --gs-danger: #c0362c;
40 + --gs-danger-soft: #fdeceb;
41 + --gs-gold: #b45309;
42 + --gs-gold-soft: #fdf2e3;
43 +
44 + /* Shape */
45 + --gs-r-sm: 8px;
46 + --gs-r-md: 10px;
47 + --gs-r: 14px;
48 + --gs-r-lg: 18px;
49 + --gs-r-full: 999px;
50 +
51 + /* Elevation */
52 + --gs-shadow-sm: 0 1px 2px rgba(20, 22, 43, 0.05);
53 + --gs-shadow: 0 1px 2px rgba(20, 22, 43, 0.05), 0 8px 24px -12px rgba(20, 22, 43, 0.16);
54 + --gs-shadow-lg: 0 24px 60px -24px rgba(20, 22, 43, 0.3), 0 2px 6px rgba(20, 22, 43, 0.06);
55 +
56 + /* Motion */
57 + --gs-ease: cubic-bezier(0.32, 0.72, 0, 1);
58 + --gs-fast: 140ms var(--gs-ease);
59 + --gs-mid: 240ms var(--gs-ease);
3 60 }
4 61
5 -/* Base */
6 -.container {
7 - width: 100%;
8 - max-width: 1400px;
9 - margin: 0 auto;
62 +.gs-app[data-gs-theme='dark'],
63 +.gs-app.gs-dark {
64 + --gs-brand: #9b83ff;
65 + --gs-brand-hover: #b09dff;
66 + --gs-brand-soft: #241f3d;
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%);
70 +
71 + --gs-bg: #0e0f1a;
72 + --gs-surface: #16182a;
73 + --gs-surface-2: #1b1d31;
74 + --gs-surface-sunk: #101223;
75 +
76 + --gs-line: #262a44;
77 + --gs-line-strong: #343956;
78 +
79 + --gs-text: #f2f3fa;
80 + --gs-text-2: #a5a9c4;
81 + --gs-text-3: #767b9b;
82 +
83 + --gs-ok: #48d39a;
84 + --gs-ok-soft: #12281f;
85 + --gs-danger: #ff8079;
86 + --gs-danger-soft: #2c1917;
87 + --gs-gold: #e0b055;
88 + --gs-gold-soft: #2a2113;
89 +
90 + --gs-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
91 + --gs-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 10px 30px -14px rgba(0, 0, 0, 0.7);
92 + --gs-shadow-lg: 0 28px 70px -28px rgba(0, 0, 0, 0.85), 0 2px 6px rgba(0, 0, 0, 0.4);
93 +}
94 +
95 +/* ------------------------------------------------------------------
96 + * 2. wp-admin reset
97 + * ---------------------------------------------------------------- */
98 +
99 +body.gutslider-admin-page #wpcontent {
100 + padding-left: 0;
101 +}
102 +
103 +body.gutslider-admin-page #wpbody-content {
104 + padding-bottom: 0;
105 +}
106 +
107 +/* The shell prints its own footer bar, so the wp-admin one is redundant. */
108 +body.gutslider-admin-page #wpfooter {
109 + display: none;
110 +}
111 +
112 +/* Hide third-party nags printed outside our shell. Notices we render
113 + inside .gs-app (settings errors, for example) are kept and restyled. */
114 +body.gutslider-admin-page #wpbody-content > .notice,
115 +body.gutslider-admin-page #wpbody-content > .update-nag,
116 +body.gutslider-admin-page #wpbody-content > div.error,
117 +body.gutslider-admin-page #wpbody-content > div.updated {
118 + display: none;
119 +}
120 +
121 +body.gutslider-admin-page #wpbody-content > .notice.gs-keep {
122 + display: block;
123 +}
124 +
125 +/* ------------------------------------------------------------------
126 + * 3. Shell
127 + * ---------------------------------------------------------------- */
128 +
129 +.gs-app {
10 130 box-sizing: border-box;
11 - padding: 15px;
131 + display: flex;
132 + flex-direction: column;
133 + min-height: calc(100vh - 32px);
134 + margin: 0;
135 + background: var(--gs-bg);
136 + color: var(--gs-text);
137 + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, Roboto, 'Helvetica Neue', Arial, sans-serif;
138 + font-size: 14px;
139 + line-height: 1.6;
140 + -webkit-font-smoothing: antialiased;
141 + -moz-osx-font-smoothing: grayscale;
12 142 }
13 143
14 -.box-shadow {
15 - box-shadow: rgba(255, 255, 255, 0.1) 0px 1px 1px 0px inset, rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
16 - rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
144 +.gs-app *,
145 +.gs-app *::before,
146 +.gs-app *::after {
147 + box-sizing: border-box;
17 148 }
18 149
19 -.flex-1 {
20 - flex: 1;
150 +.gs-app :focus-visible {
151 + outline: 2px solid var(--gs-brand);
152 + outline-offset: 2px;
153 + border-radius: var(--gs-r-sm);
21 154 }
22 155
23 -.p15 {
24 - padding: 15px;
156 +.gs-app :focus:not(:focus-visible) {
157 + outline: none;
158 + box-shadow: none;
25 159 }
26 160
27 -.p20 {
28 - padding: 20px;
161 +/* Our components set display on a class, which outranks the UA's
162 + [hidden] { display: none } attribute rule. Restore it. */
163 +.gs-app [hidden] {
164 + display: none;
29 165 }
30 166
31 -.p30 {
32 - padding: 30px;
167 +.gs-shell {
168 + width: 100%;
169 + max-width: 1248px;
170 + margin: 0 auto;
171 + padding: 0 24px;
33 172 }
34 173
35 -.bg-white {
36 - background-color: #fff;
174 +.gs-main {
175 + display: block;
176 + flex: 1 0 auto;
177 + padding-bottom: 56px;
37 178 }
38 179
39 -.flex {
180 +.gs-stack {
40 181 display: flex;
182 + flex-direction: column;
183 + gap: 40px;
41 184 }
42 185
43 -.align-center {
44 - align-items: center;
186 +.gs-stack--sm {
187 + gap: 12px;
45 188 }
46 189
47 -.justify-between {
48 - justify-content: space-between;
190 +/* ------------------------------------------------------------------
191 + * 4. Top bar
192 + * ---------------------------------------------------------------- */
193 +
194 +.gs-bar {
195 + position: sticky;
196 + top: 32px;
197 + z-index: 40;
198 + background: color-mix(in srgb, var(--gs-surface) 82%, transparent);
199 + backdrop-filter: saturate(180%) blur(14px);
200 + -webkit-backdrop-filter: saturate(180%) blur(14px);
201 + border-bottom: 1px solid var(--gs-line);
49 202 }
50 203
51 -.gap-8 {
52 - gap: 8px;
204 +@supports not (background: color-mix(in srgb, red 50%, blue)) {
205 + .gs-bar {
206 + background: var(--gs-surface);
207 + }
53 208 }
54 209
55 -.gap-16 {
56 - gap: 16px;
210 +/* Three tracks so the nav stays optically centred whatever flanks it. */
211 +.gs-bar__inner {
212 + display: grid;
213 + grid-template-columns: 1fr auto 1fr;
214 + align-items: center;
215 + gap: 24px;
216 + max-width: 1440px;
217 + margin: 0 auto;
218 + padding: 0 28px;
219 + height: 60px;
57 220 }
58 221
59 -.gap-30 {
60 - gap: 30px;
222 +.gs-brand {
223 + display: flex;
224 + align-items: center;
225 + gap: 10px;
226 + text-decoration: none;
227 + color: var(--gs-text);
228 + justify-self: start;
229 + min-width: 0;
61 230 }
62 231
63 -.m50 {
64 - margin: 50px 0;
232 +.gs-brand:hover,
233 +.gs-brand:focus {
234 + color: var(--gs-text);
65 235 }
66 236
67 -.mt50 {
68 - margin-top: 50px;
237 +.gs-brand__mark {
238 + display: grid;
239 + place-items: center;
240 + width: 26px;
241 + height: 26px;
242 + flex-shrink: 0;
243 + border-radius: var(--gs-r-sm);
244 + background: var(--gs-brand);
245 + color: #fff;
69 246 }
70 247
71 -.border {
72 - border: 1px solid #e0e0e0;
248 +.gs-brand__mark svg {
249 + width: 14px;
250 + height: 14px;
251 + display: block;
73 252 }
74 253
75 -.rounded {
76 - border-radius: 8px;
254 +.gs-brand__name {
255 + font-size: 15px;
256 + font-weight: 650;
257 + letter-spacing: -0.013em;
77 258 }
78 259
79 -.bold {
260 +.gs-chip {
261 + display: inline-flex;
262 + align-items: center;
263 + height: 20px;
264 + padding: 0 7px;
265 + border-radius: 6px;
266 + font-size: 11px;
267 + font-weight: 550;
268 + letter-spacing: 0;
269 + background: var(--gs-surface-2);
270 + color: var(--gs-text-2);
271 + border: 1px solid var(--gs-line);
272 +}
273 +
274 +.gs-chip--pro {
275 + padding: 0 8px;
276 + font-size: 10px;
80 277 font-weight: 700;
278 + letter-spacing: 0.06em;
279 + background: var(--gs-brand-soft);
280 + color: var(--gs-brand);
281 + border-color: transparent;
81 282 }
82 283
83 -.uppercase {
84 - text-transform: uppercase;
85 -}
284 +/* Nav */
86 285
87 -.page-title {
88 - font-size: 18px;
89 - font-weight: 600;
90 - margin: 0 0 30px 0;
91 - color: #1e1e1e;
286 +.gs-nav {
287 + display: flex;
288 + align-items: center;
289 + gap: 2px;
290 + min-width: 0;
291 + overflow-x: auto;
292 + scrollbar-width: none;
92 293 }
93 294
94 -span.dot {
95 - display: inline-block;
96 - width: 5px;
97 - height: 5px;
98 - background: #9d9d9d;
99 - border-radius: 50%;
295 +.gs-nav::-webkit-scrollbar {
296 + display: none;
100 297 }
101 298
102 -.log-btn {
299 +.gs-nav__link {
300 + position: relative;
301 + display: inline-flex;
302 + align-items: center;
303 + height: 32px;
304 + padding: 0 12px;
305 + border-radius: var(--gs-r-sm);
306 + font-size: 13.5px;
307 + font-weight: 550;
103 308 text-decoration: none;
104 - color: #ccc;
309 + white-space: nowrap;
310 + color: var(--gs-text-2);
311 + transition:
312 + color var(--gs-fast),
313 + background var(--gs-fast);
105 314 }
106 315
107 -.log-btn:focus {
108 - outline: none !important;
109 - box-shadow: none !important;
316 +.gs-nav__link:hover {
317 + color: var(--gs-text);
318 + background: var(--gs-surface-sunk);
110 319 }
111 320
112 -a.log-btn span {
113 - font-size: 24px;
321 +.gs-nav__link.is-active {
322 + color: var(--gs-brand);
323 + background: var(--gs-brand-soft);
324 + font-weight: 600;
114 325 }
115 326
116 -/* Header */
117 -.header {
327 +.gs-bar__actions {
118 328 display: flex;
329 + align-items: center;
330 + gap: 8px;
331 + justify-self: end;
119 332 }
120 333
121 -.logo-img {
334 +.gs-icon-btn {
335 + display: grid;
336 + place-items: center;
122 337 width: 32px;
123 338 height: 32px;
339 + padding: 0;
340 + border: 1px solid var(--gs-line);
341 + border-radius: var(--gs-r-sm);
342 + background: var(--gs-surface);
343 + color: var(--gs-text-2);
344 + cursor: pointer;
345 + text-decoration: none;
346 + transition: all var(--gs-fast);
124 347 }
125 348
126 -.logo-title {
127 - font-size: 20px;
349 +.gs-icon-btn:hover {
350 + background: var(--gs-surface-2);
351 + border-color: var(--gs-line-strong);
352 + color: var(--gs-text);
128 353 }
129 354
130 -.logo-area {
131 - position: relative;
132 - margin-right: 10px;
355 +.gs-icon {
356 + width: 16px;
357 + height: 16px;
358 + flex-shrink: 0;
133 359 }
134 360
135 -.nav-link {
136 - display: inline-block;
361 +.gs-icon--moon {
362 + display: none;
363 +}
364 +
365 +.gs-app[data-gs-theme='dark'] .gs-icon--sun {
366 + display: none;
367 +}
368 +
369 +.gs-app[data-gs-theme='dark'] .gs-icon--moon {
370 + display: block;
371 +}
372 +
373 +/* ------------------------------------------------------------------
374 + * 5. Buttons & links
375 + * ---------------------------------------------------------------- */
376 +
377 +.gs-btn {
378 + position: relative;
379 + display: inline-flex;
380 + align-items: center;
381 + justify-content: center;
382 + gap: 7px;
383 + height: 36px;
137 384 padding: 0 14px;
138 - font-size: 15px;
139 - font-weight: 500;
140 - text-transform: uppercase;
385 + border: 1px solid transparent;
386 + border-radius: var(--gs-r-sm);
387 + font-family: inherit;
388 + font-size: 13.5px;
389 + font-weight: 600;
390 + line-height: 1;
141 391 text-decoration: none;
142 - color: #4f34c5;
392 + white-space: nowrap;
393 + cursor: pointer;
394 + transition:
395 + transform var(--gs-fast),
396 + background var(--gs-fast),
397 + border-color var(--gs-fast),
398 + color var(--gs-fast),
399 + box-shadow var(--gs-fast);
143 400 }
144 401
145 -.nav-link:focus {
146 - outline: none !important;
147 - box-shadow: none !important;
402 +.gs-btn:active {
403 + transform: translateY(1px);
148 404 }
149 405
150 -.pro-btn {
151 - text-decoration: none;
152 - background: #4f34c5;
153 - font-size: 15px;
406 +.gs-btn--sm {
407 + height: 32px;
408 + padding: 0 12px;
409 + font-size: 12.5px;
410 +}
411 +
412 +.gs-btn--primary {
413 + background: var(--gs-brand);
154 414 color: #fff;
155 - padding: 10px 16px;
156 - border-radius: 6px;
157 - display: inline-block;
415 + box-shadow: 0 1px 2px rgba(18, 20, 28, 0.08);
158 416 }
159 417
160 -.pro-btn:hover {
418 +.gs-btn--primary:hover,
419 +.gs-btn--primary:focus {
420 + background: var(--gs-brand-hover);
161 421 color: #fff;
162 422 }
163 423
164 -.gp-card {
165 - box-sizing: border-box;
166 - border: 1px solid #e0e0e0;
167 - border-radius: 8px;
168 - width: 100%;
424 +.gs-btn--quiet {
425 + background: var(--gs-surface);
426 + border-color: var(--gs-line-strong);
427 + color: var(--gs-text);
428 + box-shadow: var(--gs-shadow-sm);
169 429 }
170 430
171 -.gp-card .icon {
172 - margin-bottom: 10px;
431 +.gs-btn--quiet:hover,
432 +.gs-btn--quiet:focus {
433 + background: var(--gs-surface-2);
434 + border-color: var(--gs-text-3);
435 + color: var(--gs-text);
173 436 }
174 437
175 -.gp-card .icon span.dashicons {
176 - font-size: 20px;
177 - color: #4f34c5;
438 +.gs-btn--ghost {
439 + background: transparent;
440 + color: var(--gs-text-2);
178 441 }
179 442
180 -.support-title {
181 - font-size: 16px;
443 +.gs-btn--ghost:hover,
444 +.gs-btn--ghost:focus {
445 + background: var(--gs-surface-sunk);
446 + color: var(--gs-text);
447 +}
448 +
449 +.gs-btn--invert {
450 + background: #fff;
451 + color: #1d1638;
452 +}
453 +
454 +.gs-btn--invert:hover,
455 +.gs-btn--invert:focus {
456 + background: #f1eefc;
457 + color: #1d1638;
458 +}
459 +
460 +.gs-btn[disabled],
461 +.gs-btn.is-busy {
462 + pointer-events: none;
463 + opacity: 0.65;
464 +}
465 +
466 +.gs-btn__spinner {
467 + display: none;
468 + width: 14px;
469 + height: 14px;
470 + border-radius: 50%;
471 + border: 2px solid currentcolor;
472 + border-top-color: transparent;
473 + animation: gs-spin 0.6s linear infinite;
474 +}
475 +
476 +.gs-btn.is-busy .gs-btn__spinner {
477 + display: block;
478 +}
479 +
480 +.gs-btn.is-busy .gs-kbd {
481 + display: none;
482 +}
483 +
484 +@keyframes gs-spin {
485 + to {
486 + transform: rotate(360deg);
487 + }
488 +}
489 +
490 +.gs-link {
491 + display: inline-flex;
492 + align-items: center;
493 + gap: 5px;
494 + color: var(--gs-brand);
182 495 font-weight: 600;
496 + font-size: 13px;
497 + text-decoration: none;
498 + transition: opacity var(--gs-fast);
499 +}
500 +
501 +.gs-link:hover,
502 +.gs-link:focus {
503 + color: var(--gs-brand-hover);
504 + text-decoration: underline;
505 + text-underline-offset: 3px;
506 +}
507 +
508 +.gs-link--sm {
509 + font-size: 12.5px;
510 + color: var(--gs-text-2);
511 + font-weight: 550;
512 +}
513 +
514 +.gs-link--sm:hover {
515 + color: var(--gs-brand);
516 +}
517 +
518 +.gs-kbd {
519 + display: inline-flex;
520 + align-items: center;
521 + justify-content: center;
522 + min-width: 20px;
523 + height: 20px;
524 + padding: 0 5px;
525 + border-radius: 5px;
526 + background: rgba(255, 255, 255, 0.18);
527 + border: 1px solid rgba(255, 255, 255, 0.22);
528 + font-family: inherit;
529 + font-size: 11px;
530 + font-weight: 600;
531 + line-height: 1;
532 +}
533 +
534 +/* ------------------------------------------------------------------
535 + * 6. Typography helpers
536 + * ---------------------------------------------------------------- */
537 +
538 +.gs-app h1,
539 +.gs-app h2,
540 +.gs-app h3 {
183 541 margin: 0;
542 + color: var(--gs-text);
543 + font-weight: 650;
544 + letter-spacing: -0.02em;
545 + line-height: 1.25;
184 546 }
185 547
186 -.support-desc {
187 - font-size: 14px;
188 - color: #666;
189 - margin: 0 0 12px 0;
548 +.gs-app p {
549 + margin: 0;
190 550 }
191 551
192 -a.support-link {
193 - text-decoration: none;
194 - border-bottom: 1px solid #4f34c5;
195 - color: #4f34c5;
196 - font-size: 12px;
552 +.gs-eyebrow {
553 + display: inline-block;
554 + font-size: 10.5px;
555 + font-weight: 700;
556 + letter-spacing: 0.08em;
197 557 text-transform: uppercase;
198 - font-weight: 500;
558 + color: var(--gs-brand);
199 559 }
200 560
201 -.support-link:focus {
202 - outline: none !important;
203 - box-shadow: none !important;
561 +.gs-page-head {
562 + display: flex;
563 + align-items: flex-end;
564 + justify-content: space-between;
565 + gap: 24px;
566 + flex-wrap: wrap;
567 + padding-top: 40px;
204 568 }
205 569
206 -.video-title {
207 - font-size: 18px;
570 +.gs-page-head__actions {
571 + display: flex;
572 + align-items: center;
573 + gap: 10px;
574 + flex-wrap: wrap;
575 +}
576 +
577 +.gs-page-title {
578 + font-size: 23px;
579 + letter-spacing: -0.026em;
580 +}
581 +
582 +.gs-page-sub {
583 + max-width: 68ch;
584 + margin-top: 5px;
585 + font-size: 13.5px;
586 + color: var(--gs-text-2);
587 +}
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 +
620 +.gs-count {
621 + flex-shrink: 0;
622 + padding: 6px 12px;
623 + border-radius: var(--gs-r-full);
624 + background: var(--gs-surface);
625 + border: 1px solid var(--gs-line);
626 + font-size: 12.5px;
208 627 font-weight: 600;
209 - margin: 0 0 12px 0;
628 + font-variant-numeric: tabular-nums;
629 + color: var(--gs-text-2);
210 630 }
211 631
212 -.video-area {
213 - width: 70%;
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;
644 +}
645 +
646 +.gs-page .gs-page-head {
647 + padding-top: 0;
648 +}
649 +
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 {
214 677 flex: 1;
678 + min-width: 220px;
215 679 }
216 680
217 -.our-products {
218 - width: 30%;
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;
692 + color: var(--gs-text-2);
693 +}
694 +
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. */
697 +
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);
707 + background: var(--gs-surface);
708 + color: var(--gs-gold);
709 +}
710 +
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);
715 +}
716 +
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);
722 +}
723 +
724 +.gs-banner--info {
725 + border-color: var(--gs-brand-line);
726 + background: var(--gs-brand-soft);
727 +}
728 +
729 +.gs-banner--info .gs-banner__icon {
730 + border-color: var(--gs-brand-line);
731 + background: var(--gs-surface);
732 +}
733 +
734 +/* Metric row */
735 +
736 +.gs-metrics {
737 + display: grid;
738 + grid-template-columns: repeat(4, minmax(0, 1fr));
739 + gap: 16px;
740 +}
741 +
742 +.gs-metric {
219 743 display: flex;
220 744 flex-direction: column;
221 745 gap: 10px;
746 + padding: 18px;
747 + border-radius: var(--gs-r);
748 + background: var(--gs-surface);
749 + border: 1px solid var(--gs-line);
222 750 }
223 751
224 -.video-area iframe {
225 - width: 100% !important;
226 - height: 380px;
227 - margin-top: 15px;
228 - border-radius: 8px;
752 +.gs-metric__head {
753 + display: flex;
754 + align-items: center;
755 + justify-content: space-between;
756 + gap: 10px;
229 757 }
230 758
231 -/* others */
759 +.gs-metric__label {
760 + font-size: 12.5px;
761 + font-weight: 550;
762 + color: var(--gs-text-2);
763 +}
232 764
233 -.gutslider-admin-header h1 {
234 - font-size: 32px;
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);
774 +}
775 +
776 +.gs-metric__icon .gs-icon {
777 + width: 14px;
778 + height: 14px;
779 +}
780 +
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;
790 +}
791 +
792 +.gs-metric__unit {
793 + font-size: 13px;
794 + font-weight: 550;
795 + letter-spacing: 0;
796 + color: var(--gs-text-3);
797 +}
798 +
799 +.gs-metric__foot {
800 + font-size: 12px;
801 + color: var(--gs-text-3);
802 +}
803 +
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;
811 +}
812 +
813 +.gs-col {
814 + display: flex;
815 + flex-direction: column;
816 + gap: 22px;
817 + min-width: 0;
818 +}
819 +
820 +/* ------------------------------------------------------------------
821 + * 8. Cards & grids
822 + * ---------------------------------------------------------------- */
823 +
824 +.gs-shell.gs-stack {
825 + padding-top: 40px;
826 + padding-bottom: 40px;
827 +}
828 +
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;
832 +}
833 +
834 +.gs-grid {
835 + display: grid;
836 + gap: 16px;
837 +}
838 +
839 +.gs-grid--cards {
840 + grid-template-columns: repeat(auto-fill, minmax(268px, 1fr));
841 +}
842 +
843 +/* ------------------------------------------------------------------
844 + * 8. Cards
845 + * ---------------------------------------------------------------- */
846 +
847 +.gs-card {
848 + display: flex;
849 + flex-direction: column;
850 + border-radius: var(--gs-r);
851 + background: var(--gs-surface);
852 + border: 1px solid var(--gs-line);
853 + text-decoration: none;
854 + color: inherit;
855 + transition:
856 + border-color var(--gs-mid),
857 + box-shadow var(--gs-mid);
858 +}
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 +
903 +.gs-card__body {
904 + display: flex;
905 + flex-direction: column;
906 + gap: 5px;
907 + align-items: flex-start;
908 + padding: 16px;
909 +}
910 +
911 +.gs-card__body .gs-card__sub {
912 + color: var(--gs-text-2);
913 +}
914 +
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;
928 + color: var(--gs-text-2);
929 + font-variant-numeric: tabular-nums;
930 +}
931 +
932 +.gs-card--link:hover,
933 +.gs-card--link:focus {
934 + border-color: var(--gs-brand);
935 + box-shadow: var(--gs-shadow);
936 + color: inherit;
937 +}
938 +
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;
957 +}
958 +
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 {
986 + display: grid;
987 + place-items: center;
988 + width: 34px;
989 + height: 34px;
990 + flex-shrink: 0;
991 + border-radius: 9px;
992 + background: var(--gs-brand-soft);
993 + color: var(--gs-brand);
994 +}
995 +
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;
235 1013 font-weight: 600;
236 - margin-bottom: 8px;
237 - color: #1e1e1e;
1014 + line-height: 18px;
1015 + color: var(--gs-text);
238 1016 }
239 1017
240 -.gutslider-subtitle {
241 - font-size: 16px;
242 - color: #757575;
243 - margin: 0;
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);
244 1023 }
245 1024
246 -.gutslider-blocks-grid {
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 {
247 1075 display: grid;
248 - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
249 - gap: 20px;
1076 + grid-template-columns: repeat(3, minmax(0, 1fr));
1077 + gap: 12px;
250 1078 }
251 1079
252 -.gutslider-block-card {
1080 +.gs-step {
1081 + display: flex;
1082 + flex-direction: column;
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);
1089 +}
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 +
1102 +.gs-step__n {
1103 + font-size: 12px;
1104 + font-weight: 700;
1105 + letter-spacing: 0.04em;
1106 + color: var(--gs-text-3);
1107 + font-variant-numeric: tabular-nums;
1108 +}
1109 +
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;
1119 +}
1120 +
1121 +.gs-step__check .gs-icon {
1122 + width: 11px;
1123 + height: 11px;
1124 + stroke-width: 3;
1125 +}
1126 +
1127 +.gs-step__title {
1128 + font-size: 13.5px;
1129 + font-weight: 600;
1130 +}
1131 +
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;
1147 + padding: 0;
1148 + border: 0;
1149 + background: #14152a;
1150 + cursor: pointer;
1151 + overflow: hidden;
1152 +}
1153 +
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%);
1164 +}
1165 +
1166 +.gs-video__slides {
1167 + display: flex;
1168 + align-items: center;
1169 + gap: 8px;
1170 + height: 104px;
1171 +}
1172 +
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;
1189 + align-items: center;
1190 + gap: 6px;
1191 +}
1192 +
1193 +.gs-video__dot {
1194 + width: 6px;
1195 + height: 6px;
1196 + border-radius: 50%;
1197 + background: rgba(255, 255, 255, 0.35);
1198 +}
1199 +
1200 +.gs-video__dot.is-active {
253 1201 background: #fff;
254 - border: 1px solid #e0e0e0;
255 - border-radius: 8px;
256 - padding: 24px;
257 - position: relative;
258 - transition: all 0.3s ease;
259 - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
260 1202 }
261 1203
262 -.gutslider-block-card:hover {
263 - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
264 - transform: translateY(-2px);
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);
265 1218 }
266 1219
267 -.gutslider-block-card.pro-block {
268 - border-color: #9b59b6;
269 - background: linear-gradient(135deg, #fff 0%, #f8f5fb 100%);
1220 +.gs-video__play .gs-icon {
1221 + width: 19px;
1222 + height: 19px;
1223 + margin-left: 2px;
270 1224 }
271 1225
272 -.pro-badge {
1226 +.gs-video:hover .gs-video__play {
1227 + transform: translate(-50%, -50%) scale(1.06);
1228 +}
1229 +
1230 +.gs-video iframe {
273 1231 position: absolute;
274 - top: 12px;
275 - right: 12px;
276 - background: linear-gradient(135deg, #9b59b6 0%, #8e44ad 100%);
277 - color: #fff;
278 - padding: 4px 12px;
279 - border-radius: 12px;
280 - font-size: 11px;
281 - font-weight: 700;
282 - letter-spacing: 0.5px;
1232 + inset: 0;
1233 + width: 100%;
1234 + height: 100%;
1235 + border: 0;
283 1236 }
284 1237
285 -.free-badge {
286 - background: #ddd;
287 - color: #000;
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;
288 1249 }
289 1250
290 -.block-header {
1251 +.gs-news__item {
291 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;
292 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 +/* ------------------------------------------------------------------
1391 + * 9. Blocks toolbar
1392 + * ---------------------------------------------------------------- */
1393 +
1394 +.gs-toolbar {
1395 + position: sticky;
1396 + top: 96px;
1397 + z-index: 20;
1398 + display: flex;
293 1399 align-items: center;
294 - margin-bottom: 12px;
1400 + gap: 12px;
1401 + flex-wrap: wrap;
1402 + padding: 12px;
1403 + margin-top: -16px;
1404 + border-radius: var(--gs-r);
1405 + background: color-mix(in srgb, var(--gs-surface) 88%, transparent);
1406 + backdrop-filter: saturate(180%) blur(12px);
1407 + -webkit-backdrop-filter: saturate(180%) blur(12px);
1408 + border: 1px solid var(--gs-line);
1409 + box-shadow: var(--gs-shadow-sm);
295 1410 }
296 1411
297 -.block-title {
298 - font-size: 18px;
1412 +@supports not (background: color-mix(in srgb, red 50%, blue)) {
1413 + .gs-toolbar {
1414 + background: var(--gs-surface);
1415 + }
1416 +}
1417 +
1418 +.gs-search {
1419 + position: relative;
1420 + display: flex;
1421 + align-items: center;
1422 + flex: 1 1 240px;
1423 + min-width: 200px;
1424 +}
1425 +
1426 +.gs-search .gs-icon {
1427 + position: absolute;
1428 + left: 12px;
1429 + color: var(--gs-text-3);
1430 + pointer-events: none;
1431 +}
1432 +
1433 +/* Typed selector: wp-admin styles `input[type="search"]`, which would
1434 + otherwise outrank a bare class and drop the padding for the icon. */
1435 +input.gs-search__input {
1436 + width: 100%;
1437 + height: 38px;
1438 + margin: 0;
1439 + padding: 0 44px 0 36px;
1440 + border: 1px solid var(--gs-line-strong);
1441 + border-radius: var(--gs-r-sm);
1442 + background: var(--gs-surface);
1443 + color: var(--gs-text);
1444 + font-family: inherit;
1445 + font-size: 13.5px;
1446 + line-height: 1;
1447 + box-shadow: none;
1448 + transition:
1449 + border-color var(--gs-fast),
1450 + box-shadow var(--gs-fast);
1451 + -webkit-appearance: none;
1452 + appearance: none;
1453 +}
1454 +
1455 +input.gs-search__input::placeholder {
1456 + color: var(--gs-text-3);
1457 +}
1458 +
1459 +input.gs-search__input:focus {
1460 + outline: none;
1461 + border-color: var(--gs-brand);
1462 + box-shadow: 0 0 0 3px var(--gs-brand-ring);
1463 +}
1464 +
1465 +input.gs-search__input::-webkit-search-cancel-button {
1466 + -webkit-appearance: none;
1467 +}
1468 +
1469 +.gs-search__kbd {
1470 + position: absolute;
1471 + right: 10px;
1472 + background: var(--gs-surface-sunk);
1473 + border-color: var(--gs-line);
1474 + color: var(--gs-text-3);
1475 + pointer-events: none;
1476 + transition: opacity var(--gs-fast);
1477 +}
1478 +
1479 +.gs-search__input:focus ~ .gs-search__kbd,
1480 +.gs-search__input:not(:placeholder-shown) ~ .gs-search__kbd {
1481 + opacity: 0;
1482 +}
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 +
1504 +.gs-segment {
1505 + display: inline-flex;
1506 + gap: 2px;
1507 + padding: 3px;
1508 + border-radius: var(--gs-r-sm);
1509 + background: var(--gs-surface-sunk);
1510 + border: 1px solid var(--gs-line);
1511 +}
1512 +
1513 +.gs-segment__btn {
1514 + height: 30px;
1515 + padding: 0 12px;
1516 + border: 0;
1517 + border-radius: 6px;
1518 + background: transparent;
1519 + color: var(--gs-text-2);
1520 + font-family: inherit;
1521 + font-size: 12.5px;
299 1522 font-weight: 600;
300 - margin: 0;
301 - color: #1e1e1e;
1523 + cursor: pointer;
1524 + transition:
1525 + background var(--gs-fast),
1526 + color var(--gs-fast);
302 1527 }
303 1528
304 -.block-description {
305 - font-size: 14px;
306 - color: #666;
307 - line-height: 1.6;
308 - margin: 0 0 16px 0;
309 - min-height: 48px;
1529 +.gs-segment__btn:hover {
1530 + color: var(--gs-text);
310 1531 }
311 1532
312 -.block-footer {
313 - border-top: 1px solid #f0f0f0;
314 - padding-top: 16px;
1533 +.gs-segment__btn.is-active {
1534 + background: var(--gs-surface);
1535 + color: var(--gs-text);
1536 + box-shadow: var(--gs-shadow-sm);
1537 +}
1538 +
1539 +.gs-toolbar__actions {
315 1540 display: flex;
1541 + gap: 8px;
1542 + margin-left: auto;
1543 +}
1544 +
1545 +/* ------------------------------------------------------------------
1546 + * 10. Block cards
1547 + * ---------------------------------------------------------------- */
1548 +
1549 +.gs-block {
1550 + position: relative;
1551 + display: flex;
1552 + flex-direction: column;
1553 + padding: 18px;
1554 + border-radius: var(--gs-r);
1555 + background: var(--gs-surface);
1556 + border: 1px solid var(--gs-line);
1557 + box-shadow: var(--gs-shadow-sm);
1558 + transition:
1559 + transform var(--gs-mid),
1560 + box-shadow var(--gs-mid),
1561 + border-color var(--gs-mid),
1562 + opacity var(--gs-mid);
1563 +}
1564 +
1565 +.gs-block::before {
1566 + content: '';
1567 + position: absolute;
1568 + inset: 0;
1569 + border-radius: inherit;
1570 + padding: 1px;
1571 + background: var(--gs-brand-grad);
1572 + -webkit-mask:
1573 + linear-gradient(#000 0 0) content-box,
1574 + linear-gradient(#000 0 0);
1575 + -webkit-mask-composite: xor;
1576 + mask:
1577 + linear-gradient(#000 0 0) content-box,
1578 + linear-gradient(#000 0 0);
1579 + mask-composite: exclude;
1580 + opacity: 0;
1581 + transition: opacity var(--gs-mid);
1582 + pointer-events: none;
1583 +}
1584 +
1585 +.gs-block:hover {
1586 + transform: translateY(-2px);
1587 + box-shadow: var(--gs-shadow);
1588 +}
1589 +
1590 +.gs-block:hover::before {
1591 + opacity: 0.55;
1592 +}
1593 +
1594 +.gs-block.is-off {
1595 + background: var(--gs-surface-2);
1596 +}
1597 +
1598 +.gs-block.is-off .gs-block__title,
1599 +.gs-block.is-off .gs-block__text {
1600 + opacity: 0.62;
1601 +}
1602 +
1603 +.gs-block.is-locked {
1604 + background: var(--gs-surface-2);
1605 +}
1606 +
1607 +.gs-block.is-dirty {
1608 + border-color: var(--gs-brand);
1609 + box-shadow: 0 0 0 3px var(--gs-brand-ring);
1610 +}
1611 +
1612 +.gs-block.is-hidden {
1613 + display: none;
1614 +}
1615 +
1616 +.gs-block__head {
1617 + display: flex;
316 1618 align-items: center;
317 1619 justify-content: space-between;
1620 + gap: 10px;
1621 + margin-bottom: 7px;
318 1622 }
319 1623
320 -.demo-link {
1624 +.gs-block__title {
1625 + font-size: 15px;
1626 + font-weight: 640;
1627 +}
1628 +
1629 +.gs-block__text {
1630 + flex: 1;
1631 + font-size: 13px;
1632 + line-height: 1.55;
1633 + color: var(--gs-text-2);
1634 + margin-bottom: 16px;
1635 +}
1636 +
1637 +.gs-block__foot {
1638 + display: flex;
1639 + align-items: center;
1640 + justify-content: space-between;
1641 + gap: 10px;
1642 + padding-top: 14px;
1643 + margin-top: 14px;
1644 + border-top: 1px solid var(--gs-line);
1645 +}
1646 +
1647 +.gs-tag {
321 1648 display: inline-flex;
322 1649 align-items: center;
1650 + flex-shrink: 0;
1651 + height: 21px;
1652 + padding: 0 8px;
1653 + border-radius: 6px;
1654 + background: var(--gs-surface-2);
1655 + border: 1px solid var(--gs-line);
1656 + font-size: 10.5px;
1657 + font-weight: 600;
1658 + letter-spacing: 0.03em;
1659 + color: var(--gs-text-2);
1660 +}
1661 +
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 {
1683 + background: var(--gs-gold-soft);
1684 + border-color: transparent;
1685 + color: var(--gs-gold);
1686 +}
1687 +
1688 +.gs-lock {
1689 + display: inline-flex;
1690 + align-items: center;
1691 + justify-content: center;
323 1692 gap: 6px;
324 - color: #2271b1;
1693 + height: 28px;
1694 + min-width: 34px;
1695 + padding: 0 9px;
1696 + flex-shrink: 0;
1697 + border-radius: var(--gs-r-full);
1698 + background: var(--gs-surface-2);
1699 + border: 1px solid var(--gs-line);
1700 + color: var(--gs-text-3);
1701 + font-size: 12px;
1702 + font-weight: 650;
325 1703 text-decoration: none;
326 - font-size: 14px;
327 - font-weight: 500;
328 - transition: color 0.2s ease;
1704 + transition: all var(--gs-fast);
329 1705 }
330 1706
331 -.demo-link:hover {
332 - color: #135e96;
1707 +.gs-lock:hover,
1708 +.gs-lock:focus {
1709 + background: var(--gs-brand-soft);
1710 + border-color: var(--gs-brand-line);
1711 + color: var(--gs-brand);
333 1712 }
334 1713
335 -.demo-link .dashicons {
336 - font-size: 16px;
1714 +.gs-lock .gs-icon {
1715 + width: 13px;
1716 + height: 13px;
1717 +}
1718 +
1719 +/* ------------------------------------------------------------------
1720 + * 11. Switch
1721 + * ---------------------------------------------------------------- */
1722 +
1723 +.gs-switch {
1724 + position: relative;
1725 + display: inline-flex;
1726 + flex-shrink: 0;
1727 + cursor: pointer;
1728 +}
1729 +
1730 +.gs-switch__input {
1731 + position: absolute;
1732 + width: 100%;
1733 + height: 100%;
1734 + margin: 0;
1735 + opacity: 0;
1736 + cursor: pointer;
1737 +}
1738 +
1739 +.gs-switch__track {
1740 + display: block;
1741 + width: 34px;
1742 + height: 20px;
1743 + padding: 2px;
1744 + border-radius: var(--gs-r-full);
1745 + background: var(--gs-line-strong);
1746 + transition: background var(--gs-mid);
1747 +}
1748 +
1749 +.gs-switch__thumb {
1750 + display: block;
337 1751 width: 16px;
338 1752 height: 16px;
1753 + border-radius: 50%;
1754 + background: #fff;
1755 + box-shadow: 0 1px 2px rgba(18, 20, 28, 0.25);
1756 + transform: translateX(0);
1757 + transition: transform var(--gs-mid);
339 1758 }
340 1759
341 -/* Toggle Switch Styles */
342 -.toggle-switch {
1760 +.gs-switch__input:checked ~ .gs-switch__track {
1761 + background: var(--gs-brand);
1762 +}
1763 +
1764 +.gs-switch__input:checked ~ .gs-switch__track .gs-switch__thumb {
1765 + transform: translateX(14px);
1766 +}
1767 +
1768 +.gs-switch__input:focus-visible ~ .gs-switch__track {
1769 + box-shadow: 0 0 0 3px var(--gs-brand-ring);
1770 +}
1771 +
1772 +.gs-switch--lg .gs-switch__track {
1773 + width: 48px;
1774 + height: 27px;
1775 +}
1776 +
1777 +.gs-switch--lg .gs-switch__thumb {
1778 + width: 21px;
1779 + height: 21px;
1780 +}
1781 +
1782 +.gs-switch--lg .gs-switch__input:checked ~ .gs-switch__track .gs-switch__thumb {
1783 + transform: translateX(21px);
1784 +}
1785 +
1786 +.gs-switch--danger .gs-switch__input:checked ~ .gs-switch__track {
1787 + background: var(--gs-danger);
1788 +}
1789 +
1790 +/* ------------------------------------------------------------------
1791 + * 12. Empty state & notes
1792 + * ---------------------------------------------------------------- */
1793 +
1794 +.gs-empty {
1795 + display: flex;
1796 + flex-direction: column;
1797 + align-items: center;
1798 + gap: 12px;
1799 + padding: 56px 24px;
1800 + border-radius: var(--gs-r);
1801 + border: 1px dashed var(--gs-line-strong);
1802 + color: var(--gs-text-3);
1803 + text-align: center;
1804 +}
1805 +
1806 +.gs-empty .gs-icon {
1807 + width: 28px;
1808 + height: 28px;
1809 +}
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 +
1825 +.gs-note {
1826 + display: flex;
1827 + align-items: flex-start;
1828 + gap: 12px;
1829 + padding: 16px 18px;
1830 + border-radius: var(--gs-r);
1831 + background: var(--gs-surface-2);
1832 + border: 1px solid var(--gs-line);
1833 + font-size: 13px;
1834 + color: var(--gs-text-2);
1835 +}
1836 +
1837 +.gs-note .gs-icon {
1838 + color: var(--gs-text-3);
1839 + margin-top: 2px;
1840 +}
1841 +
1842 +.gs-note .gs-link {
1843 + font-size: inherit;
1844 +}
1845 +
1846 +/* ------------------------------------------------------------------
1847 + * 13. Settings
1848 + * ---------------------------------------------------------------- */
1849 +
1850 +.gs-settings {
1851 + display: grid;
1852 + grid-template-columns: 200px minmax(0, 1fr);
1853 + gap: 32px;
1854 + align-items: start;
1855 +}
1856 +
1857 +.gs-sidenav {
1858 + position: sticky;
1859 + top: 112px;
1860 + display: flex;
1861 + flex-direction: column;
1862 + gap: 2px;
1863 +}
1864 +
1865 +.gs-sidenav__link {
1866 + display: flex;
1867 + align-items: center;
1868 + gap: 10px;
1869 + padding: 9px 12px;
1870 + border-radius: var(--gs-r-sm);
1871 + font-size: 13.5px;
1872 + font-weight: 600;
1873 + color: var(--gs-text-2);
1874 + text-decoration: none;
1875 + transition:
1876 + background var(--gs-fast),
1877 + color var(--gs-fast);
1878 +}
1879 +
1880 +.gs-sidenav__link:hover {
1881 + background: var(--gs-surface-sunk);
1882 + color: var(--gs-text);
1883 +}
1884 +
1885 +.gs-sidenav__link.is-active {
1886 + background: var(--gs-brand-soft);
1887 + color: var(--gs-brand);
1888 +}
1889 +
1890 +/* A single full-width column of panels. .gs-settings__body is the same
1891 + thing sitting in the settings grid's content column. */
1892 +.gs-panels,
1893 +.gs-settings__body {
1894 + display: flex;
1895 + flex-direction: column;
1896 + gap: 16px;
1897 + min-width: 0;
1898 +}
1899 +
1900 +.gs-panel {
1901 + padding: 24px;
1902 + border-radius: var(--gs-r);
1903 + background: var(--gs-surface);
1904 + border: 1px solid var(--gs-line);
1905 + box-shadow: var(--gs-shadow-sm);
1906 + scroll-margin-top: 120px;
1907 +}
1908 +
1909 +.gs-panel__head {
1910 + margin-bottom: 20px;
1911 +}
1912 +
1913 +.gs-panel__title {
1914 + font-size: 16px;
1915 +}
1916 +
1917 +.gs-panel__sub {
1918 + margin-top: 3px;
1919 + font-size: 13px;
1920 + color: var(--gs-text-2);
1921 +}
1922 +
1923 +.gs-field {
1924 + display: grid;
1925 + grid-template-columns: minmax(0, 1fr) auto;
1926 + gap: 24px;
1927 + align-items: center;
1928 + padding: 18px 0;
1929 + border-top: 1px solid var(--gs-line);
1930 +}
1931 +
1932 +.gs-field:first-of-type {
1933 + border-top: 0;
1934 + padding-top: 0;
1935 +}
1936 +
1937 +.gs-field:last-child {
1938 + padding-bottom: 0;
1939 +}
1940 +
1941 +.gs-field__label label,
1942 +.gs-field__name {
1943 + display: block;
1944 + font-size: 14px;
1945 + font-weight: 620;
1946 + color: var(--gs-text);
1947 +}
1948 +
1949 +.gs-field__help {
1950 + max-width: 62ch;
1951 + margin-top: 4px;
1952 + font-size: 12.5px;
1953 + line-height: 1.6;
1954 + color: var(--gs-text-2);
1955 +}
1956 +
1957 +.gs-field--danger .gs-field__label label {
1958 + color: var(--gs-danger);
1959 +}
1960 +
1961 +.gs-radio-cards {
1962 + display: grid;
1963 + grid-template-columns: repeat(2, minmax(150px, 1fr));
1964 + gap: 10px;
1965 +}
1966 +
1967 +.gs-radio-card {
343 1968 position: relative;
344 - display: inline-block;
345 - width: 48px;
346 - height: 24px;
1969 + display: flex;
1970 + align-items: flex-start;
1971 + gap: 10px;
1972 + padding: 13px 14px;
1973 + border-radius: var(--gs-r-sm);
1974 + background: var(--gs-surface);
1975 + border: 1px solid var(--gs-line-strong);
347 1976 cursor: pointer;
1977 + transition:
1978 + border-color var(--gs-fast),
1979 + background var(--gs-fast),
1980 + box-shadow var(--gs-fast);
348 1981 }
349 1982
350 -.toggle-switch input {
1983 +.gs-radio-card input {
1984 + position: absolute;
351 1985 opacity: 0;
352 1986 width: 0;
353 1987 height: 0;
1988 + margin: 0;
354 1989 }
355 1990
356 -.toggle-slider {
1991 +.gs-radio-card:hover {
1992 + border-color: var(--gs-text-3);
1993 +}
1994 +
1995 +.gs-radio-card.is-active {
1996 + border-color: var(--gs-brand);
1997 + background: var(--gs-brand-soft);
1998 + box-shadow: 0 0 0 3px var(--gs-brand-ring);
1999 +}
2000 +
2001 +.gs-radio-card__body {
2002 + display: flex;
2003 + flex-direction: column;
2004 + gap: 2px;
2005 +}
2006 +
2007 +.gs-radio-card__title {
2008 + font-size: 13.5px;
2009 + font-weight: 620;
2010 + color: var(--gs-text);
2011 +}
2012 +
2013 +.gs-radio-card__text {
2014 + font-size: 12px;
2015 + color: var(--gs-text-2);
2016 +}
2017 +
2018 +.gs-radio-card__mark {
2019 + width: 16px;
2020 + height: 16px;
2021 + margin-left: auto;
2022 + flex-shrink: 0;
2023 + border-radius: 50%;
2024 + border: 2px solid var(--gs-line-strong);
2025 + transition:
2026 + border-color var(--gs-fast),
2027 + box-shadow var(--gs-fast);
2028 +}
2029 +
2030 +.gs-radio-card.is-active .gs-radio-card__mark {
2031 + border-color: var(--gs-brand);
2032 + box-shadow:
2033 + inset 0 0 0 3px var(--gs-surface),
2034 + inset 0 0 0 10px var(--gs-brand);
2035 +}
2036 +
2037 +.gs-panel--info {
2038 + background: var(--gs-surface-2);
2039 +}
2040 +
2041 +.gs-defs {
2042 + display: grid;
2043 + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2044 + gap: 16px;
2045 + margin: 0;
2046 +}
2047 +
2048 +.gs-defs > div {
2049 + display: flex;
2050 + flex-direction: column;
2051 + gap: 2px;
2052 +}
2053 +
2054 +.gs-defs dt {
2055 + font-size: 12px;
2056 + font-weight: 600;
2057 + color: var(--gs-text-3);
2058 +}
2059 +
2060 +.gs-defs dd {
2061 + margin: 0;
2062 + font-size: 14px;
2063 + font-weight: 620;
2064 + font-variant-numeric: tabular-nums;
2065 + color: var(--gs-text);
2066 +}
2067 +
2068 +/* ------------------------------------------------------------------
2069 + * 14. Save bar
2070 + * ---------------------------------------------------------------- */
2071 +
2072 +/* Kept in the layout so the slide-in can animate; visibility (rather than
2073 + display) keeps it out of the accessibility tree while it is parked. */
2074 +.gs-savebar {
2075 + position: fixed;
2076 + left: 50%;
2077 + bottom: 28px;
2078 + z-index: 60;
2079 + transform: translate(-50%, 150%);
2080 + transition:
2081 + transform 380ms var(--gs-ease),
2082 + opacity var(--gs-mid),
2083 + visibility 0s linear 380ms;
2084 + opacity: 0;
2085 + visibility: hidden;
2086 +}
2087 +
2088 +.gs-savebar.is-visible {
2089 + transform: translate(-50%, 0);
2090 + opacity: 1;
2091 + visibility: visible;
2092 + transition-delay: 0s;
2093 +}
2094 +
2095 +.gs-savebar__inner {
2096 + display: flex;
2097 + align-items: center;
2098 + gap: 14px;
2099 + padding: 10px 10px 10px 18px;
2100 + border-radius: var(--gs-r-full);
2101 + background: #1a1c30;
2102 + border: 1px solid rgba(255, 255, 255, 0.1);
2103 + box-shadow: var(--gs-shadow-lg);
2104 + color: #fff;
2105 +}
2106 +
2107 +.gs-app[data-gs-theme='dark'] .gs-savebar__inner {
2108 + background: #23263e;
2109 +}
2110 +
2111 +.gs-savebar__dot {
2112 + width: 8px;
2113 + height: 8px;
2114 + border-radius: 50%;
2115 + background: #ffc25c;
2116 + box-shadow: 0 0 0 0 rgba(255, 194, 92, 0.6);
2117 + animation: gs-pulse 2.2s ease-out infinite;
2118 +}
2119 +
2120 +@keyframes gs-pulse {
2121 + 0% {
2122 + box-shadow: 0 0 0 0 rgba(255, 194, 92, 0.6);
2123 + }
2124 +
2125 + 70% {
2126 + box-shadow: 0 0 0 8px rgba(255, 194, 92, 0);
2127 + }
2128 +
2129 + 100% {
2130 + box-shadow: 0 0 0 0 rgba(255, 194, 92, 0);
2131 + }
2132 +}
2133 +
2134 +.gs-savebar__text {
2135 + font-size: 13.5px;
2136 + font-weight: 600;
2137 + white-space: nowrap;
2138 + font-variant-numeric: tabular-nums;
2139 +}
2140 +
2141 +.gs-savebar__actions {
2142 + display: flex;
2143 + align-items: center;
2144 + gap: 6px;
2145 +}
2146 +
2147 +.gs-savebar .gs-btn--ghost {
2148 + color: rgba(255, 255, 255, 0.62);
2149 + height: 36px;
2150 +}
2151 +
2152 +.gs-savebar .gs-btn--ghost:hover {
2153 + background: rgba(255, 255, 255, 0.1);
2154 + color: #fff;
2155 +}
2156 +
2157 +.gs-savebar .gs-btn--primary {
2158 + height: 36px;
2159 +}
2160 +
2161 +/* ------------------------------------------------------------------
2162 + * 15. Toasts
2163 + * ---------------------------------------------------------------- */
2164 +
2165 +.gs-toasts {
2166 + position: fixed;
2167 + right: 24px;
2168 + bottom: 24px;
2169 + z-index: 70;
2170 + display: flex;
2171 + flex-direction: column;
2172 + gap: 8px;
2173 + pointer-events: none;
2174 +}
2175 +
2176 +.gs-toast {
2177 + display: flex;
2178 + align-items: center;
2179 + gap: 10px;
2180 + padding: 11px 16px;
2181 + border-radius: var(--gs-r-full);
2182 + background: var(--gs-surface);
2183 + border: 1px solid var(--gs-line);
2184 + box-shadow: var(--gs-shadow-lg);
2185 + font-size: 13px;
2186 + font-weight: 600;
2187 + color: var(--gs-text);
2188 + pointer-events: auto;
2189 + animation: gs-toast-in 320ms var(--gs-ease);
2190 +}
2191 +
2192 +.gs-toast.is-out {
2193 + animation: gs-toast-out 240ms var(--gs-ease) forwards;
2194 +}
2195 +
2196 +.gs-toast__icon {
2197 + display: grid;
2198 + place-items: center;
2199 + width: 18px;
2200 + height: 18px;
2201 + border-radius: 50%;
2202 + background: var(--gs-ok-soft);
2203 + color: var(--gs-ok);
2204 + flex-shrink: 0;
2205 +}
2206 +
2207 +.gs-toast__icon .gs-icon {
2208 + width: 11px;
2209 + height: 11px;
2210 +}
2211 +
2212 +.gs-toast--error .gs-toast__icon {
2213 + background: var(--gs-danger-soft);
2214 + color: var(--gs-danger);
2215 +}
2216 +
2217 +@keyframes gs-toast-in {
2218 + from {
2219 + opacity: 0;
2220 + transform: translateY(12px) scale(0.96);
2221 + }
2222 +
2223 + to {
2224 + opacity: 1;
2225 + transform: translateY(0) scale(1);
2226 + }
2227 +}
2228 +
2229 +@keyframes gs-toast-out {
2230 + to {
2231 + opacity: 0;
2232 + transform: translateY(6px) scale(0.98);
2233 + }
2234 +}
2235 +
2236 +/* ------------------------------------------------------------------
2237 + * 16. Responsive
2238 + * ---------------------------------------------------------------- */
2239 +
2240 +@media (max-width: 1240px) {
2241 + .gs-cols {
2242 + grid-template-columns: minmax(0, 1fr);
2243 + }
2244 +
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;
2250 + }
2251 +}
2252 +
2253 +@media (max-width: 1100px) {
2254 + .gs-metrics {
2255 + grid-template-columns: repeat(2, minmax(0, 1fr));
2256 + }
2257 +
2258 + .gs-workshop__grid {
2259 + grid-template-columns: repeat(2, minmax(0, 1fr));
2260 + }
2261 +
2262 + .gs-settings {
2263 + grid-template-columns: 1fr;
2264 + }
2265 +
2266 + .gs-sidenav {
2267 + position: static;
2268 + flex-direction: row;
2269 + overflow-x: auto;
2270 + padding-bottom: 4px;
2271 + }
2272 +}
2273 +
2274 +@media (max-width: 782px) {
2275 + .gs-app {
2276 + margin-left: -10px;
2277 + min-height: calc(100vh - 46px);
2278 + }
2279 +
2280 + .gs-bar {
2281 + top: 46px;
2282 + }
2283 +
2284 + /* Stack the three bar tracks: brand and actions share a row, the nav
2285 + runs full width underneath. */
2286 + .gs-bar__inner {
2287 + height: auto;
2288 + min-height: 60px;
2289 + padding: 10px 16px;
2290 + grid-template-columns: minmax(0, 1fr) auto;
2291 + gap: 10px;
2292 + }
2293 +
2294 + .gs-nav {
2295 + order: 3;
2296 + grid-column: 1 / -1;
2297 + }
2298 +
2299 + .gs-shell {
2300 + padding: 0 16px;
2301 + }
2302 +
2303 + .gs-appfoot__inner {
2304 + padding: 16px;
2305 + }
2306 +
2307 + .gs-toolbar {
2308 + position: static;
2309 + margin-top: 0;
2310 + }
2311 +
2312 + .gs-toolbar__actions {
2313 + margin-left: 0;
2314 + width: 100%;
2315 + }
2316 +
2317 + .gs-toolbar__actions .gs-btn {
2318 + flex: 1;
2319 + }
2320 +
2321 + .gs-metrics,
2322 + .gs-steps,
2323 + .gs-workshop__grid,
2324 + .gs-col--side,
2325 + .gs-radio-cards {
2326 + grid-template-columns: 1fr;
2327 + }
2328 +
2329 + .gs-card__head {
2330 + flex-direction: column;
2331 + align-items: stretch;
2332 + }
2333 +
2334 + .gs-search--sm {
2335 + flex: 1 1 auto;
2336 + }
2337 +
2338 + .gs-row__desc {
2339 + white-space: normal;
2340 + }
2341 +
2342 + .gs-field {
2343 + grid-template-columns: 1fr;
2344 + gap: 14px;
2345 + align-items: start;
2346 + }
2347 +
2348 + .gs-savebar {
2349 + left: 16px;
2350 + right: 16px;
2351 + bottom: 16px;
2352 + transform: translateY(150%);
2353 + }
2354 +
2355 + .gs-savebar.is-visible {
2356 + transform: translateY(0);
2357 + }
2358 +
2359 + .gs-savebar__inner {
2360 + justify-content: space-between;
2361 + }
2362 +
2363 + .gs-savebar .gs-kbd {
2364 + display: none;
2365 + }
2366 +
2367 + .gs-toasts {
2368 + left: 16px;
2369 + right: 16px;
2370 + bottom: 84px;
2371 + align-items: center;
2372 + }
2373 +}
2374 +
2375 +/* ------------------------------------------------------------------
2376 + * 17. Motion preferences
2377 + * ---------------------------------------------------------------- */
2378 +
2379 +@media (prefers-reduced-motion: reduce) {
2380 + .gs-app *,
2381 + .gs-app *::before,
2382 + .gs-app *::after {
2383 + animation-duration: 0.01ms !important;
2384 + animation-iteration-count: 1 !important;
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: '';
357 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;
358 2567 top: 0;
359 - left: 0;
360 - right: 0;
361 - bottom: 0;
362 - background-color: #ccc;
363 - transition: 0.3s;
364 - border-radius: 24px;
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;
365 2576 }
366 2577
367 -.toggle-slider:before {
368 - position: absolute;
369 - content: '';
370 - height: 18px;
371 - width: 18px;
372 - left: 3px;
373 - bottom: 3px;
374 - background-color: white;
375 - transition: 0.3s;
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;
376 2639 border-radius: 50%;
2640 + background: var(--gs-ok-soft);
2641 + color: var(--gs-ok);
377 2642 }
378 2643
379 -.toggle-switch input:checked + .toggle-slider {
380 - background-color: #2271b1;
2644 +.gs-compare__yes.is-pro {
2645 + background: var(--gs-brand);
2646 + color: #fff;
381 2647 }
382 2648
383 -.toggle-switch input:checked + .toggle-slider:before {
384 - transform: translateX(24px);
2649 +.gs-compare__yes svg {
2650 + width: 14px;
2651 + height: 14px;
2652 + stroke-width: 3;
385 2653 }
386 2654
387 -.toggle-switch input:disabled + .toggle-slider {
388 - background-color: #e5e5e5;
389 - cursor: not-allowed;
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;
390 2662 }
391 2663
392 -.toggle-switch input:disabled + .toggle-slider:before {
393 - background-color: #f5f5f5;
2664 +.gs-compare__text {
2665 + color: var(--gs-text-2);
2666 + font-weight: 600;
394 2667 }
395 2668
396 -.gutslider-notification {
397 - position: fixed !important;
398 - right: 0;
399 - min-width: 200px;
400 - top: 120px;
401 - padding: 15px;
2669 +.gs-compare__text.is-pro {
2670 + color: var(--gs-brand);
402 2671 }
403 2672
404 -.gutslider-notification button {
405 - padding: 10px;
406 - margin: 0 !important;
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);
407 2681 }
408 2682
409 -/* Responsive Design */
410 -@media (max-width: 768px) {
411 - .gutslider-blocks-grid {
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 {
412 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;
413 2745 }
414 2746 }