@duskmoon-dev/css-art 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -660,7 +660,7 @@
660
660
  left: calc(var(--art-plasma-ball-size) * 151 / 350);
661
661
  }
662
662
  .glassball {
663
- position: relative;
663
+ position: absolute;
664
664
  overflow: hidden;
665
665
  margin: 0 auto;
666
666
  width: 100%;
@@ -670,7 +670,7 @@
670
670
  top: 0%;
671
671
  box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2),
672
672
  inset 0px 10px 30px 5px rgba(255, 255, 255, 1);
673
- position: absolute;
673
+ z-index: 1;
674
674
  }
675
675
  .glassball:after {
676
676
  background: radial-gradient(
@@ -1270,3 +1270,1016 @@
1270
1270
  }
1271
1271
  }
1272
1272
 
1273
+ @layer css-art {
1274
+ @keyframes art-cat-stargazer-blink {
1275
+ 0%, 25%, 28%, 100% { height: 0 }
1276
+ 26.5% { height: 100% }
1277
+ }
1278
+
1279
+ .art-cat-stargazer {
1280
+ --art-cat-stargazer-size: 500px;
1281
+
1282
+ position: relative;
1283
+ font-size: calc(var(--art-cat-stargazer-size) / 90);
1284
+ width: var(--art-cat-stargazer-size);
1285
+ aspect-ratio: 1;
1286
+ overflow: hidden;
1287
+ background:
1288
+ radial-gradient(circle at 20% 20%, #ffc8 0.20em, #0000 0),
1289
+ radial-gradient(circle at 70% 50%, #ffc8 0.25em, #0000 0),
1290
+ radial-gradient(circle at 10% 80%, #ffc8 0.20em, #0000 0),
1291
+ radial-gradient(circle at 80% 30%, #ffc8 0.30em, #0000 0),
1292
+ radial-gradient(circle at 80% 80%, #ffc8 0.23em, #0000 0),
1293
+ radial-gradient(circle at 50% 10%, #ff8b 0.3em, #0000 0),
1294
+ radial-gradient(circle at 40% 60%, #ffc8 0.20em, #0000 0),
1295
+ radial-gradient(circle at 30% 30%, #ffc8 0.20em, #0000 0) 0 0 / 70% 70%,
1296
+ radial-gradient(circle at 30% 30%, #ffc8 0.20em, #0000 0) 40% 30% / 50% 70%,
1297
+ linear-gradient(#0002, #0000),
1298
+ radial-gradient(at 50% 80%, #fcc2, #fff0),
1299
+ #023;
1300
+
1301
+ *, *::before, *::after {
1302
+ position: absolute;
1303
+ box-sizing: border-box;
1304
+ }
1305
+
1306
+ .moon {
1307
+ width: 120%;
1308
+ height: 40%;
1309
+ left: 50%;
1310
+ bottom: 0;
1311
+ translate: -50% 60%;
1312
+ border-radius: 50% / 100% 100% 0 0;
1313
+ box-shadow:
1314
+ 0 0 3em #ffc,
1315
+ 0 0 9em #ffc8;
1316
+ background:
1317
+ radial-gradient(at 38% 20%, #0001 2%, #0000 0),
1318
+ radial-gradient(13% 8% at 50% 0, #0001 99%, #0000),
1319
+ #ffc;
1320
+
1321
+ &::before {
1322
+ content: "";
1323
+ width: 18%;
1324
+ height: 15%;
1325
+ background: #0001;
1326
+ border-radius: 50%;
1327
+ box-shadow: inset 0 1em #0002;
1328
+ rotate: -15deg;
1329
+ top: 15%;
1330
+ left: 20%;
1331
+ scale: 0.8;
1332
+ }
1333
+
1334
+ &::after {
1335
+ content: "";
1336
+ width: 4%;
1337
+ height: 5%;
1338
+ background: #0001;
1339
+ border-radius: 50%;
1340
+ box-shadow: -7em 3em 0 2em #0001;
1341
+ rotate: 30deg;
1342
+ top: 25%;
1343
+ left: 80%;
1344
+ scale: 0.8;
1345
+ }
1346
+ }
1347
+
1348
+ .cat {
1349
+ --fur: #111;
1350
+ --fur-dark: #000;
1351
+ --skin: pink;
1352
+ --suit: #fff;
1353
+ --suit-dark: #ddd;
1354
+ font-size: 0.4em;
1355
+ width: 80em;
1356
+ aspect-ratio: 1;
1357
+ bottom: 15%;
1358
+ left: 50%;
1359
+ translate: -50%;
1360
+
1361
+ .bubble {
1362
+ width: 119%;
1363
+ height: 103%;
1364
+ border-radius: 50%;
1365
+ bottom: 25%;
1366
+ left: 49%;
1367
+ translate: -50%;
1368
+ background:
1369
+ radial-gradient(circle at 25% 25%, #fff3, #fff0 25%),
1370
+ radial-gradient(circle at 15% 45%, #fff1, #fff0 15%),
1371
+ radial-gradient(circle at 75% 35%, #fff1, #fff0 50%),
1372
+ #fff1;
1373
+ box-shadow:
1374
+ inset 0 0 1em 1em #acf,
1375
+ inset 0 0 5em #fff;
1376
+ }
1377
+
1378
+ .backpack {
1379
+ width: 40%;
1380
+ left: 50%;
1381
+ height: 30%;
1382
+ background: #bcd;
1383
+ bottom: 0;
1384
+ translate: -50%;
1385
+ border-radius: 3em;
1386
+ }
1387
+
1388
+ .tail {
1389
+ width: 50%;
1390
+ height: 50%;
1391
+ border-radius: 50%;
1392
+ border: 7em solid #0000;
1393
+ border-top-color: var(--suit-dark);
1394
+ border-left-color: var(--suit-dark);
1395
+ clip-path: polygon(100% 0, 100% 100%, 0 30%, 0 0);
1396
+ top: 75%;
1397
+ left: 52%;
1398
+
1399
+ &::before {
1400
+ content: "";
1401
+ width: 7em;
1402
+ aspect-ratio: 1;
1403
+ background: var(--suit-dark);
1404
+ border-radius: 50%;
1405
+ left: 81%;
1406
+ top: -9%;
1407
+ }
1408
+ }
1409
+
1410
+ .body {
1411
+ left: 50%;
1412
+ translate: -50%;
1413
+ bottom: 0;
1414
+ width: 35%;
1415
+ height: 40%;
1416
+ background:
1417
+ radial-gradient(circle at 17% 55%, #36c 2em, #0000 0),
1418
+ radial-gradient(100% 70% at 50% 0, var(--fur-dark) 50%, #0000 0),
1419
+ radial-gradient(150% 70% at 49% 0, var(--fur) 50%, #d99 0 59%, #0000 calc(59% + 1px)),
1420
+ var(--suit);
1421
+ border-radius: 100% / 200% 200% 20% 20%;
1422
+
1423
+ .leg {
1424
+ width: 165%;
1425
+ height: 38%;
1426
+ bottom: 0;
1427
+ left: 50%;
1428
+ translate: -50%;
1429
+ border-radius: 8em 8em 100% 100% / 10em 10em 16em 16em;
1430
+ scale: 1 -1;
1431
+ background:
1432
+ radial-gradient(20% 200% at 2% 10%, var(--suit-dark) 20%, #0000 0),
1433
+ radial-gradient(20% 200% at 98% 10%, var(--suit-dark) 20%, #0000 0),
1434
+ var(--suit);
1435
+ }
1436
+
1437
+ .paw {
1438
+ width: 35%;
1439
+ height: 49%;
1440
+ border: 0.75em solid #777;
1441
+ border-top: 0;
1442
+ border-radius: 0 0 5em 5em;
1443
+ top: 51%;
1444
+ rotate: -10deg;
1445
+ left: 10%;
1446
+ clip-path: polygon(0 20%, 100% 30%, 100% 100%, 0 100%);
1447
+
1448
+ & + & {
1449
+ right: 7%;
1450
+ height: 50%;
1451
+ left: auto;
1452
+ rotate: 13deg;
1453
+ scale: -1 1;
1454
+ clip-path: polygon(0 25%, 100% 15%, 100% 100%, 0 100%);
1455
+ }
1456
+ }
1457
+ }
1458
+
1459
+ .ear {
1460
+ width: 40%;
1461
+ aspect-ratio: 1;
1462
+ border: 4em solid var(--fur);
1463
+ border-radius: 5% 90% 10% 80%;
1464
+ background: var(--skin);
1465
+ top: 5%;
1466
+ left: 10%;
1467
+
1468
+ & + & {
1469
+ scale: -1 1;
1470
+ left: auto;
1471
+ right: 10%;
1472
+ }
1473
+ }
1474
+
1475
+ .head {
1476
+ width: 80%;
1477
+ aspect-ratio: 1.1;
1478
+ background:
1479
+ linear-gradient(#0003, #0000 50%),
1480
+ var(--fur);
1481
+ left: 50%;
1482
+ translate: -50%;
1483
+ border-radius: 100% / 125% 125% 80% 75%;
1484
+
1485
+ .whisker {
1486
+ width: 30%;
1487
+ height: 30%;
1488
+ border-radius: 50%;
1489
+ border: 2em solid #0000;
1490
+ border-top-color: var(--fur);
1491
+ border-left-color: var(--fur);
1492
+ clip-path: polygon(100% 0, 100% 100%, 0 30%, 0 0);
1493
+
1494
+ &:nth-child(1) {
1495
+ top: 45%;
1496
+ translate: -65%;
1497
+ }
1498
+ &:nth-child(2) {
1499
+ top: 55%;
1500
+ translate: -40%;
1501
+ rotate: -20deg;
1502
+ }
1503
+ &:nth-child(3) {
1504
+ right: 0%;
1505
+ top: 45%;
1506
+ translate: 65%;
1507
+ rotate: 10deg;
1508
+ }
1509
+ &:nth-child(4) {
1510
+ right: -2%;
1511
+ top: 55%;
1512
+ translate: 40%;
1513
+ rotate: 24deg;
1514
+ }
1515
+ }
1516
+
1517
+ .nose {
1518
+ width: 10%;
1519
+ height: 7%;
1520
+ background: var(--skin);
1521
+ border-radius: 50%;
1522
+ left: 50%;
1523
+ translate: -50% -50%;
1524
+ top: 55%;
1525
+ }
1526
+
1527
+ .eye {
1528
+ --pos: 25%;
1529
+ --x1: 50%;
1530
+ --x2: 42%;
1531
+ width: 35%;
1532
+ aspect-ratio: 1;
1533
+ border-radius: 50%;
1534
+ background:
1535
+ radial-gradient(50% 50% at var(--x1) 32%, #fff 25%, #0000 calc(25% + 1px)),
1536
+ radial-gradient(50% 50% at var(--x2) 51%, #fff 12%, #0000 calc(12% + 1px)),
1537
+ radial-gradient(circle at 60% 40%, #000 35%, #0000 calc(35% + 1px)),
1538
+ white;
1539
+ left: var(--pos);
1540
+ translate: -50% -50%;
1541
+ top: 43%;
1542
+ overflow: hidden;
1543
+
1544
+ & + & {
1545
+ --x1: 70%;
1546
+ --x2: 78%;
1547
+ left: calc(100% - var(--pos));
1548
+ scale: -1 1;
1549
+ }
1550
+
1551
+ &::before {
1552
+ content: "";
1553
+ top: -30%;
1554
+ left: 50%;
1555
+ translate: -50%;
1556
+ width: 150%;
1557
+ height: 0%;
1558
+ background: var(--fur);
1559
+ rotate: -10deg;
1560
+ animation: art-cat-stargazer-blink 10s linear infinite;
1561
+ }
1562
+
1563
+ &::after {
1564
+ content: "";
1565
+ bottom: -10%;
1566
+ left: 50%;
1567
+ translate: -50%;
1568
+ width: 150%;
1569
+ height: 0%;
1570
+ background: var(--fur);
1571
+ rotate: -10deg;
1572
+ animation: art-cat-stargazer-blink 10s linear infinite;
1573
+ }
1574
+ }
1575
+ }
1576
+ }
1577
+ }
1578
+
1579
+ /* Size variants */
1580
+ .art-cat-stargazer-sm {
1581
+ --art-cat-stargazer-size: 300px;
1582
+ }
1583
+
1584
+ .art-cat-stargazer-lg {
1585
+ --art-cat-stargazer-size: 700px;
1586
+ }
1587
+ }
1588
+
1589
+ @layer css-art {
1590
+ @keyframes art-color-spin-spin {
1591
+ 0%,
1592
+ 1% {
1593
+ transform: translateX(-50%) translateY(calc(var(--art-color-spin-size) * 0.026))
1594
+ rotateY(0deg) scale(1.05);
1595
+ }
1596
+ 99%,
1597
+ 100% {
1598
+ transform: translateX(-50%) translateY(calc(var(--art-color-spin-size) * 0.026))
1599
+ rotateY(360deg) scale(1.05);
1600
+ }
1601
+ }
1602
+
1603
+ .art-color-spin {
1604
+ --art-color-spin-size: 770px;
1605
+ --art-color-spin-color1: #ffd700;
1606
+ --art-color-spin-color2: #20a7db;
1607
+ --art-color-spin-color3: #8fce00;
1608
+ --art-color-spin-color4: #ff0000;
1609
+
1610
+ position: relative;
1611
+ width: var(--art-color-spin-size);
1612
+ height: calc(var(--art-color-spin-size) * 0.26);
1613
+ background: repeating-linear-gradient(
1614
+ -45deg,
1615
+ #000,
1616
+ #000 5px,
1617
+ #111 5px,
1618
+ #111 10px
1619
+ );
1620
+ perspective: calc(var(--art-color-spin-size) * 1.039);
1621
+ font-family: "Google Sans", sans-serif;
1622
+ font-weight: 440;
1623
+ overflow: visible;
1624
+ }
1625
+
1626
+ .art-color-spin * {
1627
+ box-sizing: border-box;
1628
+ }
1629
+
1630
+ /* Decorative "c" letter */
1631
+ .art-color-spin::before {
1632
+ content: "c";
1633
+ font-size: calc(var(--art-color-spin-size) * 0.461);
1634
+ color: #eee;
1635
+ position: absolute;
1636
+ top: calc(var(--art-color-spin-size) * -0.169);
1637
+ left: 0;
1638
+ text-indent: calc(var(--art-color-spin-size) * -0.026);
1639
+ line-height: calc(var(--art-color-spin-size) * 0.519);
1640
+ z-index: 2;
1641
+ -webkit-box-reflect: below calc(var(--art-color-spin-size) * -0.169)
1642
+ linear-gradient(transparent, rgb(255 255 255 / 0.06));
1643
+ }
1644
+
1645
+ /* Decorative "r" letter */
1646
+ .art-color-spin::after {
1647
+ content: "r";
1648
+ font-size: calc(var(--art-color-spin-size) * 0.461);
1649
+ color: #eee;
1650
+ position: absolute;
1651
+ top: calc(var(--art-color-spin-size) * -0.169);
1652
+ right: calc(var(--art-color-spin-size) * 0.039);
1653
+ line-height: calc(var(--art-color-spin-size) * 0.519);
1654
+ z-index: 2;
1655
+ -webkit-box-reflect: below calc(var(--art-color-spin-size) * -0.169)
1656
+ linear-gradient(transparent, rgb(255 255 255 / 0.06));
1657
+ }
1658
+
1659
+ /* 3D spinner container */
1660
+ .art-color-spin > ul {
1661
+ width: 0;
1662
+ height: calc(var(--art-color-spin-size) * 0.195);
1663
+ display: block;
1664
+ left: 50%;
1665
+ position: relative;
1666
+ transform-style: preserve-3d;
1667
+ transform-origin: center center;
1668
+ z-index: 3;
1669
+ margin: 0;
1670
+ padding: 0;
1671
+ list-style: none;
1672
+ animation: art-color-spin-spin 11s linear infinite alternate-reverse;
1673
+ }
1674
+
1675
+ .art-color-spin > ul * {
1676
+ transform-style: preserve-3d;
1677
+ }
1678
+
1679
+ /* White vertical bars (axis indicators) */
1680
+ .art-color-spin > ul::before,
1681
+ .art-color-spin > ul::after {
1682
+ content: "";
1683
+ display: block;
1684
+ position: absolute;
1685
+ width: calc(var(--art-color-spin-size) * 0.052);
1686
+ height: calc(var(--art-color-spin-size) * 0.286);
1687
+ border-radius: calc(var(--art-color-spin-size) * 0.026);
1688
+ top: calc(var(--art-color-spin-size) * -0.039);
1689
+ left: calc(var(--art-color-spin-size) * -0.026);
1690
+ background: #fff;
1691
+ }
1692
+
1693
+ .art-color-spin > ul::before {
1694
+ background: #eee;
1695
+ transform: rotateY(-90deg);
1696
+ }
1697
+
1698
+ /* Colored rings */
1699
+ .art-color-spin > ul > li {
1700
+ display: block;
1701
+ width: calc(var(--art-color-spin-size) * 0.234);
1702
+ height: calc(var(--art-color-spin-size) * 0.234);
1703
+ border: solid calc(var(--art-color-spin-size) * 0.032) #fff;
1704
+ border-radius: 50%;
1705
+ top: calc(var(--art-color-spin-size) * -0.013);
1706
+ left: 0;
1707
+ position: absolute;
1708
+ transform: rotateY(calc(var(--i) * -90deg)) translateZ(0px)
1709
+ translateX(calc(var(--art-color-spin-size) * 0.052));
1710
+ transform-origin: top left;
1711
+ -webkit-box-reflect: below 2px linear-gradient(transparent, rgb(255 255 255 / 0.1));
1712
+ margin: 0;
1713
+ padding: 0;
1714
+ list-style: none;
1715
+ }
1716
+
1717
+ /* Inner colored circles (mix-blend-mode creates glow effect) */
1718
+ .art-color-spin > ul > li::before,
1719
+ .art-color-spin > ul > li::after {
1720
+ content: "";
1721
+ width: calc(var(--art-color-spin-size) * 0.13);
1722
+ height: calc(var(--art-color-spin-size) * 0.13);
1723
+ display: block;
1724
+ opacity: 0.75;
1725
+ border-radius: 50%;
1726
+ position: absolute;
1727
+ left: 50%;
1728
+ top: 50%;
1729
+ mix-blend-mode: color-burn;
1730
+ }
1731
+
1732
+ .art-color-spin > ul > li::after {
1733
+ transform: translate3d(-50%, -50%, 1px);
1734
+ }
1735
+
1736
+ .art-color-spin > ul > li::before {
1737
+ transform: translate3d(-50%, -50%, -1px);
1738
+ }
1739
+
1740
+ /* Ring 1: Gold */
1741
+ .art-color-spin > ul > li:nth-child(1) {
1742
+ outline: solid 1px var(--art-color-spin-color1);
1743
+ outline-offset: 1px;
1744
+ }
1745
+ .art-color-spin > ul > li:nth-child(1)::after {
1746
+ background: var(--art-color-spin-color1);
1747
+ }
1748
+ .art-color-spin > ul > li:nth-child(1)::before {
1749
+ background: color-mix(in hsl, var(--art-color-spin-color1), white 30%);
1750
+ }
1751
+
1752
+ /* Ring 2: Blue */
1753
+ .art-color-spin > ul > li:nth-child(2) {
1754
+ outline: solid 1px var(--art-color-spin-color2);
1755
+ outline-offset: 1px;
1756
+ }
1757
+ .art-color-spin > ul > li:nth-child(2)::after {
1758
+ background: var(--art-color-spin-color2);
1759
+ }
1760
+ .art-color-spin > ul > li:nth-child(2)::before {
1761
+ background: color-mix(in hsl, var(--art-color-spin-color2), white 30%);
1762
+ }
1763
+
1764
+ /* Ring 3: Green */
1765
+ .art-color-spin > ul > li:nth-child(3) {
1766
+ outline: solid 1px var(--art-color-spin-color3);
1767
+ outline-offset: 1px;
1768
+ }
1769
+ .art-color-spin > ul > li:nth-child(3)::after {
1770
+ background: var(--art-color-spin-color3);
1771
+ }
1772
+ .art-color-spin > ul > li:nth-child(3)::before {
1773
+ background: color-mix(in hsl, var(--art-color-spin-color3), white 30%);
1774
+ }
1775
+
1776
+ /* Ring 4: Red */
1777
+ .art-color-spin > ul > li:nth-child(4) {
1778
+ outline: solid 1px var(--art-color-spin-color4);
1779
+ outline-offset: 1px;
1780
+ }
1781
+ .art-color-spin > ul > li:nth-child(4)::after {
1782
+ background: var(--art-color-spin-color4);
1783
+ }
1784
+ .art-color-spin > ul > li:nth-child(4)::before {
1785
+ background: color-mix(in hsl, var(--art-color-spin-color4), white 30%);
1786
+ }
1787
+
1788
+ .art-color-spin-sm {
1789
+ --art-color-spin-size: 385px;
1790
+ }
1791
+
1792
+ .art-color-spin-lg {
1793
+ --art-color-spin-size: 1000px;
1794
+ }
1795
+ }
1796
+
1797
+ @layer css-art {
1798
+ @keyframes art-synthwave-starfield-color {
1799
+ 0% {
1800
+ filter: hue-rotate(1deg);
1801
+ }
1802
+ 100% {
1803
+ filter: hue-rotate(360deg);
1804
+ }
1805
+ }
1806
+
1807
+ @keyframes art-synthwave-starfield-lines-x {
1808
+ 0% {
1809
+ background-position: calc(var(--art-synthwave-starfield-size) * 0.12) center;
1810
+ }
1811
+ 100% {
1812
+ background-position: 0 center;
1813
+ }
1814
+ }
1815
+
1816
+ @keyframes art-synthwave-starfield-lines-y {
1817
+ 0% {
1818
+ background-position: center calc(var(--art-synthwave-starfield-size) * 0.12);
1819
+ }
1820
+ 100% {
1821
+ background-position: center 0;
1822
+ }
1823
+ }
1824
+
1825
+ @keyframes art-synthwave-starfield-stars {
1826
+ 0% {
1827
+ transform: translateZ(calc(var(--art-synthwave-starfield-size) * -0.4));
1828
+ opacity: 0;
1829
+ }
1830
+ 30%,
1831
+ 80% {
1832
+ opacity: 1;
1833
+ }
1834
+ 100% {
1835
+ transform: translateZ(calc(var(--art-synthwave-starfield-size) * 0.5)) rotate(15deg);
1836
+ opacity: 0;
1837
+ }
1838
+ }
1839
+
1840
+ @keyframes art-synthwave-starfield-stars2 {
1841
+ 0% {
1842
+ transform: translateZ(calc(var(--art-synthwave-starfield-size) * -0.4)) rotate(180deg);
1843
+ opacity: 0;
1844
+ }
1845
+ 30%,
1846
+ 80% {
1847
+ opacity: 1;
1848
+ }
1849
+ 100% {
1850
+ transform: translateZ(calc(var(--art-synthwave-starfield-size) * 0.5)) rotate(195deg);
1851
+ opacity: 0;
1852
+ }
1853
+ }
1854
+
1855
+ .art-synthwave-starfield {
1856
+ --art-synthwave-starfield-size: 600px;
1857
+ --art-synthwave-starfield-line-color: #6bd600;
1858
+
1859
+ position: relative;
1860
+ width: var(--art-synthwave-starfield-size);
1861
+ height: var(--art-synthwave-starfield-size);
1862
+ overflow: hidden;
1863
+ perspective: calc(var(--art-synthwave-starfield-size) * 0.5);
1864
+ transform-style: preserve-3d;
1865
+ background-image: radial-gradient(#0000, #673ab72e),
1866
+ linear-gradient(-90deg, #2000587d, #000, #9c27b02b),
1867
+ linear-gradient(0deg, #ff98002e, #000, #8bc34a5e);
1868
+ background-color: #000;
1869
+ box-shadow: 0 0 calc(var(--art-synthwave-starfield-size) * 1.5)
1870
+ calc(var(--art-synthwave-starfield-size) * 0.11) #000 inset;
1871
+ font-family: "Press Start 2P", system-ui;
1872
+ }
1873
+
1874
+ /* Secondary gradient overlay (replaces body::before) */
1875
+ .art-synthwave-starfield::before {
1876
+ content: "";
1877
+ position: absolute;
1878
+ width: 100%;
1879
+ height: 100%;
1880
+ background: radial-gradient(#0000, #0a123a),
1881
+ linear-gradient(180deg, #2000587d, #000, #9c27b02b),
1882
+ linear-gradient(0deg, #ff980054, #000, #009688ba);
1883
+ opacity: 0.25;
1884
+ z-index: 0;
1885
+ }
1886
+
1887
+ /* All descendants: absolute + preserve-3d */
1888
+ .art-synthwave-starfield * {
1889
+ box-sizing: border-box;
1890
+ position: absolute;
1891
+ transform-style: preserve-3d;
1892
+ }
1893
+
1894
+ .art-synthwave-starfield *::before,
1895
+ .art-synthwave-starfield *::after {
1896
+ box-sizing: border-box;
1897
+ transform-style: preserve-3d;
1898
+ position: absolute;
1899
+ content: "";
1900
+ }
1901
+
1902
+ /* Shared grid panel base */
1903
+ .art-synthwave-starfield-sides {
1904
+ width: 100%;
1905
+ height: 100%;
1906
+ background: radial-gradient(#0f0015 10%, #000000e0 35%, #fff0 75% 100%);
1907
+ }
1908
+
1909
+ /* Left wall (shared base for both side panels) */
1910
+ .art-synthwave-starfield-sides::before,
1911
+ .art-synthwave-starfield-sides::after {
1912
+ width: 100%;
1913
+ height: 100%;
1914
+ transform: rotateY(90deg);
1915
+ transform-origin: left center;
1916
+ background-image: repeating-linear-gradient(
1917
+ 90deg,
1918
+ #fff0 0,
1919
+ #fff0 calc(var(--art-synthwave-starfield-size) * 0.1),
1920
+ var(--art-synthwave-starfield-line-color) calc(var(--art-synthwave-starfield-size) * 0.1)
1921
+ calc(var(--art-synthwave-starfield-size) * 0.1035),
1922
+ #fff0 calc(var(--art-synthwave-starfield-size) * 0.1035)
1923
+ ),
1924
+ repeating-linear-gradient(
1925
+ 180deg,
1926
+ #fff0 0,
1927
+ #fff0 calc(var(--art-synthwave-starfield-size) * 0.1),
1928
+ var(--art-synthwave-starfield-line-color) calc(var(--art-synthwave-starfield-size) * 0.1)
1929
+ calc(var(--art-synthwave-starfield-size) * 0.1035),
1930
+ #fff0 calc(var(--art-synthwave-starfield-size) * 0.1035)
1931
+ );
1932
+ background-color: transparent;
1933
+ animation: art-synthwave-starfield-lines-x 0.5s linear 0s infinite,
1934
+ art-synthwave-starfield-color 5s linear 0s infinite;
1935
+ background-repeat: repeat;
1936
+ background-position: center center;
1937
+ background-size: calc(var(--art-synthwave-starfield-size) * 0.12)
1938
+ calc(var(--art-synthwave-starfield-size) * 0.12);
1939
+ box-shadow: 0 0 calc(var(--art-synthwave-starfield-size) * 0.08)
1940
+ calc(var(--art-synthwave-starfield-size) * 0.1) #000 inset;
1941
+ }
1942
+
1943
+ /* Right wall */
1944
+ .art-synthwave-starfield-lefrig::after {
1945
+ transform: rotateY(-90deg);
1946
+ transform-origin: right center;
1947
+ animation: art-synthwave-starfield-lines-x 0.5s linear 0s infinite reverse,
1948
+ art-synthwave-starfield-color 5s linear 2s infinite;
1949
+ z-index: -1;
1950
+ }
1951
+
1952
+ /* Floor */
1953
+ .art-synthwave-starfield-topbot::before {
1954
+ height: 100%;
1955
+ transform: rotateX(90deg);
1956
+ transform-origin: center bottom;
1957
+ bottom: 0;
1958
+ animation: art-synthwave-starfield-lines-y 0.5s linear 0s infinite reverse,
1959
+ art-synthwave-starfield-color 5s linear 1s infinite;
1960
+ }
1961
+
1962
+ /* Ceiling */
1963
+ .art-synthwave-starfield-topbot::after {
1964
+ height: 100%;
1965
+ transform: rotateX(-90deg);
1966
+ transform-origin: center top;
1967
+ bottom: auto;
1968
+ animation: art-synthwave-starfield-lines-y 0.5s linear 0s infinite,
1969
+ art-synthwave-starfield-color 5s linear 3s infinite;
1970
+ }
1971
+
1972
+ /* Starfield layers */
1973
+ .art-synthwave-starfield-stars {
1974
+ width: 100%;
1975
+ height: 100%;
1976
+ z-index: 3;
1977
+ }
1978
+
1979
+ .art-synthwave-starfield-stars::before,
1980
+ .art-synthwave-starfield-stars::after {
1981
+ width: 200%;
1982
+ height: 200%;
1983
+ background: transparent;
1984
+ border-radius: 100%;
1985
+ background-image: repeating-conic-gradient(
1986
+ #fff8 0%,
1987
+ transparent 0.0002%,
1988
+ transparent 0.075%,
1989
+ transparent 0.65%
1990
+ ),
1991
+ repeating-conic-gradient(
1992
+ #fff 0%,
1993
+ transparent 0.0004%,
1994
+ transparent 0.05%,
1995
+ transparent 0.495%
1996
+ );
1997
+ transform: translateZ(calc(var(--art-synthwave-starfield-size) * -0.4));
1998
+ opacity: 0;
1999
+ animation: art-synthwave-starfield-stars 4s ease-in -1s infinite;
2000
+ z-index: 1;
2001
+ left: -50%;
2002
+ top: -50%;
2003
+ }
2004
+
2005
+ .art-synthwave-starfield-stars::after {
2006
+ animation-name: art-synthwave-starfield-stars2;
2007
+ animation-delay: -2s;
2008
+ }
2009
+
2010
+ /* Second stars div: offset delays for smooth looping */
2011
+ .art-synthwave-starfield-stars + .art-synthwave-starfield-stars::before {
2012
+ animation-delay: -3s;
2013
+ }
2014
+
2015
+ .art-synthwave-starfield-stars + .art-synthwave-starfield-stars::after {
2016
+ animation-delay: -4s;
2017
+ }
2018
+
2019
+ /* Pause all animations (opt-in modifier) */
2020
+ .art-synthwave-starfield.art-synthwave-starfield-paused *::before,
2021
+ .art-synthwave-starfield.art-synthwave-starfield-paused *::after {
2022
+ animation-play-state: paused !important;
2023
+ }
2024
+
2025
+ .art-synthwave-starfield-sm {
2026
+ --art-synthwave-starfield-size: 300px;
2027
+ }
2028
+
2029
+ .art-synthwave-starfield-lg {
2030
+ --art-synthwave-starfield-size: 900px;
2031
+ }
2032
+ }
2033
+
2034
+ @property --art-circular-gallery-rotation {
2035
+ syntax: "<angle>";
2036
+ inherits: true;
2037
+ initial-value: 0deg;
2038
+ }
2039
+
2040
+ @layer css-art {
2041
+ .art-circular-gallery {
2042
+ --art-circular-gallery-size: 600px;
2043
+ --art-circular-gallery-radius: calc(var(--art-circular-gallery-size) * 0.42);
2044
+ --art-circular-gallery-card-width: calc(var(--art-circular-gallery-size) * 0.09);
2045
+ --art-circular-gallery-card-border-radius: calc(var(--art-circular-gallery-size) * 0.012);
2046
+ --art-circular-gallery-arc-size: 0.95;
2047
+ --art-circular-gallery-arc-center: 0.275;
2048
+ --art-circular-gallery-arc-start: calc(
2049
+ var(--art-circular-gallery-arc-center) - var(--art-circular-gallery-arc-size) / 2
2050
+ );
2051
+ --art-circular-gallery-arc-shift-delta: 0.0075;
2052
+ --art-circular-gallery-card-trans-duration: 1000ms;
2053
+ --art-circular-gallery-card-trans-easing: linear(
2054
+ 0,
2055
+ 0.01 0.8%,
2056
+ 0.038 1.6%,
2057
+ 0.154 3.4%,
2058
+ 0.781 9.7%,
2059
+ 1.01 12.5%,
2060
+ 1.089 13.8%,
2061
+ 1.153 15.2%,
2062
+ 1.195 16.6%,
2063
+ 1.219 18%,
2064
+ 1.224 19.7%,
2065
+ 1.208 21.6%,
2066
+ 1.172 23.6%,
2067
+ 1.057 28.6%,
2068
+ 1.007 31.2%,
2069
+ 0.969 34.1%,
2070
+ 0.951 37.1%,
2071
+ 0.953 40.9%,
2072
+ 0.998 50.4%,
2073
+ 1.011 56%,
2074
+ 0.998 74.7%,
2075
+ 1
2076
+ );
2077
+
2078
+ anchor-name: --art-circular-gallery-center;
2079
+
2080
+ /* transform at 0deg ensures this is always a containing block for position:fixed descendants */
2081
+ transform: rotate(var(--art-circular-gallery-rotation));
2082
+ transition: transform 700ms linear;
2083
+
2084
+ position: relative;
2085
+ width: var(--art-circular-gallery-size);
2086
+ height: var(--art-circular-gallery-size);
2087
+ aspect-ratio: 1;
2088
+ display: grid;
2089
+ place-content: center;
2090
+ font-family: sans-serif;
2091
+
2092
+ h1 {
2093
+ margin: 0;
2094
+ text-align: center;
2095
+ font-size: clamp(1rem, calc(var(--art-circular-gallery-size) * 0.035), 2.5rem);
2096
+ font-weight: 300;
2097
+ letter-spacing: 0.05em;
2098
+ /* counter-rotate so the title stays upright as the gallery rotates */
2099
+ transform: rotate(calc(var(--art-circular-gallery-rotation) * -1));
2100
+ }
2101
+
2102
+ div {
2103
+ --arc-step: calc(var(--art-circular-gallery-arc-size) / 19);
2104
+ --arc-shift: calc(var(--art-circular-gallery-arc-shift-delta) * var(--d, 1));
2105
+ --card-offset-distance: calc(
2106
+ (
2107
+ var(--art-circular-gallery-arc-start) + (var(--i) - 1) * var(--arc-step) +
2108
+ var(--arc-shift)
2109
+ ) * 100%
2110
+ );
2111
+
2112
+ &:has(a:hover),
2113
+ &:target {
2114
+ --title-opacity: 1;
2115
+ }
2116
+
2117
+ &:target {
2118
+ --zindex: 2;
2119
+ --center-opacity: 1;
2120
+ --center-scale: 1;
2121
+ --image-outline-color: rgba(255 255 255 / 0.5);
2122
+ }
2123
+
2124
+ /* Large image preview centered in the gallery (shown on :target) */
2125
+ &::before {
2126
+ content: "";
2127
+ position: fixed;
2128
+ position-anchor: --art-circular-gallery-center;
2129
+ position-area: span-all;
2130
+ transform: rotate(calc(var(--art-circular-gallery-rotation) * -1));
2131
+ width: calc(var(--art-circular-gallery-size) * 0.4);
2132
+ aspect-ratio: 1;
2133
+ border-radius: 9in;
2134
+ background: var(--bg-img);
2135
+ box-sizing: border-box;
2136
+ outline: 10px solid rgba(255 255 255 / 0.3);
2137
+ outline-offset: -10px;
2138
+ background-size: cover;
2139
+ background-repeat: no-repeat;
2140
+ opacity: var(--center-opacity, 0);
2141
+ scale: var(--center-scale, 0);
2142
+ pointer-events: none;
2143
+ transition-property: scale, opacity;
2144
+ transition-duration: 300ms, 150ms;
2145
+ }
2146
+
2147
+ /* Tooltip showing the photographer's name on hover */
2148
+ &::after {
2149
+ content: attr(data-title);
2150
+ position: fixed;
2151
+ position-anchor: --art-circular-gallery-card;
2152
+ position-area: center span-all;
2153
+ z-index: 2;
2154
+ pointer-events: none;
2155
+ opacity: var(--title-opacity, 0);
2156
+ transition-property: opacity, transform;
2157
+ transition-duration: 150ms;
2158
+ border: 1px solid rgb(255 255 255 / 0.75);
2159
+ background: rgb(0 0 0 / 0.25);
2160
+ backdrop-filter: blur(3px);
2161
+ padding: 0.25em 1em;
2162
+ border-radius: 5px;
2163
+ font-size: clamp(0.55rem, calc(var(--art-circular-gallery-size) * 0.012), 0.85rem);
2164
+ white-space: nowrap;
2165
+
2166
+ @starting-style {
2167
+ opacity: 0;
2168
+ }
2169
+ }
2170
+
2171
+ /* Thumbnail card placed on the circular offset-path */
2172
+ a {
2173
+ position: absolute;
2174
+ display: block;
2175
+ width: var(--art-circular-gallery-card-width);
2176
+ aspect-ratio: 4 / 6;
2177
+ border-radius: var(--art-circular-gallery-card-border-radius);
2178
+ border: 2px solid rgba(255 255 255 / 0.6);
2179
+ offset-path: circle(var(--art-circular-gallery-radius) at 50% 50%);
2180
+ offset-distance: var(--card-offset-distance);
2181
+ offset-rotate: auto;
2182
+ offset-anchor: 50% 0%;
2183
+ transition:
2184
+ offset var(--art-circular-gallery-card-trans-duration)
2185
+ var(--art-circular-gallery-card-trans-easing),
2186
+ scale 200ms ease;
2187
+ z-index: var(--zindex, 1);
2188
+ anchor-name: --art-circular-gallery-card;
2189
+
2190
+ &:hover {
2191
+ scale: 2.5;
2192
+ z-index: 3;
2193
+ }
2194
+
2195
+ img {
2196
+ width: 100%;
2197
+ height: 100%;
2198
+ object-fit: cover;
2199
+ display: block;
2200
+ border-radius: inherit;
2201
+ outline: 5px solid var(--image-outline-color, transparent);
2202
+ outline-offset: -5px;
2203
+ transition: outline 300ms ease-in-out;
2204
+ }
2205
+ }
2206
+ }
2207
+ }
2208
+
2209
+ /* ============================================================
2210
+ FORWARD siblings (clockwise / +d)
2211
+ ============================================================ */
2212
+
2213
+ /* +1 */
2214
+ .art-circular-gallery:has(> *:hover) > *:hover + *,
2215
+ .art-circular-gallery:has(> :last-child:hover) > :nth-child(1) {
2216
+ --d: 3;
2217
+ }
2218
+
2219
+ /* +2 */
2220
+ .art-circular-gallery:has(> *:hover) > *:hover + * + *,
2221
+ .art-circular-gallery:has(> :last-child:hover) > :nth-child(2),
2222
+ .art-circular-gallery:has(> :nth-last-child(2):hover) > :nth-child(1) {
2223
+ --d: 2;
2224
+ }
2225
+
2226
+ /* +3 */
2227
+ .art-circular-gallery:has(> *:hover) > *:hover + * + * + *,
2228
+ .art-circular-gallery:has(> :last-child:hover) > :nth-child(3),
2229
+ .art-circular-gallery:has(> :nth-last-child(2):hover) > :nth-child(2),
2230
+ .art-circular-gallery:has(> :nth-last-child(3):hover) > :nth-child(1) {
2231
+ --d: 1;
2232
+ }
2233
+
2234
+ /* +4 */
2235
+ .art-circular-gallery:has(> *:hover) > *:hover + * + * + * + *,
2236
+ .art-circular-gallery:has(> :last-child:hover) > :nth-child(4),
2237
+ .art-circular-gallery:has(> :nth-last-child(2):hover) > :nth-child(3),
2238
+ .art-circular-gallery:has(> :nth-last-child(3):hover) > :nth-child(2),
2239
+ .art-circular-gallery:has(> :nth-last-child(4):hover) > :nth-child(1) {
2240
+ --d: 0.5;
2241
+ }
2242
+
2243
+ /* ============================================================
2244
+ BACKWARD siblings (counter-clockwise / -d)
2245
+ ============================================================ */
2246
+
2247
+ /* -1 */
2248
+ .art-circular-gallery *:has(+ *:hover),
2249
+ .art-circular-gallery:has(> :nth-child(1):hover) :nth-last-child(1) {
2250
+ --d: -3;
2251
+ }
2252
+
2253
+ /* -2 */
2254
+ .art-circular-gallery *:has(+ * + *:hover),
2255
+ .art-circular-gallery:has(> :nth-child(1):hover) :nth-last-child(2),
2256
+ .art-circular-gallery:has(> :nth-child(2):hover) :nth-last-child(1) {
2257
+ --d: -2;
2258
+ }
2259
+
2260
+ /* -3 */
2261
+ .art-circular-gallery *:has(+ * + * + *:hover),
2262
+ .art-circular-gallery:has(> :nth-child(1):hover) :nth-last-child(3),
2263
+ .art-circular-gallery:has(> :nth-child(2):hover) :nth-last-child(2),
2264
+ .art-circular-gallery:has(> :nth-child(3):hover) :nth-last-child(1) {
2265
+ --d: -1;
2266
+ }
2267
+
2268
+ /* -4 */
2269
+ .art-circular-gallery *:has(+ * + * + * + *:hover),
2270
+ .art-circular-gallery:has(> :nth-child(1):hover) :nth-last-child(4),
2271
+ .art-circular-gallery:has(> :nth-child(2):hover) :nth-last-child(3),
2272
+ .art-circular-gallery:has(> :nth-child(3):hover) :nth-last-child(2),
2273
+ .art-circular-gallery:has(> :nth-child(4):hover) :nth-last-child(1) {
2274
+ --d: -0.5;
2275
+ }
2276
+
2277
+ .art-circular-gallery-sm {
2278
+ --art-circular-gallery-size: 400px;
2279
+ }
2280
+
2281
+ .art-circular-gallery-lg {
2282
+ --art-circular-gallery-size: 800px;
2283
+ }
2284
+ }
2285
+