@loidolt/theme-styles 0.7.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.
@@ -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
  }
@@ -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);
@@ -0,0 +1,2 @@
1
+ /* The compact preset (dark-auto colours). See '@loidolt/theme-tokens' definePreset() to build your own. */
2
+ @import '@loidolt/theme-tokens/css/presets/compact-dark-auto';
@@ -0,0 +1,2 @@
1
+ /* The compact preset (dark colours). See '@loidolt/theme-tokens' definePreset() to build your own. */
2
+ @import '@loidolt/theme-tokens/css/presets/compact-dark';
@@ -0,0 +1,2 @@
1
+ /* The compact preset. See '@loidolt/theme-tokens' definePreset() to build your own. */
2
+ @import '@loidolt/theme-tokens/css/presets/compact';
@@ -0,0 +1,2 @@
1
+ /* The loidolt preset (dark-auto colours). See '@loidolt/theme-tokens' definePreset() to build your own. */
2
+ @import '@loidolt/theme-tokens/css/presets/loidolt-dark-auto';
@@ -0,0 +1,2 @@
1
+ /* The loidolt preset (dark colours). See '@loidolt/theme-tokens' definePreset() to build your own. */
2
+ @import '@loidolt/theme-tokens/css/presets/loidolt-dark';