@threadlabs/looma 0.15.2 → 0.15.4

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.
@@ -274,6 +274,10 @@ svg[data-v-50d3f581] {
274
274
  syntax: "*";
275
275
  inherits: false;
276
276
  }
277
+ @property --ui-badge-color {
278
+ syntax: "*";
279
+ inherits: false;
280
+ }
277
281
  @property --ui-badge-font-size {
278
282
  syntax: "*";
279
283
  inherits: false;
@@ -310,12 +314,24 @@ svg[data-v-50d3f581] {
310
314
  syntax: "*";
311
315
  inherits: false;
312
316
  }
313
- [data-component~="ui-badge"][data-v-8ef5da57] {
317
+ [data-component~="ui-badge"][data-v-3485e390] {
314
318
  --_badge-surface: var(--ui-surface-subtle);
315
319
  --_badge-text: var(--ui-text-secondary);
316
320
  /* Every tone's edge is its fill, so it is unseen until forced colors draw it. */
317
321
  --_badge-border: var(--ui-surface-subtle);
318
- --_badge-outline-surface: var(--ui-badge-surface, var(--_badge-surface));
322
+ /* --ui-badge-color derives a wash and an ink from one colour, between the tone and the explicit
323
+ surface, text, and border hooks. Each value is invalid, so the tone shows, while it is unset. The
324
+ mixes keep 4.5:1 text contrast for any colour, in a light theme or a dark one. */
325
+ --_ui-badge-color: var(--ui-badge-color);
326
+ --_badge-color-wash: color-mix(in oklab, var(--_ui-badge-color) 15%, var(--ui-surface-default));
327
+ --_badge-color-ink: color-mix(in oklab, var(--_ui-badge-color) 35%, var(--ui-text-primary));
328
+ --_badge-color-surface: var(--_badge-color-wash);
329
+ --_badge-color-border: var(--_badge-color-wash);
330
+ --_badge-color-text: var(--_badge-color-ink);
331
+ --_badge-outline-surface: var(
332
+ --ui-badge-surface,
333
+ var(--_badge-color-surface, var(--_badge-surface))
334
+ );
319
335
 
320
336
  display: inline-flex;
321
337
  align-items: center;
@@ -323,10 +339,10 @@ svg[data-v-50d3f581] {
323
339
  max-width: 100%;
324
340
  padding: var(--ui-badge-padding-block, var(--ui-space-0-5))
325
341
  var(--ui-badge-padding-inline, var(--ui-space-2));
326
- border: 1px solid var(--ui-badge-border, var(--_badge-border));
342
+ border: 1px solid var(--ui-badge-border, var(--_badge-color-border, var(--_badge-border)));
327
343
  border-radius: var(--ui-radius-round);
328
344
  background: var(--_badge-outline-surface);
329
- color: var(--ui-badge-text, var(--_badge-text));
345
+ color: var(--ui-badge-text, var(--_badge-color-text, var(--_badge-text)));
330
346
  font-family: var(--ui-font-family-sans);
331
347
  font-size: var(--ui-badge-font-size, var(--ui-font-size-sm));
332
348
  font-weight: var(--ui-badge-font-weight, var(--ui-font-medium));
@@ -338,7 +354,7 @@ svg[data-v-50d3f581] {
338
354
  * Trimming applies to block containers; an inline-block is one and, like the inline-flex it
339
355
  * replaces, still sizes to its label rather than filling its container. */
340
356
  @supports (text-box-trim: trim-both) {
341
- [data-component~="ui-badge"][data-v-8ef5da57] {
357
+ [data-component~="ui-badge"][data-v-3485e390] {
342
358
  display: inline-block;
343
359
  min-block-size: var(--ui-badge-min-block-size, 1.5rem);
344
360
  text-align: center;
@@ -347,78 +363,89 @@ svg[data-v-50d3f581] {
347
363
  text-box-edge: cap alphabetic;
348
364
  }
349
365
  }
350
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-8ef5da57] {
366
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-3485e390] {
351
367
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
352
368
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
353
369
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
354
370
  }
355
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-8ef5da57] {
371
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-3485e390] {
356
372
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
357
373
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
358
374
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
359
375
  }
360
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-8ef5da57] {
376
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-3485e390] {
361
377
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
362
378
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
363
379
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
364
380
  }
365
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-8ef5da57] {
381
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-3485e390] {
366
382
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
367
383
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
368
384
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
369
385
  }
370
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-8ef5da57] {
386
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-3485e390] {
371
387
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
372
388
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
373
389
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
374
390
  }
375
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-8ef5da57] {
391
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-3485e390] {
376
392
  --_badge-surface: var(--ui-accent-soft);
377
393
  --_badge-border: var(--ui-accent-soft);
378
394
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
379
395
  }
380
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-8ef5da57] {
396
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-3485e390] {
381
397
  --_badge-surface: var(--ui-danger-soft);
382
398
  --_badge-border: var(--ui-danger-soft);
383
399
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
384
400
  }
385
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-8ef5da57] {
401
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-3485e390] {
386
402
  --_badge-surface: var(--ui-success-soft);
387
403
  --_badge-border: var(--ui-success-soft);
388
404
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
389
405
  }
390
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-8ef5da57] {
406
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-3485e390] {
391
407
  --_badge-surface: var(--ui-warning-soft);
392
408
  --_badge-border: var(--ui-warning-soft);
393
409
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
394
410
  }
395
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-8ef5da57] {
411
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-3485e390] {
396
412
  --_badge-surface: var(--ui-info-soft);
397
413
  --_badge-border: var(--ui-info-soft);
398
414
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
399
415
  }
400
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-8ef5da57] {
416
+
417
+ /* A solid colour fills with the ink. Its text is the page surface, mixed at 0% only so that it too is
418
+ invalid while the hook is unset. */
419
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=solid"][data-v-3485e390] {
420
+ --_badge-color-surface: var(--_badge-color-ink);
421
+ --_badge-color-border: var(--_badge-color-ink);
422
+ --_badge-color-text: color-mix(in oklab, var(--_ui-badge-color) 0%, var(--ui-surface-default));
423
+ }
424
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-v-3485e390] {
401
425
  --_badge-surface: var(--ui-surface-default);
402
426
  --_badge-border: var(--ui-border-strong);
403
427
  --_badge-text: var(--ui-text-secondary);
428
+ /* An outline colour keeps the surface and draws its edge and text in the ink. */
429
+ --_badge-color-surface: initial;
430
+ --_badge-color-border: var(--_badge-color-ink);
404
431
  }
405
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-8ef5da57] {
432
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=accent"][data-v-3485e390] {
406
433
  --_badge-border: var(--ui-accent-solid);
407
434
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
408
435
  }
409
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-8ef5da57] {
436
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=danger"][data-v-3485e390] {
410
437
  --_badge-border: var(--ui-danger-solid);
411
438
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
412
439
  }
413
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-8ef5da57] {
440
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=success"][data-v-3485e390] {
414
441
  --_badge-border: var(--ui-success-solid);
415
442
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
416
443
  }
417
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-8ef5da57] {
444
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=warning"][data-v-3485e390] {
418
445
  --_badge-border: var(--ui-warning-solid);
419
446
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
420
447
  }
421
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-8ef5da57] {
448
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="tone=info"][data-v-3485e390] {
422
449
  --_badge-border: var(--ui-info-solid);
423
450
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
424
451
  }
@@ -426,7 +453,7 @@ svg[data-v-50d3f581] {
426
453
  /* A tag is flat at the start and points at the end. The point is cut from the box, so it has no
427
454
  outline to follow: the edge is the fill. The end padding grows by the point's depth so the
428
455
  label never runs into it. */
429
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57] {
456
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-3485e390] {
430
457
  --_badge-point: var(--ui-badge-point, var(--ui-space-2));
431
458
 
432
459
  border-color: transparent;
@@ -440,7 +467,7 @@ svg[data-v-50d3f581] {
440
467
  0 100%
441
468
  );
442
469
  }
443
- [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57]:dir(rtl) {
470
+ [data-component~="ui-badge"][data-ui-badge-state~="shape=tag"][data-v-3485e390]:dir(rtl) {
444
471
  padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
445
472
  padding-inline-start: calc(
446
473
  var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point)
@@ -450,12 +477,12 @@ svg[data-v-50d3f581] {
450
477
 
451
478
  /* The tag clips its point, including the native border. Draw the outer shape in the border
452
479
  colour and an inset inner shape in the surface colour to keep a visible diagonal edge. */
453
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57] {
480
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-3485e390] {
454
481
  position: relative;
455
482
  isolation: isolate;
456
- background: var(--ui-badge-border, var(--_badge-border));
483
+ background: var(--ui-badge-border, var(--_badge-color-border, var(--_badge-border)));
457
484
  }
458
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57]::before {
485
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-3485e390]::before {
459
486
  content: "";
460
487
  position: absolute;
461
488
  inset: 1px;
@@ -470,22 +497,22 @@ svg[data-v-50d3f581] {
470
497
  );
471
498
  pointer-events: none;
472
499
  }
473
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57]:dir(rtl)::before {
500
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-3485e390]:dir(rtl)::before {
474
501
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
475
502
  }
476
503
  @media (forced-colors: active) {
477
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57] {
504
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-3485e390] {
478
505
  forced-color-adjust: none;
479
506
  background: CanvasText;
480
507
  color: CanvasText;
481
508
  }
482
- [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-8ef5da57]::before {
509
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=outline"][data-ui-badge-state~="shape=tag"][data-v-3485e390]::before {
483
510
  background: Canvas;
484
511
  }
485
512
  }
486
513
 
487
514
  /* A component that sets its display still honours the hidden attribute on its root. */
488
- [data-component~="ui-badge"][hidden][data-v-8ef5da57] {
515
+ [data-component~="ui-badge"][hidden][data-v-3485e390] {
489
516
  display: none;
490
517
  }
491
518
 
@@ -1539,7 +1566,7 @@ input[data-v-5e151d99]:focus-visible {
1539
1566
  syntax: "*";
1540
1567
  inherits: false;
1541
1568
  }
1542
- [data-component~="ui-combobox"][data-v-069ed42d] {
1569
+ [data-component~="ui-combobox"][data-v-af2537d5] {
1543
1570
  /* Hooks do not inherit, so the parts below read them from the root. */
1544
1571
  --_ui-combobox-label-text: var(--ui-combobox-label-text);
1545
1572
  --_ui-combobox-label-font-size: var(--ui-combobox-label-font-size);
@@ -1564,20 +1591,20 @@ input[data-v-5e151d99]:focus-visible {
1564
1591
  color: var(--ui-text-primary);
1565
1592
  font: inherit;
1566
1593
  }
1567
- label[data-v-069ed42d] {
1594
+ label[data-v-af2537d5] {
1568
1595
  color: var(--_ui-combobox-label-text, var(--ui-text-primary));
1569
1596
  font-size: var(--_ui-combobox-label-font-size, var(--ui-font-size-sm));
1570
1597
  font-weight: 500;
1571
1598
  }
1572
1599
  /* The field and anything that annotates it sit on one row; the help button is beside the box,
1573
1600
  not inside it, because a control's box holds its value. */
1574
- .control[data-v-069ed42d] {
1601
+ .control[data-v-af2537d5] {
1575
1602
  display: flex;
1576
1603
  align-items: center;
1577
1604
  gap: var(--ui-space-2);
1578
1605
  min-inline-size: 0;
1579
1606
  }
1580
- .field[data-v-069ed42d] {
1607
+ .field[data-v-af2537d5] {
1581
1608
  flex: 1 1 auto;
1582
1609
  display: flex;
1583
1610
  min-inline-size: 0;
@@ -1589,14 +1616,14 @@ label[data-v-069ed42d] {
1589
1616
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
1590
1617
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
1591
1618
  }
1592
- .field[data-v-069ed42d]:focus-within {
1619
+ .field[data-v-af2537d5]:focus-within {
1593
1620
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
1594
1621
  box-shadow:
1595
1622
  var(--ui-control-inset),
1596
1623
  var(--ui-control-focus-halo-shadow);
1597
1624
  }
1598
1625
  /* A ghost icon button: the affordance is the mark, not a box around it. */
1599
- .help[data-v-069ed42d] {
1626
+ .help[data-v-af2537d5] {
1600
1627
  flex: none;
1601
1628
  display: inline-flex;
1602
1629
  align-items: center;
@@ -1613,28 +1640,28 @@ label[data-v-069ed42d] {
1613
1640
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
1614
1641
  color var(--ui-motion-fast) var(--ui-motion-ease);
1615
1642
  }
1616
- .help[data-v-069ed42d]:hover:enabled,
1617
- .help[aria-expanded="true"][data-v-069ed42d] {
1643
+ .help[data-v-af2537d5]:hover:enabled,
1644
+ .help[aria-expanded="true"][data-v-af2537d5] {
1618
1645
  background: color-mix(in srgb, currentColor 8%, transparent);
1619
1646
  color: var(--ui-text-primary);
1620
1647
  }
1621
- .help[data-v-069ed42d]:focus-visible {
1648
+ .help[data-v-af2537d5]:focus-visible {
1622
1649
  outline: none;
1623
1650
  box-shadow: var(--ui-focus-halo);
1624
1651
  }
1625
- .help[data-v-069ed42d]:disabled {
1652
+ .help[data-v-af2537d5]:disabled {
1626
1653
  color: var(--ui-disabled-text);
1627
1654
  cursor: not-allowed;
1628
1655
  }
1629
- .help-icon[data-v-069ed42d] {
1656
+ .help-icon[data-v-af2537d5] {
1630
1657
  inline-size: var(--ui-icon-size-sm);
1631
1658
  block-size: var(--ui-icon-size-sm);
1632
1659
  }
1633
- input[data-v-069ed42d]::selection {
1660
+ input[data-v-af2537d5]::selection {
1634
1661
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
1635
1662
  color: inherit;
1636
1663
  }
1637
- input[data-v-069ed42d] {
1664
+ input[data-v-af2537d5] {
1638
1665
  appearance: none;
1639
1666
  width: 100%;
1640
1667
  min-inline-size: 0;
@@ -1650,20 +1677,20 @@ input[data-v-069ed42d] {
1650
1677
  margin: 0;
1651
1678
  outline: none;
1652
1679
  }
1653
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-069ed42d] {
1680
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-af2537d5] {
1654
1681
  --_row: var(--ui-control-size-sm);
1655
1682
  }
1656
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-069ed42d] {
1683
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-af2537d5] {
1657
1684
  min-block-size: calc(var(--_row) - 2px);
1658
1685
  padding: var(--ui-space-1) var(--ui-space-2);
1659
1686
  font-size: var(--ui-font-size-sm);
1660
1687
  }
1661
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"] input[data-v-069ed42d] {
1688
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"] input[data-v-af2537d5] {
1662
1689
  min-block-size: calc(var(--ui-control-size-lg) - 2px);
1663
1690
  padding: var(--ui-space-3) var(--ui-space-4);
1664
1691
  font-size: var(--ui-font-size-md);
1665
1692
  }
1666
- button[data-v-069ed42d] {
1693
+ button[data-v-af2537d5] {
1667
1694
  appearance: none;
1668
1695
  display: inline-grid;
1669
1696
  place-items: center;
@@ -1678,35 +1705,35 @@ button[data-v-069ed42d] {
1678
1705
  padding: 0 var(--ui-space-1);
1679
1706
  cursor: pointer;
1680
1707
  }
1681
- .affordance-icon[data-v-069ed42d] {
1708
+ .affordance-icon[data-v-af2537d5] {
1682
1709
  display: block;
1683
1710
  inline-size: var(--ui-icon-size-sm);
1684
1711
  block-size: var(--ui-icon-size-sm);
1685
1712
  }
1686
- button[data-v-069ed42d]:hover:enabled {
1713
+ button[data-v-af2537d5]:hover:enabled {
1687
1714
  background: var(--ui-surface-muted);
1688
1715
  color: var(--ui-text-primary);
1689
1716
  }
1690
- button[data-v-069ed42d]:focus-visible {
1717
+ button[data-v-af2537d5]:focus-visible {
1691
1718
  outline: none;
1692
1719
  background: var(--ui-surface-muted);
1693
1720
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
1694
1721
  }
1695
- input[data-v-069ed42d]:disabled, button[data-v-069ed42d]:disabled {
1722
+ input[data-v-af2537d5]:disabled, button[data-v-af2537d5]:disabled {
1696
1723
  color: var(--ui-disabled-text);
1697
1724
  cursor: not-allowed;
1698
1725
  }
1699
- .field[data-v-069ed42d]:has(input:disabled) {
1726
+ .field[data-v-af2537d5]:has(input:disabled) {
1700
1727
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
1701
1728
  }
1702
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-069ed42d],
1703
- [data-component~="ui-combobox"][data-ui-combobox-state~="invalid"] .field[data-v-069ed42d] {
1729
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-af2537d5],
1730
+ [data-component~="ui-combobox"][data-ui-combobox-state~="invalid"] .field[data-v-af2537d5] {
1704
1731
  border-color: var(
1705
1732
  --_ui-combobox-invalid-border,
1706
1733
  var(--ui-field-danger, var(--ui-danger-solid, var(--ui-accent-active)))
1707
1734
  );
1708
1735
  }
1709
- .popup[data-v-069ed42d] {
1736
+ .popup[data-v-af2537d5] {
1710
1737
  box-sizing: border-box;
1711
1738
  min-inline-size: 12rem;
1712
1739
  max-inline-size: calc(100vw - 1rem);
@@ -1727,57 +1754,57 @@ input[data-v-069ed42d]:disabled, button[data-v-069ed42d]:disabled {
1727
1754
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
1728
1755
  );
1729
1756
  }
1730
- [hidden][data-v-069ed42d] {
1757
+ [hidden][data-v-af2537d5] {
1731
1758
  display: none;
1732
1759
  }
1733
- .option[data-v-069ed42d] {
1760
+ .option[data-v-af2537d5] {
1734
1761
  padding: var(--ui-space-2) var(--ui-space-3);
1735
1762
  border-radius: var(--ui-radius-sm);
1736
1763
  cursor: pointer;
1737
1764
  overflow-wrap: anywhere;
1738
1765
  }
1739
- .option[data-v-069ed42d]:hover, .option.active[data-v-069ed42d] {
1766
+ .option[data-v-af2537d5]:hover, .option.active[data-v-af2537d5] {
1740
1767
  background: var(--ui-surface-muted);
1741
1768
  outline: 1px solid var(--ui-focus-ring);
1742
1769
  outline-offset: -1px;
1743
1770
  }
1744
- .option[aria-disabled="true"][data-v-069ed42d] {
1771
+ .option[aria-disabled="true"][data-v-af2537d5] {
1745
1772
  color: var(--ui-disabled-text);
1746
1773
  cursor: not-allowed;
1747
1774
  }
1748
- .primary[data-v-069ed42d] {
1775
+ .primary[data-v-af2537d5] {
1749
1776
  display: block;
1750
1777
  color: var(--_ui-combobox-option-text, var(--ui-text-primary));
1751
1778
  font-weight: 500;
1752
1779
  }
1753
1780
  /* A row with a tag or a description: the label and its tag on one line, the description under them. */
1754
- .detail[data-v-069ed42d] {
1781
+ .detail[data-v-af2537d5] {
1755
1782
  display: grid;
1756
1783
  gap: var(--ui-space-0-5);
1757
1784
  min-inline-size: 0;
1758
1785
  }
1759
- .line[data-v-069ed42d] {
1786
+ .line[data-v-af2537d5] {
1760
1787
  display: flex;
1761
1788
  flex-wrap: wrap;
1762
1789
  align-items: center;
1763
1790
  gap: var(--ui-space-2);
1764
1791
  }
1765
- .description[data-v-069ed42d] {
1792
+ .description[data-v-af2537d5] {
1766
1793
  color: var(--ui-text-muted);
1767
1794
  font-size: var(--ui-font-size-sm);
1768
1795
  line-height: var(--ui-line-height-md);
1769
1796
  }
1770
- .message[data-v-069ed42d], .group[data-v-069ed42d] {
1797
+ .message[data-v-af2537d5], .group[data-v-af2537d5] {
1771
1798
  color: var(--_ui-combobox-message-text, var(--ui-text-secondary));
1772
1799
  font-weight: 400;
1773
1800
  font-size: var(--ui-font-size-sm);
1774
1801
  line-height: var(--ui-line-height-md);
1775
1802
  overflow-wrap: anywhere;
1776
1803
  }
1777
- .group[data-v-069ed42d], .popup .message[data-v-069ed42d] {
1804
+ .group[data-v-af2537d5], .popup .message[data-v-af2537d5] {
1778
1805
  padding: var(--ui-space-2) var(--ui-space-3);
1779
1806
  }
1780
- .sr-only[data-v-069ed42d] {
1807
+ .sr-only[data-v-af2537d5] {
1781
1808
  position: absolute;
1782
1809
  inline-size: 1px;
1783
1810
  block-size: 1px;
@@ -1786,24 +1813,24 @@ input[data-v-069ed42d]:disabled, button[data-v-069ed42d]:disabled {
1786
1813
  white-space: nowrap;
1787
1814
  }
1788
1815
  @media (pointer: coarse) {
1789
- button[data-v-069ed42d] {
1816
+ button[data-v-af2537d5] {
1790
1817
  min-inline-size: 2.75rem;
1791
1818
  min-block-size: 2.75rem;
1792
1819
  }
1793
1820
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
1794
1821
  body-size text: below 16px, iOS zooms the page into the focused field. */
1795
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-069ed42d] {
1822
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"][data-v-af2537d5] {
1796
1823
  --_row: var(--ui-control-min-block-size);
1797
1824
  }
1798
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-069ed42d] {
1825
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-af2537d5] {
1799
1826
  font-size: inherit;
1800
1827
  }
1801
1828
  }
1802
1829
  @media (forced-colors: active) {
1803
- .field[data-v-069ed42d], .popup[data-v-069ed42d] {
1830
+ .field[data-v-af2537d5], .popup[data-v-af2537d5] {
1804
1831
  border-color: CanvasText;
1805
1832
  }
1806
- .option.active[data-v-069ed42d] {
1833
+ .option.active[data-v-af2537d5] {
1807
1834
  outline-color: Highlight;
1808
1835
  }
1809
1836
  }
@@ -1811,12 +1838,12 @@ button[data-v-069ed42d] {
1811
1838
  /* Multiple mode: every option carries a checkbox, so a list that takes several answers says so
1812
1839
  before anything is picked. aria-selected is the state; this draws it.
1813
1840
  Longhands, not shorthands: lowering drops a shorthand that omits a component. */
1814
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-069ed42d] {
1841
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-af2537d5] {
1815
1842
  display: flex;
1816
1843
  gap: var(--ui-space-2);
1817
1844
  align-items: center;
1818
1845
  }
1819
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-069ed42d]::before {
1846
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .option[data-v-af2537d5]::before {
1820
1847
  content: "";
1821
1848
  flex: none;
1822
1849
  inline-size: 1.125rem;
@@ -1831,7 +1858,7 @@ button[data-v-069ed42d] {
1831
1858
  background-size: 0.7rem;
1832
1859
  }
1833
1860
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"]
1834
- .option[aria-selected="true"][data-v-069ed42d]::before {
1861
+ .option[aria-selected="true"][data-v-af2537d5]::before {
1835
1862
  border-color: var(--ui-accent-solid);
1836
1863
  background-color: var(--ui-accent-solid);
1837
1864
  background-image: var(
@@ -1841,14 +1868,14 @@ button[data-v-069ed42d] {
1841
1868
  }
1842
1869
 
1843
1870
  /* Multiple mode: chips wrap before the cursor on one flexible field line. */
1844
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-069ed42d] {
1871
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-af2537d5] {
1845
1872
  flex-wrap: wrap;
1846
1873
  align-items: center;
1847
1874
  gap: var(--ui-space-1);
1848
1875
  min-block-size: var(--_ui-combobox-item-min-block-size, 2.5rem);
1849
1876
  padding: var(--ui-space-1);
1850
1877
  }
1851
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-069ed42d] {
1878
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-af2537d5] {
1852
1879
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
1853
1880
  width: auto;
1854
1881
  min-block-size: 1.75rem;
@@ -1856,25 +1883,25 @@ button[data-v-069ed42d] {
1856
1883
  }
1857
1884
  /* A small multiple field starts at the small control height; chosen items still wrap it taller. */
1858
1885
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"]
1859
- .field[data-v-069ed42d] {
1886
+ .field[data-v-af2537d5] {
1860
1887
  min-block-size: 0;
1861
1888
  padding: var(--ui-space-0-5);
1862
1889
  }
1863
1890
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"]
1864
- input[data-v-069ed42d] {
1891
+ input[data-v-af2537d5] {
1865
1892
  min-block-size: calc(var(--_row) - 2px - 2 * var(--ui-space-0-5));
1866
1893
  padding: 0 var(--ui-space-1);
1867
1894
  }
1868
1895
  /* A large multiple field starts at the large control height, as sm starts at the small one. */
1869
1896
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"]
1870
- .field[data-v-069ed42d] {
1897
+ .field[data-v-af2537d5] {
1871
1898
  min-block-size: 0;
1872
1899
  }
1873
1900
  [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"][data-component~="ui-combobox"][data-ui-combobox-state~="size=lg"]
1874
- input[data-v-069ed42d] {
1901
+ input[data-v-af2537d5] {
1875
1902
  min-block-size: calc(var(--ui-control-size-lg) - 2px - 2 * var(--ui-space-1));
1876
1903
  }
1877
- .item[data-v-069ed42d] {
1904
+ .item[data-v-af2537d5] {
1878
1905
  appearance: none;
1879
1906
  display: inline-flex;
1880
1907
  min-inline-size: 0;
@@ -1888,16 +1915,16 @@ button[data-v-069ed42d] {
1888
1915
  font: inherit;
1889
1916
  cursor: default;
1890
1917
  }
1891
- .item[data-v-069ed42d]:focus-visible {
1918
+ .item[data-v-af2537d5]:focus-visible {
1892
1919
  outline: 2px solid var(--ui-focus-ring);
1893
1920
  outline-offset: 1px;
1894
1921
  }
1895
- .item[data-v-069ed42d]:disabled {
1922
+ .item[data-v-af2537d5]:disabled {
1896
1923
  opacity: 0.6;
1897
1924
  }
1898
1925
 
1899
1926
  /* A component that sets its display still honours the hidden attribute on its root. */
1900
- [data-component~="ui-combobox"][hidden][data-v-069ed42d] {
1927
+ [data-component~="ui-combobox"][hidden][data-v-af2537d5] {
1901
1928
  display: none;
1902
1929
  }
1903
1930
 
@@ -8187,7 +8214,7 @@ html[data-ui-input-modality="touch"]
8187
8214
  position: relative;
8188
8215
  }
8189
8216
 
8190
- .looma-editor .ProseMirror > .looma-active-block::before {
8217
+ .looma-editor .ProseMirror > .looma-active-block:not(.is-editor-empty)::before {
8191
8218
  position: absolute;
8192
8219
  z-index: 1;
8193
8220
  inset-block: 0;