:root{color-scheme:dark;--bg:#0d0f14;--sidebar:#101219;--panel:#15181f;--border:#292e3a;--text:#eef0f6;--muted:#929bad;--subtle:#676f82;--purple:#aa94ff;--cyan:#64d8de;--orange:#ff9b58;--green:#64d6a0;font-family:Inter,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:14px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);line-height:1.55}button,input,textarea,select{font:inherit}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}[hidden]{display:none!important}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--purple);outline-offset:4px}svg{display:block}input,textarea,select{color:var(--text);background:#10131a;border:1px solid var(--border);border-radius:9px}input,textarea{padding:12px 14px;width:100%}input::placeholder,textarea::placeholder{color:var(--subtle)}textarea{resize:vertical;min-height:150px}select{padding:7px 30px 7px 11px;font-size:12px}label{display:block;color:#c5cbda;font-size:13px;margin-bottom:8px}.mono{font-family:Consolas,"SFMono-Regular",monospace}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--orange);font-weight:650}.hint{font-size:12px;color:var(--muted)}
.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;min-height:42px;border-radius:9px;border:1px solid var(--border);padding:10px 17px;font-size:13px;font-weight:600;white-space:nowrap}.button.primary{background:#b9a9ff;color:#211d35;border-color:#b9a9ff}.button.primary:hover{background:#cbbfff}.button.quiet{background:transparent;border-color:transparent;color:var(--muted);padding-right:0;font-weight:400;gap:9px}.button.quiet:hover,.text-button:hover{color:var(--text)}.text-button{background:none;border:0;color:var(--purple);font-size:12px;display:inline-flex;align-items:center;gap:10px;padding:8px 0;white-space:nowrap}
.notice{position:fixed;z-index:50;right:24px;bottom:24px;max-width:min(450px,calc(100vw - 32px));background:#222a29;border:1px solid #436154;box-shadow:0 12px 40px #0007;padding:14px 20px;border-radius:10px;color:#d8f6e5;font-size:13px}.notice.error{background:#342227;border-color:#78434d;color:#ffccd0}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--green);flex:none}.status-dot.stale{background:var(--orange)}
.brand-mark{display:grid;place-items:center;flex:none;width:37px;height:37px;border-radius:11px;background:var(--orange);color:#25201b;font-weight:800;font-size:21px}.brand{display:flex;gap:11px;align-items:center;font-size:17px;font-weight:650;letter-spacing:.3px}.brand-sub{display:block;color:var(--subtle);font-size:8px;letter-spacing:1.4px;margin-top:1px;font-weight:500}.sidebar{position:fixed;inset:0 auto 0 0;width:224px;background:var(--sidebar);border-right:1px solid var(--border);padding:28px 18px;display:flex;flex-direction:column;z-index:10}.sidebar .brand{padding:0 8px}.nav-caption{font-size:10px;letter-spacing:1px;color:var(--subtle);padding:43px 14px 12px}.nav-item{width:100%;display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid transparent;border-radius:9px;color:var(--muted);background:none;font-size:13px;text-align:left;margin:4px 0;min-height:44px}.nav-item svg{width:17px;height:17px;stroke:currentColor;stroke-width:1.6;fill:var(--sidebar);flex:none}.nav-item:hover{color:var(--text);background:#1b1e27}.nav-item.active{color:#d1c4ff;background:#242032;border-color:#3b304f}.nav-item.active svg{fill:#242032}.nav-count{margin-left:auto;font-size:10px;min-width:20px;text-align:center;background:#242a35;color:#c6cada;border-radius:5px;line-height:20px}.sidebar-bottom{margin-top:auto;display:flex;gap:9px;align-items:center;padding:15px 6px 0;border-top:1px solid var(--border)}.sidebar-bottom strong{font-size:11px;font-weight:500;display:block}.sidebar-bottom span:not(.device-led):not(.mini-label){font-size:10px;color:var(--subtle);display:block;max-width:115px;overflow:hidden;text-overflow:ellipsis}.device-led{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px #64d6a010;flex:none}.mini-label{font-size:10px;color:var(--muted);border:1px solid var(--border);padding:2px 7px;border-radius:5px;white-space:nowrap}.sidebar-bottom .mini-label{margin-left:auto}
.workspace{margin-left:224px;padding:0 34px;max-width:1680px}.topbar{height:76px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;margin-bottom:29px}.breadcrumb{color:var(--subtle);font-size:11px;display:flex;gap:13px;align-items:center}.breadcrumb strong{color:#bfc5d2;font-weight:400}.page-heading{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:27px}.page-heading h1{font-size:27px;line-height:1.45;letter-spacing:-.6px;font-weight:650;margin:4px 0 5px}.page-heading>div>p:last-child{color:var(--muted);font-size:12px}.heading-status{display:flex;flex-direction:column;align-items:flex-end;gap:9px}.badge{display:inline-flex;align-items:center;gap:7px;font-size:11px;padding:5px 10px;border:1px solid #383746;background:#24242f;border-radius:6px;color:#c2c2d5;white-space:nowrap}.badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.badge.good{color:var(--green);border-color:#28523c;background:#162a22}.badge.waiting{color:#f5bb6e;border-color:#645132;background:#30271b}.update-label{font-size:10px;color:var(--subtle);display:flex;align-items:center;gap:6px;white-space:nowrap}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;overflow:hidden}.card-heading{padding:20px 22px;display:flex;justify-content:space-between;align-items:center;gap:12px}.card-heading h2{font-size:13px;font-weight:550;display:flex;align-items:center;gap:9px}.card-heading p{font-size:11px;color:var(--subtle);margin-top:4px}.metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:21px}.metric-card{padding:19px 20px}.metric-label{display:flex;align-items:center;justify-content:space-between;color:#b8c0d0;font-size:11px;gap:4px}.metric-icon{font-family:Consolas,monospace;font-size:9px;color:var(--subtle);border:1px solid var(--border);border-radius:4px;padding:1px 4px;letter-spacing:.4px}.metric-main{display:flex;justify-content:space-between;align-items:center;gap:6px;min-height:69px}.metric-main strong{font-size:33px;line-height:1.1;letter-spacing:-1.3px;font-weight:550;font-variant-numeric:tabular-nums}.metric-unit{color:var(--subtle);font-size:13px;margin-left:7px}.metric-detail{font-size:10px;color:var(--subtle);white-space:nowrap}.ring{width:45px;height:45px;transform:rotate(-90deg);flex:none}.ring circle{fill:none;stroke-width:3.5}.ring-track{stroke:#2a2e39}.ring-fill{stroke:var(--purple);stroke-linecap:round;transition:stroke-dasharray .45s}.memory-ring .ring-fill{stroke:var(--cyan)}.people-glyph{font-size:43px;font-weight:300;color:#424954;line-height:1}.speed-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-height:69px;align-items:center}.speed-pair>div+div{border-left:1px solid var(--border);padding-left:13px}.speed-pair strong{display:block;font-size:23px;line-height:1.3;letter-spacing:-.6px;font-variant-numeric:tabular-nums;font-weight:550}.speed-label{font-size:9px;display:block;margin-bottom:2px}.download{color:var(--purple)}.upload{color:var(--cyan)}.divider-dot{padding:0 7px}
.overview-grid{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(260px,1fr);gap:20px;margin-bottom:20px}.traffic-panel{display:flex;flex-direction:column}.chart-legend{display:flex;align-items:center;gap:21px;padding:0 22px 10px;font-size:10px;color:var(--muted)}.chart-legend>span{display:flex;align-items:center;gap:7px}.chart-legend b{color:var(--text);font-size:11px;font-weight:500;font-variant-numeric:tabular-nums}.legend-dot{display:inline-block;width:6px;height:6px;border-radius:50%;flex:none}.download-dot{background:var(--purple)}.upload-dot,.memory-dot{background:var(--cyan)}.chart-legend .legend-unit{margin-left:auto;color:var(--subtle);font-size:10px}.chart{width:100%;overflow:visible}.large-chart{flex:1;min-height:190px;padding:0 10px}.chart-grid{stroke:#2b303d;stroke-width:1;stroke-dasharray:3 5;vector-effect:non-scaling-stroke}.chart-axis{fill:#747e93;font-size:12px;font-family:inherit}.chart-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.download-line{stroke:var(--purple)}.upload-line{stroke:var(--cyan)}.chart-empty{fill:var(--subtle);font-size:15px}.chart-footer{display:flex;justify-content:space-between;border-top:1px solid var(--border);padding:12px 22px;color:var(--subtle);font-size:10px;gap:12px;margin-top:6px}.board-panel .card-heading{border-bottom:1px solid var(--border);padding-bottom:16px}.outline-icon{color:var(--subtle);font-size:20px;line-height:1}.info-list{margin:5px 22px 9px}.info-list>div{display:flex;justify-content:space-between;gap:16px;padding:9px 0;font-size:11px}.info-list dt{color:var(--muted);white-space:nowrap}.info-list dd{margin:0;text-align:right;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.wan-traffic{border-top:1px solid var(--border);margin:0 22px;padding:12px 0 15px;display:flex;justify-content:space-between;gap:12px;font-size:10px;color:var(--subtle)}.wan-traffic>div{display:flex;gap:10px}.wan-traffic b{font-weight:500}.system-charts{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.system-charts .card-heading{padding:17px 22px;border-bottom:1px solid var(--border)}.chart-number{font-size:14px;font-variant-numeric:tabular-nums}.small-chart{padding:14px 10px 5px;max-height:210px}
.count-tag{color:var(--muted);font-size:10px;min-width:21px;border-radius:5px;background:#242a35;padding:1px 6px;font-weight:400}.device-preview .card-heading{border-bottom:1px solid var(--border)}.preview-device{display:grid;grid-template-columns:minmax(150px,1fr) 150px 150px;gap:20px;padding:15px 22px;align-items:center;border-bottom:1px solid #242934}.preview-device:last-child{border:0}.device-identity{display:flex;align-items:center;gap:12px;min-width:0}.device-avatar{width:34px;height:38px;display:grid;place-items:center;border:1px solid #383244;background:#241f31;color:#c1aceb;border-radius:8px;flex:none}.device-avatar svg{width:18px;height:20px;stroke:currentColor;fill:none;stroke-width:1.6}.device-name{display:block;font-size:12px;font-weight:500;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-address{color:var(--subtle);font-size:10px;display:block;margin-top:2px;font-family:Consolas,"SFMono-Regular",monospace}.preview-speed{font-size:12px;font-variant-numeric:tabular-nums}.preview-speed small{display:block;color:var(--subtle);font-size:9px;margin-bottom:1px}.empty-preview{padding:29px 22px;color:var(--subtle);font-size:12px;text-align:center}.device-summary{display:flex;gap:38px;margin-bottom:25px;padding:21px 2px 24px;border-bottom:1px solid var(--border);flex-wrap:wrap}.device-summary>div{padding-right:38px;border-right:1px solid var(--border);color:var(--subtle);font-size:11px}.device-summary>div:last-child{border:0}.summary-label{display:block;font-size:11px;color:var(--muted);margin-bottom:7px}.device-summary strong{font-size:28px;font-weight:500;letter-spacing:-1px;color:var(--text);margin-right:8px;font-variant-numeric:tabular-nums}.device-summary .smaller{font-size:18px;letter-spacing:-.4px;display:inline-block}.device-tools input{max-width:270px;font-size:11px;padding:9px 12px}.table-scroll{overflow-x:auto}.devices-table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}.devices-table th{font-size:10px;color:var(--subtle);font-weight:500;background:#181c25;padding:12px 18px;white-space:nowrap;border-block:1px solid var(--border)}.devices-table td{padding:21px 18px;border-bottom:1px solid var(--border);vertical-align:middle;font-variant-numeric:tabular-nums;white-space:nowrap}.devices-table th:first-child,.devices-table td:first-child{padding-left:22px;min-width:220px}.devices-table tr:last-child td{border-bottom:0}.devices-table tr:hover td{background:#191d25}.sub-value{display:block;font-size:10px;color:var(--subtle);margin-top:3px}.share-cell{min-width:110px}.share-cell span{display:block;margin-bottom:7px;font-size:10px;color:var(--muted)}progress{display:block;width:80px;height:4px;appearance:none;border:none;border-radius:4px;overflow:hidden;background:#292d38;color:var(--purple)}progress::-webkit-progress-bar{background:#292d38}progress::-webkit-progress-value{background:var(--purple);border-radius:4px}progress::-moz-progress-bar{background:var(--purple);border-radius:4px}.table-note{padding:15px 22px;border-top:1px solid var(--border);font-size:10px;line-height:1.8;color:var(--subtle)}.empty-state{text-align:center;padding:55px 20px;color:var(--subtle)}.empty-state h3{font-size:14px;font-weight:500;color:var(--muted);margin:12px 0 6px}.empty-state p{font-size:12px}.empty-icon{font-size:40px;color:#50596d}
.settings-form{max-width:950px}.vpn-setting{margin-bottom:20px}.vpn-setting .card-heading{padding:23px}.switch{margin:0;position:relative;display:inline-flex;width:42px;height:24px;flex:none}.switch input{position:absolute;width:100%;height:100%;opacity:0;z-index:1;margin:0;cursor:pointer}.switch>span{position:absolute;inset:0;background:#414653;border-radius:30px;transition:background .2s}.switch>span::after{content:"";position:absolute;left:3px;top:3px;width:18px;height:18px;border-radius:50%;background:white;transition:transform .2s}.switch input:checked+span{background:#9c83ec}.switch input:checked+span::after{transform:translateX(18px)}.switch input:focus-visible+span{outline:2px solid var(--purple);outline-offset:4px}.mode-explanation{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--border);padding:23px;gap:28px}.mode-explanation>div{display:flex;align-items:flex-start;gap:12px}.mode-symbol{font-size:23px;color:var(--purple);line-height:1.3}.mode-explanation strong{font-size:12px;font-weight:500}.mode-explanation p{font-size:11px;color:var(--muted);margin-top:4px;line-height:1.8}.bypass-setting{padding:0 23px 23px}.bypass-setting .card-heading{padding:23px 0}.bypass-setting label{font-size:11px}.bypass-setting .hint{margin-top:10px;font-size:11px}.preview{border:1px solid #39324b;background:#201d2b;border-radius:8px;padding:13px 16px;margin-top:18px;font-size:11px;color:#cfc0ee}.preview ul{padding-left:16px;margin:8px 0 0;overflow-wrap:anywhere}.settings-actions{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:22px 0}.settings-footnote{font-size:10px;color:var(--subtle);line-height:1.8;max-width:680px}.page-footer{display:flex;justify-content:space-between;gap:15px;color:var(--subtle);font-size:10px;padding:30px 0 22px}.page-footer>span:first-child{display:flex;align-items:center;gap:7px}.page-footer .status-dot{width:4px;height:4px;background:#65725f}
.login-screen{min-height:100dvh;display:grid;place-items:center;padding:30px 20px;background:radial-gradient(ellipse at 50% 10%,#27203077,transparent 55%),var(--bg)}.login-card{width:min(420px,100%);padding:35px;background:var(--panel);border:1px solid var(--border);border-radius:16px;box-shadow:0 25px 80px #0003}.login-card>.brand-mark{width:48px;height:48px;font-size:28px;margin-bottom:28px}.login-card .eyebrow{font-size:9px;margin-bottom:10px}.login-card h1{font-size:25px;font-weight:600;letter-spacing:-.7px}.login-description{font-size:12px;color:var(--muted);margin:12px 0 28px;line-height:1.8}.login-card .primary{width:100%;margin-top:19px;justify-content:space-between;min-height:45px}.login-foot{margin-top:22px;color:var(--subtle);font-size:10px;display:flex;align-items:center;justify-content:center;gap:7px}.login-card label{font-size:11px}
@media(min-width:1680px){.workspace{margin-inline:auto;padding-left:258px;max-width:1740px}}
@media(max-width:1190px){.sidebar{width:190px;padding:26px 12px}.workspace{margin-left:190px;padding:0 25px}.brand{font-size:15px}.brand-sub{font-size:7px}.metric-card{padding:16px}.metrics-grid{gap:12px}.metric-main strong{font-size:29px}.ring{width:36px;height:36px}.metric-unit{font-size:11px;margin-left:5px}.speed-pair strong{font-size:20px}.overview-grid{grid-template-columns:minmax(0,1.6fr) minmax(240px,1fr);gap:16px}.card-heading{padding:18px}.chart-legend{padding-inline:18px;gap:14px}.preview-device{grid-template-columns:minmax(150px,1fr) 115px 115px;gap:14px}.sidebar-bottom .mini-label{display:none}}
@media(max-width:980px){.metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.metric-card{padding:18px 20px}.metric-main strong{font-size:33px}.ring{width:42px;height:42px}.speed-pair strong{font-size:24px}.overview-grid{grid-template-columns:1fr}.board-panel .info-list{display:grid;grid-template-columns:1fr 1fr;gap:0 30px}.board-panel .wan-traffic{justify-content:flex-start;gap:22px}.system-charts{gap:15px}.preview-device{grid-template-columns:minmax(140px,1fr) 100px 100px;gap:10px}.device-summary{gap:18px}.device-summary>div{padding-right:18px}.mode-explanation{grid-template-columns:1fr;gap:20px}}
@media(max-width:720px){.sidebar{position:sticky;top:0;width:auto;height:auto;padding:12px 16px 0;border-right:0;border-bottom:1px solid var(--border);background:#101219fa;backdrop-filter:blur(14px)}.sidebar .brand{font-size:14px;padding:0;gap:8px}.brand-mark{width:28px;height:28px;font-size:17px;border-radius:8px}.brand-sub,.nav-caption,.sidebar-bottom{display:none}.sidebar nav{display:flex;gap:10px;margin-top:11px}.nav-item{width:auto;flex:1;justify-content:center;gap:7px;font-size:11px;padding:10px 4px;border-radius:7px 7px 0 0;margin:0;min-height:39px;border-bottom:0}.nav-item svg{width:14px;height:14px}.nav-count{margin-left:1px;font-size:9px;line-height:17px;min-width:16px}.nav-item.active{border-color:transparent;background:#242032}.workspace{margin:0;padding:0 16px}.topbar{height:49px;margin-bottom:20px}.breadcrumb{font-size:10px;gap:10px}.button.quiet{min-height:34px;font-size:11px}.page-heading{gap:10px;margin-bottom:21px;align-items:flex-start}.page-heading h1{font-size:23px;margin:3px 0}.page-heading>div>p:last-child{font-size:10px;max-width:230px}.eyebrow{font-size:8px;letter-spacing:1.5px}.heading-status{gap:7px;padding-top:7px}.badge{font-size:9px;padding:4px 7px}.update-label{font-size:8px}.metrics-grid{gap:10px;margin-bottom:16px}.metric-card{padding:15px}.metric-label{font-size:10px}.metric-icon{font-size:8px}.metric-main{min-height:65px}.metric-main strong{font-size:30px}.ring{width:35px;height:35px}.metric-detail{font-size:9px}.speed-pair{gap:8px;min-height:65px}.speed-pair>div+div{padding-left:9px}.speed-pair strong{font-size:21px}.speed-label{font-size:8px}.people-glyph{font-size:32px}.overview-grid{gap:16px;margin-bottom:16px}.card{border-radius:10px}.card-heading{padding:16px}.card-heading h2{font-size:12px}.card-heading p{font-size:10px}.card-heading select{font-size:10px;padding:6px 22px 6px 8px}.chart-legend{padding:0 16px 10px;font-size:9px;gap:16px}.chart-legend b{font-size:10px}.chart-legend .legend-unit{font-size:8px}.large-chart{min-height:160px;padding:0 5px}.chart-footer{font-size:9px;padding:11px 16px}.info-list{margin-inline:16px}.board-panel .info-list{gap:0 22px}.info-list>div{font-size:10px;padding:8px 0;gap:6px}.board-panel .card-heading{padding:16px}.board-panel .wan-traffic{font-size:9px;margin:0 16px}.system-charts{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}.system-charts .card-heading{padding:13px 12px;gap:4px}.system-charts h2{font-size:10px;gap:5px}.chart-number{font-size:12px}.small-chart{min-height:105px;padding:8px 2px 5px}.small-chart .chart-axis{font-size:19px}.preview-device{grid-template-columns:minmax(120px,1fr) 74px 74px;gap:8px;padding:13px 15px}.device-identity{gap:9px}.device-avatar{width:27px;height:33px;border-radius:6px}.device-name{font-size:11px;max-width:160px}.device-address{font-size:9px}.preview-speed{font-size:10px}.preview-speed small{font-size:8px}.text-button{font-size:10px}.page-footer{font-size:8px;padding:23px 0 20px;gap:10px}.device-summary{gap:17px;padding:4px 0 18px}.device-summary>div{padding-right:17px;font-size:10px}.device-summary>div:last-child{width:100%}.summary-label{font-size:10px;margin-bottom:4px}.device-summary strong{font-size:26px}.device-summary .smaller{font-size:16px}.device-tools{align-items:flex-start;flex-direction:column;gap:13px}.device-tools input{max-width:none}.table-note{font-size:9px;padding:13px 16px}.devices-table th,.devices-table td{padding-inline:14px}.devices-table th:first-child,.devices-table td:first-child{padding-left:16px;min-width:190px}.vpn-setting .card-heading{padding:18px}.mode-explanation{padding:18px}.bypass-setting{padding:0 18px 18px}.bypass-setting .card-heading{padding:20px 0}.settings-actions{align-items:flex-start;gap:12px}.settings-actions .hint{font-size:10px;max-width:180px}.settings-actions .primary{min-height:39px;padding:8px 12px;font-size:12px;gap:14px}.settings-footnote{font-size:9px}.notice{right:16px;bottom:16px;font-size:12px}.login-card{padding:29px}.login-card h1{font-size:23px}}
@media(max-width:380px){.workspace{padding:0 12px}.sidebar{padding-inline:12px}.metric-card{padding:12px}.metric-main strong{font-size:27px}.ring{width:30px;height:30px}.metric-icon{display:none}.speed-pair strong{font-size:19px}.page-heading h1{font-size:21px}.heading-status .update-label{max-width:90px;text-align:right}.preview-device{grid-template-columns:minmax(106px,1fr) 68px 68px}.device-avatar{display:none}.board-panel .info-list{grid-template-columns:1fr}.system-charts{grid-template-columns:1fr}.small-chart{max-height:180px}.small-chart .chart-axis{font-size:12px}.page-footer{flex-direction:column;gap:6px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;scroll-behavior:auto!important}}
.data-stale .metric-main,.data-stale .speed-pair{opacity:.55}@media(max-width:720px){.table-scroll{overflow:visible}.devices-table,.devices-table tbody{display:block}.devices-table thead{display:none}.devices-table tr{display:grid;grid-template-columns:1fr 1fr;gap:0 20px;padding:0 18px 15px;border-bottom:1px solid var(--border)}.devices-table tr:last-child{border-bottom:0}.devices-table td{display:block;border:0;padding:10px 0;font-size:12px;white-space:normal}.devices-table td:first-child{grid-column:1/-1;min-width:0;padding:19px 0 10px}.devices-table td::before{content:attr(data-label);display:block;color:var(--subtle);font-size:10px;margin-bottom:5px}.devices-table td:first-child::before{display:none}.devices-table .device-name{font-size:13px}.devices-table .device-address{font-size:10px}.devices-table .share-cell{min-width:0}.devices-table progress{width:90%;max-width:130px}.devices-table .device-avatar{display:grid}.devices-table tr:hover td{background:none}}

/* 2026-10-06 visual refresh: hierarchy, status clarity, and compact layouts. */
:root{
  --bg:#0a1018;
  --sidebar:#0d151f;
  --panel:#121c28;
  --panel-raised:#172535;
  --border:#2a3a4d;
  --border-soft:#1e2d3d;
  --text:#f1f6fc;
  --muted:#a9b8ca;
  --subtle:#7d91a8;
  --purple:#b9a5ff;
  --cyan:#70e4e8;
  --orange:#ffb56e;
  --green:#73e2ad;
  --danger:#ff8e9d;
  --shadow:0 16px 44px rgba(0,0,0,.22);
}

html{background:var(--bg);scroll-behavior:smooth}
body{min-width:320px;background:radial-gradient(1100px 600px at 76% -12%,rgba(86,117,177,.14),transparent 63%),var(--bg);color:var(--text)}
::selection{background:rgba(185,165,255,.3);color:#fff}
.app-shell{min-height:100dvh}
.workspace{width:min(100%,1800px);padding-inline:clamp(16px,3vw,44px)}
.sidebar{background:linear-gradient(180deg,#0e1824 0%,#0c131d 100%);box-shadow:10px 0 34px rgba(0,0,0,.12)}
.brand-mark{box-shadow:0 8px 22px rgba(255,181,110,.17)}
.nav-item{transition:background-color .18s,border-color .18s,color .18s,transform .18s}
.nav-item:hover{border-color:var(--border);transform:translateX(2px)}
.nav-item.active{box-shadow:inset 3px 0 var(--purple),0 5px 16px rgba(0,0,0,.15)}
.topbar{border-bottom-color:var(--border-soft)}
.page-heading{margin-bottom:30px}
.page-heading h1{font-size:clamp(24px,2.2vw,32px);font-weight:700;letter-spacing:-.8px}
.page-heading>div>p:last-child{color:var(--muted)}
.heading-status{min-width:150px}
.badge{border-radius:999px;padding:6px 12px;font-weight:600;letter-spacing:.1px;box-shadow:0 4px 14px rgba(0,0,0,.12)}
.badge.good{box-shadow:0 0 0 3px rgba(115,226,173,.08),0 4px 14px rgba(0,0,0,.12)}
.badge.waiting{box-shadow:0 0 0 3px rgba(255,181,110,.08),0 4px 14px rgba(0,0,0,.12)}
.status-dot{width:7px;height:7px;box-shadow:0 0 0 4px rgba(115,226,173,.1),0 0 11px rgba(115,226,173,.5)}
.status-dot.stale{box-shadow:0 0 0 4px rgba(255,181,110,.1),0 0 11px rgba(255,181,110,.45)}
.card{background:linear-gradient(145deg,rgba(23,37,53,.96),rgba(16,26,38,.98));border-color:var(--border);box-shadow:var(--shadow)}
.card-heading{padding-block:21px}
.card-heading h2{font-weight:650;letter-spacing:.05px}
.metrics-grid{gap:17px}
.metric-card{position:relative;isolation:isolate;min-height:141px;overflow:hidden;transition:border-color .18s,transform .18s,box-shadow .18s}
.metric-card::after{content:"";position:absolute;inset:auto -22px -42px auto;width:120px;height:90px;border-radius:50%;background:var(--accent,rgba(185,165,255,.08));opacity:.08;filter:blur(2px);z-index:-1}
.metric-card:nth-child(1){--accent:var(--purple);border-top:2px solid rgba(185,165,255,.7)}
.metric-card:nth-child(2){--accent:var(--cyan);border-top:2px solid rgba(112,228,232,.7)}
.metric-card:nth-child(3){--accent:var(--orange);border-top:2px solid rgba(255,181,110,.7)}
.metric-card:nth-child(4){--accent:var(--green);border-top:2px solid rgba(115,226,173,.7)}
.metric-card:hover{border-color:#3e546b;box-shadow:0 20px 48px rgba(0,0,0,.3);transform:translateY(-2px)}
.metric-label{color:#c2cedc;font-weight:550}
.metric-main strong{font-weight:700;text-shadow:0 2px 18px rgba(0,0,0,.22)}
.metric-unit{color:var(--muted)}
.metric-detail{color:var(--subtle)}
.ring-track{stroke:#263849}
.ring-fill{filter:drop-shadow(0 0 3px rgba(185,165,255,.3))}
.memory-ring .ring-fill{filter:drop-shadow(0 0 3px rgba(112,228,232,.3))}
.overview-grid,.system-charts{gap:22px}
.traffic-panel,.board-panel,.device-preview{min-width:0}
.chart-legend{padding-top:2px}
.chart-grid{stroke:#2d4055}
.chart-axis{fill:#879ab0}
.chart-footer{border-top-color:var(--border-soft);color:#879ab0}
.board-panel .card-heading,.device-preview .card-heading,.system-charts .card-heading{border-bottom-color:var(--border-soft)}
.info-list>div{border-bottom:1px solid rgba(42,58,77,.48)}
.info-list>div:last-child{border-bottom:0}
.wan-traffic{border-top-color:var(--border-soft)}
.preview-device{border-bottom-color:var(--border-soft);transition:background-color .18s}
.preview-device:hover{background:rgba(105,137,176,.08)}
.device-avatar{background:#211e36;box-shadow:inset 0 0 0 1px rgba(185,165,255,.08)}
.devices-table th{background:#172434;border-block-color:var(--border);letter-spacing:.4px;text-transform:uppercase}
.devices-table td{border-bottom-color:var(--border-soft)}
.devices-table tr:hover td{background:rgba(105,137,176,.08)}
progress{background:#263849}
progress::-webkit-progress-bar{background:#263849}
.empty-state{padding-block:64px}
.empty-icon{color:#677b91}
.notice{backdrop-filter:blur(14px);background:rgba(31,55,49,.92);border-color:#4b8269;box-shadow:0 16px 42px rgba(0,0,0,.38)}
.notice.error{background:rgba(64,35,43,.94);border-color:#a45b6c;color:#ffd8dd}
.data-stale .metric-main,.data-stale .speed-pair{opacity:.62}
.data-stale .card{border-color:#5a4d39}
.data-stale .heading-status .badge{color:var(--orange);border-color:#765b36;background:#30271c}
.data-stale .update-label{color:var(--orange)}
.settings-form{max-width:1000px}
.switch>span{box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.preview{background:rgba(45,38,68,.8);border-color:#51446f}
.button{transition:background-color .18s,border-color .18s,transform .18s,box-shadow .18s}
.button.primary{box-shadow:0 8px 20px rgba(185,165,255,.16)}
.button.primary:hover{box-shadow:0 10px 26px rgba(185,165,255,.24);transform:translateY(-1px)}
.button:active{transform:translateY(0)}
.login-screen{background:radial-gradient(700px 450px at 50% 0%,rgba(100,123,184,.2),transparent 66%),var(--bg)}
.login-card{background:linear-gradient(145deg,rgba(23,37,53,.98),rgba(14,23,34,.99));border-color:#34485d;box-shadow:0 28px 90px rgba(0,0,0,.45)}
input,textarea,select{background:#0e1824;border-color:#32465b}
input:hover,textarea:hover,select:hover{border-color:#46617c}
input:focus,textarea:focus,select:focus{border-color:var(--purple);box-shadow:0 0 0 3px rgba(185,165,255,.12)}

@media(max-width:980px){
  .workspace{padding-inline:clamp(16px,4vw,28px)}
  .metric-card{min-height:136px}
}
@media(max-width:720px){
  .sidebar{padding-top:10px;box-shadow:0 8px 24px rgba(0,0,0,.22)}
  .sidebar nav{overflow-x:auto;scrollbar-width:none;padding-bottom:0}
  .sidebar nav::-webkit-scrollbar{display:none}
  .nav-item{flex:1 0 auto;min-width:96px;transform:none!important}
  .workspace{width:100%;padding-inline:14px}
  .topbar{margin-bottom:22px}
  .page-heading{flex-wrap:wrap;align-items:flex-start}
  .heading-status{margin-left:auto;min-width:0;align-items:flex-end}
  .metrics-grid{gap:11px}
  .metric-card{min-height:132px;padding:15px 14px}
  .metric-card:hover{transform:none}
  .card{box-shadow:0 10px 30px rgba(0,0,0,.2)}
  .overview-grid,.system-charts{gap:14px}
  .system-charts .card{min-width:0}
  .devices-table tr:hover td{background:transparent}
}
@media(max-width:430px){
  .page-heading h1{font-size:22px}
  .heading-status{width:100%;flex-direction:row;justify-content:space-between;align-items:center;margin-left:0;padding-top:0}
  .metric-card{min-height:126px}
  .metric-main strong{font-size:28px}
  .speed-pair strong{font-size:20px}
  .device-summary>div{border-right:0}
}

/* 2026-10-06 status and speed hierarchy polish. Keep this layer CSS-only so
   the existing dashboard IDs/API states remain unchanged. */
#notice[data-retry="true"]{
  cursor:pointer;
  border-color:#765b36;
  box-shadow:0 12px 38px rgba(0,0,0,.42),0 0 0 3px rgba(255,181,110,.08);
}
#notice[data-retry="true"]:hover{background:rgba(64,52,31,.96);border-color:var(--orange)}
#notice[data-retry="true"]:focus-visible{outline:2px solid var(--orange);outline-offset:4px}
#login-panel[data-connection-state="connecting"] .login-foot .status-dot{background:var(--orange);box-shadow:0 0 0 4px rgba(255,181,110,.1),0 0 11px rgba(255,181,110,.45)}
#login-panel[data-connection-state="offline"] .login-foot{color:var(--orange)}
#login-panel[data-connection-state="offline"] .login-foot .status-dot{background:var(--danger);box-shadow:0 0 0 4px rgba(255,142,157,.1),0 0 11px rgba(255,142,157,.45)}
#app-panel{transition:opacity .2s ease}
#app-panel[data-connection-state="connecting"] .metric-main strong,
#app-panel[data-connection-state="connecting"] .speed-pair strong,
#app-panel[data-connection-state="connecting"] .chart-number{color:var(--muted)}
#app-panel.data-offline .status-dot,
#app-panel[data-connection-state="offline"] .device-led{background:var(--danger);box-shadow:0 0 0 4px rgba(255,142,157,.1),0 0 11px rgba(255,142,157,.45)}
#app-panel.data-offline .card{border-color:#57404b}
#app-panel.data-offline .chart,
#app-panel.data-offline .ring-fill{opacity:.42}
#app-panel.data-offline .preview-device,
#app-panel.data-offline .devices-table tbody{opacity:.68}
#app-panel.data-offline .empty-preview,
#app-panel.data-offline .empty-state{color:var(--orange)}
#app-panel.data-partial .update-label{color:var(--orange)}
#app-panel.data-partial .metric-detail{color:#bda06f}
#app-panel.data-partial .chart-empty{fill:var(--orange)}
.speed-pair{grid-template-columns:minmax(0,1fr) minmax(0,1fr);overflow:hidden}
.speed-pair>div{min-width:0;padding-block:5px}
.speed-pair strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:700}
.speed-label{font-weight:650;letter-spacing:.15px}
.devices-table td.download,.devices-table td.upload{font-size:13px;font-weight:650}
.devices-table td.download .sub-value,.devices-table td.upload .sub-value{font-weight:400}
.device-preview{min-height:164px}
.empty-preview{display:grid;place-items:center;min-height:110px;padding-block:26px}
.preview-speed{text-align:right;white-space:nowrap}

@media(prefers-reduced-motion:no-preference){
  #app-panel.data-offline .status-dot.stale{animation:ui-status-pulse 1.8s ease-in-out infinite}
}
@keyframes ui-status-pulse{
  0%,100%{opacity:1}
  50%{opacity:.42}
}
@media(max-width:720px){
  .app-shell{padding-bottom:env(safe-area-inset-bottom)}
  .login-card{width:100%;max-width:420px}
  .speed-pair strong{font-size:clamp(17px,4.8vw,21px)}
  .preview-device{grid-template-columns:minmax(0,1fr) minmax(66px,auto) minmax(66px,auto);gap:6px}
  .preview-speed{font-size:10px}
}
@media(max-width:430px){
  .metric-label{min-height:2.2em;align-items:flex-start}
  .metric-main{gap:3px}
  .speed-pair>div{padding-block:3px}
  .speed-pair strong{font-size:clamp(16px,5.5vw,20px)}
  .device-preview{min-height:150px}
}
@media(forced-colors:active){
  .card,.button,.badge,.nav-item,input,textarea,select{border:1px solid CanvasText}
  .status-dot,.device-led{background:CanvasText;box-shadow:none}
  .metric-card:hover,.nav-item:hover{transform:none}
}

/* Keep the fixed navigation column out of the document width at tablet sizes. */
@media(min-width:721px) and (max-width:1190px){
  .workspace{width:auto;margin-left:190px;padding-inline:clamp(16px,3vw,28px)}
}

/* At desktop widths the fixed sidebar is outside normal flow; let the main block use the remaining width. */
@media(min-width:721px){
  .workspace{width:auto}
}

/* 2026-10-06 narrow viewport guard: keep the login grid and touch controls
   inside 320/390px viewports without changing the desktop geometry. */
html,body{max-width:100%;overflow-x:clip}
@supports not (overflow:clip){html,body{overflow-x:hidden}}
.login-screen{width:100%;min-width:0;grid-template-columns:minmax(0,1fr);overflow-x:clip}
.login-card{min-width:0;max-width:100%}
.login-card form,.login-card input,.login-card button{min-width:0;max-width:100%}
.device-identity,.device-identity>div{min-width:0}
.device-address{overflow-wrap:anywhere;word-break:break-word}
.summary-note{display:block;margin-top:5px;color:var(--subtle);font-size:10px;line-height:1.4;max-width:180px}

@media(max-width:430px){
  .sidebar nav{gap:6px;overflow-x:visible}
  .nav-item{min-width:0;flex:1 1 0;gap:5px;padding-inline:2px}
  .nav-item svg{width:13px;height:13px}
  .settings-actions{align-items:stretch;flex-wrap:wrap;gap:10px}
  .settings-actions .hint{flex:1 1 150px;max-width:none}
  .settings-actions .primary{flex:0 0 auto}
  .summary-note{font-size:9px;max-width:150px}
}
@media(max-width:350px){
  .nav-item{font-size:10px}
  .settings-actions .primary{flex-basis:100%}
}
