:root{--iot-bg:#f5f7fa;--iot-bg-subtle:#eef3f6;--iot-surface:#fff;--iot-surface-muted:#f7fafc;--iot-surface-raised:#fff;--iot-text:#18212f;--iot-text-muted:#657285;--iot-text-subtle:#8a96a8;--iot-border:rgba(111,126,145,.2);--iot-border-strong:rgba(82,97,117,.28);--iot-sidebar:#f8fbfd;--iot-sidebar-active:#e7f5f2;--iot-primary:#0f766e;--iot-primary-hover:#115e59;--iot-primary-active:#134e4a;--iot-primary-soft:#e1f6f2;--iot-primary-softer:#f0fbf8;--iot-success:#16a34a;--iot-warning:#d97706;--iot-danger:#dc2626;--iot-info:#2563eb;--iot-radius-xs:5px;--iot-radius-sm:7px;--iot-radius:10px;--iot-radius-lg:14px;--iot-gap:16px;--iot-shadow-sm:0 1px 2px rgba(31,41,55,.05);--iot-shadow:0 1px 2px rgba(31,41,55,.04),0 8px 20px rgba(42,54,71,.06);--iot-shadow-hover:0 2px 5px rgba(31,41,55,.06),0 14px 28px rgba(42,54,71,.08);--iot-focus-ring:0 0 0 3px rgba(15,118,110,.18)}#app,body,html{min-height:100%;margin:0;background:var(--iot-bg);color:var(--iot-text);font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color-scheme:light}*{box-sizing:border-box}.iot-page{display:flex;flex-direction:column;gap:18px}.iot-grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}.iot-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--iot-gap)}.iot-form-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap;min-height:36px}.iot-entity-cell{display:flex;flex-direction:column;gap:4px}.iot-entity-cell strong{color:var(--iot-text);font-size:14px}.iot-entity-cell span{color:var(--iot-text-muted);font-size:12px}.iot-pagination{flex-wrap:wrap}.iot-pagination,.iot-table-footer{margin-top:14px;display:flex;min-height:32px;padding-top:14px;border-top:1px solid rgba(111,126,145,.14);align-items:center;justify-content:flex-end;gap:12px}.iot-pagination-summary,.iot-table-footer{color:var(--iot-text-muted);font-size:13px}.iot-pagination-summary{white-space:nowrap}.iot-table{width:100%;border-radius:var(--iot-radius)}.iot-table .el-table__header th,.iot-table.el-table .el-table__header th{background:var(--iot-surface-muted);color:var(--iot-text-muted);font-weight:500}.iot-table .el-table__cell{padding:8px 0}.iot-table .cell{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:0}.iot-table .cell>.el-button{flex:0 0 auto}.iot-table .cell>.el-button+.el-button{margin-left:0}.iot-table .el-button.is-link{min-height:28px;padding:0 4px}.iot-table .el-table__fixed-right .cell,.iot-table .el-table__fixed-right-patch .cell{justify-content:flex-start}.iot-table .el-table__row{transition:background-color .16s ease-out}.iot-table .el-table__row:hover>td.el-table__cell{background:#f8fbfa}.iot-status{display:inline-flex;align-items:center;gap:7px;color:var(--iot-text-muted);font-size:13px;font-weight:500}.iot-status:before{content:"";width:7px;height:7px;border-radius:999px;background:var(--iot-text-subtle)}.iot-status.is-success:before{background:var(--iot-success)}.iot-status.is-danger:before{background:var(--iot-danger)}.iot-status.is-warning:before{background:var(--iot-warning)}.filter-panel-shell+.data-panel{border-top-left-radius:0;border-top-right-radius:0}.filter-panel-shell+.data-panel>.el-card__header{display:none}.el-button{font-weight:500;border-radius:var(--iot-radius-sm);transition:color .16s ease-out,background-color .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out,transform .16s ease-out}.el-button:hover{transform:translateY(-1px)}.el-button:focus-visible{box-shadow:var(--iot-focus-ring)}.el-button.is-link{padding-left:4px;padding-right:4px;transform:none}.el-button--primary{--el-button-bg-color:var(--iot-primary);--el-button-border-color:var(--iot-primary);--el-button-hover-bg-color:var(--iot-primary-hover);--el-button-hover-border-color:var(--iot-primary-hover);--el-button-active-bg-color:var(--iot-primary-hover);--el-button-active-border-color:var(--iot-primary-hover)}.el-button--primary.is-plain{--el-button-text-color:var(--iot-primary);--el-button-bg-color:var(--iot-primary-softer);--el-button-border-color:rgba(15,118,110,.22);--el-button-hover-bg-color:var(--iot-primary);--el-button-hover-border-color:var(--iot-primary)}.el-input__wrapper,.el-select__wrapper,.el-textarea__inner{border-radius:var(--iot-radius-sm);box-shadow:0 0 0 1px var(--iot-border) inset;transition:box-shadow .16s ease-out,background-color .16s ease-out}.el-input__wrapper:hover,.el-select__wrapper:hover,.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--iot-border-strong) inset}.el-input__wrapper.is-focus,.el-select__wrapper.is-focused,.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--iot-primary) inset,var(--iot-focus-ring)}.el-card{--el-card-border-radius:var(--iot-radius);--el-card-border-color:var(--iot-border)}.el-tag{border-radius:999px;font-weight:500}.el-pagination{--el-pagination-button-bg-color:var(--iot-surface);--el-pagination-border-radius:var(--iot-radius-sm)}.el-dialog{--el-dialog-border-radius:var(--iot-radius-lg);border:1px solid var(--iot-border);box-shadow:var(--iot-shadow-hover)}.el-dialog__header{margin-right:0;padding:18px 20px 12px;border-bottom:1px solid rgba(111,126,145,.14)}.el-dialog__title{color:var(--iot-text);font-size:16px;font-weight:650;letter-spacing:-.01em}.el-dialog__body{padding:18px 20px}.el-dialog__footer{padding:12px 20px 18px;border-top:1px solid rgba(111,126,145,.12)}.el-dialog__footer .el-button+.el-button{margin-left:6px}.dialog-form,.iot-dialog-form{display:flex;flex-direction:column;gap:2px}.dialog-grid,.iot-dialog-grid,.rule-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.el-drawer__header{margin-bottom:0;padding:18px 20px 14px;border-bottom:1px solid var(--iot-border);color:var(--iot-text);font-weight:650}.el-drawer__body{padding:18px 20px}@media (max-width:1180px){.iot-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.iot-grid-2,.iot-grid-4{grid-template-columns:1fr}.iot-form-actions,.iot-pagination,.iot-table-footer{justify-content:flex-start}.dialog-grid,.iot-dialog-grid,.rule-grid{grid-template-columns:1fr}.el-dialog{width:calc(100vw - 32px)!important}}@media (hover:none),(prefers-reduced-motion:reduce){.attention-item:hover,.el-button:hover,.metric-card:hover{transform:none}}