@cirthcss/cirth 0.10.0 → 0.12.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.
package/README.md CHANGED
@@ -55,8 +55,8 @@ Include one stylesheet and write ordinary semantic HTML.
55
55
  ```html
56
56
  <link
57
57
  rel="stylesheet"
58
- href="https://cdn.jsdelivr.net/npm/@cirthcss/cirth@0.10.0/dist/cirth.min.css"
59
- integrity="sha384-eryxoPjA1vogVlspjzxHv7EDws0Ns2llZpU+nFSO6MKh58+TqPrpTxm/nBZcjAuE"
58
+ href="https://cdn.jsdelivr.net/npm/@cirthcss/cirth@0.12.0/dist/cirth.min.css"
59
+ integrity="sha384-g4j2ojPkWM2tpFfoHS/bGPrb4gS2JFU8QOLuDOtXauCZQ9f7yPhXR0KYxcGK80jf"
60
60
  crossorigin="anonymous">
61
61
  ```
62
62
 
@@ -250,8 +250,8 @@ npm run docs:dev
250
250
  [Meter](docs/src/pages/components/meter.md) ·
251
251
  [Modal](docs/src/pages/components/modal.md) ·
252
252
  [Nav](docs/src/pages/components/nav.md) ·
253
- [Progress](docs/src/pages/components/progress.md) ·
254
- [Tooltip](docs/src/pages/components/tooltip.md)
253
+ [Popover](docs/src/pages/components/popover.md) ·
254
+ [Progress](docs/src/pages/components/progress.md)
255
255
  - **Utilities** —
256
256
  [Accessibility](docs/src/pages/utilities/accessibility.md) ·
257
257
  [High contrast](docs/src/pages/utilities/high-contrast.md) ·
@@ -286,20 +286,38 @@ npm pack --dry-run
286
286
  ## Browser Support
287
287
 
288
288
  Cirth is designed and tested for the latest stable Chrome, Edge, Firefox,
289
- and Safari releases. The compiled CSS is processed with Lightning CSS
290
- against this Browserslist target:
289
+ and Safari releases, on desktop and mobile. The compiled CSS is processed
290
+ with Lightning CSS against this Browserslist target:
291
291
 
292
292
  ```json
293
293
  [
294
- "Chrome >= 111",
295
- "Edge >= 111",
296
- "Firefox >= 113",
297
- "Safari >= 15.4",
298
- "iOS >= 15.4"
294
+ "Chrome >= 123",
295
+ "ChromeAndroid >= 123",
296
+ "Edge >= 123",
297
+ "Firefox >= 130",
298
+ "FirefoxAndroid >= 130",
299
+ "iOS >= 18.2",
300
+ "Opera >= 109",
301
+ "OperaMobile >= 73",
302
+ "Safari >= 18.2",
303
+ "Samsung >= 27"
299
304
  ]
300
305
  ```
301
306
 
302
- No version of Internet Explorer is supported.
307
+ Opera 109 and Samsung Internet 27 are the releases built on the same
308
+ Chromium as Chrome 123, so every entry above describes one engine floor,
309
+ not ten independent ones. Together they account for roughly 78% of global
310
+ browser usage, and the number rises on its own as old versions retire.
311
+
312
+ The floor is set by what the library needs, not by age: `popover`,
313
+ `@starting-style`, `transition-behavior: allow-discrete` and
314
+ `scrollbar-gutter` are what let components open, close and animate
315
+ without JavaScript, and `:has()`, `color-mix()` and `light-dark()` are
316
+ what let the theme express relationships instead of baking them.
317
+
318
+ No version of Internet Explorer is supported, and neither is the legacy
319
+ Android Browser — on any current Android device that name refers to
320
+ Chrome, which `ChromeAndroid` already covers.
303
321
 
304
322
  ## Design principles
305
323
 
@@ -10,6 +10,7 @@
10
10
  }
11
11
 
12
12
  :where(:root), :where(:host) {
13
+ scrollbar-gutter: stable;
13
14
  -webkit-tap-highlight-color: transparent;
14
15
  -webkit-text-size-adjust: 100%;
15
16
  -moz-text-size-adjust: 100%;
@@ -236,6 +237,7 @@ button, [type="submit"], [type="reset"], [type="button"], [role="button"] {
236
237
  --cirth-color: var(--cirth-primary-inverse);
237
238
  --cirth-box-shadow: var(--cirth-button-box-shadow, 0 0 0 #0000);
238
239
  max-width: 100%;
240
+ min-block-size: calc(var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2);
239
241
  padding: var(--cirth-form-element-spacing-vertical) var(--cirth-form-element-spacing-horizontal);
240
242
  border: var(--cirth-border-width) solid var(--cirth-border-color);
241
243
  border-radius: var(--cirth-border-radius);
@@ -260,6 +262,7 @@ button, [type="submit"], [type="reset"], [type="button"], [role="button"] {
260
262
  --cirth-color: var(--cirth-primary-inverse);
261
263
  --cirth-box-shadow: var(--cirth-button-box-shadow, 0 0 0 #0000);
262
264
  max-width: 100%;
265
+ min-block-size: calc(var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2);
263
266
  padding: var(--cirth-form-element-spacing-vertical) var(--cirth-form-element-spacing-horizontal);
264
267
  border: var(--cirth-border-width) solid var(--cirth-border-color);
265
268
  border-radius: var(--cirth-border-radius);
@@ -539,6 +542,10 @@ input:not([type="checkbox"], [type="radio"], [type="range"]) {
539
542
  height: calc(var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2);
540
543
  }
541
544
 
545
+ select, textarea {
546
+ min-block-size: calc(var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2);
547
+ }
548
+
542
549
  fieldset {
543
550
  width: 100%;
544
551
  margin: 0;
@@ -685,6 +692,10 @@ textarea {
685
692
  display: block;
686
693
  }
687
694
 
695
+ textarea:not([rows]) {
696
+ min-block-size: calc(4lh + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2);
697
+ }
698
+
688
699
  textarea:is([aria-invalid], :user-invalid:not([aria-invalid], [type="range"]):not(select:focus)) {
689
700
  --cirth-icon-height: calc(var(--cirth-size-4) * var(--cirth-line-height) +
690
701
  var(--cirth-form-element-spacing-vertical) * 2 +
@@ -729,14 +740,6 @@ label:has([type="checkbox"], [type="radio"]) {
729
740
  margin-inline-end: .5em;
730
741
  }
731
742
 
732
- [type="checkbox"]::-ms-check {
733
- display: none;
734
- }
735
-
736
- [type="radio"]::-ms-check {
737
- display: none;
738
- }
739
-
740
743
  [type="checkbox"]:checked, [type="checkbox"]:checked:active, [type="checkbox"]:checked:focus, [type="radio"]:checked, [type="radio"]:checked:active, [type="radio"]:checked:focus {
741
744
  --cirth-background-color: var(--cirth-primary-background);
742
745
  --cirth-border-color: var(--cirth-primary-border);
@@ -930,6 +933,7 @@ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type
930
933
  }
931
934
 
932
935
  [type="file"]::file-selector-button {
936
+ min-block-size: 0;
933
937
  padding: calc(var(--cirth-form-element-spacing-vertical) * .5) var(--cirth-form-element-spacing-horizontal);
934
938
  margin-inline-end: calc(var(--cirth-spacing) / 2);
935
939
  }
@@ -967,14 +971,6 @@ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type
967
971
  transition: background-color var(--cirth-transition), box-shadow var(--cirth-transition);
968
972
  }
969
973
 
970
- [type="range"]::-ms-track {
971
- border-radius: var(--cirth-border-radius);
972
- background-color: var(--cirth-range-border-color);
973
- width: 100%;
974
- height: .375rem;
975
- transition: background-color var(--cirth-transition), box-shadow var(--cirth-transition);
976
- }
977
-
978
974
  [type="range"]::-webkit-slider-thumb {
979
975
  -webkit-appearance: none;
980
976
  border: var(--cirth-border-width-2) solid var(--cirth-range-thumb-border-color);
@@ -988,19 +984,6 @@ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type
988
984
  }
989
985
 
990
986
  [type="range"]::-moz-range-thumb {
991
- -webkit-appearance: none;
992
- border: var(--cirth-border-width-2) solid var(--cirth-range-thumb-border-color);
993
- background-color: var(--cirth-range-thumb-color);
994
- cursor: pointer;
995
- width: 1.25rem;
996
- height: 1.25rem;
997
- transition: background-color var(--cirth-transition), transform var(--cirth-transition);
998
- border-radius: 50%;
999
- margin-top: -.4375rem;
1000
- }
1001
-
1002
- [type="range"]::-ms-thumb {
1003
- -webkit-appearance: none;
1004
987
  border: var(--cirth-border-width-2) solid var(--cirth-range-thumb-border-color);
1005
988
  background-color: var(--cirth-range-thumb-color);
1006
989
  cursor: pointer;
@@ -1024,10 +1007,6 @@ input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type
1024
1007
  transform: scale(1.25);
1025
1008
  }
1026
1009
 
1027
- [type="range"]:active::-ms-thumb {
1028
- transform: scale(1.25);
1029
- }
1030
-
1031
1010
  input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"])[type="search"] {
1032
1011
  background-image: var(--cirth-icon-search);
1033
1012
  background-position: center left var(--cirth-form-element-spacing-horizontal);
@@ -1081,10 +1060,6 @@ details summary::marker {
1081
1060
  display: none;
1082
1061
  }
1083
1062
 
1084
- details summary::-moz-list-bullet {
1085
- list-style-type: none;
1086
- }
1087
-
1088
1063
  details summary:after {
1089
1064
  width: var(--cirth-size-4);
1090
1065
  height: var(--cirth-size-4);
@@ -1442,17 +1417,14 @@ meter:-moz-meter-sub-sub-optimum::-moz-meter-bar {
1442
1417
  background: var(--cirth-meter-even-less-good-color);
1443
1418
  }
1444
1419
 
1445
- :root, :host {
1446
- --cirth-scrollbar-width: 0px;
1447
- }
1448
-
1449
1420
  dialog {
1421
+ opacity: 0;
1422
+ transition: opacity var(--cirth-transition), display var(--cirth-transition) allow-discrete, overlay var(--cirth-transition) allow-discrete;
1450
1423
  z-index: var(--cirth-z-index-modal);
1451
1424
  width: inherit;
1452
1425
  min-width: 100%;
1453
1426
  height: inherit;
1454
1427
  min-height: 100%;
1455
- -webkit-backdrop-filter: var(--cirth-modal-overlay-backdrop-filter);
1456
1428
  backdrop-filter: var(--cirth-modal-overlay-backdrop-filter);
1457
1429
  background-color: var(--cirth-modal-overlay-background-color);
1458
1430
  color: var(--cirth-color);
@@ -1465,7 +1437,25 @@ dialog {
1465
1437
  inset: 0;
1466
1438
  }
1467
1439
 
1440
+ dialog[open] {
1441
+ opacity: 1;
1442
+ }
1443
+
1444
+ @starting-style {
1445
+ dialog[open] {
1446
+ opacity: 0;
1447
+ }
1448
+ }
1449
+
1450
+ @starting-style {
1451
+ dialog[open] > article {
1452
+ opacity: 0;
1453
+ transform: translateY(-100%);
1454
+ }
1455
+ }
1456
+
1468
1457
  dialog > article {
1458
+ transition: opacity var(--cirth-transition), transform var(--cirth-transition);
1469
1459
  width: 100%;
1470
1460
  max-height: calc(100vh - var(--cirth-spacing) * 2);
1471
1461
  max-height: calc(100dvh - var(--cirth-spacing) * 2);
@@ -1473,13 +1463,13 @@ dialog > article {
1473
1463
  overflow: auto;
1474
1464
  }
1475
1465
 
1476
- @media (min-width: 576px) {
1466
+ @media (width >= 576px) {
1477
1467
  dialog > article {
1478
1468
  max-width: 510px;
1479
1469
  }
1480
1470
  }
1481
1471
 
1482
- @media (min-width: 768px) {
1472
+ @media (width >= 768px) {
1483
1473
  dialog > article {
1484
1474
  max-width: 700px;
1485
1475
  }
@@ -1490,7 +1480,7 @@ dialog > article > header > * {
1490
1480
  }
1491
1481
 
1492
1482
  dialog > article > header :is(a, button)[rel="prev"] {
1493
- margin: 0;
1483
+ margin: calc(calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2) * -1);
1494
1484
  float: right;
1495
1485
  margin-inline-start: var(--cirth-spacing);
1496
1486
  padding: 0;
@@ -1509,10 +1499,11 @@ dialog > article > footer button:not(:first-of-type), dialog > article > footer
1509
1499
  }
1510
1500
 
1511
1501
  dialog > article :is(a, button)[rel="prev"] {
1512
- width: var(--cirth-size-4);
1513
- height: var(--cirth-size-4);
1514
- margin-top: calc(var(--cirth-spacing) * -1);
1515
- margin-bottom: var(--cirth-spacing);
1502
+ width: calc(var(--cirth-size-4) + calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2) * 2);
1503
+ height: calc(var(--cirth-size-4) + calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2) * 2);
1504
+ margin-top: calc(var(--cirth-spacing) * -1 - calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2));
1505
+ margin-right: calc(calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2) * -1);
1506
+ margin-bottom: calc(var(--cirth-spacing) - calc((var(--cirth-size-4) * var(--cirth-line-height) + var(--cirth-form-element-spacing-vertical) * 2 + var(--cirth-border-width) * 2 - var(--cirth-size-4)) / 2));
1516
1507
  background-image: var(--cirth-icon-close);
1517
1508
  background-position: center;
1518
1509
  background-size: auto var(--cirth-size-4);
@@ -1537,6 +1528,10 @@ dialog:not([open]), dialog[open="false"] {
1537
1528
  float: left;
1538
1529
  }
1539
1530
 
1531
+ html:has(dialog:modal) {
1532
+ overflow: hidden;
1533
+ }
1534
+
1540
1535
  :where(nav li):before {
1541
1536
  float: left;
1542
1537
  content: "​";
@@ -1590,6 +1585,7 @@ nav li [role="group"]:not(fieldset), nav li [role="search"] {
1590
1585
 
1591
1586
  nav li button, nav li [role="button"], nav li [type="button"], nav li input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]), nav li select {
1592
1587
  height: auto;
1588
+ min-block-size: var(--cirth-size-6);
1593
1589
  margin-inline: inherit;
1594
1590
  padding: calc(var(--cirth-nav-link-spacing-vertical) - var(--cirth-border-width) * 2) var(--cirth-nav-link-spacing-horizontal);
1595
1591
  margin-bottom: 0;
@@ -1644,6 +1640,35 @@ aside li [role="button"] {
1644
1640
  margin: inherit;
1645
1641
  }
1646
1642
 
1643
+ :is([popover=""], [popover="auto"], [popover="hint"]):not(dialog) {
1644
+ --cirth-popover-display: block;
1645
+ display: none;
1646
+ }
1647
+
1648
+ :is([popover=""], [popover="auto"], [popover="hint"]):not(dialog):popover-open {
1649
+ display: var(--cirth-popover-display);
1650
+ max-width: var(--cirth-popover-max-width);
1651
+ padding: var(--cirth-space-2) var(--cirth-space-3);
1652
+ border: var(--cirth-border-width) solid var(--cirth-popover-border-color);
1653
+ border-radius: var(--cirth-border-radius);
1654
+ background-color: var(--cirth-popover-background-color);
1655
+ box-shadow: var(--cirth-popover-box-shadow);
1656
+ color: var(--cirth-popover-color);
1657
+ transition: opacity var(--cirth-transition), display var(--cirth-transition) allow-discrete, overlay var(--cirth-transition) allow-discrete;
1658
+ margin: auto;
1659
+ inset: 0;
1660
+ }
1661
+
1662
+ @starting-style {
1663
+ :is([popover=""], [popover="auto"], [popover="hint"]):not(dialog):popover-open {
1664
+ opacity: 0;
1665
+ }
1666
+ }
1667
+
1668
+ :is([popover=""], [popover="auto"], [popover="hint"]):not(dialog):not(:popover-open) {
1669
+ opacity: 0;
1670
+ }
1671
+
1647
1672
  progress {
1648
1673
  vertical-align: baseline;
1649
1674
  appearance: none;
@@ -1653,7 +1678,6 @@ progress {
1653
1678
  border: var(--cirth-border-width-1) solid var(--cirth-progress-border-color);
1654
1679
  border-radius: var(--cirth-border-radius);
1655
1680
  background-color: var(--cirth-progress-background-color);
1656
- color: var(--cirth-progress-color);
1657
1681
  display: inline-block;
1658
1682
  overflow: hidden;
1659
1683
  }
@@ -1701,160 +1725,6 @@ progress::-moz-progress-bar {
1701
1725
  }
1702
1726
  }
1703
1727
 
1704
- [data-tooltip] {
1705
- position: relative;
1706
- }
1707
-
1708
- [data-tooltip]:not(a, button, input, [role="button"]) {
1709
- border-bottom: var(--cirth-border-width-1) dotted;
1710
- cursor: help;
1711
- text-decoration: none;
1712
- }
1713
-
1714
- [data-tooltip][data-placement="top"]:before, [data-tooltip][data-placement="top"]:after, [data-tooltip]:before, [data-tooltip]:after {
1715
- z-index: var(--cirth-z-index-tooltip);
1716
- padding: var(--cirth-space-1) var(--cirth-space-2);
1717
- border-radius: var(--cirth-border-radius);
1718
- background: var(--cirth-tooltip-background-color);
1719
- content: attr(data-tooltip);
1720
- color: var(--cirth-tooltip-color);
1721
- font-style: normal;
1722
- font-weight: var(--cirth-font-weight);
1723
- font-size: var(--cirth-font-size-sm);
1724
- text-overflow: ellipsis;
1725
- white-space: nowrap;
1726
- opacity: 0;
1727
- pointer-events: none;
1728
- text-decoration: none;
1729
- display: block;
1730
- position: absolute;
1731
- bottom: 100%;
1732
- left: 50%;
1733
- overflow: hidden;
1734
- transform: translate(-50%, -.25rem);
1735
- }
1736
-
1737
- [data-tooltip][data-placement="top"]:after, [data-tooltip]:after {
1738
- content: "";
1739
- color: var(--cirth-tooltip-background-color);
1740
- background-color: #0000;
1741
- border-top: .3rem solid;
1742
- border-left: .3rem solid #0000;
1743
- border-right: .3rem solid #0000;
1744
- border-radius: 0;
1745
- padding: 0;
1746
- transform: translate(-50%);
1747
- }
1748
-
1749
- [data-tooltip][data-placement="bottom"]:before, [data-tooltip][data-placement="bottom"]:after {
1750
- top: 100%;
1751
- bottom: auto;
1752
- transform: translate(-50%, .25rem);
1753
- }
1754
-
1755
- [data-tooltip][data-placement="bottom"]:after {
1756
- border: .3rem solid #0000;
1757
- border-bottom-color: currentColor;
1758
- transform: translate(-50%, -.3rem);
1759
- }
1760
-
1761
- [data-tooltip][data-placement="left"]:before, [data-tooltip][data-placement="left"]:after {
1762
- inset: 50% 100% auto auto;
1763
- transform: translate(-.25rem, -50%);
1764
- }
1765
-
1766
- [data-tooltip][data-placement="left"]:after {
1767
- border: .3rem solid #0000;
1768
- border-left-color: currentColor;
1769
- transform: translate(.3rem, -50%);
1770
- }
1771
-
1772
- [data-tooltip][data-placement="right"]:before, [data-tooltip][data-placement="right"]:after {
1773
- inset: 50% auto auto 100%;
1774
- transform: translate(.25rem, -50%);
1775
- }
1776
-
1777
- [data-tooltip][data-placement="right"]:after {
1778
- border: .3rem solid #0000;
1779
- border-right-color: currentColor;
1780
- transform: translate(-.3rem, -50%);
1781
- }
1782
-
1783
- [data-tooltip]:focus:before, [data-tooltip]:focus:after, [data-tooltip]:hover:before, [data-tooltip]:hover:after {
1784
- opacity: 1;
1785
- }
1786
-
1787
- @media (hover: hover) and (pointer: fine) {
1788
- [data-tooltip]:focus:before, [data-tooltip]:focus:after, [data-tooltip]:hover:before, [data-tooltip]:hover:after {
1789
- --cirth-tooltip-slide-to: translate(-50%, -.25rem);
1790
- animation-duration: var(--cirth-duration-normal);
1791
- opacity: 0;
1792
- animation-name: tooltip-slide;
1793
- animation-fill-mode: forwards;
1794
- transform: translate(-50%, .75rem);
1795
- }
1796
-
1797
- [data-tooltip]:focus:after, [data-tooltip]:hover:after {
1798
- --cirth-tooltip-caret-slide-to: translate(-50%, 0rem);
1799
- animation-name: tooltip-caret-slide;
1800
- transform: translate(-50%, -.25rem);
1801
- }
1802
-
1803
- [data-tooltip][data-placement="bottom"]:focus:before, [data-tooltip][data-placement="bottom"]:focus:after, [data-tooltip][data-placement="bottom"]:hover:before, [data-tooltip][data-placement="bottom"]:hover:after {
1804
- --cirth-tooltip-slide-to: translate(-50%, .25rem);
1805
- animation-name: tooltip-slide;
1806
- transform: translate(-50%, -.75rem);
1807
- }
1808
-
1809
- [data-tooltip][data-placement="bottom"]:focus:after, [data-tooltip][data-placement="bottom"]:hover:after {
1810
- --cirth-tooltip-caret-slide-to: translate(-50%, -.3rem);
1811
- animation-name: tooltip-caret-slide;
1812
- transform: translate(-50%, -.5rem);
1813
- }
1814
-
1815
- [data-tooltip][data-placement="left"]:focus:before, [data-tooltip][data-placement="left"]:focus:after, [data-tooltip][data-placement="left"]:hover:before, [data-tooltip][data-placement="left"]:hover:after {
1816
- --cirth-tooltip-slide-to: translate(-.25rem, -50%);
1817
- animation-name: tooltip-slide;
1818
- transform: translate(.75rem, -50%);
1819
- }
1820
-
1821
- [data-tooltip][data-placement="left"]:focus:after, [data-tooltip][data-placement="left"]:hover:after {
1822
- --cirth-tooltip-caret-slide-to: translate(.3rem, -50%);
1823
- animation-name: tooltip-caret-slide;
1824
- transform: translate(.05rem, -50%);
1825
- }
1826
-
1827
- [data-tooltip][data-placement="right"]:focus:before, [data-tooltip][data-placement="right"]:focus:after, [data-tooltip][data-placement="right"]:hover:before, [data-tooltip][data-placement="right"]:hover:after {
1828
- --cirth-tooltip-slide-to: translate(.25rem, -50%);
1829
- animation-name: tooltip-slide;
1830
- transform: translate(-.75rem, -50%);
1831
- }
1832
-
1833
- [data-tooltip][data-placement="right"]:focus:after, [data-tooltip][data-placement="right"]:hover:after {
1834
- --cirth-tooltip-caret-slide-to: translate(-.3rem, -50%);
1835
- animation-name: tooltip-caret-slide;
1836
- transform: translate(-.05rem, -50%);
1837
- }
1838
- }
1839
-
1840
- @keyframes tooltip-slide {
1841
- to {
1842
- transform: var(--cirth-tooltip-slide-to);
1843
- opacity: 1;
1844
- }
1845
- }
1846
-
1847
- @keyframes tooltip-caret-slide {
1848
- 50% {
1849
- opacity: 0;
1850
- }
1851
-
1852
- 100% {
1853
- transform: var(--cirth-tooltip-caret-slide-to);
1854
- opacity: 1;
1855
- }
1856
- }
1857
-
1858
1728
  [aria-controls] {
1859
1729
  cursor: pointer;
1860
1730
  }
@@ -1981,7 +1851,6 @@ progress::-moz-progress-bar {
1981
1851
  --cirth-z-index-fixed: 1030;
1982
1852
  --cirth-z-index-modal-backdrop: 1040;
1983
1853
  --cirth-z-index-modal: 1050;
1984
- --cirth-z-index-tooltip: 1070;
1985
1854
  --cirth-font-family: var(--cirth-font-family-sans);
1986
1855
  --cirth-line-height: var(--cirth-line-height-normal);
1987
1856
  --cirth-font-weight: var(--cirth-font-weight-regular);
@@ -2011,20 +1880,25 @@ progress::-moz-progress-bar {
2011
1880
  var(--cirth-form-element-border-color);
2012
1881
  --cirth-meter-background-color: var(--cirth-progress-background-color);
2013
1882
  --cirth-meter-border-color: var(--cirth-progress-border-color);
1883
+ --cirth-popover-background-color: var(--cirth-card-background-color);
1884
+ --cirth-popover-border-color: var(--cirth-muted-border-color);
1885
+ --cirth-popover-color: var(--cirth-color);
1886
+ --cirth-popover-box-shadow: var(--cirth-box-shadow);
1887
+ --cirth-popover-max-width: min(30rem, 100% - var(--cirth-spacing) * 2);
2014
1888
  --cirth-modal-overlay-backdrop-filter: blur(.375rem);
2015
1889
  --cirth-nav-element-spacing-vertical: var(--cirth-space-4);
2016
1890
  --cirth-nav-element-spacing-horizontal: var(--cirth-space-2);
2017
1891
  --cirth-nav-link-spacing-vertical: var(--cirth-space-2);
2018
1892
  --cirth-nav-link-spacing-horizontal: var(--cirth-space-2);
2019
1893
  --cirth-nav-breadcrumb-divider: ">";
2020
- --cirth-icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2021
- --cirth-icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
2022
- --cirth-icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
2023
- --cirth-icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
2024
- --cirth-icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
2025
- --cirth-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
2026
- --cirth-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
2027
- --cirth-icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 146, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
1894
+ --cirth-icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
1895
+ --cirth-icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");
1896
+ --cirth-icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
1897
+ --cirth-icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");
1898
+ --cirth-icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");
1899
+ --cirth-icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
1900
+ --cirth-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 146, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
1901
+ --cirth-icon-loading: url("data:image/svg+xml,%3Csvg fill='none' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 146, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
2028
1902
  }
2029
1903
 
2030
1904
  a {
@@ -2254,10 +2128,8 @@ details summary[role="button"]:after {
2254
2128
  --cirth-progress-background-color: oklch(91.7% .006 264);
2255
2129
  --cirth-progress-border-color: oklch(61.3% .032 264);
2256
2130
  --cirth-progress-color: var(--cirth-primary-background);
2257
- --cirth-tooltip-background-color: var(--cirth-contrast-background);
2258
- --cirth-tooltip-color: var(--cirth-contrast-inverse);
2259
- --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(40, 124, 87)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2260
- --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(189, 47, 33)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2131
+ --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(40, 124, 87)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2132
+ --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(189, 47, 33)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2261
2133
  }
2262
2134
 
2263
2135
  :where([data-theme="light"]) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]), :root:where(:not([data-theme="dark"])) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]), :host(:where(:not([data-theme="dark"]))) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]) {
@@ -2366,10 +2238,8 @@ details summary[role="button"]:after {
2366
2238
  --cirth-progress-background-color: oklch(26.7% .011 264);
2367
2239
  --cirth-progress-border-color: oklch(52.7% .032 264);
2368
2240
  --cirth-progress-color: oklch(61.3% .113 69.35);
2369
- --cirth-tooltip-background-color: var(--cirth-contrast-background);
2370
- --cirth-tooltip-color: var(--cirth-contrast-inverse);
2371
- --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(75, 215, 153)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2372
- --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(246, 160, 145)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2241
+ --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(75, 215, 153)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2242
+ --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(246, 160, 145)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2373
2243
  }
2374
2244
 
2375
2245
  :root:where(:not([data-theme])) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]), :host(:where(:not([data-theme]))) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]) {
@@ -2478,10 +2348,8 @@ details summary[role="button"]:after {
2478
2348
  --cirth-progress-background-color: oklch(26.7% .011 264);
2479
2349
  --cirth-progress-border-color: oklch(52.7% .032 264);
2480
2350
  --cirth-progress-color: oklch(61.3% .113 69.35);
2481
- --cirth-tooltip-background-color: var(--cirth-contrast-background);
2482
- --cirth-tooltip-color: var(--cirth-contrast-inverse);
2483
- --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(75, 215, 153)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2484
- --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(246, 160, 145)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2351
+ --cirth-icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(75, 215, 153)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
2352
+ --cirth-icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(246, 160, 145)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");
2485
2353
  }
2486
2354
 
2487
2355
  :where([data-theme="dark"]) input:is([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [type="file"]) {
@@ -2700,7 +2568,6 @@ progress, [type="checkbox"], [type="radio"], [type="range"] {
2700
2568
  }
2701
2569
 
2702
2570
  dialog {
2703
- -webkit-backdrop-filter: none;
2704
2571
  backdrop-filter: none;
2705
2572
  min-width: 0;
2706
2573
  min-height: 0;