:root{font-family:Inter,Microsoft YaHei,sans-serif;color:#172033;background:#f3f6fb}*{box-sizing:border-box}body{margin:0;min-width:1080px}button,input,select,textarea{font:inherit}.login-page{min-height:100vh;display:grid;place-items:center;background:linear-gradient(145deg,#eef4ff,#f8faff)}.login-card{width:420px;padding:34px;display:grid;gap:18px;background:#fff;border:1px solid #e3e8f2;border-radius:16px;box-shadow:0 18px 55px #1428501f}.login-card .login-brand{color:#172033;padding:0 0 10px}.login-card>p{color:#74809a}.login-card>input{width:100%;border:1px solid #dce2ec;border-radius:8px;padding:12px}.login-card .error{padding:10px 12px}.header-actions{display:flex;gap:10px}.header-actions>button:not(.primary){padding:10px 17px;color:#526078;background:#e9edf4}.shell{min-height:100vh;display:grid;grid-template-columns:220px 1fr}aside{background:#101b35;color:#fff;padding:28px 18px}.brand{display:flex;align-items:center;gap:11px;padding:0 10px 30px}.brand span{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:#3578f6;font-weight:800}.brand strong{font-size:18px}nav{display:grid;gap:5px;margin-bottom:20px}nav a{color:#9eabc7;padding:12px 15px;border-radius:9px;cursor:pointer}nav a.active{color:#fff;background:#263654}.nav-title{padding:0 15px 7px;color:#63718f;font-size:12px}nav a.planned{display:flex;justify-content:space-between;align-items:center}nav a i{padding:2px 6px;border-radius:7px;color:#73809c;background:#182642;font-size:11px;font-style:normal}main{padding:30px 36px;overflow:hidden}header,.toolbar{display:flex;align-items:center;justify-content:space-between}h1,h2,p{margin:0}h1{font-size:25px}header p{margin-top:7px;color:#74809a}button{border:0;border-radius:8px;cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}.primary{padding:10px 17px;background:#2368e8;color:#fff}.metrics{display:grid;grid-template-columns:repeat(4,minmax(160px,230px));gap:18px;margin:28px 0 22px}.metrics article,.panel{background:#fff;border:1px solid #e3e8f2;box-shadow:0 8px 30px #1428500d;border-radius:13px}.metrics article{padding:20px 22px}.metrics label{display:block;color:#7b879e;font-size:14px;margin-bottom:8px}.metrics b{font-size:30px}.metrics b.online{color:#16a36a}.panel{overflow:hidden}.toolbar{padding:20px 22px;border-bottom:1px solid #e9edf4}.toolbar h2{font-size:18px}.toolbar small{display:block;color:#8994a8;margin-top:4px}.toolbar input{width:260px;border:1px solid #dce2ec;border-radius:8px;padding:10px 12px;outline:none}.filters{display:flex;gap:10px}.filters select{border:1px solid #dce2ec;border-radius:8px;padding:10px 12px;color:#526078;background:#fff}.toolbar input:focus{border-color:#3578f6;box-shadow:0 0 0 3px #3578f61a}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:14px}th{color:#758198;font-weight:600;background:#f9fafc;text-align:left}th,td{padding:15px 18px;border-bottom:1px solid #edf0f5}.mono{font-family:Consolas,monospace}.topic{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-id{display:block;margin-top:5px;color:#8a94a7;font-family:Consolas,monospace}.status{color:#8a94a7;background:#eef1f5;padding:5px 10px;border-radius:14px}.status.up{color:#08794c;background:#ddf8eb}.link{color:#2368e8;background:#eaf1ff;padding:7px 11px}.link.disconnect{color:#b42318;background:#fff0ee}.link.neutral{color:#526078;background:#eef1f5}.actions{white-space:nowrap}.actions button+button{margin-left:7px}.empty{text-align:center;color:#8a94a7;padding:45px}.error{color:#b42318;background:#fff0ee;padding:12px 20px}.notice{color:#18744a;background:#eaf8f0;padding:12px 20px}.drawer-mask{position:fixed;inset:0;z-index:20;display:flex;justify-content:flex-end;background:#0f1b3557}.drawer{width:520px;height:100%;padding:26px;overflow-y:auto;background:#fff;box-shadow:-15px 0 45px #1428502e}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding-bottom:22px;border-bottom:1px solid #e9edf4}.drawer-head small{display:block;margin-top:6px;color:#8994a8;font-family:Consolas,monospace}.drawer-head button{padding:8px 12px;color:#526078;background:#eef1f5}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:22px 0}.detail-grid label{padding:13px;border:1px solid #e5e9f1;border-radius:9px;color:#7b879e;font-size:13px}.detail-grid strong{display:block;margin-top:7px;color:#172033;font-size:14px;word-break:break-all}.detail-grid .wide{grid-column:1 / -1}.detail-grid pre{max-height:150px;margin:8px 0 0;overflow:auto;color:#172033;white-space:pre-wrap;word-break:break-all;font:13px/1.5 Consolas,monospace}.capability,.command-box{margin-top:22px}.capability h3,.command-box h3{margin:0 0 12px;font-size:16px}.capability span{display:inline-block;margin:0 7px 7px 0;padding:6px 9px;border-radius:8px;color:#2368e8;background:#eaf1ff;font-size:13px}.command-box p{margin-bottom:10px;color:#74809a;font-size:13px;line-height:1.6}.command-box textarea{width:100%;padding:12px;resize:vertical;border:1px solid #dce2ec;border-radius:8px;font-family:Consolas,monospace;outline:none}.command-box textarea:focus{border-color:#3578f6;box-shadow:0 0 0 3px #3578f61a}.command-box button{margin-top:12px}.command-page{margin-top:28px}.command-content{max-width:340px}.command-content small{display:block;overflow:hidden;color:#8994a8;text-overflow:ellipsis;white-space:nowrap}.command-content pre,.recent-commands pre{margin:6px 0 0;white-space:pre-wrap;word-break:break-all;font:12px/1.5 Consolas,monospace}.command-status{display:inline-block;padding:5px 9px;border-radius:12px;color:#526078;background:#eef1f5;white-space:nowrap}.command-status.pending{color:#9a6700;background:#fff4ce}.command-status.success{color:#08794c;background:#ddf8eb}.command-status.failed,.command-status.timeout{color:#b42318;background:#fff0ee}.command-status.published{color:#2368e8;background:#eaf1ff}.recent-commands{margin-top:25px}.recent-commands h3{margin:0 0 12px;font-size:16px}.recent-commands>div{margin-bottom:9px;padding:11px;border:1px solid #e5e9f1;border-radius:8px}.recent-commands time{margin-left:9px;color:#8994a8;font-size:12px}.recent-commands p{margin-top:6px;color:#526078;font-size:13px}.image-result{margin-top:22px;padding-top:20px;border-top:1px solid #e9edf4}.image-result h3{margin:0;font-size:16px}.image-result .detail-grid{margin-bottom:0}.empty-result{margin-top:14px;padding:16px;color:#8994a8;text-align:center;background:#f7f9fc;border-radius:9px}
