*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Roboto,sans-serif;background:#f8fafc;color:#0f172a}body.dark,body.dark #root{background:#0f172a;color:#e2e8f0}.app{height:100vh;display:flex;flex-direction:column}.app-header{padding:12px 20px;border-bottom:1px solid rgba(0,0,0,.08);display:flex;align-items:center;justify-content:space-between;background:#fff9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}body.dark .app-header{background:#0f172a99;border-color:#ffffff14}.app-title{font-weight:600;font-size:15px}.app-status{font-size:12px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}.app-status-sep{opacity:.5}.app-mode-badge{font-weight:500;padding:1px 6px;border-radius:4px;cursor:help}.app-mode-p2p{color:#15803d;background:#22c55e1a}body.dark .app-mode-p2p{color:#86efac;background:#22c55e2e}.app-mode-relay{color:#b45309;background:#f59e0b1f}body.dark .app-mode-relay{color:#fcd34d;background:#f59e0b2e}.dot{width:8px;height:8px;border-radius:50%;background:#94a3b8}.dot-gray{background:#94a3b8}.dot-green{background:#22c55e}.dot-red{background:#ef4444}.dot-amber-pulse{background:#f59e0b;animation:dot-pulse 1.2s ease-in-out infinite}.dot-red-pulse{background:#ef4444;animation:dot-pulse 1.2s ease-in-out infinite}@keyframes dot-pulse{0%,to{opacity:1}50%{opacity:.35}}.center-screen{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;gap:12px}.center-screen h2{margin:0;font-weight:600}.center-screen p{margin:0;color:#64748b;font-size:14px;max-width:500px}.center-screen a{color:#0891b2}.chat{flex:1;display:flex;flex-direction:column;min-height:0}.peers-bar{padding:8px 20px;background:#0891b20f;font-size:12px;color:#475569;display:flex;gap:8px;flex-wrap:wrap}body.dark .peers-bar{color:#94a3b8;background:#0891b21f}.peer-pill{padding:2px 8px;background:#0891b226;border-radius:999px;font-family:monospace}.peer-pill.peer-ok{background:#22c55e2e;color:#166534}body.dark .peer-pill.peer-ok{color:#86efac}.peer-pill.peer-pending{background:#f59e0b2e;color:#92400e}body.dark .peer-pill.peer-pending{color:#fcd34d}.messages{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:8px}.msg{max-width:70%;padding:8px 12px;border-radius:12px;word-break:break-word;font-size:14px;line-height:1.4}.msg.from-me{align-self:flex-end;background:#0891b2;color:#fff}.msg.from-other{align-self:flex-start;background:#0000000f}body.dark .msg.from-other{background:#ffffff14}.msg img{max-width:100%;border-radius:8px;display:block}.msg-meta{font-size:10px;opacity:.6;margin-top:4px}.composer{padding:12px 20px;border-top:1px solid rgba(0,0,0,.08);display:flex;gap:8px;background:#fff9}body.dark .composer{background:#0f172a99;border-color:#ffffff14}.composer textarea{flex:1;min-height:40px;max-height:120px;padding:8px 12px;border:1px solid rgba(0,0,0,.12);border-radius:8px;resize:none;font-size:14px;font-family:inherit;background:#fff;color:inherit}body.dark .composer textarea{background:#1e293b;border-color:#ffffff1f;color:inherit}.composer button{padding:0 16px;border:none;background:#0891b2;color:#fff;border-radius:8px;cursor:pointer;font-weight:500;font-size:14px}.composer button:disabled{background:#94a3b8;cursor:not-allowed}.hint{font-size:11px;color:#94a3b8;padding:0 20px 8px}.composer textarea:disabled{background:#0000000a;color:#94a3b8;cursor:not-allowed}body.dark .composer textarea:disabled{background:#ffffff0a;color:#64748b}.retry-btn{margin-top:16px;padding:8px 24px;background:#0891b2;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer}.retry-btn:hover{background:#0e7490}.diag-fab{position:fixed;right:16px;bottom:16px;width:44px;height:44px;border:none;border-radius:50%;background:#0891b2;color:#fff;font-size:18px;cursor:pointer;box-shadow:0 2px 8px #0003;z-index:100}.diag-fab:hover{background:#0e7490}.diag-panel{position:fixed;right:16px;bottom:16px;width:380px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:12px;box-shadow:0 8px 24px #00000026;z-index:100;display:flex;flex-direction:column;overflow:hidden;font-size:12px}body.dark .diag-panel{background:#1e293b;border-color:#ffffff1f}.diag-header{padding:10px 14px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,.08);font-weight:600;font-size:13px}body.dark .diag-header{border-color:#ffffff14}.diag-close{background:none;border:none;font-size:20px;line-height:1;cursor:pointer;color:inherit;opacity:.6;padding:0 4px}.diag-close:hover{opacity:1}.diag-section{padding:10px 14px;border-bottom:1px solid rgba(0,0,0,.06)}body.dark .diag-section{border-color:#ffffff0f}.diag-section:last-child{border-bottom:none;min-height:0;flex:1;display:flex;flex-direction:column}.diag-section-title{font-weight:600;display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.diag-mini-btn{background:#0891b21f;border:none;border-radius:6px;padding:2px 8px;font-size:11px;cursor:pointer;color:#0891b2}.diag-mini-btn:hover:not(:disabled){background:#0891b238}.diag-mini-btn:disabled{opacity:.5;cursor:not-allowed}.diag-row{display:flex;gap:8px;margin:2px 0}.diag-key{color:#64748b;min-width:50px}body.dark .diag-key{color:#94a3b8}.diag-val{flex:1;word-break:break-all}.diag-val.mono{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.diag-val.small{font-size:11px}.diag-peer{margin:8px 0;padding:6px;background:#00000008;border-radius:6px}body.dark .diag-peer{background:#ffffff0a}.diag-mode{font-weight:500}.diag-mode-p2p{color:#15803d}body.dark .diag-mode-p2p{color:#86efac}.diag-mode-relay{color:#b45309}body.dark .diag-mode-relay{color:#fcd34d}.diag-mode-raw{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-weight:400;font-size:10px;opacity:.6}.diag-logs{flex:1;overflow-y:auto;margin-top:4px;max-height:240px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11px}.diag-log-line{display:flex;gap:6px;padding:2px 0;border-bottom:1px dashed rgba(0,0,0,.04)}body.dark .diag-log-line{border-color:#ffffff0a}.diag-log-ts{color:#94a3b8;white-space:nowrap}.diag-log-cat{font-weight:600}.diag-log-cat-signaling{color:#0891b2}.diag-log-cat-webrtc{color:#16a34a}.diag-log-cat-ice{color:#f59e0b}.diag-log-cat-state{color:#a855f7}.diag-log-msg{word-break:break-all}.diag-copy-hint{font-size:11px;color:#16a34a;padding:4px 0}.diag-hint{font-size:11px;color:#94a3b8;padding:4px 0}
