@loidolt/theme-styles 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,327 @@
1
+ /* @loidolt/theme-maps. The map itself is painted by MapLibre from the same tokens (read at
2
+ runtime through `createTokenColors`); this file dresses MapLibre's controls, popups and
3
+ attribution, and the loidolt pieces placed on the map. It sits in `loidolt.components`, after
4
+ the `loidolt.vendor` layer MapLibre's own stylesheet goes in, so it wins without `!important`. */
5
+ .ldt-map {
6
+ position: relative;
7
+ min-width: 0;
8
+ height: var(--ldt-map-height, 25rem);
9
+ overflow: hidden;
10
+ border: var(--loidolt-border-width) solid var(--loidolt-border);
11
+ border-radius: var(--loidolt-radius-surface);
12
+ background: var(--loidolt-map-land);
13
+ }
14
+ .ldt-map__canvas {
15
+ position: absolute;
16
+ inset: 0;
17
+ }
18
+ .ldt-map__canvas[hidden],
19
+ .ldt-map__children[hidden] {
20
+ display: none;
21
+ }
22
+ .ldt-map__alert {
23
+ margin: 0.75rem;
24
+ }
25
+ .ldt-map :where(.maplibregl-map) {
26
+ color: var(--loidolt-text);
27
+ font: var(--loidolt-font-size-sm) / var(--loidolt-font-line-height-normal)
28
+ var(--loidolt-font-utility);
29
+ }
30
+
31
+ /* Controls stay above markers, which can be placed anywhere — including under a corner. */
32
+ .ldt-map
33
+ :where(
34
+ .maplibregl-ctrl-top-left,
35
+ .maplibregl-ctrl-top-right,
36
+ .maplibregl-ctrl-bottom-left,
37
+ .maplibregl-ctrl-bottom-right
38
+ ) {
39
+ z-index: var(--loidolt-z-raised);
40
+ }
41
+
42
+ /* Control groups: square, hairline-bordered, on the surface — the toolbar look. */
43
+ .ldt-map .maplibregl-ctrl-group {
44
+ border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
45
+ border-radius: 0;
46
+ background: var(--loidolt-surface);
47
+ box-shadow: none;
48
+ }
49
+ .ldt-map .maplibregl-ctrl-group button {
50
+ width: 2rem;
51
+ height: 2rem;
52
+ color: var(--loidolt-text);
53
+ }
54
+ .ldt-map .maplibregl-ctrl-group button + button {
55
+ border-top: var(--loidolt-border-width) solid var(--loidolt-border);
56
+ }
57
+ .ldt-map .maplibregl-ctrl-group button:not(:disabled):hover {
58
+ background: var(--loidolt-surface-alt);
59
+ }
60
+ .ldt-map .maplibregl-ctrl-group button:focus-visible {
61
+ box-shadow: none;
62
+ }
63
+ /* MapLibre's icons are dark images, invisible on a dark surface. Masks of our own glyphs, filled
64
+ with the text colour, follow every theme. */
65
+ .ldt-map .maplibregl-ctrl button .maplibregl-ctrl-icon {
66
+ background-image: none;
67
+ background-color: currentColor;
68
+ mask: var(--ldt-map-icon) center / 1rem 1rem no-repeat;
69
+ }
70
+ .ldt-map .maplibregl-ctrl-zoom-in {
71
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 3v10M3 8h10' stroke='black' stroke-width='1.5'/%3E%3C/svg%3E");
72
+ }
73
+ .ldt-map .maplibregl-ctrl-zoom-out {
74
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 8h10' stroke='black' stroke-width='1.5'/%3E%3C/svg%3E");
75
+ }
76
+ .ldt-map .maplibregl-ctrl-compass {
77
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 2 11 8H5z'/%3E%3Cpath d='M5 8h6L8 14z' fill-opacity='.35'/%3E%3C/svg%3E");
78
+ }
79
+ .ldt-map .maplibregl-ctrl-fullscreen,
80
+ .ldt-map .maplibregl-ctrl-shrink {
81
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.5'%3E%3Cpath d='M2 6V2h4M10 2h4v4M14 10v4h-4M6 14H2v-4'/%3E%3C/svg%3E");
82
+ }
83
+ .ldt-map .maplibregl-ctrl-geolocate {
84
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.5'%3E%3Cpath d='M8 1v3M8 12v3M1 8h3M12 8h3'/%3E%3Crect x='4.5' y='4.5' width='7' height='7'/%3E%3C/svg%3E");
85
+ }
86
+ .ldt-map .maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active {
87
+ color: var(--loidolt-accent);
88
+ }
89
+ .ldt-map .maplibregl-ctrl-attrib-button {
90
+ --ldt-map-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M7 7h2v6H7zM7 3h2v2H7z'/%3E%3C/svg%3E");
91
+ }
92
+
93
+ /* Attribution: required by the tile licence, so readable — just quiet. */
94
+ .ldt-map .maplibregl-ctrl-attrib,
95
+ .ldt-map .maplibregl-ctrl-attrib.maplibregl-compact {
96
+ border-radius: 0;
97
+ color: var(--loidolt-text-muted);
98
+ background: var(--loidolt-surface);
99
+ font-size: var(--loidolt-font-size-xs);
100
+ }
101
+ .ldt-map .maplibregl-ctrl-attrib a {
102
+ display: inline-block;
103
+ padding-block: 0.35rem; /* @literal attribution link target */
104
+ color: var(--loidolt-text);
105
+ line-height: 1.5;
106
+ }
107
+ .ldt-map .maplibregl-ctrl-attrib-button {
108
+ border-radius: 0;
109
+ background-color: transparent;
110
+ }
111
+ .ldt-map .maplibregl-ctrl-scale {
112
+ border-color: var(--loidolt-text-muted);
113
+ color: var(--loidolt-text);
114
+ background: var(--loidolt-surface);
115
+ font-size: var(--loidolt-font-size-xs);
116
+ }
117
+
118
+ /* Controls of our own: legends, coordinates, the basemap switcher. */
119
+ .ldt-map-control {
120
+ padding: var(--loidolt-space-2) var(--loidolt-pad-control-x-sm);
121
+ border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
122
+ border-radius: var(--loidolt-radius-surface);
123
+ color: var(--loidolt-text);
124
+ background: var(--loidolt-surface);
125
+ }
126
+ .ldt-map-control.ldt-basemap-switcher {
127
+ padding: 0;
128
+ border: 0;
129
+ background: transparent;
130
+ }
131
+ .ldt-map-legend {
132
+ display: grid;
133
+ gap: 0.4rem; /* @literal swatch-to-label spacing */
134
+ min-width: 9rem;
135
+ max-width: 16rem;
136
+ font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
137
+ }
138
+ .ldt-map-legend__title,
139
+ .ldt-map-legend__summary {
140
+ margin: 0;
141
+ color: var(--loidolt-text-muted);
142
+ font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
143
+ font-weight: var(--loidolt-label-weight);
144
+ letter-spacing: var(--loidolt-label-tracking);
145
+ text-transform: var(--loidolt-label-transform);
146
+ }
147
+ .ldt-map-legend__summary {
148
+ cursor: pointer;
149
+ }
150
+ .ldt-map-legend__section {
151
+ display: grid;
152
+ gap: 0.35rem; /* @literal legend rhythm */
153
+ }
154
+ .ldt-map-legend__items {
155
+ display: grid;
156
+ gap: var(--loidolt-space-1);
157
+ margin: 0;
158
+ padding: 0;
159
+ list-style: none;
160
+ }
161
+ .ldt-map-legend__item {
162
+ display: flex;
163
+ gap: var(--loidolt-space-2);
164
+ align-items: center;
165
+ }
166
+ .ldt-map-legend__key {
167
+ flex: none;
168
+ width: 0.75rem;
169
+ height: 0.75rem;
170
+ background: var(--ldt-legend-color);
171
+ }
172
+ .ldt-map-legend__key--line {
173
+ height: 0.2rem;
174
+ }
175
+ .ldt-map-legend__key--dot {
176
+ border-radius: var(--loidolt-border-radius-pill);
177
+ }
178
+ .ldt-map-legend__ramp {
179
+ height: 0.6rem;
180
+ }
181
+ .ldt-map-legend__ends {
182
+ display: flex;
183
+ justify-content: space-between;
184
+ margin: 0;
185
+ color: var(--loidolt-text-muted);
186
+ font-size: var(--loidolt-font-size-xs);
187
+ }
188
+ .ldt-map-coordinates {
189
+ display: flex;
190
+ gap: var(--loidolt-space-3);
191
+ margin: 0;
192
+ font: var(--loidolt-font-size-xs) var(--loidolt-font-mono);
193
+ font-variant-numeric: tabular-nums;
194
+ }
195
+
196
+ /* The layer manager: a titled list of switches, sliders and move buttons. */
197
+ .ldt-layer-manager {
198
+ min-width: 13rem;
199
+ max-width: min(18rem, calc(100vw - 4rem));
200
+ /* Never taller than the map, so it cannot run into the controls in the corner below it. */
201
+ max-height: calc(var(--ldt-map-height, 25rem) - 4.5rem);
202
+ overflow-y: auto;
203
+ }
204
+ .ldt-layer-manager__title {
205
+ margin: 0;
206
+ }
207
+ .ldt-layer-manager__toggle {
208
+ width: 100%;
209
+ padding: 0.15rem 0; /* @literal toggle hit area */
210
+ border: 0;
211
+ color: var(--loidolt-text-muted);
212
+ background: none;
213
+ font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
214
+ font-weight: var(--loidolt-label-weight);
215
+ letter-spacing: var(--loidolt-label-tracking);
216
+ text-align: start;
217
+ text-transform: var(--loidolt-label-transform);
218
+ cursor: pointer;
219
+ }
220
+ .ldt-layer-manager__list {
221
+ display: grid;
222
+ gap: var(--loidolt-space-2);
223
+ margin: 0.4rem 0 0;
224
+ padding: 0;
225
+ list-style: none;
226
+ }
227
+ .ldt-layer-manager__list[hidden] {
228
+ display: none;
229
+ }
230
+ .ldt-layer-manager__row {
231
+ display: grid;
232
+ grid-template-columns: minmax(0, 1fr) auto;
233
+ gap: 0.35rem 0.5rem; /* @literal separator rhythm */
234
+ align-items: center;
235
+ padding-top: var(--loidolt-space-2);
236
+ border-top: var(--loidolt-border-width) solid var(--loidolt-border-soft);
237
+ }
238
+ .ldt-layer-manager__row:first-child {
239
+ padding-top: 0;
240
+ border-top: 0;
241
+ }
242
+ .ldt-layer-manager__move {
243
+ display: flex;
244
+ gap: 0.15rem; /* @literal icon pair */
245
+ }
246
+ .ldt-layer-manager__opacity {
247
+ grid-column: 1 / -1;
248
+ }
249
+
250
+ /* Markers: the loidolt pin or dot, in a button that takes focus. */
251
+ .ldt-map-marker {
252
+ display: block;
253
+ padding: 0;
254
+ border: 0;
255
+ color: inherit;
256
+ background: none;
257
+ cursor: pointer;
258
+ }
259
+ span.ldt-map-marker {
260
+ cursor: default;
261
+ }
262
+
263
+ /* Popups: square, on the surface, no tip — the same frame as a popover. */
264
+ .ldt-map-popup .maplibregl-popup-content {
265
+ padding: 0;
266
+ border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
267
+ border-radius: 0;
268
+ color: var(--loidolt-text);
269
+ background: var(--loidolt-surface);
270
+ box-shadow: var(--loidolt-shadow-popover);
271
+ }
272
+ .ldt-map-popup .maplibregl-popup-tip {
273
+ display: none;
274
+ }
275
+ .ldt-map-popup__content {
276
+ display: grid;
277
+ grid-template-columns: minmax(0, 1fr) auto;
278
+ align-items: start;
279
+ gap: var(--loidolt-space-1);
280
+ max-width: min(18rem, 80vw);
281
+ padding: 0.5rem 0.35rem 0.6rem 0.75rem; /* @literal popup inset clears the close button */
282
+ }
283
+ .ldt-map-popup__body > :first-child {
284
+ margin-top: 0.3rem;
285
+ }
286
+ .ldt-map-popup__body > :last-child {
287
+ margin-bottom: 0;
288
+ }
289
+
290
+ /* The feature list: every place on the map, as rows. */
291
+ .ldt-map-features__list {
292
+ margin: 0;
293
+ padding: 0;
294
+ border-top: var(--loidolt-border-width) solid var(--loidolt-border-soft);
295
+ list-style: none;
296
+ }
297
+ .ldt-map-features__item {
298
+ display: grid;
299
+ gap: 0.1rem; /* @literal hairline between lines */
300
+ width: 100%;
301
+ padding: 0.55rem 0.75rem; /* @literal feature list metrics */
302
+ border: 0;
303
+ border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-soft);
304
+ border-left: var(--loidolt-stroke-accent) solid transparent;
305
+ color: var(--loidolt-text);
306
+ background: none;
307
+ font: inherit;
308
+ text-align: start;
309
+ cursor: pointer;
310
+ }
311
+ .ldt-map-features__item:hover {
312
+ background: var(--loidolt-surface-alt);
313
+ }
314
+ .ldt-map-features__item[aria-current='true'] {
315
+ border-left-color: var(--loidolt-accent);
316
+ background: var(--loidolt-surface-alt);
317
+ }
318
+ .ldt-map-features__description {
319
+ color: var(--loidolt-text-muted);
320
+ font-size: var(--loidolt-font-size-sm);
321
+ }
322
+
323
+ @media (forced-colors: active) {
324
+ .ldt-map .maplibregl-ctrl button .maplibregl-ctrl-icon {
325
+ background-color: ButtonText;
326
+ }
327
+ }
@@ -84,7 +84,7 @@
84
84
  }
85
85
  .ldt-media-player__meta {
86
86
  display: grid;
87
- gap: 0.1rem;
87
+ gap: 0.1rem; /* @literal hairline between lines */
88
88
  min-width: 0;
89
89
  }
90
90
  .ldt-media-player--audio .ldt-media-player__meta:first-child {
@@ -125,7 +125,7 @@
125
125
  color: var(--loidolt-accent);
126
126
  }
127
127
  .ldt-media-controls__text {
128
- letter-spacing: var(--loidolt-font-tracking-utility);
128
+ letter-spacing: var(--loidolt-label-tracking);
129
129
  }
130
130
  /* Focus rings on the dark bar follow the ink so they stay visible in both themes. */
131
131
  .ldt-media-controls :focus-visible {
@@ -169,7 +169,8 @@
169
169
  .ldt-media-controls__speed {
170
170
  min-height: 1.5rem;
171
171
  border: var(--loidolt-border-width) solid currentColor;
172
- padding: 0 0.3rem;
172
+ border-radius: var(--loidolt-radius-control);
173
+ padding: 0 0.3rem; /* @literal compact readout */
173
174
  color: inherit;
174
175
  background: transparent;
175
176
  font: inherit;
@@ -191,6 +192,7 @@
191
192
  aspect-ratio: var(--ldt-aspect-ratio, 16 / 9);
192
193
  overflow: hidden;
193
194
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
195
+ border-radius: var(--loidolt-radius-surface);
194
196
  background: var(--loidolt-surface-inverse);
195
197
  }
196
198
  .ldt-media-embed__frame {
@@ -225,12 +227,13 @@
225
227
  }
226
228
  .ldt-media-embed__title {
227
229
  max-width: 32rem;
228
- padding: 0.2rem 0.5rem;
230
+ padding: 0.2rem 0.5rem; /* @literal caption chip */
229
231
  color: var(--loidolt-text-inverse);
230
232
  background: var(--loidolt-surface-inverse);
231
233
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
232
- letter-spacing: var(--loidolt-font-tracking-utility);
233
- text-transform: uppercase;
234
+ font-weight: var(--loidolt-label-weight);
235
+ letter-spacing: var(--loidolt-label-tracking);
236
+ text-transform: var(--loidolt-label-transform);
234
237
  }
235
238
  .ldt-media-embed__unsupported {
236
239
  display: grid;
@@ -310,12 +313,13 @@
310
313
  border-color: var(--loidolt-accent);
311
314
  }
312
315
  .ldt-media-tile__kind {
313
- padding: 0.1rem 0.4rem;
316
+ padding: 0.1rem 0.4rem; /* @literal kind chip */
314
317
  color: var(--loidolt-text-inverse);
315
318
  background: var(--loidolt-surface-inverse);
316
319
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
317
- letter-spacing: var(--loidolt-font-tracking-utility);
318
- text-transform: uppercase;
320
+ font-weight: var(--loidolt-label-weight);
321
+ letter-spacing: var(--loidolt-label-tracking);
322
+ text-transform: var(--loidolt-label-transform);
319
323
  }
320
324
  .ldt-media-tile__caption {
321
325
  color: var(--loidolt-text-muted);
@@ -347,7 +351,7 @@
347
351
  .ldt-lightbox__counter {
348
352
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
349
353
  font-variant-numeric: tabular-nums;
350
- letter-spacing: var(--loidolt-font-tracking-utility);
354
+ letter-spacing: var(--loidolt-label-tracking);
351
355
  }
352
356
  .ldt-lightbox__tools {
353
357
  display: flex;
@@ -360,7 +364,8 @@
360
364
  min-height: var(--loidolt-size-control-sm);
361
365
  place-items: center;
362
366
  border: var(--loidolt-border-width) solid currentColor;
363
- padding: 0 0.5rem;
367
+ border-radius: var(--loidolt-radius-control);
368
+ padding: 0 var(--loidolt-space-2);
364
369
  color: inherit;
365
370
  background: var(--loidolt-surface-inverse);
366
371
  font: var(--loidolt-font-size-base) var(--loidolt-font-utility);
@@ -402,7 +407,7 @@
402
407
  width: 0.55rem;
403
408
  height: 0.55rem;
404
409
  border: solid currentColor;
405
- border-width: 0 0 2px 2px;
410
+ border-width: 0 0 2px 2px; /* @literal chevron glyph */
406
411
  transform: translateX(0.1rem) rotate(45deg);
407
412
  }
408
413
  .ldt-lightbox__nav--next .ldt-lightbox__chevron,
@@ -437,6 +442,7 @@
437
442
  min-height: var(--loidolt-size-control-sm);
438
443
  place-items: center;
439
444
  border: var(--loidolt-border-width) solid var(--loidolt-border-control);
445
+ border-radius: var(--loidolt-radius-control);
440
446
  padding: 0;
441
447
  color: var(--loidolt-text);
442
448
  background: var(--loidolt-surface);
@@ -14,6 +14,7 @@
14
14
  max-height: min(48rem, calc(100dvh - 2rem));
15
15
  overflow: hidden;
16
16
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
17
+ border-radius: var(--loidolt-radius-overlay);
17
18
  color: var(--loidolt-text);
18
19
  background: var(--loidolt-surface);
19
20
  box-shadow: var(--loidolt-shadow-modal);
@@ -41,18 +42,18 @@
41
42
  display: flex;
42
43
  flex: none;
43
44
  align-items: center;
44
- gap: 0.25rem;
45
+ gap: var(--loidolt-space-1);
45
46
  }
46
47
  .ldt-dialog__header,
47
48
  .ldt-dialog__body,
48
49
  .ldt-dialog__footer {
49
- padding: 1rem 1.25rem;
50
+ padding: var(--loidolt-pad-overlay);
50
51
  }
51
52
  .ldt-dialog__header {
52
53
  display: flex;
53
54
  align-items: start;
54
55
  justify-content: space-between;
55
- gap: 1rem;
56
+ gap: var(--loidolt-space-4);
56
57
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
57
58
  }
58
59
  .ldt-dialog__header > :first-child,
@@ -66,7 +67,7 @@
66
67
  display: flex;
67
68
  flex-wrap: wrap;
68
69
  justify-content: flex-end;
69
- gap: 0.5rem;
70
+ gap: var(--loidolt-gap-actions);
70
71
  border-top: var(--loidolt-border-width) solid var(--loidolt-border);
71
72
  }
72
73
  .ldt-dialog__footer .ldt-button,
@@ -154,13 +155,13 @@
154
155
  .ldt-drawer__header,
155
156
  .ldt-drawer__body,
156
157
  .ldt-drawer__footer {
157
- padding: 1rem 1.25rem;
158
+ padding: var(--loidolt-pad-overlay);
158
159
  }
159
160
  .ldt-drawer__header {
160
161
  display: flex;
161
162
  align-items: start;
162
163
  justify-content: space-between;
163
- gap: 1rem;
164
+ gap: var(--loidolt-space-4);
164
165
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
165
166
  }
166
167
  .ldt-drawer__body {
@@ -170,7 +171,7 @@
170
171
  display: flex;
171
172
  flex-wrap: wrap;
172
173
  justify-content: flex-end;
173
- gap: 0.5rem;
174
+ gap: var(--loidolt-gap-actions);
174
175
  border-top: var(--loidolt-border-width) solid var(--loidolt-border);
175
176
  }
176
177
  .ldt-drawer__title {
@@ -188,31 +189,34 @@
188
189
  z-index: var(--loidolt-z-menu);
189
190
  min-width: 13rem;
190
191
  max-width: min(22rem, calc(100vw - 2rem));
191
- padding: 0.45rem;
192
+ padding: var(--loidolt-pad-popover);
192
193
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
194
+ border-radius: var(--loidolt-radius-overlay);
193
195
  color: var(--loidolt-text);
194
196
  background: var(--loidolt-surface);
195
197
  box-shadow: var(--loidolt-shadow-popover);
196
198
  }
197
199
  .ldt-menu {
198
200
  display: grid;
199
- gap: 0.1rem;
201
+ gap: 0.1rem; /* @literal hairline between items */
200
202
  }
201
203
  .ldt-menu__label {
202
- padding: 0.45rem 0.55rem 0.3rem;
204
+ padding: 0.45rem 0.55rem 0.3rem; /* @literal optical alignment with item text */
203
205
  color: var(--loidolt-text-accent);
204
206
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
205
- letter-spacing: 0.09em;
206
- text-transform: uppercase;
207
+ font-weight: var(--loidolt-label-weight);
208
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.9);
209
+ text-transform: var(--loidolt-label-transform);
207
210
  }
208
211
  .ldt-menu__item {
209
212
  width: 100%;
210
213
  display: flex;
211
214
  align-items: center;
212
215
  justify-content: space-between;
213
- gap: 1rem;
216
+ gap: var(--loidolt-space-4);
214
217
  border: 0;
215
- padding: 0.65rem 0.55rem;
218
+ border-radius: var(--loidolt-radius-inner);
219
+ padding: var(--loidolt-pad-item);
216
220
  color: var(--loidolt-text);
217
221
  background: transparent;
218
222
  text-align: left;
@@ -228,7 +232,7 @@
228
232
  .ldt-menu__hint {
229
233
  color: var(--loidolt-text-muted);
230
234
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
231
- letter-spacing: 0.08em;
235
+ letter-spacing: var(--loidolt-control-tracking);
232
236
  }
233
237
  .ldt-menu__item:hover:not(:disabled, [data-disabled]) .ldt-menu__hint,
234
238
  .ldt-menu__item[data-highlighted] .ldt-menu__hint {
@@ -250,13 +254,13 @@
250
254
  }
251
255
  .ldt-menu__group {
252
256
  display: grid;
253
- gap: 0.1rem;
257
+ gap: 0.1rem; /* @literal hairline between items */
254
258
  }
255
259
  /* Checkbox and radio rows lead with a drawn indicator, so state never rests on colour alone. */
256
260
  .ldt-menu__item--check,
257
261
  .ldt-menu__item--radio {
258
262
  justify-content: flex-start;
259
- gap: 0.6rem;
263
+ gap: 0.6rem; /* @literal glyph-to-label spacing, not density */
260
264
  }
261
265
  .ldt-menu__item--check .ldt-menu__hint,
262
266
  .ldt-menu__item--radio .ldt-menu__hint {
@@ -274,7 +278,7 @@
274
278
  position: absolute;
275
279
  inset: 0.05rem 0.22rem 0.18rem;
276
280
  border: solid currentColor;
277
- border-width: 0 2px 2px 0;
281
+ border-width: 0 2px 2px 0; /* @literal checkmark glyph */
278
282
  transform: rotate(45deg);
279
283
  }
280
284
  .ldt-menu__item--radio[data-state='checked'] .ldt-menu__indicator::after {
@@ -288,7 +292,7 @@
288
292
  height: 0.4rem;
289
293
  flex: none;
290
294
  border: solid currentColor;
291
- border-width: 0 1.5px 1.5px 0;
295
+ border-width: 0 1.5px 1.5px 0; /* @literal chevron glyph */
292
296
  transform: rotate(-45deg);
293
297
  }
294
298
  .ldt-menu__item--sub[data-state='open'] {
@@ -304,7 +308,8 @@
304
308
  .ldt-tooltip {
305
309
  z-index: var(--loidolt-z-tooltip);
306
310
  max-width: 18rem;
307
- padding: 0.4rem 0.55rem;
311
+ padding: 0.4rem 0.55rem; /* @literal compact by nature; not a density surface */
312
+ border-radius: var(--loidolt-radius-control);
308
313
  color: var(--loidolt-text-inverse);
309
314
  background: var(--loidolt-surface-inverse);
310
315
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
@@ -329,7 +334,7 @@
329
334
  .ldt-tabs__list {
330
335
  max-width: 100%;
331
336
  display: flex;
332
- gap: 2px;
337
+ gap: 2px; /* @literal hairline seam between tabs */
333
338
  overflow-x: auto;
334
339
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
335
340
  overscroll-behavior-inline: contain;
@@ -345,18 +350,19 @@
345
350
  .ldt-tabs__trigger {
346
351
  min-height: var(--loidolt-size-control);
347
352
  border: 0;
348
- border-bottom: 2px solid transparent;
349
- padding: 0 0.85rem;
353
+ border-bottom: var(--loidolt-stroke-indicator) solid transparent;
354
+ padding: 0 var(--loidolt-pad-control-x);
350
355
  color: var(--loidolt-text-muted);
351
356
  background: transparent;
352
357
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
353
- letter-spacing: 0.08em;
354
- text-transform: uppercase;
358
+ font-weight: var(--loidolt-control-weight);
359
+ letter-spacing: var(--loidolt-control-tracking);
360
+ text-transform: var(--loidolt-control-transform);
355
361
  }
356
362
  .ldt-tabs__trigger[data-orientation='vertical'] {
357
363
  border-bottom: 0;
358
- border-right: 2px solid transparent;
359
- padding: 0 0.85rem;
364
+ border-right: var(--loidolt-stroke-indicator) solid transparent;
365
+ padding: 0 var(--loidolt-pad-control-x);
360
366
  text-align: left;
361
367
  }
362
368
  .ldt-tabs__trigger[data-state='active'],
@@ -368,7 +374,7 @@
368
374
  padding-block: 0;
369
375
  }
370
376
  .ldt-tabs__content {
371
- padding-block: 1rem;
377
+ padding-block: var(--loidolt-space-4);
372
378
  }
373
379
 
374
380
  @media (max-width: 760px) {
@@ -380,7 +386,7 @@
380
386
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
381
387
  }
382
388
  .ldt-tabs__content[data-orientation='vertical'] {
383
- padding-block: 1rem;
389
+ padding-block: var(--loidolt-space-4);
384
390
  }
385
391
  }
386
392
  /* The option list of Combobox and MultiSelect: the menu surface, sized to its field. */
@@ -390,38 +396,40 @@
390
396
  max-width: min(28rem, calc(100vw - 2rem));
391
397
  max-height: min(20rem, var(--bits-floating-available-height, 20rem));
392
398
  display: grid;
393
- gap: 0.1rem;
399
+ gap: 0.1rem; /* @literal hairline between items */
394
400
  overflow-y: auto;
395
- padding: 0.35rem;
401
+ padding: 0.35rem; /* @literal listbox inset */
396
402
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
403
+ border-radius: var(--loidolt-radius-overlay);
397
404
  color: var(--loidolt-text);
398
405
  background: var(--loidolt-surface);
399
406
  box-shadow: var(--loidolt-shadow-popover);
400
407
  }
401
408
  .ldt-listbox__group {
402
409
  display: grid;
403
- gap: 0.1rem;
410
+ gap: 0.1rem; /* @literal hairline between items */
404
411
  }
405
412
  .ldt-listbox__group + .ldt-listbox__group,
406
413
  .ldt-listbox__item + .ldt-listbox__group {
407
414
  margin-top: 0.25rem;
408
415
  border-top: var(--loidolt-border-width) solid var(--loidolt-border-soft);
409
- padding-top: 0.25rem;
416
+ padding-top: var(--loidolt-space-1);
410
417
  }
411
418
  .ldt-listbox__heading {
412
- padding: 0.4rem 0.55rem 0.25rem;
419
+ padding: 0.4rem 0.55rem 0.25rem; /* @literal optical alignment with item text */
413
420
  color: var(--loidolt-text-accent);
414
421
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
415
- letter-spacing: 0.09em;
416
- text-transform: uppercase;
422
+ font-weight: var(--loidolt-label-weight);
423
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.9);
424
+ text-transform: var(--loidolt-label-transform);
417
425
  }
418
426
  .ldt-listbox__item {
419
427
  min-height: 1.5rem;
420
428
  display: flex;
421
429
  align-items: center;
422
430
  justify-content: space-between;
423
- gap: 1rem;
424
- padding: 0.55rem;
431
+ gap: var(--loidolt-space-4);
432
+ padding: 0.55rem; /* @literal listbox option metrics */
425
433
  cursor: default;
426
434
  }
427
435
  .ldt-listbox__item[data-highlighted] {
@@ -438,14 +446,14 @@
438
446
  height: 0.65rem;
439
447
  flex: none;
440
448
  border: solid transparent;
441
- border-width: 0 2px 2px 0;
449
+ border-width: 0 2px 2px 0; /* @literal checkmark glyph */
442
450
  transform: rotate(45deg) translate(-0.1rem, -0.1rem);
443
451
  }
444
452
  .ldt-listbox__item[data-selected] .ldt-listbox__check {
445
453
  border-color: currentColor;
446
454
  }
447
455
  .ldt-listbox__empty {
448
- padding: 0.55rem;
456
+ padding: 0.55rem; /* @literal matches the option metrics */
449
457
  color: var(--loidolt-text-muted);
450
458
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
451
459
  }