*{margin:0;padding:0;box-sizing:border-box}:root{--bg-primary: #1a1a2e;--bg-secondary: #16213e;--text-primary: #eaeaea;--text-secondary: #a0a0a0;--accent-primary: #0f3460;--accent-secondary: #e94560;--success: #4ade80;--error: #f87171}html,body{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:linear-gradient(135deg,var(--bg-primary) 0%,var(--bg-secondary) 100%);color:var(--text-primary);-webkit-font-smoothing:antialiased}#root{min-height:100%;display:flex}.container{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:5vw;gap:3rem;text-align:center}.header{display:flex;flex-direction:column;gap:.5rem}.title{font-size:clamp(2rem,8vw,3.5rem);font-weight:700;background:linear-gradient(135deg,var(--text-primary) 0%,var(--accent-secondary) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.subtitle{font-size:clamp(.875rem,3vw,1.125rem);color:var(--text-secondary)}.status{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:#ffffff0d;border-radius:2rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.status-dot{width:.625rem;height:.625rem;border-radius:50%;transition:background-color .3s ease}.status-dot.connected{background-color:var(--success);box-shadow:0 0 .5rem var(--success)}.status-dot.disconnected{background-color:var(--error);box-shadow:0 0 .5rem var(--error)}.status-text{font-size:clamp(.75rem,2.5vw,.875rem);color:var(--text-secondary)}.actions{display:flex;flex-direction:column;gap:1rem;width:100%;max-width:20rem}.btn{padding:1rem 2rem;font-size:clamp(1rem,3.5vw,1.125rem);font-weight:600;border:none;border-radius:.75rem;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.btn:active{transform:scale(.98)}.btn-primary{background:linear-gradient(135deg,var(--accent-secondary) 0%,#ff6b6b 100%);color:#fff;box-shadow:0 .25rem 1rem #e945604d}.btn-primary:hover{box-shadow:0 .375rem 1.5rem #e9456066}.btn-secondary{background:#ffffff1a;color:var(--text-primary);border:.125rem solid rgba(255,255,255,.2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.btn-secondary:hover{background:#ffffff26;border-color:#ffffff4d}.footer{margin-top:auto;padding-top:2rem}.footer p{font-size:clamp(.75rem,2.5vw,.875rem);color:var(--text-secondary);opacity:.7}@media (min-width: 48rem){.actions{flex-direction:row;max-width:none;justify-content:center}.btn{min-width:12rem}.join-actions{flex-direction:row}}.main-content{display:flex;flex-direction:column;align-items:center;gap:1.5rem;width:100%;max-width:24rem}.room-info{display:flex;flex-direction:column;align-items:center;gap:1.5rem;width:100%}.room-code-container{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1.5rem 2rem;background:#ffffff0d;border-radius:1rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.room-code-label{font-size:clamp(.75rem,2.5vw,.875rem);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.1em}.room-code{font-size:clamp(2.5rem,10vw,4rem);font-weight:700;font-family:SF Mono,Fira Code,monospace;letter-spacing:.25em;background:linear-gradient(135deg,var(--text-primary) 0%,var(--accent-secondary) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.room-status{font-size:clamp(.875rem,3vw,1rem);color:var(--text-secondary)}.role-badge{padding:.5rem 1rem;background:#ffffff1a;border-radius:2rem;font-size:clamp(.75rem,2.5vw,.875rem)}.join-form{display:flex;flex-direction:column;align-items:center;gap:1rem;width:100%}.join-input{width:100%;max-width:12rem;padding:1rem;font-size:clamp(1.5rem,6vw,2rem);font-weight:600;font-family:SF Mono,Fira Code,monospace;text-align:center;letter-spacing:.25em;text-transform:uppercase;background:#ffffff0d;border:.125rem solid rgba(255,255,255,.2);border-radius:.75rem;color:var(--text-primary);outline:none;transition:border-color .2s ease}.join-input::placeholder{font-size:clamp(.75rem,2.5vw,.875rem);letter-spacing:normal;text-transform:none;color:var(--text-secondary)}.join-input:focus{border-color:var(--accent-secondary)}.join-actions{display:flex;flex-direction:column;gap:.75rem;width:100%}.join-actions .btn{width:100%}.error-message{padding:.75rem 1.25rem;background:#f8717126;border:.0625rem solid rgba(248,113,113,.3);border-radius:.5rem;color:var(--error);font-size:clamp(.75rem,2.5vw,.875rem)}.btn:disabled{opacity:.5;cursor:not-allowed}.file-transfer-ui{display:flex;flex-direction:column;align-items:center;gap:.5rem;width:100%}.file-input{display:none}.file-hint{font-size:clamp(.75rem,2.5vw,.875rem);color:var(--text-secondary);opacity:.8}.progress-container{width:100%;max-width:20rem;height:.5rem;background:#ffffff1a;border-radius:1rem;overflow:hidden;margin:1rem 0;position:relative}.progress-bar{height:100%;background:var(--success);transition:width .3s ease}.progress-text{position:absolute;top:-1.5rem;right:0;font-size:.75rem;color:var(--text-secondary)}.webrtc-status{display:flex;align-items:center;gap:.375rem;padding:.375rem .75rem;background:#ffffff08;border-radius:1rem;font-size:clamp(.625rem,2vw,.75rem);color:var(--text-secondary)}.qr-code-container{display:flex;flex-direction:column;align-items:center;gap:.5rem;background:#fff;padding:1rem;border-radius:1rem;margin:1rem 0;box-shadow:0 .5rem 1.5rem #0003}.qr-code-image{width:100%;max-width:200px;height:auto;display:block}.qr-hint{font-size:.75rem;color:#333;margin-top:.25rem;font-weight:600}.scanner-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#000000e6;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;padding:1rem}.scanner-box{width:100%;max-width:400px;background:#000;border-radius:1rem;overflow:hidden;box-shadow:0 0 2rem #00000080}.scanner-actions{display:flex;gap:.75rem;width:100%;justify-content:center;margin-top:1rem}#reader{border:none!important}#reader video{object-fit:cover;border-radius:.5rem}#reader__scan_region img{display:none}.wake-lock-status{font-size:clamp(.625rem,2vw,.75rem);color:var(--text-secondary);opacity:.7;text-align:center;animation:wakeLockFadeIn .4s ease-out}@keyframes wakeLockFadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:.7;transform:translateY(0)}}
