body{margin:0;overflow:hidden;background-color:#000;font-family:Cormorant Garamond,serif}canvas{display:block;width:100vw;height:100vh}#blocker{position:absolute;width:100%;height:100%;background-color:#000;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;z-index:10;cursor:pointer;transition:opacity 2s ease-in-out}.play-text{font-size:42px;font-weight:300;letter-spacing:4px;text-transform:uppercase;margin:0;animation:pulseOpacity 3s infinite alternate}.controls-text{font-size:20px;font-weight:300;letter-spacing:2px;opacity:.6;font-style:italic;margin:0}.back-btn{color:#fff;text-decoration:none;font-size:18px;letter-spacing:2px;text-transform:uppercase;border-bottom:1px solid rgba(255,255,255,.3);padding-bottom:4px;transition:all .4s ease;pointer-events:auto}.back-btn:hover{border-bottom-color:#fff;opacity:.8}@keyframes pulseOpacity{0%{opacity:.7}to{opacity:1}}@media (max-width: 768px){.desktop-only{display:none!important}.mobile-only{display:block!important}.play-text{font-size:32px}.controls-text{font-size:16px}}#metadata-banner{position:absolute;top:0;left:0;width:100%;background:linear-gradient(to right,#000000f2,#000000b3 40%,#0000);color:#fff;padding:25px 50px;border-bottom:1px solid;border-image:linear-gradient(to right,#ffffff4d,#fff0) 1;pointer-events:none;opacity:0;transition:opacity .5s ease;z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);box-sizing:border-box;display:flex;align-items:baseline;gap:24px}#metadata-filename{font-size:24px;letter-spacing:2px;margin:0}#metadata-date{font-size:16px;font-style:italic;opacity:.7;margin:0}#zone_joystick_left,#zone_joystick_right{touch-action:none;-webkit-user-select:none;user-select:none}#instructions p{margin-top:0}#crosshair{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#ffffff80;font-size:24px;pointer-events:none;z-index:5}#stars{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;z-index:-1}.star{position:absolute;background-color:#fffacd;border-radius:50%;animation:twinkle var(--duration) infinite ease-in-out alternate;animation-delay:var(--delay)}@keyframes twinkle{0%{opacity:.2;transform:scale(.8);box-shadow:0 0 2px #fffacd33}to{opacity:1;transform:scale(1.2);box-shadow:0 0 8px 2px #fffacdcc}}
