:root{--color-border: #32445c;--color-muted: #9fb1c5;--color-text: #e4edf5;--color-surface: #1e2a3a;--color-surface-raised: #253246;--color-canvas: #16202d;--color-accent: #5aa4ff;--color-accent-contrast: #0c1624;--color-button: #5aa4ff;--color-button-hover: #85c3ff;--color-button-active: #005c99;--color-warning: #ffd27a;--color-warning-border: #d9b25e;--color-error: #ff6b6b;--color-error-text: #ffb3b3;--gap: 14px;--panel-min-w: 320px;--panel-min-h: 220px}body{font-family:system-ui,sans-serif;margin:24px;background:var(--color-canvas);color:var(--color-text)}.topbar{display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:"left center right";align-items:center;gap:12px;margin-bottom:16px}.topbarLeft{grid-area:left;display:flex;align-items:center}.topbarCenter{grid-area:center;display:flex;align-items:center;justify-content:center}.topbarRight{grid-area:right;display:flex;align-items:center;justify-content:flex-end}.topbarGroup{display:inline-flex;align-items:center;gap:12px}.topbarLink{color:var(--color-accent);font-size:14px;text-decoration:none}.topbarLink:hover{text-decoration:underline}.tabs{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:12px}.tabButton{border:1px solid var(--color-border);border-radius:999px;background:var(--color-surface-raised);color:var(--color-text);font-size:14px;padding:8px 14px;cursor:pointer}.tabButton--active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-contrast);font-weight:600}button{padding:10px 14px;font-size:16px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-button);color:var(--color-text);transition:background .15s ease}button:enabled:hover{background:var(--color-button-hover)}button:enabled:active{background:var(--color-button-active)}button:disabled{background:var(--color-surface);color:var(--color-muted);cursor:not-allowed;opacity:.65}.status{color:var(--color-muted)}.dashboard{display:flex;flex-direction:column;align-items:stretch;gap:var(--gap)}.stackCol{display:flex;flex-direction:column}.stackGap10{gap:10px}.dashboardControls{justify-content:flex-start;margin-bottom:0}.dashboardPanels{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:var(--gap)}.panel{border:1px solid var(--color-border);border-radius:10px;padding:10px;background:var(--color-surface);flex:0 0 auto;resize:both;overflow:hidden;min-width:var(--panel-min-w);min-height:var(--panel-min-h);width:420px;height:400px;display:flex;flex-direction:column;gap:8px}.panelHeader{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.panelTitle{margin:0;font-size:16px}.commandPanelTitle{display:inline-flex;align-items:center;gap:8px}.commandPanelTitle:after{content:"";width:9px;height:9px;border-radius:50%;background:color-mix(in srgb,var(--color-muted) 40%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--color-muted) 50%,transparent);opacity:.45;transition:opacity .12s ease,background-color .12s ease,box-shadow .12s ease}.commandPanelTitle--rxActive:after{background:#28d15b;box-shadow:0 0 0 1px color-mix(in srgb,#28d15b 45%,transparent),0 0 8px color-mix(in srgb,#28d15b 50%,transparent);opacity:1}.panelHint{color:var(--color-muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panelBody{flex:1 1 auto;min-height:0}.panel--minimized .panelBody,.panel--minimized .panelHint{display:none}.panel--minimized{height:auto;min-height:auto}.panel--tabHidden{display:none}.fullWidthControl{width:100%}.log{width:100%;height:100%;box-sizing:border-box;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--color-canvas);color:var(--color-text);border:1px solid var(--color-border);resize:none}.plotStack{position:relative;width:100%;height:100%;border:1px solid var(--color-border);border-radius:6px;overflow:hidden}.plotLayer{position:absolute;inset:0;width:100%;height:100%;display:block}.uiTooltip{min-height:1.2em;font-size:12px;color:var(--color-accent-contrast);opacity:0;pointer-events:none;background:var(--color-warning);border:1px solid var(--color-warning-border);border-radius:4px;padding:4px 6px}.plotHoverOverlay{position:absolute;left:0;top:0;transform:translate(-50%,calc(-100% - 6px));white-space:nowrap;z-index:5}.plotHoverOverlay--flipBelow{transform:translate(-50%,6px)}.plotHoverOverlay--visible{opacity:1}.exportWidget{height:100%;display:flex;flex-direction:column;position:relative}.exportButtons{display:flex;flex-direction:column;gap:10px}.exportAutoDownloadRow{display:inline-flex;align-items:center;gap:8px;font-size:14px;text-transform:none}.exportCounterRow{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:0}.exportCounterValue{font-weight:600}.exportInfoWrap{margin-left:auto;display:inline-flex;align-items:center;justify-content:center}.exportInfoIcon{width:1em;height:1em;border-radius:50%;border:1px solid var(--color-muted);color:var(--color-muted);display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;line-height:1;cursor:help}.exportInfoTooltip{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:calc(100% - 24px);transition:opacity 1s ease;white-space:normal;overflow-wrap:anywhere;z-index:20}.exportInfoWrap:hover .exportInfoTooltip,.exportInfoWrap:focus-within .exportInfoTooltip{opacity:1}.exportConfigurationLayout{align-items:center;text-align:center;width:100%;max-width:400px;margin:0 auto}.exportConfigurationFileLabel{box-sizing:border-box;border:1px solid var(--color-border);border-radius:6px;background:var(--color-canvas);color:var(--color-muted);font-size:13px;padding:10px 12px;overflow-wrap:anywhere}.exportConfigurationApplyRow{display:flex;align-items:center;gap:10px}.exportConfigurationApplyButton{flex:1 1 auto}.exportConfigurationWarningWrap{position:relative;display:inline-flex;align-items:center;justify-content:center}.exportConfigurationWarningIcon{width:1em;height:1em;border-radius:50%;border:1px solid var(--color-muted);color:var(--color-muted);display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;line-height:1;cursor:help}.exportConfigurationWarningTooltip{position:absolute;right:0;bottom:calc(100% + 6px);width:220px;text-align:left;white-space:normal;overflow-wrap:anywhere;transition:opacity .15s ease;z-index:20}.exportConfigurationWarningWrap:hover .exportConfigurationWarningTooltip,.exportConfigurationWarningWrap:focus-within .exportConfigurationWarningTooltip{opacity:1}.exportConfigurationStatus{color:var(--color-muted);font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:2.4em;white-space:pre-line}.commandPanelFields{margin-bottom:12px}.commandPanelButtonStack{display:flex;flex-direction:column;gap:8px}.commandPanelRow{display:grid;grid-template-columns:180px minmax(0,1fr) 72px;position:relative;align-items:center;gap:8px}.commandPanelFieldLabel{font-size:14px;text-align:left}.commandPanelInputWrap{position:relative;display:block;overflow:visible}.commandPanelInput{width:100%;box-sizing:border-box;padding:6px 8px;background:var(--color-surface-raised);color:var(--color-text);border:1px solid var(--color-border)}.commandPanelInput--error{border:1px solid var(--color-error);outline-color:var(--color-error)}.commandPanelUnits{min-height:1em;color:var(--color-muted);font-size:12px;text-align:left}.commandPanelTooltip{position:absolute;bottom:calc(100% + 6px);left:-100px;transform:none;transition:opacity 1s ease;white-space:nowrap;z-index:5}.commandPanelTooltip--visible{opacity:1}.commandPanelTooltip--fading{opacity:0}.motorControlWidget{height:100%;min-height:0;gap:12px}.motorControlModeRow{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:10px}.motorControlModeLabel{color:var(--color-muted);font-size:14px}.motorControlModeSelect{width:100%;box-sizing:border-box;padding:6px 8px;background:var(--color-surface-raised);color:var(--color-text);border:1px solid var(--color-border)}.motorControlModePanels{flex:1 1 auto;min-height:0}.motorControlModePanel{height:100%}.motorControlModePanel--hidden{display:none}.sineSweepButtons{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sineSweepCurrentFrequency{display:flex;align-items:center;gap:8px;color:var(--color-muted);font-size:13px}.motorCommandWidget{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px}.motorCommandValueEditor{width:min(160px,100%);display:flex;align-items:center;justify-content:center}.motorCommandValueLabel{width:100%;box-sizing:border-box;color:var(--color-text);font-size:20px;font-weight:600;text-align:center;padding:6px 10px;border:1px dashed transparent;border-radius:10px;cursor:text;transition:border-color .15s ease,background-color .15s ease}.motorCommandValueLabel:hover,.motorCommandValueLabel:focus-visible{border-color:color-mix(in srgb,var(--color-accent) 45%,transparent);background:color-mix(in srgb,var(--color-accent) 12%,transparent);outline:none}.motorCommandValueInput{width:100%;box-sizing:border-box;padding:6px 10px;font-size:20px;font-weight:600;text-align:center;border-radius:10px}.motorCommandValueInput:focus-visible{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--color-accent) 25%,transparent)}.motorCommandValueInput::-webkit-outer-spin-button,.motorCommandValueInput::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.motorCommandValueInput[type=number]{appearance:textfield}.motorCommandSliderRow{width:min(420px,100%);display:grid;grid-template-columns:max-content minmax(0,1fr) max-content;align-items:center;gap:12px}.motorCommandSliderTrackWrap{position:relative;width:100%;display:flex;align-items:center;--motor-slider-rest: #ffffff;--motor-slider-active: var(--color-accent);--motor-slider-progress: 50%}.motorCommandSlider{width:100%;position:relative;z-index:1;appearance:none;-webkit-appearance:none;background:transparent;cursor:default}.motorCommandSlider::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:linear-gradient(to right,var(--motor-slider-active) 0%,var(--motor-slider-active) var(--motor-slider-progress),var(--motor-slider-rest) var(--motor-slider-progress),var(--motor-slider-rest) 100%)}.motorCommandSlider::-moz-range-track{height:6px;border-radius:999px;background:linear-gradient(to right,var(--motor-slider-active) 0%,var(--motor-slider-active) var(--motor-slider-progress),var(--motor-slider-rest) var(--motor-slider-progress),var(--motor-slider-rest) 100%)}.motorCommandSlider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;margin-top:-6px;border:2px solid var(--motor-slider-active);border-radius:50%;background:var(--motor-slider-active);cursor:grab;transition:transform .15s ease,box-shadow .15s ease}.motorCommandSlider::-moz-range-thumb{width:18px;height:18px;border:2px solid var(--motor-slider-active);border-radius:50%;background:var(--motor-slider-active);cursor:grab;transition:transform .15s ease,box-shadow .15s ease}.motorCommandSlider:hover::-webkit-slider-thumb,.motorCommandSlider:focus-visible::-webkit-slider-thumb{transform:scale(1.08);box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 30%,transparent)}.motorCommandSlider:hover::-moz-range-thumb,.motorCommandSlider:focus-visible::-moz-range-thumb{transform:scale(1.08);box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 30%,transparent)}.motorCommandSlider:active::-webkit-slider-thumb{cursor:grabbing;transform:scale(1.08);box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 30%,transparent)}.motorCommandSlider:active::-moz-range-thumb{cursor:grabbing;transform:scale(1.08);box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 30%,transparent)}.motorCommandSlider:active::-webkit-slider-runnable-track{box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 20%,transparent)}.motorCommandSlider:active::-moz-range-track{box-shadow:0 0 0 4px color-mix(in srgb,var(--motor-slider-active) 20%,transparent)}.motorCommandZeroMarker{position:absolute;left:50%;top:50%;width:10px;height:10px;border:2px solid var(--motor-slider-rest);border-radius:50%;background:var(--motor-slider-rest);transform:translate(-50%,-50%);pointer-events:none;z-index:2}.motorCommandZeroMarker--active{border-color:var(--motor-slider-active);background:var(--motor-slider-active)}.motorCommandZeroMarker--hidden{display:none}.motorCommandBoundLabel{color:var(--color-muted);font-size:13px;white-space:nowrap}.motorCommandHoldRow{display:inline-flex;align-items:center;justify-content:center;gap:8px;color:var(--color-muted);font-size:14px;text-align:center}.commandPanelError{color:var(--color-error-text);font-size:13px;min-height:1.2em;margin-top:8px}.commandPanelReceived{color:var(--color-muted);font-size:12px;margin-top:8px;min-height:1.2em}.firmwareUpdateLayout{align-items:center;text-align:center;width:100%;max-width:400px;margin:0 auto}.firmwareUpdateLabel{box-sizing:border-box;border:1px solid var(--color-border);border-radius:6px;background:var(--color-canvas);color:var(--color-muted);font-size:14px;min-height:22px;padding:8px;word-break:break-word}.firmwareUpdateProgressRow{position:relative;display:block;overflow:visible}.firmwareUpdateProgress{display:block;box-sizing:border-box;width:100%;height:16px;appearance:none;-webkit-appearance:none;cursor:default;pointer-events:none}.firmwareUpdateProgress:hover{appearance:none;-webkit-appearance:none;filter:none}.firmwareUpdateProgress::-webkit-progress-bar{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:999px}.firmwareUpdateProgress::-webkit-progress-value{background:var(--color-accent);border-radius:999px}.firmwareUpdateProgress::-moz-progress-bar{background:var(--color-accent);border-radius:999px}.firmwareUpdateProgressStatus{color:var(--color-muted);font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-line;text-align:center}.firmwareMetadataOutput{min-height:150px;height:100%;box-sizing:border-box;padding:10px 12px;resize:none;border:1px solid var(--color-border);border-radius:6px;background:var(--color-canvas);color:var(--color-text);font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap}.firmwareUpdateSpinner{position:absolute;right:-22px;top:50%;margin-top:-7px;width:14px;height:14px;border:2px solid transparent;border-top-color:transparent;border-right-color:transparent;border-radius:50%;opacity:0}.firmwareUpdateSpinner--visible{border-top-color:var(--color-accent);border-right-color:var(--color-accent);opacity:1;animation:firmwareUpdateSpin .8s linear infinite}@keyframes firmwareUpdateSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
