:root { --bg:#0E1113; --card:#1A1F23; --line:#222A2F; --text:#EEF1F2; --dim:#9AA4AA; --accent:#F2A93B; --dock:clamp(84px, 7vw, 112px); }
/* wallpapers: 6 original Celosia-inspired plume SVGs (generated by make_wallpapers.py, kept outside the repo), picked by html[data-wp] (app.js) */
:root, [data-wp="0"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%230a0207'/><stop offset='1' stop-color='%2322060f'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%237a0a2c'/><stop offset='.75' stop-color='%23ff3d6e' stop-opacity='.9'/><stop offset='1' stop-color='%23ff3d6e' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%236a0a44'/><stop offset='.75' stop-color='%23d23c95' stop-opacity='.9'/><stop offset='1' stop-color='%23d23c95' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%238c1c10'/><stop offset='.75' stop-color='%23ff7a45' stop-opacity='.9'/><stop offset='1' stop-color='%23ff7a45' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='1300' cy='180' rx='760' ry='300' fill='%23d23c95' opacity='.16' filter='url(%23b30)'/><path d='M-152 1060 C-128 793 -110 633 -57 468 C-28 633 423 793 399 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M90 1060 C100 872 127 759 137 641 C136 759 160 872 150 1060Z' fill='url(%23c0)' opacity='0.49' filter='url(%23b5)'/><path d='M45 1060 C109 914 -230 826 -190 735 C-214 826 213 914 149 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><path d='M111 1060 C-8 868 153 753 97 634 C161 753 44 868 164 1060Z' fill='url(%23c0)' opacity='0.57' filter='url(%23b5)'/><path d='M131 1060 C80 892 -110 790 -128 686 C-95 790 182 892 232 1060Z' fill='url(%23c1)' opacity='0.59' filter='url(%23b5)'/><path d='M35 1060 C81 803 -80 649 -49 490 C-64 649 187 803 141 1060Z' fill='url(%23c0)' opacity='0.59' filter='url(%23b5)'/><path d='M79 1060 C-6 845 174 717 135 583 C182 717 49 845 134 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><path d='M20 1060 C-19 835 -142 700 -155 560 C-129 700 69 835 108 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M64 1060 C113 820 70 676 101 526 C82 676 188 820 139 1060Z' fill='url(%23c1)' opacity='0.36' filter='url(%23b5)'/><path d='M104 1060 C-12 885 212 780 162 671 C227 780 88 885 203 1060Z' fill='url(%23c0)' opacity='0.55' filter='url(%23b5)'/><path d='M41 1060 C-36 831 -87 694 -122 552 C-80 694 12 831 88 1060Z' fill='url(%23c1)' opacity='0.59' filter='url(%23b5)'/><path d='M122 1060 C85 830 -217 692 -228 549 C-202 692 191 830 228 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M30 1060 C101 791 -109 630 -66 463 C-95 630 195 791 123 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M41 1060 C68 835 -357 701 -338 561 C-347 701 134 835 108 1060Z' fill='url(%23c0)' opacity='0.58' filter='url(%23b5)'/><path d='M240 1060 C210 727 384 527 405 319 C457 527 697 727 727 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M406 1060 C451 822 306 680 333 532 C314 680 505 822 459 1060Z' fill='url(%23c1)' opacity='0.60' filter='url(%23b5)'/><path d='M502 1060 C479 855 287 732 282 604 C299 732 559 855 581 1060Z' fill='url(%23c2)' opacity='0.41' filter='url(%23b5)'/><path d='M442 1060 C335 699 509 482 461 257 C520 482 407 699 514 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M497 1060 C553 799 110 643 142 481 C118 643 606 799 550 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M400 1060 C315 705 524 493 487 272 C535 493 388 705 472 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M493 1060 C607 777 226 608 291 432 C242 608 707 777 593 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M449 1060 C426 718 396 513 389 301 C406 513 489 718 512 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><path d='M496 1060 C495 680 285 451 292 215 C298 451 581 680 581 1060Z' fill='url(%23c2)' opacity='0.43' filter='url(%23b5)'/><path d='M466 1060 C433 826 221 686 212 541 C236 686 534 826 568 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M456 1060 C423 725 594 524 585 315 C608 524 517 725 550 1060Z' fill='url(%23c2)' opacity='0.53' filter='url(%23b5)'/><path d='M471 1060 C421 773 297 601 279 422 C311 601 511 773 560 1060Z' fill='url(%23c1)' opacity='0.59' filter='url(%23b5)'/><path d='M384 1060 C325 742 523 551 499 353 C535 551 405 742 465 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M453 1060 C416 704 378 491 367 269 C393 491 513 704 549 1060Z' fill='url(%23c1)' opacity='0.51' filter='url(%23b5)'/><path d='M652 1060 C706 741 929 549 990 350 C997 549 1163 741 1108 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M883 1060 C888 777 1213 606 1223 430 C1229 606 995 777 990 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M894 1060 C940 715 748 508 776 294 C759 508 1016 715 970 1060Z' fill='url(%23c0)' opacity='0.53' filter='url(%23b5)'/><path d='M872 1060 C912 841 1045 709 1071 573 C1057 709 994 841 954 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M850 1060 C737 735 1135 541 1085 339 C1149 541 828 735 942 1060Z' fill='url(%23c0)' opacity='0.39' filter='url(%23b5)'/><path d='M801 1060 C833 746 937 557 959 361 C950 557 922 746 891 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M800 1060 C756 818 974 672 956 521 C982 672 809 818 853 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M841 1060 C868 849 809 722 828 590 C820 722 937 849 910 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M784 1060 C731 702 846 487 824 264 C856 487 802 702 855 1060Z' fill='url(%23c0)' opacity='0.45' filter='url(%23b5)'/><path d='M841 1060 C869 718 724 514 742 301 C731 514 915 718 888 1060Z' fill='url(%23c2)' opacity='0.37' filter='url(%23b5)'/><path d='M836 1060 C912 802 954 647 1000 486 C970 647 1019 802 943 1060Z' fill='url(%23c0)' opacity='0.45' filter='url(%23b5)'/><path d='M837 1060 C860 776 1168 606 1183 429 C1176 606 914 776 891 1060Z' fill='url(%23c2)' opacity='0.49' filter='url(%23b5)'/><path d='M859 1060 C954 750 1277 564 1329 371 C1287 564 1021 750 926 1060Z' fill='url(%23c0)' opacity='0.35' filter='url(%23b5)'/><path d='M867 1060 C898 763 736 585 755 400 C744 585 951 763 920 1060Z' fill='url(%23c2)' opacity='0.57' filter='url(%23b5)'/><path d='M995 1060 C962 798 1150 641 1166 479 C1215 641 1398 798 1431 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1216 1060 C1239 851 1358 725 1377 595 C1373 725 1344 851 1321 1060Z' fill='url(%23c0)' opacity='0.41' filter='url(%23b5)'/><path d='M1171 1060 C1287 836 1330 702 1393 562 C1339 702 1352 836 1236 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M1125 1060 C1112 834 1069 698 1069 557 C1082 698 1197 834 1210 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M1115 1060 C1061 780 1339 612 1318 438 C1351 612 1140 780 1194 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M1158 1060 C1276 859 1225 739 1288 614 C1234 739 1330 859 1212 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M1189 1060 C1247 825 1183 684 1219 538 C1196 684 1331 825 1272 1060Z' fill='url(%23c1)' opacity='0.38' filter='url(%23b5)'/><path d='M1184 1060 C1135 851 1301 726 1282 596 C1311 726 1202 851 1250 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M1201 1060 C1090 842 1205 712 1155 576 C1217 712 1173 842 1284 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M1220 1060 C1103 766 1182 590 1130 407 C1194 590 1183 766 1300 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M1195 1060 C1191 814 1125 666 1129 513 C1138 666 1277 814 1281 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M1227 1060 C1178 840 1140 709 1119 572 C1148 709 1235 840 1284 1060Z' fill='url(%23c0)' opacity='0.56' filter='url(%23b5)'/><path d='M1200 1060 C1149 807 942 655 922 497 C953 655 1222 807 1273 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M1170 1060 C1170 878 1325 770 1330 657 C1337 770 1250 878 1251 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M1331 1060 C1262 776 1448 606 1453 429 C1528 606 1792 776 1861 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1587 1060 C1473 788 1328 625 1278 457 C1341 625 1561 788 1675 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M1597 1060 C1679 732 1690 535 1735 331 C1697 535 1726 732 1644 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M1595 1060 C1545 735 1536 540 1515 338 C1544 540 1598 735 1648 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M1558 1060 C1588 826 1253 686 1272 540 C1261 686 1642 826 1613 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M1521 1060 C1539 861 1283 741 1296 617 C1291 741 1587 861 1569 1060Z' fill='url(%23c1)' opacity='0.54' filter='url(%23b5)'/><path d='M1555 1060 C1579 857 1624 735 1640 609 C1633 735 1644 857 1620 1060Z' fill='url(%23c2)' opacity='0.47' filter='url(%23b5)'/><path d='M1498 1060 C1414 823 1712 680 1677 533 C1725 680 1504 823 1588 1060Z' fill='url(%23c1)' opacity='0.51' filter='url(%23b5)'/><path d='M1560 1060 C1503 748 1451 561 1429 367 C1463 561 1588 748 1645 1060Z' fill='url(%23c2)' opacity='0.49' filter='url(%23b5)'/><path d='M1572 1060 C1508 795 1329 635 1301 470 C1337 635 1561 795 1624 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M1578 1060 C1478 849 1625 723 1582 592 C1639 723 1566 849 1665 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1577 1060 C1668 894 1288 794 1338 691 C1297 794 1728 894 1637 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M1494 1060 C1387 781 1379 613 1332 439 C1393 613 1478 781 1585 1060Z' fill='url(%23c2)' opacity='0.39' filter='url(%23b5)'/><path d='M1537 1060 C1650 778 1639 608 1700 433 C1647 608 1702 778 1589 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.15'/></svg>"); }  /* celosia */
[data-wp="1"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%230b0602'/><stop offset='1' stop-color='%23241004'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%237a2a06'/><stop offset='.75' stop-color='%23ff8a2a' stop-opacity='.9'/><stop offset='1' stop-color='%23ff8a2a' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%2386460a'/><stop offset='.75' stop-color='%23ffc23a' stop-opacity='.9'/><stop offset='1' stop-color='%23ffc23a' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%236a1608'/><stop offset='.75' stop-color='%23f0582a' stop-opacity='.9'/><stop offset='1' stop-color='%23f0582a' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='1300' cy='180' rx='760' ry='300' fill='%23ffc23a' opacity='.16' filter='url(%23b30)'/><path d='M-143 1060 C-176 827 130 686 146 541 C195 686 260 827 292 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M87 1060 C-28 848 342 721 291 589 C355 721 56 848 171 1060Z' fill='url(%23c0)' opacity='0.41' filter='url(%23b5)'/><path d='M-9 1060 C22 911 134 821 156 728 C146 821 106 911 75 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M85 1060 C52 829 208 690 198 546 C222 690 147 829 181 1060Z' fill='url(%23c0)' opacity='0.46' filter='url(%23b5)'/><path d='M49 1060 C64 853 -42 729 -31 600 C-34 729 119 853 104 1060Z' fill='url(%23c1)' opacity='0.49' filter='url(%23b5)'/><path d='M112 1060 C82 899 69 802 57 702 C76 802 126 899 157 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M41 1060 C37 870 62 756 64 638 C70 756 92 870 96 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M-34 1060 C14 803 99 649 131 490 C114 649 114 803 66 1060Z' fill='url(%23c0)' opacity='0.38' filter='url(%23b5)'/><path d='M39 1060 C89 915 196 828 229 738 C212 828 197 915 147 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M-24 1060 C1 924 222 843 241 758 C235 843 88 924 63 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M47 1060 C-56 820 283 675 239 526 C298 675 43 820 146 1060Z' fill='url(%23c1)' opacity='0.43' filter='url(%23b5)'/><path d='M9 1060 C-100 854 283 730 234 602 C293 730 -30 854 79 1060Z' fill='url(%23c0)' opacity='0.56' filter='url(%23b5)'/><path d='M81 1060 C177 913 145 825 198 734 C155 825 247 913 151 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M13 1060 C-79 838 73 705 32 566 C82 705 -19 838 73 1060Z' fill='url(%23c0)' opacity='0.51' filter='url(%23b5)'/><path d='M159 1060 C220 802 238 647 304 487 C308 647 685 802 624 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M293 1060 C276 861 307 742 305 618 C321 742 366 861 384 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M403 1060 C435 848 496 720 516 588 C504 720 486 848 454 1060Z' fill='url(%23c2)' opacity='0.42' filter='url(%23b5)'/><path d='M353 1060 C265 878 348 768 308 655 C356 768 317 878 405 1060Z' fill='url(%23c1)' opacity='0.45' filter='url(%23b5)'/><path d='M336 1060 C258 842 346 711 312 575 C357 711 335 842 413 1060Z' fill='url(%23c2)' opacity='0.45' filter='url(%23b5)'/><path d='M349 1060 C463 777 316 608 379 432 C328 608 545 777 431 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M390 1060 C424 786 408 622 430 451 C417 622 484 786 450 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M351 1060 C468 879 237 770 304 658 C252 770 563 879 445 1060Z' fill='url(%23c1)' opacity='0.38' filter='url(%23b5)'/><path d='M303 1060 C364 885 348 780 384 671 C359 780 441 885 379 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M344 1060 C239 881 385 774 338 662 C395 774 302 881 406 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M298 1060 C324 906 219 814 237 718 C229 814 390 906 364 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M354 1060 C394 823 163 680 187 533 C170 680 441 823 402 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M383 1060 C393 871 485 757 496 639 C498 757 478 871 469 1060Z' fill='url(%23c2)' opacity='0.56' filter='url(%23b5)'/><path d='M340 1060 C368 764 400 587 417 403 C407 587 413 764 386 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M512 1060 C454 793 925 632 932 466 C997 632 931 793 989 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M683 1060 C585 797 972 639 928 476 C981 639 642 797 740 1060Z' fill='url(%23c2)' opacity='0.44' filter='url(%23b5)'/><path d='M743 1060 C632 797 883 639 832 475 C891 639 682 797 793 1060Z' fill='url(%23c0)' opacity='0.58' filter='url(%23b5)'/><path d='M730 1060 C693 822 1051 680 1039 532 C1065 680 787 822 824 1060Z' fill='url(%23c2)' opacity='0.49' filter='url(%23b5)'/><path d='M695 1060 C713 755 708 572 724 382 C723 572 815 755 797 1060Z' fill='url(%23c0)' opacity='0.39' filter='url(%23b5)'/><path d='M692 1060 C657 892 985 791 971 686 C992 791 704 892 739 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M722 1060 C687 856 874 734 863 608 C886 734 771 856 806 1060Z' fill='url(%23c0)' opacity='0.46' filter='url(%23b5)'/><path d='M761 1060 C733 846 891 718 882 585 C900 718 791 846 819 1060Z' fill='url(%23c2)' opacity='0.57' filter='url(%23b5)'/><path d='M740 1060 C702 857 731 736 719 610 C744 736 790 857 828 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M679 1060 C636 889 862 787 846 680 C871 787 695 889 738 1060Z' fill='url(%23c2)' opacity='0.45' filter='url(%23b5)'/><path d='M721 1060 C757 771 868 598 893 418 C882 598 850 771 814 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M724 1060 C764 926 966 846 994 762 C983 846 874 926 834 1060Z' fill='url(%23c2)' opacity='0.42' filter='url(%23b5)'/><path d='M783 1060 C691 832 1057 696 1014 554 C1064 696 737 832 829 1060Z' fill='url(%23c0)' opacity='0.56' filter='url(%23b5)'/><path d='M664 1060 C563 918 1016 833 972 745 C1029 833 647 918 748 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M806 1060 C816 774 1013 603 1059 425 C1095 603 1367 774 1357 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1082 1060 C998 802 1255 647 1220 486 C1270 647 1093 802 1177 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M1052 1060 C1008 785 939 620 925 450 C955 620 1113 785 1157 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M1016 1060 C1134 789 1168 626 1235 457 C1183 626 1235 789 1117 1060Z' fill='url(%23c0)' opacity='0.49' filter='url(%23b5)'/><path d='M1006 1060 C952 857 1074 735 1055 608 C1091 735 1062 857 1116 1060Z' fill='url(%23c1)' opacity='0.57' filter='url(%23b5)'/><path d='M1031 1060 C1079 764 902 587 930 403 C909 587 1124 764 1076 1060Z' fill='url(%23c0)' opacity='0.53' filter='url(%23b5)'/><path d='M998 1060 C932 768 1308 593 1281 411 C1320 593 1015 768 1081 1060Z' fill='url(%23c1)' opacity='0.43' filter='url(%23b5)'/><path d='M1107 1060 C1200 859 1042 738 1093 613 C1051 738 1262 859 1168 1060Z' fill='url(%23c0)' opacity='0.55' filter='url(%23b5)'/><path d='M1025 1060 C992 765 752 588 742 405 C765 588 1075 765 1107 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M1044 1060 C991 755 1171 572 1151 382 C1183 572 1070 755 1123 1060Z' fill='url(%23c0)' opacity='0.53' filter='url(%23b5)'/><path d='M1094 1060 C1002 747 1128 560 1087 365 C1137 560 1059 747 1150 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M1061 1060 C1150 776 711 605 762 428 C724 605 1240 776 1151 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M1021 1060 C939 819 1144 674 1108 524 C1153 674 996 819 1078 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M1039 1060 C926 780 920 611 867 437 C927 611 974 780 1088 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M1319 1060 C1306 717 1374 511 1407 297 C1453 511 1834 717 1848 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1591 1060 C1574 668 1527 433 1523 189 C1537 433 1637 668 1654 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M1517 1060 C1403 697 1289 479 1237 254 C1298 479 1463 697 1578 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M1550 1060 C1650 780 1277 612 1332 438 C1288 612 1727 780 1627 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><path d='M1526 1060 C1446 836 1300 702 1264 563 C1308 702 1502 836 1581 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M1592 1060 C1531 839 1475 707 1452 569 C1490 707 1630 839 1691 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M1532 1060 C1567 773 1660 601 1682 423 C1670 601 1630 773 1595 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M1585 1060 C1619 849 1397 723 1422 592 C1413 723 1727 849 1692 1060Z' fill='url(%23c1)' opacity='0.51' filter='url(%23b5)'/><path d='M1587 1060 C1625 766 1014 589 1041 406 C1030 589 1730 766 1691 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M1544 1060 C1520 803 1186 648 1182 488 C1202 648 1626 803 1651 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M1516 1060 C1583 836 1168 702 1208 562 C1181 702 1673 836 1606 1060Z' fill='url(%23c2)' opacity='0.41' filter='url(%23b5)'/><path d='M1576 1060 C1540 791 1702 629 1689 462 C1712 629 1606 791 1641 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M1593 1060 C1568 792 1436 631 1431 464 C1451 631 1669 792 1694 1060Z' fill='url(%23c2)' opacity='0.39' filter='url(%23b5)'/><path d='M1588 1060 C1520 775 1313 604 1285 427 C1324 604 1590 775 1657 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.3'/></svg>"); }  /* amber */
[data-wp="2"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%2307030e'/><stop offset='1' stop-color='%231a0b2c'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%233e0c72'/><stop offset='.75' stop-color='%23b56cff' stop-opacity='.9'/><stop offset='1' stop-color='%23b56cff' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%235c0c58'/><stop offset='.75' stop-color='%23ff5cb4' stop-opacity='.9'/><stop offset='1' stop-color='%23ff5cb4' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%232a127a'/><stop offset='.75' stop-color='%237a6cff' stop-opacity='.9'/><stop offset='1' stop-color='%237a6cff' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='1300' cy='180' rx='760' ry='300' fill='%23ff5cb4' opacity='.16' filter='url(%23b30)'/><path d='M-149 1060 C-200 807 40 655 55 498 C120 655 331 807 381 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M13 1060 C30 838 227 704 243 566 C242 704 135 838 117 1060Z' fill='url(%23c0)' opacity='0.37' filter='url(%23b5)'/><path d='M101 1060 C220 797 162 640 227 476 C175 640 307 797 189 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M44 1060 C5 822 299 679 286 531 C311 679 90 822 129 1060Z' fill='url(%23c0)' opacity='0.51' filter='url(%23b5)'/><path d='M33 1060 C-14 827 170 687 151 541 C180 687 56 827 103 1060Z' fill='url(%23c1)' opacity='0.54' filter='url(%23b5)'/><path d='M92 1060 C142 802 247 647 276 487 C255 647 197 802 148 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M150 1060 C217 883 214 777 251 667 C221 777 262 883 195 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M57 1060 C133 841 48 709 92 573 C59 709 205 841 130 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M44 1060 C48 799 -34 643 -27 481 C-24 643 115 799 111 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M90 1060 C51 816 -106 670 -122 519 C-98 670 101 816 140 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M46 1060 C92 887 -14 783 15 675 C-2 783 173 887 127 1060Z' fill='url(%23c1)' opacity='0.42' filter='url(%23b5)'/><path d='M75 1060 C7 830 65 692 39 549 C81 692 110 830 178 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M116 1060 C10 777 123 607 73 431 C130 607 54 777 161 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M27 1060 C6 825 -41 684 -45 538 C-29 684 87 825 108 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M245 1060 C283 731 218 533 278 329 C299 533 819 731 780 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M426 1060 C385 815 393 668 380 515 C408 668 484 815 525 1060Z' fill='url(%23c1)' opacity='0.45' filter='url(%23b5)'/><path d='M543 1060 C628 787 462 623 509 453 C471 623 684 787 599 1060Z' fill='url(%23c2)' opacity='0.42' filter='url(%23b5)'/><path d='M526 1060 C549 831 90 693 105 550 C98 693 599 831 577 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M452 1060 C532 846 5 717 50 584 C16 717 607 846 527 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M523 1060 C575 845 206 716 236 582 C214 716 629 845 577 1060Z' fill='url(%23c1)' opacity='0.60' filter='url(%23b5)'/><path d='M425 1060 C451 696 350 477 369 250 C362 477 535 696 509 1060Z' fill='url(%23c2)' opacity='0.37' filter='url(%23b5)'/><path d='M432 1060 C333 815 322 669 278 517 C333 669 403 815 503 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M515 1060 C621 814 43 667 99 514 C49 667 666 814 560 1060Z' fill='url(%23c2)' opacity='0.58' filter='url(%23b5)'/><path d='M512 1060 C446 768 356 592 329 410 C368 592 529 768 596 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M471 1060 C438 807 123 655 114 497 C138 655 533 807 565 1060Z' fill='url(%23c2)' opacity='0.51' filter='url(%23b5)'/><path d='M438 1060 C443 786 79 622 87 451 C89 622 510 786 505 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M485 1060 C507 679 514 451 529 214 C521 451 556 679 533 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M521 1060 C601 841 401 709 445 573 C409 709 654 841 574 1060Z' fill='url(%23c1)' opacity='0.60' filter='url(%23b5)'/><path d='M493 1060 C434 796 754 638 763 473 C830 638 940 796 998 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M752 1060 C805 775 823 604 856 426 C837 604 895 775 843 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M780 1060 C743 843 724 713 709 577 C731 713 791 843 828 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M660 1060 C593 803 1033 649 1007 489 C1047 649 689 803 756 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M679 1060 C633 754 855 571 837 381 C865 571 700 754 746 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M687 1060 C767 841 566 710 610 574 C575 710 828 841 748 1060Z' fill='url(%23c2)' opacity='0.38' filter='url(%23b5)'/><path d='M642 1060 C710 883 702 778 744 668 C717 778 810 883 742 1060Z' fill='url(%23c0)' opacity='0.58' filter='url(%23b5)'/><path d='M673 1060 C689 795 535 635 551 470 C550 635 785 795 769 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M700 1060 C734 855 784 732 809 604 C799 732 834 855 799 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M725 1060 C734 891 915 789 927 684 C931 789 841 891 832 1060Z' fill='url(%23c2)' opacity='0.43' filter='url(%23b5)'/><path d='M730 1060 C616 876 860 766 809 651 C874 766 709 876 823 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M712 1060 C597 787 814 623 761 453 C822 623 647 787 761 1060Z' fill='url(%23c2)' opacity='0.42' filter='url(%23b5)'/><path d='M708 1060 C630 875 634 764 603 649 C650 764 732 875 810 1060Z' fill='url(%23c0)' opacity='0.49' filter='url(%23b5)'/><path d='M766 1060 C787 799 741 642 756 480 C751 642 855 799 835 1060Z' fill='url(%23c2)' opacity='0.47' filter='url(%23b5)'/><path d='M814 1060 C852 794 896 634 957 468 C980 634 1407 794 1369 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1019 1060 C1010 869 851 754 852 635 C862 754 1081 869 1090 1060Z' fill='url(%23c0)' opacity='0.38' filter='url(%23b5)'/><path d='M1036 1060 C1150 763 820 585 883 400 C832 585 1236 763 1122 1060Z' fill='url(%23c1)' opacity='0.45' filter='url(%23b5)'/><path d='M1027 1060 C940 843 935 713 896 579 C942 713 989 843 1075 1060Z' fill='url(%23c0)' opacity='0.52' filter='url(%23b5)'/><path d='M1017 1060 C1116 779 1043 610 1097 435 C1053 610 1179 779 1080 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M1039 1060 C1137 799 831 642 884 479 C839 642 1187 799 1089 1060Z' fill='url(%23c0)' opacity='0.57' filter='url(%23b5)'/><path d='M1101 1060 C1214 836 902 701 965 561 C915 701 1295 836 1182 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M1065 1060 C950 853 1090 729 1041 600 C1106 729 1055 853 1170 1060Z' fill='url(%23c0)' opacity='0.52' filter='url(%23b5)'/><path d='M1008 1060 C1055 820 1084 675 1113 526 C1095 675 1132 820 1085 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M1041 1060 C1096 846 970 717 1002 584 C979 717 1156 846 1101 1060Z' fill='url(%23c0)' opacity='0.35' filter='url(%23b5)'/><path d='M1050 1060 C1116 797 961 639 999 476 C971 639 1188 797 1121 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M1094 1060 C1181 840 675 709 727 572 C691 709 1289 840 1203 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M1105 1060 C1105 865 1005 747 1009 626 C1013 747 1157 865 1157 1060Z' fill='url(%23c1)' opacity='0.57' filter='url(%23b5)'/><path d='M1112 1060 C1110 818 779 672 783 522 C790 672 1183 818 1185 1060Z' fill='url(%23c0)' opacity='0.37' filter='url(%23b5)'/><path d='M1318 1060 C1354 838 1655 705 1711 566 C1733 705 1873 838 1838 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1587 1060 C1567 802 1629 647 1626 486 C1642 647 1652 802 1672 1060Z' fill='url(%23c1)' opacity='0.47' filter='url(%23b5)'/><path d='M1612 1060 C1559 845 1716 716 1694 582 C1724 716 1609 845 1662 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M1579 1060 C1547 852 1783 728 1774 599 C1798 728 1646 852 1678 1060Z' fill='url(%23c1)' opacity='0.45' filter='url(%23b5)'/><path d='M1518 1060 C1472 822 1788 679 1769 531 C1796 679 1526 822 1572 1060Z' fill='url(%23c2)' opacity='0.53' filter='url(%23b5)'/><path d='M1534 1060 C1619 881 1703 774 1752 663 C1716 774 1708 881 1623 1060Z' fill='url(%23c1)' opacity='0.36' filter='url(%23b5)'/><path d='M1572 1060 C1673 919 1619 834 1675 746 C1630 834 1750 919 1649 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1581 1060 C1501 888 1845 785 1810 678 C1854 785 1562 888 1641 1060Z' fill='url(%23c1)' opacity='0.50' filter='url(%23b5)'/><path d='M1575 1060 C1617 861 1682 741 1709 618 C1694 741 1697 861 1655 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1558 1060 C1649 828 1643 689 1694 545 C1655 689 1733 828 1642 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M1568 1060 C1548 892 1675 792 1674 688 C1691 792 1655 892 1675 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M1537 1060 C1609 845 1719 717 1761 583 C1732 717 1699 845 1628 1060Z' fill='url(%23c1)' opacity='0.42' filter='url(%23b5)'/><path d='M1537 1060 C1638 851 1762 726 1821 596 C1778 726 1745 851 1644 1060Z' fill='url(%23c2)' opacity='0.41' filter='url(%23b5)'/><path d='M1592 1060 C1524 818 1724 673 1695 522 C1733 673 1582 818 1650 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.1'/></svg>"); }  /* orchid */
[data-wp="3"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%2302080b'/><stop offset='1' stop-color='%23051a24'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%2304465c'/><stop offset='.75' stop-color='%2322c8e0' stop-opacity='.9'/><stop offset='1' stop-color='%2322c8e0' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%23063470'/><stop offset='.75' stop-color='%234a9cff' stop-opacity='.9'/><stop offset='1' stop-color='%234a9cff' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%2305463f'/><stop offset='.75' stop-color='%232ee0b0' stop-opacity='.9'/><stop offset='1' stop-color='%232ee0b0' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='1300' cy='180' rx='760' ry='300' fill='%234a9cff' opacity='.16' filter='url(%23b30)'/><path d='M-160 1060 C-198 836 87 702 103 563 C155 702 258 836 295 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M10 1060 C30 830 9 692 27 549 C25 692 138 830 118 1060Z' fill='url(%23c0)' opacity='0.41' filter='url(%23b5)'/><path d='M-15 1060 C-132 856 201 734 148 607 C213 734 -54 856 64 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M80 1060 C-34 835 172 701 122 561 C185 701 51 835 165 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M90 1060 C155 829 -46 691 -10 548 C-39 691 205 829 139 1060Z' fill='url(%23c1)' opacity='0.42' filter='url(%23b5)'/><path d='M26 1060 C-31 866 -1 750 -25 629 C8 750 32 866 89 1060Z' fill='url(%23c0)' opacity='0.46' filter='url(%23b5)'/><path d='M22 1060 C77 901 124 805 156 706 C133 805 137 901 82 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M74 1060 C178 918 104 833 162 745 C115 833 250 918 146 1060Z' fill='url(%23c0)' opacity='0.55' filter='url(%23b5)'/><path d='M58 1060 C150 923 138 840 191 755 C150 840 229 923 136 1060Z' fill='url(%23c1)' opacity='0.49' filter='url(%23b5)'/><path d='M97 1060 C12 809 71 658 33 502 C80 658 71 809 156 1060Z' fill='url(%23c0)' opacity='0.46' filter='url(%23b5)'/><path d='M38 1060 C109 900 104 804 146 705 C116 804 189 900 117 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><path d='M56 1060 C114 860 -81 740 -45 616 C-68 740 197 860 139 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M62 1060 C-37 847 -57 719 -103 587 C-50 719 8 847 108 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M3 1060 C-112 895 204 796 151 693 C214 796 -41 895 74 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M228 1060 C299 855 321 732 393 604 C394 732 783 855 712 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M453 1060 C487 884 202 779 224 669 C212 779 550 884 515 1060Z' fill='url(%23c1)' opacity='0.54' filter='url(%23b5)'/><path d='M449 1060 C374 897 350 799 318 697 C361 799 447 897 522 1060Z' fill='url(%23c2)' opacity='0.45' filter='url(%23b5)'/><path d='M418 1060 C339 864 509 746 474 624 C518 746 401 864 481 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M461 1060 C383 901 530 806 495 708 C537 806 432 901 509 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M378 1060 C372 889 350 787 352 681 C361 787 449 889 456 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M427 1060 C515 903 399 809 447 712 C406 809 566 903 478 1060Z' fill='url(%23c2)' opacity='0.49' filter='url(%23b5)'/><path d='M459 1060 C350 893 586 793 538 689 C599 793 439 893 548 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M424 1060 C487 894 369 795 405 692 C378 795 549 894 486 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M452 1060 C388 885 394 780 368 671 C407 780 471 885 534 1060Z' fill='url(%23c1)' opacity='0.49' filter='url(%23b5)'/><path d='M463 1060 C453 893 558 793 561 689 C573 793 553 893 563 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M433 1060 C332 915 379 829 332 738 C387 829 383 915 485 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M475 1060 C482 867 376 751 386 630 C388 751 563 867 556 1060Z' fill='url(%23c2)' opacity='0.35' filter='url(%23b5)'/><path d='M387 1060 C465 908 178 817 226 723 C195 817 575 908 497 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><path d='M444 1060 C483 741 451 549 512 351 C534 549 1038 741 1000 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M693 1060 C730 788 177 625 203 456 C192 625 833 788 796 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M655 1060 C625 783 755 618 744 445 C763 618 680 783 711 1060Z' fill='url(%23c0)' opacity='0.55' filter='url(%23b5)'/><path d='M661 1060 C612 783 733 616 713 443 C741 616 664 783 713 1060Z' fill='url(%23c2)' opacity='0.56' filter='url(%23b5)'/><path d='M737 1060 C789 824 233 683 265 537 C245 683 868 824 816 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M648 1060 C646 756 465 573 469 384 C474 573 709 756 710 1060Z' fill='url(%23c2)' opacity='0.56' filter='url(%23b5)'/><path d='M694 1060 C804 758 494 577 553 389 C503 577 866 758 756 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M730 1060 C794 779 137 611 172 436 C144 611 843 779 780 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M644 1060 C573 778 468 609 437 434 C477 609 636 778 708 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M688 1060 C806 844 386 715 452 581 C400 715 896 844 778 1060Z' fill='url(%23c2)' opacity='0.60' filter='url(%23b5)'/><path d='M661 1060 C771 804 129 651 189 492 C139 651 840 804 730 1060Z' fill='url(%23c0)' opacity='0.39' filter='url(%23b5)'/><path d='M745 1060 C748 805 759 652 765 494 C769 652 812 805 810 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M648 1060 C722 719 647 514 691 302 C661 514 817 719 742 1060Z' fill='url(%23c0)' opacity='0.54' filter='url(%23b5)'/><path d='M676 1060 C570 775 262 604 213 427 C270 604 623 775 730 1060Z' fill='url(%23c2)' opacity='0.58' filter='url(%23b5)'/><path d='M936 1060 C880 841 1149 709 1162 573 C1230 709 1420 841 1476 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1110 1060 C1001 863 1087 745 1040 623 C1102 745 1105 863 1214 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M1223 1060 C1307 881 931 774 976 662 C938 774 1354 881 1270 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M1217 1060 C1299 868 1257 753 1303 633 C1266 753 1359 868 1277 1060Z' fill='url(%23c0)' opacity='0.46' filter='url(%23b5)'/><path d='M1215 1060 C1129 914 1360 827 1324 736 C1374 827 1224 914 1309 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M1158 1060 C1047 920 1176 836 1129 749 C1192 836 1152 920 1262 1060Z' fill='url(%23c0)' opacity='0.52' filter='url(%23b5)'/><path d='M1166 1060 C1122 838 929 705 915 567 C945 705 1230 838 1274 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M1189 1060 C1290 821 1085 677 1141 529 C1096 677 1366 821 1265 1060Z' fill='url(%23c0)' opacity='0.41' filter='url(%23b5)'/><path d='M1193 1060 C1132 855 1151 733 1127 605 C1165 733 1223 855 1284 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M1168 1060 C1058 810 1327 660 1278 504 C1339 660 1136 810 1246 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M1101 1060 C1012 869 1313 755 1277 636 C1329 755 1115 869 1204 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M1166 1060 C1128 834 1380 698 1364 557 C1387 698 1175 834 1213 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M1196 1060 C1077 841 1139 709 1085 573 C1150 709 1148 841 1267 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M1125 1060 C1025 830 1307 693 1265 550 C1323 693 1131 830 1230 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M1281 1060 C1284 813 1388 664 1422 511 C1453 664 1716 813 1714 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1504 1060 C1473 777 1652 607 1644 431 C1668 607 1575 777 1606 1060Z' fill='url(%23c1)' opacity='0.57' filter='url(%23b5)'/><path d='M1528 1060 C1454 778 1516 609 1483 434 C1524 609 1508 778 1581 1060Z' fill='url(%23c2)' opacity='0.39' filter='url(%23b5)'/><path d='M1419 1060 C1515 889 1509 787 1561 681 C1518 787 1578 889 1483 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M1488 1060 C1574 876 1340 766 1390 651 C1353 766 1662 876 1576 1060Z' fill='url(%23c2)' opacity='0.53' filter='url(%23b5)'/><path d='M1523 1060 C1406 850 1619 723 1565 592 C1626 723 1453 850 1570 1060Z' fill='url(%23c1)' opacity='0.59' filter='url(%23b5)'/><path d='M1485 1060 C1388 895 1568 796 1525 694 C1579 796 1459 895 1556 1060Z' fill='url(%23c2)' opacity='0.44' filter='url(%23b5)'/><path d='M1491 1060 C1549 854 1519 730 1552 601 C1527 730 1605 854 1547 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M1499 1060 C1576 792 1330 632 1375 465 C1342 632 1656 792 1579 1060Z' fill='url(%23c2)' opacity='0.45' filter='url(%23b5)'/><path d='M1509 1060 C1548 835 1409 700 1432 560 C1417 700 1604 835 1565 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M1417 1060 C1306 859 1425 739 1377 614 C1439 739 1399 859 1509 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1474 1060 C1515 873 1369 761 1393 644 C1376 761 1560 873 1520 1060Z' fill='url(%23c1)' opacity='0.46' filter='url(%23b5)'/><path d='M1490 1060 C1579 885 1477 780 1529 670 C1492 780 1678 885 1589 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1462 1060 C1565 847 1318 719 1377 586 C1333 719 1662 847 1558 1060Z' fill='url(%23c1)' opacity='0.51' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.2'/></svg>"); }  /* lagoon */
[data-wp="4"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%23030803'/><stop offset='1' stop-color='%230c1a07'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%231a480c'/><stop offset='.75' stop-color='%236ad03a' stop-opacity='.9'/><stop offset='1' stop-color='%236ad03a' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%2338560a'/><stop offset='.75' stop-color='%23c8e040' stop-opacity='.9'/><stop offset='1' stop-color='%23c8e040' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%230a4426'/><stop offset='.75' stop-color='%2334d088' stop-opacity='.9'/><stop offset='1' stop-color='%2334d088' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='300' cy='180' rx='760' ry='300' fill='%23c8e040' opacity='.16' filter='url(%23b30)'/><path d='M-170 1060 C-177 751 103 565 133 373 C170 565 267 751 274 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M-33 1060 C-85 782 -110 615 -128 443 C-94 615 18 782 70 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M-43 1060 C-84 755 -141 572 -155 382 C-127 572 8 755 50 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M42 1060 C21 715 267 508 261 294 C275 508 69 715 89 1060Z' fill='url(%23c0)' opacity='0.49' filter='url(%23b5)'/><path d='M60 1060 C70 762 195 583 206 397 C207 583 151 762 142 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M-10 1060 C100 714 -167 506 -106 291 C-155 506 183 714 72 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M-28 1060 C18 750 240 564 271 372 C256 564 122 750 77 1060Z' fill='url(%23c1)' opacity='0.36' filter='url(%23b5)'/><path d='M53 1060 C159 883 205 776 266 666 C221 776 259 883 153 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M51 1060 C136 757 -185 575 -139 386 C-178 575 184 757 99 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M-10 1060 C-67 737 150 543 127 343 C161 543 8 737 66 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M14 1060 C-84 751 -65 566 -109 374 C-54 566 -10 751 88 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M-12 1060 C3 720 -162 516 -149 304 C-152 516 70 720 54 1060Z' fill='url(%23c0)' opacity='0.35' filter='url(%23b5)'/><path d='M-46 1060 C-138 804 -3 651 -42 492 C12 651 -38 804 54 1060Z' fill='url(%23c1)' opacity='0.50' filter='url(%23b5)'/><path d='M-46 1060 C-80 721 343 518 333 308 C357 518 16 721 49 1060Z' fill='url(%23c0)' opacity='0.53' filter='url(%23b5)'/><path d='M297 1060 C324 786 533 621 578 451 C596 621 745 786 719 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M524 1060 C563 831 677 694 700 552 C685 694 615 831 577 1060Z' fill='url(%23c1)' opacity='0.50' filter='url(%23b5)'/><path d='M488 1060 C469 867 470 752 466 632 C480 752 534 867 552 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M505 1060 C442 820 710 677 686 527 C724 677 534 820 597 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M430 1060 C505 812 442 663 487 509 C457 663 603 812 528 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M459 1060 C444 783 535 617 535 444 C550 617 546 783 561 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M532 1060 C453 824 380 683 345 536 C389 683 515 824 594 1060Z' fill='url(%23c2)' opacity='0.58' filter='url(%23b5)'/><path d='M422 1060 C541 860 383 740 451 616 C399 740 646 860 527 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M507 1060 C408 830 403 693 357 550 C411 693 458 830 557 1060Z' fill='url(%23c2)' opacity='0.46' filter='url(%23b5)'/><path d='M532 1060 C517 786 420 621 417 451 C429 621 574 786 589 1060Z' fill='url(%23c1)' opacity='0.58' filter='url(%23b5)'/><path d='M440 1060 C519 756 430 574 476 385 C443 574 607 756 528 1060Z' fill='url(%23c2)' opacity='0.51' filter='url(%23b5)'/><path d='M437 1060 C549 846 603 718 663 584 C611 718 599 846 487 1060Z' fill='url(%23c1)' opacity='0.43' filter='url(%23b5)'/><path d='M472 1060 C557 828 577 689 627 545 C592 689 661 828 576 1060Z' fill='url(%23c2)' opacity='0.41' filter='url(%23b5)'/><path d='M497 1060 C582 873 520 760 569 644 C533 760 670 873 586 1060Z' fill='url(%23c1)' opacity='0.38' filter='url(%23b5)'/><path d='M531 1060 C564 847 629 719 682 587 C701 719 1039 847 1006 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M701 1060 C656 884 604 778 589 668 C618 778 746 884 791 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M758 1060 C698 876 705 766 681 652 C718 766 789 876 849 1060Z' fill='url(%23c0)' opacity='0.60' filter='url(%23b5)'/><path d='M778 1060 C895 838 706 705 768 567 C712 705 940 838 823 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M766 1060 C738 842 683 711 673 576 C691 711 793 842 821 1060Z' fill='url(%23c0)' opacity='0.50' filter='url(%23b5)'/><path d='M711 1060 C671 830 899 693 882 550 C905 693 715 830 756 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M747 1060 C637 893 871 794 822 690 C882 794 707 893 817 1060Z' fill='url(%23c0)' opacity='0.50' filter='url(%23b5)'/><path d='M696 1060 C683 921 737 838 735 751 C747 838 746 921 760 1060Z' fill='url(%23c2)' opacity='0.47' filter='url(%23b5)'/><path d='M729 1060 C623 902 766 807 717 709 C774 807 675 902 781 1060Z' fill='url(%23c0)' opacity='0.51' filter='url(%23b5)'/><path d='M745 1060 C699 869 547 754 528 635 C555 754 754 869 800 1060Z' fill='url(%23c2)' opacity='0.58' filter='url(%23b5)'/><path d='M737 1060 C834 882 446 775 501 664 C459 775 920 882 823 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M745 1060 C719 838 571 704 562 566 C579 704 775 838 801 1060Z' fill='url(%23c2)' opacity='0.60' filter='url(%23b5)'/><path d='M793 1060 C898 870 678 756 736 638 C688 756 965 870 860 1060Z' fill='url(%23c0)' opacity='0.41' filter='url(%23b5)'/><path d='M665 1060 C750 896 730 798 780 696 C746 798 856 896 771 1060Z' fill='url(%23c2)' opacity='0.45' filter='url(%23b5)'/><path d='M925 1060 C848 752 1059 567 1058 376 C1135 567 1357 752 1434 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1142 1060 C1024 753 1280 569 1225 379 C1287 569 1069 753 1187 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M1169 1060 C1214 856 980 733 1008 606 C990 733 1283 856 1237 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M1206 1060 C1156 856 961 733 940 606 C969 733 1215 856 1265 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M1083 1060 C1197 838 1040 705 1103 566 C1052 705 1278 838 1164 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M1191 1060 C1149 747 1230 559 1215 365 C1240 559 1214 747 1255 1060Z' fill='url(%23c0)' opacity='0.44' filter='url(%23b5)'/><path d='M1170 1060 C1088 852 1129 728 1095 599 C1141 728 1168 852 1249 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M1190 1060 C1179 741 980 550 981 352 C993 550 1268 741 1280 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M1180 1060 C1191 837 1001 703 1011 565 C1010 703 1256 837 1245 1060Z' fill='url(%23c1)' opacity='0.49' filter='url(%23b5)'/><path d='M1169 1060 C1211 788 1143 624 1171 455 C1157 624 1305 788 1264 1060Z' fill='url(%23c0)' opacity='0.40' filter='url(%23b5)'/><path d='M1177 1060 C1133 855 1063 732 1048 604 C1077 732 1233 855 1276 1060Z' fill='url(%23c1)' opacity='0.38' filter='url(%23b5)'/><path d='M1089 1060 C1139 817 853 671 885 520 C866 671 1227 817 1177 1060Z' fill='url(%23c0)' opacity='0.59' filter='url(%23b5)'/><path d='M1123 1060 C1175 801 1126 645 1160 483 C1142 645 1279 801 1228 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M1076 1060 C1179 776 844 605 903 429 C858 605 1273 776 1169 1060Z' fill='url(%23c0)' opacity='0.55' filter='url(%23b5)'/><path d='M1338 1060 C1389 729 1431 530 1492 324 C1502 530 1865 729 1813 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1606 1060 C1584 731 1436 534 1429 329 C1445 534 1642 731 1663 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M1480 1060 C1564 794 1614 635 1663 469 C1628 635 1659 794 1576 1060Z' fill='url(%23c2)' opacity='0.43' filter='url(%23b5)'/><path d='M1535 1060 C1555 838 1558 705 1577 567 C1574 705 1661 838 1640 1060Z' fill='url(%23c1)' opacity='0.44' filter='url(%23b5)'/><path d='M1538 1060 C1507 810 1343 661 1332 505 C1352 661 1567 810 1598 1060Z' fill='url(%23c2)' opacity='0.47' filter='url(%23b5)'/><path d='M1476 1060 C1578 794 1286 635 1345 470 C1301 635 1678 794 1577 1060Z' fill='url(%23c1)' opacity='0.38' filter='url(%23b5)'/><path d='M1526 1060 C1448 723 1558 520 1527 310 C1574 520 1555 723 1632 1060Z' fill='url(%23c2)' opacity='0.51' filter='url(%23b5)'/><path d='M1467 1060 C1373 823 1462 681 1423 533 C1477 681 1476 823 1570 1060Z' fill='url(%23c1)' opacity='0.51' filter='url(%23b5)'/><path d='M1531 1060 C1422 831 1594 693 1544 550 C1602 693 1472 831 1581 1060Z' fill='url(%23c2)' opacity='0.55' filter='url(%23b5)'/><path d='M1495 1060 C1558 772 1652 600 1692 421 C1668 600 1664 772 1601 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M1499 1060 C1409 792 1251 631 1212 465 C1264 631 1497 792 1587 1060Z' fill='url(%23c2)' opacity='0.57' filter='url(%23b5)'/><path d='M1579 1060 C1528 752 1463 567 1446 375 C1479 567 1635 752 1686 1060Z' fill='url(%23c1)' opacity='0.36' filter='url(%23b5)'/><path d='M1523 1060 C1502 829 1711 690 1707 547 C1723 690 1583 829 1604 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M1549 1060 C1626 837 1454 704 1497 565 C1463 704 1690 837 1612 1060Z' fill='url(%23c1)' opacity='0.60' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.32'/></svg>"); }  /* moss */
[data-wp="5"] { --wp:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 1000' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='bg' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%2303040e'/><stop offset='1' stop-color='%230e1232'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-opacity='.4'/><stop offset='.45' stop-opacity='.05'/><stop offset='1' stop-opacity='.2'/></linearGradient><filter id='b5' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='5'/></filter><filter id='b30' x='-50%' y='-50%' width='200%' height='200%'><feGaussianBlur stdDeviation='30'/></filter><linearGradient id='c0' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%231a2272'/><stop offset='.75' stop-color='%236a7cff' stop-opacity='.9'/><stop offset='1' stop-color='%236a7cff' stop-opacity='0'/></linearGradient><linearGradient id='c1' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%235a1458'/><stop offset='.75' stop-color='%23ff6ac0' stop-opacity='.9'/><stop offset='1' stop-color='%23ff6ac0' stop-opacity='0'/></linearGradient><linearGradient id='c2' x1='0' y1='1' x2='0' y2='0'><stop offset='0' stop-color='%230c3470'/><stop offset='.75' stop-color='%234aa8ff' stop-opacity='.9'/><stop offset='1' stop-color='%234aa8ff' stop-opacity='0'/></linearGradient></defs><rect width='1600' height='1000' fill='url(%23bg)'/><ellipse cx='1300' cy='180' rx='760' ry='300' fill='%23ff6ac0' opacity='.16' filter='url(%23b30)'/><path d='M-233 1060 C-298 855 173 732 181 605 C255 732 249 855 315 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M-56 1060 C39 942 189 871 243 797 C202 871 126 942 30 1060Z' fill='url(%23c0)' opacity='0.45' filter='url(%23b5)'/><path d='M8 1060 C-77 934 243 858 208 780 C257 858 20 934 104 1060Z' fill='url(%23c1)' opacity='0.50' filter='url(%23b5)'/><path d='M-6 1060 C-90 947 251 880 217 810 C268 880 19 947 103 1060Z' fill='url(%23c0)' opacity='0.59' filter='url(%23b5)'/><path d='M22 1060 C-44 843 109 713 80 578 C116 713 4 843 71 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M18 1060 C37 839 80 706 97 568 C95 706 138 839 119 1060Z' fill='url(%23c0)' opacity='0.59' filter='url(%23b5)'/><path d='M0 1060 C6 852 194 727 201 597 C202 727 56 852 50 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><path d='M-59 1060 C-13 850 -34 724 -3 594 C-19 724 87 850 41 1060Z' fill='url(%23c0)' opacity='0.49' filter='url(%23b5)'/><path d='M-17 1060 C29 853 120 729 150 601 C134 729 119 853 73 1060Z' fill='url(%23c1)' opacity='0.43' filter='url(%23b5)'/><path d='M-55 1060 C37 881 62 773 115 661 C76 773 127 881 35 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M-54 1060 C-74 871 91 758 88 641 C106 758 23 871 43 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><path d='M62 1060 C-32 879 194 771 152 658 C205 771 40 879 134 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M11 1060 C-64 860 290 741 260 617 C305 741 39 860 114 1060Z' fill='url(%23c1)' opacity='0.52' filter='url(%23b5)'/><path d='M36 1060 C139 941 179 869 235 795 C188 869 198 941 96 1060Z' fill='url(%23c0)' opacity='0.47' filter='url(%23b5)'/><path d='M148 1060 C121 739 517 546 537 346 C583 546 560 739 587 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M288 1060 C250 723 413 520 399 310 C422 520 310 723 348 1060Z' fill='url(%23c1)' opacity='0.54' filter='url(%23b5)'/><path d='M385 1060 C496 756 510 573 570 384 C520 573 562 756 452 1060Z' fill='url(%23c2)' opacity='0.60' filter='url(%23b5)'/><path d='M380 1060 C457 785 291 620 335 448 C303 620 535 785 459 1060Z' fill='url(%23c1)' opacity='0.40' filter='url(%23b5)'/><path d='M315 1060 C304 737 309 544 307 343 C316 544 350 737 360 1060Z' fill='url(%23c2)' opacity='0.59' filter='url(%23b5)'/><path d='M387 1060 C368 831 575 693 572 550 C587 693 447 831 466 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M334 1060 C288 792 754 631 737 464 C766 631 369 792 415 1060Z' fill='url(%23c2)' opacity='0.42' filter='url(%23b5)'/><path d='M384 1060 C468 803 512 648 560 488 C523 648 540 803 455 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><path d='M305 1060 C222 784 875 618 841 446 C890 618 323 784 406 1060Z' fill='url(%23c2)' opacity='0.43' filter='url(%23b5)'/><path d='M340 1060 C277 854 518 731 492 603 C529 731 356 854 419 1060Z' fill='url(%23c1)' opacity='0.53' filter='url(%23b5)'/><path d='M357 1060 C318 736 553 541 541 339 C568 541 419 736 458 1060Z' fill='url(%23c2)' opacity='0.35' filter='url(%23b5)'/><path d='M295 1060 C375 739 288 546 332 346 C296 546 431 739 352 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M349 1060 C405 773 587 601 619 423 C595 601 465 773 409 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M324 1060 C384 705 569 492 605 272 C580 492 456 705 395 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M506 1060 C546 739 584 547 640 347 C657 547 1036 739 997 1060Z' fill='url(%23c2)' opacity='0.85' filter='url(%23b30)'/><path d='M733 1060 C753 822 603 680 617 532 C612 680 811 822 791 1060Z' fill='url(%23c2)' opacity='0.39' filter='url(%23b5)'/><path d='M724 1060 C762 851 550 726 576 595 C564 726 859 851 821 1060Z' fill='url(%23c0)' opacity='0.42' filter='url(%23b5)'/><path d='M725 1060 C792 831 771 694 808 552 C778 694 838 831 770 1060Z' fill='url(%23c2)' opacity='0.57' filter='url(%23b5)'/><path d='M779 1060 C717 803 869 649 842 489 C878 649 774 803 836 1060Z' fill='url(%23c0)' opacity='0.36' filter='url(%23b5)'/><path d='M661 1060 C650 736 386 542 386 341 C398 542 734 736 745 1060Z' fill='url(%23c2)' opacity='0.49' filter='url(%23b5)'/><path d='M749 1060 C780 762 615 583 635 397 C625 583 848 762 816 1060Z' fill='url(%23c0)' opacity='0.52' filter='url(%23b5)'/><path d='M650 1060 C623 769 471 595 464 414 C485 595 721 769 748 1060Z' fill='url(%23c2)' opacity='0.35' filter='url(%23b5)'/><path d='M656 1060 C628 730 739 532 731 326 C751 532 707 730 735 1060Z' fill='url(%23c0)' opacity='0.56' filter='url(%23b5)'/><path d='M703 1060 C637 738 661 544 634 344 C673 544 718 738 785 1060Z' fill='url(%23c2)' opacity='0.53' filter='url(%23b5)'/><path d='M728 1060 C790 792 442 631 478 464 C451 631 852 792 790 1060Z' fill='url(%23c0)' opacity='0.52' filter='url(%23b5)'/><path d='M778 1060 C788 857 446 735 456 608 C456 735 853 857 843 1060Z' fill='url(%23c2)' opacity='0.38' filter='url(%23b5)'/><path d='M664 1060 C653 715 470 507 470 293 C482 507 733 715 744 1060Z' fill='url(%23c0)' opacity='0.38' filter='url(%23b5)'/><path d='M719 1060 C762 869 522 754 548 634 C530 754 818 869 774 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M963 1060 C1031 772 975 600 1039 421 C1036 600 1439 772 1371 1060Z' fill='url(%23c0)' opacity='0.85' filter='url(%23b30)'/><path d='M1157 1060 C1222 855 803 732 842 605 C817 732 1320 855 1255 1060Z' fill='url(%23c0)' opacity='0.58' filter='url(%23b5)'/><path d='M1157 1060 C1119 820 1121 675 1108 526 C1133 675 1199 820 1237 1060Z' fill='url(%23c1)' opacity='0.37' filter='url(%23b5)'/><path d='M1111 1060 C1072 745 1051 555 1039 359 C1066 555 1172 745 1212 1060Z' fill='url(%23c0)' opacity='0.57' filter='url(%23b5)'/><path d='M1120 1060 C1160 876 955 766 983 652 C970 766 1258 876 1217 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M1179 1060 C1189 849 1188 723 1197 592 C1196 723 1238 849 1228 1060Z' fill='url(%23c0)' opacity='0.51' filter='url(%23b5)'/><path d='M1168 1060 C1168 864 1249 747 1253 625 C1258 747 1233 864 1234 1060Z' fill='url(%23c1)' opacity='0.48' filter='url(%23b5)'/><path d='M1179 1060 C1185 765 1004 588 1014 404 C1018 588 1278 765 1272 1060Z' fill='url(%23c0)' opacity='0.37' filter='url(%23b5)'/><path d='M1181 1060 C1183 825 852 684 857 538 C859 684 1228 825 1226 1060Z' fill='url(%23c1)' opacity='0.35' filter='url(%23b5)'/><path d='M1088 1060 C1069 742 1323 551 1318 353 C1332 551 1129 742 1149 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M1076 1060 C1192 748 940 560 1005 366 C955 560 1294 748 1179 1060Z' fill='url(%23c1)' opacity='0.41' filter='url(%23b5)'/><path d='M1173 1060 C1133 873 1180 762 1167 646 C1193 762 1214 873 1254 1060Z' fill='url(%23c0)' opacity='0.43' filter='url(%23b5)'/><path d='M1181 1060 C1230 746 1172 558 1203 363 C1184 558 1307 746 1258 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M1141 1060 C1213 737 1081 544 1124 343 C1095 544 1305 737 1233 1060Z' fill='url(%23c0)' opacity='0.48' filter='url(%23b5)'/><path d='M1387 1060 C1331 755 1472 571 1474 381 C1533 571 1735 755 1792 1060Z' fill='url(%23c1)' opacity='0.85' filter='url(%23b30)'/><path d='M1542 1060 C1465 743 1273 553 1241 356 C1288 553 1565 743 1642 1060Z' fill='url(%23c1)' opacity='0.59' filter='url(%23b5)'/><path d='M1524 1060 C1583 722 1290 520 1324 310 C1300 520 1649 722 1590 1060Z' fill='url(%23c2)' opacity='0.40' filter='url(%23b5)'/><path d='M1569 1060 C1508 808 1695 657 1672 500 C1711 657 1616 808 1677 1060Z' fill='url(%23c1)' opacity='0.43' filter='url(%23b5)'/><path d='M1567 1060 C1471 729 1696 530 1655 324 C1710 530 1567 729 1664 1060Z' fill='url(%23c2)' opacity='0.52' filter='url(%23b5)'/><path d='M1543 1060 C1653 821 1510 678 1570 530 C1520 678 1714 821 1604 1060Z' fill='url(%23c1)' opacity='0.55' filter='url(%23b5)'/><path d='M1519 1060 C1622 733 1336 537 1393 334 C1346 537 1693 733 1590 1060Z' fill='url(%23c2)' opacity='0.48' filter='url(%23b5)'/><path d='M1498 1060 C1425 812 1486 662 1457 508 C1501 662 1526 812 1599 1060Z' fill='url(%23c1)' opacity='0.46' filter='url(%23b5)'/><path d='M1537 1060 C1588 839 1579 707 1608 570 C1587 707 1639 839 1588 1060Z' fill='url(%23c2)' opacity='0.36' filter='url(%23b5)'/><path d='M1535 1060 C1452 868 1742 753 1707 633 C1754 753 1530 868 1613 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M1546 1060 C1492 816 1690 669 1671 517 C1706 669 1596 816 1651 1060Z' fill='url(%23c2)' opacity='0.55' filter='url(%23b5)'/><path d='M1593 1060 C1542 751 1729 565 1709 372 C1741 565 1625 751 1676 1060Z' fill='url(%23c1)' opacity='0.56' filter='url(%23b5)'/><path d='M1556 1060 C1630 769 1670 594 1710 412 C1677 594 1680 769 1605 1060Z' fill='url(%23c2)' opacity='0.50' filter='url(%23b5)'/><path d='M1534 1060 C1470 827 1449 686 1423 541 C1462 686 1556 827 1620 1060Z' fill='url(%23c1)' opacity='0.39' filter='url(%23b5)'/><rect width='1600' height='1000' fill='url(%23v)'/><rect width='1600' height='1000' opacity='0.15'/></svg>"); }  /* dusk */
* { box-sizing: border-box; }
html { touch-action:pan-x pan-y; }  /* no pinch or double-tap zoom; JS gestures (photo pinch) still get their pointer events */
/* Touch screen: Chromium's tap highlight (a dark box over whatever was tapped, which the car's browser can leave
   behind) is off; pressed feedback is :active only, as on CarPlay. Any :hover style goes inside
   @media (hover:hover) and (pointer:fine), or a tap leaves it stuck on. */
html { -webkit-tap-highlight-color:transparent; }
/* An app, not a document: no text selection, long-press callout or system drag-and-drop (on WebKit a press-and-drag
   on the video lifted it as a drag preview, which stole the seek gesture and showed the page behind). Fields stay editable. */
body { -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
img, canvas, svg, a { -webkit-user-drag:none; }
input, textarea { -webkit-user-select:text; user-select:text; }
html, body { margin:0; height:100%; background:var(--bg); color:var(--text); font-family:system-ui, -apple-system, "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; -webkit-font-smoothing:antialiased; }
button { font:inherit; color:inherit; cursor:pointer; border:0; }
#app { height:100vh; display:flex; background:var(--wp) center / cover no-repeat, #050307; }
/* lite check (app.js fpsProbe): drift the wallpaper 3px for 3 s so every glass layer really re-renders */
#app.probe { animation:probe 3s linear; }
@keyframes probe { to { background-position:50% calc(50% + 3px), 0 0; } }
.stage { flex:1; min-width:0; display:flex; flex-direction:column; }

/* ---- Liquid Glass material (iOS 26/27 style) ----
   translucent fill + backdrop blur/saturate, a bright gradient rim (::before, masked to 1px), a specular
   sheen across the top (::after) and a soft drop shadow. --gf tints the fill per surface.
   Perf (Tesla MCU2): blur <= 20px, glass is never nested inside glass; html.lite swaps the blur for a solid fill. */
.glass, .tab.on { --gf:rgba(255,255,255,.1); position:relative; isolation:isolate; background:var(--gf);
  -webkit-backdrop-filter:blur(20px) saturate(170%) brightness(.92); backdrop-filter:blur(20px) saturate(170%) brightness(.92);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.22), 0 10px 30px rgba(0,0,0,.3); }
.glass::before, .tab.on::before { content:""; position:absolute; inset:0; z-index:1; border-radius:inherit; padding:1px; pointer-events:none;
  background:linear-gradient(155deg, rgba(255,255,255,.6), rgba(255,255,255,.12) 28%, rgba(255,255,255,0) 50%, rgba(255,255,255,.06) 72%, rgba(255,255,255,.32));
  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite:xor; mask-composite:exclude; }
.glass::after, .tab.on::after { content:""; position:absolute; left:0; right:0; top:0; height:min(50%, 90px); z-index:1; pointer-events:none;
  border-radius:inherit; border-bottom-left-radius:0; border-bottom-right-radius:0; background:linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,0)); }
/* lite: no backdrop blur anywhere, a solid translucent fill instead (also for prefers-reduced-transparency, set by app.js) */
.lite .glass, .lite .tab.on { -webkit-backdrop-filter:none; backdrop-filter:none; background:rgba(38,40,46,.9); }
.lite .player .glass { background:rgba(20,20,22,.82); }

/* CarPlay status dock (left, every view) */
.dock { --gf:rgba(255,255,255,.08); width:var(--dock); flex:none; margin:10px 0 10px 10px; border-radius:28px; display:flex; flex-direction:column; align-items:center; gap:10px;
        padding:clamp(14px, 2.5vh, 24px) 0 clamp(12px, 2vh, 18px); }
.dock { z-index:10; }  /* above Now Playing, which slides up behind it */
.dock > * { position:relative; z-index:2; }  /* above the glass rim/sheen */
.dk-status { display:flex; flex-direction:column; align-items:center; gap:6px; }
.clock { font-size:clamp(22px, 2vw, 30px); font-weight:600; letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
/* iOS 26/27 status: phone glyph + name, then network type and battery on one line */
.dk-sig { display:flex; align-items:center; gap:4px; font-size:12px; font-weight:500; color:rgba(255,255,255,.75); }
.dk-sig svg { width:9px; height:14px; fill:currentColor; }
.dk-net { display:flex; align-items:center; gap:5px; min-height:16px; font-size:12px; font-weight:600; font-variant-numeric:tabular-nums; }
.dk-net b { font-weight:700; letter-spacing:.01em; }
.dk-bat { display:flex; align-items:center; gap:3px; font-size:12px; font-weight:600; }
.dk-bat[hidden], .dk-net b[hidden] { display:none; }
.dk-sig, #ph-radio { display:none !important; }  /* phone name and network type dropped from the dock: only the battery stays */
/* battery: thin rounded outline, capsule fill to --lvl, nub; green + bolt when charging, red at <=20% */
.bat { position:relative; width:22px; height:11px; padding:2px; border:1px solid rgba(255,255,255,.45); border-radius:4.5px; margin-right:3px; }
.bat::after { content:""; position:absolute; right:-3.5px; top:3.5px; width:2px; height:4px; border-radius:0 2px 2px 0; background:rgba(255,255,255,.45); }
.bat i { display:block; height:100%; width:var(--lvl, 0%); min-width:3px; border-radius:2.5px; background:#fff; }
.bat svg { display:none; position:absolute; inset:0; margin:auto; height:11px; fill:#fff; stroke:rgba(0,0,0,.55); stroke-width:1; paint-order:stroke; }
.dk-bat.charging .bat i { background:#30d158; }
.dk-bat.charging .bat svg { display:block; }
.dk-bat.low .bat i { background:#ff453a; }
.dk-bat.low #ph-pct { color:#ff6961; }
.dk-badge { margin:0 10px; font-size:12px; font-weight:600; line-height:1.3; padding:4px 8px; border-radius:8px; background:rgba(255,59,48,.2); color:#ff6961; text-align:center; }
.dk-badge[hidden] { display:none; }
.dk-recents { flex:1; min-height:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:clamp(12px, 2vh, 20px); }
.rc { width:clamp(54px, 4.6vw, 68px); aspect-ratio:1; padding:0; background:none; position:relative; border-radius:22.5%; }
.rc .ic { width:100%; height:100%; }
.rc:active { filter:brightness(.75); }
/* Now Playing icon: level bars bob while playing (not for reduced motion) */
.lv { transform-box:fill-box; transform-origin:center; }
.playing .lv { animation:lv .9s ease-in-out infinite alternate; }
.playing .lv:nth-child(2n) { animation-duration:.7s; animation-delay:-.3s; }
.playing .lv:nth-child(3n) { animation-duration:1.1s; animation-delay:-.6s; }
@keyframes lv { from { transform:scaleY(1); } to { transform:scaleY(.45); } }
@media (prefers-reduced-motion: reduce) { .playing .lv { animation:none; } }
.dk-home { width:58px; height:58px; border-radius:50%; background:rgba(255,255,255,.14); box-shadow:inset 0 1px 0 rgba(255,255,255,.3), inset 0 0 0 1px rgba(255,255,255,.08); display:flex; align-items:center; justify-content:center; flex:none; }
.dk-home:active { background:rgba(255,255,255,.3); }
.dk-home svg { width:24px; height:24px; fill:#fff; }

main { flex:1; min-height:0; display:flex; }
.view { flex:1; min-width:0; }
.view[hidden], .nowbar[hidden] { display:none; }
/* non-home views: the whole wallpaper is dimmed (dock included) so dock and page share one background */
body.on-page #app { background:linear-gradient(rgba(6,8,10,.82), rgba(6,8,10,.82)), var(--wp) center / cover no-repeat, #050307; }
/* CarPlay light appearance: on a light wallpaper (html[data-tone=light], app.js) the bare home screen gets dark labels
   and a light frosted dock. Pages (dimmed above) and Now Playing keep the dark look. */
[data-tone="light"] body:not(.on-page):not(.np-open) .dock { --gf:rgba(255,255,255,.5); color:#1d1d1f; box-shadow:inset 0 1px 0 rgba(255,255,255,.6), 0 10px 30px rgba(0,0,0,.12); }
.lite[data-tone="light"] body:not(.on-page):not(.np-open) .dock { background:rgba(242,242,247,.9); }
[data-tone="light"] body:not(.on-page):not(.np-open) .bat { border-color:rgba(29,29,31,.45); }
[data-tone="light"] body:not(.on-page):not(.np-open) .bat::after { background:rgba(29,29,31,.45); }
[data-tone="light"] body:not(.on-page):not(.np-open) .dk-bat:not(.charging):not(.low) .bat i { background:#1d1d1f; }
[data-tone="light"] body:not(.on-page):not(.np-open) .dk-home { background:rgba(29,29,31,.08); box-shadow:inset 0 0 0 1px rgba(29,29,31,.06); }
[data-tone="light"] body:not(.on-page):not(.np-open) .dk-home:active { background:rgba(29,29,31,.18); }
[data-tone="light"] body:not(.on-page):not(.np-open) .dk-home svg { fill:#1d1d1f; }
[data-tone="light"] .app b { color:#1d1d1f; text-shadow:none; }
[data-tone="light"] .dots::before { background:rgba(255,255,255,.45); box-shadow:inset 0 0 0 .5px rgba(29,29,31,.12); }
.lite[data-tone="light"] .dots::before { background:rgba(242,242,247,.9); }
[data-tone="light"] .pdot::after { background:rgba(29,29,31,.28); }
[data-tone="light"] .pdot.on::after { background:#1d1d1f; }
/* dashboard cards keep their white text (and the playing card its dark art backdrop): smoked glass instead */
[data-tone="light"] .card-np, [data-tone="light"] .card-resume, [data-tone="light"] .card-wx, [data-tone="light"] .card-cal { --gf:rgba(28,28,30,.55); }

/* home: two pages side by side in .track, slid by --page (and by the finger while dragging) */
.home { position:relative; overflow:hidden; display:flex; flex-direction:column; touch-action:none; user-select:none; -webkit-user-select:none; }
.track { flex:1; min-height:0; display:flex; width:200%; transform:translateX(calc(var(--page, 0) * -50%)); transition:transform .35s cubic-bezier(.2,.8,.2,1); }
.track.dragging { transition:none; }
.hpage { width:50%; flex:none; min-height:0; }
/* iOS page dots: 8 px dots 16 px apart in a small glass capsule. Each button is a full 64 px hit area with its
   dot drawn at the inner edge, so the targets stay big while the dots sit close.
   ponytail: assumes the two home pages; a third page would need a centred middle dot. */
.dots { flex:none; position:relative; display:flex; justify-content:center; margin-top:-12px; }
.dots::before { content:""; position:absolute; left:50%; top:50%; width:44px; height:24px; transform:translate(-50%, -50%); border-radius:999px;
  background:rgba(255,255,255,.12); box-shadow:inset 0 0 0 .5px rgba(255,255,255,.3); -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px); pointer-events:none; }
.lite .dots::before { -webkit-backdrop-filter:none; backdrop-filter:none; background:rgba(38,40,46,.9); }
.pdot { position:relative; width:64px; height:64px; padding:0; background:none; display:flex; align-items:center; justify-content:flex-end; }
.pdot + .pdot { justify-content:flex-start; }
.pdot::after { content:""; width:8px; height:8px; margin:0 4px; border-radius:50%; background:rgba(255,255,255,.35); transition:background .2s; }
.pdot.on::after { background:#fff; }

/* page 1: icon grid */
.grid { --ic:clamp(84px, min(12.5vw, 17vh), 150px); display:grid; grid-template-columns:repeat(5, minmax(0,1fr)); grid-template-rows:repeat(2, calc(var(--ic) + 64px));  /* two CarPlay rows; apps fill from the top-left */ align-content:space-evenly; row-gap:clamp(16px, 4vh, 48px); padding:clamp(16px, 3vh, 40px) clamp(16px, 3vw, 56px) 0; }
.app { background:none; padding:6px; display:flex; flex-direction:column; align-items:center; gap:clamp(8px, 1.2vh, 14px); min-width:0; }
.ic { display:block; position:relative; width:var(--ic); aspect-ratio:1; border-radius:24%; overflow:hidden; background:var(--g); flex:none;
      box-shadow:0 8px 22px rgba(0,0,0,.38), 0 2px 4px rgba(0,0,0,.2); }
/* glass edge highlight (all icons, YouTube's too) + top sheen */
.ic::before { content:""; position:absolute; inset:0; z-index:1; border-radius:inherit; padding:1.5px; pointer-events:none;
  background:linear-gradient(150deg, rgba(255,255,255,.75), rgba(255,255,255,.1) 35%, rgba(255,255,255,0) 55%, rgba(255,255,255,.35));
  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite:xor; mask-composite:exclude; }
.ic::after { content:""; position:absolute; inset:0; background:linear-gradient(rgba(255,255,255,.18), rgba(255,255,255,0) 50%); }
/* iOS 26/27 system icons: soft glow from the top-left over the gradient body, glyphs with depth */
.ic.sys { background:radial-gradient(110% 80% at 25% 0%, rgba(255,255,255,.38), rgba(255,255,255,0) 60%), var(--g); }
.ic.sys svg { filter:drop-shadow(0 3px 3px rgba(0,0,0,.22)); }
.ic svg { display:block; width:100%; height:100%; }
/* real Apple icon PNGs: their own squircle and glass, so no fill, rim or sheen; only the tile radius clips. onerror drops .apple */
.ic.apple { background:none; }
.ic.apple::before, .ic.apple::after, .ic.apple svg { display:none; }
.ic img { display:block; width:100%; height:100%; }
.app:active .ic { filter:brightness(.75); transform:scale(.96); }
.app[hidden] { display:none; }
.app b { max-width:100%; font-size:clamp(14px, 1.5vw, 20px); font-weight:400; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-shadow:0 1px 4px rgba(0,0,0,.6); }

/* page 2: dashboard — now playing (left, tall), resume + shortcuts (right) */
.dash { display:grid; grid-template-columns:minmax(0,1.2fr) minmax(0,1fr); grid-template-rows:auto auto minmax(0,1fr); gap:clamp(14px, 1.6vw, 24px); padding:clamp(16px, 2.5vh, 32px) clamp(16px, 2.5vw, 40px) 0; }
.card-np, .card-resume, .card-wx, .card-cal { --gf:rgba(255,255,255,.09); border-radius:34px; min-height:0; overflow:hidden; }
.card-np { grid-row:1 / -1; position:relative; display:flex; flex-direction:column; gap:clamp(12px, 2vh, 20px); padding:clamp(18px, 2.2vw, 32px); touch-action:none; }
.card-np > *:not(.dn-bg), .card-resume > *, .card-wx > *, .card-cal > * { position:relative; z-index:2; }
.card-np svg, .card-resume svg { display:block; fill:currentColor; }
.dn-bg { position:absolute; inset:-40px; width:calc(100% + 80px); height:calc(100% + 80px); object-fit:cover; filter:blur(24px) brightness(.45); opacity:.85; pointer-events:none; }
.dn-top { display:flex; flex-wrap:wrap; align-items:center; gap:clamp(14px, 1.6vw, 24px); min-height:0; }
.dn-art { height:clamp(96px, 24vh, 260px); aspect-ratio:1; border-radius:18px; object-fit:cover; background:#2A3237; box-shadow:0 10px 30px rgba(0,0,0,.45); pointer-events:none; }
.card-np.video .dn-art { aspect-ratio:16/9; height:clamp(90px, 20vh, 220px); }
.dn-meta { flex:1 1 200px; min-width:0; display:flex; flex-direction:column; gap:6px; }
.dn-meta small { font-size:15px; font-weight:600; letter-spacing:.04em; color:#ff375f; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dn-meta b { font-size:clamp(22px, 2.3vw, 34px); line-height:1.2; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.dn-meta span { font-size:clamp(17px, 1.6vw, 22px); color:#c7c7cc; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dn-scrub { margin-top:auto; flex:none; }
.dn-scrub .times { margin-top:-14px; }
.dn-btns { display:flex; align-items:center; justify-content:center; gap:clamp(20px, 4vw, 64px); flex:none; }
.dnb { width:clamp(72px, 10vh, 96px); height:clamp(72px, 10vh, 96px); border-radius:50%; background:none; display:flex; align-items:center; justify-content:center; color:#fff; flex:none; }
.dnb:active { background:rgba(255,255,255,.15); }
.dnb svg { width:56%; height:56%; }
.dnb.main { width:clamp(84px, 12vh, 112px); height:clamp(84px, 12vh, 112px); background:#fff; color:#000; }
.dnb.main:active { background:#d1d1d6; }
.dn-idle { display:none; flex:1; flex-direction:column; align-items:center; justify-content:center; gap:10px; text-align:center; }
.dn-logo { width:clamp(72px, 11vh, 104px); aspect-ratio:1; border-radius:22.5%; box-shadow:0 8px 24px rgba(0,0,0,.4); margin-bottom:clamp(4px, 1.5vh, 16px); }
.dn-idle b { font-size:clamp(26px, 2.8vw, 38px); }
.dn-idle span { font-size:clamp(17px, 1.6vw, 22px); color:#aeaeb2; margin-bottom:clamp(8px, 2vh, 24px); max-width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.card-np.idle > :not(.dn-idle) { display:none; }
.card-np.idle .dn-idle { display:flex; }
.card-resume { padding:clamp(14px, 1.4vw, 20px); display:flex; flex-direction:column; gap:12px; text-align:left; }
.card-resume:active { filter:brightness(.85); }
.cr-thumb { position:relative; flex:1; min-height:64px; border-radius:22px; overflow:hidden; background:linear-gradient(135deg, #3a3a3c, #1c1c1e); }
.cr-thumb img { width:100%; height:100%; object-fit:cover; }
.cr-thumb i { position:absolute; right:12px; bottom:12px; width:52px; height:52px; border-radius:50%; background:rgba(255,255,255,.9); box-shadow:0 4px 12px rgba(0,0,0,.3); color:#000; display:flex; align-items:center; justify-content:center; }
.cr-thumb i svg { width:28px; height:28px; }
.cr-text { display:flex; flex-direction:column; gap:4px; min-width:0; flex:none; }
.cr-text small { font-size:15px; font-weight:600; letter-spacing:.04em; color:#ff9f0a; }
.cr-text b { font-size:clamp(18px, 1.7vw, 24px); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cr-clear { position:absolute; top:4px; right:4px; z-index:3; width:64px; height:64px; padding:0; background:none; display:flex; align-items:center; justify-content:center; }
.cr-clear span { width:40px; height:40px; border-radius:50%; background:rgba(30,30,32,.55); box-shadow:inset 0 0 0 1px rgba(255,255,255,.25); display:flex; align-items:center; justify-content:center; }
.cr-clear svg { width:22px; height:22px; }
.cr-clear:active span { background:rgba(255,255,255,.3); }
.no-resume .cr-clear, .no-resume .cr-thumb i { display:none; }
.no-resume #app-resume .ic { opacity:.55; }
#app-resume { -webkit-touch-callout:none; user-select:none; -webkit-user-select:none; }
.undo { --gf:rgba(30,30,32,.6); position:absolute; left:50%; bottom:56px; transform:translateX(-50%); z-index:5; display:flex; align-items:center; gap:8px; padding:0 8px 0 28px; border-radius:999px; font-size:20px; white-space:nowrap; }
.undo[hidden], .lp[hidden] { display:none; }
.undo > * { position:relative; z-index:2; }
.undo button { min-height:64px; padding:0 20px; background:none; color:#ffb340; font-weight:600; font-size:20px; }
.lp { position:fixed; inset:0; z-index:20; }
.lp-menu { --gf:rgba(40,40,44,.7); position:absolute; min-width:240px; border-radius:22px; overflow:hidden; }
.lp-menu button { position:relative; z-index:2; display:block; width:100%; min-height:64px; padding:0 24px; background:none; text-align:left; font-size:21px; color:#ff453a; }
.lp-menu button:disabled { color:rgba(255,255,255,.4); }
.dash img:not([src]) { visibility:hidden; }  /* no art (or it failed): no broken-image icon */
/* the dashboard card mirrors the video, so the docked mini-player would only cover the cards */
.on-dash .player.mini { display:none; }

/* dashboard weather (Open-Meteo via the phone) and next calendar event */
.card-wx[hidden], .card-cal[hidden] { display:none; }
.card-wx { padding:14px 18px; display:flex; flex-direction:column; gap:10px; }
.wx-now { display:flex; align-items:center; gap:12px; }
.wx-now svg { width:44px; height:44px; flex:none; }
.wx-now b { font-size:34px; font-weight:300; letter-spacing:-.02em; }
.wx-now span { min-width:0; display:flex; flex-direction:column; font-size:14px; color:#c7c7cc; }
.wx-now span small { color:var(--dim); font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.wx-hours { display:grid; grid-template-columns:repeat(6, minmax(0,1fr)); gap:2px; text-align:center; font-size:13px; color:#c7c7cc; }
.wx-hours span { display:flex; flex-direction:column; align-items:center; gap:2px; }
.wx-hours svg { width:22px; height:22px; }
.card-cal { padding:12px 18px; display:flex; align-items:center; gap:12px; }
.cal-text { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.cal-text small { font-size:13px; font-weight:600; letter-spacing:.04em; color:#ff453a; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cal-text b { font-size:17px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cal-text span { font-size:14px; color:var(--dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cal-go { flex:none; color:#0a84ff; }
.nowbar { --gf:rgba(255,255,255,.1); touch-action:none; height:96px; margin:0 16px 12px; padding:0 14px 0 16px; border-radius:30px; overflow:hidden; display:flex; align-items:center; gap:20px; flex:none; }
.nowbar > * { position:relative; z-index:2; }
.nowbar > .nb-info { position:static; }  /* so .progress hugs the capsule's top edge */
a { color:inherit; text-decoration:none; }
img { display:block; }
.dim { color:var(--dim); font-weight:400; }
.btn { min-height:48px; padding:0 20px; border-radius:999px; background:rgba(255,255,255,.1); box-shadow:inset 0 1px 0 rgba(255,255,255,.2), inset 0 0 0 1px rgba(255,255,255,.06); font-size:17px; display:inline-flex; align-items:center; justify-content:center; flex:none; }
/* touch: rows and cards light up as a glass fill (no backdrop blur, lists can be long) */
.btn:active, .tab:active, .card:active, .row-item:active { background:rgba(255,255,255,.14); box-shadow:inset 0 1px 0 rgba(255,255,255,.25), inset 0 0 0 1px rgba(255,255,255,.08); }
.btn.primary, .btn.on { background:var(--accent); color:var(--bg); font-weight:500; }
.btn.icon { width:48px; padding:0; }
.btn.icon svg { width:24px; height:24px; fill:currentColor; }

/* list pages: top bar + scrolling content */
.page { display:flex; flex-direction:column; min-height:0; }
/* sizes are for the car's ~773 x 601 CSS px browser (@1.53x): 48 px targets are ~73 device px */
.bar { display:flex; gap:8px; align-items:center; padding:12px 20px; flex:none; }
.bar.sub { padding-top:0; }
.bar[hidden], #search-results > [hidden], .tabs[hidden], .crumbs[hidden] { display:none; }
.tabs { flex:1; min-width:0; display:flex; gap:4px; overflow-x:auto; scrollbar-width:none; }
.tabs::-webkit-scrollbar { display:none; }
.tab { min-height:48px; padding:0 18px; border-radius:999px; background:transparent; font-size:17px; color:var(--dim); flex:none; }
.tab.on { --gf:rgba(255,255,255,.14); color:var(--text); font-weight:500; box-shadow:inset 0 1px 0 rgba(255,255,255,.22); }
.content { flex:1; min-height:0; overflow-y:auto; padding:0 20px 24px; -webkit-overflow-scrolling:touch; }
.note { font-size:18px; color:var(--dim); padding:24px 0; }
/* skeletons (app.js skel) while anything loads: the real layout in the thumbnails' own empty colour, breathing slowly
   (opacity only: no repaint); still under Reduce effects and reduced motion */
.skel { pointer-events:none; animation:skel 1.1s ease-in-out infinite alternate; }
@keyframes skel { to { opacity:.45; } }
.lite .skel { animation:none; }
@media (prefers-reduced-motion: reduce) { .skel { animation:none; } }
.skel b, .skel small { display:block; height:.8em; width:85%; margin:.25em 0; border-radius:6px; background:#2A3237; }
.skel small { width:55%; margin:.275em 0; }  /* one line of .vcard small (1.35) */
.skel .v-txt { flex:1; }  /* empty: it would shrink to nothing */
.vcard.skel b + b { width:60%; margin-top:calc(.25em - 4px); }  /* two title lines (1.3em each, less the 4px gap) */
h3.skel { width:180px; height:1.2em; padding-block:.2em; background:#2A3237 content-box; border-radius:6px; }  /* its own margins: one line tall */
.skel i { display:block; flex:none; background:#2A3237; }
.row-item.skel i { width:56px; height:56px; border-radius:14px; }
.shelf-row.rows .row-item.skel i { width:48px; height:48px; }
.ytm .row-item.skel i { border-radius:4px; }
.row-item.skel i.fi { width:64px; height:64px; border-radius:16px; }
.vq-row.skel i { width:112px; height:auto; aspect-ratio:16/9; border-radius:8px; }
.st-tile.skel .st-logo { background:#2A3237; }
.np-lyrics b.skel { display:block; width:56%; height:.8em; margin:.4em auto; border-radius:8px; background:rgba(255,255,255,.14); }  /* 1.6em a line */
.np-lyrics b.skel:nth-child(3n+1) { width:64%; }
.np-lyrics b.skel:nth-child(3n+2) { width:46%; }
.grid3 { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:20px 16px; align-content:start; }
.grid4 { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:20px 16px; align-content:start; }
.grid3 .note, .grid4 .note { grid-column:1 / -1; }
.card { background:transparent; padding:0; text-align:left; display:flex; flex-direction:column; gap:8px; border-radius:22px; min-width:0; }
.card b { font-size:16px; font-weight:500; line-height:1.35; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.card small { font-size:14px; color:var(--dim); }
.thumb { position:relative; aspect-ratio:16/9; border-radius:20px; overflow:hidden; background:#2A3237; }
.thumb.square { aspect-ratio:1; }
.thumb img { width:100%; height:100%; object-fit:cover; }
.dur { position:absolute; right:10px; bottom:10px; padding:3px 10px; border-radius:999px; background:rgba(0,0,0,.6); font-size:16px; }
.row-item { width:100%; min-height:72px; display:flex; align-items:center; gap:14px; padding:10px 14px; border-radius:22px; background:transparent; text-align:left; }
.row-item img { width:56px; height:56px; border-radius:14px; object-fit:cover; background:#2A3237; flex:none; }
.ri-text { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.ri-text b, .ri-text small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ri-text b { font-size:17px; font-weight:500; }
.ri-text small { font-size:14px; color:var(--dim); }
#search-q { flex:1; min-width:0; min-height:48px; padding:0 20px; border-radius:999px; border:0; box-shadow:inset 0 1px 0 rgba(255,255,255,.18), inset 0 0 0 1px rgba(255,255,255,.08); background:rgba(255,255,255,.1); color:var(--text); font:inherit; font-size:17px; }

/* full-screen video player, above the header; YouTube-style overlay (look ported from reference/home-player) */
.player { position:fixed; inset:0; width:100vw; height:100vh; height:100dvh; z-index:10; background:#000; touch-action:none; --red:#F00; --buffered:rgba(255,255,255,.5); --track:rgba(255,255,255,.2); }
.player[hidden] { display:none; }
.player canvas { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; }
.player svg { fill:currentColor; display:block; }
.yt { position:absolute; inset:0; opacity:0; transition:opacity .2s; pointer-events:none; }
.player.ctl .yt { opacity:1; }
.player.ctl .yt button, .player.ctl .yt input { pointer-events:auto; }
/* glass capsules floating over the video (darker fill: video can be bright) */
.yt-top { --gf:rgba(0,0,0,.28); position:absolute; top:16px; left:16px; right:16px; display:flex; align-items:center; gap:12px; padding:4px 8px; border-radius:999px; }
.yt-top > *, .yt-bot > * { position:relative; z-index:2; }
.v-info { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.v-info b, .v-info small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.v-info b { font-size:clamp(17px, 1.8vw, 22px); font-weight:500; }
.v-info small { font-size:18px; color:#ccc; }
.ybtn { width:72px; height:72px; border-radius:50%; background:none; display:inline-flex; align-items:center; justify-content:center; flex:none; color:#fff; }
.ybtn:active { background:rgba(255,255,255,.15); }
.ybtn svg { width:40px; height:40px; }
.yt-mid { position:absolute; inset:0; margin:auto; height:144px; display:flex; align-items:center; justify-content:center; gap:clamp(40px, 7vw, 120px); }
.ybtn.side { width:clamp(88px, 11vh, 104px); height:clamp(88px, 11vh, 104px); }
.ybtn.side svg { width:64px; height:64px; }
.ybtn.side text { font-size:6.5px; font-weight:700; }
.ybtn.main, .spin { width:clamp(112px, 15vh, 144px); height:clamp(112px, 15vh, 144px); }
.ybtn.main { background:rgba(0,0,0,.4); box-shadow:inset 0 1px 0 rgba(255,255,255,.25), inset 0 0 0 1px rgba(255,255,255,.12); }
.ybtn.main svg { width:55%; height:55%; }
.spin { display:none; border-radius:50%; position:relative; }
.spin::after { content:""; position:absolute; inset:17%; border-radius:50%; border:8px solid rgba(255,255,255,.25); border-top-color:#fff; animation:spin 1s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
.player[data-state=loading] .spin { display:block; }
.player[data-state=loading] #v-toggle, .player[data-state=error] .yt-mid, .player[data-state=ended] .side { display:none; }
.v-err { display:none; position:absolute; inset:0; margin:auto; height:200px; flex-direction:column; align-items:center; justify-content:center; gap:24px; padding:0 64px; text-align:center; }
.player[data-state=error] .v-err { display:flex; }
.v-err p { margin:0; font-size:24px; }
.yt-bot { --gf:rgba(0,0,0,.28); position:absolute; left:16px; right:16px; bottom:16px; padding:10px 24px 0; border-radius:32px; }
.time { display:block; padding:0 8px; font-size:22px; font-variant-numeric:tabular-nums; }
.seekwrap { position:relative; }
.tip { position:absolute; bottom:64px; transform:translateX(-50%); padding:6px 16px; border-radius:999px; background:rgba(0,0,0,.75); font-size:24px; font-variant-numeric:tabular-nums; display:none; }
.tip.on { display:block; }
/* seek bar: red up to the playhead, grey buffered ahead (--trk set from app.js) */
#v-seek { display:block; width:100%; height:64px; margin:0; -webkit-appearance:none; appearance:none; background:transparent; }
#v-seek::-webkit-slider-runnable-track { height:6px; border-radius:3px; background:var(--ticks, linear-gradient(transparent, transparent)), var(--trk, var(--track)); transition:height .1s; }
#v-seek:active::-webkit-slider-runnable-track { height:10px; }
#v-seek::-webkit-slider-thumb { -webkit-appearance:none; width:28px; height:28px; margin-top:-11px; border-radius:50%; background:var(--red); }
#v-seek:active::-webkit-slider-thumb { margin-top:-9px; }
/* hidden overlay: a thin progress line on the bottom edge */
.v-line { position:absolute; left:0; right:0; bottom:0; height:4px; background:var(--trk, var(--track)); pointer-events:none; }
.player.ctl .v-line { display:none; }
/* double-tap skip ripple (reference seekFx) */
.skfx { position:absolute; top:50%; width:clamp(160px, 22vh, 220px); aspect-ratio:1; transform:translateY(-50%); border-radius:50%; background:rgba(0,0,0,.4); box-shadow:inset 0 1px 0 rgba(255,255,255,.25); color:#fff; display:none; flex-direction:column; align-items:center; justify-content:center; gap:12px; font-size:24px; font-weight:600; pointer-events:none; z-index:3; }
#skl { left:10%; }
#skr { right:10%; }
.skfx.on { display:flex; animation:skpop .7s ease forwards; }
.skfx svg { width:64px; height:36px; }
#skl svg { transform:scaleX(-1); }
@keyframes skpop { 0% { opacity:0; transform:translateY(-50%) scale(.9); } 20% { opacity:1; transform:translateY(-50%); } 70% { opacity:1; } 100% { opacity:0; } }
/* horizontal drag on the video: target time and delta in the centre */
.v-drag { display:none; position:absolute; inset:0; margin:auto; height:160px; flex-direction:column; align-items:center; justify-content:center; gap:8px; text-shadow:0 2px 8px #000; }
.v-drag b { font-size:64px; font-variant-numeric:tabular-nums; }
.v-drag small { font-size:28px; color:#ddd; }
.player.scrub .v-drag { display:flex; }
.player.scrub .yt-mid, .player.scrub .v-err { visibility:hidden; }
/* mini-player: docked bottom-right while browsing; video keeps playing */
.mini-bar { display:none; }
/* sized by width (16:9 video + 80px bar), so it scales with the browser window */
/* transparent so the glass bar blurs the page behind it, not the player's black */
.player.mini { inset:auto clamp(16px, 2vw, 32px) clamp(16px, 2vw, 32px) auto; width:clamp(320px, 30vw, 520px); height:auto; border-radius:28px; overflow:hidden; background:transparent; box-shadow:0 12px 36px rgba(0,0,0,.55), inset 0 0 0 1px rgba(255,255,255,.18); }
.player.mini canvas { position:relative; display:block; height:auto; aspect-ratio:16/9; background:#000; }
.player.mini .yt, .player.mini .skfx, .player.mini .qsheet { display:none; }
.player.mini .v-line { display:block; bottom:80px; }
.player.mini .mini-bar { --gf:rgba(255,255,255,.1); display:flex; align-items:center; gap:4px; height:80px; padding:0 8px 0 22px; box-shadow:none; }
.mini-bar > * { position:relative; z-index:2; }
.mini-title { flex:1; min-width:0; font-size:17px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* quality sheet */
.qsheet { position:absolute; inset:0; z-index:4; background:rgba(0,0,0,.4); }
.qsheet[hidden] { display:none; }
.qpanel { --gf:rgba(30,30,32,.45); position:absolute; top:108px; right:24px; width:clamp(260px, 28vw, 320px); max-height:calc(100% - 132px); overflow-y:auto; padding:12px 8px; border-radius:30px; }
.qpanel > * { position:relative; z-index:2; }
/* the content scrolls inside the panel, so the glass edge and sheen (absolute pseudo-elements) stay put */
#qsheet .qpanel, #vqsheet .qpanel { display:flex; flex-direction:column; overflow:hidden; }
.qscroll { min-height:0; overflow-y:auto; margin:-12px -8px; padding:12px 8px; }
.qpanel h3 { margin:0; padding:8px 24px 12px; font-size:20px; color:var(--dim); font-weight:600; }
.qopt { display:flex; align-items:center; width:100%; min-height:56px; padding:0 24px 0 56px; border-radius:18px; background:none; font-size:19px; position:relative; }
.qopt:active { background:rgba(255,255,255,.1); }
.qopt.on::before { content:"✓"; position:absolute; left:20px; }
#subs-opts[hidden], #v-cc[hidden], .v-subs[hidden], #spd-opts[hidden], #aud-opts[hidden], #chap-opts[hidden], #v-chap[hidden], .v-rate[hidden] { display:none; }
#subs-opts h3, #spd-opts h3, #aud-opts h3, #chap-opts h3 { padding-top:16px; }
/* speed: one segmented row, the current one lit */
.spd { display:flex; gap:4px; margin:0 8px; padding:4px; border-radius:20px; background:rgba(255,255,255,.08); }
.spd button { flex:1; min-width:0; height:52px; border-radius:16px; background:none; font-size:16px; font-variant-numeric:tabular-nums; color:rgba(255,255,255,.75); }
.spd button:active { background:rgba(255,255,255,.1); }
.spd button.on { background:rgba(255,255,255,.22); color:#fff; font-weight:600; box-shadow:inset 0 1px 0 rgba(255,255,255,.2); }
#aud-list .qopt { text-align:left; line-height:1.25; padding-top:8px; padding-bottom:8px; }
/* chapters: title and start time; the one playing now is lit */
.qopt.chap { gap:12px; padding-left:24px; text-align:left; }
.qopt.chap span { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.qopt.chap small { flex:none; font-size:15px; color:var(--dim); font-variant-numeric:tabular-nums; }
.qopt.chap.cur { background:rgba(255,255,255,.12); }
.qopt.chap.cur small { color:rgba(255,255,255,.75); }
/* skip intro: bottom right over the video, lifted above the controls while they show */
.v-skipin { --gf:rgba(20,20,22,.55); position:absolute; right:24px; bottom:clamp(24px, 7%, 56px); z-index:3; display:flex; align-items:center; height:60px; border-radius:30px; opacity:0; transform:translateY(12px); pointer-events:none; transition:opacity .25s, transform .25s, bottom .2s; }
.v-skipin.on { opacity:1; transform:none; }
.v-skipin.on button { pointer-events:auto; }
.v-skipin > * { position:relative; z-index:2; }
.v-skipin button { height:60px; background:none; color:#fff; }
#si-go { padding:0 20px 0 28px; font-size:19px; font-weight:600; border-radius:30px 0 0 30px; }
#si-x { width:56px; display:flex; align-items:center; justify-content:center; border-radius:0 30px 30px 0; border-left:1px solid rgba(255,255,255,.18); color:rgba(255,255,255,.7); }
#si-x svg { width:22px; height:22px; }
.v-skipin button:active { background:rgba(255,255,255,.12); }
.player.ctl .v-skipin { bottom:clamp(150px, 25%, 190px); }
.player.mini .v-skipin, .player.mini .v-rate { display:none; }
/* speed other than 1x: a quiet badge top right while the controls are away (they show it beside the time) */
.v-rate { position:absolute; top:20px; right:24px; z-index:2; padding:4px 12px; border-radius:999px; background:rgba(0,0,0,.5); font-size:16px; font-weight:600; font-variant-numeric:tabular-nums; color:rgba(255,255,255,.85); pointer-events:none; transition:opacity .2s; }
.player.ctl .v-rate { opacity:0; }
#subs-list h4 { margin:0; padding:10px 24px 4px; font-size:14px; font-weight:600; letter-spacing:.04em; color:rgba(255,255,255,.45); }
.qopt:disabled { color:rgba(255,255,255,.35); }
#v-cc.on { color:var(--accent); }
/* subtitles: bottom centre over the video, lifted above the controls while they show */
/* two lines: the primary, and the secondary under it, smaller and lighter */
.v-subs { position:absolute; left:8%; right:8%; bottom:6%; z-index:2; display:flex; flex-direction:column; align-items:center; gap:4px; pointer-events:none; transition:bottom .2s; }
.v-subs > span { max-width:100%; padding:4px 12px; border-radius:8px; background:rgba(0,0,0,.72); color:#fff; font-size:clamp(18px, 2.6vw, 30px); line-height:1.35; text-align:center; white-space:pre-line; }
.v-subs > .s2 { padding:2px 10px; font-size:clamp(15px, 2.1vw, 24px); color:rgba(255,255,255,.8); }
.v-subs > [hidden] { display:none; }
.player.ctl .v-subs { bottom:22%; }
.player.mini .v-subs { display:none; }

/* now-playing bar */
.cover { width:64px; height:64px; border-radius:14px; background:#2A3237; object-fit:cover; flex:none; }
.nb-info { flex:1; min-width:0; display:flex; flex-direction:column; gap:10px; }
.nb-title { font-size:17px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* YT Music: thin progress line along the bar's top edge */
.nowbar .progress { z-index:2; position:absolute; top:0; left:26px; right:26px; height:3px; border-radius:0 0 2px 2px; overflow:hidden; background:rgba(255,255,255,.15); }
.progress div { height:100%; background:#fff; width:0; }
.nb-btns { display:flex; gap:12px; }
.round { width:72px; height:72px; border-radius:50%; background:rgba(255,255,255,.1); box-shadow:inset 0 1px 0 rgba(255,255,255,.2); display:flex; align-items:center; justify-content:center; }
.round.light { background:var(--text); }
.round:active { background:rgba(255,255,255,.25); }

/* music now-playing view (YouTube Music style), slides up over everything */
.np { position:fixed; inset:0; padding-left:calc(var(--dock) + 10px); z-index:9;  /* full width so the blurred art also sits behind the glass dock (raised above it) */ overflow:hidden; background:#000; display:flex; flex-direction:column; touch-action:none;
      transform:translateY(100%); visibility:hidden; transition:transform .3s ease, visibility .3s; }
.np.open { transform:none; visibility:visible; }
.np.dragging { transition:none; }
.np svg { fill:currentColor; display:block; }
.np-bg { position:absolute; inset:-80px; width:calc(100% + 160px); height:calc(100% + 160px); object-fit:cover; filter:blur(24px) brightness(.4); pointer-events:none; }  /* blur <= 24px for the Tesla GPU; the upscaled art is soft anyway */
.np-head, .np-body { position:relative; }
.np-head { display:flex; align-items:center; gap:12px; padding:8px 16px; font-size:18px; color:#ddd; flex:none; }
/* CarPlay-style back (Now Playing, Music): a glass disc with a thin chevron, no label */
.back-disc { width:44px; height:44px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; flex:none; }
.back-disc svg { position:relative; z-index:2; width:20px; height:20px; fill:none !important; stroke:currentColor; stroke-width:2.4; stroke-linecap:round; stroke-linejoin:round; }
.back-disc:active { --gf:rgba(255,255,255,.22); }
#ctrls .yt-top .back-disc { margin-left:6px; }  /* the same disc everywhere, also inside the video bar */
/* Now Playing: tabs (Song / Lyrics / Up Next) in the head, one pane, controls always underneath */
.np-head .np-tabs { flex:1; max-width:560px; margin:0 auto 0 0; }
.np-body { flex:1; min-height:0; display:flex; flex-direction:column; gap:8px; padding:8px clamp(20px, 3vw, 48px) clamp(10px, 2vh, 20px); }
.np-pane { flex:1; min-height:0; position:relative; display:flex; justify-content:center; }
/* art fills the pane's height, square, centred */
.np-art { position:absolute; inset:0; margin:auto; height:88%; max-width:100%; aspect-ratio:1; pointer-events:none; border-radius:8px; object-fit:cover; background:#2A3237; box-shadow:0 12px 40px rgba(0,0,0,.55); }
.np-art[hidden] { display:none; }
.np-pane .np-list, .np-pane .np-lyrics { width:100%; max-width:860px; }
/* controls: title (Song tab only), seek bar, then the buttons centred */
.np-main { flex:none; display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"meta rate" "seek seek" "times times" "btns btns"; align-items:center; }
.np[data-tab="next"] .np-main { display:none; }
.np[data-tab="lyrics"] .np-meta, .np[data-tab="lyrics"] .np-rate { display:none; }  /* the name only shows on the Song tab */  /* Up Next: the whole pane is the list */
.np-main .np-meta { grid-area:meta; }
.np-main .np-btns { grid-area:btns; justify-self:center; gap:clamp(8px, 2vw, 28px); }
.np-main #np-seek { grid-area:seek; }
.np-main .np-times { grid-area:times; }
.np-meta { min-width:0; display:flex; flex-direction:column; gap:2px; text-align:left; }
.np-meta b, .np-meta small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.np-meta b { font-size:clamp(20px, 3.4vh, 28px); font-weight:700; }
.np-meta small { font-size:clamp(16px, 2.6vh, 20px); color:rgba(255,255,255,.65); }
/* iOS 27 Now Playing scrubber (music view + Dashboard card): a capsule track that thickens while dragged,
   filled to --p (app.js paintScrub); 64px tall input for the finger, no visible knob */
.scrub { display:block; width:100%; height:64px; margin:0; -webkit-appearance:none; appearance:none; background:transparent; --p:0%; }
.scrub::-webkit-slider-runnable-track { height:8px; border-radius:4px; transition:height .15s;
  background:linear-gradient(90deg, rgba(255,255,255,.95) var(--p), rgba(255,255,255,.22) var(--p)); }
.scrub:active::-webkit-slider-runnable-track { height:16px; border-radius:8px; }
.scrub::-webkit-slider-thumb { -webkit-appearance:none; width:16px; height:16px; margin-top:-4px; border-radius:50%; background:transparent; }
.scrub:active::-webkit-slider-thumb { margin-top:0; }
.times { display:flex; justify-content:space-between; font-size:18px; font-weight:500; color:rgba(255,255,255,.65); font-variant-numeric:tabular-nums; }
/* YT Music seek: thin white track with a round white knob; the input stays 44px tall for the finger */
#np-seek { width:100%; height:44px; }
#np-seek::-webkit-slider-runnable-track { height:4px; border-radius:2px; }
#np-seek:active::-webkit-slider-runnable-track { height:6px; border-radius:3px; }
#np-seek::-webkit-slider-thumb { width:16px; height:16px; margin-top:-6px; background:#fff; }
#np-seek:active::-webkit-slider-thumb { width:20px; height:20px; margin-top:-7px; }
.np-times { margin-top:-12px; font-size:15px; }
/* controls: flat row, the play button a white disc (YT Music), no glass capsule */
.np-btns { display:flex; align-items:center; gap:4px; color:#fff; }
.np-btns .ybtn { width:72px; height:72px; }
.np-btns .ybtn svg { width:44px; height:44px; }
.np-btns .np-mode { width:56px; height:56px; color:rgba(255,255,255,.55); }
.np-btns .np-mode svg { width:28px; height:28px; }
.np-btns .np-mode.on { color:#fff; }
.np-btns .np-play { width:80px; height:80px; background:#fff; color:#000; }
.np-btns .np-play:active { background:#ddd; }
.np-btns .np-play svg { width:50%; height:50%; }
.np-q { display:flex; flex-direction:column; min-height:0; }
.np-q h2 { font-size:19px; font-weight:500; margin:8px 12px 12px; }
/* YT Music tabs: plain uppercase labels, the active one white with an underline across the full width */
.np-tabs { display:flex; flex:none; border-bottom:1px solid rgba(255,255,255,.15); }
.np-tabs .tab { flex:1; min-height:56px; border-radius:0; background:none; box-shadow:none; font-size:16px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:rgba(255,255,255,.55); }
.np-tabs .tab::before, .np-tabs .tab::after { display:none; }
.np-tabs .tab:active, .np-tabs .tab:focus { outline:none; background:none; box-shadow:none; }  /* no pressed ring / focus box */
.np-tabs .tab.on, .np-tabs .tab.on:active { background:none; -webkit-backdrop-filter:none; backdrop-filter:none; color:#fff; box-shadow:inset 0 -2px 0 #fff; }
.np-list[hidden], .np-lyrics[hidden] { display:none; }
.np-lyrics { flex:1; min-height:0; overflow-y:auto; touch-action:pan-y; padding:4px 12px 24px; font-size:clamp(18px, 2vw, 24px); line-height:1.6; white-space:pre-line; color:#f2f2f7; }
.np-lyrics:not(.synced) { text-align:center; padding-block:40px; }  /* plain lyrics: centred like the synced ones */
.np-lyrics small { display:block; text-align:center; margin-top:20px; font-size:14px; color:var(--dim); }
/* synced: one line per row, the sung one lit, the rest dimmed */
.np-lyrics { position:relative; scroll-behavior:auto; }
.np-lyrics.synced { white-space:normal; }
/* half a pane of space above and below, so even the first and last lines can scroll to the vertical centre */
.np-lyrics.synced::before, .np-lyrics.synced::after { content:""; display:block; height:50%; }
.ly { margin:0; padding:6px 0; font-size:clamp(20px, 2.3vw, 28px); font-weight:600; line-height:1.35; color:rgba(255,255,255,.35); transition:color .3s; cursor:pointer; }
.ly { max-width:66%; margin-inline:auto; text-align:center; transform-origin:50% 50%;  /* 66% wide so a long line still fits at 1.5x */ transition:color .3s, transform .3s, margin .3s; }
.ly.on { color:#fff; transform:scale(1.5); margin-block:14px; }  /* the sung line grows; margin so it clears its neighbours */
.np-lyrics { overflow-x:hidden; }  /* a scaled line must not add a sideways scrollbar */
.np-list { flex:1; min-height:0; overflow-y:auto; touch-action:pan-y; }
.np-list .row-item.cur { background:rgba(255,255,255,.12); }
.np-list .row-item.cur b { color:#fff; }

/* ---- YouTube Music view: logo bar, shelves (horizontal rows), bottom nav like the real app ---- */
.ytm .bar { gap:12px; }
.ytm .bar .btn.icon { margin-left:auto; }
.ytm-logo { display:flex; align-items:center; gap:6px; font-size:22px; font-weight:700; letter-spacing:-.02em; }
.ytm-logo svg { width:28px; height:28px; }
.ytm .thumb { border-radius:8px; }
.ytm .row-item img { border-radius:4px; }
.ytm-nav { display:flex; flex:none; border-top:1px solid rgba(255,255,255,.08); }
.ytm-nav[hidden] { display:none; }
.bar-sp { flex:1; }
#radio-form #radio-q { flex:1; max-width:none; }
.ytm-nav .tab { flex:1; text-decoration:none; min-height:60px; border-radius:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; font-size:13px; background:none; box-shadow:none; color:rgba(255,255,255,.6); }
.ytm-nav .tab svg { width:26px; height:26px; fill:currentColor; }
.ytm-nav .tab::before, .ytm-nav .tab::after { display:none; }
.ytm-nav .tab:active, .ytm-nav .tab:focus { outline:none; background:none; box-shadow:none; }
.ytm-nav .tab.on, .ytm-nav .tab.on:active { background:none; -webkit-backdrop-filter:none; backdrop-filter:none; box-shadow:none; color:#fff; font-weight:600; }
.shelf { margin-bottom:24px; }
.shelf h3 { font-size:22px; font-weight:700; margin:4px 0 12px; }
.shelf-row { display:grid; grid-auto-flow:column; grid-auto-columns:150px; gap:16px; overflow-x:auto; scrollbar-width:none; }
.shelf-row::-webkit-scrollbar { display:none; }
/* Quick picks: songs as rows, 4 per column, columns scroll sideways */
.shelf-row.rows { grid-template-rows:repeat(4, auto); grid-auto-columns:min(340px, 85%); gap:0 12px; }
.shelf-row.rows .row-item { min-height:64px; padding:6px 8px; }
.shelf-row.rows .row-item img { width:48px; height:48px; }

/* CarPlay Now Playing pill, top right of Music / Search while a song is loaded */
.np-pill { display:none; gap:10px; margin-left:auto; font-weight:500; }
.np-pill svg { width:22px; height:22px; fill:currentColor; }
body.has-song .np-pill { display:inline-flex; }
.np-pill + .btn.icon, .ytm .bar .np-pill + .btn.icon { margin-left:0; }

/* dock on the right (Settings > Dock side): mirror the app row and Now Playing's dock gap */
.dock-right #app { flex-direction:row-reverse; }
.dock-right .dock { margin:10px 10px 10px 0; }
.dock-right .np { padding-left:0; padding-right:calc(var(--dock) + 10px); }
/* iOS segmented control: one capsule, the chosen segment a light thumb */
.srow > .seg, .seg { display:inline-flex; flex:none; flex-direction:row; gap:0; padding:3px; border-radius:999px; background:rgba(255,255,255,.1); box-shadow:inset 0 0 0 1px rgba(255,255,255,.06); }
.seg .btn { min-height:40px; padding:0 22px; background:none; box-shadow:none; font-size:16px; color:rgba(255,255,255,.75); }
.seg .btn.on { background:rgba(255,255,255,.92); color:#111; font-weight:600; box-shadow:0 2px 8px rgba(0,0,0,.3); }

/* Now Playing thumbs (like / dislike), beside the name */
.np-main .np-rate { grid-area:rate; display:flex; gap:4px; }
.np-rate .ybtn { width:52px; height:52px; color:rgba(255,255,255,.55); }
.np-rate .ybtn svg { width:26px; height:26px; }
.np-rate .ybtn.on { color:#fff; }
.np-rate .dislike svg { transform:rotate(180deg); }
/* mood chips above the Music home shelves */
.chips { display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; margin:0 0 18px; }
.chips::-webkit-scrollbar { display:none; }
.chip { flex:none; min-height:44px; padding:0 16px; border-radius:10px; background:rgba(255,255,255,.1); font-size:15px; font-weight:500; }
.chip.on { background:#fff; color:#000; }
/* artists: round photo, centred name */
.card.artist { text-align:center; }
.card.artist .thumb { border-radius:50%; }
/* playlist / album / artist header */
.pl-head { display:flex; gap:24px; align-items:flex-end; margin:4px 0 20px; }
.pl-head img { width:min(200px, 28vw); height:min(200px, 28vw); flex:none; border-radius:8px; object-fit:cover; background:#2A3237; box-shadow:0 12px 32px rgba(0,0,0,.45); }
.pl-head.pl-round img { border-radius:50%; }
.pl-text { min-width:0; }
.pl-head h2 { margin:0 0 4px; font-size:clamp(22px, 3vw, 32px); font-weight:700; }
.pl-head small { font-size:15px; color:var(--dim); }
.pl-acts { display:flex; gap:12px; margin-top:16px; }
.pl-acts .btn { gap:8px; min-height:52px; padding:0 22px; font-size:17px; font-weight:500; }
.pl-acts svg { width:22px; height:22px; fill:currentColor; }
.pl-acts .pl-play { background:#fff; color:#000; font-weight:600; box-shadow:none; }
/* long-press song menu: white labels (the Resume menu's are red) */
.sm-menu button { color:#fff; }
/* search bar: back disc, a pill field with the magnifier inside, a round white Go */
#search-form { gap:12px; }
#search-form #search-q, #radio-form #radio-q { min-height:52px; padding-left:50px; font-size:18px; background:rgba(255,255,255,.1) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%239AA4AA'%3E%3Cpath d='M10 3a7 7 0 0 1 5.6 11.2l4.6 4.6-1.4 1.4-4.6-4.6A7 7 0 1 1 10 3zm0 2a5 5 0 1 0 0 10 5 5 0 0 0 0-10z'/%3E%3C/svg%3E") 16px 50% / 24px no-repeat; }
.search-go { width:52px; height:52px; flex:none; border-radius:50%; background:#fff; color:#000; display:flex; align-items:center; justify-content:center; }
.search-go svg { width:26px; height:26px; fill:currentColor; }
.search-go:active { background:#ddd; }
/* ---- YouTube view: logo bar, YouTube-style video cards, the same bottom bar as Music ---- */
.ytv .bar { gap:12px; }
.yt-logo { display:flex; align-items:center; gap:6px; font-size:22px; font-weight:700; letter-spacing:-.04em; }
.yt-logo svg { width:32px; height:23px; }
.vgrid { display:grid; grid-template-columns:repeat(auto-fill, minmax(260px, 1fr)); gap:24px 16px; align-content:start; }
.vgrid .note, .vgrid .recent { grid-column:1 / -1; }
.vcard { gap:10px; }
.vcard .thumb { border-radius:12px; }
.vcard .dur { position:absolute; right:8px; bottom:8px; padding:2px 6px; border-radius:6px; background:rgba(0,0,0,.8); font-size:13px; font-weight:600; }
.v-row { display:flex; gap:12px; align-items:flex-start; min-width:0; }
.v-av { width:36px; height:36px; flex:none; border-radius:50%; object-fit:cover; background:#2A3237; }
.v-txt { min-width:0; display:flex; flex-direction:column; gap:4px; }
.vcard b { font-size:16px; font-weight:500; line-height:1.3; }
.vcard small { font-size:13px; line-height:1.35; color:rgba(255,255,255,.6); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
/* video controls, lighter (SF Symbols weight): thin line icons, smaller glyphs */
#ctrls .ln { fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
#ctrls .yt-top .ybtn { width:60px; height:60px; }
#ctrls .yt-top .ybtn svg { width:28px; height:28px; }
#ctrls .ybtn.side svg { width:46px; height:46px; }
#ctrls .ybtn.side text { font-size:6px; font-weight:500; fill:currentColor; }
#ctrls .ybtn.main, #ctrls .spin { width:clamp(88px, 12vh, 108px); height:clamp(88px, 12vh, 108px); }
#ctrls .ybtn.main svg { width:40%; height:40%; }
#ctrls .time { font-size:17px; font-weight:500; color:rgba(255,255,255,.85); }
#ctrls #v-seek { height:48px; }
#ctrls #v-seek::-webkit-slider-runnable-track { height:4px; border-radius:2px; }
#ctrls #v-seek:active::-webkit-slider-runnable-track { height:6px; }
#ctrls #v-seek::-webkit-slider-thumb { width:16px; height:16px; margin-top:-6px; }
#ctrls #v-seek:active::-webkit-slider-thumb { width:22px; height:22px; margin-top:-8px; }
#ctrls .ybtn.side text { font-size:6.4px; }
/* YouTube extras: Subscriptions channel strip, Library shelves of video cards, player actions, Up Next sheet */
.chan-strip { grid-column:1 / -1; display:flex; gap:16px; overflow-x:auto; scrollbar-width:none; padding-bottom:4px; }
.chan-strip::-webkit-scrollbar { display:none; }
.chan { flex:none; width:76px; background:none; display:flex; flex-direction:column; align-items:center; gap:6px; }
.chan img { width:64px; height:64px; border-radius:50%; object-fit:cover; background:#2A3237; }
.chan small { max-width:100%; font-size:13px; color:var(--dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.vgrid .chips, .vgrid .pl-head, .vgrid .shelf { grid-column:1 / -1; }
.vgrid .chips { margin-bottom:0; height:48px; }  /* a scroll box in a grid row collapses to 0 without a height */
.chan-strip { height:96px; }
.shelf-row.vrow { grid-auto-columns:240px; }
.v-sub { min-height:40px; padding:0 18px; background:#fff; color:#000; font-weight:600; font-size:15px; box-shadow:none; }
.v-sub.on { background:rgba(255,255,255,.14); color:#fff; }
.v-acts { display:flex; align-items:center; gap:4px; padding:4px 0 2px; }
.v-acts .v-sp { flex:1; }
.v-chan { display:flex; align-items:center; gap:10px; min-width:0; background:none; text-align:left; margin-right:8px; }
.v-chan img { width:36px; height:36px; border-radius:50%; object-fit:cover; background:#2A3237; flex:none; }
.v-chan span { min-width:0; display:flex; flex-direction:column; }
.v-chan b, .v-chan small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.v-chan b { font-size:15px; font-weight:600; }
.v-chan small { font-size:12px; color:var(--dim); }
#ctrls .v-acts .ybtn { width:48px; height:48px; color:rgba(255,255,255,.7); }
#ctrls .v-acts .ybtn svg { width:24px; height:24px; fill:currentColor; }
#ctrls .v-acts .ybtn .ln { fill:none; }
#ctrls .v-acts .ybtn.on { color:#fff; }
#ctrls .v-acts .dislike svg { transform:rotate(180deg); }
.v-acts[hidden], .sm-menu button[hidden] { display:none; }
.qpanel.vq { width:clamp(300px, 40vw, 420px); }
.vq-row { display:flex; gap:12px; align-items:center; width:100%; padding:8px 16px; background:none; text-align:left; border-radius:14px; }
.vq-row img { width:112px; aspect-ratio:16/9; flex:none; border-radius:8px; object-fit:cover; background:#2A3237; }
.vq-row b { font-size:15px; font-weight:500; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.vq-row small { font-size:13px; color:var(--dim); }
.vq-row.cur { background:rgba(255,255,255,.12); }
/* Radio: station logo tiles */
.st-h { margin:4px 0 14px; font-size:22px; font-weight:700; }
.st-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr)); gap:22px 16px; }
.st-tile { position:relative; min-width:0; display:flex; flex-direction:column; gap:6px; cursor:pointer; }
.st-tile:active .st-logo { transform:scale(.96); }
.st-logo { position:relative; aspect-ratio:1; border-radius:20px; overflow:hidden; background:#fff; display:flex; align-items:center; justify-content:center;
  box-shadow:0 6px 18px rgba(0,0,0,.35); transition:transform .15s; }
.st-logo img { width:80%; height:80%; object-fit:contain; }
.st-logo .fi-radio { width:100%; height:100%; display:flex; align-items:center; justify-content:center; background:linear-gradient(180deg, #ff6482, #d4145a); }
.st-logo .fi-radio svg { width:46%; height:46%; }
.st-tile.cur .st-logo { box-shadow:0 0 0 3px #fff, 0 6px 18px rgba(0,0,0,.35); }
.st-tile b { font-size:16px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.st-tile small { font-size:13px; color:var(--dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-transform:capitalize; }
.st-tile.cur b { color:#fff; }
.st-eq { position:absolute; left:8px; bottom:8px; width:34px; height:34px; border-radius:50%; background:rgba(0,0,0,.6); display:flex; align-items:center; justify-content:center; }
.st-eq svg { width:20px; height:20px; fill:#fff; }
.st-tile .st-fav { position:absolute; top:6px; right:6px; width:40px; height:40px; border-radius:50%; background:rgba(0,0,0,.45); color:rgba(255,255,255,.85);
  font-size:20px; line-height:1; display:flex; align-items:center; justify-content:center; padding:0; }
.st-tile .st-fav.on { color:#ffd60a; }
/* recent searches */
.recent { grid-column:1 / -1; }
.recent h3 { display:flex; align-items:center; justify-content:space-between; font-size:20px; font-weight:700; margin:8px 0 4px; }
.recent h3 .btn { min-height:40px; background:none; box-shadow:none; font-size:16px; font-weight:500; color:var(--dim); }
.recent .row-item { min-height:56px; gap:16px; font-size:18px; }
.recent .row-item svg { width:24px; height:24px; fill:var(--dim); flex:none; }
.recent .row-item b { font-weight:500; }

/* ---- Files app ---- */
.agrid { display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:20px 16px; }
.atile { background:none; padding:0; text-align:left; display:flex; flex-direction:column; gap:4px; min-width:0; }
.atile:active { filter:brightness(.8); }
.acover { aspect-ratio:1; border-radius:12px; overflow:hidden; background:linear-gradient(135deg, #3a3a3c, #1c1c1e); margin-bottom:4px; }
.acover img { width:100%; height:100%; object-fit:cover; }
.atile b { font-size:16px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.atile small { font-size:14px; color:var(--dim); }
/* Movies (Jellyfin) */
.mgrid { display:grid; grid-template-columns:repeat(auto-fill, minmax(132px, 1fr)); gap:20px 14px; }
.mtile { background:none; padding:0; text-align:left; display:flex; flex-direction:column; gap:4px; min-width:0; }
.mtile:active { filter:brightness(.8); }
.mposter { position:relative; aspect-ratio:2/3; border-radius:12px; overflow:hidden; background:linear-gradient(135deg, #3a3a3c, #1c1c1e); margin-bottom:4px; }
.mposter img { position:relative; width:100%; height:100%; object-fit:cover; }
/* folder tiles: a big folder glyph, covered by the folder's own picture when Jellyfin has one */
.mposter.mfolder { display:flex; align-items:center; justify-content:center; background:linear-gradient(180deg, #2c2c2e, #1c1c1e); }
.mposter.mfolder svg { position:absolute; width:56%; fill:#5ac8fa; }
.mposter.mfolder img { position:absolute; inset:0; }
.mposter i { position:absolute; left:8px; right:8px; bottom:8px; height:4px; border-radius:2px; background:rgba(255,255,255,.3); }
.mposter i::after { content:""; position:absolute; inset:0; width:var(--p); border-radius:2px; background:var(--accent); }
.mtile b { font-size:15px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mtile small { font-size:13px; color:var(--dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.row-item img.ep-img { width:112px; height:63px; border-radius:8px; }
/* Radio */
#radio-q { flex:1; min-width:120px; max-width:280px; min-height:48px; padding:0 18px; border-radius:999px; border:0; background:rgba(255,255,255,.1); color:var(--text); font:inherit; font-size:17px; }
#radio-tabs { flex:0 1 auto; }
.st { position:relative; }
.st .fi-radio { width:56px; height:56px; border-radius:14px; flex:none; display:flex; align-items:center; justify-content:center; background:linear-gradient(180deg,#ff5e3a,#ff2a68); }
.st .fi-radio svg { width:34px; height:34px; }
.st-fav { flex:none; width:48px; height:48px; padding:0; border-radius:50%; background:none; display:flex; align-items:center; justify-content:center; color:rgba(255,255,255,.35); font-size:24px; }
.st-fav.on { color:#ffd60a; }
.st.cur b { color:var(--accent); }
/* Settings */
.bar-title { font-size:18px; font-weight:500; margin-left:8px; }
.settings { max-width:760px; }
.settings h2 { font-size:14px; font-weight:500; letter-spacing:.04em; text-transform:uppercase; color:var(--dim); margin:20px 16px 8px; }
.wp-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(110px, 1fr)); gap:12px; }
.wp { aspect-ratio:16/10; border-radius:14px; padding:0; background:var(--wp) center / cover no-repeat, #050307; box-shadow:inset 0 0 0 1px rgba(255,255,255,.12); position:relative; }
.wp.on { box-shadow:0 0 0 3px var(--accent); }
.wp.on::after { content:"✓"; position:absolute; right:8px; bottom:6px; width:24px; height:24px; border-radius:50%; background:var(--accent); color:#000; font-size:15px; font-weight:600; display:flex; align-items:center; justify-content:center; }
.sgroup { border-radius:16px; background:rgba(255,255,255,.07); overflow:hidden; }
.srow { display:flex; align-items:center; gap:16px; min-height:64px; padding:10px 16px; }
.srow + .srow { border-top:1px solid rgba(255,255,255,.08); }
.srow > span { flex:1; min-width:0; display:flex; flex-direction:column; gap:3px; }
.srow b { font-size:17px; font-weight:500; }
.srow small { font-size:14px; color:var(--dim); }
/* iOS switch */
.switch { appearance:none; -webkit-appearance:none; flex:none; width:58px; height:34px; border-radius:999px; background:rgba(120,120,128,.4); position:relative; margin:0; transition:background .2s; cursor:pointer; }
.switch::after { content:""; position:absolute; top:3px; left:3px; width:28px; height:28px; border-radius:50%; background:#fff; box-shadow:0 2px 4px rgba(0,0,0,.3); transition:transform .2s; }
.switch:checked { background:#30d158; }
.switch:checked::after { transform:translateX(24px); }
.crumbs { flex:1; min-width:0; display:flex; align-items:center; gap:4px; overflow-x:auto; scrollbar-width:none; touch-action:pan-x; }
.crumbs::-webkit-scrollbar { display:none; }
.crumb { flex:none; min-height:48px; max-width:320px; padding:0 16px; border-radius:999px; display:flex; align-items:center; font-size:17px; color:var(--dim);
         white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.crumb:active { background:rgba(255,255,255,.14); }
.crumb.cur { color:var(--text); font-weight:500; }
.crumbs i { flex:none; color:rgba(255,255,255,.35); font-style:normal; font-size:17px; }
/* file-kind badge: a small glass-edged squircle (or the thumbnail) */
.fi { width:64px; height:64px; flex:none; border-radius:16px; background:var(--g); display:flex; align-items:center; justify-content:center; position:relative; overflow:hidden;
      box-shadow:inset 0 1px 0 rgba(255,255,255,.35), inset 0 0 0 1px rgba(255,255,255,.12), 0 4px 12px rgba(0,0,0,.3); }
.fi svg { width:36px; height:36px; fill:#fff; filter:drop-shadow(0 1px 2px rgba(0,0,0,.25)); }
.fi img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; border-radius:0; }
.row-item.other { opacity:.45; }
#files-list .ri-text small { font-variant-numeric:tabular-nums; }
/* Photos: square thumbnail grid, newest first, paged on scroll */
.pgrid { display:grid; grid-template-columns:repeat(auto-fill, minmax(clamp(120px, 14vw, 200px), 1fr)); gap:6px; align-content:start; }
.pgrid .note { grid-column:1 / -1; }
.ptile { position:relative; aspect-ratio:1; padding:0; border-radius:14px; overflow:hidden; background:#22262b; }
.ptile img { width:100%; height:100%; object-fit:cover; }
.ptile:active { filter:brightness(.75); }
.ptile .dur { right:8px; bottom:8px; font-size:15px; }
.ptile .vid { position:absolute; left:8px; bottom:8px; width:24px; height:24px; fill:#fff; filter:drop-shadow(0 1px 3px rgba(0,0,0,.6)); }

/* ---- picture viewer ---- */
.viewer { position:fixed; inset:0; z-index:12; background:#000; touch-action:none; user-select:none; -webkit-user-select:none; }
.viewer[hidden] { display:none; }
.viewer svg { fill:currentColor; display:block; }
.vw-stage { position:absolute; inset:0; overflow:hidden; display:flex; align-items:center; justify-content:center; }
.vw-stage img { max-width:100%; max-height:100%; object-fit:contain; transform-origin:center; transition:transform .25s ease; will-change:transform; pointer-events:none; }
.vw-stage img.drag { transition:none; }
.vw-side { position:absolute; }  /* neighbours, centred by the flex stage then pushed one width aside; they ride along with a swipe */
.vw-side:not([src]) { visibility:hidden; }
.vw-err { position:absolute; margin:0; padding:14px 26px; border-radius:999px; background:rgba(255,255,255,.12); color:#fff; font-size:22px; pointer-events:none; }
.vw-err[hidden] { display:none; }
/* chrome (top bar + filmstrip) is hidden by default and fades in on .viewer.chrome */
.vw-top, .vw-strip { opacity:0; pointer-events:none; transition:opacity .25s; }
.viewer.chrome .vw-top, .viewer.chrome .vw-strip { opacity:1; pointer-events:auto; }
.vw-top { position:absolute; top:0; left:0; right:0; display:flex; justify-content:center; padding:16px 104px 48px; color:#fff;
  background:linear-gradient(rgba(0,0,0,.55), rgba(0,0,0,0)); }
.vw-back { --gf:rgba(0,0,0,.3); position:absolute; left:16px; top:16px; }
.vw-back > svg { position:relative; z-index:2; }
.vw-when { min-width:0; min-height:72px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; text-align:center; }
.vw-when b { font-size:18px; font-weight:500; }
.vw-when small { max-width:100%; font-size:16px; color:rgba(255,255,255,.7); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.vw-strip { --gf:rgba(0,0,0,.3); position:absolute; left:50%; bottom:16px; transform:translateX(-50%); max-width:calc(100% - 32px); border-radius:16px; overflow:hidden; }
.vw-strip-in { position:relative; z-index:2; display:flex; gap:2px; padding:6px; overflow-x:auto; scrollbar-width:none; touch-action:pan-x; }
.vw-strip-in::-webkit-scrollbar { display:none; }
.vw-strip-in button { flex:none; width:64px; height:64px; padding:0; border-radius:8px; overflow:hidden; background:#2c2c2e; }
.vw-strip-in button.on { outline:3px solid #fff; outline-offset:-3px; }
.vw-strip-in img { display:block; width:100%; height:100%; object-fit:cover; pointer-events:none; }
/* player error overlay: no Retry for formats that can never play */
.player.noretry #v-retry { display:none; }
/* pairing screen: reuses the queue sheet; centred and above everything */
.pair { position:fixed; z-index:99; display:grid; place-items:center; background:rgba(0,0,0,.6); }
.pair[hidden] { display:none; }
.pair .qpanel { position:relative; top:auto; right:auto; width:min(380px, 90vw); padding:20px 16px; text-align:center; }
.pair input { width:100%; box-sizing:border-box; min-height:56px; border-radius:16px; border:0; background:rgba(255,255,255,.1); color:inherit; font-size:28px; letter-spacing:.4em; text-align:center; }
.app[hidden] { display:none; }

/* video: previous / next beside the ±10 s buttons (hidden at either end of the queue) */
#ctrls .ybtn.skip { width:72px; height:72px; }
#ctrls .ybtn.skip[hidden] { visibility:hidden; }  /* keeps play / pause centred */
#ctrls .ybtn.skip svg { width:32px; height:32px; }
/* end of a video: the next one's card, counting down 5 s (a bar fills along its bottom) */
.v-upnext { --gf:rgba(20,20,22,.5); position:absolute; right:24px; bottom:clamp(150px, 25%, 190px); z-index:3; width:min(540px, calc(100% - 48px)); display:flex; align-items:center; gap:16px; padding:14px; border-radius:26px; overflow:hidden; }
.v-upnext[hidden], .player.mini .v-upnext { display:none; }
.v-upnext > * { position:relative; z-index:2; }
.v-upnext img { width:184px; aspect-ratio:16/9; flex:none; border-radius:14px; object-fit:cover; background:#2A3237; }
.un-text { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.un-text small { font-size:15px; color:rgba(255,255,255,.7); font-variant-numeric:tabular-nums; }
.un-text b { font-size:19px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.un-btns { display:flex; gap:10px; margin-top:8px; }
.un-btns .btn { min-height:44px; padding:0 18px; font-size:16px; }
.v-upnext .un-bar { position:absolute; left:0; right:0; bottom:0; z-index:3; height:3px; background:rgba(255,255,255,.85); transform:scaleX(0); transform-origin:left; }
.v-upnext.run .un-bar { animation:unbar 5s linear forwards; }
@keyframes unbar { to { transform:scaleX(1); } }
/* Now Playing for a live station: no tabs, thumbs, shuffle / repeat or progress; a LIVE badge where the bar was.
   visibility, not display, so nothing moves */
.np-live { display:none; }
.np.live .np-live { grid-area:seek; justify-self:start; display:inline-flex; align-items:center; gap:8px; height:30px; padding:0 14px; border-radius:999px; background:rgba(255,255,255,.14); font-size:14px; font-weight:700; letter-spacing:.08em; }
.np-live i { width:8px; height:8px; border-radius:50%; background:#ff3b30; animation:livedot 2s ease-in-out infinite; }
@keyframes livedot { 50% { opacity:.35; } }
@media (prefers-reduced-motion: reduce) { .np-live i { animation:none; } }
.np.live #np-seek, .np.live .np-times, .np.live .np-tabs, .np.live .np-rate, .np.live .np-mode { visibility:hidden; pointer-events:none; }
/* live radio connecting (a spinner for the dot) or not playing (red); the toggle is a retry then (app.js onState) */
.np.live[data-state=loading] .np-live, .np.live[data-state=error] .np-live { letter-spacing:0; }
.np.live[data-state=loading] .np-live i { width:12px; height:12px; box-sizing:border-box; background:none; border:2px solid rgba(255,255,255,.3); border-top-color:#fff; animation:spin 1s linear infinite; }
.np.live[data-state=error] .np-live { background:rgba(255,59,48,.3); }
.np.live[data-state=error] .np-live i { animation:none; }
/* pressed feedback for the few tappables that had none */
.back-disc:active, .wp:active, .st-fav:active { transform:scale(.94); }
.seg .btn:not(.on):active { background:rgba(255,255,255,.14); }
.ytm-nav .tab:not(.on):active { color:#fff; }
.pdot:active::after { background:rgba(255,255,255,.75); }
/* Speed Test (speed.js): the dial and Go on the left; server, results, verdict and history on the right.
   Blue is download, orange upload (the arc, the stat underline and the history dot) */
.speed { --dn:#3aa8ff; --upc:#ff9f0a; display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); gap:clamp(16px, 2.5vw, 36px); align-items:start; }
.sp-main { display:flex; flex-direction:column; align-items:center; padding-top:4px; }
.sp-gauge { width:100%; max-width:min(560px, 72vh); }
.sp-gauge svg { display:block; width:100%; height:auto; overflow:visible; }
.sp-track, .sp-arc { fill:none; stroke-width:18; stroke-linecap:round; }
.sp-track { stroke:rgba(255,255,255,.09); }
.sp-arc { stroke:url(#sp-grad-down); stroke-dasharray:0 2; opacity:0; }
[data-phase="up"] .sp-arc { stroke:url(#sp-grad-up); }
.sp-ticks line { stroke:rgba(255,255,255,.22); stroke-width:2; stroke-linecap:round; }
.sp-ticks line.maj { stroke:rgba(255,255,255,.5); }
.sp-ticks text { fill:rgba(255,255,255,.6); font-size:17px; font-weight:500; text-anchor:middle; font-variant-numeric:tabular-nums; }
.sp-needle { fill:#fff; filter:drop-shadow(0 2px 4px rgba(0,0,0,.45)); }
.sp-hub { fill:#1c1f22; }
/* Reduce effects / reduced motion: numbers only, no needle or sweep */
.still .sp-needle, .still .sp-arc { display:none; }
.sp-read { display:flex; flex-direction:column; align-items:center; margin-top:-6px; min-height:118px; }
.sp-phase { height:24px; font-size:17px; font-weight:500; color:var(--dim); display:flex; align-items:center; gap:8px; }
.sp-phase:not(:empty)::before { content:""; width:8px; height:8px; border-radius:50%; background:#fff; animation:livedot 1.2s ease-in-out infinite; }
[data-phase="down"] .sp-phase::before { background:var(--dn); }
[data-phase="up"] .sp-phase::before { background:var(--upc); }
.sp-num { font-size:clamp(52px, 9vh, 76px); font-weight:600; line-height:1.05; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.sp-unit { font-size:17px; color:var(--dim); }
.sp-go { min-height:64px; min-width:200px; margin-top:8px; font-size:22px; font-weight:600; }
.running .sp-go { background:rgba(255,255,255,.12); color:var(--text); }
.sp-msg { margin:12px 0 0; font-size:16px; color:#ff9f0a; text-align:center; }
.sp-msg[hidden] { display:none; }
.sp-side { display:flex; flex-direction:column; gap:12px; min-width:0; padding-top:4px; }
.sp-srv { display:flex; flex-direction:column; gap:3px; min-height:64px; padding:10px 16px; border-radius:16px; background:rgba(255,255,255,.07); justify-content:center; }
.sp-srv small { font-size:14px; color:var(--dim); }
.sp-srv b { font-size:17px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sp-srv.skel b { width:60%; }
.sp-stats { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); border-radius:16px; background:rgba(255,255,255,.07); }
.sp-stat { position:relative; padding:12px 14px 14px; display:flex; flex-direction:column; gap:4px; min-width:0; }
.sp-stat + .sp-stat { border-left:1px solid rgba(255,255,255,.08); }
.sp-stat small { font-size:14px; color:var(--dim); white-space:nowrap; }
.sp-stat span { font-size:14px; color:var(--dim); display:flex; flex-wrap:wrap; align-items:baseline; column-gap:4px; }
.sp-stat span b { font-size:26px; font-weight:600; color:var(--text); font-variant-numeric:tabular-nums; }
.sp-stat.down::after, .sp-stat.up::after { content:""; position:absolute; left:14px; right:14px; bottom:0; height:3px; border-radius:3px 3px 0 0; background:var(--dn); opacity:.85; }
.sp-stat.up::after { background:var(--upc); }
.sp-stat.skel b { display:inline-block; width:2.2em; height:.8em; margin:0; vertical-align:middle; }
.sp-verdict { display:flex; flex-direction:column; gap:4px; padding:14px 16px; border-radius:16px; background:rgba(255,255,255,.07); box-shadow:inset 4px 0 0 var(--vc, rgba(255,255,255,.25)); }
.sp-verdict b { font-size:18px; font-weight:600; }
.sp-verdict small { font-size:15px; color:var(--dim); }
.sp-verdict.q1080 { --vc:#30d158; }
.sp-verdict.q720 { --vc:#64d2ff; }
.sp-verdict.q480 { --vc:#ffd60a; }
.sp-verdict.q0 { --vc:#ff453a; }
.sp-h { font-size:14px; font-weight:500; letter-spacing:.04em; text-transform:uppercase; color:var(--dim); margin:8px 16px 0; }
.sp-hist { border-radius:16px; background:rgba(255,255,255,.07); overflow:hidden; }
.sp-row { display:grid; grid-template-columns:auto minmax(0,1fr) auto auto auto; gap:14px; align-items:center; min-height:48px; padding:6px 16px; font-size:15px; }
.sp-row + .sp-row { border-top:1px solid rgba(255,255,255,.08); }
.sp-when { color:var(--dim); font-variant-numeric:tabular-nums; }
.sp-kind { display:flex; align-items:center; gap:8px; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sp-kind i { width:8px; height:8px; flex:none; border-radius:50%; background:#30d158; }
.sp-kind i.net { background:#bf5af2; }
.sp-v { color:var(--dim); text-align:right; white-space:nowrap; min-width:64px; }
.sp-v b { color:var(--text); font-weight:600; font-variant-numeric:tabular-nums; }
.sp-ms { min-width:56px; }
.sp-empty { margin:0; padding:16px; font-size:15px; color:var(--dim); }
/* the car's half-screen browser (~773 px): the dial on top, everything else below it */
@media (max-width:980px) {
  .speed { grid-template-columns:minmax(0,1fr); }
  .sp-gauge { max-width:440px; }
  #sp-mode .btn { padding:0 14px; }
}

/* home: a sixth column once more than ten apps show (app.js pollStatus), so CarPlay's two rows hold them all */
.grid.six { grid-template-columns:repeat(6, minmax(0,1fr)); }

/* Traffic (traffic.js): the Waze live map fills the page (a rounded card beside the dock). Back, recenter and the zoom
   presets float on its left under Waze's search box, clear of its +/- and locate (bottom right) and its footer.
   The glass is tinted dark: the map is light, and white labels must read on it. */
.traffic { position:relative; margin:10px; border-radius:22px; overflow:hidden; background:var(--card); }
.tr-map, .tr-map > * { position:absolute; inset:0; width:100%; height:100%; border:0; display:block; }
.tr-skel { background:var(--card); }
.tr-map.ready .tr-skel { display:none; }
/* a new map loads invisibly over the old one and fades in once drawn (no flash); only the shown one takes touches */
.tr-frame { opacity:0; pointer-events:none; transition:opacity .35s ease; }
.tr-frame.on { opacity:1; pointer-events:auto; }
@media (prefers-reduced-motion: reduce) { .tr-frame { transition:none; } }
.traffic .glass { --gf:rgba(24,26,30,.62); }
.lite .traffic .glass { background:rgba(24,26,30,.9); }
.tr-rail { position:absolute; left:16px; top:108px; z-index:2; display:flex; flex-direction:column; align-items:center; gap:12px; }
.tr-rail .back-disc { width:52px; height:52px; }
.tr-rail .back-disc:active, .tr-me:active { --gf:rgba(70,72,78,.75); }
.tr-me { width:64px; height:64px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; padding:0; }
.tr-me svg { position:relative; z-index:2; width:28px; height:28px; fill:#0a84ff; }
.tr-me:active { transform:scale(.94); }
.tr-zoom { width:118px; display:flex; flex-direction:column; gap:2px; padding:5px; border-radius:22px; }  /* fixed: the bold lit label doesn't resize it */
.tr-zoom button { position:relative; z-index:2; width:100%; min-height:54px; padding:0 8px; border-radius:17px; background:none; font-size:17px; color:rgba(255,255,255,.88); }
.tr-zoom button.on { background:rgba(255,255,255,.92); color:#111; font-weight:600; box-shadow:0 2px 8px rgba(0,0,0,.3); }
.tr-zoom button:not(.on):active { background:rgba(255,255,255,.16); }
.tr-hint { position:absolute; left:50%; bottom:52px; transform:translateX(-50%); z-index:2; display:flex; align-items:center; gap:12px;
  padding:8px 8px 8px 18px; border-radius:999px; font-size:17px; color:#fff; white-space:nowrap; }
.tr-hint[hidden] { display:none; }
.tr-hint > * { position:relative; z-index:2; }
.tr-hint svg { width:22px; height:22px; fill:rgba(255,255,255,.55); }
.tr-hint svg .x { fill:none; stroke:#ff453a; stroke-width:2.4; stroke-linecap:round; }
.tr-hint .btn { min-height:48px; }
/* the page's no-pinch rule (html, top) would reach into the map's iframe; on Traffic it moves to our own parts */
html.tr-on { touch-action:auto; }
.tr-on .dock, .tr-rail, .tr-hint, .tr-skel { touch-action:pan-x pan-y; }
