.mod2-root{--bg-base:#0b0f19;--bg-panel:#151b2b;--bg-panel-hover:#1e2638;--border-color:#2a354c;--text-main:#f1f5f9;--text-muted:#94a3b8;--color-critical:red;--color-warning:orange;--color-normal:#22c55e;--color-updating:#3b82f6;--live-indicator:#22c55e;--pulse-animation:mod2-pulse 2s infinite;--alert-z-index:1000;--update-interval:5s;--toast-duration:5000ms;--font-head:"Fira Code",monospace;--font-body:"Fira Sans",sans-serif}.mod2-root,.mod2-root *{box-sizing:border-box;margin:0;padding:0}.mod2-root{font-family:var(--font-body);background-color:var(--bg-base);color:var(--text-main);line-height:1.5;padding:20px;overflow-x:hidden}.mod2-root .app-header{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;background-color:var(--bg-panel);border:1px solid var(--border-color);border-radius:8px;margin-bottom:20px;flex-wrap:wrap;gap:10px}.mod2-root .sys-info{display:flex;flex-direction:column}.mod2-root .sys-name{font-family:var(--font-head);font-size:17.6px;color:var(--text-main);font-weight:600}.mod2-root .module-name{font-size:14.4px;color:var(--text-muted);margin-top:4px}.mod2-root .conn-status{display:flex;align-items:center;gap:8px;font-family:var(--font-head);font-size:13.6px}.mod2-root .status-dot{width:10px;height:10px;border-radius:50%;background:var(--live-indicator);-webkit-animation:var(--pulse-animation);animation:var(--pulse-animation)}.mod2-root .status-dot.critical{background:var(--color-critical);-webkit-animation:mod2-pulse-critical 1s infinite;animation:mod2-pulse-critical 1s infinite}.mod2-root .status-dot.warning{background:var(--color-warning)}.mod2-root .status-dot.updating{background:var(--color-updating);-webkit-animation:mod2-pulse-update 1.5s infinite;animation:mod2-pulse-update 1.5s infinite}@-webkit-keyframes mod2-pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.7)}70%{box-shadow:0 0 0 8px rgba(34,197,94,0)}to{box-shadow:0 0 0 0 rgba(34,197,94,0)}}@keyframes mod2-pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.7)}70%{box-shadow:0 0 0 8px rgba(34,197,94,0)}to{box-shadow:0 0 0 0 rgba(34,197,94,0)}}@-webkit-keyframes mod2-pulse-critical{0%{box-shadow:0 0 0 0 rgba(255,0,0,.8)}70%{box-shadow:0 0 0 10px rgba(255,0,0,0)}to{box-shadow:0 0 0 0 rgba(255,0,0,0)}}@keyframes mod2-pulse-critical{0%{box-shadow:0 0 0 0 rgba(255,0,0,.8)}70%{box-shadow:0 0 0 10px rgba(255,0,0,0)}to{box-shadow:0 0 0 0 rgba(255,0,0,0)}}@-webkit-keyframes mod2-pulse-update{0%{box-shadow:0 0 0 0 rgba(59,130,246,.7)}70%{box-shadow:0 0 0 8px rgba(59,130,246,0)}to{box-shadow:0 0 0 0 rgba(59,130,246,0)}}@keyframes mod2-pulse-update{0%{box-shadow:0 0 0 0 rgba(59,130,246,.7)}70%{box-shadow:0 0 0 8px rgba(59,130,246,0)}to{box-shadow:0 0 0 0 rgba(59,130,246,0)}}.mod2-root .dashboard-container{display:flex;flex-direction:column;gap:20px}.mod2-root .kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px}.mod2-root .bottom-row,.mod2-root .middle-row{display:grid;grid-template-columns:2fr 1fr;gap:20px}.mod2-root .panel{background-color:var(--bg-panel);border:1px solid var(--border-color);border-radius:8px;padding:16px;display:flex;flex-direction:column}.mod2-root .panel-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;border-bottom:1px solid var(--border-color);padding-bottom:10px}.mod2-root .panel-header h3{font-family:var(--font-head);font-size:16px;font-weight:500;color:var(--text-main)}.mod2-root .live-tag{background:rgba(34,197,94,.2);color:var(--color-normal);padding:2px 6px;border-radius:4px;font-family:var(--font-head);font-size:12px;font-weight:600;letter-spacing:1px}.mod2-root .kpi-card{background-color:var(--bg-panel);border:1px solid var(--border-color);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px;position:relative;overflow:hidden;transition:border-color .3s}.mod2-root .kpi-card:before{content:"";position:absolute;top:0;left:0;width:4px;height:100%;background:var(--color-normal)}.mod2-root .kpi-card.warning:before{background:var(--color-warning)}.mod2-root .kpi-card.critical:before{background:var(--color-critical)}.mod2-root .kpi-title{font-size:13.6px;color:var(--text-muted)}.mod2-root .kpi-value{font-family:var(--font-head);font-size:28.8px;font-weight:600;color:var(--text-main)}.mod2-root .kpi-value .unit{font-size:16px;color:var(--text-muted);margin-left:4px}.mod2-root .kpi-status{font-size:12px;font-family:var(--font-head);padding:2px 6px;border-radius:4px;display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.mod2-root .kpi-status.normal{background:rgba(34,197,94,.15);color:var(--color-normal)}.mod2-root .kpi-status.updating{background:rgba(59,130,246,.15);color:var(--color-updating)}.mod2-root .kpi-status.warning{background:rgba(255,165,0,.15);color:var(--color-warning)}.mod2-root .kpi-status.critical{background:rgba(255,0,0,.15);color:var(--color-critical)}.mod2-root .chart-container{flex:1;position:relative;min-height:250px;width:100%}.mod2-root canvas{width:100%;height:100%;display:block}.mod2-root .chart-legend{display:flex;gap:16px;margin-top:10px;font-size:12.8px;font-family:var(--font-head);justify-content:center}.mod2-root .legend-item{display:flex;align-items:center;gap:6px}.mod2-root .legend-color{width:12px;height:4px;border-radius:2px}.mod2-root .config-form{display:flex;flex-direction:column;gap:12px;flex:1}.mod2-root .form-group{display:flex;flex-direction:column;gap:4px}.mod2-root .form-group label{font-size:13.6px;color:var(--text-muted)}.mod2-root .form-group input{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-main);padding:8px 12px;border-radius:4px;font-family:var(--font-head);font-size:14.4px;outline:none;transition:border-color .2s}.mod2-root .form-group input:focus{border-color:var(--color-updating)}.mod2-root .form-actions{display:flex;gap:10px;margin-top:10px}.mod2-root .btn{padding:8px 16px;border-radius:4px;font-family:var(--font-head);font-size:13.6px;cursor:pointer;border:none;font-weight:600;transition:all .2s}.mod2-root .btn-primary{background:var(--color-updating);color:#fff}.mod2-root .btn-primary:hover{background:#2563eb}.mod2-root .btn-outline{background:transparent;border:1px solid var(--border-color);color:var(--text-muted)}.mod2-root .btn-outline:hover{border-color:var(--text-main);color:var(--text-main)}.mod2-root .algo-status{margin-top:16px;padding-top:16px;border-top:1px solid var(--border-color);font-size:13.6px;color:var(--text-muted);display:flex;justify-content:space-between;align-items:center}.mod2-root .status-indicator{display:flex;align-items:center;gap:8px;font-family:var(--font-head);color:var(--text-main)}.mod2-root .matrix-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.mod2-root .matrix-card{background:var(--bg-base);border:1px solid var(--border-color);border-radius:6px;padding:12px}.mod2-root .matrix-card h4{font-family:var(--font-head);font-size:13.6px;color:var(--text-main);margin-bottom:10px;font-weight:600}.mod2-root .matrix-table{width:100%;border-collapse:collapse;font-family:var(--font-head);font-size:14.4px;text-align:center}.mod2-root .matrix-table td,.mod2-root .matrix-table th{border:1px solid var(--border-color);padding:9px 6px}.mod2-root .matrix-table th{background:var(--bg-panel-hover);color:var(--text-muted);font-weight:500;font-size:12px}.mod2-root .matrix-table td.zero{color:#475569}.mod2-root .matrix-table td.val{color:#fff;text-shadow:0 0 2px rgba(0,0,0,.8);font-weight:700;transition:background-color .3s ease}.mod2-root .matrix-updating{-webkit-animation:mod2-blink-update .5s infinite alternate!important;animation:mod2-blink-update .5s infinite alternate!important}.mod2-root .matrix-note{margin-top:10px;font-size:11.52px;color:var(--text-muted);line-height:1.6}.mod2-root .cond-strip{margin-top:12px;border-top:1px dashed var(--border-color);padding-top:10px;display:grid;grid-template-columns:1fr 1fr;gap:10px;font-family:var(--font-head);font-size:11.52px;color:var(--text-muted)}.mod2-root .cond-item{line-height:1.7}.mod2-root .cond-hit{color:#ff6b6b;font-weight:700}.mod2-root .cond-miss{color:#4ade80}.mod2-root .legend{display:flex;align-items:center;gap:8px;font-size:11.52px;color:var(--text-muted);font-family:var(--font-head)}.mod2-root .legend-chip{padding:2px 8px;border-radius:4px}.mod2-root .legend-chip.hit{background:rgba(255,0,0,.15);color:#ff8a8a}.mod2-root .legend-chip.normal{background:rgba(34,197,94,.15);color:#6ee7a0}@-webkit-keyframes mod2-blink-update{0%{background-color:var(--color-updating)!important;color:#fff!important}to{background-color:rgba(59,130,246,.5)!important;color:#fff!important}}@keyframes mod2-blink-update{0%{background-color:var(--color-updating)!important;color:#fff!important}to{background-color:rgba(59,130,246,.5)!important;color:#fff!important}}.mod2-root .log-panel{max-height:300px}.mod2-root .log-container{flex:1;overflow-y:auto;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;padding:10px;font-family:var(--font-head);font-size:12.8px;display:flex;flex-direction:column;gap:6px}.mod2-root .log-entry{display:flex;gap:8px}.mod2-root .log-time{color:var(--text-muted)}.mod2-root .log-level-info{color:var(--color-updating)}.mod2-root .log-level-warn{color:var(--color-warning)}.mod2-root .log-level-critical{color:var(--color-critical)}.mod2-root .log-msg{color:var(--text-main)}.mod2-root #toastContainer{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:10px;z-index:var(--alert-z-index);pointer-events:none}.mod2-root .toast{background:var(--bg-panel);border:1px solid var(--border-color);border-left:4px solid var(--color-normal);padding:12px 16px;border-radius:4px;font-family:var(--font-head);font-size:13.6px;box-shadow:0 4px 12px rgba(0,0,0,.5);display:flex;align-items:center;gap:10px;transform:translateX(120%);opacity:0;transition:all .3s ease;pointer-events:auto;min-width:250px}.mod2-root .toast.show{transform:translateX(0);opacity:1}.mod2-root .toast.info{border-left-color:var(--color-updating)}.mod2-root .toast.warn{border-left-color:var(--color-warning)}.mod2-root .toast.critical{border-left-color:var(--color-critical);background:rgba(255,0,0,.1);color:#fcc}@media (max-width:992px){.mod2-root .bottom-row,.mod2-root .middle-row{grid-template-columns:1fr}}.mod2-root{min-height:calc(100vh - 50px)}