/* Quiet, tactile details in AllTune's existing room accent. */
#lobby{overflow-y:auto;padding:24px 0}
#lobby .lcard{margin-block:auto}
.bubble-field{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1}
.tone-bubble{position:absolute;left:var(--x);top:var(--y);width:var(--size);height:var(--size);min-width:44px;min-height:44px;border:0;background:none;padding:5px;cursor:pointer;pointer-events:auto;border-radius:50%;color:var(--accent);animation:bubble-float var(--drift) ease-in-out infinite alternate;animation-delay:var(--delay);-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.tone-bubble::before{content:'';position:absolute;inset:5px;border-radius:50%;border:1px solid rgba(var(--argb),.32);background:radial-gradient(circle at 30% 24%,rgba(255,255,255,.28),rgba(var(--argb),.07) 23%,rgba(var(--argb),.02) 55%,rgba(var(--argb),.16));box-shadow:inset -4px -5px 14px rgba(var(--argb),.12),0 0 22px rgba(var(--argb),.06);transition:border-color .3s,box-shadow .3s}
.tone-bubble::after{content:'';position:absolute;inset:12%;border-radius:50%;border-top:1px solid rgba(255,255,255,.26);transform:rotate(-35deg);pointer-events:none}
.bubble-note{position:relative;z-index:1;display:grid;place-items:center;width:100%;height:100%;font-family:Arial,sans-serif;font-size:clamp(16px,calc(var(--size)*.34),25px);line-height:1;color:rgba(var(--argb),.85);text-shadow:0 0 10px rgba(var(--argb),.4);pointer-events:none}
.tone-bubble.popped .bubble-note{animation:bubble-pop .7s ease-out both}
.atmosphere-still .tone-bubble.popped .bubble-note{animation:none}
@media(prefers-reduced-motion:reduce){.tone-bubble.popped .bubble-note{animation:none}}
.tone-bubble:hover::before,.tone-bubble:focus-visible::before{border-color:rgba(var(--argb),.8);box-shadow:inset -4px -5px 14px rgba(var(--argb),.25),0 0 30px rgba(var(--argb),.2)}
.tone-bubble:focus-visible{outline:1px solid var(--accent);outline-offset:4px;animation-play-state:paused}
.tone-bubble.popped::before{animation:bubble-pop .7s ease-out both}
.tone-bubble.popped::after{animation:bubble-ripple .7s ease-out both}
@keyframes bubble-float{from{transform:translate3d(var(--dx1,-5px),var(--dy1,12px),0)}to{transform:translate3d(var(--dx2,8px),var(--dy2,-14px),0)}}
@keyframes bubble-pop{0%{transform:scale(1);opacity:1}35%{transform:scale(1.28);opacity:0}65%{transform:scale(.65);opacity:0}100%{transform:scale(1);opacity:1}}
@keyframes bubble-ripple{0%{transform:scale(.8);opacity:.8;border:1px solid currentColor}100%{transform:scale(1.9);opacity:0;border:1px solid currentColor}}
.atmosphere-controls{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:20px}
.atmosphere-toggle{font:9px 'Space Mono',monospace;letter-spacing:1.2px;color:var(--text2);border:1px solid var(--border2);background:rgba(6,6,18,.75);padding:8px 10px;min-height:36px;cursor:pointer;border-radius:20px;transition:color .2s,border-color .2s}
.atmosphere-toggle:hover,.atmosphere-toggle:focus-visible{color:var(--accent);border-color:var(--accent)}
.atmosphere-toggle[aria-pressed=false]{color:var(--text3)}
.viswrap .atmosphere-controls{position:absolute;left:14px;top:12px;z-index:3;margin:0;gap:6px}
.viswrap .atmosphere-toggle{font-size:8px;letter-spacing:.6px;min-height:32px;padding:6px 9px}
.bubble-caption{position:absolute;right:16px;bottom:16px;font:8px 'Space Mono',monospace;letter-spacing:2px;color:var(--text3);pointer-events:none;z-index:2}
.bubbles-off .bubble-field,.bubbles-off .bubble-caption{display:none}
.atmosphere-still .tone-bubble,.atmosphere-hidden .tone-bubble{animation-play-state:paused}
.atmosphere-still .tone-bubble.popped::before,.atmosphere-still .tone-bubble.popped::after{animation:none}
@media(max-width:700px){.viswrap .atmosphere-controls{left:8px;top:6px}.viswrap .bubble-caption{display:none}.viswrap .tone-bubble{opacity:.65}.viswrap .tone-bubble:nth-child(n+4){display:none}}
@media(prefers-reduced-motion:reduce){.tone-bubble,.tone-bubble.popped::before,.tone-bubble.popped::after{animation:none}.rblob,.rgrid,.ldot{animation:none!important}.viswrap{transition:none}}
