:root{--bg: #0b0e14;--bg-elev: #121722;--bg-elev2: #171d2b;--border: #232b3b;--text: #dbe3f0;--muted: #8a97ad;--accent: #5b8cff;--accent-2: #37d39a;--danger: #ff6b6b;--warn: #f5b74e}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font:13px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}.app{display:flex;height:100vh}.sidebar{width:220px;flex:0 0 220px;background:var(--bg-elev);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:14px 10px}.brand{display:flex;align-items:center;gap:8px;font-weight:600;font-size:15px;padding:6px 8px 16px}.brand-dot{width:10px;height:10px;border-radius:50%;background:var(--accent-2);box-shadow:0 0 10px var(--accent-2)}nav{display:flex;flex-direction:column;gap:2px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--muted);text-decoration:none;font-weight:500}.nav-item:hover{background:var(--bg-elev2);color:var(--text)}.nav-item.active{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--text)}.nav-icon{width:16px;text-align:center;opacity:.9}.sidebar-foot{margin-top:auto;color:var(--muted);font-size:11px;padding:8px;opacity:.6}.content{flex:1;overflow:auto;padding:24px 28px}.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.page-head h1{font-size:20px;margin:0;font-weight:650}.page-head .sub{color:var(--muted);margin-top:2px}.card{background:var(--bg-elev);border:1px solid var(--border);border-radius:12px;padding:16px}.grid{display:grid;gap:14px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 6px;border-bottom:1px solid var(--border)}th:nth-child(7),td:nth-child(7),th:nth-child(8),td:nth-child(8){width:1%;white-space:nowrap}th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.04em}tr:hover td{background:var(--bg-elev2)}button,.btn{background:var(--bg-elev2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:7px 12px;font:inherit;cursor:pointer}button:hover{border-color:var(--accent)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover{filter:brightness(1.08)}button.danger{color:var(--danger)}button:disabled{opacity:.5;cursor:not-allowed}button.icon-btn{padding:5px 0;width:30px;text-align:center;font-size:14px;line-height:1}button.icon-btn:hover{background:var(--accent);border-color:var(--accent);color:#fff}button.icon-btn.danger:hover{background:var(--danger);border-color:var(--danger);color:#fff}button.icon-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}td.actions{display:flex;gap:3px;justify-content:flex-end;align-items:center}.actions .act-sep{width:1px;align-self:stretch;margin:2px 3px;background:var(--border)}button.toggle-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:82px;padding:5px 10px;font-size:12px;font-weight:600}button.toggle-btn.start{color:var(--accent-2);border-color:color-mix(in srgb,var(--accent-2) 45%,var(--border))}button.toggle-btn.start:hover{background:var(--accent-2);border-color:var(--accent-2);color:#08120d}button.toggle-btn.stop{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,var(--border))}button.toggle-btn.stop:hover{background:var(--danger);border-color:var(--danger);color:#fff}.toggle-placeholder{min-width:82px;text-align:center;color:var(--muted);font-size:12px}.menu-wrap{position:relative;display:inline-block}.menu-panel{position:absolute;right:0;min-width:246px;z-index:40;background:var(--bg-elev2);border:1px solid var(--border);border-radius:10px;padding:5px;box-shadow:0 14px 36px #00000080}.menu-panel.down{top:calc(100% + 6px)}.menu-panel.up{bottom:calc(100% + 6px)}.menu-sec{color:var(--muted);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:7px 10px 4px}button.menu-item{display:flex;align-items:center;gap:9px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:7px;padding:7px 10px;color:var(--text)}button.menu-item:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 20%,transparent);border-color:transparent}button.menu-item:disabled{opacity:.4}button.menu-item.danger{color:var(--danger)}button.menu-item.danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 18%,transparent)}.menu-item .mi-icon{width:16px;text-align:center;opacity:.85;flex:0 0 16px}.menu-sep{height:1px;background:var(--border);margin:5px 4px}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid var(--border)}.badge.ok{color:var(--accent-2);border-color:color-mix(in srgb,var(--accent-2) 40%,var(--border))}.badge.warn{color:var(--warn)}.badge.off{color:var(--muted)}.badge.run{color:var(--accent)}label{display:block;color:var(--muted);font-size:11px;margin-bottom:4px;font-weight:600}input,select,textarea{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:7px 9px;font:inherit}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}.field{margin-bottom:12px}.row{display:flex;gap:12px}.row>*{flex:1}.fp-group{border:1px solid var(--border);border-radius:10px;margin-bottom:12px;overflow:hidden}.fp-group>summary{padding:10px 14px;background:var(--bg-elev2);cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none}.fp-group .fp-body{padding:14px;display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.toolbar{display:flex;gap:8px;align-items:center}.spacer{flex:1}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.muted{color:var(--muted)}.empty{color:var(--muted);text-align:center;padding:40px}.log{background:#05070c;border:1px solid var(--border);border-radius:8px;padding:10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;white-space:pre-wrap;max-height:280px;overflow:auto}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;padding:20px;width:min(760px,92vw);max-height:88vh;overflow:auto}.totp{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.totp:hover .totp-code{color:var(--accent)}.totp-code{font-size:14px;letter-spacing:.06em;font-weight:600}.totp-left{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.egress{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.egress:hover .mono{color:var(--accent)}.egress-geo{color:var(--muted);font-size:11px}.geo-wrap{position:relative;display:inline-block}.geo-trigger{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.geo-trigger:hover .mono{color:var(--accent)}.geo-caret{color:var(--muted);font-size:10px}.picker{position:absolute;left:0;z-index:40;width:360px;padding:8px;background:var(--bg-elev2);border:1px solid var(--border);border-radius:10px;box-shadow:0 14px 36px #00000080}.picker.down{top:calc(100% + 6px)}.picker.up{bottom:calc(100% + 6px)}.picker-head{font-size:11px;color:var(--muted);padding:4px 6px 8px;border-bottom:1px solid var(--border);margin-bottom:6px}.picker-panes{display:grid;grid-template-columns:148px 1fr;gap:8px}.picker-pane{max-height:232px;overflow:auto}button.picker-item{display:flex;justify-content:space-between;gap:8px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:6px;padding:6px 8px;color:var(--text)}button.picker-item:hover{background:color-mix(in srgb,var(--accent) 20%,transparent);border-color:transparent}button.picker-item.sel{background:color-mix(in srgb,var(--accent) 26%,transparent)}.picker-item .cnt{color:var(--muted);font-size:11px}.picker-foot{display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}button.row-caret{background:none;border:0;color:var(--muted);cursor:pointer;padding:0 8px 0 0;font-size:11px;line-height:1}button.row-caret:hover{color:var(--accent)}.expand-row>td{background:var(--bg);padding:4px 14px 14px 30px}.apps-panel .sub-table th{font-size:10px;padding:6px 10px}.apps-panel .sub-table td{padding:6px 10px;border-bottom:1px solid var(--border)}.apps-panel .sub-table tr:hover td{background:var(--bg-elev)}.app-search{width:230px;padding:5px 9px}.apps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:10px}.app-tile{display:flex;align-items:center;gap:11px;padding:10px;background:var(--bg-elev);border:1px solid var(--border);border-radius:10px;min-width:0}.app-tile:hover{border-color:var(--accent)}.app-icon{width:42px;height:42px;flex:0 0 42px;border-radius:10px;object-fit:contain;background:var(--bg-elev2)}.app-icon.fallback{display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;color:var(--accent)}.app-meta{min-width:0}.app-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-pkg{color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-sub{display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px;margin-top:4px;font-size:11px}button.row-caret{display:inline-block;width:14px;text-align:center;font-size:13px}.menu-sub-wrap{position:relative}.menu-panel.sub{top:-6px;min-width:236px}.menu-panel.sub.right{left:calc(100% + 4px)}.menu-panel.sub.left{right:calc(100% + 4px);left:auto}.mi-arrow{margin-left:auto;color:var(--muted);font-size:10px}button.menu-item:hover:not(:disabled) .mi-arrow{color:var(--text)}button.picker-item>span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}button.ph-chip{padding:3px 9px;font-size:11px;border-radius:999px;font-family:ui-monospace,Menlo,monospace;color:var(--accent)}button.ph-chip:hover{background:color-mix(in srgb,var(--accent) 20%,transparent)}.app-tile{flex-direction:column;align-items:stretch;gap:8px}.app-tile.is-running{border-color:color-mix(in srgb,var(--accent-2) 45%,var(--border))}.app-head{display:flex;align-items:center;gap:11px;min-width:0}.app-name{display:flex;align-items:center;gap:6px}.run-dot{width:7px;height:7px;border-radius:50%;background:var(--accent-2);flex:0 0 7px;box-shadow:0 0 6px var(--accent-2)}.app-actions{display:flex;gap:5px;justify-content:flex-end;border-top:1px solid var(--border);padding-top:8px}.app-actions button.icon-btn{width:28px;font-size:12px}.port-search{padding:5px 8px;margin-bottom:6px;font-size:12px}.proxy-pick{display:flex;gap:8px}.proxy-pick select{flex:2 1 0;min-width:0}.proxy-pick input{flex:1 1 0;min-width:0}.hint-warn{color:var(--warn)}.hint-ok{color:var(--accent-2)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{width:min(360px,100%);background:var(--panel, #131722);border:1px solid var(--border, #232937);border-radius:14px;padding:26px 24px 22px;box-shadow:0 18px 50px #00000073}.login-card .field{margin-bottom:14px}.login-card input{width:100%}.login-card button.primary{width:100%;margin-top:4px}.login-err{background:#dc46461f;border:1px solid rgba(220,70,70,.35);color:#ff9a9a;border-radius:8px;padding:8px 10px;font-size:13px;margin-bottom:12px}button.linkish{background:none;border:0;padding:0;color:var(--muted, #7c869c);font:inherit;font-size:12px;cursor:pointer;text-decoration:underline}button.linkish:hover{color:var(--text, #e6e9f0)}
