:root{font-family:Inter,Segoe UI,Microsoft YaHei,Arial,sans-serif;color:#17233d;background:#f3f6fc;font-synthesis:none;--bg: #f3f6fc;--panel: #ffffff;--panel-soft: #f8f9ff;--line: #dfe5f1;--line-strong: #cfd8e8;--text: #17233d;--muted: #73819b;--primary: #5b61df;--primary-dark: #454bc9;--primary-soft: #eef0ff;--primary-ring: rgba(91, 97, 223, .15);--green: #16a77b;--green-soft: #e8f8f2;--yellow: #d98214;--red: #e34b62;--red-soft: #fff0f2;--shadow: 0 10px 32px rgba(37, 55, 94, .055)}*{box-sizing:border-box}*::selection{background:#5b61df2e;color:#1d2552}body{margin:0;min-width:320px;min-height:100vh;background:var(--bg)}button,input,select,textarea{font:inherit}button,input,select,textarea{-webkit-tap-highlight-color:transparent}.shell{display:grid;grid-template-columns:264px minmax(0,1fr);min-height:100vh}.sidebar{position:sticky;top:0;z-index:5;height:100vh;padding:26px 18px 18px;border-right:1px solid var(--line);background:#ffffffeb;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:8px 0 28px #28395c09}.brand{display:flex;align-items:center;gap:12px;margin:0 6px 34px;color:var(--text);font-size:18px;font-weight:800;letter-spacing:-.2px}.brand-copy{display:grid;gap:2px}.brand small{color:#8a96ab;font-size:10px;font-weight:600;letter-spacing:.8px}.logo{display:block;flex:0 0 42px;width:42px;height:42px;border-radius:13px;box-shadow:0 10px 24px #585adc42}.nav-label{margin:0 13px 7px;color:#a0aabc;font-size:9px;font-weight:750;letter-spacing:1.25px;text-transform:uppercase}.nav{display:grid;gap:17px}.nav-group{display:grid;gap:6px}.nav button{position:relative;display:flex;align-items:center;gap:12px;width:100%;padding:9px 11px;border:1px solid transparent;border-radius:11px;background:transparent;color:#697892;text-align:left;cursor:pointer;transition:.18s ease}.nav button:hover{color:var(--primary);background:#f6f7ff}.nav button.active{color:var(--primary-dark);border-color:#e1e3fb;background:linear-gradient(100deg,#f1f2ff,#f8f9ff);box-shadow:0 7px 18px #4b4fbc0f;font-weight:700}.nav button.active:before{content:"";position:absolute;left:-12px;width:4px;height:24px;border-radius:0 5px 5px 0;background:var(--primary)}.nav-icon{display:grid;place-items:center;width:31px;height:31px;border-radius:9px;background:#f2f5fa;color:#8795ad;font-size:17px}.nav button.active .nav-icon{background:var(--primary);color:#fff;box-shadow:0 6px 14px #6366e938}.profile{position:absolute;left:18px;right:18px;bottom:18px;display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:var(--shadow)}.avatar{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;background:linear-gradient(145deg,#7779ed,#5154cc);color:#fff;font-weight:800}.profile-copy{display:grid;min-width:0;gap:2px}.profile-copy b,.profile-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-copy b{font-size:13px}.profile-copy small{color:var(--muted);font-size:10px}.profile button{border:0;background:transparent;color:var(--red);font-size:11px;cursor:pointer}.main{width:100%;max-width:1680px;margin:0 auto;padding:28px clamp(22px,3vw,46px) 60px}.page-stage{animation:page-enter .24s cubic-bezier(.2,.75,.25,1);transform-origin:top center}@keyframes page-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.header{position:relative;display:flex;justify-content:space-between;align-items:center;min-height:138px;margin-bottom:26px;padding:25px 30px;overflow:hidden;border:1px solid var(--line);border-radius:19px;background:linear-gradient(110deg,#fff 54%,#f1f2ff);box-shadow:var(--shadow)}.header:before{content:"";position:absolute;inset:0 auto 0 0;width:5px;background:linear-gradient(#7779f2,#5558df)}.header h1{margin:5px 0 7px;color:#111b32;font-size:30px;letter-spacing:-1px}.header p{margin:0;color:var(--muted);font-size:14px}.eyebrow{color:var(--primary);font-size:10px;font-weight:800;letter-spacing:1.35px}.header-actions{display:flex;align-items:center;gap:9px}.page-refresh{display:inline-flex;align-items:center;gap:7px;min-height:38px;padding:8px 11px;border:1px solid #dfe2f2;border-radius:11px;background:#ffffffb8;color:#66728a;cursor:pointer;transition:.18s ease}.page-refresh:hover{border-color:#c7cbec;background:#fff;color:var(--primary);box-shadow:0 5px 13px #31397d12}.page-refresh:disabled{opacity:.6;cursor:wait}.page-refresh>span{display:inline-block;color:var(--primary);font-size:17px;line-height:1}.page-refresh b{font-size:11px;font-weight:700}.page-refresh.syncing>span{animation:request-spin .8s linear infinite}.header-mark{display:grid;place-items:center;width:48px;height:48px;border:1px solid #dfe2fa;border-radius:14px;background:#ffffff9e;color:var(--primary);font-weight:800}.global-request{position:fixed;top:16px;left:50%;z-index:100;display:flex;align-items:center;gap:9px;max-width:min(520px,calc(100vw - 28px));padding:9px 13px;border:1px solid #d9ddf5;border-radius:12px;background:#fffffff2;box-shadow:0 12px 32px #1c274f26;color:#505d75;font-size:12px;font-weight:650;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transform:translate(-50%);animation:request-enter .18s ease-out}.global-request.slow{border-color:#cfd3f6;color:#484eb4}.global-request.long{border-color:#f0d3a8;background:#fffbf2f7;color:#a56613}.global-request small{flex:0 0 auto;padding:2px 5px;border-radius:7px;background:#eef0f7;color:#7a869b;font-size:9px}.request-spinner{flex:0 0 16px;width:16px;height:16px;border:2px solid #dfe2f4;border-top-color:var(--primary);border-radius:50%;animation:request-spin .75s linear infinite}.global-request.long .request-spinner{border-color:#f2dfbf;border-top-color:#d88a21}@keyframes request-spin{to{transform:rotate(360deg)}}@keyframes request-enter{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.select,.input,.textarea{width:100%;min-height:42px;padding:10px 12px;border:1px solid var(--line-strong);border-radius:10px;outline:none;background:linear-gradient(180deg,#fff,#fcfcfe);color:var(--text);box-shadow:inset 0 1px 1px #1f2a4406,0 1px 2px #1f2a4405;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease,transform .18s ease}.input:hover,.textarea:hover{border-color:#bdc6dd}.select{min-height:42px;padding-right:42px;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='m4 6 4 4 4-4' stroke='%236366e9' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 13px center;background-size:16px;box-shadow:0 2px 6px #25375e09,inset 0 1px #fffc;color:#34415a;font-weight:550;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease}.select:hover{border-color:#b9c1df;background-color:#fbfbff;box-shadow:0 4px 12px #3f449712,inset 0 1px #ffffffe6}.select:disabled{border-color:var(--line);background-color:#f5f6f9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='m4 6 4 4 4-4' stroke='%23929caf' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");color:#929caf;cursor:not-allowed;opacity:1}.select option,.select optgroup{background:#fff;color:var(--text);font-weight:500}.textarea{min-height:86px;resize:vertical}.input::placeholder,.textarea::placeholder{color:#a5afc0}.input:focus,.select:focus,.textarea:focus{border-color:#8589ea;background:#fff;box-shadow:0 0 0 4px var(--primary-ring),0 4px 12px #31387a12}.select:focus{background-color:#fff;box-shadow:0 0 0 3px #6366e91c,0 5px 14px #3f449714}input[type=checkbox]{width:16px;height:16px;margin:1px 0 0;accent-color:var(--primary);cursor:pointer}input[type=checkbox]:disabled{cursor:not-allowed}label:has(.input),label:has(.select),label:has(.textarea){display:grid;gap:7px}.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:18px}.stat,.panel,.project-card{border:1px solid var(--line);border-radius:15px;background:#fffffff0;box-shadow:var(--shadow)}.stat{position:relative;min-height:122px;padding:22px;overflow:hidden}.stat label,.label{display:block;margin-bottom:7px;color:var(--muted);font-size:12px}.stat strong{display:block;color:#152039;font-size:29px;line-height:1.1}.hint{margin-top:5px;color:var(--green);font-size:11px}.panel{padding:22px;margin-bottom:18px}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.panel h2{margin:0;color:#162038;font-size:17px}.page-actions{min-height:42px}.badge{padding:5px 9px;border-radius:7px;background:var(--primary-soft);color:var(--primary);font-size:10px;font-weight:800}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:8px 14px;border:1px solid transparent;border-radius:10px;background:linear-gradient(135deg,#6f71ed,#5558db);box-shadow:0 6px 14px #5054d926;color:#fff;font-size:13px;font-weight:650;line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:color .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease,transform .18s ease}.btn:hover{transform:translateY(-1px);box-shadow:0 8px 18px #5054d938}.btn:active{transform:translateY(0);box-shadow:0 3px 8px #5054d929}.btn:focus-visible,.copy:focus-visible,.remove:focus-visible,.modal-close:focus-visible,.detail-tabs button:focus-visible,.nav button:focus-visible{outline:3px solid var(--primary-ring);outline-offset:2px}.btn.secondary{border-color:#d8deea;background:linear-gradient(#fff,#fbfcfe);box-shadow:0 2px 5px #25375e0a;color:#647188;font-weight:600}.btn.secondary:hover{border-color:#b8c2d5;background:#fff;box-shadow:0 5px 12px #25375e14;color:var(--primary)}.btn.danger{border-color:#f5ccd3;background:var(--red-soft);box-shadow:none;color:var(--red)}.btn.danger-solid{border-color:#dd4057;background:linear-gradient(135deg,#ef6678,#dc4058);box-shadow:0 7px 16px #db405833;color:#fff}.btn.danger-solid:hover{box-shadow:0 9px 20px #db405847}.btn:disabled{opacity:.45;box-shadow:none;cursor:not-allowed;transform:none}.btn-icon{display:inline-grid;place-items:center;width:15px;height:15px;font-size:14px;line-height:1}.btn.action{min-height:32px;padding:6px 10px;border-color:#dfe4ee;background:#fff;box-shadow:none;color:#68758c;font-size:12px}.btn.action:hover{border-color:#bfc8da;background:#f8f9fd;color:#4e5b72;box-shadow:0 4px 10px #25375e12}.btn.action.view-action{border-color:#dfe1fb;background:var(--primary-soft);color:var(--primary)}.btn.action.view-action:hover{border-color:#c8cbf7;background:#e8eaff;color:var(--primary-dark)}.btn.action.edit-action .btn-icon{color:var(--primary)}.row-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start}.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.full{grid-column:1 / -1}.projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.project-card{padding:20px}.project-card h3{margin:0 0 4px;color:#17233d}.project-card p{min-height:42px;color:var(--muted)}.project-list{padding:0}.project-list table{min-width:1480px}.project-list th{padding:14px 18px;background:#fafbfe}.project-list td{padding:18px;vertical-align:top}.project-list th:nth-child(1){width:230px}.project-list th:nth-child(2){width:245px}.project-list th:nth-child(3){width:300px}.project-list th:nth-child(4){width:190px}.project-list th:nth-child(5){width:260px}.project-list th:nth-child(6){width:190px}.project-row{cursor:pointer;transition:background .18s ease}.project-row:hover{background:#f8f9ff}.project-title-cell{display:flex;align-items:flex-start;gap:11px}.project-monogram{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border:1px solid #dfe2fb;border-radius:11px;background:linear-gradient(145deg,#f0f1ff,#fafaff);color:var(--primary);font-weight:800}.project-title-cell>span:last-child{display:grid;min-width:0;gap:4px}.project-title-cell b{color:#29344b;font-size:13px}.project-title-cell small{display:-webkit-box;overflow:hidden;color:var(--muted);font-size:10px;line-height:1.45;-webkit-box-orient:vertical;-webkit-line-clamp:2}.project-title-cell em{color:#9aa4b5;font-size:9px;font-style:normal}.status-line{display:flex;align-items:center;gap:9px}.status-line>b{color:#59667d;font-size:11px}.agent-mini-list{display:grid;gap:6px;margin-top:9px}.agent-mini-list>span{display:grid;gap:2px;padding-left:9px;border-left:2px solid #dfe3f4}.agent-mini-list b{overflow:hidden;color:#465269;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.agent-mini-list small{overflow:hidden;color:#8a95a8;font:9px Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.agent-mini-list em{color:var(--primary);font-size:9px;font-style:normal}.tunnel-summary{display:grid;gap:8px}.tunnel-summary>b{color:#465269;font-size:11px}.tunnel-summary>span{display:grid;gap:5px}.mapping-chip{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:6px;min-width:0;padding:5px 7px;border:1px solid #e4e8f0;border-radius:8px;background:#fafbfe;font-size:9px}.mapping-chip i{color:var(--primary);font:700 10px Consolas,monospace}.mapping-chip>span{overflow:hidden;color:#68758a;font:9px Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.mapping-chip em{padding:2px 5px;border-radius:7px;background:var(--green-soft);color:var(--green);font-size:8px;font-style:normal;white-space:nowrap}.connection-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.connection-metrics>span{display:grid;gap:2px;padding:7px 8px;border-radius:8px;background:#f5f7fb}.connection-metrics small{color:#8b96a8;font-size:8px}.connection-metrics b{color:#354159;font-size:14px}.traffic-split{display:flex;gap:9px;margin-top:8px;color:#647189;font:9px Consolas,monospace}.project-id{display:block;margin-top:4px;color:#96a0b3;font:10px Consolas,monospace}.project-description{max-width:330px;color:var(--muted);line-height:1.55}.token-preview{padding:6px 9px;border-radius:7px;background:#f3f5fa;color:#69768d;font:11px Consolas,monospace}.row-actions.compact{margin-top:0;flex-wrap:nowrap}.row-actions.compact .btn{white-space:nowrap;padding:7px 10px;font-size:12px}.project-quick-actions{display:grid;grid-template-columns:repeat(2,minmax(82px,1fr));gap:6px}.project-quick-actions .btn{width:100%}.project-overview{margin-bottom:18px}.project-overview .stat{min-height:110px}.project-overview-error{margin:0 0 18px}.status-pill{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;border-radius:14px;font-size:11px;font-weight:700}.status-pill i{width:7px;height:7px;border-radius:50%}.status-pill.online{background:var(--green-soft);color:var(--green)}.status-pill.online i{background:var(--green);box-shadow:0 0 0 3px #16a77b1f}.status-pill.offline{background:#f0f2f6;color:#8b96a9}.status-pill.offline i{background:#aab3c2}.metric-note{display:block;max-width:220px;margin-top:5px;overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.recent-event{max-width:320px}.recent-event>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ports{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:10px 0 17px}.port{padding:4px 8px;border-radius:6px;background:var(--primary-soft);color:var(--primary);font:12px Consolas,monospace}.token{padding:11px;border:1px solid #e1e5ee;border-radius:9px;background:#f7f8fb;color:#526079;font:12px Consolas,monospace;word-break:break-all}.agent-row{display:grid;grid-template-columns:1.1fr .8fr .8fr 2fr;gap:12px;padding:14px 10px;border-bottom:1px solid #edf0f5;align-items:start}.agent-row.head{color:var(--muted);font-size:10px;font-weight:700;text-transform:uppercase}.agent-toolbar{margin-bottom:14px}.agent-overview{grid-template-columns:repeat(3,minmax(0,1fr))}.agent-status-panel>.panel-head{align-items:flex-start}.agent-status-panel>.panel-head p{margin:5px 0 0;font-size:11px}.agent-card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.agent-status-card{overflow:hidden;border:1px solid #dfe4ee;border-radius:15px;background:linear-gradient(150deg,#fff,#fbfcff);box-shadow:0 6px 18px #2a375a0b;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.agent-status-card:hover{border-color:#cbd1e8;box-shadow:0 11px 26px #2a375a14;transform:translateY(-2px)}.agent-status-card>header{display:flex;align-items:center;gap:12px;padding:16px 17px;border-bottom:1px solid #edf0f5;background:linear-gradient(120deg,#fff,#f6f7ff)}.agent-card-avatar{display:grid;place-items:center;flex:0 0 43px;width:43px;height:43px;border-radius:12px;background:linear-gradient(145deg,#7377ec,#5056ce);box-shadow:0 7px 16px #4c52c533;color:#fff;font-size:16px;font-weight:800}.agent-status-card>header>div{display:grid;min-width:0;grid-template-columns:1fr auto;align-items:center;column-gap:8px}.agent-status-card h3{grid-column:1;margin:1px 0 3px;overflow:hidden;color:#28334b;font-size:15px;text-overflow:ellipsis;white-space:nowrap}.agent-status-card header p{grid-column:1 / -1;margin:0;overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.agent-online{grid-column:2;grid-row:1 / 3;display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border-radius:10px;background:var(--green-soft);color:var(--green);font-size:9px;font-weight:750}.agent-online i{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px #16a77b1c}.agent-facts{display:grid;grid-template-columns:1.3fr .8fr .8fr;gap:1px;padding:12px 17px;background:#f8f9fc}.agent-facts>span{display:grid;min-width:0;gap:3px;padding-right:10px}.agent-facts small,.agent-metrics small{color:#929cae;font-size:8px}.agent-facts b{overflow:hidden;color:#59667c;font:9px Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.agent-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:14px 17px 9px}.agent-metrics>span{display:grid;gap:3px;padding:8px;border:1px solid #e8ebf2;border-radius:9px;background:#fafbfe}.agent-metrics strong{color:#354158;font-size:16px;line-height:1}.agent-traffic{display:flex;gap:14px;padding:0 17px 13px;color:#647188;font:9px Consolas,monospace}.agent-tunnels{margin:0 17px 17px;overflow:hidden;border:1px solid #e5e9f1;border-radius:11px}.agent-tunnels-title{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-bottom:1px solid #e9ecf3;background:#f6f7fb}.agent-tunnels-title b{color:#56637a;font-size:10px}.agent-tunnels-title small{color:var(--muted);font-size:9px}.agent-tunnel-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:8px 10px;border-bottom:1px solid #edf0f5}.agent-tunnel-row:last-child{border-bottom:0}.agent-tunnel-row>span{display:grid;min-width:0;gap:2px}.agent-tunnel-row>span:last-child{text-align:right}.agent-tunnel-row b{overflow:hidden;color:#46536b;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.agent-tunnel-row small{overflow:hidden;color:#8490a5;font:9px Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.agent-no-tunnel{padding:22px;color:var(--muted);font-size:10px;text-align:center}.filter-bar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:15px;padding:13px 15px;border:1px solid var(--line);border-radius:13px;background:#ffffffe6;box-shadow:0 5px 16px #25375e09}.filter-bar>div{display:grid;gap:3px}.filter-bar b{color:#36425b;font-size:12px}.filter-bar span{color:var(--muted);font-size:10px}.filter-bar .select{width:min(280px,44vw)}.dot{display:inline-block;width:8px;height:8px;margin-right:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.tunnel{display:inline-block;margin:2px 4px 2px 0;padding:5px 8px;border-radius:7px;background:#f5f7fb}.muted{color:var(--muted)}.empty{padding:38px;color:var(--muted);text-align:center}.empty-state{display:grid;justify-items:center;min-height:310px;place-content:center;text-align:center}.empty-state h2{margin:14px 0 7px}.empty-state p{max-width:510px;margin:0 0 19px;color:var(--muted);line-height:1.7}.empty-icon{display:grid;place-items:center;width:58px;height:58px;border-radius:17px;background:var(--primary-soft);color:var(--primary);font-size:26px}.tunnel-form{display:grid;grid-template-columns:1fr .7fr 1.25fr 38px;gap:8px;margin:8px 0}.remove{display:grid;place-items:center;min-width:38px;border:1px solid #f3d3d8;border-radius:9px;background:var(--red-soft);color:var(--red);font-size:18px;cursor:pointer;transition:.18s ease}.remove:hover{border-color:#efaeb8;background:#ffe7eb}.remove:disabled{opacity:.4;cursor:not-allowed}.code-block{position:relative;min-height:82px;padding:14px 76px 14px 14px;border:1px solid #dbe1ed;border-radius:10px;background:#f7f8fb;color:#44526b;font:12px/1.65 Consolas,monospace;white-space:pre-wrap;word-break:break-all}.copy{position:absolute;right:9px;top:9px;min-height:30px;padding:5px 10px;border:1px solid #d7ddeb;border-radius:8px;background:#fff;box-shadow:0 2px 6px #25375e0d;color:var(--primary);font-size:11px;font-weight:650;cursor:pointer;transition:.18s ease}.copy:hover{border-color:#bbbff0;background:var(--primary-soft)}.download{display:flex;align-items:center;justify-content:space-between;padding:12px;border:1px solid var(--line);border-radius:10px;margin:8px 0}.download a{text-decoration:none}.table-wrap{overflow:auto}table{width:100%;min-width:800px;border-collapse:collapse}th{padding:10px;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px;text-align:left}td{padding:13px 10px;border-bottom:1px solid #edf0f5;vertical-align:top}.checks{display:flex;gap:8px;flex-wrap:wrap}.check{padding:5px 8px;border-radius:7px;background:#f3f5fa;color:#56647c}.user-overview{grid-template-columns:repeat(3,minmax(0,1fr))}.user-overview .stat{min-height:108px}.user-list{padding:0}.user-list table{min-width:980px}.user-list th{padding:14px 18px;background:#fafbfe}.user-list td{padding:16px 18px;vertical-align:middle}.user-identity{display:flex;align-items:center;gap:11px;min-width:155px}.user-identity>span:last-child{display:grid;gap:3px}.user-identity small{color:var(--muted);font-size:10px}.user-avatar{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border-radius:11px;background:linear-gradient(145deg,#7779ed,#5457d5);color:#fff;font-weight:800}.role-pill{display:inline-flex;padding:5px 9px;border-radius:12px;font-size:11px;font-weight:700;white-space:nowrap}.role-pill.admin{background:var(--primary-soft);color:var(--primary)}.role-pill.user{background:#f0f2f6;color:#69768c}.permission-summary{display:flex;align-items:center;gap:5px;max-width:310px;overflow:hidden}.project-chip{display:inline-block;max-width:90px;padding:4px 7px;overflow:hidden;border-radius:6px;background:#f2f4f9;color:#66738a;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.project-chip.all{background:var(--primary-soft);color:var(--primary)}.project-chip.more{flex:0 0 auto}.date-cell{color:#6e7b91;font-size:11px;white-space:nowrap}.user-modal{width:min(680px,96vw)}.user-modal h2{margin:7px 0 18px}.modal-description{margin:-10px 0 19px}.account-banner{display:flex;align-items:center;gap:11px;margin-bottom:18px;padding:12px;border:1px solid var(--line);border-radius:11px;background:#f8f9fc}.account-banner>div{display:grid;gap:3px}.account-banner small{color:var(--muted);font-size:10px}.permission-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:220px;overflow:auto;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fafbfe}.permission-picker.disabled{opacity:.72}.permission-option{display:flex;align-items:flex-start;gap:9px;min-width:0;padding:9px;border:1px solid #e6eaf2;border-radius:9px;background:#fff;cursor:pointer}.permission-option>span{display:grid;min-width:0;gap:3px}.permission-option b,.permission-option small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.permission-option b{color:#45526a;font-size:12px}.permission-option small{color:var(--muted);font-size:10px}.logs{height:560px;overflow:auto;border:1px solid #dce2ed;border-radius:10px;background:#f8f9fc;font:12px/1.6 Consolas,monospace}.log-page{padding:0;overflow:hidden}.log-page-head{margin:0;padding:18px 20px;border-bottom:1px solid var(--line);background:#fff}.log-page-head h2{margin-bottom:5px}.log-page-head p{margin:0;font-size:11px}.log-page .logs{height:min(620px,calc(100vh - 350px));min-height:420px;border:0;border-radius:0}.log-page .pagination{padding:14px 20px;border-top:1px solid var(--line)}.log{display:grid;grid-template-columns:145px 60px 100px 1fr;gap:8px;padding:6px 10px;border-bottom:1px solid #e9edf4}.gateway-log{grid-template-columns:140px 145px 60px minmax(260px,1fr);min-width:700px;align-items:center}.gateway-log>.log-project{grid-column:1;grid-row:1}.gateway-log>span:first-child{grid-column:2;grid-row:1}.gateway-log>b{grid-column:3;grid-row:1}.gateway-log>span:nth-child(4){display:none}.gateway-log>span:last-child{grid-column:4;grid-row:1}.log-project{display:inline-block;max-width:135px;padding:2px 6px;overflow:hidden;border-radius:5px;background:var(--primary-soft);color:var(--primary);font-family:Inter,Microsoft YaHei,sans-serif;font-size:10px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.log-project.global{background:#eef1f5;color:#788499}.pagination{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding-top:14px;color:var(--muted);font-size:12px}.pagination .btn{min-width:76px}.toolbar .page-size{min-width:105px}.log-settings-modal h2{margin:7px 0}.log-settings-modal>.muted{margin:0 0 20px}.input-unit{position:relative}.input-unit .input{padding-right:48px}.input-unit span{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:11px}.settings-error:empty{display:none}.INFO{color:var(--green)}.WARN{color:var(--yellow)}.ERROR{color:var(--red)}.login-page{min-height:100vh;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 50% 10%,#e9eaff,transparent 35%)}.login-card{width:min(430px,94vw);padding:32px;border:1px solid var(--line);border-radius:19px;background:#fffffff5;box-shadow:0 24px 70px #303d6321}.login-card .brand{margin:0 0 28px}.login-card h1{margin:9px 0 5px;color:#142039;font-size:25px}.login-card p{margin:0 0 22px;color:var(--muted)}.login-card .input{margin-bottom:11px}.login-card .btn{width:100%;padding:11px}.login-card .btn.secondary{margin-top:2px}.error{min-height:24px;margin-top:8px;color:var(--red);font-size:12px;line-height:1.5}.toast{position:fixed;right:24px;bottom:24px;z-index:30;display:inline-flex;align-items:center;gap:9px;max-width:min(390px,calc(100vw - 32px));padding:12px 15px;border:1px solid #c9ecdc;border-radius:12px;background:#fafffcf5;box-shadow:0 14px 34px #1a523d21;color:#15805d;font-size:13px;font-weight:650;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);animation:toast-in .22s ease-out}.toast-icon{display:grid;place-items:center;flex:0 0 20px;width:20px;height:20px;border-radius:50%;background:#dcf6e9;color:#15966d;font-size:12px}@keyframes toast-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.toolbar .select{width:auto;min-width:180px}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:clamp(14px,3vw,28px);overflow:auto;background:#0f182f7a;-webkit-backdrop-filter:blur(7px) saturate(.9);backdrop-filter:blur(7px) saturate(.9);animation:overlay-in .16s ease-out}.modal{width:min(620px,100%);max-height:min(90vh,860px);overflow:auto;padding:27px;border:1px solid rgba(220,226,239,.94);border-radius:18px;background:linear-gradient(150deg,#fff,#fcfcff);box-shadow:0 26px 80px #0b142b47,0 3px 12px #0b142b1a;animation:modal-in .2s cubic-bezier(.2,.8,.2,1)}.modal h2{margin-top:0;color:#17213b;letter-spacing:-.35px}.modal-foot{display:flex;justify-content:flex-end;gap:9px;margin-top:22px;padding-top:17px;border-top:1px solid #edf0f6}.modal-foot .btn{min-width:82px}.modal-foot .modal-delete{margin-right:auto}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}@keyframes modal-in{0%{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.confirm-bg{z-index:40}.confirm-modal{display:grid;grid-template-columns:42px minmax(0,1fr);column-gap:15px;width:min(490px,100%);padding:25px}.confirm-icon{display:grid;place-items:center;width:40px;height:40px;border:1px solid #f5c7ce;border-radius:13px;background:#fff1f3;color:#df4c61;font-size:20px;font-weight:800}.confirm-modal .eyebrow{color:#d55768}.confirm-modal h2{margin:3px 0 7px;font-size:19px}.confirm-modal p{margin:0;color:var(--muted);font-size:13px;line-height:1.65}.confirm-modal .modal-foot{grid-column:1 / -1}.access-modal{width:min(1140px,100%);padding:0;overflow:hidden;border-radius:20px;background:#f7f8fc}.access-title{position:relative;min-height:102px;margin:0;padding:25px 28px;border-bottom:1px solid #e3e7f0;background:linear-gradient(112deg,#fff,#f3f4ff)}.access-title>*{position:relative;z-index:1}.access-title h2{margin:5px 0 6px;font-size:22px;letter-spacing:-.45px}.access-title p{max-width:580px;margin:0;line-height:1.55}.modal-close{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border:1px solid #dbe1ec;border-radius:10px;background:#fff;color:#7d899f;font-size:22px;cursor:pointer;transition:.18s ease}.modal-close:hover{border-color:#f0bec6;background:var(--red-soft);color:var(--red);transform:rotate(4deg)}.detail-tabs{display:flex;gap:7px;padding:12px 22px;border-bottom:1px solid #e6e9f1;background:#fffffff0}.detail-tabs button{display:inline-flex;align-items:center;gap:5px;padding:9px 12px;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--muted);font-size:13px;font-weight:600;cursor:pointer;transition:.18s ease}.detail-tabs button:hover{background:#f4f5fb;color:#56637c}.detail-tabs button.active{border-color:#dce0fa;background:var(--primary-soft);color:var(--primary);font-weight:750;box-shadow:0 3px 8px #4e52b10f}.detail-tabs button span{display:inline-grid;place-items:center;min-width:20px;height:20px;margin-left:2px;padding:0 5px;border-radius:10px;background:#eef0f5;color:#7a879d;font-size:10px}.detail-tabs button.active span{background:var(--primary-soft);color:var(--primary)}.access-content{max-height:calc(90vh - 103px);overflow:auto;background:linear-gradient(180deg,#f7f8fc,#f4f6fb)}.access-grid{padding:24px;background:transparent}.subpanel{padding:20px;margin-bottom:16px;border:1px solid #e0e5ef;border-radius:15px;background:#fffffff5;box-shadow:0 5px 16px #303b5d09}.subpanel:last-child{margin-bottom:0}.subpanel>.panel-head{margin-bottom:18px}.subpanel>.panel-head h2{font-size:16px}.tunnel-label{margin-top:17px}.fixed-tunnel{display:grid;grid-template-columns:.8fr .65fr 1.35fr 38px;gap:10px;padding:10px;border:1px solid #e9edf4;border-radius:12px;background:#fafbfe}.fixed-tunnel:focus-within{border-color:#c8cdf4;background:#fff;box-shadow:0 0 0 3px #5b61df12}.tunnel-editor{display:grid;gap:10px}.input:disabled{background:#f5f6f9;color:#647187;cursor:default}.tunnel-actions{display:flex;justify-content:space-between;gap:10px;margin-top:15px}.config-error{margin-top:11px;padding:8px 10px;border-radius:7px;background:var(--red-soft);color:var(--red);font-size:12px}.field-help{margin:9px 0 0;color:var(--muted);font-size:11px;line-height:1.6}.command-panel{display:flex;flex-direction:column;min-height:100%}.command-panel>.muted{margin-top:0;line-height:1.65}.command-panel .code-block{min-height:180px}.step-label{display:inline-flex;align-items:center;min-height:20px;padding:3px 7px;border-radius:6px;background:#eef0ff;color:var(--primary);font-size:10px;font-weight:800;letter-spacing:.3px}.deployment-title{align-items:flex-start}.deployment-title h2{margin:6px 0 0}.deployment-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:15px}.deployment-mode{display:flex;align-items:flex-start;gap:9px;min-width:0;padding:12px;border:1px solid #e1e6ef;border-radius:12px;background:#fafbfe;color:#6a778c;text-align:left;cursor:pointer;transition:.18s ease}.deployment-mode:hover{border-color:#c8cfea;background:#f7f8ff;transform:translateY(-1px)}.deployment-mode.active{border-color:#bcc2f4;background:linear-gradient(140deg,#f0f1ff,#fafaff);box-shadow:0 5px 13px #555bca17;color:#474db8}.mode-icon{display:grid;place-items:center;flex:0 0 30px;width:30px;height:30px;border:1px solid #dfe3ed;border-radius:9px;background:#fff;color:#7c889d;font-size:15px}.deployment-mode.active .mode-icon{border-color:#cdd1f7;background:var(--primary);color:#fff}.deployment-mode>span:last-child{display:grid;min-width:0;gap:3px}.deployment-mode b{overflow:hidden;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.deployment-mode small{color:#7d899d;font-size:10px;line-height:1.4}.command-step-head{display:flex;align-items:center;gap:9px;margin-top:18px;color:#414d66;font-size:13px}.command-result{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:10px 11px;border:1px solid #d7eee3;border-radius:10px;background:#f4fcf8;color:#4d7163;font-size:11px;line-height:1.6}.command-result>span:first-child{display:grid;place-items:center;flex:0 0 18px;width:18px;height:18px;border-radius:50%;background:#d9f4e6;color:#149168;font-size:11px;font-weight:800}.agent-acquire .panel-head{align-items:flex-start}.agent-acquire .panel-head p{margin:5px 0 0;font-size:12px;line-height:1.55}.agent-acquire .label{margin-bottom:0}.environment-steps{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:10px;padding:11px;border:1px solid #e6e9f1;border-radius:13px;background:#fafbfe}.environment-steps label{gap:6px}.environment-steps .label{display:flex;align-items:center;gap:6px;color:#65738b;font-size:11px;font-weight:700}.environment-steps .label i{display:grid;place-items:center;width:17px;height:17px;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-style:normal;font-size:10px}.environment-steps .select{min-width:0}.agent-download-card{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:10px;margin-top:12px;padding:11px;border:1px solid #e0e4f3;border-radius:12px;background:linear-gradient(135deg,#f8f9ff,#fff)}.agent-platform-mark{display:grid;place-items:center;width:42px;height:42px;border:1px solid #d9ddfb;border-radius:11px;background:var(--primary-soft);color:var(--primary);font-size:9px;font-weight:800;letter-spacing:.45px}.agent-download-copy{display:grid;min-width:0;gap:3px}.agent-download-copy b{overflow:hidden;color:#34415a;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.agent-download-copy small{overflow:hidden;color:var(--muted);font:10px Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.selected-platform{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:3px 10px;padding:11px 12px;border:1px solid #e1e4f4;border-radius:11px;background:#f8f9ff}.selected-platform .label{grid-row:1 / 3;margin:0;padding-right:10px;border-right:1px solid #e0e4f2}.selected-platform b{color:#35405b;font-size:13px}.selected-platform small{color:var(--muted);font:10px Consolas,monospace}.checkbox-label{display:flex;align-items:center;gap:8px;margin:14px 0 2px;padding:10px 11px;border:1px solid #e4e8f1;border-radius:10px;background:#fafbfe;color:#5f6d84;font-size:13px;cursor:pointer;transition:.18s ease}.checkbox-label:hover{border-color:#ccd2e7;background:#f7f8ff}.checkbox-label:has(input:checked){border-color:#d8dbfa;background:#f2f3ff;color:#4f55bf}.checkbox-label input[type=checkbox]{width:15px;height:15px;accent-color:#6366e9;cursor:pointer}.command-label{margin-top:14px}.inline-error{margin:14px 22px 0;padding:9px 12px;border:1px solid #f5ccd2;border-radius:8px;background:var(--red-soft);color:var(--red);font-size:12px}.detail-section{padding:22px}.detail-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:16px}.detail-stats .stat{min-height:105px}.agent-list{margin-bottom:0}.project-logs{height:min(520px,calc(90vh - 285px))}@media (max-width: 1100px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.projects,.agent-card-grid{grid-template-columns:1fr}}@media (max-width: 850px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;padding:15px 17px}.sidebar .brand{margin-bottom:14px}.nav-label{display:none}.nav{display:flex;overflow-x:auto}.nav-group{display:contents}.nav button{width:auto;white-space:nowrap}.nav button.active:before{display:none}.profile{position:static;margin-top:13px}.main{padding:20px 16px 45px}.header{min-height:120px;padding:22px}.grid2,.grid3{grid-template-columns:1fr}.agent-row{grid-template-columns:1fr 1fr}.agent-row.head{display:none}.fixed-tunnel{grid-template-columns:1fr 1fr 38px}.fixed-tunnel .input:nth-child(3){grid-column:1 / 3}.fixed-tunnel .remove{grid-column:3;grid-row:1 / 3}}@media (max-width: 560px){.header-mark,.page-refresh b{display:none}.page-refresh{width:38px;padding:8px;justify-content:center}.header h1{font-size:25px}.cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat{min-height:110px;padding:16px}.form-grid{grid-template-columns:1fr}.tunnel-form{grid-template-columns:1fr .7fr 38px}.tunnel-form .local{grid-column:1 / 4}.log{grid-template-columns:105px 48px 64px 1fr}.gateway-log{grid-template-columns:110px 115px 48px minmax(240px,1fr)}.projects{grid-template-columns:1fr}.panel{padding:17px}.detail-tabs{overflow-x:auto;padding-inline:12px}.detail-tabs button{white-space:nowrap}.detail-section,.access-grid{padding:14px}.detail-stats{grid-template-columns:1fr}.fixed-tunnel{grid-template-columns:1fr 38px}.fixed-tunnel .input{grid-column:1}.fixed-tunnel .input:nth-child(3){grid-column:1}.fixed-tunnel .remove{grid-column:2;grid-row:1 / 4}.permission-picker{grid-template-columns:1fr}.agent-facts{grid-template-columns:1fr 1fr;row-gap:9px}.agent-facts>span:first-child{grid-column:1 / -1}.agent-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-bar{align-items:stretch;flex-direction:column}.filter-bar .select{width:100%}.log-page-head{align-items:stretch;flex-direction:column}.agent-download-card{grid-template-columns:38px minmax(0,1fr)}.agent-download-card .download-action{grid-column:1 / -1;width:100%}.environment-steps,.deployment-modes{grid-template-columns:1fr}}@media (prefers-reduced-motion: reduce){.page-stage{animation:none}.agent-status-card{transition:none}.page-refresh.syncing>span,.request-spinner{animation:none}}
