@guildofgleks/ui 21.2.4 → 21.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -143,6 +143,19 @@
143
143
  --gog-field-slg-icon-offset: 18px;
144
144
  --gog-field-slg-icon-inset: 52px;
145
145
 
146
+ /* ── Float label geometry (input / textarea / select / multiselect) ─────────
147
+ One scale for every field that can float its label. Each control reads these
148
+ through its own `--gog-<block>-float-label-*` token in the derived layer below,
149
+ so setting a value here retunes all of them at once while a single control can
150
+ still be tuned on its own. `reserve` is the headroom added inside the field for
151
+ the 'in'/'on' variants; `in-top` is where the label lands once floated for 'in';
152
+ `over-gap`/`over-reserve` are the gap above the border and the space permanently
153
+ kept clear for the 'over' variant. */
154
+ --gog-field-float-label-reserve: 14px;
155
+ --gog-field-float-label-in-top: 6px;
156
+ --gog-field-float-label-over-gap: 8px;
157
+ --gog-field-float-label-over-reserve: 1.4em;
158
+
146
159
  /* ── Icon & spinner ───────────────────────────────────────────────────────── */
147
160
  --gog-icon-size: 1.2em;
148
161
  --gog-icon-stroke-width: 2;
@@ -172,28 +185,28 @@
172
185
  color-scheme: light;
173
186
  /* Фоновые и поверхностные тона */
174
187
  --gog-background-color: #f7f3eb; /* Тёплый пергаментный фон страницы */
175
- --gog-surface-color: #ffffff; /* КИСЛО-БЕЛЫЙ ПЕРГАМЕНТ карточек (создает контраст со слоем 1!) */
176
- --gog-hover-color: #f0e7d7; /* Состояние наведения (мягкий воск) */
177
- --gog-border-color: #d8c7ad; /* Состаренная латунная рамка */
188
+ --gog-surface-color: #ffffff; /* КИСЛО-БЕЛЫЙ ПЕРГАМЕНТ карточек (создает контраст со слоем 1!) */
189
+ --gog-hover-color: #f0e7d7; /* Состояние наведения (мягкий воск) */
190
+ --gog-border-color: #d8c7ad; /* Состаренная латунная рамка */
178
191
 
179
192
  /* Типографика (Старинные дубовые чернила) */
180
- --gog-text-color: #17120c; /* Глубокие чернила (высокий контраст WCAG AAA) */
193
+ --gog-text-color: #17120c; /* Глубокие чернила (высокий контраст WCAG AAA) */
181
194
  --gog-accent-text-color: #ffffff;
182
195
  --gog-muted-text-color: #63503c; /* Приглушенные печные чернила */
183
196
 
184
197
  /* Бренд и акценты (Гильдейское Сусальное Золото) */
185
198
  --gog-primary-color: #17120c;
186
- --gog-accent-color: #9e6f00; /* Насыщенный благородный золотисто-бронзовый */
187
- --gog-accent-bright: #c88e00; /* Яркий отблеск золота */
188
- --gog-accent-dim: #735100; /* Темная бронза */
189
- --gog-accent-pale: #f8f1df; /* Светлая подложка под золото */
199
+ --gog-accent-color: #9e6f00; /* Насыщенный благородный золотисто-бронзовый */
200
+ --gog-accent-bright: #c88e00; /* Яркий отблеск золота */
201
+ --gog-accent-dim: #735100; /* Темная бронза */
202
+ --gog-accent-pale: #f8f1df; /* Светлая подложка под золото */
190
203
  --gog-secondary-color: #6b5328;
191
204
 
192
205
  /* Гармонизированная алхимическая семантика */
193
- --gog-success-color: #216e4e; /* Изумруд */
194
- --gog-danger-color: #a7232b; /* Рубин */
195
- --gog-warning-color: #c45100; /* Тёмный янтарь */
196
- --gog-info-color: #2b5c8f; /* Лазурит */
206
+ --gog-success-color: #216e4e; /* Изумруд */
207
+ --gog-danger-color: #a7232b; /* Рубин */
208
+ --gog-warning-color: #c45100; /* Тёмный янтарь */
209
+ --gog-info-color: #2b5c8f; /* Лазурит */
197
210
 
198
211
  /* Объёмная мягкая тень старой кожи */
199
212
  --gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
@@ -206,28 +219,28 @@
206
219
 
207
220
  /* Фоновые и поверхностные тона */
208
221
  --gog-background-color: #f7f3eb; /* Тёплый пергаментный фон страницы */
209
- --gog-surface-color: #ffffff; /* КИСЛО-БЕЛЫЙ ПЕРГАМЕНТ карточек (создает контраст со слоем 1!) */
210
- --gog-hover-color: #f0e7d7; /* Состояние наведения (мягкий воск) */
211
- --gog-border-color: #d8c7ad; /* Состаренная латунная рамка */
222
+ --gog-surface-color: #ffffff; /* КИСЛО-БЕЛЫЙ ПЕРГАМЕНТ карточек (создает контраст со слоем 1!) */
223
+ --gog-hover-color: #f0e7d7; /* Состояние наведения (мягкий воск) */
224
+ --gog-border-color: #d8c7ad; /* Состаренная латунная рамка */
212
225
 
213
226
  /* Типографика (Старинные дубовые чернила) */
214
- --gog-text-color: #17120c; /* Глубокие чернила (высокий контраст WCAG AAA) */
227
+ --gog-text-color: #17120c; /* Глубокие чернила (высокий контраст WCAG AAA) */
215
228
  --gog-accent-text-color: #ffffff;
216
229
  --gog-muted-text-color: #63503c; /* Приглушенные печные чернила */
217
230
 
218
231
  /* Бренд и акценты (Гильдейское Сусальное Золото) */
219
232
  --gog-primary-color: #17120c;
220
- --gog-accent-color: #9e6f00; /* Насыщенный благородный золотисто-бронзовый */
221
- --gog-accent-bright: #c88e00; /* Яркий отблеск золота */
222
- --gog-accent-dim: #735100; /* Темная бронза */
223
- --gog-accent-pale: #f8f1df; /* Светлая подложка под золото */
233
+ --gog-accent-color: #9e6f00; /* Насыщенный благородный золотисто-бронзовый */
234
+ --gog-accent-bright: #c88e00; /* Яркий отблеск золота */
235
+ --gog-accent-dim: #735100; /* Темная бронза */
236
+ --gog-accent-pale: #f8f1df; /* Светлая подложка под золото */
224
237
  --gog-secondary-color: #6b5328;
225
238
 
226
239
  /* Гармонизированная алхимическая семантика */
227
- --gog-success-color: #216e4e; /* Изумруд */
228
- --gog-danger-color: #a7232b; /* Рубин */
229
- --gog-warning-color: #c45100; /* Тёмный янтарь */
230
- --gog-info-color: #2b5c8f; /* Лазурит */
240
+ --gog-success-color: #216e4e; /* Изумруд */
241
+ --gog-danger-color: #a7232b; /* Рубин */
242
+ --gog-warning-color: #c45100; /* Тёмный янтарь */
243
+ --gog-info-color: #2b5c8f; /* Лазурит */
231
244
 
232
245
  /* Объёмная мягкая тень старой кожи */
233
246
  --gog-panel-shadow: 0 4px 20px rgba(23, 18, 12, 0.08), 0 1px 3px rgba(23, 18, 12, 0.04);
@@ -240,28 +253,28 @@
240
253
 
241
254
  /* Фоновые и поверхностные тона */
242
255
  --gog-background-color: #0d0b08; /* Глубокий кузнечный обсидиан */
243
- --gog-surface-color: #16120e; /* Тёмное обожженное железо (карточки) */
244
- --gog-hover-color: #241d17; /* Наведение на элементы */
245
- --gog-border-color: #3d3122; /* Состаренная чеканенная бронза */
256
+ --gog-surface-color: #16120e; /* Тёмное обожженное железо (карточки) */
257
+ --gog-hover-color: #241d17; /* Наведение на элементы */
258
+ --gog-border-color: #3d3122; /* Состаренная чеканенная бронза */
246
259
 
247
260
  /* Типографика (Светящаяся Слоновая Кость) */
248
- --gog-text-color: #f3ebd8; /* Мягкий светящийся пергамент */
261
+ --gog-text-color: #f3ebd8; /* Мягкий светящийся пергамент */
249
262
  --gog-accent-text-color: #0d0b08;
250
263
  --gog-muted-text-color: #9e8d76; /* Приглушенная бронза */
251
264
 
252
265
  /* Бренд и акценты (Светящееся Золото Алхимии) */
253
266
  --gog-primary-color: #f3ebd8;
254
- --gog-accent-color: #fbbf24; /* Плазменный янтарь */
255
- --gog-accent-bright: #fde047; /* Яркий золотой луч */
256
- --gog-accent-dim: #b48310; /* Приглушенное золото */
257
- --gog-accent-pale: #2b210c; /* Тёмный золотой отсвет */
267
+ --gog-accent-color: #fbbf24; /* Плазменный янтарь */
268
+ --gog-accent-bright: #fde047; /* Яркий золотой луч */
269
+ --gog-accent-dim: #b48310; /* Приглушенное золото */
270
+ --gog-accent-pale: #2b210c; /* Тёмный золотой отсвет */
258
271
  --gog-secondary-color: #d4a373;
259
272
 
260
273
  /* Семантика */
261
- --gog-success-color: #34d399; /* Светящийся изумруд */
262
- --gog-danger-color: #f87171; /* Светящийся рубин */
263
- --gog-warning-color: #fbbf24; /* Янтарь */
264
- --gog-info-color: #38bdf8; /* Сапфир */
274
+ --gog-success-color: #34d399; /* Светящийся изумруд */
275
+ --gog-danger-color: #f87171; /* Светящийся рубин */
276
+ --gog-warning-color: #fbbf24; /* Янтарь */
277
+ --gog-info-color: #38bdf8; /* Сапфир */
265
278
 
266
279
  --gog-panel-shadow: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 0 1px var(--gog-border-color);
267
280
  --gog-spinner-overlay-bg: rgba(13, 11, 8, 0.85);
@@ -452,6 +465,101 @@
452
465
  --gog-btn-ghost-hover-shadow: none;
453
466
  --gog-btn-ghost-spinner-color: var(--gog-accent-color);
454
467
 
468
+ /* ── Button toggle group ───────────────────────────────────────────────────
469
+ `--gog-button-toggle-bg`, `-color`, `-padding` and `-font-size` are intentionally NOT
470
+ declared — they are the per-instance escape hatch the size classes fall back through.
471
+ Padding/font-size reuse the `--gog-btn-<size>-*` scale so a toggle group and a
472
+ `<gog-button>` at the same `size` line up in a toolbar. */
473
+ --gog-button-toggle-font-family: var(--gog-font-heading);
474
+ --gog-button-toggle-font-weight: 700;
475
+ --gog-button-toggle-letter-spacing: 0.5px;
476
+ --gog-button-toggle-text-transform: uppercase;
477
+ --gog-button-toggle-line-height: 1;
478
+ --gog-button-toggle-gap: var(--gog-space-sm);
479
+ --gog-button-toggle-icon-size: 1.1em;
480
+ --gog-button-toggle-radius: var(--gog-radius);
481
+ --gog-button-toggle-border-width: var(--gog-control-border-width);
482
+ --gog-button-toggle-border-style: var(--gog-control-border-style);
483
+ --gog-button-toggle-border-color: var(--gog-border-color);
484
+ --gog-button-toggle-rest-bg: transparent;
485
+ --gog-button-toggle-rest-color: var(--gog-text-color);
486
+ --gog-button-toggle-hover-bg: var(--gog-hover-color);
487
+ --gog-button-toggle-hover-color: var(--gog-text-color);
488
+ --gog-button-toggle-selected-bg: var(--gog-accent-color);
489
+ --gog-button-toggle-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
490
+ --gog-button-toggle-selected-border-color: var(--gog-accent-color);
491
+ --gog-button-toggle-separated-gap: var(--gog-space-sm);
492
+ --gog-button-toggle-transition-duration: var(--gog-duration-base);
493
+ --gog-button-toggle-disabled-opacity: var(--gog-disabled-opacity);
494
+ --gog-button-toggle-focus-ring-width: var(--gog-focus-ring-width);
495
+ --gog-button-toggle-focus-ring-offset: 2px;
496
+ --gog-button-toggle-focus-ring-color: var(--gog-accent-color);
497
+
498
+ /* ── Calendar (the month grid inside gog-datepicker, and gog-calendar on its own) ── */
499
+ --gog-calendar-font-family: var(--gog-font-body);
500
+ --gog-calendar-color: var(--gog-text-color);
501
+ --gog-calendar-padding: 12px;
502
+ --gog-calendar-header-gap: 4px;
503
+ --gog-calendar-header-margin: 8px;
504
+ --gog-calendar-months-gap: 16px;
505
+ --gog-calendar-title-color: var(--gog-text-color);
506
+ --gog-calendar-title-font-weight: 700;
507
+ --gog-calendar-nav-size: 28px;
508
+ --gog-calendar-nav-radius: 6px;
509
+ --gog-calendar-nav-bg: transparent;
510
+ --gog-calendar-nav-color: var(--gog-muted-text-color);
511
+ --gog-calendar-nav-hover-bg: var(--gog-hover-color);
512
+ --gog-calendar-nav-hover-color: var(--gog-text-color);
513
+ --gog-calendar-nav-icon-size: 0.8rem;
514
+ /* Pulls the two chevrons of a year step together so they read as one control. */
515
+ --gog-calendar-nav-icon-overlap: -0.35em;
516
+ --gog-calendar-weekday-padding: 4px 0;
517
+ --gog-calendar-weekday-color: var(--gog-muted-text-color);
518
+ --gog-calendar-weekday-font-size: var(--gog-text-xs);
519
+ --gog-calendar-weekday-font-weight: 600;
520
+ --gog-calendar-weekday-text-transform: uppercase;
521
+ --gog-calendar-day-radius: 6px;
522
+ --gog-calendar-day-border-width: 1px;
523
+ --gog-calendar-day-border-style: solid;
524
+ --gog-calendar-day-rest-bg: transparent;
525
+ --gog-calendar-day-rest-color: var(--gog-text-color);
526
+ --gog-calendar-day-hover-bg: var(--gog-hover-color);
527
+ --gog-calendar-day-outside-color: var(--gog-muted-text-color);
528
+ --gog-calendar-today-border-color: var(--gog-accent-color);
529
+ --gog-calendar-today-font-weight: 700;
530
+ --gog-calendar-selected-bg: var(--gog-accent-color);
531
+ --gog-calendar-selected-color: var(--gog-accent-text-color, var(--gog-primary-color));
532
+ --gog-calendar-selected-font-weight: 700;
533
+ /* The wash between the two ends of a range: same hue, low enough to read as a band rather
534
+ than as a second selection. */
535
+ --gog-calendar-range-bg: color-mix(in srgb, var(--gog-accent-color) 16%, transparent);
536
+ --gog-calendar-range-color: var(--gog-text-color);
537
+ --gog-calendar-disabled-opacity: var(--gog-disabled-opacity);
538
+ --gog-calendar-transition-duration: var(--gog-duration-fast);
539
+ --gog-calendar-focus-ring-width: var(--gog-focus-ring-width);
540
+ --gog-calendar-focus-ring-offset: -2px;
541
+ --gog-calendar-focus-ring-color: var(--gog-accent-color);
542
+ --gog-calendar-divider-width: 1px;
543
+ --gog-calendar-divider-style: solid;
544
+ --gog-calendar-divider-color: var(--gog-border-color);
545
+ --gog-calendar-time-gap: 6px;
546
+ --gog-calendar-time-margin: 10px;
547
+ --gog-calendar-time-input-width: 3.5rem;
548
+ --gog-calendar-time-input-padding: 4px 6px;
549
+ --gog-calendar-time-input-bg: var(--gog-background-color);
550
+ --gog-calendar-action-padding: 4px 10px;
551
+ --gog-calendar-footer-gap: 8px;
552
+ --gog-calendar-xsm-font-size: var(--gog-text-xs);
553
+ --gog-calendar-xsm-day-size: 24px;
554
+ --gog-calendar-sm-font-size: var(--gog-text-sm);
555
+ --gog-calendar-sm-day-size: 28px;
556
+ --gog-calendar-md-font-size: var(--gog-text-sm);
557
+ --gog-calendar-md-day-size: 34px;
558
+ --gog-calendar-lg-font-size: var(--gog-text-md);
559
+ --gog-calendar-lg-day-size: 40px;
560
+ --gog-calendar-slg-font-size: var(--gog-text-lg);
561
+ --gog-calendar-slg-day-size: 46px;
562
+
455
563
  /* ── Checkbox ──────────────────────────────────────────────────────────────
456
564
  Box/label/icon size and padding come from the `--gog-control-checkbox-*` scale;
457
565
  checkbox.component.ts maps the `size` input onto the host. */
@@ -476,6 +584,34 @@
476
584
  --gog-checkbox-dash-height: 2px;
477
585
  --gog-checkbox-dash-radius: 999px;
478
586
 
587
+ /* ── Radio group ───────────────────────────────────────────────────────────
588
+ Box/label size reuse the `--gog-control-checkbox-*` scale (see Checkbox above);
589
+ radio-group.component.ts maps the `size` input onto the host the same way. */
590
+ --gog-radio-font-family: var(--gog-font-body);
591
+ --gog-radio-group-gap: 10px;
592
+ --gog-radio-group-label-size: var(--gog-text-sm);
593
+ --gog-radio-group-label-color: var(--gog-muted-text-color);
594
+ --gog-radio-group-option-gap: 8px;
595
+ --gog-radio-group-option-gap-horizontal: 20px;
596
+ --gog-radio-gap: 10px;
597
+ --gog-radio-border-width: var(--gog-control-border-width);
598
+ --gog-radio-border-style: var(--gog-control-border-style);
599
+ --gog-radio-border-color: var(--gog-accent-dim);
600
+ --gog-radio-bg: var(--gog-surface-color);
601
+ --gog-radio-checked-bg: var(--gog-surface-color);
602
+ --gog-radio-checked-border: var(--gog-accent-color);
603
+ --gog-radio-dot-color: var(--gog-accent-color);
604
+ --gog-radio-dot-size-ratio: 0.45;
605
+ --gog-radio-label-color: var(--gog-muted-text-color);
606
+ --gog-radio-label-line-height: 1.3;
607
+ --gog-radio-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
608
+ --gog-radio-focus-ring-width: var(--gog-focus-ring-width);
609
+ --gog-radio-focus-ring-offset: var(--gog-focus-ring-offset);
610
+ --gog-radio-disabled-opacity: var(--gog-disabled-opacity);
611
+ --gog-radio-transition-duration: var(--gog-duration-base);
612
+ --gog-radio-error-font-size: var(--gog-text-xs);
613
+ --gog-radio-error-color: var(--gog-danger-color);
614
+
479
615
  /* ── Chip ──────────────────────────────────────────────────────────────────
480
616
  `--gog-chip-*` size tokens below are the per-size scale; the unsuffixed
481
617
  `--gog-chip-font-size`/`-padding-*`/`-gap`/`-avatar-size`/`-icon-size`/
@@ -583,6 +719,185 @@
583
719
  --gog-confirm-actions-gap: var(--gog-space-sm);
584
720
  --gog-confirm-actions-offset: var(--gog-space-sm);
585
721
 
722
+ /* ── Autocomplete ──────────────────────────────────────────────────────────
723
+ A combobox whose trigger is a real text input. Padding/font-size reuse the shared
724
+ `--gog-field-<size>-*` scale, so it lines up with `gog-inputfield` and `gog-select` in a
725
+ form. `--gog-autocomplete-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
726
+ intentionally NOT declared — they are the per-instance escape hatch the size classes fall
727
+ back through. */
728
+ --gog-autocomplete-font-family: var(--gog-font-body);
729
+ --gog-autocomplete-label-font-family: var(--gog-font-heading);
730
+ --gog-autocomplete-gap: 4px;
731
+ --gog-autocomplete-label-color: var(--gog-accent-color);
732
+ --gog-autocomplete-label-font-size: var(--gog-text-sm);
733
+ --gog-autocomplete-label-font-weight: 600;
734
+ --gog-autocomplete-label-letter-spacing: 1px;
735
+ --gog-autocomplete-label-text-transform: uppercase;
736
+ --gog-autocomplete-field-bg: var(--gog-surface-color);
737
+ --gog-autocomplete-text-color: var(--gog-text-color);
738
+ --gog-autocomplete-placeholder-color: var(--gog-muted-text-color);
739
+ --gog-autocomplete-border-width: var(--gog-control-border-width);
740
+ --gog-autocomplete-border-style: var(--gog-control-border-style);
741
+ --gog-autocomplete-border-color: var(--gog-accent-dim);
742
+ --gog-autocomplete-hover-border-color: var(--gog-accent-color);
743
+ --gog-autocomplete-radius: var(--gog-radius);
744
+ --gog-autocomplete-line-height: 1.4;
745
+ --gog-autocomplete-transition-duration: var(--gog-duration-base);
746
+ --gog-autocomplete-disabled-opacity: var(--gog-disabled-opacity);
747
+ --gog-autocomplete-focus-ring-width: var(--gog-focus-ring-width);
748
+ --gog-autocomplete-focus-ring-offset: var(--gog-focus-ring-offset);
749
+ --gog-autocomplete-focus-ring-color: var(--gog-accent-color);
750
+ --gog-autocomplete-error-color: var(--gog-danger-color);
751
+ --gog-autocomplete-error-border-color: var(--gog-danger-color);
752
+ --gog-autocomplete-error-font-family: var(--gog-font-body);
753
+ --gog-autocomplete-error-font-size: var(--gog-text-xs);
754
+ /* Floor for an auto-width field, so [fullWidth]="false" cannot collapse it to its chrome. */
755
+ --gog-autocomplete-min-width: 120px;
756
+ /* Trailing chrome: spinner and clear button, clear outermost — the arrangement the other
757
+ dropdowns settled on, so all of them line up in a form. */
758
+ --gog-autocomplete-actions-inset: var(--gog-control-icon-offset);
759
+ --gog-autocomplete-actions-gap: 6px;
760
+ /* Right padding on the input, reserving room for the actions above. */
761
+ --gog-autocomplete-actions-reserve: 40px;
762
+ --gog-autocomplete-clear-color: var(--gog-autocomplete-placeholder-color);
763
+ --gog-autocomplete-clear-hover-color: var(--gog-autocomplete-label-color);
764
+ --gog-autocomplete-clear-icon-ratio: 0.7;
765
+ --gog-autocomplete-spinner-size: 0.875rem;
766
+ /* Panel */
767
+ --gog-autocomplete-panel-bg: var(--gog-surface-color);
768
+ --gog-autocomplete-panel-shadow: var(--gog-panel-shadow);
769
+ --gog-autocomplete-panel-border-width: var(--gog-panel-border-width);
770
+ --gog-autocomplete-panel-border-style: var(--gog-panel-border-style);
771
+ --gog-autocomplete-panel-border-color: var(--gog-border-color);
772
+ --gog-autocomplete-panel-radius: var(--gog-radius);
773
+ --gog-autocomplete-panel-gap: 2px;
774
+ --gog-autocomplete-panel-max-height: 260px;
775
+ /* Ceiling for a content-sized panel, so one very long option cannot span the viewport. */
776
+ --gog-autocomplete-panel-max-width: 420px;
777
+ --gog-autocomplete-options-padding: 4px;
778
+ --gog-autocomplete-option-padding: 8px 10px;
779
+ --gog-autocomplete-option-radius: 4px;
780
+ --gog-autocomplete-option-gap: 10px;
781
+ --gog-autocomplete-option-color: var(--gog-text-color);
782
+ --gog-autocomplete-option-hover-bg: color-mix(in srgb, var(--gog-accent-color) 10%, transparent);
783
+ --gog-autocomplete-option-hover-color: var(--gog-text-color);
784
+ --gog-autocomplete-option-selected-bg: color-mix(
785
+ in srgb,
786
+ var(--gog-accent-color) 16%,
787
+ transparent
788
+ );
789
+ --gog-autocomplete-option-selected-color: var(--gog-accent-color);
790
+ /* Estimated row height fed into the panel's up/down placement math; not itself a real
791
+ layout property, so it has no effect unless the JS reads it. */
792
+ --gog-autocomplete-option-height: 36px;
793
+ --gog-autocomplete-empty-color: var(--gog-autocomplete-placeholder-color);
794
+ --gog-autocomplete-empty-font-size: var(--gog-text-sm);
795
+ --gog-autocomplete-float-label-reserve: var(--gog-field-float-label-reserve);
796
+ --gog-autocomplete-float-label-in-top: var(--gog-field-float-label-in-top);
797
+ --gog-autocomplete-float-label-over-gap: var(--gog-field-float-label-over-gap);
798
+ --gog-autocomplete-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
799
+
800
+ /* ── Badge (the `gogBadge` directive; its classes live in utilities.css) ───── */
801
+ --gog-badge-font-family: var(--gog-font-body);
802
+ --gog-badge-font-size: var(--gog-text-xs);
803
+ --gog-badge-font-weight: 600;
804
+ --gog-badge-line-height: 1;
805
+ /* Min-width *and* height: a one-digit badge stays a circle, a three-digit one grows
806
+ sideways only. */
807
+ --gog-badge-size: 1.25rem;
808
+ --gog-badge-dot-size: 0.5rem;
809
+ --gog-badge-padding-inline: 5px;
810
+ --gog-badge-radius: 999px;
811
+ /* How far the badge hangs outside its host's corner. */
812
+ --gog-badge-offset: 6px;
813
+ --gog-badge-border-width: 0;
814
+ --gog-badge-border-style: solid;
815
+ --gog-badge-border-color: transparent;
816
+ /* Above the host's own chrome but below any overlay panel (--gog-dropdown-z is 300). */
817
+ --gog-badge-z: 1;
818
+ /* `--gog-accent-text-color` is the palette's "text on a filled surface" colour and flips
819
+ with the theme, which is why a red badge reads white on light and near-black on dark. */
820
+ --gog-badge-success-bg: var(--gog-success-color);
821
+ --gog-badge-success-color: var(--gog-accent-text-color, var(--gog-primary-color));
822
+ --gog-badge-danger-bg: var(--gog-danger-color);
823
+ --gog-badge-danger-color: var(--gog-accent-text-color, var(--gog-primary-color));
824
+ --gog-badge-warning-bg: var(--gog-warning-color);
825
+ --gog-badge-warning-color: var(--gog-accent-text-color, var(--gog-primary-color));
826
+ --gog-badge-info-bg: var(--gog-info-color);
827
+ --gog-badge-info-color: var(--gog-accent-text-color, var(--gog-primary-color));
828
+
829
+ /* ── Datepicker (the field; the grid inside it is themed by --gog-calendar-*) ───
830
+ `--gog-datepicker-bg`, `-color`, `-font-size`, `-padding-x` and `-padding-y` are
831
+ intentionally NOT declared — they are the per-instance escape hatch the size classes fall
832
+ back through. */
833
+ --gog-datepicker-font-family: var(--gog-font-body);
834
+ --gog-datepicker-label-font-family: var(--gog-font-heading);
835
+ --gog-datepicker-gap: 4px;
836
+ --gog-datepicker-label-color: var(--gog-accent-color);
837
+ --gog-datepicker-label-font-size: var(--gog-text-sm);
838
+ --gog-datepicker-label-letter-spacing: 1px;
839
+ --gog-datepicker-label-text-transform: uppercase;
840
+ --gog-datepicker-field-bg: var(--gog-surface-color);
841
+ --gog-datepicker-text-color: var(--gog-text-color);
842
+ --gog-datepicker-placeholder-color: var(--gog-muted-text-color);
843
+ --gog-datepicker-border-width: var(--gog-control-border-width);
844
+ --gog-datepicker-border-style: var(--gog-control-border-style);
845
+ --gog-datepicker-border-color: var(--gog-accent-dim);
846
+ --gog-datepicker-hover-border-color: var(--gog-accent-color);
847
+ --gog-datepicker-radius: var(--gog-radius);
848
+ --gog-datepicker-line-height: 1.4;
849
+ --gog-datepicker-transition-duration: var(--gog-duration-base);
850
+ --gog-datepicker-disabled-opacity: var(--gog-disabled-opacity);
851
+ --gog-datepicker-focus-ring-width: var(--gog-focus-ring-width);
852
+ --gog-datepicker-focus-ring-offset: var(--gog-focus-ring-offset);
853
+ --gog-datepicker-focus-ring-color: var(--gog-accent-color);
854
+ --gog-datepicker-error-color: var(--gog-danger-color);
855
+ --gog-datepicker-error-border-color: var(--gog-danger-color);
856
+ --gog-datepicker-error-font-family: var(--gog-font-body);
857
+ --gog-datepicker-error-font-size: var(--gog-text-xs);
858
+ --gog-datepicker-min-width: 150px;
859
+ --gog-datepicker-actions-inset: var(--gog-control-icon-offset);
860
+ --gog-datepicker-actions-gap: 6px;
861
+ /* Right padding on the input, reserving room for the calendar and clear buttons. */
862
+ --gog-datepicker-actions-reserve: 40px;
863
+ --gog-datepicker-icon-color: var(--gog-accent-color);
864
+ --gog-datepicker-icon-hover-color: var(--gog-accent-bright);
865
+ --gog-datepicker-toggle-icon-size: 1rem;
866
+ --gog-datepicker-clear-color: var(--gog-datepicker-placeholder-color);
867
+ --gog-datepicker-clear-icon-ratio: 0.7;
868
+ --gog-datepicker-panel-bg: var(--gog-surface-color);
869
+ --gog-datepicker-panel-shadow: var(--gog-panel-shadow);
870
+ --gog-datepicker-panel-border-width: var(--gog-panel-border-width);
871
+ --gog-datepicker-panel-border-style: var(--gog-panel-border-style);
872
+ --gog-datepicker-panel-border-color: var(--gog-border-color);
873
+ --gog-datepicker-panel-radius: var(--gog-radius);
874
+ --gog-datepicker-panel-gap: 2px;
875
+ --gog-datepicker-float-label-reserve: var(--gog-field-float-label-reserve);
876
+ --gog-datepicker-float-label-in-top: var(--gog-field-float-label-in-top);
877
+ --gog-datepicker-float-label-over-gap: var(--gog-field-float-label-over-gap);
878
+ --gog-datepicker-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
879
+
880
+ /* ── Divider ───────────────────────────────────────────────────────────────── */
881
+ --gog-divider-line-color: var(--gog-border-color);
882
+ --gog-divider-line-thickness: 1px;
883
+ /* The variant classes map onto these, so a theme can decide what "dashed" looks like
884
+ rather than the value being frozen into the component's stylesheet. */
885
+ --gog-divider-solid-style: solid;
886
+ --gog-divider-dashed-style: dashed;
887
+ --gog-divider-dotted-style: dotted;
888
+ --gog-divider-block-spacing: var(--gog-space-md);
889
+ --gog-divider-inline-spacing: var(--gog-space-md);
890
+ --gog-divider-inset-size: var(--gog-space-lg);
891
+ /* Floor for a vertical divider with nothing to stretch to — e.g. between two inline
892
+ buttons. In a flex/grid row it stretches to the row instead. */
893
+ --gog-divider-vertical-length: 1.5em;
894
+ --gog-divider-label-gap: var(--gog-space-sm);
895
+ --gog-divider-label-color: var(--gog-muted-text-color);
896
+ --gog-divider-label-font-family: var(--gog-font-body);
897
+ --gog-divider-label-font-size: var(--gog-text-sm);
898
+ --gog-divider-label-font-weight: 500;
899
+ --gog-divider-label-line-height: 1.4;
900
+
586
901
  /* ── Icon ──────────────────────────────────────────────────────────────────── */
587
902
  --gog-icon-fallback-size: 1em;
588
903
 
@@ -613,66 +928,196 @@
613
928
  --gog-input-icon-hover-color: var(--gog-accent-color);
614
929
  --gog-input-icon-action-radius: 4px;
615
930
  --gog-input-icon-focus-ring-width: 2px;
931
+ /* Number field's spin buttons — a subtle fill on hover, since they sit flush against the
932
+ field's own border rather than floating with their own padding like the other icons. */
933
+ --gog-input-spin-hover-bg: color-mix(in srgb, var(--gog-input-icon-hover-color) 12%, transparent);
616
934
  --gog-input-disabled-opacity: var(--gog-disabled-opacity);
617
935
  --gog-input-transition-duration: var(--gog-duration-base);
618
-
619
- /* ── Multiselect ───────────────────────────────────────────────────────────── */
936
+ /* Float label — also used by gog-textarea, which shares the --gog-input-* block. */
937
+ /* Clear button only rendered once the field has text, see `clearable`. */
938
+ --gog-input-clear-radius: 2px;
939
+ --gog-input-clear-icon-ratio: 0.7;
940
+ /*
941
+ The textarea's clear button gets a full-size glyph. The 0.7 ratio above suits the dense
942
+ single-line trigger of a dropdown; on a large multi-line box it reads as a speck.
943
+ */
944
+ --gog-textarea-clear-icon-ratio: 1;
945
+ /* Custom resize grip — see the `::-webkit-resizer` comment in textarea.component.scss for
946
+ why this replaces rather than restyles the native glyph. Colour follows the field's own
947
+ border by default, not a fixed muted grey, so it reads as part of the field rather than a
948
+ mismatched accent. */
949
+ --gog-textarea-resize-grip-size: 11px;
950
+ --gog-textarea-resize-grip-color: var(--gog-input-field-border);
951
+ --gog-textarea-resize-grip-opacity: 0.8;
952
+ --gog-textarea-resize-grip-stripe-width: 1.5px;
953
+ --gog-textarea-resize-grip-stripe-gap: 3px;
954
+ --gog-input-clear-inset: 8px;
955
+ --gog-input-float-label-reserve: var(--gog-field-float-label-reserve);
956
+ --gog-input-float-label-in-top: var(--gog-field-float-label-in-top);
957
+ --gog-input-float-label-over-gap: var(--gog-field-float-label-over-gap);
958
+ --gog-input-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
959
+
960
+ /* ── Multiselect ─────────────────────────────────────────────────────────────
961
+ Each token is declared twice on purpose: the `--gog-ms-*` name is the pre-21.3.0
962
+ spelling and stays the *declared* one so an existing override of it still feeds the
963
+ component, while `--gog-multiselect-*` — what the stylesheet actually reads — derives
964
+ from it. Overriding either name works for the whole 21.3.0/21.4.0 window.
965
+ @deprecated since 21.3.0 (2026-08-07) — use `--gog-multiselect-*`. Removed in 21.5.0. */
620
966
  --gog-ms-font-family: var(--gog-font-body);
967
+ --gog-multiselect-font-family: var(--gog-ms-font-family);
621
968
  --gog-ms-label-font-family: var(--gog-font-heading);
969
+ --gog-multiselect-label-font-family: var(--gog-ms-label-font-family);
622
970
  --gog-ms-gap: 4px;
971
+ --gog-multiselect-gap: var(--gog-ms-gap);
623
972
  --gog-ms-option-gap: 4px;
973
+ --gog-multiselect-option-gap: var(--gog-ms-option-gap);
624
974
  --gog-ms-options-padding: 4px;
975
+ --gog-multiselect-options-padding: var(--gog-ms-options-padding);
625
976
  --gog-ms-label-color: var(--gog-accent-color);
977
+ --gog-multiselect-label-color: var(--gog-ms-label-color);
626
978
  --gog-ms-label-font-size: var(--gog-text-sm);
979
+ --gog-multiselect-label-font-size: var(--gog-ms-label-font-size);
627
980
  --gog-ms-label-letter-spacing: 1px;
981
+ --gog-multiselect-label-letter-spacing: var(--gog-ms-label-letter-spacing);
628
982
  --gog-ms-label-text-transform: uppercase;
983
+ --gog-multiselect-label-text-transform: var(--gog-ms-label-text-transform);
629
984
  --gog-ms-field-bg: var(--gog-surface-color);
985
+ --gog-multiselect-field-bg: var(--gog-ms-field-bg);
630
986
  --gog-ms-field-border: var(--gog-accent-dim);
987
+ --gog-multiselect-field-border: var(--gog-ms-field-border);
631
988
  --gog-ms-field-border-width: var(--gog-control-border-width);
989
+ --gog-multiselect-field-border-width: var(--gog-ms-field-border-width);
632
990
  --gog-ms-field-border-style: var(--gog-control-border-style);
991
+ --gog-multiselect-field-border-style: var(--gog-ms-field-border-style);
633
992
  --gog-ms-radius: var(--gog-radius);
993
+ --gog-multiselect-radius: var(--gog-ms-radius);
634
994
  --gog-ms-field-color: var(--gog-text-color);
995
+ --gog-multiselect-field-color: var(--gog-ms-field-color);
635
996
  --gog-ms-value-color: var(--gog-text-color);
997
+ --gog-multiselect-value-color: var(--gog-ms-value-color);
636
998
  --gog-ms-placeholder-color: var(--gog-muted-text-color);
999
+ --gog-multiselect-placeholder-color: var(--gog-ms-placeholder-color);
637
1000
  --gog-ms-focus-border: var(--gog-accent-color);
1001
+ --gog-multiselect-focus-border: var(--gog-ms-focus-border);
638
1002
  --gog-ms-focus-ring: color-mix(in srgb, var(--gog-accent-color) 25%, transparent);
1003
+ --gog-multiselect-focus-ring: var(--gog-ms-focus-ring);
639
1004
  --gog-ms-focus-glow: 0 0 8px var(--gog-ms-focus-ring);
1005
+ --gog-multiselect-focus-glow: var(--gog-ms-focus-glow);
640
1006
  --gog-ms-focus-ring-width: var(--gog-focus-ring-width);
1007
+ --gog-multiselect-focus-ring-width: var(--gog-ms-focus-ring-width);
641
1008
  --gog-ms-focus-ring-offset: var(--gog-focus-ring-offset);
1009
+ --gog-multiselect-focus-ring-offset: var(--gog-ms-focus-ring-offset);
642
1010
  --gog-ms-error-color: var(--gog-danger-color);
1011
+ --gog-multiselect-error-color: var(--gog-ms-error-color);
643
1012
  --gog-ms-error-font-size: var(--gog-text-xs);
1013
+ --gog-multiselect-error-font-size: var(--gog-ms-error-font-size);
644
1014
  --gog-ms-error-offset: 2px;
1015
+ --gog-multiselect-error-offset: var(--gog-ms-error-offset);
645
1016
  --gog-ms-border-color: var(--gog-accent-color);
1017
+ --gog-multiselect-border-color: var(--gog-ms-border-color);
646
1018
  --gog-ms-panel-bg: var(--gog-surface-color);
1019
+ --gog-multiselect-panel-bg: var(--gog-ms-panel-bg);
647
1020
  --gog-ms-panel-border: var(--gog-accent-color);
1021
+ --gog-multiselect-panel-border: var(--gog-ms-panel-border);
648
1022
  --gog-ms-panel-shadow: var(--gog-panel-shadow);
1023
+ --gog-multiselect-panel-shadow: var(--gog-ms-panel-shadow);
649
1024
  --gog-ms-panel-max-height: 260px;
1025
+ --gog-multiselect-panel-max-height: var(--gog-ms-panel-max-height);
650
1026
  --gog-ms-panel-offset: 2px;
1027
+ --gog-multiselect-panel-offset: var(--gog-ms-panel-offset);
651
1028
  --gog-ms-option-hover-bg: color-mix(in srgb, var(--gog-accent-color) 10%, transparent);
1029
+ --gog-multiselect-option-hover-bg: var(--gog-ms-option-hover-bg);
652
1030
  --gog-ms-option-color: var(--gog-text-color);
1031
+ --gog-multiselect-option-color: var(--gog-ms-option-color);
653
1032
  --gog-ms-option-gap-inline: 10px;
1033
+ --gog-multiselect-option-gap-inline: var(--gog-ms-option-gap-inline);
654
1034
  /* Estimated row height fed into the panel's up/down placement math; not itself a real
655
1035
  layout property, so it has no effect unless the JS reads it. */
656
1036
  --gog-ms-option-height: 40px;
1037
+ --gog-multiselect-option-height: var(--gog-ms-option-height);
657
1038
  --gog-ms-option-radius: calc(var(--gog-radius) - 2px);
1039
+ --gog-multiselect-option-radius: var(--gog-ms-option-radius);
658
1040
  --gog-ms-option-disabled-opacity: 0.5;
1041
+ --gog-multiselect-option-disabled-opacity: var(--gog-ms-option-disabled-opacity);
659
1042
  --gog-ms-option-transition-duration: var(--gog-duration-fast);
1043
+ --gog-multiselect-option-transition-duration: var(--gog-ms-option-transition-duration);
660
1044
  --gog-ms-checkbox-border: var(--gog-accent-dim);
1045
+ --gog-multiselect-checkbox-border: var(--gog-ms-checkbox-border);
661
1046
  --gog-ms-checkbox-bg: var(--gog-background-color);
1047
+ --gog-multiselect-checkbox-bg: var(--gog-ms-checkbox-bg);
662
1048
  --gog-ms-checkbox-checked-bg: var(--gog-accent-color);
1049
+ --gog-multiselect-checkbox-checked-bg: var(--gog-ms-checkbox-checked-bg);
663
1050
  --gog-ms-checkbox-checked-color: var(--gog-primary-color);
1051
+ --gog-multiselect-checkbox-checked-color: var(--gog-ms-checkbox-checked-color);
664
1052
  --gog-ms-controls-gap: 4px;
1053
+ --gog-multiselect-controls-gap: var(--gog-ms-controls-gap);
665
1054
  --gog-ms-controls-padding: 6px 10px;
1055
+ --gog-multiselect-controls-padding: var(--gog-ms-controls-padding);
666
1056
  --gog-ms-actions-gap: 6px;
1057
+ --gog-multiselect-actions-gap: var(--gog-ms-actions-gap);
1058
+ --gog-ms-filter-padding: 6px;
1059
+ --gog-multiselect-filter-padding: var(--gog-ms-filter-padding);
1060
+ --gog-ms-filter-input-padding-y: 6px;
1061
+ --gog-multiselect-filter-input-padding-y: var(--gog-ms-filter-input-padding-y);
1062
+ --gog-ms-filter-input-padding-x: 8px;
1063
+ --gog-multiselect-filter-input-padding-x: var(--gog-ms-filter-input-padding-x);
1064
+ --gog-ms-filter-input-bg: var(--gog-background-color);
1065
+ --gog-multiselect-filter-input-bg: var(--gog-ms-filter-input-bg);
1066
+ --gog-ms-filter-input-color: var(--gog-multiselect-control-color);
1067
+ --gog-multiselect-filter-input-color: var(--gog-ms-filter-input-color);
1068
+ --gog-ms-filter-input-border: var(--gog-multiselect-control-border);
1069
+ --gog-multiselect-filter-input-border: var(--gog-ms-filter-input-border);
1070
+ --gog-ms-filter-input-radius: var(--gog-radius);
1071
+ --gog-multiselect-filter-input-radius: var(--gog-ms-filter-input-radius);
1072
+ --gog-ms-filter-border-width: var(--gog-panel-border-width);
1073
+ --gog-multiselect-filter-border-width: var(--gog-ms-filter-border-width);
1074
+ --gog-ms-filter-border-style: var(--gog-panel-border-style);
1075
+ --gog-multiselect-filter-border-style: var(--gog-ms-filter-border-style);
1076
+ --gog-ms-filter-border-color: var(--gog-border-color);
1077
+ --gog-multiselect-filter-border-color: var(--gog-ms-filter-border-color);
1078
+ --gog-ms-filter-empty-padding: 10px;
1079
+ --gog-multiselect-filter-empty-padding: var(--gog-ms-filter-empty-padding);
1080
+ --gog-ms-filter-empty-color: var(--gog-multiselect-placeholder-color);
1081
+ --gog-multiselect-filter-empty-color: var(--gog-ms-filter-empty-color);
1082
+ /* Matches --gog-select-chevron-inset; see the note there. */
1083
+ /* "+N" badge shown when the selection does not fit on one line. */
1084
+ --gog-ms-overflow-color: var(--gog-multiselect-placeholder-color);
1085
+ --gog-multiselect-overflow-color: var(--gog-ms-overflow-color);
1086
+ --gog-ms-overflow-font-size: var(--gog-text-sm);
1087
+ --gog-multiselect-overflow-font-size: var(--gog-ms-overflow-font-size);
1088
+ --gog-ms-overflow-gap: 6px;
1089
+ --gog-multiselect-overflow-gap: var(--gog-ms-overflow-gap);
1090
+ --gog-ms-min-width: 120px;
1091
+ --gog-multiselect-min-width: var(--gog-ms-min-width);
1092
+ --gog-ms-panel-max-width: 420px;
1093
+ --gog-multiselect-panel-max-width: var(--gog-ms-panel-max-width);
1094
+ --gog-ms-actions-inset: var(--gog-control-icon-offset);
1095
+ --gog-multiselect-actions-inset: var(--gog-ms-actions-inset);
667
1096
  --gog-ms-clear-radius: 2px;
1097
+ --gog-multiselect-clear-radius: var(--gog-ms-clear-radius);
668
1098
  --gog-ms-disabled-opacity: var(--gog-disabled-opacity);
1099
+ --gog-multiselect-disabled-opacity: var(--gog-ms-disabled-opacity);
669
1100
  --gog-ms-transition-duration: var(--gog-duration-base);
1101
+ --gog-multiselect-transition-duration: var(--gog-ms-transition-duration);
1102
+ --gog-ms-float-label-reserve: var(--gog-field-float-label-reserve);
1103
+ --gog-multiselect-float-label-reserve: var(--gog-ms-float-label-reserve);
1104
+ --gog-ms-float-label-in-top: var(--gog-field-float-label-in-top);
1105
+ --gog-multiselect-float-label-in-top: var(--gog-ms-float-label-in-top);
1106
+ --gog-ms-float-label-over-gap: var(--gog-field-float-label-over-gap);
1107
+ --gog-multiselect-float-label-over-gap: var(--gog-ms-float-label-over-gap);
1108
+ --gog-ms-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
1109
+ --gog-multiselect-float-label-over-reserve: var(--gog-ms-float-label-over-reserve);
670
1110
  --gog-ms-arrow-transition-duration: var(--gog-duration-slow);
1111
+ --gog-multiselect-arrow-transition-duration: var(--gog-ms-arrow-transition-duration);
671
1112
  /* Icon geometry, expressed as a ratio of the control's font size. */
672
1113
  --gog-ms-clear-icon-ratio: 0.7;
1114
+ --gog-multiselect-clear-icon-ratio: var(--gog-ms-clear-icon-ratio);
673
1115
  --gog-ms-arrow-icon-ratio: 0.875;
1116
+ --gog-multiselect-arrow-icon-ratio: var(--gog-ms-arrow-icon-ratio);
674
1117
  --gog-ms-mark-size-ratio: 1.2375;
1118
+ --gog-multiselect-mark-size-ratio: var(--gog-ms-mark-size-ratio);
675
1119
  --gog-ms-mark-icon-ratio: 1.125;
1120
+ --gog-multiselect-mark-icon-ratio: var(--gog-ms-mark-icon-ratio);
676
1121
 
677
1122
  /* ── Paginator ─────────────────────────────────────────────────────────────── */
678
1123
  --gog-paginator-gap: 4px;
@@ -681,6 +1126,50 @@
681
1126
  --gog-paginator-ellipsis-font-family: var(--gog-font-body);
682
1127
  --gog-paginator-ellipsis-min-width: 32px;
683
1128
 
1129
+ /* ── Progressbar ──────────────────────────────────────────────────────────── */
1130
+ --gog-progressbar-track-base-bg: color-mix(
1131
+ in srgb,
1132
+ var(--gog-text-color) 20%,
1133
+ var(--gog-border-color)
1134
+ );
1135
+ --gog-progressbar-radius: 999px;
1136
+ --gog-progressbar-transition-duration: var(--gog-duration-slow);
1137
+ --gog-progressbar-xsm-height: 2px;
1138
+ --gog-progressbar-sm-height: 4px;
1139
+ --gog-progressbar-md-height: 6px;
1140
+ --gog-progressbar-lg-height: 10px;
1141
+ --gog-progressbar-slg-height: 14px;
1142
+ --gog-progressbar-value-gap: var(--gog-space-sm);
1143
+ --gog-progressbar-value-min-width: 3ch;
1144
+ --gog-progressbar-value-color: var(--gog-muted-text-color);
1145
+ --gog-progressbar-value-font-family: var(--gog-font-body);
1146
+ --gog-progressbar-value-font-size: var(--gog-text-sm);
1147
+ --gog-progressbar-indeterminate-duration: 1.6s;
1148
+ --gog-progressbar-indeterminate-easing: cubic-bezier(0.65, 0.05, 0.36, 1);
1149
+ /* The reduced-motion stand-in for the indeterminate animation. */
1150
+ --gog-progressbar-stripe-size: 6px;
1151
+ --gog-progressbar-stripe-color: color-mix(in srgb, var(--gog-surface-color) 45%, transparent);
1152
+ /* The buffer tier is the same hue at low opacity, so it reads as "ahead of the fill"
1153
+ rather than as a second, competing colour. */
1154
+ --gog-progressbar-accent-bg: var(--gog-accent-color);
1155
+ --gog-progressbar-accent-buffer-bg: color-mix(in srgb, var(--gog-accent-color) 35%, transparent);
1156
+ --gog-progressbar-success-bg: var(--gog-success-color);
1157
+ --gog-progressbar-success-buffer-bg: color-mix(
1158
+ in srgb,
1159
+ var(--gog-success-color) 35%,
1160
+ transparent
1161
+ );
1162
+ --gog-progressbar-danger-bg: var(--gog-danger-color);
1163
+ --gog-progressbar-danger-buffer-bg: color-mix(in srgb, var(--gog-danger-color) 35%, transparent);
1164
+ --gog-progressbar-warning-bg: var(--gog-warning-color);
1165
+ --gog-progressbar-warning-buffer-bg: color-mix(
1166
+ in srgb,
1167
+ var(--gog-warning-color) 35%,
1168
+ transparent
1169
+ );
1170
+ --gog-progressbar-info-bg: var(--gog-info-color);
1171
+ --gog-progressbar-info-buffer-bg: color-mix(in srgb, var(--gog-info-color) 35%, transparent);
1172
+
684
1173
  /* ── Scroll ────────────────────────────────────────────────────────────────── */
685
1174
  --gog-scroll-track-bg: transparent;
686
1175
  --gog-scroll-track-radius: var(--gog-radius);
@@ -700,6 +1189,12 @@
700
1189
  --gog-scroll-thin-track-width: 6px;
701
1190
  --gog-scroll-normal-thumb-min-size: 32px;
702
1191
  --gog-scroll-thin-thumb-min-size: 24px;
1192
+ /* Invisible pointer-target padding around the thumb (see .gog-scroll__thumb::before) — the
1193
+ `thin` variant gets more of it since its 6px track leaves the least visible thumb to aim
1194
+ at; both land the effective hit width in the ~22-24px range generally recommended for a
1195
+ comfortable pointer target. */
1196
+ --gog-scroll-normal-thumb-hit-padding: 6px;
1197
+ --gog-scroll-thin-thumb-hit-padding: 9px;
703
1198
 
704
1199
  /* ── Select ────────────────────────────────────────────────────────────────── */
705
1200
  --gog-select-font-family: var(--gog-font-body);
@@ -724,7 +1219,37 @@
724
1219
  --gog-select-error-color: var(--gog-danger-color);
725
1220
  --gog-select-error-font-size: var(--gog-text-xs);
726
1221
  --gog-select-chevron-color: var(--gog-accent-color);
727
- --gog-select-chevron-inset: 40px;
1222
+ /*
1223
+ Distance from the trigger's right edge to the trailing chrome, matching the leading icon
1224
+ inset on gog-inputfield so a select, a multiselect and an input line up in one form. It is
1225
+ applied as the trigger's `padding-right`, and the chevron sits inside that padding — so this
1226
+ is the gap itself, not the gap plus the chevron. It used to be 40px, which double-counted
1227
+ and put the chevron 42px from the edge.
1228
+ */
1229
+ --gog-select-chevron-inset: var(--gog-control-icon-offset);
1230
+ /* Floor for an auto-width trigger, so [fullWidth]="false" cannot collapse it to the chevron. */
1231
+ --gog-select-min-width: 120px;
1232
+ /* Ceiling for a content-sized panel, so one very long option cannot span the viewport. */
1233
+ --gog-select-panel-max-width: 420px;
1234
+ /* Filter box — only rendered when `filter` is on. */
1235
+ --gog-select-filter-padding: 6px;
1236
+ --gog-select-filter-input-padding-y: 6px;
1237
+ --gog-select-filter-input-padding-x: 8px;
1238
+ --gog-select-filter-input-bg: var(--gog-background-color);
1239
+ --gog-select-filter-input-color: var(--gog-select-control-color);
1240
+ --gog-select-filter-input-border: var(--gog-select-control-border);
1241
+ --gog-select-filter-input-radius: var(--gog-radius);
1242
+ --gog-select-filter-border-width: var(--gog-panel-border-width);
1243
+ --gog-select-filter-border-style: var(--gog-panel-border-style);
1244
+ --gog-select-filter-border-color: var(--gog-select-option-border-color, var(--gog-border-color));
1245
+ --gog-select-filter-empty-padding: 10px;
1246
+ --gog-select-filter-empty-color: var(--gog-select-placeholder-color);
1247
+ /* Clear button — only rendered once a value is selected, see `clearable`. */
1248
+ --gog-select-clear-radius: 2px;
1249
+ --gog-select-clear-icon-ratio: 0.7;
1250
+ --gog-select-clear-gap: 6px;
1251
+ --gog-select-clear-color: var(--gog-select-placeholder-color);
1252
+ --gog-select-clear-hover-color: var(--gog-select-label-color);
728
1253
  --gog-select-control-gap: 12px;
729
1254
  --gog-select-panel-bg: var(--gog-surface-color);
730
1255
  --gog-select-panel-shadow: var(--gog-panel-shadow);
@@ -745,6 +1270,10 @@
745
1270
  --gog-select-mark-icon-ratio: 0.875;
746
1271
  --gog-select-disabled-opacity: var(--gog-disabled-opacity);
747
1272
  --gog-select-transition-duration: var(--gog-duration-base);
1273
+ --gog-select-float-label-reserve: var(--gog-field-float-label-reserve);
1274
+ --gog-select-float-label-in-top: var(--gog-field-float-label-in-top);
1275
+ --gog-select-float-label-over-gap: var(--gog-field-float-label-over-gap);
1276
+ --gog-select-float-label-over-reserve: var(--gog-field-float-label-over-reserve);
748
1277
 
749
1278
  /* ── Skeleton ─────────────────────────────────────────────────────────────── */
750
1279
  --gog-skeleton-base: color-mix(in srgb, var(--gog-border-color) 40%, var(--gog-surface-color));
@@ -775,6 +1304,9 @@
775
1304
 
776
1305
  /* ── Slider ───────────────────────────────────────────────────────────────── */
777
1306
  --gog-slider-auto-width: 240px;
1307
+ /* Length (height) of a vertical slider's track — the counterpart to
1308
+ --gog-slider-auto-width, which only sizes the horizontal case. */
1309
+ --gog-slider-vertical-length: 160px;
778
1310
  --gog-slider-label-font-family: var(--gog-font-heading);
779
1311
  --gog-slider-value-font-family: var(--gog-font-mono);
780
1312
  --gog-slider-error-font-family: var(--gog-font-body);
@@ -789,7 +1321,26 @@
789
1321
  --gog-slider-track-height: 4px;
790
1322
  --gog-slider-track-area-height: 20px;
791
1323
  --gog-slider-track-radius: 0px;
792
- --gog-slider-track-bg: var(--gog-accent-dim);
1324
+ /*
1325
+ * Deliberately NOT an accent-* token: --gog-accent-dim sits on the same hue ramp as
1326
+ * --gog-slider-fill-bg (--gog-accent-color), so at a 4px track height the two used to
1327
+ * read as one blob rather than "recessed groove + accent fill" — same problem in both
1328
+ * themes, since the whole accent ramp is one hue. Mixing --gog-text-color into
1329
+ * --gog-border-color instead gives a desaturated, theme-adaptive groove: it darkens
1330
+ * toward black in the light theme (text-color is near-black there) and lightens toward
1331
+ * parchment in the dark theme (text-color is near-white there), landing at a neutral
1332
+ * warm gray in both — always visibly distinct from the saturated accent fill, and always
1333
+ * legible against its own theme's surface.
1334
+ */
1335
+ --gog-slider-track-bg: color-mix(in srgb, var(--gog-text-color) 30%, var(--gog-border-color));
1336
+ --gog-slider-track-border-width: 1px;
1337
+ --gog-slider-track-border-style: solid;
1338
+ /* Transparent by default — same opt-in convention as --gog-btn-primary-border: the
1339
+ width/style are always in the box model, but invisible until a theme sets a color. */
1340
+ --gog-slider-track-border-color: transparent;
1341
+ /* Bound via `background` (not `background-color`) in slider.component.scss, so this
1342
+ also accepts a gradient (e.g. `linear-gradient(...)`) for the fill style, not just a
1343
+ solid color. */
793
1344
  --gog-slider-fill-bg: var(--gog-accent-color);
794
1345
  --gog-slider-thumb-size: 16px;
795
1346
  --gog-slider-thumb-bg: var(--gog-accent-color);
@@ -889,6 +1440,47 @@
889
1440
  --gog-table-slg-th-font-size: var(--gog-text-md);
890
1441
  --gog-table-slg-td-font-size: var(--gog-text-lg);
891
1442
 
1443
+ /* ── Tabs ──────────────────────────────────────────────────────────────────
1444
+ `--gog-tabs-tab-bg`, `-tab-color`, `-tab-padding` and `-tab-font-size` are intentionally
1445
+ NOT declared — they are the per-instance escape hatch the size classes fall back through.
1446
+ `--gog-tabs-indicator-offset` / `-length` are written as inline styles from the measured
1447
+ header geometry, so they are not declared either. */
1448
+ --gog-tabs-font-family: var(--gog-font-heading);
1449
+ --gog-tabs-font-weight: 700;
1450
+ --gog-tabs-letter-spacing: 0.4px;
1451
+ --gog-tabs-text-transform: none;
1452
+ --gog-tabs-line-height: 1.2;
1453
+ --gog-tabs-gap: 0px;
1454
+ --gog-tabs-tab-gap: var(--gog-space-sm);
1455
+ --gog-tabs-icon-size: 1.1em;
1456
+ --gog-tabs-rest-bg: transparent;
1457
+ --gog-tabs-rest-color: var(--gog-muted-text-color);
1458
+ --gog-tabs-hover-color: var(--gog-text-color);
1459
+ --gog-tabs-active-color: var(--gog-accent-color);
1460
+ --gog-tabs-header-border-width: 1px;
1461
+ --gog-tabs-header-border-style: solid;
1462
+ --gog-tabs-header-border-color: var(--gog-border-color);
1463
+ --gog-tabs-indicator-color: var(--gog-accent-color);
1464
+ --gog-tabs-indicator-thickness: 2px;
1465
+ --gog-tabs-indicator-radius: 999px;
1466
+ --gog-tabs-transition-duration: var(--gog-duration-base);
1467
+ --gog-tabs-disabled-opacity: var(--gog-disabled-opacity);
1468
+ --gog-tabs-focus-ring-width: var(--gog-focus-ring-width);
1469
+ --gog-tabs-focus-ring-offset: -2px;
1470
+ --gog-tabs-focus-ring-color: var(--gog-accent-color);
1471
+ --gog-tabs-panel-padding: var(--gog-space-md);
1472
+ --gog-tabs-panel-color: var(--gog-text-color);
1473
+ --gog-tabs-xsm-padding: 0.375rem 0.625rem;
1474
+ --gog-tabs-xsm-font-size: var(--gog-text-xs);
1475
+ --gog-tabs-sm-padding: 0.5rem 0.875rem;
1476
+ --gog-tabs-sm-font-size: var(--gog-text-sm);
1477
+ --gog-tabs-md-padding: 0.75rem 1.125rem;
1478
+ --gog-tabs-md-font-size: var(--gog-text-md);
1479
+ --gog-tabs-lg-padding: 1rem 1.5rem;
1480
+ --gog-tabs-lg-font-size: var(--gog-text-lg);
1481
+ --gog-tabs-slg-padding: 1.25rem 1.75rem;
1482
+ --gog-tabs-slg-font-size: var(--gog-text-xl);
1483
+
892
1484
  /* ── Tag ──────────────────────────────────────────────────────────────────
893
1485
  Like the button, the unsuffixed `--gog-tag-bg`/`-border`/`-color`/`-font-size`
894
1486
  and friends stay undeclared so variant and size classes can fall through them. */
@@ -975,4 +1567,95 @@
975
1567
  --gog-toast-stack-min-opacity: 0.4;
976
1568
  --gog-toast-stack-opacity-step: 0.18;
977
1569
  --gog-toast-stack-max-depth: 6;
1570
+
1571
+ /* ── Toggle ───────────────────────────────────────────────────────────────────
1572
+ A switch, not a checkbox: it announces as "switch, on". The outer label size reuses
1573
+ the `--gog-control-checkbox-*` scale so a toggle and a checkbox in the same form read
1574
+ at the same weight; the track/thumb geometry is its own, since a switch is wider than
1575
+ it is tall. */
1576
+ --gog-toggle-font-family: var(--gog-font-body);
1577
+ --gog-toggle-gap: var(--gog-space-sm);
1578
+ --gog-toggle-radius: 999px;
1579
+ --gog-toggle-border-width: 1px;
1580
+ --gog-toggle-border-style: solid;
1581
+ --gog-toggle-border-color: var(--gog-border-color);
1582
+ --gog-toggle-on-border-color: var(--gog-accent-color);
1583
+ --gog-toggle-track-off-bg: color-mix(in srgb, var(--gog-text-color) 18%, transparent);
1584
+ --gog-toggle-track-on-bg: var(--gog-accent-color);
1585
+ --gog-toggle-thumb-off-bg: var(--gog-surface-color);
1586
+ --gog-toggle-thumb-on-bg: var(--gog-accent-text-color, var(--gog-primary-color));
1587
+ --gog-toggle-thumb-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
1588
+ --gog-toggle-thumb-inset: 2px;
1589
+ --gog-toggle-transition-duration: var(--gog-duration-base);
1590
+ --gog-toggle-disabled-opacity: var(--gog-disabled-opacity);
1591
+ --gog-toggle-label-color: var(--gog-text-color);
1592
+ --gog-toggle-label-line-height: 1.4;
1593
+ --gog-toggle-focus-ring-width: var(--gog-focus-ring-width);
1594
+ --gog-toggle-focus-ring-offset: var(--gog-focus-ring-offset);
1595
+ --gog-toggle-focus-ring-color: var(--gog-accent-color);
1596
+ /* In-track on/off wording */
1597
+ --gog-toggle-state-color: var(--gog-accent-text-color, var(--gog-primary-color));
1598
+ --gog-toggle-state-font-weight: 600;
1599
+ --gog-toggle-state-letter-spacing: 0.04em;
1600
+ --gog-toggle-state-padding-inline: 4px;
1601
+ --gog-toggle-state-offset: 6px;
1602
+ /* Gap between the wording and the thumb parked at the opposite end. The clearance itself
1603
+ (thumb size + this) is computed in the component stylesheet, not here: a `var(` to a
1604
+ size-class token is substituted where it is *declared*, so doing that calc on :root would
1605
+ freeze it to the md thumb and stop it scaling with `size`. */
1606
+ --gog-toggle-state-thumb-gap: 6px;
1607
+ --gog-toggle-xsm-track-width: 24px;
1608
+ --gog-toggle-xsm-track-height: 14px;
1609
+ --gog-toggle-xsm-thumb-size: 10px;
1610
+ --gog-toggle-xsm-label-size: var(--gog-control-checkbox-label-size-xsm);
1611
+ --gog-toggle-xsm-state-font-size: 0.5rem;
1612
+ --gog-toggle-sm-track-width: 32px;
1613
+ --gog-toggle-sm-track-height: 18px;
1614
+ --gog-toggle-sm-thumb-size: 14px;
1615
+ --gog-toggle-sm-label-size: var(--gog-control-checkbox-label-size-sm);
1616
+ --gog-toggle-sm-state-font-size: 0.5625rem;
1617
+ --gog-toggle-md-track-width: 44px;
1618
+ --gog-toggle-md-track-height: 24px;
1619
+ --gog-toggle-md-thumb-size: 18px;
1620
+ --gog-toggle-md-label-size: var(--gog-control-checkbox-label-size-md);
1621
+ --gog-toggle-md-state-font-size: 0.625rem;
1622
+ --gog-toggle-lg-track-width: 56px;
1623
+ --gog-toggle-lg-track-height: 32px;
1624
+ --gog-toggle-lg-thumb-size: 26px;
1625
+ --gog-toggle-lg-label-size: var(--gog-control-checkbox-label-size-lg);
1626
+ --gog-toggle-lg-state-font-size: 0.75rem;
1627
+ --gog-toggle-slg-track-width: 68px;
1628
+ --gog-toggle-slg-track-height: 40px;
1629
+ --gog-toggle-slg-thumb-size: 34px;
1630
+ --gog-toggle-slg-label-size: var(--gog-control-checkbox-label-size-slg);
1631
+ --gog-toggle-slg-state-font-size: 0.8125rem;
1632
+
1633
+ /* ── Tooltip ──────────────────────────────────────────────────────────────── */
1634
+ --gog-tooltip-font-family: var(--gog-font-body);
1635
+ --gog-tooltip-font-size: var(--gog-text-xs);
1636
+ --gog-tooltip-line-height: 1.4;
1637
+ --gog-tooltip-padding: 6px 10px;
1638
+ --gog-tooltip-radius: var(--gog-radius);
1639
+ --gog-tooltip-max-width: 280px;
1640
+ /* Caps the gog-scroll wrapping the bubble's content — see tooltip-bubble.component.html.
1641
+ A cap, not a fixed height: shorter content stays exactly as tall as it needs to be, this
1642
+ only stops something unusually long (a multi-paragraph TemplateRef) from growing to
1643
+ cover most of the viewport. */
1644
+ --gog-tooltip-max-height: 220px;
1645
+ /* Same "floating panel" recipe as gog-dialog's panel and gog-select's dropdown — a
1646
+ surface-colored box with a plain (not accent) border and the shared panel shadow —
1647
+ rather than an inverted dark/light bubble, so it reads as part of this site instead of
1648
+ a generic dark tooltip dropped on top of it. */
1649
+ --gog-tooltip-bg: var(--gog-surface-color);
1650
+ --gog-tooltip-color: var(--gog-text-color);
1651
+ --gog-tooltip-border-width: var(--gog-panel-border-width);
1652
+ --gog-tooltip-border-style: var(--gog-panel-border-style);
1653
+ --gog-tooltip-border-color: var(--gog-border-color);
1654
+ --gog-tooltip-shadow: var(--gog-panel-shadow);
1655
+ --gog-tooltip-arrow-size: 5px;
1656
+ /* Space kept between the trigger and the bubble. Read by the directive itself (not just
1657
+ CSS) to feed the placement math — see `readPxToken` in `tooltip.directive.ts`. */
1658
+ --gog-tooltip-gap: 8px;
1659
+ --gog-tooltip-z: 400;
1660
+ --gog-tooltip-transition-duration: var(--gog-duration-fast);
978
1661
  }