:root{--bg: #f3f4f8;--ink: #25283d;--muted: #85889b;--primary: #6855d8;--panel: #ffffff;--line: #ececf3;--sidebar: #1b1d2c;--radius: 16px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;-webkit-font-smoothing:antialiased}a{text-decoration:none;color:inherit}.iot-shell{--sidebar-w: 232px;--offset: 266px;min-height:100vh;padding:14px}.iot-shell.collapsed{--sidebar-w: 78px;--offset: 112px}.iot-sidebar{position:fixed;top:14px;bottom:14px;left:14px;z-index:20;display:flex;width:var(--sidebar-w);flex-direction:column;padding:24px 14px 18px;border-radius:19px;background:var(--sidebar);color:#a1a3b8;transition:width .18s ease}.iot-brand{display:flex;align-items:center;gap:12px;color:#fff}.iot-brand-mark{display:grid;flex-shrink:0;width:38px;height:38px;place-items:center;border-radius:12px;background:linear-gradient(145deg,#6f5ce0,#3a3358);color:#e8e2ff;font-size:16px;font-weight:700}.iot-brand b{display:block;font-size:15px;font-weight:650;letter-spacing:.5px;white-space:nowrap}.iot-brand small{display:block;margin-top:4px;color:#9395ae;font-size:9px;letter-spacing:1.6px;white-space:nowrap}.iot-collapse{display:flex;align-items:center;justify-content:center;gap:8px;height:34px;margin:22px 0 4px;border:1px solid #ffffff12;border-radius:8px;background:#ffffff05;color:#a1a3b8;font:inherit;font-size:12px;cursor:pointer}.iot-collapse:hover{background:#ffffff0e;color:#fff}.iot-nav{flex:1;min-height:0;margin-top:18px;overflow-y:auto;scrollbar-width:thin}.iot-nav .caption{margin:8px 10px 10px;color:#777a92;font-size:11px;letter-spacing:1px}.iot-nav a{display:flex;align-items:center;gap:12px;margin-bottom:6px;padding:11px 12px;border-radius:10px;color:#a1a3b8;font-size:13px;white-space:nowrap}.iot-nav a:hover{background:#302e46;color:#fff}.iot-nav a.active{background:#3d365b;color:#ece6ff;box-shadow:inset 3px 0 #a18aff}.iot-nav a .anticon{font-size:16px}.iot-side-foot{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:16px;border-top:1px solid #ffffff12}.iot-side-foot>span{flex:1;min-width:0;overflow:hidden;color:#c9cbdc;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.iot-logout{width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:#b8bacd;font-size:14px;cursor:pointer}.iot-logout:hover{background:#ffffff12;color:#fff}.iot-backdrop{display:none}.iot-main{min-width:0;margin-left:var(--offset);padding:4px 4px 10px 0;transition:margin-left .18s ease}.iot-shell.collapsed .iot-brand-text,.iot-shell.collapsed .iot-collapse .collapse-label,.iot-shell.collapsed .iot-nav a .nav-label,.iot-shell.collapsed .iot-side-foot>span{display:none}.iot-shell.collapsed .iot-brand{justify-content:center}.iot-shell.collapsed .iot-collapse{padding:0}.iot-shell.collapsed .iot-nav .caption{height:1px;margin:14px 10px;overflow:hidden;background:#ffffff12;color:transparent}.iot-shell.collapsed .iot-nav a{justify-content:center;padding:11px 0;gap:0}.iot-shell.collapsed .iot-nav a .anticon{font-size:18px}.iot-shell.collapsed .iot-side-foot{justify-content:center}.iot-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px;padding:6px 2px 14px;border-bottom:1px solid var(--line);color:var(--muted);font-size:12px}.iot-topbar i{margin:0 10px;color:#b0b3c6;font-style:normal}.iot-topbar b{color:var(--ink);font-size:13px;font-weight:550}.iot-role{border-radius:999px;padding:5px 12px;background:#ecebf5;color:#5c5875;font-size:11px;white-space:nowrap}.iot-role.admin{background:#efe7ff;color:#6a4fd0}.iot-page-footer{display:flex;justify-content:space-between;gap:12px;margin:26px 2px 6px;color:#a7a9b9;font-size:11px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:26px 2px 20px;flex-wrap:wrap}.page-head .eyebrow{color:#9092a8;font-size:10px;letter-spacing:2px;text-transform:uppercase}.page-head h1{margin:9px 0 5px;color:var(--ink);font-size:29px;font-weight:600;letter-spacing:-1px}.page-head p{margin:0;color:var(--muted);font-size:12px;line-height:1.7}.page-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.metric{display:flex;flex-direction:column;gap:12px;min-height:132px;padding:19px 18px 16px;border-radius:var(--radius);background:var(--panel);box-shadow:0 3px 10px #21244305}.metric.clickable{cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.metric.clickable:hover{transform:translateY(-2px);box-shadow:0 10px 24px #21244312}.metric .label{display:flex;align-items:center;justify-content:space-between;color:#777b90;font-size:12px}.metric .label .anticon{color:#a9a4c6;font-size:15px}.metric strong{color:var(--ink);font-size:31px;font-weight:600;line-height:1;letter-spacing:-1.2px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metric small{color:#9497a9;font-size:11px}.metric.dark{position:relative;overflow:hidden;background:#252338;color:#fff}.metric.dark .label,.metric.dark small{color:#cec8e2}.metric.dark strong{color:#fff}.metric.dark:after{position:absolute;top:-76px;right:-26px;width:122px;height:122px;border-radius:50%;background:#484064;opacity:.32;content:""}.panel{border-radius:var(--radius);background:var(--panel);padding:18px;box-shadow:0 3px 10px #21244305}.panel+.panel{margin-top:18px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:2px 2px 14px;flex-wrap:wrap}.panel-head h2{margin:0;color:var(--ink);font-size:15px;font-weight:600}.panel-head span{color:var(--muted);font-size:12px}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.iot-main .ant-table-wrapper{padding:6px 14px 12px;border-radius:var(--radius);background:var(--panel);box-shadow:0 3px 10px #21244305}.panel .ant-table-wrapper,.iot-main .ant-card .ant-table-wrapper,.iot-main .ant-tabs .ant-table-wrapper{padding:0;border-radius:0;background:transparent;box-shadow:none}.iot-main .ant-table-wrapper .ant-table{background:transparent;font-size:13px}.iot-main .ant-table-thead>tr>th{background:#f7f7fb;color:#777b90;border-bottom:1px solid var(--line);font-size:12px;font-weight:500}.iot-main .ant-table-thead>tr>th:first-child{border-start-start-radius:8px}.iot-main .ant-table-thead>tr>th:last-child{border-start-end-radius:8px}.iot-main .ant-table-tbody>tr>td{border-bottom:1px solid #f2f2f7;white-space:nowrap}.iot-main .ant-table-tbody>tr:hover>td{background:#faf9fe}.iot-main .ant-table-pagination.ant-pagination{margin:16px 0 2px}.iot-main .ant-card{border:0;border-radius:var(--radius);box-shadow:0 3px 10px #21244305}.iot-main .ant-card-head{border-bottom:1px solid var(--line);font-size:15px}.iot-main .ant-btn{box-shadow:none}.iot-main .ant-btn-primary{background:var(--primary);box-shadow:0 4px 10px #6855d826}.iot-main .ant-tag{border-radius:6px;font-size:11px}.iot-main .ant-modal-content,.iot-main .ant-drawer-content{border-radius:16px}.iot-main .ant-drawer-content{border-radius:16px 0 0 16px}.iot-main .ant-empty-description{color:var(--muted);font-size:12px}.login-shell{display:grid;min-height:100vh;grid-template-columns:1.05fr 1fr}.login-story{display:flex;flex-direction:column;justify-content:space-between;min-height:100vh;padding:56px 60px;background:radial-gradient(ellipse 70% 55% at 78% 12%,#4a3f78 0%,transparent 60%),#252338;color:#fff}.login-story .brand{display:flex;align-items:center;gap:12px;font-size:14px;font-weight:600;letter-spacing:.5px}.login-story .brand-mark{display:grid;width:40px;height:40px;place-items:center;border-radius:12px;background:#38324f;color:#d6d0ff;font-size:17px}.login-story h1{margin:20px 0 16px;font-size:42px;font-weight:500;line-height:1.45;letter-spacing:-1px}.login-story h1 em{color:#b9a9ff;font-style:normal}.login-story p{max-width:460px;margin:0;color:#b3aec7;font-size:13px;line-height:1.9}.login-story ul{margin:30px 0 0;padding:0;list-style:none}.login-story li{display:flex;align-items:center;gap:10px;margin-bottom:12px;color:#cfc9e2;font-size:12px}.login-story li span{display:grid;width:22px;height:22px;place-items:center;border-radius:7px;background:#ffffff10;color:#d9ceff;font-size:11px}.login-story footer{color:#8d879f;font-size:11px;letter-spacing:.5px}.login-form-wrap{display:flex;align-items:center;justify-content:center;padding:40px 32px;background:var(--bg)}.pwd-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px;background:var(--bg)}.login-form-card{width:356px;padding:32px 30px 26px;border-radius:20px;background:#fff;box-shadow:0 18px 50px #2124430f}.login-form-card h2{margin:0 0 6px;font-size:24px;font-weight:600;letter-spacing:-.6px}.login-form-card>.hint{margin:0 0 26px;color:var(--muted);font-size:12px}.login-form-card .ant-form-item-label>label{color:#555b75;font-size:12px;font-weight:500}.login-form-card .ant-btn-primary{height:44px;margin-top:4px;border-radius:11px;font-size:14px;font-weight:600}.login-note{margin:18px 0 0;color:#a0a3b5;font-size:11px;text-align:center;line-height:1.7}@media (max-width: 1200px){.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 900px){.iot-shell,.iot-shell.collapsed{--offset: 92px}.iot-shell{padding:10px}.iot-shell:not(.collapsed){--sidebar-w: 232px;--offset: 92px}.iot-sidebar{top:10px;bottom:10px;left:10px}.iot-main{padding-right:0}.iot-shell:not(.collapsed) .iot-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:19;display:block;border:0;background:#17162766}.page-head h1{font-size:25px}.iot-page-footer{flex-direction:column;gap:4px}}@media (max-width: 720px){.metrics,.login-shell{grid-template-columns:1fr}.login-story{display:none}}
