:root{--bg-primary:#0f172a;--bg-secondary:#1e293b;--bg-card:#1e293bb3;--text-primary:#f8fafc;--text-secondary:#94a3b8;--accent-primary:#3b82f6;--accent-hover:#2563eb;--danger:#ef4444;--success:#22c55e;--warning:#eab308;--border-color:#ffffff1a}body{background-color:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.dashboard-container{flex-direction:column;height:100vh;display:flex;overflow:hidden}.header{background-color:var(--bg-secondary);border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;padding:1rem 2rem;display:flex;box-shadow:0 4px 6px -1px #0000001a}.logo{align-items:center;gap:.75rem;display:flex}.logo h1{letter-spacing:-.025em;margin:0;font-size:1.25rem;font-weight:600}.controls{align-items:center;gap:1.5rem;display:flex}.stats{gap:1rem;font-family:monospace;font-size:.875rem;display:flex}.btn{cursor:pointer;border:none;border-radius:.375rem;align-items:center;gap:.5rem;padding:.5rem 1rem;font-weight:500;transition:all .2s;display:inline-flex}.btn-primary{background-color:var(--accent-primary);color:#fff}.btn-primary:hover{background-color:var(--accent-hover)}.btn-danger{color:#fff;background:#ef4444;border:1px solid #dc2626}.btn-danger:hover{background:#dc2626}.btn-success{color:#fff;background:#10b981;border:1px solid #059669}.btn-success:hover{background:#059669}.btn-secondary{color:var(--text-primary);border:1px solid var(--border-color);background-color:#ffffff0d}.btn-secondary:hover{background-color:#ffffff1a}.main-content{flex:1;gap:.75rem;padding:1.5rem;display:flex;overflow:hidden}.left-panel{flex-direction:column;flex:1;gap:1.5rem;min-width:0;display:flex;overflow-y:auto}.panel-resizer{cursor:col-resize;background:0 0;border-radius:999px;flex:0 0 10px;width:10px;transition:background-color .15s}.panel-resizer:hover,.panel-resizer.dragging{background:#3b82f640}.right-panel{flex-direction:column;flex:none;min-width:360px;max-width:70vw;display:flex}@media (width<=900px){.main-content{flex-direction:column;overflow-y:auto}.panel-resizer{display:none}.right-panel{min-width:0;max-width:none;width:100%!important}}.card{background-color:var(--bg-card);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border-color);border-radius:.75rem;padding:1.5rem;box-shadow:0 10px 15px -3px #0000001a}.card h2{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-top:0;margin-bottom:1.5rem;font-size:1.125rem;font-weight:600}.status-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem;display:grid}.stat-box{background-color:#0003;border-radius:.5rem;flex-direction:column;gap:.5rem;padding:1rem;display:flex}.stat-box .label{color:var(--text-secondary);font-size:.875rem}.stat-box .value{align-items:center;gap:.5rem;font-size:1.25rem;font-weight:600;display:flex}.relay-source-reported{background:#0e749029;border-left:4px solid #38bdf8}.relay-source-inferred{background:#a1620724;border-left:4px dashed #eab308}.relay-source-unknown{background:#6d28d91f;border-left:4px dotted #a78bfa}.energy-snapshot-state{border-radius:.5rem;padding:.65rem .8rem;font-size:.78rem}.energy-snapshot-state.ok{color:#bbf7d0;background:#1665343d}.energy-snapshot-state.error{color:#fecaca;background:#991b1b47}.energy-snapshot-state.waiting{color:#cbd5e1;background:#33415573}.energy-number{overflow-wrap:anywhere;max-width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1rem!important}.energy-valid{border-top-color:#22c55e}.energy-invalid{background:#7f1d1d3b;border-top-color:#ef4444}.energy-baseline-warning{color:#fecaca;background:#7f1d1d4d;border:1px solid #f87171b3;border-radius:.5rem;margin-top:.75rem;padding:.75rem;font-weight:600}.energy-controls{border-top:1px solid var(--border-color);flex-direction:column;gap:.7rem;padding-top:.8rem;display:flex}.metrics-grid{grid-template-columns:repeat(3,1fr);gap:1rem;display:grid}.metric-box{text-align:center;background-color:#0003;border-top:3px solid #0000;border-radius:.5rem;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:1.25rem;display:flex}.metric-box.voltage{border-top-color:var(--warning)}.metric-box.base-voltage{border-top-color:var(--accent-primary)}.metric-box.resistance{border-top-color:var(--success)}.metric-box .label{color:var(--text-secondary);font-size:.875rem}.metric-box .value{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:700}.metric-box .unit{color:var(--text-secondary);font-size:1rem;font-weight:500}.metric-note{color:var(--text-secondary);font-size:.75rem;line-height:1.35}.command-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem;display:grid}.terminal-card{flex-direction:column;flex:1;padding:0;display:flex;overflow:hidden}.terminal-header{border-bottom:1px solid var(--border-color);background-color:#0003;align-items:center;gap:.75rem;padding:1rem 1.5rem;display:flex}.terminal-header h2{flex:1;margin:0}.btn-icon{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:.25rem;padding:.25rem;transition:all .2s}.btn-icon:hover{color:var(--text-primary);background-color:#ffffff1a}.terminal-body{background-color:#000;flex-direction:column;flex:1;gap:.5rem;min-height:0;padding:1rem;font-family:Fira Code,Consolas,monospace;font-size:.85rem;display:flex;overflow-y:auto}.log-entry{border-left:3px solid #0000;border-radius:.25rem;align-items:flex-start;gap:.75rem;padding:.5rem;display:flex}.log-entry:hover{background-color:#ffffff0d}.log-entry.rx{border-left-color:var(--success)}.log-entry.tx{border-left-color:var(--accent-primary)}.log-entry.sys{border-left-color:var(--warning)}.time{color:var(--text-secondary);white-space:nowrap}.dir-badge{border-radius:.25rem;padding:.1rem .3rem;font-size:.7rem;font-weight:700}.dir-badge.rx{color:var(--success);background-color:#22c55e33}.dir-badge.tx{color:var(--accent-primary);background-color:#3b82f633}.dir-badge.sys{color:var(--warning);background-color:#eab30833}.log-content{word-break:break-all;flex-direction:column;flex:1;gap:.25rem;display:flex}.text{color:var(--text-primary)}.hex{color:var(--text-secondary);font-size:.8rem}.terminal-footer{flex:none;grid-template-columns:minmax(220px,.85fr) minmax(300px,1.35fr);align-items:stretch;gap:.75rem;display:grid}.terminal-command-row{align-items:center;gap:.5rem;width:100%;display:flex}.terminal-command-row .ui-input{flex:1 1 0;min-width:0}.quick-frame-list{grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:.5rem;max-height:8rem;padding-right:.125rem;display:grid;overflow-y:auto}.quick-frame-btn{text-align:center;white-space:normal;word-break:keep-all;justify-content:center;min-height:2.25rem;padding:.35rem .45rem;font-size:.75rem;line-height:1.2}@media (width<=620px){.terminal-footer{grid-template-columns:1fr}.quick-frame-list{grid-template-columns:repeat(auto-fit,minmax(104px,1fr))}}.text-blue-400{color:#60a5fa}.text-green-400{color:#4ade80}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#0000001a}::-webkit-scrollbar-thumb{background:#fff3;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.flex{display:flex}.items-center{align-items:center}.gap-2{gap:.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mt-2{margin-top:.5rem}.ml-auto{margin-left:auto}.flex-1{flex:1}.text-sm{font-size:.875rem}.text-xs{font-size:.75rem}.w-32{width:8rem}.w-20{width:5rem}.ui-input{border:1px solid var(--border-color);color:#fff;background:#0000004d;border-radius:4px;outline:none;padding:.4rem .5rem;font-family:inherit}.ui-input:focus{border-color:var(--accent-primary)}.control-groups{flex-direction:column;gap:1.5rem;display:flex}.ctrl-group h3{color:var(--text-secondary);margin:0;font-size:1rem}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.gap-4{gap:1rem}.font-mono{font-family:Fira Code,Consolas,monospace}.text-gray-300{color:#d1d5db}.text-purple-300{color:#d8b4fe}.text-yellow-300{color:#fde047}.text-blue-300{color:#93c5fd}.bg-black\/20{background-color:#0003}.p-2{padding:.5rem}.rounded{border-radius:.25rem}.mr-4{margin-right:1rem}.w-8{width:2rem}.font-bold{font-weight:700}.bg-red-900\/40{background-color:#7f1d1d66}.border{border-style:solid;border-width:1px}.border-red-500\/50{border-color:#ef444480}.rounded-lg{border-radius:.5rem}.p-4{padding:1rem}.mb-4{margin-bottom:1rem}.text-red-200{color:#fecaca}.text-red-300{color:#fca5a5}.text-red-400{color:#f87171}.shrink-0{flex-shrink:0}.text-xl{font-size:1.25rem}.m-0{margin:0}.opacity-80{opacity:.8}.bg-gray-700\/50{background-color:#37415180}.text-gray-400{color:#9ca3af}.cursor-not-allowed{cursor:not-allowed}.border-gray-600{border-color:#4b5563}.col-span-3{grid-column:span 3/span 3}.text-center{text-align:center}.bg-red-900\/30{background-color:#7f1d1d4d}.border-red-500\/30{border-color:#ef44444d}.border-t{border-top-style:solid;border-top-width:1px}.border-gray-700{border-color:#374151}.px-3{padding-left:.75rem;padding-right:.75rem}.bg-black\/30{background-color:#0000004d}.calibration-wizard{color:var(--text-primary);margin-top:1rem}.calibration-wizard-heading,.calibration-danger-zone,.calibration-path-details,.calibration-validation-result,.calibration-metrics{gap:.75rem;display:flex}.calibration-wizard-heading{justify-content:space-between;align-items:flex-start}.calibration-wizard-heading h3,.calibration-wizard h4{margin:0}.calibration-wizard-heading p,.calibration-path-card p,.calibration-action-card p,.calibration-current-card p,.calibration-danger-zone p{color:var(--text-secondary);margin:.4rem 0 0;font-size:.78rem;line-height:1.5}.calibration-safety-note{color:#fef3c7;background:#92400e47;border:1px solid #f59e0b73;border-radius:.4rem;flex:0 23rem;padding:.55rem .7rem;font-size:.76rem;line-height:1.4}.calibration-object-picker{grid-template-columns:repeat(5,minmax(92px,1fr));gap:.45rem;margin-top:.85rem;display:grid}.calibration-path-tab{color:#e2e8f0;cursor:pointer;text-align:left;background:#0f172a80;border:1px solid #94a3b852;border-radius:.45rem;flex-direction:column;justify-content:center;align-items:flex-start;gap:.15rem;min-height:3.4rem;padding:.45rem .65rem;display:flex}.calibration-path-tab small{color:#94a3b8;font-size:.68rem}.calibration-path-tab.selected{background:#1e40af47;border-color:#60a5fa;box-shadow:inset 0 0 0 1px #60a5fa3d}.calibration-path-tab.completed{border-color:#4ade80a6}.calibration-path-tab.completed small{color:#86efac}.calibration-path-tab.current{border-style:dashed}.calibration-path-tab:disabled{cursor:not-allowed;opacity:.52}.calibration-progress-summary{color:#cbd5e1;margin-top:.55rem;font-size:.72rem}.calibration-stepper{grid-template-columns:repeat(6,minmax(0,1fr));gap:.3rem;margin:.9rem 0;display:grid}.calibration-step{color:#64748b;align-items:center;gap:.35rem;min-width:0;font-size:.67rem;display:flex}.calibration-step>span{border:1px solid #475569;border-radius:999px;flex:0 0 1.25rem;place-items:center;width:1.25rem;height:1.25rem;font-size:.7rem;display:inline-grid}.calibration-step small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.calibration-step.active{color:#bfdbfe;font-weight:600}.calibration-step.active>span{color:#fff;background:#2563eb;border-color:#60a5fa}.calibration-step.complete{color:#86efac}.calibration-step.complete>span{background:#16653480;border-color:#22c55e}.calibration-path-card,.calibration-action-card,.calibration-current-card{background:#1e293b59;border:1px solid #a78bfa47;border-radius:.55rem;margin-top:.65rem;padding:.85rem}.calibration-path-card h4,.calibration-action-card h4,.calibration-current-card h4{color:#e9d5ff;font-size:.9rem}.calibration-eyebrow{color:#c4b5fd;letter-spacing:.04em;text-transform:uppercase;font-size:.68rem}.calibration-path-details{flex-wrap:wrap;margin-top:.65rem}.calibration-path-details>div{flex-direction:column;flex:30%;gap:.2rem;min-width:12rem;display:flex}.calibration-path-details strong{color:#93c5fd;font-size:.7rem}.calibration-path-details span{color:#d1d5db;font-size:.76rem;line-height:1.4}.calibration-action-card{border-color:#3b82f659}.calibration-action-card>.btn{margin-top:.65rem}.calibration-complete-card{background:#14532d2e;border-color:#22c55e85}.calibration-standard-input{color:#cbd5e1;flex-direction:column;gap:.3rem;max-width:20rem;margin-top:.65rem;font-size:.75rem;display:flex}.calibration-metrics{flex-wrap:wrap;margin-top:.65rem}.calibration-metrics span,.calibration-fit-result,.calibration-validation-result{color:#cbd5e1;background:#0f172aa6;border-radius:.35rem;padding:.45rem .55rem;font-size:.72rem;line-height:1.4}.calibration-metrics b{color:#f8fafc}.calibration-fit-result{margin-top:.65rem}.calibration-validation-result{color:#bbf7d0;background:#14532d38;flex-wrap:wrap;margin-top:.65rem}.calibration-next-point-hint{background:#5b21b629;border-left:3px solid #a78bfa;margin-top:.65rem;padding:.45rem .6rem;color:#ddd6fe!important}.calibration-warning{color:#fde68a!important}.calibration-fit-failure-panel{background:#7f1d1d2e;border:1px solid #f8717180;border-radius:.45rem;margin-top:.75rem;padding:.65rem}.calibration-fit-failure-panel p{margin:.4rem 0}.calibration-fit-diagnostic-table{min-width:46rem;margin-top:.45rem}.calibration-suspect-row td{color:#fef08a;background:#78350f33}.calibration-fit-diagnostic-table .btn{padding:.25rem .45rem;font-size:.68rem}.calibration-secondary-actions{flex-wrap:wrap;align-items:center;gap:.65rem;margin-top:.75rem;display:flex}.calibration-secondary-actions span{color:#94a3b8;font-size:.72rem}.calibration-training-table-wrap{margin-top:.75rem;overflow-x:auto}.calibration-training-table-title{color:#94a3b8;margin-bottom:.35rem;font-size:.7rem}.calibration-empty-table{margin-bottom:0!important}.calibration-training-table{border-collapse:collapse;width:100%;min-width:34rem;font-size:.72rem}.calibration-training-table th{color:#93c5fd;background:#0f172abf;font-weight:600}.calibration-training-table th,.calibration-training-table td{text-align:left;padding:.35rem .45rem}.calibration-training-table td{color:#d1d5db}.calibration-operation-message{color:#dbeafe;background:#1e40af2e;border-left:3px solid #60a5fa;margin-top:.75rem;padding:.55rem .7rem;font-size:.76rem;line-height:1.45}.calibration-operation-message.error{color:#fecaca;background:#7f1d1d4d;border-left-color:#f87171}.calibration-diagnostics{color:#cbd5e1;border:1px solid #64748b66;border-radius:.4rem;margin-top:.7rem;padding:.35rem .55rem}.calibration-diagnostics summary{cursor:pointer;color:#94a3b8;font-size:.75rem}.calibration-diagnostics-content{overflow-wrap:anywhere;margin:.55rem 0 .2rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.7rem;line-height:1.55}.calibration-danger-zone{background:#7f1d1d33;border:1px solid #f871718c;border-radius:.55rem;justify-content:space-between;align-items:center;margin-top:.85rem;padding:.75rem}.calibration-danger-zone h4{color:#fecaca;font-size:.82rem}.factory-coefficient-list{color:#fecaca;flex-wrap:wrap;gap:.25rem .65rem;margin-top:.45rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.67rem;display:flex}.calibration-factory-actions{flex-wrap:wrap;flex:none;justify-content:flex-end;gap:.5rem;display:flex}@media (width<=760px){.calibration-wizard-heading,.calibration-danger-zone{flex-direction:column}.calibration-safety-note{flex-basis:auto}.calibration-object-picker{grid-template-columns:repeat(2,minmax(0,1fr))}.calibration-stepper{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:.5rem}.calibration-factory-actions{width:100%}.calibration-factory-actions>.btn{flex:100%;justify-content:center}}table th,table td{border:1px solid #ffffff26}
