@dodlhuat/basix 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +56 -1
  2. package/css/accordion.scss +86 -87
  3. package/css/alert.scss +137 -137
  4. package/css/button.scss +48 -0
  5. package/css/calendar.scss +957 -0
  6. package/css/card.scss +65 -65
  7. package/css/chart.scss +270 -157
  8. package/css/chat-bubbles.scss +134 -68
  9. package/css/chips.scss +109 -19
  10. package/css/colors.scss +32 -32
  11. package/css/datepicker.scss +336 -336
  12. package/css/defaults.scss +90 -90
  13. package/css/docs.scss +529 -0
  14. package/css/editor.scss +36 -0
  15. package/css/file-uploader.scss +1 -1
  16. package/css/flyout-menu.scss +361 -361
  17. package/css/form.scss +0 -15
  18. package/css/gallery.scss +65 -6
  19. package/css/grid.scss +41 -40
  20. package/css/group-picker.scss +345 -0
  21. package/css/guitar-chords.css +250 -250
  22. package/css/icons.scss +330 -330
  23. package/css/parameters.scss +3 -3
  24. package/css/placeholder.scss +33 -33
  25. package/css/popover.scss +206 -0
  26. package/css/progress.scss +76 -32
  27. package/css/properties.scss +51 -36
  28. package/css/push-menu.scss +302 -174
  29. package/css/reset.scss +39 -39
  30. package/css/scrollbar.scss +62 -5
  31. package/css/sidebar-nav.scss +92 -0
  32. package/css/spinner.scss +65 -65
  33. package/css/stepper.scss +48 -12
  34. package/css/style.css +3159 -254
  35. package/css/style.css.map +1 -1
  36. package/css/style.min.css +1 -1
  37. package/css/style.scss +51 -45
  38. package/css/table.scss +199 -199
  39. package/css/tabs.scss +154 -123
  40. package/css/timeline.scss +83 -38
  41. package/css/timepicker.scss +100 -5
  42. package/css/toast.scss +81 -81
  43. package/css/virtual-dropdown.scss +35 -29
  44. package/js/calendar.js +532 -0
  45. package/js/calendar.ts +706 -0
  46. package/js/chart.js +573 -257
  47. package/js/chart.ts +692 -0
  48. package/js/code-viewer.js +10 -10
  49. package/js/code-viewer.ts +188 -188
  50. package/js/datepicker.ts +627 -627
  51. package/js/docs-nav.js +204 -0
  52. package/js/dropdown.ts +179 -179
  53. package/js/editor.js +50 -6
  54. package/js/editor.ts +483 -444
  55. package/js/file-uploader.js +1 -0
  56. package/js/file-uploader.ts +1 -0
  57. package/js/flyout-menu.js +14 -14
  58. package/js/flyout-menu.ts +249 -249
  59. package/js/form-builder.js +106 -106
  60. package/js/gallery.js +14 -8
  61. package/js/gallery.ts +245 -236
  62. package/js/group-picker.js +342 -0
  63. package/js/group-picker.ts +447 -0
  64. package/js/guitar-chords.js +268 -268
  65. package/js/lazy-loader.js +121 -121
  66. package/js/modal.ts +166 -166
  67. package/js/popover.js +163 -0
  68. package/js/popover.ts +219 -0
  69. package/js/position.js +108 -0
  70. package/js/position.ts +111 -0
  71. package/js/push-menu.js +113 -0
  72. package/js/push-menu.ts +284 -145
  73. package/js/request.js +50 -50
  74. package/js/scroll.ts +47 -47
  75. package/js/scrollbar.js +13 -0
  76. package/js/scrollbar.ts +324 -307
  77. package/js/select.ts +216 -216
  78. package/js/sidebar-nav.js +41 -0
  79. package/js/sidebar-nav.ts +66 -0
  80. package/js/table.ts +452 -452
  81. package/js/tabs.ts +279 -279
  82. package/js/theme.js +17 -6
  83. package/js/theme.ts +234 -224
  84. package/js/toast.ts +137 -137
  85. package/js/tooltip.js +6 -60
  86. package/js/tooltip.ts +184 -251
  87. package/js/tsconfig.json +18 -18
  88. package/js/utils.ts +83 -83
  89. package/js/virtual-dropdown.js +25 -25
  90. package/js/virtual-dropdown.ts +365 -365
  91. package/package.json +39 -39
  92. package/js/index.js +0 -816
  93. package/js/index.ts +0 -987
package/css/style.css CHANGED
@@ -52,17 +52,27 @@ table {
52
52
  --divider: #D8D9E0;
53
53
  --accent-text: #3D63DD;
54
54
  --error: #D64545;
55
+ --error-tint: color-mix(in srgb, #D64545 12%, transparent);
55
56
  --warning: #C28A00;
57
+ --warning-tint: color-mix(in srgb, #C28A00 12%, transparent);
56
58
  --success: #2E8B57;
59
+ --success-tint: color-mix(in srgb, #2E8B57 12%, transparent);
57
60
  --secondary-background: #E7E8EC;
58
61
  --background: #F9F9FB;
62
+ --primary-bg: #F9F9FB;
59
63
  --accent-color: #3D63DD;
60
64
  --accent-color-lighten: #87A5EF;
65
+ --accent-color-tint: color-mix(in srgb, #3D63DD 12%, transparent);
61
66
  --accent-color-text: #D8D9E0;
62
67
  --disabled: #D8D9E0;
63
68
  --primary-dark: #1A1B1F;
64
69
  --primary-light: #F0F1F3;
65
70
  --hover: rgba(0, 0, 0, 0.04);
71
+ --radius-sm: 0.25rem;
72
+ --radius-md: 0.4rem;
73
+ --radius-lg: 0.75rem;
74
+ --radius-xl: 1rem;
75
+ --radius-full: 9999px;
66
76
  }
67
77
 
68
78
  [data-theme=dark] {
@@ -71,12 +81,17 @@ table {
71
81
  --divider: #393A40;
72
82
  --accent-text: #0E496D;
73
83
  --error: #FF6B6B;
84
+ --error-tint: color-mix(in srgb, #FF6B6B 12%, transparent);
74
85
  --warning: #F7B500;
86
+ --warning-tint: color-mix(in srgb, #F7B500 12%, transparent);
75
87
  --success: #5CC689;
88
+ --success-tint: color-mix(in srgb, #5CC689 12%, transparent);
76
89
  --background: #111113;
90
+ --primary-bg: #111113;
77
91
  --secondary-background: #19191B;
78
92
  --accent-color: #1B7BB4;
79
93
  --accent-color-lighten: #175982;
94
+ --accent-color-tint: color-mix(in srgb, #1B7BB4 12%, transparent);
80
95
  --accent-color-text: #B2B3BD;
81
96
  --disabled: #303136;
82
97
  --primary-dark: #0C0C0E;
@@ -214,6 +229,7 @@ code.code .code-content {
214
229
  }
215
230
  .row .column {
216
231
  flex: 1;
232
+ min-width: 0;
217
233
  padding: 1rem;
218
234
  }
219
235
  .row .column.grow-2 {
@@ -987,25 +1003,11 @@ select {
987
1003
  letter-spacing: 0.01em;
988
1004
  }
989
1005
  .form-group .form-hint {
990
- display: flex;
991
- align-items: flex-start;
992
- gap: 0.3rem;
993
1006
  font-size: 0.75rem;
994
1007
  line-height: 1.45;
995
1008
  color: var(--secondary-text);
996
1009
  margin-top: 0.125rem;
997
1010
  }
998
- .form-group .form-hint::before {
999
- content: "";
1000
- display: block;
1001
- width: 4px;
1002
- height: 4px;
1003
- border-radius: 50%;
1004
- background: currentColor;
1005
- flex-shrink: 0;
1006
- margin-top: 0.38em;
1007
- opacity: 0.55;
1008
- }
1009
1011
  .form-group.error input, .form-group.error textarea, .form-group.error select {
1010
1012
  border-color: var(--error);
1011
1013
  background-color: color-mix(in srgb, var(--error) 4%, var(--background));
@@ -1421,7 +1423,7 @@ input.input-lg, textarea.input-lg {
1421
1423
  --track-width: 12px;
1422
1424
  --track-radius: 8px;
1423
1425
  --thumb-min: 28px;
1424
- --track-gap: 8px;
1426
+ --track-gap: 6px;
1425
1427
  }
1426
1428
 
1427
1429
  .scroll-container {
@@ -1460,21 +1462,57 @@ input.input-lg, textarea.input-lg {
1460
1462
  .scroll-container .track {
1461
1463
  position: relative;
1462
1464
  height: 100%;
1463
- border-radius: var(--track-radius);
1464
1465
  width: 100%;
1466
+ border-radius: var(--track-radius);
1467
+ background: transparent;
1465
1468
  pointer-events: auto;
1469
+ transition: background 0.3s ease;
1470
+ }
1471
+ .scroll-container .track:hover {
1472
+ background: var(--hover);
1473
+ }
1474
+ .scroll-container .track:hover .thumb {
1475
+ opacity: 0.7;
1476
+ transform: scaleX(0.7);
1466
1477
  }
1467
1478
  .scroll-container .thumb {
1468
1479
  position: absolute;
1469
- left: 2px;
1470
- right: 2px;
1480
+ left: 0;
1481
+ right: 0;
1471
1482
  top: 0;
1472
1483
  height: 40px;
1473
- border-radius: calc(var(--track-radius) - 2px);
1484
+ border-radius: var(--track-radius);
1474
1485
  background: var(--secondary-text);
1486
+ opacity: 0.2;
1475
1487
  cursor: pointer;
1476
1488
  pointer-events: auto;
1477
1489
  touch-action: none;
1490
+ transform: scaleX(0.3);
1491
+ transform-origin: right center;
1492
+ transition: opacity 0.4s ease, transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.2s ease, box-shadow 0.25s ease;
1493
+ will-change: top, height, transform, opacity;
1494
+ }
1495
+ .scroll-container:hover .thumb {
1496
+ opacity: 0.45;
1497
+ transform: scaleX(0.5);
1498
+ }
1499
+ .scroll-container.is-scrolling .thumb {
1500
+ opacity: 0.6;
1501
+ transform: scaleX(0.5);
1502
+ }
1503
+ .scroll-container.is-dragging {
1504
+ cursor: grabbing;
1505
+ }
1506
+ .scroll-container.is-dragging .track {
1507
+ background: color-mix(in srgb, var(--accent-color) 8%, transparent);
1508
+ }
1509
+ .scroll-container.is-dragging .thumb {
1510
+ opacity: 1;
1511
+ transform: scaleX(1);
1512
+ background: var(--accent-color);
1513
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 18%, transparent);
1514
+ cursor: grabbing;
1515
+ transition: opacity 0.15s ease, transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.15s ease, box-shadow 0.2s ease;
1478
1516
  }
1479
1517
 
1480
1518
  button,
@@ -1519,6 +1557,39 @@ button:disabled,
1519
1557
  opacity: 0.45;
1520
1558
  cursor: not-allowed;
1521
1559
  }
1560
+ button.is-loading,
1561
+ .button.is-loading {
1562
+ pointer-events: none;
1563
+ position: relative;
1564
+ color: transparent !important;
1565
+ }
1566
+ button.is-loading::after,
1567
+ .button.is-loading::after {
1568
+ content: "";
1569
+ position: absolute;
1570
+ width: 1.1em;
1571
+ height: 1.1em;
1572
+ border: 2px solid currentColor;
1573
+ border-top-color: transparent;
1574
+ border-radius: 50%;
1575
+ animation: spinner-rotate 0.8s ease-in-out infinite;
1576
+ color: var(--primary-text);
1577
+ }
1578
+ button.is-loading > *,
1579
+ .button.is-loading > * {
1580
+ visibility: hidden;
1581
+ }
1582
+
1583
+ .button-primary.is-loading::after,
1584
+ button.button-primary.is-loading::after,
1585
+ .button-success.is-loading::after,
1586
+ button.button-success.is-loading::after,
1587
+ .button-warning.is-loading::after,
1588
+ button.button-warning.is-loading::after,
1589
+ .button-error.is-loading::after,
1590
+ button.button-error.is-loading::after {
1591
+ color: var(--background);
1592
+ }
1522
1593
 
1523
1594
  .button-primary,
1524
1595
  button.button-primary {
@@ -1659,6 +1730,16 @@ button.button-error:active:not(:disabled) {
1659
1730
  [data-theme=dark] button.button-error:active:not(:disabled) {
1660
1731
  background: color-mix(in srgb, var(--error) 70%, white);
1661
1732
  }
1733
+ [data-theme=dark] .button-primary.is-loading::after,
1734
+ [data-theme=dark] button.button-primary.is-loading::after,
1735
+ [data-theme=dark] .button-success.is-loading::after,
1736
+ [data-theme=dark] button.button-success.is-loading::after,
1737
+ [data-theme=dark] .button-warning.is-loading::after,
1738
+ [data-theme=dark] button.button-warning.is-loading::after,
1739
+ [data-theme=dark] .button-error.is-loading::after,
1740
+ [data-theme=dark] button.button-error.is-loading::after {
1741
+ color: var(--primary-text);
1742
+ }
1662
1743
 
1663
1744
  .modal-wrapper {
1664
1745
  position: fixed;
@@ -1763,6 +1844,192 @@ button.button-error:active:not(:disabled) {
1763
1844
  border-radius: 0;
1764
1845
  }
1765
1846
  }
1847
+ .popover {
1848
+ position: fixed;
1849
+ z-index: 900;
1850
+ background: var(--background);
1851
+ border: 1px solid var(--divider);
1852
+ border-radius: 1rem;
1853
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 4px 6px -2px rgba(0, 0, 0, 0.05), 0 12px 24px -4px rgba(0, 0, 0, 0.12);
1854
+ min-width: 160px;
1855
+ max-width: 320px;
1856
+ opacity: 0;
1857
+ pointer-events: none;
1858
+ }
1859
+ .popover[data-placement=top] {
1860
+ transform-origin: bottom center;
1861
+ transform: translateY(6px) scale(0.95);
1862
+ }
1863
+ .popover[data-placement=bottom] {
1864
+ transform-origin: top center;
1865
+ transform: translateY(-6px) scale(0.95);
1866
+ }
1867
+ .popover[data-placement=left] {
1868
+ transform-origin: right center;
1869
+ transform: translateX(6px) scale(0.95);
1870
+ }
1871
+ .popover[data-placement=right] {
1872
+ transform-origin: left center;
1873
+ transform: translateX(-6px) scale(0.95);
1874
+ }
1875
+ .popover[data-placement=bottom][data-align=start] {
1876
+ transform-origin: top left;
1877
+ }
1878
+ .popover[data-placement=bottom][data-align=end] {
1879
+ transform-origin: top right;
1880
+ }
1881
+ .popover[data-placement=top][data-align=start] {
1882
+ transform-origin: bottom left;
1883
+ }
1884
+ .popover[data-placement=top][data-align=end] {
1885
+ transform-origin: bottom right;
1886
+ }
1887
+ .popover {
1888
+ transition: opacity 0.18s ease, transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
1889
+ }
1890
+ .popover.is-open {
1891
+ opacity: 1;
1892
+ pointer-events: auto;
1893
+ transform: none !important;
1894
+ }
1895
+ .popover[data-arrow=true]::before, .popover[data-arrow=true]::after {
1896
+ content: "";
1897
+ position: absolute;
1898
+ width: 0;
1899
+ height: 0;
1900
+ pointer-events: none;
1901
+ }
1902
+ .popover[data-arrow=true][data-placement=bottom]::before {
1903
+ top: -7px;
1904
+ left: var(--popover-arrow-offset, 50%);
1905
+ transform: translateX(-50%);
1906
+ border: 7px solid transparent;
1907
+ border-top-width: 0;
1908
+ border-bottom-color: var(--divider);
1909
+ }
1910
+ .popover[data-arrow=true][data-placement=bottom]::after {
1911
+ top: -6px;
1912
+ left: var(--popover-arrow-offset, 50%);
1913
+ transform: translateX(-50%);
1914
+ border: 6px solid transparent;
1915
+ border-top-width: 0;
1916
+ border-bottom-color: var(--background);
1917
+ }
1918
+ .popover[data-arrow=true][data-placement=top]::before {
1919
+ bottom: -7px;
1920
+ left: var(--popover-arrow-offset, 50%);
1921
+ transform: translateX(-50%);
1922
+ border: 7px solid transparent;
1923
+ border-bottom-width: 0;
1924
+ border-top-color: var(--divider);
1925
+ }
1926
+ .popover[data-arrow=true][data-placement=top]::after {
1927
+ bottom: -6px;
1928
+ left: var(--popover-arrow-offset, 50%);
1929
+ transform: translateX(-50%);
1930
+ border: 6px solid transparent;
1931
+ border-bottom-width: 0;
1932
+ border-top-color: var(--background);
1933
+ }
1934
+ .popover[data-arrow=true][data-placement=right]::before {
1935
+ left: -7px;
1936
+ top: var(--popover-arrow-offset, 50%);
1937
+ transform: translateY(-50%);
1938
+ border: 7px solid transparent;
1939
+ border-left-width: 0;
1940
+ border-right-color: var(--divider);
1941
+ }
1942
+ .popover[data-arrow=true][data-placement=right]::after {
1943
+ left: -6px;
1944
+ top: var(--popover-arrow-offset, 50%);
1945
+ transform: translateY(-50%);
1946
+ border: 6px solid transparent;
1947
+ border-left-width: 0;
1948
+ border-right-color: var(--background);
1949
+ }
1950
+ .popover[data-arrow=true][data-placement=left]::before {
1951
+ right: -7px;
1952
+ top: var(--popover-arrow-offset, 50%);
1953
+ transform: translateY(-50%);
1954
+ border: 7px solid transparent;
1955
+ border-right-width: 0;
1956
+ border-left-color: var(--divider);
1957
+ }
1958
+ .popover[data-arrow=true][data-placement=left]::after {
1959
+ right: -6px;
1960
+ top: var(--popover-arrow-offset, 50%);
1961
+ transform: translateY(-50%);
1962
+ border: 6px solid transparent;
1963
+ border-right-width: 0;
1964
+ border-left-color: var(--background);
1965
+ }
1966
+
1967
+ .popover-header {
1968
+ padding: 0.65rem 1rem;
1969
+ border-bottom: 1px solid var(--divider);
1970
+ font-weight: 600;
1971
+ font-size: 0.875rem;
1972
+ color: var(--primary-text);
1973
+ display: flex;
1974
+ align-items: center;
1975
+ justify-content: space-between;
1976
+ gap: 0.5rem;
1977
+ border-radius: 1rem 1rem 0 0;
1978
+ }
1979
+
1980
+ .popover-body {
1981
+ padding: 0.75rem 1rem;
1982
+ color: var(--primary-text);
1983
+ font-size: 0.875rem;
1984
+ line-height: 1.5;
1985
+ }
1986
+
1987
+ .popover-footer {
1988
+ padding: 0.65rem 1rem;
1989
+ border-top: 1px solid var(--divider);
1990
+ display: flex;
1991
+ justify-content: flex-end;
1992
+ gap: 0.5rem;
1993
+ border-radius: 0 0 1rem 1rem;
1994
+ }
1995
+
1996
+ .popover-menu {
1997
+ padding: 0.375rem 0;
1998
+ }
1999
+ .popover-menu .popover-menu-item {
2000
+ display: flex;
2001
+ align-items: center;
2002
+ gap: 0.6rem;
2003
+ padding: 0.45rem 1rem;
2004
+ font-size: 0.875rem;
2005
+ color: var(--primary-text);
2006
+ cursor: pointer;
2007
+ transition: background 0.12s ease, color 0.12s ease;
2008
+ user-select: none;
2009
+ }
2010
+ .popover-menu .popover-menu-item:hover {
2011
+ background: var(--hover);
2012
+ }
2013
+ .popover-menu .popover-menu-item.is-destructive {
2014
+ color: var(--error);
2015
+ }
2016
+ .popover-menu .popover-menu-item.is-destructive:hover {
2017
+ background: color-mix(in srgb, var(--error) 8%, transparent);
2018
+ }
2019
+ .popover-menu .popover-menu-divider {
2020
+ height: 1px;
2021
+ background: var(--divider);
2022
+ margin: 0.375rem 0;
2023
+ }
2024
+ .popover-menu .popover-menu-label {
2025
+ padding: 0.3rem 1rem 0.2rem;
2026
+ font-size: 0.7rem;
2027
+ font-weight: 600;
2028
+ letter-spacing: 0.06em;
2029
+ text-transform: uppercase;
2030
+ color: var(--secondary-text);
2031
+ }
2032
+
1766
2033
  .placeholder {
1767
2034
  display: inline-block;
1768
2035
  cursor: wait;
@@ -1818,25 +2085,75 @@ button.button-error:active:not(:disabled) {
1818
2085
  background-position: -200% 0;
1819
2086
  }
1820
2087
  }
1821
- .progress-bar {
1822
- background: var(--background);
2088
+ .progress {
2089
+ width: 100%;
2090
+ height: 8px;
2091
+ background: var(--secondary-background);
1823
2092
  border-radius: 0.4rem;
2093
+ overflow: hidden;
1824
2094
  }
1825
- .progress-bar .progress {
2095
+
2096
+ .progress-bar {
2097
+ height: 100%;
1826
2098
  border-radius: 0.4rem;
1827
- background: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, rgba(255, 255, 255, 0.15) 25%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.25) 50%, rgba(255, 255, 255, 0.25) 75%, rgba(255, 255, 255, 0.15) 75%), var(--accent-color);
1828
- background-size: 40px 40px;
1829
- animation: stripes 2.5s linear infinite;
2099
+ background: var(--primary-text);
2100
+ transition: width 0.3s ease;
2101
+ min-width: 0;
2102
+ }
2103
+ .progress-bar.accent {
2104
+ background: var(--accent-color);
2105
+ }
2106
+ .progress-bar.success {
2107
+ background: var(--success);
2108
+ }
2109
+ .progress-bar.warning {
2110
+ background: var(--warning);
2111
+ }
2112
+ .progress-bar.error {
2113
+ background: var(--error);
2114
+ }
2115
+ .progress-bar.animated {
2116
+ width: 40% !important;
2117
+ background: var(--accent-color);
2118
+ animation: progress-indeterminate 1.4s ease-in-out infinite;
1830
2119
  }
1831
2120
 
1832
- @keyframes stripes {
1833
- from {
1834
- background-position: 0 0;
2121
+ @keyframes progress-indeterminate {
2122
+ 0% {
2123
+ transform: translateX(-100%);
1835
2124
  }
1836
- to {
1837
- background-position: 40px 0;
2125
+ 100% {
2126
+ transform: translateX(350%);
2127
+ }
2128
+ }
2129
+ @keyframes skeleton-shimmer {
2130
+ 0% {
2131
+ background-position: 200% 0;
2132
+ }
2133
+ 100% {
2134
+ background-position: -200% 0;
1838
2135
  }
1839
2136
  }
2137
+ .skeleton-avatar, .skeleton-text, .skeleton {
2138
+ background: linear-gradient(90deg, var(--secondary-background) 25%, var(--divider) 50%, var(--secondary-background) 75%);
2139
+ background-size: 200% 100%;
2140
+ animation: skeleton-shimmer 1.5s ease-in-out infinite;
2141
+ border-radius: 0.4rem;
2142
+ display: block;
2143
+ }
2144
+
2145
+ .skeleton-text {
2146
+ height: 0.85em;
2147
+ width: 100%;
2148
+ }
2149
+
2150
+ .skeleton-avatar {
2151
+ width: 40px;
2152
+ height: 40px;
2153
+ border-radius: 50%;
2154
+ flex-shrink: 0;
2155
+ }
2156
+
1840
2157
  .spinner {
1841
2158
  width: 2.5rem;
1842
2159
  height: 2.5rem;
@@ -1963,72 +2280,178 @@ button.button-error:active:not(:disabled) {
1963
2280
  line-height: 1.5;
1964
2281
  }
1965
2282
 
1966
- .push-content {
1967
- transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);
1968
- will-change: transform;
1969
- }
1970
-
1971
- nav {
2283
+ nav.push-menu {
1972
2284
  position: fixed;
1973
2285
  top: 0;
1974
2286
  left: 0;
1975
2287
  width: 280px;
1976
2288
  height: 100%;
2289
+ overflow: hidden;
1977
2290
  transform: translateX(-100%);
1978
- transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
2291
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1);
1979
2292
  z-index: 10;
1980
2293
  }
2294
+ nav.push-menu.pushed {
2295
+ transform: translateX(0);
2296
+ box-shadow: 8px 0 32px rgba(0, 0, 0, 0.35);
2297
+ }
1981
2298
 
1982
- nav ul {
1983
- width: 100%;
1984
- height: 100%;
1985
- padding: 4.5rem 0 1rem;
1986
- margin: 0;
1987
- list-style: none;
2299
+ .push-content {
2300
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
2301
+ will-change: transform;
2302
+ }
2303
+ .push-content.pushed {
2304
+ transform: translate3d(280px, 0, 0);
2305
+ }
2306
+
2307
+ .push-menu-panel {
2308
+ position: absolute;
2309
+ inset: 0;
1988
2310
  background: var(--primary-dark);
2311
+ transform: translateX(105%);
2312
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
1989
2313
  overflow-y: auto;
2314
+ overflow-x: hidden;
1990
2315
  -webkit-overflow-scrolling: touch;
2316
+ will-change: transform;
2317
+ }
2318
+ .push-menu-panel.is-active {
2319
+ transform: translateX(0);
2320
+ }
2321
+ .push-menu-panel.is-prev {
2322
+ transform: translateX(-20%);
1991
2323
  }
1992
2324
 
1993
- nav li {
2325
+ .push-menu-panel[data-level="0"] > ul {
2326
+ padding-top: 4.5rem;
2327
+ padding-bottom: 1rem;
1994
2328
  margin: 0;
2329
+ list-style: none;
2330
+ width: 100%;
1995
2331
  }
1996
2332
 
1997
- nav a {
1998
- color: var(--accent-color-text);
1999
- font-size: 0.9rem;
2000
- font-weight: 500;
2001
- letter-spacing: 0.03em;
2002
- text-decoration: none;
2003
- text-transform: uppercase;
2333
+ .push-menu-panel-header {
2004
2334
  display: flex;
2005
2335
  align-items: center;
2006
- padding: 0.85rem 1.5rem;
2007
- transition: background 280ms cubic-bezier(0.4, 0, 0.2, 1), color 160ms ease;
2336
+ gap: 0.75rem;
2337
+ padding: 4.5rem 1.5rem 1rem 1.25rem;
2338
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
2339
+ position: sticky;
2340
+ top: 0;
2341
+ background: var(--primary-dark);
2342
+ z-index: 1;
2343
+ cursor: pointer;
2008
2344
  -webkit-tap-highlight-color: transparent;
2345
+ transition: background 160ms ease;
2346
+ }
2347
+ .push-menu-panel-header:hover {
2348
+ background: rgba(255, 255, 255, 0.05);
2009
2349
  }
2010
- nav a:hover {
2350
+ .push-menu-panel-header:hover .push-menu-back {
2351
+ background: rgba(255, 255, 255, 0.14);
2011
2352
  color: #fff;
2012
- background: rgba(255, 255, 255, 0.06);
2013
2353
  }
2014
- nav a:active {
2015
- background: rgba(255, 255, 255, 0.1);
2354
+ .push-menu-panel-header:active {
2355
+ background: rgba(255, 255, 255, 0.08);
2356
+ }
2357
+ .push-menu-panel-header:active .push-menu-back {
2358
+ transform: scale(0.92);
2016
2359
  }
2017
2360
 
2018
- nav li + li a {
2019
- border-top: 1px solid rgba(255, 255, 255, 0.06);
2361
+ .push-menu-back {
2362
+ display: flex;
2363
+ align-items: center;
2364
+ justify-content: center;
2365
+ flex-shrink: 0;
2366
+ width: 1.75rem;
2367
+ height: 1.75rem;
2368
+ border-radius: 0.3rem;
2369
+ border: none;
2370
+ background: rgba(255, 255, 255, 0.08);
2371
+ color: rgba(255, 255, 255, 0.65);
2372
+ pointer-events: none;
2373
+ transition: background 160ms ease, color 160ms ease, transform 160ms ease;
2020
2374
  }
2021
2375
 
2022
- .navigation-controls {
2023
- line-height: inherit;
2376
+ .push-menu-panel-title {
2377
+ color: rgba(255, 255, 255, 0.45);
2378
+ font-size: 0.7rem;
2379
+ font-weight: 700;
2380
+ letter-spacing: 0.12em;
2381
+ text-transform: uppercase;
2382
+ white-space: nowrap;
2383
+ overflow: hidden;
2384
+ text-overflow: ellipsis;
2024
2385
  }
2025
- .navigation-controls label {
2026
- display: block;
2027
- width: 1.5rem;
2028
- height: 100%;
2029
- color: var(--primary-text);
2030
- text-align: center;
2031
- top: 0;
2386
+
2387
+ .push-menu-panel:not([data-level="0"]) > ul {
2388
+ padding: 0.5rem 0;
2389
+ margin: 0;
2390
+ list-style: none;
2391
+ width: 100%;
2392
+ }
2393
+
2394
+ nav li {
2395
+ margin: 0;
2396
+ }
2397
+
2398
+ nav a,
2399
+ .push-menu-item {
2400
+ color: var(--accent-color-text);
2401
+ font-size: 0.9rem;
2402
+ font-weight: 500;
2403
+ letter-spacing: 0.03em;
2404
+ text-decoration: none;
2405
+ text-transform: uppercase;
2406
+ display: flex;
2407
+ align-items: center;
2408
+ padding: 0.85rem 1.5rem;
2409
+ transition: background 300ms cubic-bezier(0.4, 0, 0.2, 1), color 160ms ease;
2410
+ -webkit-tap-highlight-color: transparent;
2411
+ cursor: pointer;
2412
+ width: 100%;
2413
+ box-sizing: border-box;
2414
+ user-select: none;
2415
+ }
2416
+ nav a:hover,
2417
+ .push-menu-item:hover {
2418
+ color: #fff;
2419
+ background: rgba(255, 255, 255, 0.06);
2420
+ }
2421
+ nav a:active,
2422
+ .push-menu-item:active {
2423
+ background: rgba(255, 255, 255, 0.1);
2424
+ }
2425
+
2426
+ nav li + li a,
2427
+ nav li + li .push-menu-item {
2428
+ border-top: 1px solid rgba(255, 255, 255, 0.055);
2429
+ }
2430
+
2431
+ .push-menu-chevron {
2432
+ margin-left: auto;
2433
+ flex-shrink: 0;
2434
+ display: flex;
2435
+ align-items: center;
2436
+ opacity: 0.35;
2437
+ transition: opacity 160ms ease, transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
2438
+ }
2439
+
2440
+ .push-menu-item:hover .push-menu-chevron {
2441
+ opacity: 0.7;
2442
+ transform: translateX(2px);
2443
+ }
2444
+
2445
+ .navigation-controls {
2446
+ line-height: inherit;
2447
+ }
2448
+ .navigation-controls label {
2449
+ display: block;
2450
+ width: 1.5rem;
2451
+ height: 100%;
2452
+ color: var(--primary-text);
2453
+ text-align: center;
2454
+ top: 0;
2032
2455
  left: 0;
2033
2456
  z-index: 500;
2034
2457
  cursor: pointer;
@@ -2044,7 +2467,7 @@ nav li + li a {
2044
2467
  background: rgba(0, 0, 0, 0.4);
2045
2468
  opacity: 0;
2046
2469
  visibility: hidden;
2047
- transition: opacity 280ms cubic-bezier(0.4, 0, 0.2, 1), visibility 280ms cubic-bezier(0.4, 0, 0.2, 1);
2470
+ transition: opacity 300ms cubic-bezier(0.4, 0, 0.2, 1), visibility 300ms cubic-bezier(0.4, 0, 0.2, 1);
2048
2471
  z-index: 9;
2049
2472
  -webkit-tap-highlight-color: transparent;
2050
2473
  }
@@ -2053,21 +2476,12 @@ nav li + li a {
2053
2476
  visibility: visible;
2054
2477
  }
2055
2478
 
2056
- nav.pushed {
2057
- transform: translateX(0);
2058
- box-shadow: 8px 0 30px rgba(0, 0, 0, 0.3);
2059
- }
2060
-
2061
- .push-content.pushed {
2062
- transform: translate3d(280px, 0, 0);
2063
- }
2064
-
2065
2479
  .main-header {
2066
2480
  position: fixed;
2067
2481
  background: var(--secondary-background);
2068
2482
  width: 100%;
2069
2483
  right: 0;
2070
- transition: width 280ms cubic-bezier(0.4, 0, 0.2, 1), transform 280ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
2484
+ transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1);
2071
2485
  height: 3rem;
2072
2486
  display: flex;
2073
2487
  z-index: 2;
@@ -2503,45 +2917,119 @@ nav.pushed {
2503
2917
  }
2504
2918
  }
2505
2919
 
2920
+ .chips {
2921
+ display: flex;
2922
+ flex-wrap: wrap;
2923
+ gap: 0.35rem;
2924
+ }
2506
2925
  .chips .chip {
2507
- margin: 0 0.25rem 0.2rem 0;
2508
- display: inline-block;
2509
- background: var(--divider);
2510
- padding: 0.3rem 0.8rem;
2926
+ display: inline-flex;
2927
+ align-items: center;
2928
+ gap: 0.35rem;
2929
+ background: var(--secondary-background);
2930
+ color: var(--primary-text);
2931
+ padding: 0.3rem 0.75rem;
2511
2932
  border-radius: 1.6rem;
2512
2933
  font-size: 0.8125rem;
2934
+ font-weight: 500;
2935
+ line-height: 1.4;
2936
+ letter-spacing: 0.01em;
2937
+ white-space: nowrap;
2938
+ border: 1px solid transparent;
2513
2939
  position: relative;
2940
+ transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease;
2514
2941
  }
2515
2942
  .chips .chip.clickable {
2516
2943
  cursor: pointer;
2517
2944
  }
2518
2945
  .chips .chip.clickable:hover {
2519
- filter: brightness(105%);
2946
+ background: var(--divider);
2947
+ }
2948
+ .chips .chip.clickable:active {
2949
+ transform: scale(0.96);
2950
+ }
2951
+ .chips .chip.clickable:focus-visible {
2952
+ outline: none;
2953
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 35%, transparent);
2520
2954
  }
2521
2955
  .chips .chip.closeable {
2522
- padding-right: 2rem;
2956
+ padding-right: 1.8rem;
2523
2957
  }
2524
2958
  .chips .chip.closeable button {
2959
+ position: absolute;
2960
+ right: 0.4rem;
2961
+ top: 50%;
2962
+ transform: translateY(-50%);
2963
+ display: inline-flex;
2964
+ align-items: center;
2965
+ justify-content: center;
2525
2966
  padding: 0;
2526
- background: var(--divider);
2967
+ background: transparent;
2527
2968
  color: var(--secondary-text);
2528
- display: inline-block;
2529
2969
  border: 0;
2530
- height: 1.25rem;
2531
- width: 1.25rem;
2970
+ height: 1.1rem;
2971
+ width: 1.1rem;
2532
2972
  border-radius: 50%;
2533
- margin: 0 -0.25rem 0 0.25rem;
2534
2973
  cursor: pointer;
2535
- position: absolute;
2536
- right: 0.8rem;
2974
+ transition: background 0.15s ease, color 0.15s ease;
2537
2975
  }
2538
2976
  .chips .chip.closeable button:hover {
2539
- filter: brightness(105%);
2977
+ background: color-mix(in srgb, var(--primary-text) 12%, transparent);
2978
+ color: var(--primary-text);
2540
2979
  }
2541
- .chips .chip.closeable button .icon {
2542
- font-size: 0.9rem;
2543
- top: 1px;
2544
- position: relative;
2980
+ .chips .chip.closeable button:active {
2981
+ background: color-mix(in srgb, var(--primary-text) 18%, transparent);
2982
+ }
2983
+ .chips .chip.closeable button .icon,
2984
+ .chips .chip.closeable button .icon-svg {
2985
+ font-size: 0.8rem;
2986
+ width: 0.8rem;
2987
+ height: 0.8rem;
2988
+ }
2989
+ .chips .chip-accent {
2990
+ background: color-mix(in srgb, var(--accent-color) 12%, var(--background));
2991
+ color: var(--accent-color);
2992
+ border-color: color-mix(in srgb, var(--accent-color) 20%, transparent);
2993
+ }
2994
+ .chips .chip-accent.closeable button:hover {
2995
+ background: color-mix(in srgb, var(--accent-color) 15%, transparent);
2996
+ color: var(--accent-color);
2997
+ }
2998
+ .chips .chip-success {
2999
+ background: color-mix(in srgb, var(--success) 12%, var(--background));
3000
+ color: var(--success);
3001
+ border-color: color-mix(in srgb, var(--success) 20%, transparent);
3002
+ }
3003
+ .chips .chip-success.closeable button:hover {
3004
+ background: color-mix(in srgb, var(--success) 15%, transparent);
3005
+ color: var(--success);
3006
+ }
3007
+ .chips .chip-warning {
3008
+ background: color-mix(in srgb, var(--warning) 12%, var(--background));
3009
+ color: var(--warning);
3010
+ border-color: color-mix(in srgb, var(--warning) 20%, transparent);
3011
+ }
3012
+ .chips .chip-warning.closeable button:hover {
3013
+ background: color-mix(in srgb, var(--warning) 15%, transparent);
3014
+ color: var(--warning);
3015
+ }
3016
+ .chips .chip-error {
3017
+ background: color-mix(in srgb, var(--error) 12%, var(--background));
3018
+ color: var(--error);
3019
+ border-color: color-mix(in srgb, var(--error) 20%, transparent);
3020
+ }
3021
+ .chips .chip-error.closeable button:hover {
3022
+ background: color-mix(in srgb, var(--error) 15%, transparent);
3023
+ color: var(--error);
3024
+ }
3025
+ .chips .chip-outline {
3026
+ background: transparent;
3027
+ border-color: var(--divider);
3028
+ color: var(--secondary-text);
3029
+ }
3030
+ .chips .chip-outline.clickable:hover {
3031
+ background: var(--hover);
3032
+ border-color: color-mix(in srgb, var(--divider) 80%, var(--primary-text));
2545
3033
  }
2546
3034
 
2547
3035
  .badge {
@@ -2655,12 +3143,36 @@ nav.pushed {
2655
3143
  box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent-color) 35%, transparent);
2656
3144
  }
2657
3145
  65% {
2658
- box-shadow: 0 0 0 5px transparent;
3146
+ box-shadow: 0 0 0 6px transparent;
2659
3147
  }
2660
3148
  100% {
2661
3149
  box-shadow: 0 0 0 0 transparent;
2662
3150
  }
2663
3151
  }
3152
+ @keyframes stepper-check-in {
3153
+ 0% {
3154
+ transform: scale(0.5);
3155
+ opacity: 0;
3156
+ }
3157
+ 60% {
3158
+ transform: scale(1.15);
3159
+ }
3160
+ 100% {
3161
+ transform: scale(1);
3162
+ opacity: 1;
3163
+ }
3164
+ }
3165
+ @keyframes stepper-complete-pop {
3166
+ 0% {
3167
+ transform: scale(1);
3168
+ }
3169
+ 40% {
3170
+ transform: scale(1.18);
3171
+ }
3172
+ 100% {
3173
+ transform: scale(1);
3174
+ }
3175
+ }
2664
3176
  .stepper {
2665
3177
  display: flex;
2666
3178
  align-items: flex-start;
@@ -2688,7 +3200,7 @@ nav.pushed {
2688
3200
  border: 2px solid var(--divider);
2689
3201
  background: var(--background);
2690
3202
  color: var(--secondary-text);
2691
- transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease;
3203
+ transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
2692
3204
  position: relative;
2693
3205
  z-index: 1;
2694
3206
  }
@@ -2709,7 +3221,7 @@ nav.pushed {
2709
3221
  font-size: 0.8125rem;
2710
3222
  font-weight: 500;
2711
3223
  color: var(--secondary-text);
2712
- transition: color 0.2s ease;
3224
+ transition: color 0.25s ease, font-weight 0.25s ease;
2713
3225
  white-space: nowrap;
2714
3226
  }
2715
3227
 
@@ -2718,6 +3230,7 @@ nav.pushed {
2718
3230
  color: var(--secondary-text);
2719
3231
  opacity: 0.6;
2720
3232
  white-space: nowrap;
3233
+ transition: opacity 0.25s ease;
2721
3234
  }
2722
3235
 
2723
3236
  .stepper-connector {
@@ -2726,6 +3239,7 @@ nav.pushed {
2726
3239
  margin-top: calc(2rem / 2 - 2px / 2);
2727
3240
  min-width: 1rem;
2728
3241
  background: var(--divider);
3242
+ border-radius: 2px;
2729
3243
  position: relative;
2730
3244
  overflow: hidden;
2731
3245
  }
@@ -2736,7 +3250,7 @@ nav.pushed {
2736
3250
  background: var(--accent-color);
2737
3251
  transform: scaleX(0);
2738
3252
  transform-origin: left;
2739
- transition: transform 0.38s cubic-bezier(0.4, 0, 0.2, 1);
3253
+ transition: transform 0.45s cubic-bezier(0.4, 0, 0.2, 1);
2740
3254
  }
2741
3255
  .stepper-connector.completed::after {
2742
3256
  transform: scaleX(1);
@@ -2752,10 +3266,17 @@ nav.pushed {
2752
3266
  color: var(--accent-color);
2753
3267
  font-weight: 600;
2754
3268
  }
3269
+ .stepper-step.active .stepper-desc {
3270
+ opacity: 0.8;
3271
+ }
2755
3272
  .stepper-step.completed .stepper-indicator {
2756
3273
  border-color: var(--accent-color);
2757
3274
  background: var(--accent-color);
2758
3275
  color: #fff;
3276
+ animation: stepper-complete-pop 0.35s ease-out;
3277
+ }
3278
+ .stepper-step.completed .stepper-indicator .icon-svg {
3279
+ animation: stepper-check-in 0.3s ease-out 0.05s both;
2759
3280
  }
2760
3281
  .stepper-step.completed .stepper-title {
2761
3282
  color: var(--primary-text);
@@ -2769,6 +3290,10 @@ nav.pushed {
2769
3290
  .stepper-step.error .stepper-title {
2770
3291
  color: var(--error);
2771
3292
  }
3293
+ .stepper-step.error .stepper-desc {
3294
+ color: var(--error);
3295
+ opacity: 0.7;
3296
+ }
2772
3297
 
2773
3298
  .stepper-vertical {
2774
3299
  flex-direction: column;
@@ -2792,6 +3317,7 @@ nav.pushed {
2792
3317
  margin-top: 0;
2793
3318
  margin-left: calc(2rem / 2 - 2px / 2);
2794
3319
  align-self: flex-start;
3320
+ border-radius: 2px;
2795
3321
  }
2796
3322
  .stepper-vertical .stepper-connector::after {
2797
3323
  transform: scaleY(0);
@@ -2805,10 +3331,14 @@ nav.pushed {
2805
3331
  cursor: pointer;
2806
3332
  }
2807
3333
  .stepper-clickable .stepper-step.completed .stepper-indicator, .stepper-clickable .stepper-step.active .stepper-indicator {
2808
- transition: background 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.15s ease;
3334
+ transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease, transform 0.2s ease, box-shadow 0.2s ease;
2809
3335
  }
2810
3336
  .stepper-clickable .stepper-step.completed:hover .stepper-indicator, .stepper-clickable .stepper-step.active:hover .stepper-indicator {
2811
- transform: scale(1.1);
3337
+ transform: scale(1.12);
3338
+ box-shadow: 0 2px 8px color-mix(in srgb, var(--accent-color) 25%, transparent);
3339
+ }
3340
+ .stepper-clickable .stepper-step.completed:active .stepper-indicator, .stepper-clickable .stepper-step.active:active .stepper-indicator {
3341
+ transform: scale(1.04);
2812
3342
  }
2813
3343
 
2814
3344
  @media (max-width: 480px) {
@@ -3355,7 +3885,7 @@ body {
3355
3885
  opacity: 0;
3356
3886
  visibility: hidden;
3357
3887
  transition: opacity var(--transition-speed), visibility var(--transition-speed);
3358
- z-index: 40;
3888
+ z-index: 200;
3359
3889
  }
3360
3890
 
3361
3891
  .flyout-overlay.is-visible {
@@ -3369,7 +3899,7 @@ body {
3369
3899
  background: var(--flyout-bg);
3370
3900
  backdrop-filter: blur(20px);
3371
3901
  -webkit-backdrop-filter: blur(20px);
3372
- z-index: 50;
3902
+ z-index: 210;
3373
3903
  display: flex;
3374
3904
  flex-direction: column;
3375
3905
  padding: 2rem;
@@ -3694,6 +4224,29 @@ body {
3694
4224
  flex: 1;
3695
4225
  }
3696
4226
 
4227
+ .tabs-container.tabs-pills .tabs-header {
4228
+ border-bottom: none;
4229
+ padding-bottom: 0.5rem;
4230
+ }
4231
+ .tabs-container.tabs-pills .tabs-list {
4232
+ gap: 0.375rem;
4233
+ }
4234
+ .tabs-container.tabs-pills .tab-item {
4235
+ border-bottom: none;
4236
+ border-radius: 2rem;
4237
+ padding: 0.4rem 1rem;
4238
+ background: transparent;
4239
+ }
4240
+ .tabs-container.tabs-pills .tab-item:hover {
4241
+ background: var(--hover);
4242
+ color: var(--primary-text);
4243
+ }
4244
+ .tabs-container.tabs-pills .tab-item.active {
4245
+ background: var(--accent-color);
4246
+ color: #fff;
4247
+ border-bottom-color: transparent;
4248
+ }
4249
+
3697
4250
  @media (max-width: 768px) {
3698
4251
  .tabs-container.tabs-vertical {
3699
4252
  flex-direction: column;
@@ -3727,16 +4280,15 @@ body {
3727
4280
  .accordion-item {
3728
4281
  border-bottom: 1px solid var(--divider);
3729
4282
  }
3730
-
3731
4283
  .accordion-item:last-child {
3732
4284
  border-bottom: none;
3733
4285
  }
3734
4286
 
3735
- .accordion-input {
4287
+ .accordion-toggle {
3736
4288
  display: none;
3737
4289
  }
3738
4290
 
3739
- .accordion-label {
4291
+ .accordion-header {
3740
4292
  display: flex;
3741
4293
  justify-content: space-between;
3742
4294
  align-items: center;
@@ -3748,14 +4300,13 @@ body {
3748
4300
  user-select: none;
3749
4301
  -webkit-tap-highlight-color: transparent;
3750
4302
  }
3751
- .accordion-label:hover {
4303
+ .accordion-header:hover {
3752
4304
  background: var(--hover);
3753
4305
  }
3754
- .accordion-label:active {
4306
+ .accordion-header:active {
3755
4307
  background: var(--hover);
3756
4308
  }
3757
-
3758
- .accordion-label::after {
4309
+ .accordion-header::after {
3759
4310
  content: "";
3760
4311
  width: 8px;
3761
4312
  height: 8px;
@@ -3767,10 +4318,10 @@ body {
3767
4318
  flex-shrink: 0;
3768
4319
  }
3769
4320
 
3770
- .accordion-input:checked + .accordion-label {
4321
+ .accordion-toggle:checked + .accordion-header {
3771
4322
  color: var(--accent-color);
3772
4323
  }
3773
- .accordion-input:checked + .accordion-label::after {
4324
+ .accordion-toggle:checked + .accordion-header::after {
3774
4325
  transform: rotate(-135deg);
3775
4326
  border-color: var(--accent-color);
3776
4327
  }
@@ -3782,155 +4333,229 @@ body {
3782
4333
  overflow: hidden;
3783
4334
  }
3784
4335
 
4336
+ .accordion-toggle:checked ~ .accordion-content {
4337
+ grid-template-rows: 1fr;
4338
+ }
4339
+
3785
4340
  .accordion-body {
3786
4341
  min-height: 0;
4342
+ padding: 0;
4343
+ overflow: hidden;
3787
4344
  }
3788
-
3789
- .accordion-body > div {
4345
+ .accordion-body > * {
3790
4346
  padding: 0 1.25rem 1.25rem;
3791
4347
  color: var(--secondary-text);
3792
4348
  font-size: 0.9rem;
3793
4349
  line-height: 1.6;
3794
4350
  }
3795
4351
 
3796
- .accordion-input:checked ~ .accordion-content {
3797
- grid-template-rows: 1fr;
3798
- }
3799
-
3800
4352
  .timeline {
3801
4353
  position: relative;
3802
- max-width: 800px;
3803
- padding: 1.25rem 0;
3804
4354
  list-style: none;
4355
+ padding: 0;
4356
+ margin: 0;
3805
4357
  }
3806
-
3807
4358
  .timeline::before {
3808
4359
  content: "";
3809
4360
  position: absolute;
4361
+ left: calc(0.625rem - 1px);
3810
4362
  top: 0;
3811
4363
  bottom: 0;
3812
- left: 1.25rem;
3813
4364
  width: 2px;
3814
4365
  background: var(--divider);
3815
4366
  }
3816
4367
 
3817
4368
  .timeline-item {
3818
- position: relative;
4369
+ display: flex;
4370
+ gap: 1.25rem;
4371
+ align-items: flex-start;
3819
4372
  margin-bottom: 2rem;
3820
- padding-left: 3rem;
4373
+ position: relative;
4374
+ }
4375
+ .timeline-item:last-child {
4376
+ margin-bottom: 0;
3821
4377
  }
3822
4378
 
3823
- .timeline-item::before {
3824
- content: "";
3825
- position: absolute;
3826
- left: 0.5rem;
3827
- top: 5px;
4379
+ .timeline-marker {
4380
+ flex-shrink: 0;
3828
4381
  width: 1.25rem;
3829
4382
  height: 1.25rem;
3830
4383
  border-radius: 50%;
3831
- border: 3px solid var(--divider);
3832
- z-index: 1;
4384
+ border: 2px solid var(--divider);
3833
4385
  background: var(--background);
4386
+ display: flex;
4387
+ align-items: center;
4388
+ justify-content: center;
4389
+ color: var(--secondary-text);
4390
+ position: relative;
4391
+ z-index: 1;
4392
+ margin-top: 0.15rem;
3834
4393
  }
3835
-
3836
- .timeline-item.active::before {
4394
+ .timeline-marker.success {
4395
+ border-color: var(--success);
4396
+ background: var(--success);
4397
+ color: #fff;
4398
+ }
4399
+ .timeline-marker.warning {
4400
+ border-color: var(--warning);
4401
+ background: var(--warning);
4402
+ color: #fff;
4403
+ }
4404
+ .timeline-marker.error {
4405
+ border-color: var(--error);
4406
+ background: var(--error);
4407
+ color: #fff;
4408
+ }
4409
+ .timeline-marker.accent {
3837
4410
  border-color: var(--accent-color);
3838
- background-color: color-mix(in srgb, var(--accent-color) 12%, var(--background));
4411
+ background: var(--accent-color);
4412
+ color: #fff;
4413
+ }
4414
+ .timeline-marker svg {
4415
+ display: block;
3839
4416
  }
3840
4417
 
3841
4418
  .timeline-content {
3842
- padding: 1.5rem;
4419
+ flex: 1;
4420
+ min-width: 0;
4421
+ padding: 1.25rem;
4422
+ border: 1px solid var(--divider);
3843
4423
  border-radius: 0.4rem;
4424
+ background: var(--background);
3844
4425
  box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
3845
- border: 1px solid var(--divider);
3846
4426
  }
3847
4427
 
3848
- .timeline-date {
3849
- font-size: 0.85rem;
3850
- color: var(--secondary-text);
3851
- font-weight: 600;
3852
- margin-bottom: 0.5rem;
4428
+ .timeline-time {
3853
4429
  display: block;
4430
+ font-size: 0.78rem;
4431
+ font-weight: 600;
4432
+ color: var(--secondary-text);
4433
+ margin-bottom: 0.2rem;
3854
4434
  }
3855
4435
 
3856
4436
  .timeline-title {
3857
- font-size: 1.1rem;
3858
- font-weight: 700;
3859
- margin: 0 0 0.5rem 0;
4437
+ font-size: 0.95rem;
4438
+ font-weight: 600;
3860
4439
  color: var(--primary-text);
4440
+ margin: 0 0 0.3rem;
3861
4441
  }
3862
4442
 
3863
- .timeline-body {
3864
- font-size: 0.95rem;
4443
+ .timeline-content p {
4444
+ font-size: 0.875rem;
3865
4445
  line-height: 1.6;
3866
4446
  color: var(--secondary-text);
3867
4447
  margin: 0;
3868
4448
  }
3869
4449
 
3870
- .chat-container {
3871
- width: 100%;
4450
+ :root {
4451
+ --bubble-radius: 18px;
4452
+ }
4453
+
4454
+ .chat {
3872
4455
  display: flex;
3873
4456
  flex-direction: column;
4457
+ gap: 0.4rem;
3874
4458
  padding: 1rem;
3875
- gap: 0.5rem;
4459
+ width: 100%;
3876
4460
  }
3877
4461
 
3878
- .message {
3879
- max-width: 75%;
3880
- padding: 1rem 1.5rem;
3881
- border-radius: 0.4rem;
3882
- position: relative;
3883
- line-height: 1.2rem;
3884
- color: var(--primary-text);
3885
- box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
3886
- word-wrap: break-word;
4462
+ .chat-message.incoming + .chat-message.outgoing,
4463
+ .chat-message.outgoing + .chat-message.incoming {
4464
+ margin-top: 0.5rem;
3887
4465
  }
3888
4466
 
3889
- /* Metadata (time) */
3890
- .message-meta {
3891
- display: block;
3892
- font-size: 0.8rem;
3893
- color: var(--primary-text);
3894
- text-align: right;
3895
- margin-top: 4px;
4467
+ .chat-message {
4468
+ display: flex;
4469
+ align-items: flex-end;
4470
+ gap: 0.6rem;
3896
4471
  }
3897
-
3898
- /* Incoming Message */
3899
- .message-incoming {
3900
- align-self: flex-start;
3901
- background-color: var(--background);
3902
- border-top-left-radius: 0;
4472
+ .chat-message.outgoing {
4473
+ flex-direction: row-reverse;
3903
4474
  }
3904
-
3905
- .message-incoming::before {
4475
+ .chat-message.outgoing .chat-bubble {
4476
+ background: var(--accent-color);
4477
+ color: #fff;
4478
+ border-bottom-right-radius: 0;
4479
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.15));
4480
+ }
4481
+ .chat-message.outgoing .chat-bubble::after {
3906
4482
  content: "";
3907
4483
  position: absolute;
3908
- top: 0;
4484
+ bottom: 0;
4485
+ right: -8px;
4486
+ width: 8px;
4487
+ height: 8px;
4488
+ background: var(--accent-color);
4489
+ clip-path: polygon(0% 0%, 0% 100%, 100% 100%);
4490
+ }
4491
+ .chat-message.outgoing .chat-bubble .chat-time {
4492
+ color: rgba(255, 255, 255, 0.65);
4493
+ }
4494
+ .chat-message.incoming .chat-bubble {
4495
+ background: var(--secondary-background);
4496
+ color: var(--primary-text);
4497
+ border-bottom-left-radius: 0;
4498
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.08));
4499
+ }
4500
+ .chat-message.incoming .chat-bubble::after {
4501
+ content: "";
4502
+ position: absolute;
4503
+ bottom: 0;
3909
4504
  left: -8px;
3910
- width: 0;
3911
- height: 0;
3912
- border: 8px solid transparent;
3913
- border-top-color: var(--secondary-background);
3914
- border-right: 0;
3915
- margin-top: 0px;
4505
+ width: 8px;
4506
+ height: 8px;
4507
+ background: var(--secondary-background);
4508
+ clip-path: polygon(100% 0%, 0% 100%, 100% 100%);
3916
4509
  }
3917
4510
 
3918
- .message-outgoing {
3919
- align-self: flex-end;
3920
- background-color: var(--accent-color-lighten);
3921
- border-top-right-radius: 0;
4511
+ .chat-avatar {
4512
+ flex-shrink: 0;
4513
+ width: 2rem;
4514
+ height: 2rem;
4515
+ border-radius: 50%;
4516
+ background: var(--accent-color-tint);
4517
+ color: var(--accent-color);
4518
+ display: flex;
4519
+ align-items: center;
4520
+ justify-content: center;
4521
+ font-size: 0.75rem;
4522
+ font-weight: 700;
4523
+ overflow: hidden;
4524
+ }
4525
+ .chat-avatar img {
4526
+ width: 100%;
4527
+ height: 100%;
4528
+ object-fit: cover;
3922
4529
  }
3923
4530
 
3924
- .message-outgoing::after {
3925
- content: "";
3926
- position: absolute;
3927
- top: 0;
3928
- right: -8px;
3929
- width: 0;
3930
- height: 0;
3931
- border: 8px solid transparent;
3932
- border-top-color: var(--accent-color-lighten);
3933
- border-left: 0;
4531
+ .chat-bubble {
4532
+ position: relative;
4533
+ max-width: 72%;
4534
+ padding: 0.55rem 0.85rem;
4535
+ border-radius: var(--bubble-radius);
4536
+ line-height: 1.45;
4537
+ word-wrap: break-word;
4538
+ }
4539
+ .chat-bubble p {
4540
+ margin: 0;
4541
+ font-size: 0.9rem;
4542
+ }
4543
+
4544
+ .chat-time {
4545
+ display: block;
4546
+ font-size: 0.68rem;
4547
+ letter-spacing: 0.01em;
4548
+ text-align: right;
4549
+ margin-top: 4px;
4550
+ opacity: 0.5;
4551
+ color: inherit;
4552
+ }
4553
+
4554
+ [data-theme=dark] .chat-message.incoming .chat-bubble {
4555
+ filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.35));
4556
+ }
4557
+ [data-theme=dark] .chat-message.outgoing .chat-bubble {
4558
+ filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.4));
3934
4559
  }
3935
4560
 
3936
4561
  .carousel {
@@ -4156,16 +4781,16 @@ body {
4156
4781
  transform: translateY(0);
4157
4782
  }
4158
4783
  }
4159
- .uploader-content .header h2 {
4784
+ .file-uploader .header h2 {
4160
4785
  font-size: 1.25rem;
4161
4786
  font-weight: 600;
4162
4787
  margin-bottom: 0.25rem;
4163
4788
  }
4164
- .uploader-content .header p {
4789
+ .file-uploader .header p {
4165
4790
  color: var(--secondary-text);
4166
4791
  font-size: 0.875rem;
4167
4792
  }
4168
- .uploader-content .drop-zone {
4793
+ .file-uploader .drop-zone {
4169
4794
  border: 2px dashed var(--divider);
4170
4795
  border-radius: 0.4rem;
4171
4796
  padding: 2rem 1rem;
@@ -4174,18 +4799,18 @@ body {
4174
4799
  transition: border-color 0.2s ease, background-color 0.2s ease;
4175
4800
  background-color: var(--background);
4176
4801
  }
4177
- .uploader-content .drop-zone:hover, .uploader-content .drop-zone.drag-over {
4802
+ .file-uploader .drop-zone:hover, .file-uploader .drop-zone.drag-over {
4178
4803
  border-color: var(--accent-color);
4179
4804
  background-color: color-mix(in srgb, var(--accent-color) 6%, var(--background));
4180
4805
  }
4181
- .uploader-content .drop-zone-content {
4806
+ .file-uploader .drop-zone-content {
4182
4807
  display: flex;
4183
4808
  flex-direction: column;
4184
4809
  align-items: center;
4185
4810
  gap: 0.5rem;
4186
4811
  pointer-events: none;
4187
4812
  }
4188
- .uploader-content .icon-container {
4813
+ .file-uploader .icon-container {
4189
4814
  width: 40px;
4190
4815
  height: 40px;
4191
4816
  border-radius: 50%;
@@ -4196,16 +4821,16 @@ body {
4196
4821
  justify-content: center;
4197
4822
  margin-bottom: 0.5rem;
4198
4823
  }
4199
- .uploader-content .primary-text {
4824
+ .file-uploader .primary-text {
4200
4825
  font-weight: 500;
4201
4826
  color: var(--accent-color);
4202
4827
  font-size: 0.875rem;
4203
4828
  }
4204
- .uploader-content .secondary-text {
4829
+ .file-uploader .secondary-text {
4205
4830
  color: var(--secondary-text);
4206
4831
  font-size: 0.75rem;
4207
4832
  }
4208
- .uploader-content .file-list {
4833
+ .file-uploader .file-list {
4209
4834
  display: flex;
4210
4835
  flex-direction: column;
4211
4836
  gap: 0.75rem;
@@ -4213,7 +4838,7 @@ body {
4213
4838
  overflow-y: auto;
4214
4839
  margin-top: 1rem;
4215
4840
  }
4216
- .uploader-content .file-item {
4841
+ .file-uploader .file-item {
4217
4842
  display: flex;
4218
4843
  flex-direction: column;
4219
4844
  padding: 0.75rem;
@@ -4223,39 +4848,39 @@ body {
4223
4848
  animation: fileSlideIn 0.2s ease-out;
4224
4849
  gap: 0.75rem;
4225
4850
  }
4226
- .uploader-content .file-item-header {
4851
+ .file-uploader .file-item-header {
4227
4852
  display: flex;
4228
4853
  align-items: center;
4229
4854
  justify-content: space-between;
4230
4855
  width: 100%;
4231
4856
  }
4232
- .uploader-content .file-info {
4857
+ .file-uploader .file-info {
4233
4858
  display: flex;
4234
4859
  align-items: center;
4235
4860
  gap: 0.75rem;
4236
4861
  overflow: hidden;
4237
4862
  }
4238
- .uploader-content .file-icon {
4863
+ .file-uploader .file-icon {
4239
4864
  color: var(--secondary-text);
4240
4865
  flex-shrink: 0;
4241
4866
  }
4242
- .uploader-content .file-details {
4867
+ .file-uploader .file-details {
4243
4868
  display: flex;
4244
4869
  flex-direction: column;
4245
4870
  overflow: hidden;
4246
4871
  }
4247
- .uploader-content .file-name {
4872
+ .file-uploader .file-name {
4248
4873
  font-size: 0.875rem;
4249
4874
  font-weight: 500;
4250
4875
  white-space: nowrap;
4251
4876
  overflow: hidden;
4252
4877
  text-overflow: ellipsis;
4253
4878
  }
4254
- .uploader-content .file-size {
4879
+ .file-uploader .file-size {
4255
4880
  font-size: 0.75rem;
4256
4881
  color: var(--secondary-text);
4257
4882
  }
4258
- .uploader-content .remove-btn {
4883
+ .file-uploader .remove-btn {
4259
4884
  flex-shrink: 0;
4260
4885
  background: none;
4261
4886
  border: none;
@@ -4268,11 +4893,11 @@ body {
4268
4893
  align-items: center;
4269
4894
  justify-content: center;
4270
4895
  }
4271
- .uploader-content .remove-btn:hover {
4896
+ .file-uploader .remove-btn:hover {
4272
4897
  color: var(--error);
4273
4898
  background-color: color-mix(in srgb, var(--error) 10%, var(--background));
4274
4899
  }
4275
- .uploader-content .progress-container {
4900
+ .file-uploader .progress-container {
4276
4901
  width: 100%;
4277
4902
  height: 4px;
4278
4903
  background-color: var(--divider);
@@ -4280,26 +4905,26 @@ body {
4280
4905
  overflow: hidden;
4281
4906
  display: none;
4282
4907
  }
4283
- .uploader-content .progress-bar {
4908
+ .file-uploader .progress-bar {
4284
4909
  height: 100%;
4285
4910
  background-color: var(--accent-color);
4286
4911
  width: 0%;
4287
4912
  transition: width 0.3s ease, background-color 0.3s ease;
4288
4913
  }
4289
- .uploader-content .status-text {
4914
+ .file-uploader .status-text {
4290
4915
  font-size: 0.75rem;
4291
4916
  color: var(--secondary-text);
4292
4917
  text-align: right;
4293
4918
  display: none;
4294
4919
  }
4295
- .uploader-content .status-text.error {
4920
+ .file-uploader .status-text.error {
4296
4921
  color: var(--error);
4297
4922
  }
4298
- .uploader-content .status-text.success {
4923
+ .file-uploader .status-text.success {
4299
4924
  color: var(--success);
4300
4925
  }
4301
4926
  @media (max-width: 480px) {
4302
- .uploader-content .drop-zone {
4927
+ .file-uploader .drop-zone {
4303
4928
  padding: 1.5rem 1rem;
4304
4929
  }
4305
4930
  }
@@ -4324,8 +4949,24 @@ body {
4324
4949
  border-radius: 0.4rem;
4325
4950
  overflow: hidden;
4326
4951
  box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
4327
- transition: transform 0.3s ease, box-shadow 0.3s ease;
4952
+ transition: transform 0.3s cubic-bezier(0.2, 0, 0, 1), box-shadow 0.3s cubic-bezier(0.2, 0, 0, 1);
4328
4953
  position: relative;
4954
+ cursor: pointer;
4955
+ }
4956
+ .masonry-item:hover {
4957
+ transform: translateY(-4px);
4958
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.06);
4959
+ }
4960
+ .masonry-item:hover img.loaded {
4961
+ transform: scale(1.03);
4962
+ }
4963
+ .masonry-item:active {
4964
+ transform: translateY(-1px);
4965
+ transition-duration: 0.1s;
4966
+ }
4967
+ .masonry-item:focus-visible {
4968
+ outline: 2px solid var(--accent-color);
4969
+ outline-offset: 2px;
4329
4970
  }
4330
4971
 
4331
4972
  .masonry-item img {
@@ -4334,34 +4975,119 @@ body {
4334
4975
  display: block;
4335
4976
  object-fit: cover;
4336
4977
  opacity: 0;
4337
- transition: opacity 0.5s ease-in;
4978
+ transform: scale(1.06);
4979
+ filter: blur(4px);
4980
+ transition: opacity 0.5s ease, transform 0.6s cubic-bezier(0.2, 0, 0, 1), filter 0.5s ease;
4338
4981
  }
4339
4982
 
4340
4983
  .masonry-item img.loaded {
4341
4984
  opacity: 1;
4985
+ transform: scale(1);
4986
+ filter: blur(0);
4342
4987
  }
4343
4988
 
4344
4989
  .masonry-item-info {
4345
- padding: 1rem;
4990
+ padding: 0.75rem 1rem;
4991
+ border-top: 1px solid var(--divider);
4346
4992
  }
4347
4993
 
4348
4994
  .masonry-item-title {
4349
4995
  margin: 0 0 0.25rem;
4350
- font-size: 1rem;
4996
+ font-size: 0.9375rem;
4351
4997
  font-weight: 600;
4998
+ color: var(--primary-text);
4999
+ line-height: 1.3;
4352
5000
  }
4353
5001
 
4354
5002
  .masonry-item-desc {
4355
5003
  margin: 0;
4356
- font-size: 0.9rem;
5004
+ font-size: 0.8125rem;
4357
5005
  color: var(--secondary-text);
5006
+ line-height: 1.5;
4358
5007
  }
4359
5008
 
4360
5009
  .loader {
4361
5010
  text-align: center;
4362
5011
  padding: 2.5rem;
5012
+ color: var(--secondary-text);
5013
+ font-size: 0.8125rem;
4363
5014
  }
4364
5015
 
5016
+ @media (prefers-reduced-motion: no-preference) {
5017
+ .masonry-item {
5018
+ animation: masonry-in 0.4s cubic-bezier(0.2, 0, 0, 1) both;
5019
+ }
5020
+ .masonry-column .masonry-item:nth-child(1) {
5021
+ animation-delay: 0.04s;
5022
+ }
5023
+ .masonry-column .masonry-item:nth-child(2) {
5024
+ animation-delay: 0.08s;
5025
+ }
5026
+ .masonry-column .masonry-item:nth-child(3) {
5027
+ animation-delay: 0.12s;
5028
+ }
5029
+ .masonry-column .masonry-item:nth-child(4) {
5030
+ animation-delay: 0.16s;
5031
+ }
5032
+ .masonry-column .masonry-item:nth-child(5) {
5033
+ animation-delay: 0.2s;
5034
+ }
5035
+ .masonry-column .masonry-item:nth-child(6) {
5036
+ animation-delay: 0.24s;
5037
+ }
5038
+ .masonry-column .masonry-item:nth-child(7) {
5039
+ animation-delay: 0.28s;
5040
+ }
5041
+ .masonry-column .masonry-item:nth-child(8) {
5042
+ animation-delay: 0.32s;
5043
+ }
5044
+ .masonry-column .masonry-item:nth-child(9) {
5045
+ animation-delay: 0.36s;
5046
+ }
5047
+ .masonry-column .masonry-item:nth-child(10) {
5048
+ animation-delay: 0.4s;
5049
+ }
5050
+ .masonry-column .masonry-item:nth-child(11) {
5051
+ animation-delay: 0.44s;
5052
+ }
5053
+ .masonry-column .masonry-item:nth-child(12) {
5054
+ animation-delay: 0.48s;
5055
+ }
5056
+ .masonry-column .masonry-item:nth-child(13) {
5057
+ animation-delay: 0.52s;
5058
+ }
5059
+ .masonry-column .masonry-item:nth-child(14) {
5060
+ animation-delay: 0.56s;
5061
+ }
5062
+ .masonry-column .masonry-item:nth-child(15) {
5063
+ animation-delay: 0.6s;
5064
+ }
5065
+ .masonry-column .masonry-item:nth-child(16) {
5066
+ animation-delay: 0.64s;
5067
+ }
5068
+ .masonry-column .masonry-item:nth-child(17) {
5069
+ animation-delay: 0.68s;
5070
+ }
5071
+ .masonry-column .masonry-item:nth-child(18) {
5072
+ animation-delay: 0.72s;
5073
+ }
5074
+ .masonry-column .masonry-item:nth-child(19) {
5075
+ animation-delay: 0.76s;
5076
+ }
5077
+ .masonry-column .masonry-item:nth-child(20) {
5078
+ animation-delay: 0.8s;
5079
+ }
5080
+ }
5081
+ @keyframes masonry-in {
5082
+ from {
5083
+ opacity: 0;
5084
+ transform: translateY(16px) scale(0.97);
5085
+ }
5086
+ to {
5087
+ opacity: 1;
5088
+ transform: translateY(0) scale(1);
5089
+ }
5090
+ }
4365
5091
  .dropdown-container {
4366
5092
  position: relative;
4367
5093
  display: inline-block;
@@ -4492,13 +5218,13 @@ body {
4492
5218
  }
4493
5219
  }
4494
5220
 
4495
- .virtual-dropdown .custom-dropdown {
5221
+ .custom-dropdown {
4496
5222
  position: relative;
4497
5223
  width: 100%;
4498
5224
  user-select: none;
4499
5225
  display: inline-block;
4500
5226
  }
4501
- .virtual-dropdown .dropdown-trigger {
5227
+ .custom-dropdown .dropdown-trigger {
4502
5228
  background: var(--background);
4503
5229
  border: 1px solid var(--divider);
4504
5230
  border-radius: 0.4rem;
@@ -4510,28 +5236,28 @@ body {
4510
5236
  align-items: center;
4511
5237
  transition: border-color 0.2s, box-shadow 0.2s, border-radius 0.15s, border-bottom-color 0.15s;
4512
5238
  }
4513
- .virtual-dropdown .dropdown-trigger:focus {
5239
+ .custom-dropdown .dropdown-trigger:focus {
4514
5240
  border-color: var(--accent-color);
4515
5241
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 15%, transparent);
4516
5242
  outline: none;
4517
5243
  }
4518
- .virtual-dropdown .custom-dropdown.open .dropdown-trigger {
5244
+ .custom-dropdown.open .dropdown-trigger {
4519
5245
  border-color: var(--accent-color);
4520
5246
  border-radius: 0.4rem 0.4rem 0 0;
4521
5247
  border-bottom-color: var(--background);
4522
5248
  box-shadow: none;
4523
5249
  outline: none;
4524
5250
  }
4525
- .virtual-dropdown .trigger-text {
5251
+ .custom-dropdown .trigger-text {
4526
5252
  color: var(--primary-text);
4527
5253
  white-space: nowrap;
4528
5254
  overflow: hidden;
4529
5255
  text-overflow: ellipsis;
4530
5256
  }
4531
- .virtual-dropdown .trigger-text:not(.has-value) {
5257
+ .custom-dropdown .trigger-text:not(.has-value) {
4532
5258
  color: var(--secondary-text);
4533
5259
  }
4534
- .virtual-dropdown .trigger-arrow {
5260
+ .custom-dropdown .trigger-arrow {
4535
5261
  font-size: 0.75em;
4536
5262
  color: var(--secondary-text);
4537
5263
  margin-left: 0.5rem;
@@ -4539,10 +5265,10 @@ body {
4539
5265
  display: inline-block;
4540
5266
  transition: transform 0.2s ease;
4541
5267
  }
4542
- .virtual-dropdown .custom-dropdown.open .trigger-arrow {
5268
+ .custom-dropdown.open .trigger-arrow {
4543
5269
  transform: rotate(180deg);
4544
5270
  }
4545
- .virtual-dropdown .dropdown-menu {
5271
+ .custom-dropdown .dropdown-menu {
4546
5272
  position: absolute;
4547
5273
  top: 100%;
4548
5274
  left: 0;
@@ -4559,18 +5285,18 @@ body {
4559
5285
  pointer-events: none;
4560
5286
  transition: opacity 0.18s ease, transform 0.18s ease, visibility 0s 0.18s;
4561
5287
  }
4562
- .virtual-dropdown .dropdown-menu.open {
5288
+ .custom-dropdown .dropdown-menu.open {
4563
5289
  visibility: visible;
4564
5290
  opacity: 1;
4565
5291
  transform: translateY(0);
4566
5292
  pointer-events: auto;
4567
5293
  transition: opacity 0.18s ease, transform 0.18s ease, visibility 0s 0s;
4568
5294
  }
4569
- .virtual-dropdown .dropdown-search {
5295
+ .custom-dropdown .dropdown-search {
4570
5296
  padding: 0.5rem;
4571
5297
  border-bottom: 1px solid var(--divider);
4572
5298
  }
4573
- .virtual-dropdown .dropdown-search input {
5299
+ .custom-dropdown .dropdown-search input {
4574
5300
  width: 100%;
4575
5301
  padding: 0 0.5rem;
4576
5302
  height: 2rem;
@@ -4582,25 +5308,25 @@ body {
4582
5308
  outline: none;
4583
5309
  transition: border-color 0.2s;
4584
5310
  }
4585
- .virtual-dropdown .dropdown-search input:focus {
5311
+ .custom-dropdown .dropdown-search input:focus {
4586
5312
  border-color: var(--accent-color);
4587
5313
  }
4588
- .virtual-dropdown .dropdown-list-wrapper {
5314
+ .custom-dropdown .dropdown-list-wrapper {
4589
5315
  max-height: 250px;
4590
5316
  overflow-y: auto;
4591
5317
  position: relative;
4592
5318
  -webkit-overflow-scrolling: touch;
4593
5319
  }
4594
- .virtual-dropdown .dropdown-list-scroller {
5320
+ .custom-dropdown .dropdown-list-scroller {
4595
5321
  position: relative;
4596
5322
  }
4597
- .virtual-dropdown .virtual-content {
5323
+ .custom-dropdown .virtual-content {
4598
5324
  position: absolute;
4599
5325
  top: 0;
4600
5326
  left: 0;
4601
5327
  width: 100%;
4602
5328
  }
4603
- .virtual-dropdown .dropdown-item {
5329
+ .custom-dropdown .dropdown-item {
4604
5330
  padding: 0 0.75rem;
4605
5331
  cursor: pointer;
4606
5332
  box-sizing: border-box;
@@ -4611,16 +5337,16 @@ body {
4611
5337
  color: var(--primary-text);
4612
5338
  transition: background-color 0.15s, color 0.15s;
4613
5339
  }
4614
- .virtual-dropdown .dropdown-item:hover {
5340
+ .custom-dropdown .dropdown-item:hover {
4615
5341
  background-color: var(--hover);
4616
5342
  color: var(--accent-color);
4617
5343
  }
4618
- .virtual-dropdown .dropdown-item.selected {
5344
+ .custom-dropdown .dropdown-item.selected {
4619
5345
  background-color: color-mix(in srgb, var(--accent-color) 10%, transparent);
4620
5346
  color: var(--accent-color);
4621
5347
  font-weight: 500;
4622
5348
  }
4623
- .virtual-dropdown .dropdown-item input[type=checkbox] {
5349
+ .custom-dropdown .dropdown-item input[type=checkbox] {
4624
5350
  appearance: none;
4625
5351
  -webkit-appearance: none;
4626
5352
  flex-shrink: 0;
@@ -4637,11 +5363,11 @@ body {
4637
5363
  position: relative;
4638
5364
  transition: border-color 0.15s, background-color 0.15s;
4639
5365
  }
4640
- .virtual-dropdown .dropdown-item input[type=checkbox]:checked {
5366
+ .custom-dropdown .dropdown-item input[type=checkbox]:checked {
4641
5367
  background-color: var(--accent-color);
4642
5368
  border-color: var(--accent-color);
4643
5369
  }
4644
- .virtual-dropdown .dropdown-item input[type=checkbox]:checked::after {
5370
+ .custom-dropdown .dropdown-item input[type=checkbox]:checked::after {
4645
5371
  content: "";
4646
5372
  position: absolute;
4647
5373
  left: 50%;
@@ -4653,7 +5379,7 @@ body {
4653
5379
  transform: translate(-50%, -55%) rotate(45deg);
4654
5380
  }
4655
5381
  @media (max-width: 600px) {
4656
- .virtual-dropdown .custom-dropdown {
5382
+ .custom-dropdown {
4657
5383
  max-width: 100%;
4658
5384
  }
4659
5385
  }
@@ -4666,11 +5392,18 @@ body {
4666
5392
  border-radius: 0.4rem;
4667
5393
  overflow: hidden;
4668
5394
  box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
4669
- transition: border-color 0.2s ease;
5395
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
5396
+ }
5397
+ .timespan-picker:focus-within {
5398
+ border-color: var(--accent-color);
5399
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 12%, transparent);
4670
5400
  }
4671
5401
  .timespan-picker.is-error {
4672
5402
  border-color: var(--error);
4673
5403
  }
5404
+ .timespan-picker.is-error:focus-within {
5405
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--error) 12%, transparent);
5406
+ }
4674
5407
 
4675
5408
  .timespan-field {
4676
5409
  flex: 1;
@@ -4678,6 +5411,7 @@ body {
4678
5411
  flex-direction: column;
4679
5412
  padding: 0.75rem 1rem;
4680
5413
  min-width: 0;
5414
+ position: relative;
4681
5415
  }
4682
5416
  .timespan-field label {
4683
5417
  font-size: 0.6875rem;
@@ -4688,6 +5422,13 @@ body {
4688
5422
  margin-bottom: 0.25rem;
4689
5423
  pointer-events: none;
4690
5424
  display: block;
5425
+ transition: color 0.15s ease;
5426
+ }
5427
+ .timespan-field:focus-within label {
5428
+ color: var(--accent-color);
5429
+ }
5430
+ .timespan-picker.is-error .timespan-field-end:focus-within .timespan-field label {
5431
+ color: var(--error);
4691
5432
  }
4692
5433
  .timespan-field input[type=time] {
4693
5434
  border: none;
@@ -4730,7 +5471,7 @@ body {
4730
5471
  border-right: 1px solid var(--divider);
4731
5472
  background: var(--background);
4732
5473
  min-width: 4.5rem;
4733
- gap: 0.2rem;
5474
+ gap: 0.25rem;
4734
5475
  flex-shrink: 0;
4735
5476
  }
4736
5477
 
@@ -4738,6 +5479,13 @@ body {
4738
5479
  font-size: 1rem;
4739
5480
  color: var(--secondary-text);
4740
5481
  line-height: 1;
5482
+ transition: color 0.2s ease, transform 0.2s ease;
5483
+ }
5484
+ .timespan-picker:focus-within .timespan-arrow {
5485
+ color: var(--accent-color);
5486
+ }
5487
+ .timespan-picker.is-error .timespan-arrow {
5488
+ color: var(--error);
4741
5489
  }
4742
5490
 
4743
5491
  .timespan-duration {
@@ -4748,17 +5496,26 @@ body {
4748
5496
  white-space: nowrap;
4749
5497
  line-height: 1;
4750
5498
  min-height: 0.75rem;
5499
+ padding: 2px 6px;
5500
+ border-radius: 0.8rem;
5501
+ background: color-mix(in srgb, var(--accent-color) 10%, transparent);
5502
+ transition: color 0.2s ease, background 0.2s ease, transform 0.25s cubic-bezier(0.2, 0, 0, 1);
5503
+ }
5504
+ .timespan-duration:empty {
5505
+ background: transparent;
5506
+ padding: 0;
4751
5507
  }
4752
5508
  .timespan-picker.is-error .timespan-duration {
4753
5509
  color: var(--error);
5510
+ background: color-mix(in srgb, var(--error) 10%, transparent);
4754
5511
  }
4755
5512
 
4756
5513
  .timespan-bar {
4757
5514
  margin-top: 0.5rem;
4758
- height: 3px;
5515
+ height: 6px;
4759
5516
  background: var(--divider);
4760
5517
  border-radius: 99px;
4761
- overflow: hidden;
5518
+ overflow: visible;
4762
5519
  position: relative;
4763
5520
  }
4764
5521
 
@@ -4769,12 +5526,60 @@ body {
4769
5526
  height: 100%;
4770
5527
  background: var(--accent-color);
4771
5528
  border-radius: inherit;
4772
- transition: left 0.3s ease, width 0.3s ease;
5529
+ transition: left 0.3s cubic-bezier(0.2, 0, 0, 1), width 0.3s cubic-bezier(0.2, 0, 0, 1);
5530
+ }
5531
+ .timespan-bar-fill::before, .timespan-bar-fill::after {
5532
+ content: "";
5533
+ position: absolute;
5534
+ top: 50%;
5535
+ width: 12px;
5536
+ height: 12px;
5537
+ border-radius: 50%;
5538
+ background: var(--accent-color);
5539
+ border: 2px solid var(--background);
5540
+ transform: translateY(-50%);
5541
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
5542
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
5543
+ opacity: 0;
5544
+ }
5545
+ .timespan-bar-fill::before {
5546
+ left: -6px;
5547
+ }
5548
+ .timespan-bar-fill::after {
5549
+ right: -6px;
5550
+ }
5551
+ .timespan-bar-fill[style*=width]:not([style*="width: 0"]):not([style*="width:0"])::before, .timespan-bar-fill[style*=width]:not([style*="width: 0"]):not([style*="width:0"])::after {
5552
+ opacity: 1;
4773
5553
  }
4774
5554
  .timespan-picker.is-error ~ .timespan-bar .timespan-bar-fill {
4775
5555
  background: var(--error);
4776
5556
  }
5557
+ .timespan-picker.is-error ~ .timespan-bar .timespan-bar-fill::before, .timespan-picker.is-error ~ .timespan-bar .timespan-bar-fill::after {
5558
+ background: var(--error);
5559
+ }
4777
5560
 
5561
+ @media (prefers-reduced-motion: no-preference) {
5562
+ .timespan-picker.is-error {
5563
+ animation: timespan-shake 0.35s cubic-bezier(0.2, 0, 0, 1);
5564
+ }
5565
+ }
5566
+ @keyframes timespan-shake {
5567
+ 0%, 100% {
5568
+ transform: translateX(0);
5569
+ }
5570
+ 20% {
5571
+ transform: translateX(-4px);
5572
+ }
5573
+ 40% {
5574
+ transform: translateX(4px);
5575
+ }
5576
+ 60% {
5577
+ transform: translateX(-2px);
5578
+ }
5579
+ 80% {
5580
+ transform: translateX(2px);
5581
+ }
5582
+ }
4778
5583
  @media (max-width: 480px) {
4779
5584
  .timespan-picker {
4780
5585
  flex-direction: column;
@@ -4789,6 +5594,9 @@ body {
4789
5594
  padding: 0.5rem 1rem;
4790
5595
  min-width: unset;
4791
5596
  }
5597
+ .timespan-arrow {
5598
+ transform: rotate(90deg);
5599
+ }
4792
5600
  .timespan-field input[type=time] {
4793
5601
  font-size: 2rem;
4794
5602
  }
@@ -4989,6 +5797,39 @@ body {
4989
5797
  border-radius: 0.18rem;
4990
5798
  }
4991
5799
 
5800
+ /* Block-format select — reset all global form overrides */
5801
+ .editor-block-select {
5802
+ width: auto;
5803
+ flex-shrink: 0;
5804
+ height: 2rem;
5805
+ min-height: unset;
5806
+ padding: 0 0.375rem;
5807
+ border: none;
5808
+ box-shadow: none;
5809
+ border-radius: 0.24rem;
5810
+ background: transparent;
5811
+ color: var(--secondary-text);
5812
+ font-size: 0.75rem;
5813
+ font-weight: 600;
5814
+ cursor: pointer;
5815
+ outline: none;
5816
+ appearance: auto;
5817
+ transition: background 0.1s ease, color 0.1s ease;
5818
+ }
5819
+ .editor-block-select:hover {
5820
+ background: var(--divider);
5821
+ color: var(--primary-text);
5822
+ }
5823
+ .editor-block-select:focus {
5824
+ border: none;
5825
+ box-shadow: none;
5826
+ }
5827
+ .editor-block-select option {
5828
+ background: var(--background);
5829
+ color: var(--primary-text);
5830
+ font-weight: 400;
5831
+ }
5832
+
4992
5833
  /* Separators: invisible spacers — visual grouping comes from .toolbar-group */
4993
5834
  .toolbar-separator {
4994
5835
  width: 0.35rem;
@@ -5773,4 +6614,2068 @@ body {
5773
6614
  user-select: none;
5774
6615
  }
5775
6616
 
5776
- /*# sourceMappingURL=style.css.map */
6617
+ .cal {
6618
+ --cal-spacing-xs: 4px;
6619
+ --cal-spacing-sm: 8px;
6620
+ --cal-spacing-md: 12px;
6621
+ --cal-spacing-lg: 16px;
6622
+ --cal-bg: var(--background);
6623
+ --cal-bg-alt: var(--secondary-background);
6624
+ --cal-bg-hover: var(--hover);
6625
+ --cal-border: var(--divider);
6626
+ --cal-text: var(--primary-text);
6627
+ --cal-text-muted: var(--secondary-text);
6628
+ --cal-accent: var(--accent-color);
6629
+ --cal-accent-light: var(--accent-color-lighten);
6630
+ --cal-accent-text: #fff;
6631
+ --cal-today-ring: var(--accent-color);
6632
+ --cal-hour-height: 48px;
6633
+ --cal-time-col-width: 52px;
6634
+ --cal-radius: 0.4rem;
6635
+ --cal-radius-sm: calc(0.4rem * 0.5);
6636
+ font-family: var(--font-family, "Outfit", sans-serif);
6637
+ color: var(--cal-text);
6638
+ box-sizing: border-box;
6639
+ width: 100%;
6640
+ -webkit-tap-highlight-color: transparent;
6641
+ }
6642
+
6643
+ .cal *,
6644
+ .cal *::before,
6645
+ .cal *::after {
6646
+ box-sizing: inherit;
6647
+ }
6648
+
6649
+ .cal__header {
6650
+ display: flex;
6651
+ align-items: center;
6652
+ gap: var(--cal-spacing-sm);
6653
+ margin-bottom: var(--cal-spacing-lg);
6654
+ flex-wrap: wrap;
6655
+ }
6656
+
6657
+ .cal__title {
6658
+ flex: 1;
6659
+ min-width: 120px;
6660
+ font-size: 1.25rem;
6661
+ font-weight: 700;
6662
+ color: var(--cal-text);
6663
+ margin: 0;
6664
+ letter-spacing: -0.02em;
6665
+ }
6666
+
6667
+ .cal__nav {
6668
+ display: flex;
6669
+ gap: var(--cal-spacing-xs);
6670
+ align-items: center;
6671
+ }
6672
+
6673
+ .cal__btn {
6674
+ display: inline-flex;
6675
+ align-items: center;
6676
+ justify-content: center;
6677
+ gap: var(--cal-spacing-xs);
6678
+ padding: 6px var(--cal-spacing-md);
6679
+ font-family: inherit;
6680
+ font-size: 0.8125rem;
6681
+ font-weight: 500;
6682
+ line-height: 1.5;
6683
+ cursor: pointer;
6684
+ border: 1px solid var(--cal-border);
6685
+ border-radius: var(--cal-radius);
6686
+ background: transparent;
6687
+ color: var(--cal-text);
6688
+ transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.1s ease;
6689
+ white-space: nowrap;
6690
+ }
6691
+ .cal__btn:hover {
6692
+ background: var(--cal-bg-hover);
6693
+ }
6694
+ .cal__btn:focus-visible {
6695
+ outline: 2px solid var(--cal-accent);
6696
+ outline-offset: 2px;
6697
+ }
6698
+ .cal__btn:active {
6699
+ transform: scale(0.95);
6700
+ }
6701
+ .cal__btn--active, .cal__btn[aria-pressed=true] {
6702
+ background: var(--cal-accent);
6703
+ border-color: var(--cal-accent);
6704
+ color: var(--cal-accent-text);
6705
+ font-weight: 600;
6706
+ }
6707
+ .cal__btn .icon-svg {
6708
+ width: 16px;
6709
+ height: 16px;
6710
+ fill: currentColor;
6711
+ vertical-align: middle;
6712
+ }
6713
+
6714
+ .cal__view-toggle {
6715
+ display: flex;
6716
+ background: var(--cal-bg-alt);
6717
+ border-radius: var(--cal-radius);
6718
+ padding: 3px;
6719
+ gap: 2px;
6720
+ position: relative;
6721
+ }
6722
+ .cal__view-toggle .cal__btn {
6723
+ border: none;
6724
+ border-radius: calc(var(--cal-radius) - 2px);
6725
+ padding: 5px 14px;
6726
+ font-size: 0.75rem;
6727
+ background: transparent;
6728
+ color: var(--cal-text-muted);
6729
+ transition: color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
6730
+ position: relative;
6731
+ z-index: 1;
6732
+ }
6733
+ .cal__view-toggle .cal__btn--active, .cal__view-toggle .cal__btn[aria-pressed=true] {
6734
+ background: var(--cal-bg);
6735
+ color: var(--cal-text);
6736
+ font-weight: 600;
6737
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.03);
6738
+ }
6739
+
6740
+ .cal__body {
6741
+ width: 100%;
6742
+ }
6743
+
6744
+ .cal__month-grid {
6745
+ display: grid;
6746
+ grid-template-columns: repeat(7, minmax(0, 1fr));
6747
+ border: 1px solid var(--cal-border);
6748
+ border-radius: var(--cal-radius);
6749
+ overflow: hidden;
6750
+ gap: 1px;
6751
+ background: var(--cal-border);
6752
+ }
6753
+
6754
+ .cal__weekday {
6755
+ background: var(--cal-bg-alt);
6756
+ padding: var(--cal-spacing-sm) var(--cal-spacing-xs);
6757
+ text-align: center;
6758
+ font-size: 0.6875rem;
6759
+ font-weight: 600;
6760
+ color: var(--cal-text-muted);
6761
+ letter-spacing: 0.06em;
6762
+ text-transform: uppercase;
6763
+ }
6764
+
6765
+ .cal__day {
6766
+ background: var(--cal-bg);
6767
+ padding: var(--cal-spacing-xs) var(--cal-spacing-sm);
6768
+ min-height: 88px;
6769
+ cursor: pointer;
6770
+ transition: background 0.15s ease;
6771
+ position: relative;
6772
+ }
6773
+ .cal__day:hover {
6774
+ background: var(--cal-bg-hover);
6775
+ }
6776
+ .cal__day:focus-visible {
6777
+ outline: 2px solid var(--cal-accent);
6778
+ outline-offset: -2px;
6779
+ z-index: 1;
6780
+ }
6781
+ .cal__day--empty {
6782
+ background: var(--cal-bg-alt);
6783
+ cursor: default;
6784
+ pointer-events: none;
6785
+ }
6786
+ .cal__day--outside .cal__day-num {
6787
+ opacity: 0.25;
6788
+ }
6789
+ .cal__day--outside .cal__day-events {
6790
+ opacity: 0.25;
6791
+ }
6792
+ .cal__day.is-today .cal__day-num {
6793
+ background: var(--cal-today-ring);
6794
+ color: var(--cal-accent-text);
6795
+ border-radius: 50%;
6796
+ font-weight: 700;
6797
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cal-accent) 20%, transparent);
6798
+ }
6799
+ .cal__day.is-selected {
6800
+ background: color-mix(in srgb, var(--cal-accent) 6%, var(--cal-bg));
6801
+ }
6802
+ .cal__day.is-selected .cal__day-num {
6803
+ background: var(--cal-accent);
6804
+ color: var(--cal-accent-text);
6805
+ border-radius: 50%;
6806
+ font-weight: 700;
6807
+ box-shadow: 0 2px 8px color-mix(in srgb, var(--cal-accent) 35%, transparent);
6808
+ }
6809
+ .cal__day.has-events::after {
6810
+ content: "";
6811
+ display: none;
6812
+ position: absolute;
6813
+ bottom: 6px;
6814
+ left: 50%;
6815
+ transform: translateX(-50%);
6816
+ width: 5px;
6817
+ height: 5px;
6818
+ border-radius: 50%;
6819
+ background: var(--cal-accent);
6820
+ }
6821
+
6822
+ .cal__day-num {
6823
+ display: inline-flex;
6824
+ align-items: center;
6825
+ justify-content: center;
6826
+ width: 28px;
6827
+ height: 28px;
6828
+ font-size: 0.8125rem;
6829
+ font-weight: 500;
6830
+ color: var(--cal-text);
6831
+ margin-bottom: var(--cal-spacing-xs);
6832
+ flex-shrink: 0;
6833
+ border-radius: 50%;
6834
+ transition: background 0.2s ease, color 0.2s ease, box-shadow 0.25s ease, transform 0.15s ease;
6835
+ }
6836
+
6837
+ .cal__day-events {
6838
+ display: flex;
6839
+ flex-direction: column;
6840
+ gap: 2px;
6841
+ overflow: hidden;
6842
+ }
6843
+
6844
+ .cal__event-pill {
6845
+ font-size: 0.6875rem;
6846
+ line-height: 1.4;
6847
+ padding: 2px 6px;
6848
+ border-radius: var(--cal-radius-sm);
6849
+ background: var(--cal-bg-alt);
6850
+ color: var(--cal-text);
6851
+ white-space: nowrap;
6852
+ overflow: hidden;
6853
+ text-overflow: ellipsis;
6854
+ cursor: pointer;
6855
+ border: none;
6856
+ border-left: 2px solid var(--cal-accent-light);
6857
+ display: block;
6858
+ text-align: left;
6859
+ width: 100%;
6860
+ transition: background 0.12s ease, transform 0.1s ease;
6861
+ }
6862
+ .cal__event-pill:hover {
6863
+ background: var(--cal-bg-hover);
6864
+ }
6865
+ .cal__event-pill:active {
6866
+ transform: scale(0.97);
6867
+ }
6868
+ .cal__event-pill:focus-visible {
6869
+ outline: 2px solid var(--cal-accent);
6870
+ outline-offset: 1px;
6871
+ }
6872
+ .cal__event-pill.badge-success {
6873
+ border-left-color: var(--success);
6874
+ }
6875
+ .cal__event-pill.badge-warning {
6876
+ border-left-color: var(--warning);
6877
+ }
6878
+ .cal__event-pill.badge-error {
6879
+ border-left-color: var(--error);
6880
+ }
6881
+ .cal__event-pill.badge-info {
6882
+ border-left-color: var(--accent-color);
6883
+ }
6884
+
6885
+ .cal__event-more {
6886
+ font-size: 0.625rem;
6887
+ font-weight: 600;
6888
+ color: var(--cal-accent);
6889
+ padding: 1px 6px;
6890
+ cursor: pointer;
6891
+ }
6892
+
6893
+ .cal__event-time {
6894
+ font-weight: 600;
6895
+ margin-right: 3px;
6896
+ opacity: 0.7;
6897
+ }
6898
+
6899
+ .cal__week {
6900
+ border: 1px solid var(--cal-border);
6901
+ border-radius: var(--cal-radius);
6902
+ overflow: hidden;
6903
+ }
6904
+
6905
+ .cal__week-head {
6906
+ display: grid;
6907
+ grid-template-columns: var(--cal-time-col-width) repeat(7, minmax(0, 1fr));
6908
+ background: var(--cal-bg-alt);
6909
+ border-bottom: 1px solid var(--cal-border);
6910
+ overflow-y: auto;
6911
+ scrollbar-gutter: stable;
6912
+ scrollbar-width: thin;
6913
+ scrollbar-color: transparent transparent;
6914
+ }
6915
+ .cal__week-head::-webkit-scrollbar {
6916
+ width: 5px;
6917
+ }
6918
+ .cal__week-head::-webkit-scrollbar-track, .cal__week-head::-webkit-scrollbar-thumb {
6919
+ background: transparent;
6920
+ }
6921
+
6922
+ .cal__week-head-time {
6923
+ padding: var(--cal-spacing-sm) var(--cal-spacing-xs);
6924
+ font-size: 0.6875rem;
6925
+ color: var(--cal-text-muted);
6926
+ }
6927
+
6928
+ .cal__week-head-day {
6929
+ padding: var(--cal-spacing-sm) var(--cal-spacing-xs);
6930
+ text-align: center;
6931
+ font-size: 0.6875rem;
6932
+ font-weight: 600;
6933
+ color: var(--cal-text-muted);
6934
+ border-left: 1px solid var(--cal-border);
6935
+ cursor: pointer;
6936
+ text-transform: uppercase;
6937
+ letter-spacing: 0.04em;
6938
+ }
6939
+ .cal__week-head-day span {
6940
+ display: inline-flex;
6941
+ align-items: center;
6942
+ justify-content: center;
6943
+ font-size: 1.0625rem;
6944
+ font-weight: 600;
6945
+ color: var(--cal-text);
6946
+ line-height: 1;
6947
+ width: 32px;
6948
+ height: 32px;
6949
+ border-radius: 50%;
6950
+ margin-top: 2px;
6951
+ transition: background 0.2s ease, color 0.2s ease, box-shadow 0.25s ease;
6952
+ text-transform: none;
6953
+ letter-spacing: normal;
6954
+ }
6955
+ .cal__week-head-day.is-today span {
6956
+ background: var(--cal-today-ring);
6957
+ color: var(--cal-accent-text);
6958
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cal-accent) 20%, transparent);
6959
+ }
6960
+ .cal__week-head-day.is-selected span {
6961
+ background: var(--cal-accent);
6962
+ color: var(--cal-accent-text);
6963
+ }
6964
+
6965
+ .cal__allday {
6966
+ display: grid;
6967
+ grid-template-columns: var(--cal-time-col-width) repeat(7, minmax(0, 1fr));
6968
+ border-bottom: 1px solid var(--cal-border);
6969
+ min-height: 32px;
6970
+ background: var(--cal-bg);
6971
+ overflow-y: auto;
6972
+ scrollbar-gutter: stable;
6973
+ scrollbar-width: thin;
6974
+ scrollbar-color: transparent transparent;
6975
+ }
6976
+ .cal__allday::-webkit-scrollbar {
6977
+ width: 5px;
6978
+ }
6979
+ .cal__allday::-webkit-scrollbar-track, .cal__allday::-webkit-scrollbar-thumb {
6980
+ background: transparent;
6981
+ }
6982
+
6983
+ .cal__allday-label {
6984
+ padding: var(--cal-spacing-xs);
6985
+ font-size: 0.625rem;
6986
+ color: var(--cal-text-muted);
6987
+ display: flex;
6988
+ align-items: flex-start;
6989
+ padding-top: 6px;
6990
+ font-weight: 500;
6991
+ }
6992
+
6993
+ .cal__allday-col {
6994
+ border-left: 1px solid var(--cal-border);
6995
+ padding: 3px;
6996
+ display: flex;
6997
+ flex-direction: column;
6998
+ gap: 2px;
6999
+ }
7000
+
7001
+ .cal__week-body {
7002
+ overflow-y: auto;
7003
+ max-height: 480px;
7004
+ position: relative;
7005
+ background: var(--cal-bg);
7006
+ scrollbar-width: thin;
7007
+ scrollbar-gutter: stable;
7008
+ scrollbar-color: var(--cal-border) transparent;
7009
+ }
7010
+ .cal__week-body::-webkit-scrollbar {
7011
+ width: 5px;
7012
+ }
7013
+ .cal__week-body::-webkit-scrollbar-track {
7014
+ background: transparent;
7015
+ }
7016
+ .cal__week-body::-webkit-scrollbar-thumb {
7017
+ background: var(--cal-border);
7018
+ border-radius: 3px;
7019
+ }
7020
+
7021
+ .cal__week-grid {
7022
+ display: grid;
7023
+ grid-template-columns: var(--cal-time-col-width) repeat(7, minmax(0, 1fr));
7024
+ position: relative;
7025
+ }
7026
+
7027
+ .cal__time-col {
7028
+ display: flex;
7029
+ flex-direction: column;
7030
+ background: var(--cal-bg-alt);
7031
+ }
7032
+
7033
+ .cal__time-slot {
7034
+ height: var(--cal-hour-height);
7035
+ display: flex;
7036
+ align-items: flex-start;
7037
+ padding-top: 3px;
7038
+ padding-right: var(--cal-spacing-sm);
7039
+ font-size: 0.625rem;
7040
+ font-weight: 500;
7041
+ color: var(--cal-text-muted);
7042
+ justify-content: flex-end;
7043
+ border-top: 1px solid var(--cal-border);
7044
+ flex-shrink: 0;
7045
+ }
7046
+ .cal__time-slot:first-child {
7047
+ border-top: none;
7048
+ }
7049
+
7050
+ .cal__day-col {
7051
+ border-left: 1px solid var(--cal-border);
7052
+ position: relative;
7053
+ }
7054
+
7055
+ .cal__day-col-hour {
7056
+ height: var(--cal-hour-height);
7057
+ border-top: 1px solid var(--cal-border);
7058
+ flex-shrink: 0;
7059
+ position: relative;
7060
+ }
7061
+ .cal__day-col-hour:first-child {
7062
+ border-top: none;
7063
+ }
7064
+ .cal__day-col-hour::after {
7065
+ content: "";
7066
+ display: block;
7067
+ position: absolute;
7068
+ left: 0;
7069
+ right: 0;
7070
+ top: 50%;
7071
+ height: 1px;
7072
+ background: var(--cal-border);
7073
+ opacity: 0.4;
7074
+ pointer-events: none;
7075
+ }
7076
+
7077
+ .cal__week-event {
7078
+ position: absolute;
7079
+ left: 2px;
7080
+ right: 2px;
7081
+ border-radius: var(--cal-radius-sm);
7082
+ font-size: 0.6875rem;
7083
+ line-height: 1.3;
7084
+ padding: 3px 6px;
7085
+ overflow: hidden;
7086
+ cursor: pointer;
7087
+ background: color-mix(in srgb, var(--cal-accent) 10%, var(--cal-bg));
7088
+ color: var(--cal-text);
7089
+ border-left: 3px solid var(--cal-accent);
7090
+ z-index: 1;
7091
+ transition: box-shadow 0.15s ease, transform 0.1s ease;
7092
+ }
7093
+ .cal__week-event:hover {
7094
+ z-index: 2;
7095
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
7096
+ transform: translateY(-1px);
7097
+ }
7098
+ .cal__week-event:active {
7099
+ transform: scale(0.98);
7100
+ }
7101
+ .cal__week-event:focus-visible {
7102
+ outline: 2px solid var(--cal-accent);
7103
+ outline-offset: 1px;
7104
+ z-index: 3;
7105
+ }
7106
+ .cal__week-event.badge-success {
7107
+ border-left-color: var(--success);
7108
+ background: color-mix(in srgb, var(--success) 10%, var(--cal-bg));
7109
+ }
7110
+ .cal__week-event.badge-warning {
7111
+ border-left-color: var(--warning);
7112
+ background: color-mix(in srgb, var(--warning) 10%, var(--cal-bg));
7113
+ }
7114
+ .cal__week-event.badge-error {
7115
+ border-left-color: var(--error);
7116
+ background: color-mix(in srgb, var(--error) 10%, var(--cal-bg));
7117
+ }
7118
+ .cal__week-event.badge-info {
7119
+ border-left-color: var(--accent-color);
7120
+ background: color-mix(in srgb, var(--accent-color) 10%, var(--cal-bg));
7121
+ }
7122
+
7123
+ .cal__now-line {
7124
+ position: absolute;
7125
+ left: 0;
7126
+ right: 0;
7127
+ height: 2px;
7128
+ background: var(--error);
7129
+ z-index: 5;
7130
+ pointer-events: none;
7131
+ }
7132
+ .cal__now-line::before {
7133
+ content: "";
7134
+ display: block;
7135
+ position: absolute;
7136
+ left: -5px;
7137
+ top: -4px;
7138
+ width: 10px;
7139
+ height: 10px;
7140
+ border-radius: 50%;
7141
+ background: var(--error);
7142
+ animation: cal-now-pulse 2s ease-in-out infinite;
7143
+ }
7144
+
7145
+ .cal__agenda {
7146
+ border: 1px solid var(--cal-border);
7147
+ border-radius: var(--cal-radius);
7148
+ overflow: hidden;
7149
+ }
7150
+
7151
+ .cal__agenda-day {
7152
+ display: flex;
7153
+ gap: var(--cal-spacing-lg);
7154
+ padding: var(--cal-spacing-md) var(--cal-spacing-lg);
7155
+ border-bottom: 1px solid var(--cal-border);
7156
+ }
7157
+ .cal__agenda-day:last-child {
7158
+ border-bottom: none;
7159
+ }
7160
+ .cal__agenda-day.is-today {
7161
+ background: color-mix(in srgb, var(--cal-accent) 4%, var(--cal-bg));
7162
+ }
7163
+
7164
+ .cal__agenda-date {
7165
+ display: flex;
7166
+ flex-direction: column;
7167
+ align-items: center;
7168
+ min-width: 44px;
7169
+ flex-shrink: 0;
7170
+ }
7171
+
7172
+ .cal__agenda-dow {
7173
+ font-size: 0.625rem;
7174
+ color: var(--cal-text-muted);
7175
+ text-transform: uppercase;
7176
+ letter-spacing: 0.06em;
7177
+ font-weight: 600;
7178
+ }
7179
+
7180
+ .cal__agenda-num {
7181
+ display: inline-flex;
7182
+ align-items: center;
7183
+ justify-content: center;
7184
+ width: 34px;
7185
+ height: 34px;
7186
+ font-size: 1rem;
7187
+ font-weight: 700;
7188
+ color: var(--cal-text);
7189
+ border-radius: 50%;
7190
+ margin-top: 2px;
7191
+ transition: background 0.2s ease, color 0.2s ease;
7192
+ }
7193
+ .cal__agenda-num.is-today {
7194
+ background: var(--cal-today-ring);
7195
+ color: var(--cal-accent-text);
7196
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cal-accent) 20%, transparent);
7197
+ }
7198
+
7199
+ .cal__agenda-events {
7200
+ flex: 1;
7201
+ display: flex;
7202
+ flex-direction: column;
7203
+ gap: var(--cal-spacing-sm);
7204
+ padding-top: 4px;
7205
+ min-width: 0;
7206
+ }
7207
+
7208
+ .cal__agenda-event {
7209
+ display: flex;
7210
+ align-items: baseline;
7211
+ gap: var(--cal-spacing-sm);
7212
+ padding: var(--cal-spacing-sm) var(--cal-spacing-md);
7213
+ border-radius: var(--cal-radius-sm);
7214
+ background: var(--cal-bg-alt);
7215
+ border-left: 3px solid var(--cal-accent-light);
7216
+ cursor: pointer;
7217
+ transition: background 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
7218
+ }
7219
+ .cal__agenda-event:hover {
7220
+ background: var(--cal-bg-hover);
7221
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
7222
+ }
7223
+ .cal__agenda-event:active {
7224
+ transform: scale(0.98);
7225
+ }
7226
+ .cal__agenda-event:focus-visible {
7227
+ outline: 2px solid var(--cal-accent);
7228
+ outline-offset: 1px;
7229
+ }
7230
+ .cal__agenda-event.badge-success {
7231
+ border-left-color: var(--success);
7232
+ }
7233
+ .cal__agenda-event.badge-warning {
7234
+ border-left-color: var(--warning);
7235
+ }
7236
+ .cal__agenda-event.badge-error {
7237
+ border-left-color: var(--error);
7238
+ }
7239
+ .cal__agenda-event.badge-info {
7240
+ border-left-color: var(--accent-color);
7241
+ }
7242
+
7243
+ .cal__agenda-event-time {
7244
+ font-size: 0.75rem;
7245
+ color: var(--cal-text-muted);
7246
+ font-weight: 600;
7247
+ white-space: nowrap;
7248
+ min-width: 110px;
7249
+ flex-shrink: 0;
7250
+ }
7251
+
7252
+ .cal__agenda-event-title {
7253
+ font-size: 0.875rem;
7254
+ color: var(--cal-text);
7255
+ font-weight: 500;
7256
+ white-space: nowrap;
7257
+ overflow: hidden;
7258
+ text-overflow: ellipsis;
7259
+ }
7260
+
7261
+ .cal__agenda-empty {
7262
+ padding: var(--cal-spacing-lg);
7263
+ color: var(--cal-text-muted);
7264
+ font-size: 0.875rem;
7265
+ text-align: center;
7266
+ }
7267
+
7268
+ @media (max-width: 600px) {
7269
+ .cal__header {
7270
+ gap: var(--cal-spacing-xs);
7271
+ }
7272
+ .cal__title {
7273
+ font-size: 1.0625rem;
7274
+ order: -1;
7275
+ width: 100%;
7276
+ }
7277
+ .cal__nav {
7278
+ flex: 1;
7279
+ }
7280
+ .cal__view-toggle {
7281
+ padding: 2px;
7282
+ gap: 1px;
7283
+ }
7284
+ .cal__view-toggle .cal__btn {
7285
+ padding: 4px 10px;
7286
+ font-size: 0.6875rem;
7287
+ }
7288
+ .cal__month-grid {
7289
+ border: none;
7290
+ border-radius: 0;
7291
+ gap: 0;
7292
+ background: transparent;
7293
+ }
7294
+ .cal__weekday {
7295
+ background: transparent;
7296
+ padding: var(--cal-spacing-sm) 0;
7297
+ font-size: 0.625rem;
7298
+ }
7299
+ .cal__day {
7300
+ min-height: 52px;
7301
+ padding: var(--cal-spacing-xs) 0;
7302
+ display: flex;
7303
+ flex-direction: column;
7304
+ align-items: center;
7305
+ justify-content: flex-start;
7306
+ background: transparent;
7307
+ }
7308
+ .cal__day:hover {
7309
+ background: transparent;
7310
+ }
7311
+ .cal__day:hover .cal__day-num {
7312
+ background: var(--cal-bg-hover);
7313
+ }
7314
+ .cal__day--empty {
7315
+ background: transparent;
7316
+ }
7317
+ .cal__day--outside .cal__day-num {
7318
+ opacity: 0.25;
7319
+ }
7320
+ .cal__day.is-selected {
7321
+ background: transparent;
7322
+ }
7323
+ .cal__day.has-events::after {
7324
+ display: block;
7325
+ position: static;
7326
+ transform: none;
7327
+ margin-top: 3px;
7328
+ }
7329
+ .cal__day-num {
7330
+ width: 36px;
7331
+ height: 36px;
7332
+ font-size: 0.8125rem;
7333
+ margin-bottom: 0;
7334
+ }
7335
+ .cal__day-events,
7336
+ .cal__event-pill,
7337
+ .cal__event-more {
7338
+ display: none;
7339
+ }
7340
+ .cal {
7341
+ --cal-time-col-width: 40px;
7342
+ }
7343
+ .cal__week-body {
7344
+ max-height: 360px;
7345
+ }
7346
+ .cal__week-head-day {
7347
+ font-size: 0.5625rem;
7348
+ padding: var(--cal-spacing-xs) 2px;
7349
+ }
7350
+ .cal__week-head-day span {
7351
+ font-size: 0.875rem;
7352
+ width: 28px;
7353
+ height: 28px;
7354
+ }
7355
+ .cal__time-slot {
7356
+ font-size: 0.5rem;
7357
+ padding-right: 3px;
7358
+ }
7359
+ .cal__agenda-day {
7360
+ padding: var(--cal-spacing-sm) var(--cal-spacing-md);
7361
+ gap: var(--cal-spacing-md);
7362
+ }
7363
+ .cal__agenda-event {
7364
+ padding: var(--cal-spacing-xs) var(--cal-spacing-sm);
7365
+ flex-direction: column;
7366
+ gap: 2px;
7367
+ }
7368
+ .cal__agenda-event-time {
7369
+ min-width: 0;
7370
+ font-size: 0.6875rem;
7371
+ }
7372
+ .cal__agenda-event-title {
7373
+ font-size: 0.8125rem;
7374
+ }
7375
+ }
7376
+ @media print {
7377
+ .cal__header .cal__view-toggle,
7378
+ .cal__header .cal__nav .cal__btn--today {
7379
+ display: none;
7380
+ }
7381
+ .cal__week-body {
7382
+ max-height: none;
7383
+ overflow: visible;
7384
+ }
7385
+ .cal__month-grid,
7386
+ .cal__week,
7387
+ .cal__agenda {
7388
+ border: 1px solid #ccc;
7389
+ }
7390
+ }
7391
+ @media (prefers-reduced-motion: no-preference) {
7392
+ .cal__body {
7393
+ animation: cal-slide-in 0.25s cubic-bezier(0.2, 0, 0, 1);
7394
+ }
7395
+ .cal__day,
7396
+ .cal__agenda-day {
7397
+ animation: cal-cell-in 0.3s cubic-bezier(0.2, 0, 0, 1) both;
7398
+ }
7399
+ .cal__month-grid .cal__day:nth-child(1) {
7400
+ animation-delay: 0.01s;
7401
+ }
7402
+ .cal__month-grid .cal__day:nth-child(2) {
7403
+ animation-delay: 0.02s;
7404
+ }
7405
+ .cal__month-grid .cal__day:nth-child(3) {
7406
+ animation-delay: 0.03s;
7407
+ }
7408
+ .cal__month-grid .cal__day:nth-child(4) {
7409
+ animation-delay: 0.04s;
7410
+ }
7411
+ .cal__month-grid .cal__day:nth-child(5) {
7412
+ animation-delay: 0.05s;
7413
+ }
7414
+ .cal__month-grid .cal__day:nth-child(6) {
7415
+ animation-delay: 0.06s;
7416
+ }
7417
+ .cal__month-grid .cal__day:nth-child(7) {
7418
+ animation-delay: 0.07s;
7419
+ }
7420
+ .cal__month-grid .cal__day:nth-child(8) {
7421
+ animation-delay: 0.08s;
7422
+ }
7423
+ .cal__month-grid .cal__day:nth-child(9) {
7424
+ animation-delay: 0.09s;
7425
+ }
7426
+ .cal__month-grid .cal__day:nth-child(10) {
7427
+ animation-delay: 0.1s;
7428
+ }
7429
+ .cal__month-grid .cal__day:nth-child(11) {
7430
+ animation-delay: 0.11s;
7431
+ }
7432
+ .cal__month-grid .cal__day:nth-child(12) {
7433
+ animation-delay: 0.12s;
7434
+ }
7435
+ .cal__month-grid .cal__day:nth-child(13) {
7436
+ animation-delay: 0.13s;
7437
+ }
7438
+ .cal__month-grid .cal__day:nth-child(14) {
7439
+ animation-delay: 0.14s;
7440
+ }
7441
+ .cal__month-grid .cal__day:nth-child(15) {
7442
+ animation-delay: 0.15s;
7443
+ }
7444
+ .cal__month-grid .cal__day:nth-child(16) {
7445
+ animation-delay: 0.16s;
7446
+ }
7447
+ .cal__month-grid .cal__day:nth-child(17) {
7448
+ animation-delay: 0.17s;
7449
+ }
7450
+ .cal__month-grid .cal__day:nth-child(18) {
7451
+ animation-delay: 0.18s;
7452
+ }
7453
+ .cal__month-grid .cal__day:nth-child(19) {
7454
+ animation-delay: 0.19s;
7455
+ }
7456
+ .cal__month-grid .cal__day:nth-child(20) {
7457
+ animation-delay: 0.2s;
7458
+ }
7459
+ .cal__month-grid .cal__day:nth-child(21) {
7460
+ animation-delay: 0.21s;
7461
+ }
7462
+ .cal__month-grid .cal__day:nth-child(22) {
7463
+ animation-delay: 0.22s;
7464
+ }
7465
+ .cal__month-grid .cal__day:nth-child(23) {
7466
+ animation-delay: 0.23s;
7467
+ }
7468
+ .cal__month-grid .cal__day:nth-child(24) {
7469
+ animation-delay: 0.24s;
7470
+ }
7471
+ .cal__month-grid .cal__day:nth-child(25) {
7472
+ animation-delay: 0.25s;
7473
+ }
7474
+ .cal__month-grid .cal__day:nth-child(26) {
7475
+ animation-delay: 0.26s;
7476
+ }
7477
+ .cal__month-grid .cal__day:nth-child(27) {
7478
+ animation-delay: 0.27s;
7479
+ }
7480
+ .cal__month-grid .cal__day:nth-child(28) {
7481
+ animation-delay: 0.28s;
7482
+ }
7483
+ .cal__month-grid .cal__day:nth-child(29) {
7484
+ animation-delay: 0.29s;
7485
+ }
7486
+ .cal__month-grid .cal__day:nth-child(30) {
7487
+ animation-delay: 0.3s;
7488
+ }
7489
+ .cal__month-grid .cal__day:nth-child(31) {
7490
+ animation-delay: 0.31s;
7491
+ }
7492
+ .cal__month-grid .cal__day:nth-child(32) {
7493
+ animation-delay: 0.32s;
7494
+ }
7495
+ .cal__month-grid .cal__day:nth-child(33) {
7496
+ animation-delay: 0.33s;
7497
+ }
7498
+ .cal__month-grid .cal__day:nth-child(34) {
7499
+ animation-delay: 0.34s;
7500
+ }
7501
+ .cal__month-grid .cal__day:nth-child(35) {
7502
+ animation-delay: 0.35s;
7503
+ }
7504
+ .cal__month-grid .cal__day:nth-child(36) {
7505
+ animation-delay: 0.36s;
7506
+ }
7507
+ .cal__month-grid .cal__day:nth-child(37) {
7508
+ animation-delay: 0.37s;
7509
+ }
7510
+ .cal__month-grid .cal__day:nth-child(38) {
7511
+ animation-delay: 0.38s;
7512
+ }
7513
+ .cal__month-grid .cal__day:nth-child(39) {
7514
+ animation-delay: 0.39s;
7515
+ }
7516
+ .cal__month-grid .cal__day:nth-child(40) {
7517
+ animation-delay: 0.4s;
7518
+ }
7519
+ .cal__month-grid .cal__day:nth-child(41) {
7520
+ animation-delay: 0.41s;
7521
+ }
7522
+ .cal__month-grid .cal__day:nth-child(42) {
7523
+ animation-delay: 0.42s;
7524
+ }
7525
+ .cal__month-grid .cal__day:nth-child(43) {
7526
+ animation-delay: 0.43s;
7527
+ }
7528
+ .cal__month-grid .cal__day:nth-child(44) {
7529
+ animation-delay: 0.44s;
7530
+ }
7531
+ .cal__month-grid .cal__day:nth-child(45) {
7532
+ animation-delay: 0.45s;
7533
+ }
7534
+ .cal__month-grid .cal__day:nth-child(46) {
7535
+ animation-delay: 0.46s;
7536
+ }
7537
+ .cal__month-grid .cal__day:nth-child(47) {
7538
+ animation-delay: 0.47s;
7539
+ }
7540
+ .cal__month-grid .cal__day:nth-child(48) {
7541
+ animation-delay: 0.48s;
7542
+ }
7543
+ .cal__month-grid .cal__day:nth-child(49) {
7544
+ animation-delay: 0.49s;
7545
+ }
7546
+ .cal__agenda-day:nth-child(1) {
7547
+ animation-delay: 0.03s;
7548
+ }
7549
+ .cal__agenda-day:nth-child(2) {
7550
+ animation-delay: 0.06s;
7551
+ }
7552
+ .cal__agenda-day:nth-child(3) {
7553
+ animation-delay: 0.09s;
7554
+ }
7555
+ .cal__agenda-day:nth-child(4) {
7556
+ animation-delay: 0.12s;
7557
+ }
7558
+ .cal__agenda-day:nth-child(5) {
7559
+ animation-delay: 0.15s;
7560
+ }
7561
+ .cal__agenda-day:nth-child(6) {
7562
+ animation-delay: 0.18s;
7563
+ }
7564
+ .cal__agenda-day:nth-child(7) {
7565
+ animation-delay: 0.21s;
7566
+ }
7567
+ .cal__agenda-day:nth-child(8) {
7568
+ animation-delay: 0.24s;
7569
+ }
7570
+ .cal__agenda-day:nth-child(9) {
7571
+ animation-delay: 0.27s;
7572
+ }
7573
+ .cal__agenda-day:nth-child(10) {
7574
+ animation-delay: 0.3s;
7575
+ }
7576
+ }
7577
+ @keyframes cal-slide-in {
7578
+ from {
7579
+ opacity: 0;
7580
+ transform: translateY(8px);
7581
+ }
7582
+ to {
7583
+ opacity: 1;
7584
+ transform: translateY(0);
7585
+ }
7586
+ }
7587
+ @keyframes cal-cell-in {
7588
+ from {
7589
+ opacity: 0;
7590
+ transform: scale(0.96);
7591
+ }
7592
+ to {
7593
+ opacity: 1;
7594
+ transform: scale(1);
7595
+ }
7596
+ }
7597
+ @keyframes cal-now-pulse {
7598
+ 0%, 100% {
7599
+ opacity: 1;
7600
+ transform: scale(1);
7601
+ }
7602
+ 50% {
7603
+ opacity: 0.5;
7604
+ transform: scale(1.3);
7605
+ }
7606
+ }
7607
+ .group-picker {
7608
+ position: relative;
7609
+ width: 100%;
7610
+ color: var(--primary-text);
7611
+ }
7612
+ .group-picker__selection {
7613
+ display: flex;
7614
+ flex-wrap: wrap;
7615
+ align-items: center;
7616
+ gap: 0.35rem;
7617
+ min-height: 2rem;
7618
+ padding: 0.35rem 0.6rem;
7619
+ background: var(--background);
7620
+ border: 1px solid var(--divider);
7621
+ border-radius: 0.2rem;
7622
+ margin-bottom: 0.75rem;
7623
+ box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
7624
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
7625
+ }
7626
+ .group-picker__selection .chip {
7627
+ margin: 0;
7628
+ animation: gp-chip-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) both;
7629
+ }
7630
+ .group-picker__selection .chip.closeable button {
7631
+ display: inline-flex;
7632
+ align-items: center;
7633
+ justify-content: center;
7634
+ }
7635
+ .group-picker__selection .chip.closeable button .icon {
7636
+ font-size: 0.7rem;
7637
+ top: 0;
7638
+ }
7639
+ .group-picker__selection:empty::before {
7640
+ content: attr(data-placeholder);
7641
+ color: var(--secondary-text);
7642
+ font-size: 0.875rem;
7643
+ }
7644
+ .group-picker__selection:focus-within {
7645
+ border-color: var(--accent-color);
7646
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color) 15%, transparent);
7647
+ }
7648
+ .group-picker__selection .chip.group-picker__chip--parent {
7649
+ background: var(--accent-color);
7650
+ color: var(--background);
7651
+ }
7652
+ .group-picker__selection .chip.group-picker__chip--parent button {
7653
+ background: color-mix(in srgb, var(--accent-color) 78%, black);
7654
+ color: var(--background);
7655
+ }
7656
+ .group-picker__search {
7657
+ position: relative;
7658
+ margin-bottom: 0.5rem;
7659
+ }
7660
+ .group-picker__search input {
7661
+ padding-left: 2.2rem;
7662
+ }
7663
+ .group-picker__search-icon {
7664
+ position: absolute;
7665
+ left: 0.55rem;
7666
+ top: 50%;
7667
+ transform: translateY(-50%);
7668
+ font-size: 1rem;
7669
+ color: var(--secondary-text);
7670
+ pointer-events: none;
7671
+ opacity: 0.45;
7672
+ z-index: 1;
7673
+ }
7674
+ .group-picker__list {
7675
+ max-height: 420px;
7676
+ overflow-y: auto;
7677
+ overflow-x: hidden;
7678
+ -webkit-overflow-scrolling: touch;
7679
+ border: 1px solid var(--divider);
7680
+ border-radius: 0.2rem;
7681
+ background: var(--background);
7682
+ box-shadow: 0 1px 2px rgba(56, 65, 74, 0.15);
7683
+ }
7684
+ .group-picker__empty {
7685
+ display: flex;
7686
+ flex-direction: column;
7687
+ align-items: center;
7688
+ justify-content: center;
7689
+ padding: 2.5rem 1rem;
7690
+ color: var(--secondary-text);
7691
+ font-size: 0.875rem;
7692
+ text-align: center;
7693
+ gap: 0.5rem;
7694
+ }
7695
+ .group-picker__empty .icon {
7696
+ font-size: 2rem;
7697
+ opacity: 0.2;
7698
+ }
7699
+ .group-picker__group {
7700
+ border-bottom: 1px solid var(--divider);
7701
+ }
7702
+ .group-picker__group:last-child {
7703
+ border-bottom: none;
7704
+ }
7705
+ .group-picker__group.is-expanded > .group-picker__group-header {
7706
+ background: color-mix(in srgb, var(--accent-color) 4%, transparent);
7707
+ }
7708
+ .group-picker__group.is-expanded > .group-picker__group-header .group-picker__group-label {
7709
+ color: var(--accent-color);
7710
+ }
7711
+ .group-picker__group-header {
7712
+ display: flex;
7713
+ align-items: center;
7714
+ gap: 0.5rem;
7715
+ padding: 0.75rem 0.85rem;
7716
+ cursor: pointer;
7717
+ user-select: none;
7718
+ -webkit-tap-highlight-color: transparent;
7719
+ transition: background 0.15s ease;
7720
+ }
7721
+ .group-picker__group-header:hover {
7722
+ background: var(--hover);
7723
+ }
7724
+ .group-picker__group-header:active {
7725
+ background: var(--secondary-background);
7726
+ }
7727
+ .group-picker__chevron {
7728
+ flex-shrink: 0;
7729
+ font-size: 1rem;
7730
+ color: var(--secondary-text);
7731
+ opacity: 0.5;
7732
+ transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1), color 0.15s ease, opacity 0.15s ease;
7733
+ }
7734
+ .group-picker__group.is-expanded .group-picker__chevron {
7735
+ transform: rotate(90deg);
7736
+ color: var(--accent-color);
7737
+ opacity: 1;
7738
+ }
7739
+ .group-picker__group-label {
7740
+ flex: 1;
7741
+ font-size: 0.875rem;
7742
+ font-weight: 600;
7743
+ color: var(--primary-text);
7744
+ transition: color 0.15s ease;
7745
+ }
7746
+ .group-picker__group-label mark {
7747
+ background: color-mix(in srgb, var(--warning) 22%, transparent);
7748
+ color: inherit;
7749
+ border-radius: 2px;
7750
+ padding: 0 2px;
7751
+ }
7752
+ .group-picker__group-action {
7753
+ flex-shrink: 0;
7754
+ font-size: 0.6875rem;
7755
+ font-weight: 500;
7756
+ letter-spacing: 0.025em;
7757
+ text-transform: uppercase;
7758
+ padding: 0.15rem 0.6rem;
7759
+ border-radius: 1.2rem;
7760
+ border: 1px solid var(--divider);
7761
+ background: transparent;
7762
+ color: var(--secondary-text);
7763
+ line-height: 1.5;
7764
+ transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease, transform 0.1s ease;
7765
+ }
7766
+ .group-picker__group-action:hover:not(.button-primary):not(:disabled) {
7767
+ border-color: var(--accent-color);
7768
+ color: var(--accent-color);
7769
+ background: color-mix(in srgb, var(--accent-color) 6%, transparent);
7770
+ transform: none;
7771
+ }
7772
+ .group-picker__group-action:active:not(:disabled) {
7773
+ transform: scale(0.94);
7774
+ }
7775
+ .group-picker__group-action.button-primary {
7776
+ border-radius: 1.2rem;
7777
+ font-size: 0.6875rem;
7778
+ font-weight: 500;
7779
+ letter-spacing: 0.025em;
7780
+ text-transform: uppercase;
7781
+ padding: 0.15rem 0.6rem;
7782
+ border: 1px solid transparent;
7783
+ line-height: 1.5;
7784
+ }
7785
+ .group-picker__group.is-leaf {
7786
+ cursor: pointer;
7787
+ }
7788
+ .group-picker__group.is-leaf.is-selected > .group-picker__group-header {
7789
+ background: color-mix(in srgb, var(--accent-color) 6%, transparent);
7790
+ }
7791
+ .group-picker__group.is-leaf.is-selected > .group-picker__group-header .group-picker__group-label {
7792
+ color: var(--accent-color);
7793
+ }
7794
+ .group-picker__group.is-leaf.is-selected .group-picker__leaf-check {
7795
+ opacity: 1;
7796
+ transform: scale(1);
7797
+ }
7798
+ .group-picker__leaf-check {
7799
+ flex-shrink: 0;
7800
+ font-size: 1.1rem;
7801
+ color: var(--accent-color);
7802
+ opacity: 0;
7803
+ transform: scale(0.3);
7804
+ transition: opacity 0.18s ease, transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
7805
+ }
7806
+ .group-picker__subgroups {
7807
+ height: 0;
7808
+ overflow: hidden;
7809
+ opacity: 0;
7810
+ transition: height 0.28s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s ease;
7811
+ }
7812
+ .group-picker__group.is-expanded .group-picker__subgroups {
7813
+ opacity: 1;
7814
+ }
7815
+ .group-picker__subgroup-list {
7816
+ display: flex;
7817
+ flex-wrap: wrap;
7818
+ gap: 0.3rem;
7819
+ padding: 0.3rem 0.85rem 0.75rem 2.35rem;
7820
+ }
7821
+ .group-picker__subgroup-list .chip {
7822
+ margin: 0;
7823
+ }
7824
+ .group-picker__subgroup {
7825
+ transition: background 0.15s ease, color 0.15s ease, outline-color 0.15s ease;
7826
+ }
7827
+ .group-picker__subgroup.is-selected {
7828
+ background: color-mix(in srgb, var(--accent-color) 12%, var(--background));
7829
+ color: var(--accent-color);
7830
+ outline: 1px solid color-mix(in srgb, var(--accent-color) 35%, transparent);
7831
+ font-weight: 500;
7832
+ }
7833
+ .group-picker__subgroup.is-disabled {
7834
+ opacity: 0.35;
7835
+ cursor: not-allowed;
7836
+ pointer-events: none;
7837
+ }
7838
+ .group-picker__subgroup mark {
7839
+ background: color-mix(in srgb, var(--warning) 22%, transparent);
7840
+ color: inherit;
7841
+ border-radius: 2px;
7842
+ padding: 0 2px;
7843
+ }
7844
+
7845
+ @keyframes gp-chip-in {
7846
+ from {
7847
+ opacity: 0;
7848
+ transform: scale(0.7) translateY(4px);
7849
+ }
7850
+ to {
7851
+ opacity: 1;
7852
+ transform: scale(1) translateY(0);
7853
+ }
7854
+ }
7855
+ @media (max-width: 768px) {
7856
+ .group-picker__list {
7857
+ max-height: 55vh;
7858
+ }
7859
+ .group-picker__group-header {
7860
+ padding: 0.9rem 0.85rem;
7861
+ }
7862
+ .group-picker__subgroup-list {
7863
+ padding-left: 2rem;
7864
+ }
7865
+ }
7866
+ .chart {
7867
+ --chart-color-1: var(--accent-color);
7868
+ --chart-color-2: var(--success);
7869
+ --chart-color-3: var(--warning);
7870
+ --chart-color-4: var(--error);
7871
+ --chart-color-5: #8B5CF6;
7872
+ --chart-color-6: #06B6D4;
7873
+ --chart-color-7: #F97316;
7874
+ --chart-color-8: #EC4899;
7875
+ }
7876
+
7877
+ .chart {
7878
+ position: relative;
7879
+ width: 100%;
7880
+ min-width: 0;
7881
+ color: var(--primary-text);
7882
+ font-size: 0.875rem;
7883
+ }
7884
+ .chart-header {
7885
+ margin-bottom: 0.75rem;
7886
+ }
7887
+ .chart-title {
7888
+ font-size: 1rem;
7889
+ font-weight: 600;
7890
+ color: var(--primary-text);
7891
+ line-height: 1.3;
7892
+ }
7893
+ .chart-subtitle {
7894
+ font-size: 0.8125rem;
7895
+ color: var(--secondary-text);
7896
+ margin-top: 0.2rem;
7897
+ }
7898
+ .chart-canvas {
7899
+ width: 100%;
7900
+ position: relative;
7901
+ overflow: hidden;
7902
+ }
7903
+ .chart-svg {
7904
+ display: block;
7905
+ width: 100%;
7906
+ overflow: visible;
7907
+ }
7908
+ .chart .chart-axis-line {
7909
+ stroke: var(--divider);
7910
+ stroke-width: 1;
7911
+ }
7912
+ .chart .chart-grid-line {
7913
+ stroke: var(--divider);
7914
+ stroke-width: 1;
7915
+ stroke-dasharray: 3 4;
7916
+ opacity: 0.7;
7917
+ }
7918
+ .chart .chart-axis-label {
7919
+ fill: var(--secondary-text);
7920
+ font-size: 0.6875rem;
7921
+ font-family: inherit;
7922
+ }
7923
+ .chart .chart-line {
7924
+ fill: none;
7925
+ stroke-linecap: round;
7926
+ stroke-linejoin: round;
7927
+ stroke-dasharray: var(--path-length, 9999);
7928
+ stroke-dashoffset: var(--path-length, 9999);
7929
+ animation: chart-draw 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
7930
+ }
7931
+ .chart .chart-area {
7932
+ animation: chart-fade-in 0.8s ease forwards;
7933
+ }
7934
+ .chart .chart-point-dot {
7935
+ transition: r 0.15s ease;
7936
+ }
7937
+ .chart .chart-point-ring {
7938
+ opacity: 0;
7939
+ transition: opacity 0.15s ease, r 0.15s ease;
7940
+ }
7941
+ .chart .chart-point-group {
7942
+ cursor: pointer;
7943
+ }
7944
+ .chart .chart-point-group:hover .chart-point-dot {
7945
+ r: 5;
7946
+ }
7947
+ .chart .chart-point-group:hover .chart-point-ring {
7948
+ opacity: 1;
7949
+ }
7950
+ .chart .chart-bar {
7951
+ transition: opacity 0.15s ease, filter 0.15s ease;
7952
+ cursor: pointer;
7953
+ transform-box: fill-box;
7954
+ }
7955
+ .chart .chart-bar--vertical {
7956
+ transform-origin: bottom center;
7957
+ animation: chart-grow-y calc(0.5s + var(--animation-delay, 0ms)) cubic-bezier(0.4, 0, 0.2, 1) both;
7958
+ animation-delay: var(--animation-delay, 0ms);
7959
+ }
7960
+ .chart .chart-bar--horizontal {
7961
+ transform-origin: left center;
7962
+ animation: chart-grow-x calc(0.5s + var(--animation-delay, 0ms)) cubic-bezier(0.4, 0, 0.2, 1) both;
7963
+ animation-delay: var(--animation-delay, 0ms);
7964
+ }
7965
+ .chart .chart-bar:hover {
7966
+ opacity: 0.85;
7967
+ filter: brightness(1.08);
7968
+ }
7969
+ .chart .chart-slice {
7970
+ cursor: pointer;
7971
+ transform-box: fill-box;
7972
+ transform-origin: center;
7973
+ transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.15s ease;
7974
+ animation: chart-slice-in 0.45s cubic-bezier(0.4, 0, 0.2, 1) both;
7975
+ animation-delay: var(--animation-delay, 0ms);
7976
+ }
7977
+ .chart .chart-slice:hover {
7978
+ filter: brightness(1.08);
7979
+ }
7980
+ .chart-legend {
7981
+ display: flex;
7982
+ flex-wrap: wrap;
7983
+ gap: 0.35rem 1rem;
7984
+ margin-top: 0.75rem;
7985
+ }
7986
+ .chart-legend-item {
7987
+ display: inline-flex;
7988
+ align-items: center;
7989
+ gap: 0.4rem;
7990
+ font-size: 0.75rem;
7991
+ color: var(--secondary-text);
7992
+ cursor: default;
7993
+ }
7994
+ .chart-legend-swatch {
7995
+ width: 10px;
7996
+ height: 10px;
7997
+ border-radius: 2px;
7998
+ flex-shrink: 0;
7999
+ }
8000
+ .chart-pie-legend {
8001
+ display: flex;
8002
+ flex-wrap: wrap;
8003
+ gap: 0.4rem 1.25rem;
8004
+ margin-top: 0.75rem;
8005
+ justify-content: center;
8006
+ }
8007
+ .chart-pie-legend-item {
8008
+ display: inline-flex;
8009
+ align-items: center;
8010
+ gap: 0.5rem;
8011
+ font-size: 0.8125rem;
8012
+ color: var(--secondary-text);
8013
+ }
8014
+ .chart-pie-legend-swatch {
8015
+ width: 12px;
8016
+ height: 12px;
8017
+ border-radius: 3px;
8018
+ flex-shrink: 0;
8019
+ }
8020
+ .chart-pie-legend-value {
8021
+ font-weight: 600;
8022
+ color: var(--primary-text);
8023
+ margin-left: 0.15rem;
8024
+ }
8025
+ .chart-tooltip {
8026
+ position: fixed;
8027
+ background: var(--primary-dark);
8028
+ color: var(--primary-light);
8029
+ padding: 0.5rem 0.75rem;
8030
+ border-radius: 0.4rem;
8031
+ font-size: 0.75rem;
8032
+ line-height: 1.5;
8033
+ pointer-events: none;
8034
+ white-space: nowrap;
8035
+ z-index: 9999;
8036
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
8037
+ opacity: 0;
8038
+ transform: translateY(4px);
8039
+ transition: opacity 0.12s ease, transform 0.12s ease;
8040
+ }
8041
+ .chart-tooltip.is-visible {
8042
+ opacity: 1;
8043
+ transform: translateY(0);
8044
+ }
8045
+ .chart-tooltip strong {
8046
+ display: block;
8047
+ font-weight: 600;
8048
+ color: #fff;
8049
+ margin-bottom: 1px;
8050
+ }
8051
+
8052
+ @keyframes chart-draw {
8053
+ from {
8054
+ stroke-dashoffset: var(--path-length, 9999);
8055
+ }
8056
+ to {
8057
+ stroke-dashoffset: 0;
8058
+ }
8059
+ }
8060
+ @keyframes chart-fade-in {
8061
+ from {
8062
+ opacity: 0;
8063
+ }
8064
+ to {
8065
+ opacity: 1;
8066
+ }
8067
+ }
8068
+ @keyframes chart-grow-y {
8069
+ from {
8070
+ transform: scaleY(0);
8071
+ }
8072
+ to {
8073
+ transform: scaleY(1);
8074
+ }
8075
+ }
8076
+ @keyframes chart-grow-x {
8077
+ from {
8078
+ transform: scaleX(0);
8079
+ }
8080
+ to {
8081
+ transform: scaleX(1);
8082
+ }
8083
+ }
8084
+ @keyframes chart-slice-in {
8085
+ from {
8086
+ transform: scale(0.6);
8087
+ opacity: 0;
8088
+ }
8089
+ to {
8090
+ transform: scale(1);
8091
+ opacity: 1;
8092
+ }
8093
+ }
8094
+ .sidebar-layout {
8095
+ display: flex;
8096
+ min-height: 100vh;
8097
+ }
8098
+
8099
+ .sidebar-nav {
8100
+ width: var(--sidebar-width, 240px);
8101
+ position: fixed;
8102
+ left: 0;
8103
+ top: 0;
8104
+ height: 100vh;
8105
+ background: var(--primary-bg);
8106
+ border-right: 1px solid var(--divider);
8107
+ display: flex;
8108
+ flex-direction: column;
8109
+ z-index: 100;
8110
+ }
8111
+ .sidebar-nav .sidebar-scroll {
8112
+ flex: 1;
8113
+ min-height: 0;
8114
+ background: none;
8115
+ border-radius: 0;
8116
+ box-shadow: none;
8117
+ }
8118
+
8119
+ .sidebar-main {
8120
+ flex: 1;
8121
+ min-width: 0;
8122
+ display: flex;
8123
+ flex-direction: column;
8124
+ margin-left: var(--sidebar-width, 240px);
8125
+ }
8126
+
8127
+ .sidebar-backdrop {
8128
+ display: none;
8129
+ position: fixed;
8130
+ inset: 0;
8131
+ background: rgba(0, 0, 0, 0.3);
8132
+ z-index: 99;
8133
+ }
8134
+ .sidebar-backdrop.is-visible {
8135
+ display: block;
8136
+ }
8137
+
8138
+ .sidebar-toggle {
8139
+ display: none;
8140
+ background: none;
8141
+ border: none;
8142
+ padding: 0.25rem;
8143
+ cursor: pointer;
8144
+ color: var(--primary-text);
8145
+ border-radius: 0.4rem;
8146
+ }
8147
+ .sidebar-toggle:hover {
8148
+ background: var(--secondary-background);
8149
+ }
8150
+ .sidebar-toggle svg {
8151
+ display: block;
8152
+ }
8153
+
8154
+ @media (max-width: 768px) {
8155
+ .sidebar-toggle {
8156
+ display: flex;
8157
+ align-items: center;
8158
+ }
8159
+ .sidebar-nav {
8160
+ left: calc(-1 * var(--sidebar-width, 240px));
8161
+ transition: left 0.25s ease;
8162
+ box-shadow: none;
8163
+ }
8164
+ .sidebar-nav.is-open {
8165
+ left: 0;
8166
+ box-shadow: 4px 0 24px rgba(0, 0, 0, 0.15);
8167
+ }
8168
+ .sidebar-main {
8169
+ margin-left: 0;
8170
+ }
8171
+ }
8172
+ .sidebar-nav .docs-sidebar-logo {
8173
+ display: flex;
8174
+ align-items: center;
8175
+ gap: 0.5rem;
8176
+ padding: 1.25rem 1rem;
8177
+ border-bottom: 1px solid var(--divider);
8178
+ font-weight: 700;
8179
+ font-size: 1.1rem;
8180
+ color: var(--primary-text);
8181
+ text-decoration: none;
8182
+ letter-spacing: -0.01em;
8183
+ }
8184
+ .sidebar-nav .docs-sidebar-logo .docs-logo-badge {
8185
+ font-size: 0.6rem;
8186
+ font-weight: 700;
8187
+ background: var(--accent-color);
8188
+ color: #fff;
8189
+ padding: 0.1rem 0.35rem;
8190
+ border-radius: 0.25rem;
8191
+ letter-spacing: 0.04em;
8192
+ text-transform: uppercase;
8193
+ }
8194
+ .sidebar-nav .docs-sidebar-search {
8195
+ padding: 0.75rem 1rem;
8196
+ border-bottom: 1px solid var(--divider);
8197
+ }
8198
+ .sidebar-nav .docs-sidebar-search input {
8199
+ width: 100%;
8200
+ height: 2rem;
8201
+ font-size: 0.8rem;
8202
+ background: var(--secondary-background);
8203
+ border: 1px solid var(--divider);
8204
+ border-radius: 0.4rem;
8205
+ padding: 0 0.75rem;
8206
+ color: var(--primary-text);
8207
+ outline: none;
8208
+ }
8209
+ .sidebar-nav .docs-sidebar-search input::placeholder {
8210
+ color: var(--secondary-text);
8211
+ }
8212
+ .sidebar-nav .docs-sidebar-search input:focus {
8213
+ border-color: var(--accent-color);
8214
+ }
8215
+
8216
+ .docs-nav {
8217
+ flex: 1;
8218
+ padding: 0.75rem 0 2rem;
8219
+ overflow-y: auto;
8220
+ }
8221
+ .docs-nav ul {
8222
+ list-style: none;
8223
+ margin: 0;
8224
+ padding: 0;
8225
+ }
8226
+ .docs-nav .docs-nav-section {
8227
+ margin-bottom: 0.25rem;
8228
+ }
8229
+ .docs-nav .docs-nav-section-label {
8230
+ font-size: 0.65rem;
8231
+ font-weight: 700;
8232
+ letter-spacing: 0.08em;
8233
+ text-transform: uppercase;
8234
+ color: var(--secondary-text);
8235
+ padding: 0.85rem 1rem 0.3rem;
8236
+ }
8237
+ .docs-nav .docs-nav-item a {
8238
+ display: block;
8239
+ padding: 0.3rem 1rem 0.3rem 1.25rem;
8240
+ font-size: 0.85rem;
8241
+ color: var(--secondary-text);
8242
+ text-decoration: none;
8243
+ border-radius: 0;
8244
+ transition: color 0.15s, background 0.15s;
8245
+ border-left: 2px solid transparent;
8246
+ }
8247
+ .docs-nav .docs-nav-item a:hover {
8248
+ color: var(--primary-text);
8249
+ background: var(--secondary-background);
8250
+ }
8251
+ .docs-nav .docs-nav-item a.is-active {
8252
+ color: var(--accent-color);
8253
+ border-left-color: var(--accent-color);
8254
+ background: color-mix(in srgb, var(--accent-color) 8%, transparent);
8255
+ font-weight: 500;
8256
+ }
8257
+
8258
+ .docs-topbar {
8259
+ position: sticky;
8260
+ top: 0;
8261
+ height: 52px;
8262
+ display: flex;
8263
+ align-items: center;
8264
+ justify-content: space-between;
8265
+ padding: 0 2rem;
8266
+ background: var(--primary-bg);
8267
+ border-bottom: 1px solid var(--divider);
8268
+ z-index: 90;
8269
+ gap: 1rem;
8270
+ }
8271
+ .docs-topbar .docs-breadcrumb {
8272
+ display: flex;
8273
+ align-items: center;
8274
+ gap: 0.4rem;
8275
+ font-size: 0.8rem;
8276
+ color: var(--secondary-text);
8277
+ }
8278
+ .docs-topbar .docs-breadcrumb a {
8279
+ color: var(--secondary-text);
8280
+ text-decoration: none;
8281
+ }
8282
+ .docs-topbar .docs-breadcrumb a:hover {
8283
+ color: var(--primary-text);
8284
+ }
8285
+ .docs-topbar .docs-breadcrumb .sep {
8286
+ opacity: 0.4;
8287
+ }
8288
+ .docs-topbar .docs-breadcrumb .current {
8289
+ color: var(--primary-text);
8290
+ font-weight: 500;
8291
+ }
8292
+ .docs-topbar .docs-topbar-actions {
8293
+ display: flex;
8294
+ align-items: center;
8295
+ gap: 0.5rem;
8296
+ }
8297
+
8298
+ .docs-content {
8299
+ flex: 1;
8300
+ padding: 2.5rem 2rem 4rem;
8301
+ max-width: 860px;
8302
+ }
8303
+ .docs-content h1 {
8304
+ font-size: 1.75rem;
8305
+ font-weight: 700;
8306
+ letter-spacing: -0.02em;
8307
+ margin: 0 0 0.5rem;
8308
+ }
8309
+ .docs-content .docs-lead {
8310
+ font-size: 1rem;
8311
+ color: var(--secondary-text);
8312
+ margin: 0 0 1rem;
8313
+ line-height: 1.6;
8314
+ max-width: 600px;
8315
+ }
8316
+ .docs-content .docs-import {
8317
+ display: inline-flex;
8318
+ align-items: center;
8319
+ gap: 0.5rem;
8320
+ margin: 0 0 2rem;
8321
+ padding: 0.4rem 0.75rem;
8322
+ background: var(--secondary-background);
8323
+ border: 1px solid var(--divider);
8324
+ border-radius: 0.4rem;
8325
+ font-size: 0.8rem;
8326
+ font-family: ui-monospace, "Cascadia Code", "SF Mono", monospace;
8327
+ color: var(--accent-color);
8328
+ }
8329
+ .docs-content .docs-import::before {
8330
+ content: "import";
8331
+ color: var(--secondary-text);
8332
+ font-style: italic;
8333
+ font-family: inherit;
8334
+ }
8335
+ .docs-content h2 {
8336
+ font-size: 1.1rem;
8337
+ font-weight: 600;
8338
+ margin: 2.5rem 0 1rem;
8339
+ padding-bottom: 0.5rem;
8340
+ border-bottom: 1px solid var(--divider);
8341
+ }
8342
+ .docs-content h3 {
8343
+ font-size: 0.95rem;
8344
+ font-weight: 600;
8345
+ margin: 1.75rem 0 0.75rem;
8346
+ }
8347
+ .docs-content p {
8348
+ line-height: 1.7;
8349
+ margin: 0 0 1rem;
8350
+ }
8351
+ .docs-content code {
8352
+ font-size: 0.8em;
8353
+ background: var(--secondary-background);
8354
+ border: 1px solid var(--divider);
8355
+ border-radius: 0.25rem;
8356
+ padding: 0.1em 0.35em;
8357
+ }
8358
+ .docs-content .docs-demo {
8359
+ background: var(--secondary-background);
8360
+ border: 1px solid var(--divider);
8361
+ border-radius: 0.4rem;
8362
+ padding: 2rem;
8363
+ margin: 1rem 0;
8364
+ }
8365
+ .docs-content .docs-demo h1 {
8366
+ font-size: 2rem;
8367
+ font-weight: 800;
8368
+ }
8369
+ .docs-content .docs-demo h2 {
8370
+ font-size: 1.625rem;
8371
+ font-weight: 750;
8372
+ border: none;
8373
+ padding: 0;
8374
+ margin-top: 0;
8375
+ }
8376
+ .docs-content .docs-demo h3 {
8377
+ font-size: 1.375rem;
8378
+ font-weight: 700;
8379
+ }
8380
+ .docs-content .docs-demo h4 {
8381
+ font-size: 1.125rem;
8382
+ font-weight: 700;
8383
+ }
8384
+ .docs-content .docs-demo h5 {
8385
+ font-size: 1rem;
8386
+ font-weight: 600;
8387
+ }
8388
+ .docs-content .docs-demo.centered {
8389
+ display: flex;
8390
+ align-items: center;
8391
+ justify-content: center;
8392
+ flex-wrap: wrap;
8393
+ gap: 0.75rem;
8394
+ }
8395
+ .docs-content .docs-props-table {
8396
+ width: 100%;
8397
+ border-collapse: collapse;
8398
+ font-size: 0.82rem;
8399
+ margin: 1rem 0 2rem;
8400
+ }
8401
+ .docs-content .docs-props-table th {
8402
+ text-align: left;
8403
+ padding: 0.5rem 0.75rem;
8404
+ background: var(--secondary-background);
8405
+ border: 1px solid var(--divider);
8406
+ font-weight: 600;
8407
+ color: var(--secondary-text);
8408
+ font-size: 0.75rem;
8409
+ text-transform: uppercase;
8410
+ letter-spacing: 0.05em;
8411
+ }
8412
+ .docs-content .docs-props-table td {
8413
+ padding: 0.5rem 0.75rem;
8414
+ border: 1px solid var(--divider);
8415
+ vertical-align: top;
8416
+ }
8417
+ .docs-content .docs-props-table td code {
8418
+ font-size: 0.78em;
8419
+ background: color-mix(in srgb, var(--accent-color) 10%, transparent);
8420
+ border-color: color-mix(in srgb, var(--accent-color) 20%, transparent);
8421
+ color: var(--accent-color);
8422
+ }
8423
+ .docs-content .docs-props-table tr:hover td {
8424
+ background: var(--secondary-background);
8425
+ }
8426
+
8427
+ .landing-hero {
8428
+ padding: 5rem 2rem 4rem;
8429
+ text-align: center;
8430
+ background: var(--primary-bg);
8431
+ border-bottom: 1px solid var(--divider);
8432
+ }
8433
+ .landing-hero .landing-eyebrow {
8434
+ display: inline-flex;
8435
+ align-items: center;
8436
+ gap: 0.4rem;
8437
+ font-size: 0.7rem;
8438
+ font-weight: 700;
8439
+ letter-spacing: 0.1em;
8440
+ text-transform: uppercase;
8441
+ color: var(--accent-color);
8442
+ background: color-mix(in srgb, var(--accent-color) 10%, transparent);
8443
+ border: 1px solid color-mix(in srgb, var(--accent-color) 25%, transparent);
8444
+ border-radius: 2rem;
8445
+ padding: 0.25rem 0.75rem;
8446
+ margin-bottom: 1.5rem;
8447
+ }
8448
+ .landing-hero h1 {
8449
+ font-size: clamp(2.5rem, 6vw, 4rem);
8450
+ font-weight: 800;
8451
+ letter-spacing: -0.03em;
8452
+ margin: 0 0 1rem;
8453
+ line-height: 1.1;
8454
+ }
8455
+ .landing-hero .landing-tagline {
8456
+ font-size: clamp(1rem, 2.5vw, 1.2rem);
8457
+ color: var(--secondary-text);
8458
+ max-width: 520px;
8459
+ margin: 0 auto 2rem;
8460
+ line-height: 1.6;
8461
+ }
8462
+ .landing-hero .landing-actions {
8463
+ display: flex;
8464
+ align-items: center;
8465
+ justify-content: center;
8466
+ gap: 0.75rem;
8467
+ flex-wrap: wrap;
8468
+ }
8469
+ .landing-hero .landing-install {
8470
+ display: inline-flex;
8471
+ align-items: center;
8472
+ gap: 0.5rem;
8473
+ background: var(--secondary-background);
8474
+ border: 1px solid var(--divider);
8475
+ border-radius: 0.4rem;
8476
+ padding: 0.5rem 1rem;
8477
+ font-size: 0.85rem;
8478
+ font-family: monospace;
8479
+ color: var(--primary-text);
8480
+ cursor: pointer;
8481
+ transition: border-color 0.15s;
8482
+ }
8483
+ .landing-hero .landing-install:hover {
8484
+ border-color: var(--accent-color);
8485
+ }
8486
+ .landing-hero .landing-install .install-prefix {
8487
+ color: var(--secondary-text);
8488
+ }
8489
+
8490
+ .landing-features {
8491
+ display: grid;
8492
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
8493
+ gap: 0;
8494
+ border-bottom: 1px solid var(--divider);
8495
+ }
8496
+ .landing-features .feature-item {
8497
+ padding: 1.5rem 2rem;
8498
+ border-right: 1px solid var(--divider);
8499
+ }
8500
+ .landing-features .feature-item:last-child {
8501
+ border-right: none;
8502
+ }
8503
+ .landing-features .feature-item .feature-icon {
8504
+ font-size: 1.25rem;
8505
+ margin-bottom: 0.5rem;
8506
+ }
8507
+ .landing-features .feature-item .feature-icon svg {
8508
+ width: 1em;
8509
+ height: 1em;
8510
+ display: block;
8511
+ }
8512
+ .landing-features .feature-item .feature-title {
8513
+ font-weight: 600;
8514
+ font-size: 0.9rem;
8515
+ margin-bottom: 0.2rem;
8516
+ }
8517
+ .landing-features .feature-item .feature-desc {
8518
+ font-size: 0.78rem;
8519
+ color: var(--secondary-text);
8520
+ line-height: 1.5;
8521
+ }
8522
+
8523
+ .landing-section {
8524
+ padding: 3.5rem 2rem;
8525
+ max-width: 1100px;
8526
+ margin: 0 auto;
8527
+ width: 100%;
8528
+ }
8529
+ .landing-section-title {
8530
+ font-size: 1.4rem;
8531
+ font-weight: 700;
8532
+ letter-spacing: -0.02em;
8533
+ margin: 0 0 0.4rem;
8534
+ }
8535
+ .landing-section-sub {
8536
+ color: var(--secondary-text);
8537
+ font-size: 0.9rem;
8538
+ margin: 0 0 2rem;
8539
+ }
8540
+
8541
+ .component-grid {
8542
+ display: grid;
8543
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
8544
+ gap: 1rem;
8545
+ }
8546
+
8547
+ .component-card {
8548
+ display: flex;
8549
+ flex-direction: column;
8550
+ gap: 0.5rem;
8551
+ padding: 1.25rem 1.25rem 1rem;
8552
+ border: 1px solid var(--divider);
8553
+ border-radius: 0.8rem;
8554
+ text-decoration: none;
8555
+ color: var(--primary-text);
8556
+ background: var(--primary-bg);
8557
+ transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
8558
+ }
8559
+ .component-card:hover {
8560
+ border-color: var(--accent-color);
8561
+ box-shadow: 0 4px 16px color-mix(in srgb, var(--accent-color) 15%, transparent);
8562
+ transform: translateY(-1px);
8563
+ }
8564
+ .component-card .cc-icon {
8565
+ font-size: 1.4rem;
8566
+ line-height: 1;
8567
+ margin-bottom: 0.25rem;
8568
+ }
8569
+ .component-card .cc-icon svg {
8570
+ width: 1em;
8571
+ height: 1em;
8572
+ display: block;
8573
+ }
8574
+ .component-card .cc-name {
8575
+ font-weight: 600;
8576
+ font-size: 0.9rem;
8577
+ }
8578
+ .component-card .cc-desc {
8579
+ font-size: 0.78rem;
8580
+ color: var(--secondary-text);
8581
+ line-height: 1.5;
8582
+ }
8583
+ .component-card .cc-count {
8584
+ font-size: 0.7rem;
8585
+ color: var(--secondary-text);
8586
+ margin-top: auto;
8587
+ padding-top: 0.5rem;
8588
+ border-top: 1px solid var(--divider);
8589
+ }
8590
+
8591
+ .landing-quickstart {
8592
+ background: var(--secondary-background);
8593
+ border-top: 1px solid var(--divider);
8594
+ border-bottom: 1px solid var(--divider);
8595
+ padding: 3.5rem 2rem;
8596
+ }
8597
+ .landing-quickstart .qs-inner {
8598
+ max-width: 700px;
8599
+ margin: 0 auto;
8600
+ }
8601
+ .landing-quickstart h2 {
8602
+ font-size: 1.4rem;
8603
+ font-weight: 700;
8604
+ letter-spacing: -0.02em;
8605
+ margin: 0 0 0.4rem;
8606
+ }
8607
+ .landing-quickstart p {
8608
+ color: var(--secondary-text);
8609
+ font-size: 0.9rem;
8610
+ margin: 0 0 1.5rem;
8611
+ }
8612
+ .landing-quickstart .qs-steps {
8613
+ display: flex;
8614
+ flex-direction: column;
8615
+ gap: 1rem;
8616
+ }
8617
+ .landing-quickstart .qs-step {
8618
+ display: flex;
8619
+ gap: 1rem;
8620
+ align-items: flex-start;
8621
+ }
8622
+ .landing-quickstart .qs-step .qs-num {
8623
+ flex-shrink: 0;
8624
+ width: 1.5rem;
8625
+ height: 1.5rem;
8626
+ background: var(--accent-color);
8627
+ color: #fff;
8628
+ border-radius: 50%;
8629
+ font-size: 0.7rem;
8630
+ font-weight: 700;
8631
+ display: flex;
8632
+ align-items: center;
8633
+ justify-content: center;
8634
+ margin-top: 0.1rem;
8635
+ }
8636
+ .landing-quickstart .qs-step .qs-text {
8637
+ flex: 1;
8638
+ }
8639
+ .landing-quickstart .qs-step .qs-text strong {
8640
+ display: block;
8641
+ font-size: 0.9rem;
8642
+ margin-bottom: 0.25rem;
8643
+ }
8644
+ .landing-quickstart .qs-step .qs-text p {
8645
+ margin: 0;
8646
+ font-size: 0.82rem;
8647
+ }
8648
+ .landing-quickstart .qs-step .qs-text code {
8649
+ display: block;
8650
+ background: var(--primary-bg);
8651
+ border: 1px solid var(--divider);
8652
+ border-radius: 0.4rem;
8653
+ padding: 0.5rem 0.75rem;
8654
+ font-size: 0.8rem;
8655
+ margin-top: 0.4rem;
8656
+ font-family: monospace;
8657
+ color: var(--primary-text);
8658
+ }
8659
+
8660
+ .landing-footer {
8661
+ padding: 1.5rem 2rem;
8662
+ border-top: 1px solid var(--divider);
8663
+ display: flex;
8664
+ align-items: center;
8665
+ justify-content: space-between;
8666
+ font-size: 0.78rem;
8667
+ color: var(--secondary-text);
8668
+ gap: 1rem;
8669
+ flex-wrap: wrap;
8670
+ }
8671
+ .landing-footer a {
8672
+ color: var(--secondary-text);
8673
+ text-decoration: none;
8674
+ }
8675
+ .landing-footer a:hover {
8676
+ color: var(--primary-text);
8677
+ }
8678
+ .landing-footer .footer-links {
8679
+ display: flex;
8680
+ gap: 1.25rem;
8681
+ }