:root{--bg:#f5f6fa;--sidebar-bg:#1a1d2e;--sidebar-w:240px;--header-h:56px;--card-bg:#fff;--border:#e2e5ee;--text:#1a1d2e;--text-secondary:#6b7194;--accent:#3b82f6;--accent-light:#eff6ff;--success:#22c55e;--warning:#f59e0b;--danger:#ef4444;--radius:8px}:root.dark{--bg:#0f1117;--sidebar-bg:#080b14;--card-bg:#1a1f2e;--border:#2a3042;--text:#e2e8f0;--text-secondary:#8892a4;--accent:#60a5fa;--accent-light:#1e3a5f}.dark .header{background:var(--card-bg);border-bottom-color:var(--border)}.dark .card{background:var(--card-bg);border-color:var(--border)}.dark table th{color:var(--text-secondary);background:#111827}.dark tr:hover td{background:#1e2433}.dark td{border-bottom-color:var(--border)}.dark .sidebar{background:var(--sidebar-bg)}.dark .device-card{background:var(--card-bg);border-color:var(--border)}.dark .device-card:hover{border-color:var(--accent)}.dark .stat-card{background:var(--card-bg);border-color:var(--border)}.dark .search-input{background:var(--card-bg);border-color:var(--border);color:var(--text)}.dark .tabs{background:#111827}.dark .tab--active{background:var(--card-bg);color:var(--text)}.dark input,.dark select,.dark textarea{background:var(--card-bg)!important;border-color:var(--border)!important;color:var(--text)!important}.dark .btn--secondary{color:var(--text);border-color:var(--border);background:#1e2433}.dark .btn--secondary:hover{background:#2a3042}.dark .modal{background:var(--card-bg)}.dark code{color:#93c5fd!important;background:#111827!important}.dark .tree-item{border-left-color:var(--border)}.dark .drawer{background:var(--card-bg);border-left-color:var(--border)}.dark .formula-card{background:#080b14}.dark .badge--info{color:#93c5fd;background:#1e3a5f}.dark .badge--success{color:#86efac;background:#14532d}.dark .badge--warning{color:#fcd34d;background:#451a03}.dark .badge--danger{color:#fca5a5;background:#450a0a}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}.app{min-height:100vh;display:flex}.main{margin-left:var(--sidebar-w);flex-direction:column;flex:1;height:100vh;transition:margin-left .2s;display:flex}.main--full{margin-left:56px}.content{flex:1;max-width:1400px;padding:24px;overflow:auto}:is(.content:has(.wt),.content:has(.fm),.content:has(.iw)){max-width:none;padding:0}.sidebar{width:var(--sidebar-w);background:var(--sidebar-bg);color:#fff;z-index:100;flex-direction:column;height:100vh;transition:width .2s;display:flex;position:fixed;top:0;left:0;overflow:hidden}.sidebar--collapsed{width:56px}.sidebar__logo{white-space:nowrap;border-bottom:1px solid #ffffff1a;align-items:center;gap:10px;padding:16px;font-size:16px;font-weight:700;display:flex}.sidebar__logo span{font-size:20px}.sidebar__toggle{color:#fff;cursor:pointer;opacity:.7;background:0 0;border:none;margin-left:auto;padding:8px;font-size:18px}.sidebar__toggle:hover{opacity:1}.sidebar__nav{flex:1;padding:8px;overflow-y:auto}.sidebar__item{cursor:pointer;color:#fff9;white-space:nowrap;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:12px;width:100%;padding:10px 12px;font-size:13px;font-weight:500;transition:all .15s;display:flex}.sidebar__item:hover{color:#fff;background:#ffffff14}.sidebar__item--active{color:#fff;background:var(--accent)}.sidebar__item-icon{text-align:center;flex-shrink:0;width:20px;font-size:16px}.sidebar__footer{color:#fff6;white-space:nowrap;border-top:1px solid #ffffff1a;padding:12px 16px;font-size:11px}.header{height:var(--header-h);background:var(--card-bg);border-bottom:1px solid var(--border);z-index:50;justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:sticky;top:0}.header__title{font-size:18px;font-weight:600}.header__right{align-items:center;gap:16px;display:flex}.badge{border-radius:20px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:500;display:inline-flex}.badge--success{color:#166534;background:#dcfce7}.badge--warning{color:#92400e;background:#fef3c7}.badge--danger{color:#991b1b;background:#fee2e2}.badge--info{background:var(--accent-light);color:var(--accent)}.badge__dot{background:currentColor;border-radius:50%;width:6px;height:6px}.card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card__header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.card__title{font-size:15px;font-weight:600}.grid{gap:16px;display:grid}.grid--2{grid-template-columns:repeat(2,1fr)}.grid--3{grid-template-columns:repeat(3,1fr)}.grid--4{grid-template-columns:repeat(4,1fr)}.device-card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:16px;transition:all .15s}.device-card:hover{border-color:var(--accent);box-shadow:0 2px 8px #3b82f61f}.device-card__header{justify-content:space-between;align-items:flex-start;margin-bottom:12px;display:flex}.device-card__name{font-size:14px;font-weight:600}.device-card__meta{color:var(--text-secondary);margin-top:4px;font-size:12px}.device-card__stats{gap:16px;margin-top:12px;display:flex}.device-card__stat{color:var(--text-secondary);font-size:12px}.device-card__stat strong{color:var(--text);font-size:18px;font-weight:600;display:block}.btn{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:6px;padding:8px 16px;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.btn--primary{background:var(--accent);color:#fff}.btn--primary:hover{background:#2563eb}.btn--secondary{background:var(--bg);color:var(--text);border:1px solid var(--border)}.btn--secondary:hover{background:#e2e5ee}.btn--sm{padding:5px 10px;font-size:12px}.btn--success{background:var(--success);color:#fff}.btn--danger{background:var(--danger);color:#fff}.btn--ghost{color:var(--accent);background:0 0}.btn--ghost:hover{background:var(--accent-light)}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th{text-align:left;background:var(--bg);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);padding:10px 12px;font-size:11px;font-weight:600}td{border-bottom:1px solid var(--border);padding:10px 12px}tr:hover td{background:#f8f9fc}.stats-row{gap:16px;margin-bottom:24px;display:flex}.stat-card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);flex:1;padding:16px 20px}.stat-card__label{color:var(--text-secondary);margin-bottom:4px;font-size:12px}.stat-card__value{font-size:24px;font-weight:700}.stat-card__sub{color:var(--text-secondary);margin-top:2px;font-size:12px}.tag{border-radius:4px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-block}.tag--ai{color:#7c3aed;background:#f3e8ff}.tag--bacnet{color:#1d4ed8;background:#dbeafe}.tag--siemens{color:#92400e;background:#fef3c7}.tag--analog{color:#166534;background:#dcfce7}.tag--digital{color:#3730a3;background:#e0e7ff}.section-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.section-title{font-size:16px;font-weight:600}.section-subtitle{color:var(--text-secondary);font-size:13px}.search-input{border:1px solid var(--border);border-radius:6px;outline:none;width:280px;padding:8px 12px;font-size:13px}.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #3b82f61a}.tabs{background:var(--bg);border-radius:8px;gap:4px;width:fit-content;margin-bottom:20px;padding:4px;display:flex}.tab{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:6px;padding:6px 16px;font-size:13px;font-weight:500}.tab--active{background:var(--card-bg);color:var(--text);box-shadow:0 1px 3px #00000014}.tree-item{border-left:2px solid var(--border);margin-left:16px;padding:8px 12px}.tree-item--parent{border-left-color:var(--accent);cursor:pointer;margin-left:0;font-weight:600}.tree-item--parent:hover{background:var(--accent-light);border-radius:4px}.tree-item__children{margin-left:12px}.formula-card{color:#e2e8f0;border-radius:var(--radius);background:#1a1d2e;margin-bottom:12px;padding:16px;font-family:Fira Code,monospace;font-size:13px}.formula-card__name{color:var(--accent);margin-bottom:8px;font-family:Inter,sans-serif;font-weight:600}.modal-overlay{z-index:200;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--card-bg);border-radius:12px;width:90%;max-width:600px;max-height:80vh;padding:24px;overflow-y:auto}.modal__title{margin-bottom:16px;font-size:18px;font-weight:600}.drag-handle{cursor:grab;color:var(--text-secondary)}.drag-handle:active{cursor:grabbing}.steps{gap:4px;margin-bottom:24px;display:flex}.step{background:var(--border);border-radius:2px;flex:1;height:4px}.step--done{background:var(--success)}.step--active{background:var(--accent)}@media (width<=1024px){.grid--3,.grid--4{grid-template-columns:repeat(2,1fr)}}@media (width<=768px){.grid--2,.grid--3,.grid--4{grid-template-columns:1fr}.stats-row{flex-direction:column}}.confidence-bar{background:var(--border);border-radius:3px;height:6px;overflow:hidden}.confidence-bar__fill{border-radius:3px;height:100%;transition:width .3s}.drawer{background:var(--card-bg);border-left:1px solid var(--border);z-index:150;width:380px;height:100vh;padding:20px;position:fixed;top:0;right:0;overflow-y:auto;box-shadow:-4px 0 20px #00000014}.drawer__title{justify-content:space-between;align-items:center;margin-bottom:16px;font-size:16px;font-weight:600;display:flex}.status-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.status-dot--online{background:var(--success)}.status-dot--offline{background:var(--danger)}.empty{text-align:center;color:var(--text-secondary);padding:48px 20px}.empty__icon{opacity:.3;margin-bottom:12px;font-size:48px}.empty__text{font-size:15px}.input-group{margin-bottom:12px}.input-group label{color:var(--text-secondary);margin-bottom:4px;font-size:12px;font-weight:600;display:block}.input-group input,.input-group select,.input-group textarea{border:1px solid var(--border);border-radius:6px;outline:none;width:100%;padding:8px 12px;font-size:13px}.input-group input:focus,.input-group select:focus,.input-group textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px #3b82f61a}.checkbox-row{align-items:center;gap:8px;padding:6px 0;font-size:13px;display:flex}
