:root{--brand-purple: #5925DC;--brand-purple-dark: #4020DF;--brand-purple-soft: #ede7ff;--brand-indigo: #5925DC;--brand-indigo-dark: #4020DF;--brand-orange: #FF8700;--nav-navy: #ffffff;--nav-navy-deep: #f5f1ff;--surface: #f6f4fb;--card: #ffffff;--card-border: #e8e3f5;--text: #1b1235;--text-soft: #6b6685;--good: #10b981;--warn: #d69b14;--bad: #dc4c4c;--radius: 12px;--radius-sm: 8px}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:Aptos,Segoe UI,Tahoma,sans-serif;color:var(--text);font-size:15px;line-height:1.45;background:var(--surface)}.navbar{position:sticky;top:0;z-index:20;min-height:72px;padding:10px 22px;display:flex;align-items:center;justify-content:space-between;background:var(--nav-navy);border-bottom:1px solid var(--card-border);box-shadow:0 2px 12px #5925dc14}.navbar-brand{display:flex;align-items:center;gap:12px}.navbar-logo{width:180px;height:44px;object-fit:contain;display:block}.navbar-logo-fallback{color:var(--brand-purple);font-size:1.6rem;font-weight:700;line-height:1;letter-spacing:.2px}.navbar-title{color:var(--text);font-size:1.15rem;font-weight:600;line-height:1.2}.navbar-subtitle{color:var(--text-soft);font-size:.85rem;font-weight:400}.navbar-status{display:flex;align-items:center;gap:14px}.navbar-indicator{display:flex;align-items:center;gap:6px;color:var(--text);font-weight:500;font-size:.92rem;background:var(--brand-purple-soft);padding:4px 10px;border-radius:999px}.dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 8px currentcolor}.dot.green{color:var(--good);background:var(--good)}.dot.yellow{color:var(--warn);background:var(--warn)}.dot.red{color:var(--bad);background:var(--bad)}.app{width:min(1440px,95vw);margin:16px auto 28px}.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.panel{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);box-shadow:0 1px 4px #0f172a0d;margin-top:12px;overflow:hidden}.dashboard-grid .panel{margin-top:0}.panel-header{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid transparent;cursor:pointer;transition:background-color .2s ease}.panel-header:hover{background:#fafbfd}.panel-header.open{border-bottom-color:var(--card-border)}.panel-header-left{display:flex;align-items:center;gap:10px}.panel-header-left h2{margin:0;font-size:1.1rem;font-weight:600}.panel-header-actions{display:flex;align-items:center;gap:8px}.panel-icon{width:34px;height:34px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-weight:600;font-size:.82rem;letter-spacing:.3px}.panel-icon.green{color:#0f9a6f;background:#11b98129}.panel-icon.orange{color:#d9890e;background:#e8a3172e}.panel-icon.blue{color:#2e5ce0;background:#2e5ce024}.panel-icon.purple{color:var(--brand-indigo);background:#5d2ed924}.panel-badge{border-radius:999px;background:#eef2ff;color:#4f46e5;padding:4px 10px;font-size:.78rem;font-weight:600}.panel-chevron{color:#8a9ab4;font-size:.95rem;font-weight:700;transition:transform .2s ease}.panel-chevron.open{transform:rotate(180deg)}.panel-body{padding:14px 16px 16px}.panel-body.collapsed{display:none}.status-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.status-item{display:flex;align-items:center;gap:10px;border:1px solid var(--card-border);border-radius:var(--radius-sm);padding:14px}.status-dot{width:11px;height:11px;border-radius:50%}.status-info span{display:block;text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;color:#5e7192;margin-bottom:3px}.status-info strong{text-transform:capitalize;font-size:.95rem;font-weight:600}.status-item.ok{background:#ecfbf5;border-color:#b2ecd2}.status-item.ok .status-dot{background:var(--good)}.status-item.warn{background:#fffaec;border-color:#f8df99}.status-item.warn .status-dot{background:var(--warn)}.status-item.bad{background:#fff0f0;border-color:#f8c2c2}.status-item.bad .status-dot{background:var(--bad)}.debug-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}.debug-grid-primary{grid-template-columns:repeat(5,minmax(0,1fr))}.debug-grid>div{background:#fafbfd;border:1px solid #e7ecf4;border-radius:var(--radius-sm);padding:10px 11px}.muted{display:block;color:var(--text-soft);font-size:.76rem;margin-bottom:5px}.debug-grid strong{font-size:.92rem;font-weight:600;word-break:break-word}.debug-topic{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.4}.debug-error-panel{margin-top:8px;border:1px solid #e7ecf4;border-radius:var(--radius-sm);padding:10px 11px;background:#fafbfd}.debug-error-panel.has-error{border-color:#f3c7c7;background:#fff7f7}.debug-error-panel.is-clear{border-color:#dfe7f2;background:#fafbfd}.debug-error-text{font-size:.88rem;font-weight:500;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45;max-height:72px;overflow:auto}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;align-items:start}.device-card{border:1px solid #dde4ef;border-radius:var(--radius);padding:12px;background:#fff;cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease;overflow:hidden;min-width:0}.device-card:hover{border-color:#b8c7e0;box-shadow:0 2px 10px #1e40af14;transform:translateY(-1px)}.device-card.selected{border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f640}.device-card-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;border-bottom:1px solid #edf1f7;gap:8px;min-width:0}.device-card-title{margin:0;font-size:1rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.source-badge{border-radius:999px;padding:3px 8px;font-size:.7rem;text-transform:uppercase;font-weight:600}.source-badge.mqtt,.source-badge.live{background:#2d5ce026;color:#2e5ce0}.source-badge.s3{background:#5d2ed926;color:var(--brand-indigo)}.timestamp{color:#7083a4;font-size:.82rem;margin:8px 0}.metric-list{display:grid;grid-template-columns:1fr 1fr;gap:6px}.metric-list.metric-list-full{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.metric-item{display:flex;justify-content:space-between;align-items:center;gap:6px;background:#f8fafc;padding:7px 9px;border-radius:7px;border:1px solid #e8eef8;font-size:.86rem;min-width:0;overflow:hidden}.metric-key{color:#486384;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0}.metric-val{color:#0f1728;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;max-width:55%}.metric-more{margin:6px 0 0;font-size:.76rem;color:var(--text-soft);text-align:right}.table-wrap{overflow:auto;border:1px solid #dce4ef;border-radius:var(--radius-sm)}.sub-title{margin:0 0 8px;font-size:.92rem;font-weight:600;color:#2f3f58}.device-details-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.device-details-meta>div{border:1px solid #e5ebf5;border-radius:var(--radius-sm);background:#f9fbff;padding:9px 10px}.device-details-meta strong{font-size:.9rem;font-weight:600}table{width:100%;border-collapse:collapse}th,td{padding:9px 11px;text-align:left;border-bottom:1px solid #ecf0f6;font-size:.88rem;white-space:nowrap}th{background:#f7f9fd;color:#5b6f8f;text-transform:uppercase;font-size:.72rem}.live-viewer-controls{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.count{color:#607596}.btn{border:1px solid transparent;border-radius:8px;padding:7px 12px;background:var(--brand-indigo);color:#fff;font-weight:600;cursor:pointer}.btn-sm{padding:6px 10px;font-size:.8rem}.btn-outline{background:#fff;color:var(--brand-indigo);border-color:#5d2ed959}.btn:hover{filter:brightness(1.04)}.stack{display:flex;flex-direction:column;gap:10px}.message-card{border:1px solid #dce4ef;border-radius:var(--radius-sm);overflow:hidden}.message-card.latest{border-color:#5d2ed966;box-shadow:0 0 0 1px #5d2ed92e}.message-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;background:#fafbfd;border-bottom:1px solid #edf2f8}.message-head-left{display:flex;gap:10px;align-items:baseline}.message-head-left strong{font-size:.95rem;font-weight:600}.topic{color:#6f83a4;font-size:.78rem}.message-meta{display:flex;align-items:center;gap:9px;color:#566a8b;font-size:.78rem}.message-body{padding:10px 12px 12px}.live-metric-preview{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:6px;margin-bottom:10px}.live-metric-chip{display:flex;justify-content:space-between;align-items:center;gap:8px;border:1px solid #e5ebf5;border-radius:8px;padding:6px 8px;background:#f9fbff}.live-metric-chip span{color:#5e7192;font-size:.76rem;font-weight:500}.live-metric-chip strong{color:#102038;font-size:.82rem;font-weight:600}.split{display:grid;grid-template-columns:1fr 1fr;gap:11px}.json-block h4{margin:0 0 6px;color:#5b6f8f;font-size:.74rem;text-transform:uppercase;letter-spacing:.03em}.json-block pre{margin:0;padding:10px;border-radius:var(--radius-sm);border:1px solid #d1daea;background:#f8fafc;color:#172033;max-height:240px;overflow:auto;font-size:.8rem}.file-list{max-height:350px;overflow:auto;border-right:1px solid #e3e9f4;padding-right:11px;display:flex;flex-direction:column;gap:8px}.file-list button{border:1px solid #dce4ef;background:#fff;border-radius:8px;padding:9px;text-align:left;display:flex;flex-direction:column;gap:4px;cursor:pointer}.file-list button:hover,.file-list button.active{border-color:#5d2ed959;background:#5d2ed912}.clickable-row{cursor:pointer}.clickable-row:hover{background:#f8faff}.file-list small{color:#7488a9;font-size:.74rem}.empty-state{padding:18px 10px;color:#6e819f;text-align:center;font-size:.92rem}.error{color:#c92424;margin:8px 0}.error-banner{border-radius:var(--radius-sm);border:1px solid #f4c3c3;background:#fff2f2;color:#c92424;padding:9px 12px;margin-bottom:12px;font-size:.9rem}.furnace-page{padding-bottom:40px}.furnace-page-header{display:flex;align-items:center;gap:16px;padding:18px 0 14px;border-bottom:1px solid var(--card-border);margin-bottom:16px;flex-wrap:wrap}.back-btn{background:none;border:1px solid var(--card-border);border-radius:8px;padding:8px 14px;font-size:.88rem;font-weight:600;color:var(--text-soft);cursor:pointer;white-space:nowrap;transition:border-color .15s,color .15s}.back-btn:hover{border-color:var(--brand-indigo);color:var(--brand-indigo)}.furnace-title-group{display:flex;align-items:center;gap:12px;flex:1}.furnace-page-icon{width:48px;height:48px;border-radius:14px;background:#f59e0b29;color:#d97706;display:flex;align-items:center;justify-content:center;font-size:1.1rem;font-weight:700;flex-shrink:0}.furnace-page-name{margin:0;font-size:1.5rem;font-weight:700;line-height:1.2}.furnace-page-subtitle{margin:4px 0 0;color:var(--text-soft);font-size:.85rem}.furnace-loading{display:flex;align-items:center;gap:12px;padding:32px 0;color:var(--text-soft);font-size:.95rem}.furnace-loading-spinner{width:20px;height:20px;border:2px solid #e0e7f0;border-top-color:var(--brand-indigo);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.furnace-metrics-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.furnace-metric-card{display:flex;flex-direction:column;gap:5px;padding:12px 14px;background:#fafcff;border:1px solid #e4eaf5;border-radius:var(--radius-sm);transition:border-color .15s,box-shadow .15s}.furnace-metric-card:hover{border-color:#c5d4ee;box-shadow:0 2px 6px #1e40af0f}.furnace-metric-label{font-size:.75rem;color:var(--text-soft);text-transform:uppercase;letter-spacing:.04em;font-weight:500}.furnace-metric-value{font-size:1.15rem;font-weight:700;color:var(--text)}.open-furnace-btn{margin-top:10px;width:100%;background:transparent;color:var(--brand-indigo);border-color:#5d2ed94d;font-size:.8rem;text-align:center}.open-furnace-btn:hover{background:#5d2ed90f;border-color:var(--brand-indigo);filter:none}.nowrap{white-space:nowrap}.truncate-cell{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono-small{font-family:Consolas,Courier New,monospace;font-size:.76rem}.file-name{font-weight:600;font-size:.88rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 1200px){.navbar-title,.panel-header-left h2{font-size:1rem}.debug-grid,.debug-grid-primary{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 920px){.navbar{height:auto;padding:12px 14px;flex-wrap:wrap;gap:10px}.navbar-title{font-size:1rem}.navbar-logo{width:124px}.navbar-status{width:100%;justify-content:flex-end;gap:12px}.app{width:min(1200px,95vw);margin-top:12px}.dashboard-grid,.status-grid,.split{grid-template-columns:1fr}.debug-grid,.debug-grid-primary{grid-template-columns:repeat(2,minmax(0,1fr))}.panel-header-left h2{font-size:.98rem}.device-details-meta{grid-template-columns:1fr}.file-list{border-right:0;border-bottom:1px solid #e3e9f4;padding-right:0;padding-bottom:8px}}@media (max-width: 580px){.navbar-subtitle{display:none}.navbar-indicator span:last-child{display:none}.debug-grid,.debug-grid-primary,.device-grid,.metric-list{grid-template-columns:1fr}}.panel-badge.danger{background:#fee4e2;color:#b42318}.gateway-info{margin-top:12px;padding:10px 12px;background:#f6f8fc;border:1px solid #e3e9f4;border-radius:8px;font-size:13px;display:flex;gap:18px;flex-wrap:wrap}.ok-text{color:#027a48}.bad-text{color:#b42318}.tab-bar{display:flex;gap:4px;margin-bottom:14px;border-bottom:1px solid #e3e9f4}.tab-bar button{background:transparent;border:0;padding:8px 14px;cursor:pointer;font-weight:500;color:#475467;border-bottom:2px solid transparent}.tab-bar button.active{color:#1565d8;border-bottom-color:#1565d8}.section-h{margin:14px 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.6px;color:#667085}.alert-list{display:flex;flex-direction:column;gap:8px}.alert-row{padding:10px 12px;border-radius:8px;border:1px solid #e3e9f4;background:#fff}.alert-row.sev-critical{border-left:4px solid #d92d20;background:#fef3f2}.alert-row.sev-warning{border-left:4px solid #f79009;background:#fffaeb}.alert-row.sev-info{border-left:4px solid #1565d8;background:#f4f8ff}.alert-row-head{display:flex;justify-content:space-between;gap:12px;margin-bottom:4px;font-size:14px}.alert-row-body{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:#344054}.alert-row-msg{margin-top:4px;font-size:12px;color:#475467}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.form-grid label{display:flex;flex-direction:column;font-size:13px;color:#475467;gap:4px}.form-grid input[type=number],.form-grid input[type=text],.row-input input{border:1px solid #d0d5dd;border-radius:6px;padding:8px 10px;font-size:14px}.checkbox-row{flex-direction:row!important;align-items:center;gap:8px!important}.row-input{display:flex;gap:8px;margin-bottom:8px}.row-input input{flex:1}.row-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.chip-list{list-style:none;padding:0;margin:4px 0 0;display:flex;flex-wrap:wrap;gap:6px}.chip{background:#eef4ff;color:#1565d8;padding:4px 10px;border-radius:999px;font-size:13px;display:inline-flex;align-items:center;gap:6px}.chip button{background:transparent;border:0;color:#1565d8;cursor:pointer;font-size:16px;line-height:1}.json-block{background:#0f172a;color:#e2e8f0;padding:12px;border-radius:8px;font-size:12px;overflow:auto;max-height:320px}.muted.small{font-size:12px}.furnace-deviation.high{color:#b42318;font-weight:700}.furnace-deviation.low{color:#f79009;font-weight:700}.furnace-deviation.ok{color:#027a48;font-weight:600}@media (max-width: 580px){.form-grid{grid-template-columns:1fr}}.limits-table{width:100%;border-collapse:collapse;font-size:14px}.limits-table th{text-align:left;padding:8px 10px;background:#f6f8fc;border-bottom:1px solid #e3e9f4;font-weight:600;color:#475467}.limits-table td{padding:8px 10px;border-bottom:1px solid #f0f2f7}.limits-table input[type=number]{width:100%;border:1px solid #d0d5dd;border-radius:6px;padding:6px 8px;font-size:14px}.mono-small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#667085}.section-h-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.section-h-row .section-h{margin:14px 0 8px}.btn.btn-danger{color:#b42318;border-color:#f3c7c7}.btn.btn-danger:hover{background:#fef3f2}.btn.btn-danger:disabled{color:#98a2b3;border-color:#eaecf0;cursor:not-allowed}
