:root{--progress: 0}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}html,body,#root{width:100%;height:100%;overflow:hidden;background:#000;cursor:none;user-select:none;-webkit-user-select:none;overscroll-behavior:none}*:focus{outline:none}canvas{position:absolute;top:0;right:0;bottom:0;left:0;cursor:none}.app{position:relative;width:100%;height:100%}.music-btn{position:fixed;top:24px;right:24px;z-index:50;display:flex;align-items:center;gap:8px;padding:10px 20px;border:1px solid rgba(255,255,255,.15);border-radius:100px;background:#ffffff0f;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:#fffc;font-size:13px;font-weight:400;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:all .4s cubic-bezier(.16,1,.3,1)}.music-btn:hover{background:#ffffff1f;border-color:#ffffff4d;transform:translateY(-1px)}.music-btn:active{transform:scale(.97)}.music-btn .dot{width:6px;height:6px;border-radius:50%;background:#fff6;transition:background .3s}.music-btn.playing .dot{background:#4ade80;box-shadow:0 0 8px #4ade8080;animation:pulse-dot 1.5s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.loader{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:32px;background:#0a0a0a;transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1)}.loader.done{opacity:0;transform:scale(1.1);pointer-events:none}.loader-ring{--size: 120px;--stroke: 2px;--radius: calc((var(--size) - var(--stroke)) / 2);--circumference: calc(var(--radius) * 3.14159265 * 2);--dash: calc((var(--progress) * var(--circumference)) / 100);width:var(--size);height:var(--size)}.loader-ring circle{cx:calc(var(--size) / 2);cy:calc(var(--size) / 2);r:var(--radius);stroke-width:var(--stroke);fill:none;stroke-linecap:round}.loader-ring .track{stroke:#ffffff0f}.loader-ring .fill{stroke:#ffffffb3;transform:rotate(-90deg);transform-origin:center;stroke-dasharray:var(--dash) calc(var(--circumference) - var(--dash));transition:stroke-dasharray .4s cubic-bezier(.16,1,.3,1)}.loader-text{color:#ffffff4d;font-size:11px;letter-spacing:.2em;text-transform:uppercase}
