/* Dotbook animated hero (preview, behind HERO3D). Generated by scripts/gen-hero3d-css.py. Only transform + opacity animate. */
.h3d{position:relative;width:min(100%,520px);aspect-ratio:1;container-type:inline-size;--ms:rgba(20,0,10,.20);--glow:color-mix(in srgb,var(--halo) 24%,transparent)}
@media (prefers-color-scheme:dark){.h3d{--ms:rgba(0,0,0,.55);--glow:color-mix(in srgb,var(--halo) 30%,transparent)}}
@media (max-width:760px){.h3d{width:min(100%,340px)}}
.h3d img{display:block;width:100%;height:100%;-webkit-user-drag:none;user-select:none}
.h3d-glow{position:absolute;left:8cqw;top:2cqw;width:84cqw;height:84cqw;border-radius:50%;background:radial-gradient(closest-side,var(--glow),color-mix(in srgb,var(--halo) 8%,transparent) 55%,transparent);animation:h3d-glow 5.6s ease-in-out infinite alternate}
@keyframes h3d-glow{from{opacity:.62;transform:scale(.94)}to{opacity:1;transform:scale(1.04)}}
.h3d-shadow{position:absolute;left:33cqw;top:67.5cqw;width:34cqw;height:5cqw;border-radius:50%;background:radial-gradient(closest-side,var(--ms),transparent);animation:h3d-cshadow 4s ease-in-out infinite}
@keyframes h3d-cshadow{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.8);opacity:.55}}
.h3d-stage{position:absolute;inset:0}
.h3d-layer{position:absolute;inset:0}
.h3d-dotty{position:absolute;left:27cqw;top:21cqw;width:46cqw;height:46cqw}
.h3d-dbob{position:absolute;inset:0;transform-origin:50% 94%;animation:h3d-dbob 4s ease-in-out infinite}
@keyframes h3d-dbob{0%,100%{transform:translateY(1.1cqw) scale(1.022,.978)}18%{transform:translateY(-.5cqw) scale(.984,1.018)}50%{transform:translateY(-2.3cqw) scale(1,1)}78%{transform:translateY(-.4cqw) scale(.992,1.01)}}
.h3d-blink{position:absolute;left:23.784%;top:41.755%;width:52.854%;height:25.37%;opacity:0;animation:h3d-blink 9.6s linear infinite}
.h3d-blink img{height:auto}
@keyframes h3d-blink{0%,38%{opacity:0}39%,40.6%{opacity:1}41.6%,88%{opacity:0}89%,90.4%{opacity:1}91.4%,93.2%{opacity:0}94.2%,95.6%{opacity:1}96.6%,100%{opacity:0}}
/* one orbit path shared by all 8 (phase = negative delay), sampled every 3 deg from the 3D projection */
.h3d-orb{position:absolute;left:0;top:0;width:18.696cqw;height:18.696cqw;animation:h3d-orbit 32s linear var(--dl) infinite}
@keyframes h3d-orbit{0.000%{transform:translate(217.437%,364.552%) scale(0.9804)}0.833%{transform:translate(231.233%,364.297%) scale(0.9801)}1.667%{transform:translate(244.961%,363.535%) scale(0.9790)}2.500%{transform:translate(258.554%,362.270%) scale(0.9772)}3.333%{transform:translate(271.948%,360.511%) scale(0.9748)}4.167%{transform:translate(285.078%,358.272%) scale(0.9717)}5.000%{transform:translate(297.883%,355.566%) scale(0.9679)}5.833%{transform:translate(310.308%,352.413%) scale(0.9635)}6.667%{transform:translate(322.297%,348.833%) scale(0.9585)}7.500%{transform:translate(333.803%,344.850%) scale(0.9530)}8.333%{transform:translate(344.779%,340.488%) scale(0.9469)}9.167%{transform:translate(355.186%,335.776%) scale(0.9403)}10.000%{transform:translate(364.991%,330.740%) scale(0.9333)}10.833%{transform:translate(374.161%,325.411%) scale(0.9259)}11.667%{transform:translate(382.674%,319.819%) scale(0.9181)}12.500%{transform:translate(390.509%,313.993%) scale(0.9100)}13.333%{transform:translate(397.652%,307.965%) scale(0.9016)}14.167%{transform:translate(404.093%,301.764%) scale(0.8930)}15.000%{transform:translate(409.825%,295.419%) scale(0.8841)}15.833%{transform:translate(414.848%,288.960%) scale(0.8752)}16.667%{transform:translate(419.164%,282.414%) scale(0.8660)}17.500%{transform:translate(422.779%,275.808%) scale(0.8568)}18.333%{transform:translate(425.702%,269.168%) scale(0.8476)}19.167%{transform:translate(427.944%,262.518%) scale(0.8383)}20.000%{transform:translate(429.521%,255.882%) scale(0.8291)}20.833%{transform:translate(430.449%,249.280%) scale(0.8199)}21.667%{transform:translate(430.745%,242.732%) scale(0.8108)}22.500%{transform:translate(430.431%,236.258%) scale(0.8018)}23.333%{transform:translate(429.527%,229.873%) scale(0.7929)}24.167%{transform:translate(428.055%,223.595%) scale(0.7841)}25.000%{transform:translate(426.038%,217.437%) scale(0.7756)}25.833%{transform:translate(423.499%,211.412%) scale(0.7672)}26.667%{transform:translate(420.461%,205.532%) scale(0.7590)}27.500%{transform:translate(416.948%,199.808%) scale(0.7510)}28.333%{transform:translate(412.985%,194.248%) scale(0.7433)}29.167%{transform:translate(408.593%,188.861%) scale(0.7358)}30.000%{transform:translate(403.796%,183.655%) scale(0.7285)}30.833%{transform:translate(398.617%,178.636%) scale(0.7215)}31.667%{transform:translate(393.077%,173.809%) scale(0.7148)}32.500%{transform:translate(387.199%,169.180%) scale(0.7084)}33.333%{transform:translate(381.003%,164.752%) scale(0.7022)}34.167%{transform:translate(374.510%,160.529%) scale(0.6963)}35.000%{transform:translate(367.740%,156.514%) scale(0.6907)}35.833%{transform:translate(360.711%,152.709%) scale(0.6854)}36.667%{transform:translate(353.443%,149.117%) scale(0.6804)}37.500%{transform:translate(345.953%,145.738%) scale(0.6757)}38.333%{transform:translate(338.258%,142.575%) scale(0.6713)}39.167%{transform:translate(330.375%,139.628%) scale(0.6672)}40.000%{transform:translate(322.321%,136.899%) scale(0.6634)}40.833%{transform:translate(314.109%,134.387%) scale(0.6599)}41.667%{transform:translate(305.756%,132.093%) scale(0.6567)}42.500%{transform:translate(297.277%,130.018%) scale(0.6538)}43.333%{transform:translate(288.684%,128.161%) scale(0.6513)}44.167%{transform:translate(279.991%,126.523%) scale(0.6490)}45.000%{transform:translate(271.212%,125.103%) scale(0.6470)}45.833%{transform:translate(262.360%,123.902%) scale(0.6453)}46.667%{transform:translate(253.448%,122.919%) scale(0.6440)}47.500%{transform:translate(244.487%,122.155%) scale(0.6429)}48.333%{transform:translate(235.490%,121.609%) scale(0.6421)}49.167%{transform:translate(226.470%,121.281%) scale(0.6417)}50.000%{transform:translate(217.437%,121.172%) scale(0.6415)}50.833%{transform:translate(208.404%,121.281%) scale(0.6417)}51.667%{transform:translate(199.383%,121.609%) scale(0.6421)}52.500%{transform:translate(190.387%,122.155%) scale(0.6429)}53.333%{transform:translate(181.426%,122.919%) scale(0.6440)}54.167%{transform:translate(172.513%,123.902%) scale(0.6453)}55.000%{transform:translate(163.661%,125.103%) scale(0.6470)}55.833%{transform:translate(154.883%,126.523%) scale(0.6490)}56.667%{transform:translate(146.190%,128.161%) scale(0.6513)}57.500%{transform:translate(137.597%,130.018%) scale(0.6538)}58.333%{transform:translate(129.117%,132.093%) scale(0.6567)}59.167%{transform:translate(120.764%,134.387%) scale(0.6599)}60.000%{transform:translate(112.553%,136.899%) scale(0.6634)}60.833%{transform:translate(104.498%,139.628%) scale(0.6672)}61.667%{transform:translate(96.615%,142.575%) scale(0.6713)}62.500%{transform:translate(88.921%,145.738%) scale(0.6757)}63.333%{transform:translate(81.431%,149.117%) scale(0.6804)}64.167%{transform:translate(74.162%,152.709%) scale(0.6854)}65.000%{transform:translate(67.134%,156.514%) scale(0.6907)}65.833%{transform:translate(60.364%,160.529%) scale(0.6963)}66.667%{transform:translate(53.871%,164.752%) scale(0.7022)}67.500%{transform:translate(47.675%,169.180%) scale(0.7084)}68.333%{transform:translate(41.797%,173.809%) scale(0.7148)}69.167%{transform:translate(36.257%,178.636%) scale(0.7215)}70.000%{transform:translate(31.078%,183.655%) scale(0.7285)}70.833%{transform:translate(26.281%,188.861%) scale(0.7358)}71.667%{transform:translate(21.889%,194.248%) scale(0.7433)}72.500%{transform:translate(17.925%,199.808%) scale(0.7510)}73.333%{transform:translate(14.413%,205.532%) scale(0.7590)}74.167%{transform:translate(11.375%,211.412%) scale(0.7672)}75.000%{transform:translate(8.836%,217.437%) scale(0.7756)}75.833%{transform:translate(6.819%,223.595%) scale(0.7841)}76.667%{transform:translate(5.347%,229.873%) scale(0.7929)}77.500%{transform:translate(4.443%,236.258%) scale(0.8018)}78.333%{transform:translate(4.128%,242.732%) scale(0.8108)}79.167%{transform:translate(4.425%,249.280%) scale(0.8199)}80.000%{transform:translate(5.353%,255.882%) scale(0.8291)}80.833%{transform:translate(6.929%,262.518%) scale(0.8383)}81.667%{transform:translate(9.172%,269.168%) scale(0.8476)}82.500%{transform:translate(12.095%,275.808%) scale(0.8568)}83.333%{transform:translate(15.709%,282.414%) scale(0.8660)}84.167%{transform:translate(20.025%,288.960%) scale(0.8752)}85.000%{transform:translate(25.048%,295.419%) scale(0.8841)}85.833%{transform:translate(30.781%,301.764%) scale(0.8930)}86.667%{transform:translate(37.221%,307.965%) scale(0.9016)}87.500%{transform:translate(44.364%,313.993%) scale(0.9100)}88.333%{transform:translate(52.200%,319.819%) scale(0.9181)}89.167%{transform:translate(60.712%,325.411%) scale(0.9259)}90.000%{transform:translate(69.883%,330.740%) scale(0.9333)}90.833%{transform:translate(79.687%,335.776%) scale(0.9403)}91.667%{transform:translate(90.095%,340.488%) scale(0.9469)}92.500%{transform:translate(101.071%,344.850%) scale(0.9530)}93.333%{transform:translate(112.576%,348.833%) scale(0.9585)}94.167%{transform:translate(124.566%,352.413%) scale(0.9635)}95.000%{transform:translate(136.990%,355.566%) scale(0.9679)}95.833%{transform:translate(149.796%,358.272%) scale(0.9717)}96.667%{transform:translate(162.926%,360.511%) scale(0.9748)}97.500%{transform:translate(176.319%,362.270%) scale(0.9772)}98.333%{transform:translate(189.913%,363.535%) scale(0.9790)}99.167%{transform:translate(203.641%,364.297%) scale(0.9801)}100.000%{transform:translate(217.437%,364.552%) scale(0.9804)}}
.h3d-front .h3d-vis{animation:h3d-front 32s linear var(--dl) infinite}
.h3d-back .h3d-vis{animation:h3d-back 32s linear var(--dl) infinite}
@keyframes h3d-front{0%,24.99%{opacity:1}25%,74.99%{opacity:0}75%,100%{opacity:1}}
@keyframes h3d-back{0%,24.99%{opacity:0}25%,74.99%{opacity:1}75%,100%{opacity:0}}
.h3d-vis,.h3d-depth,.h3d-bob{position:absolute;inset:0}
.h3d-depth{animation:h3d-depth 32s linear var(--dl) infinite}
.h3d-bob{animation:h3d-bob var(--bd) ease-in-out var(--bdl) infinite alternate}
@keyframes h3d-bob{from{transform:translateY(0) rotate(-2.5deg)}to{transform:translateY(-7%) rotate(2.5deg)}}
.h3d-ms{position:absolute;left:18%;right:18%;bottom:-1%;height:10%;border-radius:50%;background:radial-gradient(closest-side,var(--ms),transparent);animation:h3d-ms var(--bd) ease-in-out var(--bdl) infinite alternate}
@keyframes h3d-ms{from{transform:scale(1);opacity:1}to{transform:scale(.78);opacity:.55}}
.h3d-bob img{position:absolute;inset:0}
.h3d-sharp{animation:h3d-sharp 32s linear var(--dl) infinite}
.h3d-blur{opacity:0;animation:h3d-blur 32s linear var(--dl) infinite}
@keyframes h3d-depth{0%{opacity:1.000}4%{opacity:0.998}8%{opacity:0.989}12%{opacity:0.971}16%{opacity:0.945}20%{opacity:0.911}24%{opacity:0.871}28%{opacity:0.829}32%{opacity:0.787}36%{opacity:0.748}40%{opacity:0.716}44%{opacity:0.693}48%{opacity:0.682}52%{opacity:0.682}56%{opacity:0.693}60%{opacity:0.716}64%{opacity:0.748}68%{opacity:0.787}72%{opacity:0.829}76%{opacity:0.871}80%{opacity:0.911}84%{opacity:0.945}88%{opacity:0.971}92%{opacity:0.989}96%{opacity:0.998}100%{opacity:1.000}}
@keyframes h3d-blur{0%{opacity:0.000}4%{opacity:0.000}8%{opacity:0.000}12%{opacity:0.000}16%{opacity:0.000}20%{opacity:0.000}24%{opacity:0.339}28%{opacity:0.696}32%{opacity:1.000}36%{opacity:1.000}40%{opacity:1.000}44%{opacity:1.000}48%{opacity:1.000}52%{opacity:1.000}56%{opacity:1.000}60%{opacity:1.000}64%{opacity:1.000}68%{opacity:1.000}72%{opacity:0.696}76%{opacity:0.339}80%{opacity:0.000}84%{opacity:0.000}88%{opacity:0.000}92%{opacity:0.000}96%{opacity:0.000}100%{opacity:0.000}}
@keyframes h3d-sharp{0%{opacity:1.000}4%{opacity:1.000}8%{opacity:1.000}12%{opacity:1.000}16%{opacity:1.000}20%{opacity:1.000}24%{opacity:1.000}28%{opacity:1.000}32%{opacity:1.000}36%{opacity:0.551}40%{opacity:0.161}44%{opacity:0.000}48%{opacity:0.000}52%{opacity:0.000}56%{opacity:0.000}60%{opacity:0.161}64%{opacity:0.551}68%{opacity:1.000}72%{opacity:1.000}76%{opacity:1.000}80%{opacity:1.000}84%{opacity:1.000}88%{opacity:1.000}92%{opacity:1.000}96%{opacity:1.000}100%{opacity:1.000}}
.h3d-static{display:none}
.h3d.is-paused,.h3d.is-paused *{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.h3d-glow,.h3d-shadow,.h3d-stage{display:none}.h3d-static{display:block}.h3d-static img{height:auto}}
