:root{--bg: #0f1115;--bg-elev: #171a21;--bg-card: #1d212b;--border: #2a2f3c;--text: #e8eaf0;--text-dim: #9aa1b2;--accent: #7c6cff;--accent-2: #4f8cff;--danger: #ff5470;--ok: #3ddc97;--radius: 14px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Inter,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none}.app{height:100%;display:flex;flex-direction:column}button{font-family:inherit;cursor:pointer}input{font-family:inherit;background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:10px;padding:12px 14px;font-size:15px;outline:none;transition:border-color .15s}input:focus{border-color:var(--accent)}.btn{border:none;border-radius:10px;padding:10px 16px;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:8px;justify-content:center;transition:transform .1s,opacity .15s,background .15s}.btn:active{transform:scale(.97)}.btn.primary{background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#fff}.btn.primary:disabled{opacity:.5;cursor:default}.btn.ghost{background:transparent;color:var(--text-dim);border:1px solid var(--border)}.btn.ghost:hover{color:var(--text);border-color:var(--text-dim)}.btn.big{padding:14px;font-size:16px;width:100%}.btn.small{padding:7px 12px;font-size:13px}.join{flex:1;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(600px 400px at 20% 0%,rgba(124,108,255,.14),transparent),radial-gradient(500px 350px at 90% 100%,rgba(79,140,255,.12),transparent),var(--bg)}.join-card{width:min(420px,100%);background:var(--bg-card);border:1px solid var(--border);border-radius:22px;padding:36px 32px;text-align:center;box-shadow:0 24px 60px #00000073}.join-logo{margin-bottom:8px}.join-card h1{margin:4px 0 6px;font-size:30px;letter-spacing:-.5px}.join-sub{margin:0 0 26px;color:var(--text-dim);font-size:14px;line-height:1.45}.field{display:block;text-align:left;margin-bottom:16px}.field>span{display:block;font-size:13px;color:var(--text-dim);margin-bottom:7px;font-weight:600}.field input{width:100%}.room-row{display:flex;gap:8px}.room-row input{flex:1;min-width:0;text-transform:lowercase}.join-hint{margin:18px 0 0;font-size:12.5px;color:var(--text-dim)}.room{height:100%;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr auto;grid-template-areas:"header header" "grid   chat" "controls controls"}.room-header{grid-area:header;display:flex;align-items:center;justify-content:space-between;padding:12px 18px}.room-title{display:flex;align-items:center;gap:12px}.room-code{font-family:ui-monospace,SF Mono,Menlo,monospace;background:var(--bg-card);border:1px solid var(--border);padding:6px 12px;border-radius:9px;font-size:14px;letter-spacing:1px}.room-count{color:var(--text-dim);font-size:13px}.grid{grid-area:grid;display:grid;gap:10px;padding:0 18px 10px;min-height:0}.grid.count-1{grid-template-columns:1fr}.grid.count-2{grid-template-columns:1fr 1fr}.grid.count-3{grid-template-columns:repeat(3,1fr)}.grid.count-4{grid-template-columns:repeat(2,1fr);grid-template-rows:1fr 1fr}.tile{position:relative;background:var(--bg-elev);border-radius:var(--radius);overflow:hidden;min-height:0;border:1px solid var(--border)}.tile video{width:100%;height:100%;object-fit:cover;display:block;background:var(--bg-elev)}.tile video.mirror{transform:scaleX(-1)}.tile.connecting video{visibility:hidden}.tile-avatar{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:clamp(28px,6vw,52px);font-weight:700;color:#fff;background:linear-gradient(135deg,#7c6cff59,#4f8cff40)}.tile-bar{position:absolute;left:10px;bottom:10px;right:10px;display:flex;align-items:center;gap:8px;pointer-events:none}.tile-name{background:#0a0c10b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:4px 10px;border-radius:8px;font-size:13px;font-weight:600}.tile-camoff{color:var(--danger);background:#0a0c10b8;border-radius:6px;padding:3px}.tile-state{color:var(--text-dim);font-size:12px}.controls{grid-area:controls;display:flex;justify-content:center;gap:14px;padding:14px 0 max(14px,env(safe-area-inset-bottom))}.ctrl{width:54px;height:54px;border-radius:50%;border:none;background:var(--bg-card);color:var(--text);display:inline-flex;align-items:center;justify-content:center;position:relative;transition:background .15s,transform .1s;border:1px solid var(--border)}.ctrl:hover{background:var(--bg-elev)}.ctrl:active{transform:scale(.94)}.ctrl.off{background:#ff547029;color:var(--danger);border-color:#ff547066}.ctrl.chat.active{background:#7c6cff33;border-color:var(--accent)}.ctrl.leave{background:var(--danger);color:#fff;border:none}.badge{position:absolute;top:-4px;right:-4px;min-width:19px;height:19px;border-radius:10px;background:var(--danger);color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 5px}.chat{grid-area:chat;width:340px;background:var(--bg-elev);border-left:1px solid var(--border);display:none;flex-direction:column;min-height:0}.chat.open{display:flex}.chat-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border)}.chat-header h2{margin:0;font-size:16px}.chat-list{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px}.chat-empty{color:var(--text-dim);font-size:13.5px;text-align:center;margin-top:30px}.msg{max-width:88%;display:flex;flex-direction:column;gap:4px}.msg.mine{align-self:flex-end;align-items:flex-end}.msg-meta{font-size:11.5px;color:var(--text-dim);display:flex;gap:6px}.msg-bubble{background:var(--bg-card);border:1px solid var(--border);padding:9px 12px;border-radius:12px;font-size:14px;line-height:1.4;word-break:break-word;white-space:pre-wrap}.msg.mine .msg-bubble{background:linear-gradient(135deg,#7c6cff47,#4f8cff38);border-color:#7c6cff66}.msg-image{max-width:220px;max-height:180px;border-radius:12px;border:1px solid var(--border);cursor:zoom-in;object-fit:cover}.chat-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--border)}.chat-input input{flex:1;min-width:0;padding:10px 12px}.btn.send{padding:10px 12px}.btn.attach{padding:10px}.viewer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#050609e0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}.viewer img{max-width:100%;max-height:100%;border-radius:12px;box-shadow:0 20px 80px #0009}.viewer-close{position:absolute;top:18px;right:18px;font-size:16px}.toast{position:fixed;left:50%;bottom:92px;transform:translate(-50%);background:#14171ff2;border:1px solid var(--border);color:var(--text);padding:11px 18px;border-radius:12px;font-size:14px;z-index:60;box-shadow:0 10px 40px #00000080;animation:toast-in .2s ease-out;white-space:nowrap;max-width:calc(100vw - 32px);overflow:hidden;text-overflow:ellipsis}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}@media (max-width: 720px){.room{grid-template-areas:"header" "grid" "controls";grid-template-columns:1fr;grid-template-rows:auto 1fr auto}.chat.open{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;width:100%;border-left:none}.grid.count-3{grid-template-columns:1fr;grid-template-rows:repeat(3,1fr)}.grid.count-2{grid-template-columns:1fr;grid-template-rows:repeat(2,1fr)}.grid.count-4{grid-template-columns:1fr 1fr}.ctrl{width:50px;height:50px}}
