:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--border-color: #30363d;--text-primary: #e6edf3;--text-secondary: #8b949e;--text-muted: #6e7681;--accent-blue: #58a6ff;--accent-green: #3fb950;--accent-orange: #f0883e;--accent-purple: #a371f7;--host-glow: rgba(88, 166, 255, .6);--client-glow: rgba(63, 185, 80, .4)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--bg-primary);color:var(--text-primary)}.login-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;padding:20px}.login-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:40px;max-width:400px;width:100%;text-align:center}.login-card h1{margin-bottom:8px;font-size:24px;font-weight:600}.login-card p{color:var(--text-secondary);margin-bottom:24px}.login-card input{width:100%;padding:12px 16px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-tertiary);color:var(--text-primary);font-size:16px;margin-bottom:16px}.login-card input:focus{outline:none;border-color:var(--accent-blue)}.login-card button{width:100%;padding:12px 16px;border:none;border-radius:8px;background:var(--accent-blue);color:#fff;font-size:16px;font-weight:500;cursor:pointer;transition:opacity .2s}.login-card button:hover{opacity:.9}.login-card button:disabled{opacity:.5;cursor:not-allowed}.login-error{color:#f85149;margin-top:16px;font-size:14px}.login-success{color:var(--accent-green);margin-top:16px;font-size:14px}.dashboard{display:flex;width:100vw;height:100vh;overflow:hidden}.canvas-container{width:100%;height:100%;position:relative;overflow:hidden}.stats-overlay{position:absolute;bottom:16px;left:16px;background:#161b22e6;border:1px solid var(--border-color);border-radius:8px;padding:16px;min-width:200px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.stats-overlay h2{font-size:14px;font-weight:600;margin-bottom:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.stat-row{display:flex;justify-content:space-between;padding:4px 0}.stat-label{color:var(--text-secondary);font-size:13px}.stat-value{font-weight:500;font-size:13px}.stat-value.connected{color:var(--accent-green)}.stat-value.disconnected{color:var(--text-muted)}.session-panel{width:320px;background:var(--bg-secondary);border-left:1px solid var(--border-color);overflow-y:auto;padding:16px}.session-panel.empty{display:flex;align-items:center;justify-content:center;color:var(--text-secondary)}.session-panel h2{font-size:16px;font-weight:600;margin-bottom:16px}.session-panel h3{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:16px 0 8px}.session-id{font-family:SF Mono,Monaco,monospace;font-size:12px;color:var(--text-secondary);word-break:break-all;margin-bottom:16px;padding:8px;background:var(--bg-tertiary);border-radius:6px}.client-list{display:flex;flex-direction:column;gap:8px}.client-item{display:flex;align-items:center;gap:8px;padding:8px;background:var(--bg-tertiary);border-radius:6px}.client-status{width:8px;height:8px;border-radius:50%}.client-status.authenticated{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.client-status.pending{background:var(--accent-orange)}.client-info{flex:1;font-size:13px}.client-info .virtual-ip{font-family:SF Mono,Monaco,monospace;color:var(--text-secondary)}.packet-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.packet-stat{padding:12px;background:var(--bg-tertiary);border-radius:6px;text-align:center}.packet-stat .direction{font-size:11px;color:var(--text-secondary);margin-bottom:4px}.packet-stat .count{font-size:18px;font-weight:600}.packet-stat.host-to-client .count{color:var(--accent-orange)}.packet-stat.client-to-host .count{color:var(--accent-green)}.session-list{display:flex;flex-direction:column;gap:8px}.session-card{padding:12px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:8px;cursor:pointer;transition:border-color .2s}.session-card:hover{border-color:var(--accent-blue)}.session-card.selected{border-color:var(--accent-blue);background:#58a6ff1a}.session-card-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.host-indicator{width:10px;height:10px;border-radius:50%;background:var(--accent-blue);box-shadow:0 0 8px var(--host-glow)}.host-indicator.disconnected{background:var(--text-muted);box-shadow:none}.session-card-id{font-family:SF Mono,Monaco,monospace;font-size:11px;color:var(--text-secondary)}.session-card-stats{display:flex;gap:16px;font-size:12px;color:var(--text-secondary)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:12px;padding:24px;max-width:480px;width:90%}.modal h2{margin-bottom:8px}.modal p{color:var(--text-secondary);margin-bottom:16px;font-size:14px}.modal input{width:100%;padding:12px 16px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-tertiary);color:var(--text-primary);font-family:SF Mono,Monaco,monospace;font-size:14px;margin-bottom:16px}.modal-buttons{display:flex;gap:8px;justify-content:flex-end}.modal-buttons button{padding:10px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer}.modal-buttons button.primary{background:var(--accent-blue);color:#fff}.modal-buttons button.secondary{background:var(--bg-tertiary);color:var(--text-primary)}.connection-status{position:absolute;top:16px;right:16px;display:flex;align-items:center;gap:8px;padding:8px 12px;background:#161b22e6;border:1px solid var(--border-color);border-radius:6px;font-size:12px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.connection-dot{width:8px;height:8px;border-radius:50%}.connection-dot.connected{background:var(--accent-green);box-shadow:0 0 8px var(--accent-green)}.connection-dot.connecting{background:var(--accent-orange);animation:pulse 1s infinite}.connection-dot.disconnected{background:#f85149}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);text-align:center;padding:40px}.empty-state svg{width:64px;height:64px;margin-bottom:16px;opacity:.5}.empty-state h3{margin-bottom:8px;color:var(--text-primary)}
