@loidolt/theme-styles 0.7.0 → 0.8.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.
@@ -9,11 +9,16 @@
9
9
  z-index: var(--loidolt-z-dialog);
10
10
  top: 50%;
11
11
  left: 50%;
12
- display: grid;
12
+ /* A column whose body alone shrinks and scrolls, so the header and the footer's actions stay in
13
+ view however tall the content (or short the screen). Flex rather than grid rows, because an
14
+ AlertDialog without content has no body. */
15
+ display: flex;
16
+ flex-direction: column;
13
17
  width: min(var(--ldt-dialog-width, 34rem), calc(100vw - 2rem));
14
18
  max-height: min(48rem, calc(100dvh - 2rem));
15
19
  overflow: hidden;
16
20
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
21
+ border-radius: var(--loidolt-radius-overlay);
17
22
  color: var(--loidolt-text);
18
23
  background: var(--loidolt-surface);
19
24
  box-shadow: var(--loidolt-shadow-modal);
@@ -35,24 +40,27 @@
35
40
  --ldt-dialog-width: 100vw;
36
41
  height: calc(100dvh - 2rem);
37
42
  max-height: none;
38
- grid-template-rows: auto minmax(0, 1fr) auto;
39
43
  }
40
44
  .ldt-dialog__actions {
41
45
  display: flex;
42
46
  flex: none;
43
47
  align-items: center;
44
- gap: 0.25rem;
48
+ gap: var(--loidolt-space-1);
45
49
  }
46
50
  .ldt-dialog__header,
47
51
  .ldt-dialog__body,
48
52
  .ldt-dialog__footer {
49
- padding: 1rem 1.25rem;
53
+ padding: var(--loidolt-pad-overlay);
54
+ }
55
+ .ldt-dialog__header,
56
+ .ldt-dialog__footer {
57
+ flex: none;
50
58
  }
51
59
  .ldt-dialog__header {
52
60
  display: flex;
53
61
  align-items: start;
54
62
  justify-content: space-between;
55
- gap: 1rem;
63
+ gap: var(--loidolt-space-4);
56
64
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
57
65
  }
58
66
  .ldt-dialog__header > :first-child,
@@ -60,13 +68,15 @@
60
68
  min-width: 0;
61
69
  }
62
70
  .ldt-dialog__body {
71
+ flex: 1 1 auto;
72
+ min-height: 0;
63
73
  overflow-y: auto;
64
74
  }
65
75
  .ldt-dialog__footer {
66
76
  display: flex;
67
77
  flex-wrap: wrap;
68
78
  justify-content: flex-end;
69
- gap: 0.5rem;
79
+ gap: var(--loidolt-gap-actions);
70
80
  border-top: var(--loidolt-border-width) solid var(--loidolt-border);
71
81
  }
72
82
  .ldt-dialog__footer .ldt-button,
@@ -154,13 +164,13 @@
154
164
  .ldt-drawer__header,
155
165
  .ldt-drawer__body,
156
166
  .ldt-drawer__footer {
157
- padding: 1rem 1.25rem;
167
+ padding: var(--loidolt-pad-overlay);
158
168
  }
159
169
  .ldt-drawer__header {
160
170
  display: flex;
161
171
  align-items: start;
162
172
  justify-content: space-between;
163
- gap: 1rem;
173
+ gap: var(--loidolt-space-4);
164
174
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
165
175
  }
166
176
  .ldt-drawer__body {
@@ -170,7 +180,7 @@
170
180
  display: flex;
171
181
  flex-wrap: wrap;
172
182
  justify-content: flex-end;
173
- gap: 0.5rem;
183
+ gap: var(--loidolt-gap-actions);
174
184
  border-top: var(--loidolt-border-width) solid var(--loidolt-border);
175
185
  }
176
186
  .ldt-drawer__title {
@@ -188,31 +198,34 @@
188
198
  z-index: var(--loidolt-z-menu);
189
199
  min-width: 13rem;
190
200
  max-width: min(22rem, calc(100vw - 2rem));
191
- padding: 0.45rem;
201
+ padding: var(--loidolt-pad-popover);
192
202
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
203
+ border-radius: var(--loidolt-radius-overlay);
193
204
  color: var(--loidolt-text);
194
205
  background: var(--loidolt-surface);
195
206
  box-shadow: var(--loidolt-shadow-popover);
196
207
  }
197
208
  .ldt-menu {
198
209
  display: grid;
199
- gap: 0.1rem;
210
+ gap: 0.1rem; /* @literal hairline between items */
200
211
  }
201
212
  .ldt-menu__label {
202
- padding: 0.45rem 0.55rem 0.3rem;
213
+ padding: 0.45rem 0.55rem 0.3rem; /* @literal optical alignment with item text */
203
214
  color: var(--loidolt-text-accent);
204
215
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
205
- letter-spacing: 0.09em;
206
- text-transform: uppercase;
216
+ font-weight: var(--loidolt-label-weight);
217
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.9);
218
+ text-transform: var(--loidolt-label-transform);
207
219
  }
208
220
  .ldt-menu__item {
209
221
  width: 100%;
210
222
  display: flex;
211
223
  align-items: center;
212
224
  justify-content: space-between;
213
- gap: 1rem;
225
+ gap: var(--loidolt-space-4);
214
226
  border: 0;
215
- padding: 0.65rem 0.55rem;
227
+ border-radius: var(--loidolt-radius-inner);
228
+ padding: var(--loidolt-pad-item);
216
229
  color: var(--loidolt-text);
217
230
  background: transparent;
218
231
  text-align: left;
@@ -228,7 +241,7 @@
228
241
  .ldt-menu__hint {
229
242
  color: var(--loidolt-text-muted);
230
243
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
231
- letter-spacing: 0.08em;
244
+ letter-spacing: var(--loidolt-control-tracking);
232
245
  }
233
246
  .ldt-menu__item:hover:not(:disabled, [data-disabled]) .ldt-menu__hint,
234
247
  .ldt-menu__item[data-highlighted] .ldt-menu__hint {
@@ -250,13 +263,13 @@
250
263
  }
251
264
  .ldt-menu__group {
252
265
  display: grid;
253
- gap: 0.1rem;
266
+ gap: 0.1rem; /* @literal hairline between items */
254
267
  }
255
268
  /* Checkbox and radio rows lead with a drawn indicator, so state never rests on colour alone. */
256
269
  .ldt-menu__item--check,
257
270
  .ldt-menu__item--radio {
258
271
  justify-content: flex-start;
259
- gap: 0.6rem;
272
+ gap: 0.6rem; /* @literal glyph-to-label spacing, not density */
260
273
  }
261
274
  .ldt-menu__item--check .ldt-menu__hint,
262
275
  .ldt-menu__item--radio .ldt-menu__hint {
@@ -274,7 +287,7 @@
274
287
  position: absolute;
275
288
  inset: 0.05rem 0.22rem 0.18rem;
276
289
  border: solid currentColor;
277
- border-width: 0 2px 2px 0;
290
+ border-width: 0 2px 2px 0; /* @literal checkmark glyph */
278
291
  transform: rotate(45deg);
279
292
  }
280
293
  .ldt-menu__item--radio[data-state='checked'] .ldt-menu__indicator::after {
@@ -288,7 +301,7 @@
288
301
  height: 0.4rem;
289
302
  flex: none;
290
303
  border: solid currentColor;
291
- border-width: 0 1.5px 1.5px 0;
304
+ border-width: 0 1.5px 1.5px 0; /* @literal chevron glyph */
292
305
  transform: rotate(-45deg);
293
306
  }
294
307
  .ldt-menu__item--sub[data-state='open'] {
@@ -304,7 +317,8 @@
304
317
  .ldt-tooltip {
305
318
  z-index: var(--loidolt-z-tooltip);
306
319
  max-width: 18rem;
307
- padding: 0.4rem 0.55rem;
320
+ padding: 0.4rem 0.55rem; /* @literal compact by nature; not a density surface */
321
+ border-radius: var(--loidolt-radius-control);
308
322
  color: var(--loidolt-text-inverse);
309
323
  background: var(--loidolt-surface-inverse);
310
324
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
@@ -329,7 +343,7 @@
329
343
  .ldt-tabs__list {
330
344
  max-width: 100%;
331
345
  display: flex;
332
- gap: 2px;
346
+ gap: 2px; /* @literal hairline seam between tabs */
333
347
  overflow-x: auto;
334
348
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
335
349
  overscroll-behavior-inline: contain;
@@ -345,18 +359,19 @@
345
359
  .ldt-tabs__trigger {
346
360
  min-height: var(--loidolt-size-control);
347
361
  border: 0;
348
- border-bottom: 2px solid transparent;
349
- padding: 0 0.85rem;
362
+ border-bottom: var(--loidolt-stroke-indicator) solid transparent;
363
+ padding: 0 var(--loidolt-pad-control-x);
350
364
  color: var(--loidolt-text-muted);
351
365
  background: transparent;
352
366
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
353
- letter-spacing: 0.08em;
354
- text-transform: uppercase;
367
+ font-weight: var(--loidolt-control-weight);
368
+ letter-spacing: var(--loidolt-control-tracking);
369
+ text-transform: var(--loidolt-control-transform);
355
370
  }
356
371
  .ldt-tabs__trigger[data-orientation='vertical'] {
357
372
  border-bottom: 0;
358
- border-right: 2px solid transparent;
359
- padding: 0 0.85rem;
373
+ border-right: var(--loidolt-stroke-indicator) solid transparent;
374
+ padding: 0 var(--loidolt-pad-control-x);
360
375
  text-align: left;
361
376
  }
362
377
  .ldt-tabs__trigger[data-state='active'],
@@ -368,7 +383,7 @@
368
383
  padding-block: 0;
369
384
  }
370
385
  .ldt-tabs__content {
371
- padding-block: 1rem;
386
+ padding-block: var(--loidolt-space-4);
372
387
  }
373
388
 
374
389
  @media (max-width: 760px) {
@@ -380,7 +395,7 @@
380
395
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
381
396
  }
382
397
  .ldt-tabs__content[data-orientation='vertical'] {
383
- padding-block: 1rem;
398
+ padding-block: var(--loidolt-space-4);
384
399
  }
385
400
  }
386
401
  /* The option list of Combobox and MultiSelect: the menu surface, sized to its field. */
@@ -390,38 +405,40 @@
390
405
  max-width: min(28rem, calc(100vw - 2rem));
391
406
  max-height: min(20rem, var(--bits-floating-available-height, 20rem));
392
407
  display: grid;
393
- gap: 0.1rem;
408
+ gap: 0.1rem; /* @literal hairline between items */
394
409
  overflow-y: auto;
395
- padding: 0.35rem;
410
+ padding: 0.35rem; /* @literal listbox inset */
396
411
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
412
+ border-radius: var(--loidolt-radius-overlay);
397
413
  color: var(--loidolt-text);
398
414
  background: var(--loidolt-surface);
399
415
  box-shadow: var(--loidolt-shadow-popover);
400
416
  }
401
417
  .ldt-listbox__group {
402
418
  display: grid;
403
- gap: 0.1rem;
419
+ gap: 0.1rem; /* @literal hairline between items */
404
420
  }
405
421
  .ldt-listbox__group + .ldt-listbox__group,
406
422
  .ldt-listbox__item + .ldt-listbox__group {
407
423
  margin-top: 0.25rem;
408
424
  border-top: var(--loidolt-border-width) solid var(--loidolt-border-soft);
409
- padding-top: 0.25rem;
425
+ padding-top: var(--loidolt-space-1);
410
426
  }
411
427
  .ldt-listbox__heading {
412
- padding: 0.4rem 0.55rem 0.25rem;
428
+ padding: 0.4rem 0.55rem 0.25rem; /* @literal optical alignment with item text */
413
429
  color: var(--loidolt-text-accent);
414
430
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
415
- letter-spacing: 0.09em;
416
- text-transform: uppercase;
431
+ font-weight: var(--loidolt-label-weight);
432
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.9);
433
+ text-transform: var(--loidolt-label-transform);
417
434
  }
418
435
  .ldt-listbox__item {
419
436
  min-height: 1.5rem;
420
437
  display: flex;
421
438
  align-items: center;
422
439
  justify-content: space-between;
423
- gap: 1rem;
424
- padding: 0.55rem;
440
+ gap: var(--loidolt-space-4);
441
+ padding: 0.55rem; /* @literal listbox option metrics */
425
442
  cursor: default;
426
443
  }
427
444
  .ldt-listbox__item[data-highlighted] {
@@ -438,14 +455,14 @@
438
455
  height: 0.65rem;
439
456
  flex: none;
440
457
  border: solid transparent;
441
- border-width: 0 2px 2px 0;
458
+ border-width: 0 2px 2px 0; /* @literal checkmark glyph */
442
459
  transform: rotate(45deg) translate(-0.1rem, -0.1rem);
443
460
  }
444
461
  .ldt-listbox__item[data-selected] .ldt-listbox__check {
445
462
  border-color: currentColor;
446
463
  }
447
464
  .ldt-listbox__empty {
448
- padding: 0.55rem;
465
+ padding: 0.55rem; /* @literal matches the option metrics */
449
466
  color: var(--loidolt-text-muted);
450
467
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
451
468
  }
@@ -38,7 +38,7 @@
38
38
  margin-block: 1.8em 0.6em;
39
39
  color: var(--loidolt-text);
40
40
  font-family: var(--loidolt-font-display);
41
- font-weight: 500;
41
+ font-weight: var(--loidolt-heading-weight);
42
42
  line-height: var(--loidolt-font-line-height-tight);
43
43
  /* Clears a sticky top bar when a heading is the target of an in-page link. */
44
44
  scroll-margin-top: calc(var(--loidolt-size-topbar) + var(--loidolt-space-4));
@@ -48,7 +48,7 @@
48
48
  font-size: 2em;
49
49
  }
50
50
  :where(.ldt-prose h2):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
51
- padding-block-end: 0.3em;
51
+ padding-block-end: 0.3em; /* @literal em-based prose rhythm */
52
52
  border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-soft);
53
53
  font-size: 1.5em;
54
54
  }
@@ -63,8 +63,8 @@
63
63
  color: var(--loidolt-text-muted);
64
64
  font-family: var(--loidolt-font-utility);
65
65
  font-size: 0.8em;
66
- letter-spacing: var(--loidolt-font-tracking-utility);
67
- text-transform: uppercase;
66
+ letter-spacing: var(--loidolt-label-tracking);
67
+ text-transform: var(--loidolt-label-transform);
68
68
  }
69
69
  /* A heading directly after another heading sits closer to it. */
70
70
  :where(.ldt-prose :is(h1, h2, h3, h4, h5, h6) + :is(h1, h2, h3, h4, h5, h6)):not(
@@ -86,19 +86,21 @@
86
86
  /* Only one weight per family ships, so bold is synthesized; colour keeps it legible. */
87
87
  :where(.ldt-prose :is(strong, b)):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
88
88
  color: var(--loidolt-text);
89
- font-weight: 700;
89
+ font-weight: 700; /* @literal bold means bold in running text */
90
90
  }
91
91
  :where(.ldt-prose :not(pre) > code):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
92
- padding: 0.12em 0.35em;
92
+ padding: 0.12em 0.35em; /* @literal em-based inline code */
93
93
  border: var(--loidolt-border-width) solid var(--loidolt-border-soft);
94
+ border-radius: var(--loidolt-radius-inner);
94
95
  color: var(--loidolt-text);
95
96
  background: var(--loidolt-surface-sunken);
96
97
  font-size: 0.875em;
97
98
  }
98
99
  :where(.ldt-prose kbd):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
99
- padding: 0.05em 0.4em;
100
+ padding: 0.05em 0.4em; /* @literal em-based key cap */
100
101
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
101
- border-bottom-width: 2px;
102
+ border-radius: var(--loidolt-radius-inner);
103
+ border-bottom-width: 2px; /* @literal key-cap depth */
102
104
  background: var(--loidolt-surface);
103
105
  font-size: 0.85em;
104
106
  }
@@ -110,7 +112,7 @@
110
112
  /* --- Lists --------------------------------------------------------------------------------- */
111
113
 
112
114
  :where(.ldt-prose :is(ul, ol)):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
113
- padding-inline-start: 1.5em;
115
+ padding-inline-start: 1.5em; /* @literal em-based list indent */
114
116
  }
115
117
  :where(.ldt-prose li):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
116
118
  margin-block: 0.3em;
@@ -131,7 +133,7 @@
131
133
  accent-color: var(--loidolt-accent);
132
134
  }
133
135
  :where(.ldt-prose dt):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
134
- font-weight: 700;
136
+ font-weight: 700; /* @literal bold means bold in running text */
135
137
  }
136
138
  :where(.ldt-prose dd):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
137
139
  margin: 0 0 0.6em 1.5em;
@@ -141,8 +143,8 @@
141
143
 
142
144
  :where(.ldt-prose blockquote):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
143
145
  margin-inline: 0;
144
- padding: 0.7em 1em;
145
- border-inline-start: 3px solid var(--loidolt-accent);
146
+ padding: 0.7em 1em; /* @literal em-based prose rhythm */
147
+ border-inline-start: var(--loidolt-stroke-accent) solid var(--loidolt-accent);
146
148
  color: var(--loidolt-text);
147
149
  background: var(--loidolt-surface-alt);
148
150
  }
@@ -168,9 +170,10 @@
168
170
  * surface so it reads as code in both colour schemes.
169
171
  */
170
172
  :where(.ldt-prose pre):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
171
- padding: 0.9em 1.1em;
173
+ padding: 0.9em 1.1em; /* @literal em-based code rhythm */
172
174
  overflow-x: auto;
173
175
  border: var(--loidolt-border-width) solid var(--loidolt-border);
176
+ border-radius: var(--loidolt-radius-surface);
174
177
  color: var(--loidolt-text-inverse);
175
178
  background: var(--loidolt-surface-inverse);
176
179
  font-size: 0.85em;
@@ -199,14 +202,14 @@
199
202
  font-size: 0.9em;
200
203
  }
201
204
  :where(.ldt-prose :is(th, td)):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
202
- padding: 0.5em 0.8em;
205
+ padding: 0.5em 0.8em; /* @literal em-based table rhythm */
203
206
  border: var(--loidolt-border-width) solid var(--loidolt-border);
204
207
  text-align: start;
205
208
  vertical-align: top;
206
209
  }
207
210
  :where(.ldt-prose th):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
208
211
  background: var(--loidolt-surface-alt);
209
- font-weight: 700;
212
+ font-weight: 700; /* @literal bold means bold in running text */
210
213
  }
211
214
  :where(.ldt-prose td):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
212
215
  background: var(--loidolt-surface);
@@ -221,12 +224,13 @@
221
224
  /* --- Disclosure ---------------------------------------------------------------------------- */
222
225
 
223
226
  :where(.ldt-prose details):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
224
- padding: 0.5em 0.9em;
227
+ padding: 0.5em 0.9em; /* @literal em-based prose rhythm */
225
228
  border: var(--loidolt-border-width) solid var(--loidolt-border);
229
+ border-radius: var(--loidolt-radius-surface);
226
230
  background: var(--loidolt-surface);
227
231
  }
228
232
  :where(.ldt-prose summary):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
229
- font-weight: 700;
233
+ font-weight: 700; /* @literal bold means bold in running text */
230
234
  }
231
235
  :where(.ldt-prose details[open] > summary):not(:where(.ldt-not-prose, .ldt-not-prose *)) {
232
236
  margin-block-end: 0.5em;
@@ -13,15 +13,16 @@
13
13
  display: flex;
14
14
  align-items: center;
15
15
  justify-content: space-between;
16
- gap: 1rem;
16
+ gap: var(--loidolt-space-4);
17
17
  border: 0;
18
- padding: 0.75rem 0;
18
+ padding: var(--loidolt-space-3) 0;
19
19
  color: var(--loidolt-text);
20
20
  background: transparent;
21
21
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
22
- letter-spacing: 0.08em;
22
+ font-weight: var(--loidolt-control-weight);
23
+ letter-spacing: var(--loidolt-control-tracking);
23
24
  text-align: left;
24
- text-transform: uppercase;
25
+ text-transform: var(--loidolt-control-transform);
25
26
  }
26
27
  .ldt-accordion__trigger:hover:not([data-disabled]) {
27
28
  color: var(--loidolt-text-accent);
@@ -34,15 +35,15 @@
34
35
  width: 0;
35
36
  height: 0;
36
37
  flex: 0 0 auto;
37
- border-inline: 0.3rem solid transparent;
38
- border-top: 0.34rem solid currentColor;
38
+ border-inline: 0.3rem solid transparent; /* @literal CSS triangle geometry */
39
+ border-top: 0.34rem solid currentColor; /* @literal CSS triangle geometry */
39
40
  transition: transform var(--loidolt-motion-normal) var(--loidolt-motion-easing);
40
41
  }
41
42
  .ldt-accordion__trigger[data-state='open'] .ldt-accordion__indicator {
42
43
  transform: rotate(180deg);
43
44
  }
44
45
  .ldt-accordion__body {
45
- padding-bottom: 1rem;
46
+ padding-bottom: var(--loidolt-space-4);
46
47
  color: var(--loidolt-text-muted);
47
48
  }
48
49
  .ldt-toggle-group {
@@ -50,6 +51,7 @@
50
51
  display: inline-flex;
51
52
  overflow-x: auto;
52
53
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
54
+ border-radius: var(--loidolt-radius-control);
53
55
  overscroll-behavior-inline: contain;
54
56
  scrollbar-width: thin;
55
57
  }
@@ -62,15 +64,16 @@
62
64
  display: inline-flex;
63
65
  align-items: center;
64
66
  justify-content: center;
65
- gap: 0.4rem;
67
+ gap: 0.4rem; /* @literal glyph-to-label spacing, not density */
66
68
  border: 0;
67
- padding: 0 0.85rem;
69
+ padding: 0 var(--loidolt-pad-control-x);
68
70
  color: var(--loidolt-text-muted);
69
71
  background: transparent;
70
72
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
71
- letter-spacing: 0.08em;
73
+ font-weight: var(--loidolt-control-weight);
74
+ letter-spacing: var(--loidolt-control-tracking);
72
75
  line-height: 1;
73
- text-transform: uppercase;
76
+ text-transform: var(--loidolt-control-transform);
74
77
  white-space: nowrap;
75
78
  }
76
79
  /* One shared rule between neighbours, so the group reads as a single object rather than a row
@@ -101,18 +104,18 @@
101
104
  }
102
105
  .ldt-toggle-group--sm .ldt-toggle-group__item {
103
106
  min-height: var(--loidolt-size-control-sm);
104
- padding: 0 0.65rem;
107
+ padding: 0 var(--loidolt-pad-control-x-sm);
105
108
  font-size: var(--loidolt-font-size-xs);
106
109
  }
107
110
  .ldt-toggle-group--lg .ldt-toggle-group__item {
108
111
  min-height: var(--loidolt-size-control-lg);
109
- padding: 0 1.2rem;
112
+ padding: 0 var(--loidolt-pad-control-x-lg);
110
113
  }
111
114
  .ldt-breadcrumbs__list {
112
115
  display: flex;
113
116
  flex-wrap: wrap;
114
117
  align-items: center;
115
- gap: 0.35rem 0.5rem;
118
+ gap: 0.35rem 0.5rem; /* @literal separator rhythm, not density */
116
119
  margin: 0;
117
120
  padding: 0;
118
121
  list-style: none;
@@ -121,7 +124,7 @@
121
124
  min-width: 0;
122
125
  display: inline-flex;
123
126
  align-items: center;
124
- gap: 0.5rem;
127
+ gap: var(--loidolt-space-2);
125
128
  }
126
129
  /* Generated content, so the separator is never selected, copied, or read aloud. */
127
130
  .ldt-breadcrumbs__item + .ldt-breadcrumbs__item::before {
@@ -132,9 +135,10 @@
132
135
  .ldt-breadcrumbs__current {
133
136
  overflow: hidden;
134
137
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
135
- letter-spacing: var(--loidolt-font-tracking-utility);
138
+ font-weight: var(--loidolt-label-weight);
139
+ letter-spacing: var(--loidolt-label-tracking);
136
140
  text-overflow: ellipsis;
137
- text-transform: uppercase;
141
+ text-transform: var(--loidolt-label-transform);
138
142
  white-space: nowrap;
139
143
  }
140
144
  .ldt-breadcrumbs__link {
@@ -155,10 +159,10 @@
155
159
  display: flex;
156
160
  flex-wrap: wrap;
157
161
  align-items: center;
158
- gap: 0.3rem;
162
+ gap: 0.3rem; /* @literal page buttons sit nearly flush */
159
163
  }
160
164
  .ldt-pagination__ellipsis {
161
- padding-inline: 0.35rem;
165
+ padding-inline: 0.35rem; /* @literal matches the page-button gap */
162
166
  color: var(--loidolt-text-muted);
163
167
  }
164
168
  .ldt-pagination__page {
@@ -179,6 +183,7 @@
179
183
  display: inline-flex;
180
184
  overflow-x: auto;
181
185
  border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
186
+ border-radius: var(--loidolt-radius-control);
182
187
  overscroll-behavior-inline: contain;
183
188
  scrollbar-width: thin;
184
189
  }
@@ -207,6 +212,7 @@
207
212
  gap: var(--loidolt-space-1);
208
213
  padding: var(--loidolt-space-1);
209
214
  border: var(--loidolt-border-width) solid var(--loidolt-border);
215
+ border-radius: var(--loidolt-radius-inner);
210
216
  color: inherit;
211
217
  background: none;
212
218
  font: inherit;
@@ -244,15 +250,16 @@
244
250
  .ldt-chip {
245
251
  display: inline-flex;
246
252
  align-items: center;
247
- gap: 0.2rem;
253
+ gap: 0.2rem; /* @literal chip glyph spacing */
248
254
  min-height: 1.5rem;
249
255
  max-width: 100%;
250
256
  border: var(--loidolt-border-width) solid var(--loidolt-border-control);
251
- padding-inline-start: 0.45rem;
257
+ border-radius: var(--loidolt-radius-control);
258
+ padding-inline-start: 0.45rem; /* @literal chip label inset */
252
259
  color: var(--loidolt-text);
253
260
  background: var(--loidolt-surface-alt);
254
261
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
255
- letter-spacing: 0.04em;
262
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.4);
256
263
  }
257
264
  .ldt-chip > span {
258
265
  overflow: hidden;
@@ -1,6 +1,7 @@
1
1
  .ldt-card,
2
2
  .ldt-panel {
3
3
  border: var(--loidolt-border-width) solid var(--loidolt-border);
4
+ border-radius: var(--loidolt-radius-surface);
4
5
  color: var(--loidolt-text);
5
6
  background: var(--loidolt-surface);
6
7
  }
@@ -25,7 +26,7 @@
25
26
  .ldt-panel__header,
26
27
  .ldt-panel__content,
27
28
  .ldt-panel__footer {
28
- padding: var(--loidolt-space-4);
29
+ padding: var(--loidolt-pad-surface);
29
30
  }
30
31
  .ldt-card__header,
31
32
  .ldt-panel__header {
@@ -56,15 +57,16 @@
56
57
  display: inline-flex;
57
58
  align-items: center;
58
59
  min-height: 1.4rem;
59
- padding: 0.15rem 0.5rem;
60
+ padding: 0.15rem 0.5rem; /* @literal inline badge metrics, sized to sit in running text */
60
61
  border: var(--loidolt-border-width) solid var(--loidolt-border);
61
62
  border-radius: var(--loidolt-border-radius-pill);
62
63
  color: var(--loidolt-text-muted);
63
64
  background: var(--loidolt-surface-sunken);
64
65
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
65
66
  /* The label voice (`.ldt-eyebrow`, `.ldt-field__label`), not the tighter control voice. */
66
- letter-spacing: var(--loidolt-font-tracking-wide);
67
- text-transform: uppercase;
67
+ font-weight: var(--loidolt-label-weight);
68
+ letter-spacing: var(--loidolt-label-tracking-wide);
69
+ text-transform: var(--loidolt-label-transform);
68
70
  }
69
71
  /*
70
72
  * Size steps take the button scale's *box* so a badge in a row of controls lines up with them,
@@ -83,17 +85,17 @@
83
85
  }
84
86
  .ldt-badge--sm {
85
87
  min-height: var(--loidolt-size-control-sm);
86
- padding: 0.38rem 0.7rem;
88
+ padding: var(--loidolt-pad-control-y-sm) 0.7rem; /* @literal inline pad sits between control steps */
87
89
  line-height: 1;
88
90
  }
89
91
  .ldt-badge--md {
90
92
  min-height: var(--loidolt-size-control);
91
- padding: 0.5rem 0.9rem;
93
+ padding: var(--loidolt-pad-control-y) 0.9rem; /* @literal inline pad sits between control steps */
92
94
  line-height: 1;
93
95
  }
94
96
  .ldt-badge--lg {
95
97
  min-height: var(--loidolt-size-control-lg);
96
- padding: 0.5rem 1.25rem;
98
+ padding: var(--loidolt-pad-control-y) 1.25rem; /* @literal inline pad sits between control steps */
97
99
  line-height: 1;
98
100
  }
99
101
  .ldt-badge--accent {
@@ -130,6 +132,7 @@
130
132
  aspect-ratio: var(--ldt-thumbnail-ratio, 4 / 3);
131
133
  overflow: hidden;
132
134
  border: var(--loidolt-border-width) solid var(--loidolt-border);
135
+ border-radius: var(--loidolt-radius-surface);
133
136
  background: var(--loidolt-surface-sunken);
134
137
  }
135
138
  .ldt-thumbnail--paper {
@@ -169,8 +172,9 @@
169
172
  /* A dashboard tile: one hero number over a utility label; the link form invites a click. */
170
173
  .ldt-stat {
171
174
  display: block;
172
- padding: var(--loidolt-space-4);
175
+ padding: var(--loidolt-pad-surface);
173
176
  border: var(--loidolt-border-width) solid var(--loidolt-border);
177
+ border-radius: var(--loidolt-radius-surface);
174
178
  color: var(--loidolt-text);
175
179
  background: var(--loidolt-surface);
176
180
  text-decoration: none;
@@ -183,14 +187,15 @@ a.ldt-stat:hover {
183
187
  margin: 0;
184
188
  font-family: var(--loidolt-font-display);
185
189
  font-size: var(--loidolt-font-size-xl);
186
- font-weight: 600;
190
+ font-weight: var(--loidolt-strong-weight);
187
191
  }
188
192
  .ldt-stat__label {
189
193
  margin: 0.25rem 0 0;
190
194
  color: var(--loidolt-text-muted);
191
195
  font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
192
- letter-spacing: var(--loidolt-font-tracking-utility);
193
- text-transform: uppercase;
196
+ font-weight: var(--loidolt-label-weight);
197
+ letter-spacing: var(--loidolt-label-tracking);
198
+ text-transform: var(--loidolt-label-transform);
194
199
  }
195
200
  .ldt-separator {
196
201
  width: 100%;
@@ -214,10 +219,11 @@ a.ldt-stat:hover {
214
219
  place-items: center;
215
220
  overflow: hidden;
216
221
  border: var(--loidolt-border-width) solid var(--loidolt-border);
222
+ border-radius: var(--loidolt-radius-control);
217
223
  color: var(--loidolt-text-muted);
218
224
  background: var(--loidolt-surface-sunken);
219
225
  font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
220
- letter-spacing: 0.06em;
226
+ letter-spacing: calc(var(--loidolt-label-tracking) * 0.6);
221
227
  }
222
228
  .ldt-avatar--sm {
223
229
  width: var(--loidolt-size-control-sm);