:root{
  --bg:#f4f7fa;--panel:#fff;--line:#e6ebf0;--text:#263342;--muted:#7f8c9a;
  --nav:#243746;--nav2:#2d4252;--blue:#1687d9;--blue2:#0f74bd;--green:#2fb171;
  --danger:#e45b5b;--shadow:0 8px 28px rgba(25,46,66,.08)
}
*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{font-family:Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text)}
button,input,select{font:inherit}.hidden{display:none!important}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}
.login-page{min-height:100%;display:grid;grid-template-columns:minmax(420px,44%) 1fr;background:#eef4f7}
.login-side{position:relative;overflow:hidden;background:linear-gradient(150deg,#173445,#245a70 55%,#1d485d);color:white;padding:58px}
.login-side:after{content:"";position:absolute;width:560px;height:560px;border:1px solid rgba(255,255,255,.12);border-radius:50%;right:-210px;bottom:-220px;box-shadow:0 0 0 70px rgba(255,255,255,.035),0 0 0 140px rgba(255,255,255,.025)}
.brand{font-size:26px;font-weight:700;letter-spacing:.5px}.brand small{display:block;font-size:12px;font-weight:500;opacity:.7;letter-spacing:2px;margin-top:6px}
.login-copy{position:absolute;left:58px;right:58px;bottom:80px;z-index:2}.login-copy h2{font-size:38px;line-height:1.12;margin:0 0 18px}.login-copy p{max-width:480px;line-height:1.7;color:rgba(255,255,255,.72)}
.login-main{display:grid;place-items:center;padding:36px}.login-card{width:min(430px,100%);background:white;padding:42px;border-radius:10px;box-shadow:var(--shadow)}
.login-card h1{font-size:25px;margin:0 0 8px}.login-card .subtitle{color:var(--muted);font-size:14px;margin-bottom:28px}
.field{margin-bottom:18px}.field label{display:block;font-size:13px;color:#5b6875;margin-bottom:8px}.field input{width:100%;height:44px;border:1px solid #d9e0e6;border-radius:5px;padding:0 13px;outline:none}.field input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(22,135,217,.1)}
.primary{width:100%;height:44px;border:0;border-radius:5px;background:var(--blue);color:#fff;font-weight:600;cursor:pointer}.primary:hover{background:var(--blue2)}.primary:disabled{opacity:.55;cursor:not-allowed}
.login-error{margin:14px 0 0;font-size:13px;color:var(--danger);min-height:18px}.login-note{margin-top:22px;border-top:1px solid var(--line);padding-top:16px;color:#8b98a5;font-size:12px;line-height:1.5}
.shell{height:100%;display:grid;grid-template-rows:58px 1fr;grid-template-columns:220px 1fr;grid-template-areas:"top top" "side main"}
.topbar{grid-area:top;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 18px 0 22px;z-index:10}
.topbrand{font-size:18px;font-weight:700;color:#1c3444;min-width:198px}.topbrand span{font-weight:400;color:#6d7e8a;font-size:11px;margin-left:7px}
.topnav{display:flex;gap:2px;height:100%;align-items:center}.topnav a{text-decoration:none;color:#53626f;padding:20px 16px 18px;font-size:13px;border-bottom:2px solid transparent}.topnav a.active{color:var(--blue);border-bottom-color:var(--blue)}
.top-actions{margin-left:auto;display:flex;align-items:center;gap:14px}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--green);display:inline-block;margin-right:6px}.user-chip{font-size:13px;color:#5c6a76}.logout-btn{border:1px solid #d9e0e6;background:white;border-radius:5px;padding:7px 11px;cursor:pointer;color:#53626f}
.sidebar{grid-area:side;background:var(--nav);color:#c9d2d8;padding:12px 0;overflow:auto}.side-title{font-size:10px;text-transform:uppercase;letter-spacing:1.4px;color:#7f95a5;padding:14px 22px 8px}.menu-item{display:flex;align-items:center;gap:11px;padding:12px 20px;color:#c7d0d6;text-decoration:none;font-size:13px;border-left:3px solid transparent}.menu-item:hover{background:rgba(255,255,255,.04)}.menu-item.active{background:var(--nav2);color:#fff;border-left-color:#27a5ef}.menu-icon{width:18px;text-align:center;opacity:.9}
.main{grid-area:main;min-width:0;overflow:auto;padding:18px}.page-head{display:flex;align-items:center;margin-bottom:14px}.page-head h1{font-size:20px;margin:0;font-weight:600}.page-head .crumb{font-size:12px;color:#91a0ab;margin-left:12px}.page-actions{margin-left:auto;display:flex;gap:8px}
.btn{height:34px;padding:0 13px;border-radius:4px;border:1px solid #d6dee5;background:#fff;color:#53626f;cursor:pointer;font-size:12px}.btn:hover{border-color:#9eb4c4}.btn.blue{background:var(--blue);border-color:var(--blue);color:white}.btn.ghost-danger{color:var(--danger)}.btn:disabled{opacity:.45;cursor:not-allowed}
.card{background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:0 2px 8px rgba(22,45,65,.03)}.toolbar{display:flex;align-items:center;gap:9px;padding:12px}.search{height:34px;border:1px solid #d7dfe6;border-radius:4px;padding:0 11px;width:240px;outline:none}.search:focus{border-color:var(--blue)}.select{height:34px;border:1px solid #d7dfe6;border-radius:4px;background:white;padding:0 9px;color:#52616e}
.plot-grid{display:grid;grid-template-columns:340px 1fr;height:calc(100vh - 168px);min-height:520px;border-top:1px solid var(--line)}.plot-list{border-right:1px solid var(--line);overflow:auto;background:#fff}.list-summary{display:flex;justify-content:space-between;padding:10px 14px;color:#82909b;font-size:12px;border-bottom:1px solid #eef2f5}.plot-row{padding:12px 14px;border-bottom:1px solid #edf1f4;cursor:pointer}.plot-row:hover{background:#f8fbfd}.plot-row.active{background:#edf7fe;border-left:3px solid var(--blue);padding-left:11px}.plot-name{font-size:13px;font-weight:600;color:#32414d;margin-bottom:7px}.plot-meta{display:flex;flex-wrap:wrap;gap:7px 12px;font-size:11px;color:#8795a0}.plot-id{color:#a0abb4}.map-wrap{position:relative;background:#e8eef1}.map{position:absolute;inset:0}.map-empty{position:absolute;z-index:500;top:14px;left:50%;transform:translateX(-50%);background:rgba(255,255,255,.94);border:1px solid #dce4e9;border-radius:5px;padding:8px 12px;font-size:12px;color:#61717e;box-shadow:0 2px 10px rgba(0,0,0,.08)}
.detail-panel{position:absolute;z-index:600;right:14px;top:14px;width:300px;background:white;border-radius:6px;box-shadow:0 7px 28px rgba(17,38,54,.18);overflow:hidden}.detail-head{padding:13px 14px;border-bottom:1px solid var(--line);font-size:13px;font-weight:700;display:flex;justify-content:space-between}.detail-body{padding:13px 14px;font-size:12px}.kv{display:grid;grid-template-columns:100px 1fr;gap:7px;margin-bottom:8px}.kv b{color:#7a8995;font-weight:500}.kv span{word-break:break-word}
.empty{padding:35px 20px;text-align:center;color:#95a2ac;font-size:13px}.loader{padding:35px 20px;text-align:center;color:#758896}.spinner{width:22px;height:22px;border:2px solid #dce5eb;border-top-color:var(--blue);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 10px}@keyframes spin{to{transform:rotate(360deg)}}
.compat-banner{background:#fff8e8;border:1px solid #f0d69b;color:#8a6720;border-radius:5px;padding:9px 12px;font-size:12px;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between}.compat-banner b{font-weight:700}
.module-card{padding:18px}.module-card h3{font-size:15px;margin:0 0 12px}.probe-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.probe-item{border:1px solid var(--line);border-radius:6px;padding:13px;background:#fafcfd}.probe-item.ok{border-color:#b9dfcb;background:#f3fbf6}.probe-item.bad{border-color:#efc2c2;background:#fff7f7}.probe-name{font-weight:600;font-size:13px;margin-bottom:7px}.probe-status{font-size:12px;color:#6f7e89}.jsonbox{margin-top:12px;background:#17232c;color:#cfe3ef;border-radius:5px;padding:12px;font:11px/1.5 ui-monospace,monospace;white-space:pre-wrap;max-height:330px;overflow:auto}
.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table th,.data-table td{text-align:left;border-bottom:1px solid #edf1f4;padding:10px}.data-table th{color:#788793;background:#fafcfd;font-weight:600;position:sticky;top:0}.table-wrap{max-height:calc(100vh - 235px);overflow:auto}
.toast{position:fixed;right:20px;bottom:20px;z-index:9999;padding:11px 15px;background:#263b49;color:#fff;border-radius:5px;box-shadow:var(--shadow);font-size:13px}.toast.error{background:#b84545}
@media(max-width:900px){.shell{grid-template-columns:64px 1fr}.sidebar .menu-text,.side-title{display:none}.menu-item{justify-content:center;padding:14px 8px}.topnav{display:none}.plot-grid{grid-template-columns:280px 1fr}.topbrand{min-width:0}.login-page{grid-template-columns:1fr}.login-side{display:none}}

