From d5acb04b88373d33b038bb59945fb5ab8b4f543b Mon Sep 17 00:00:00 2001 From: Christian Kolset Date: Mon, 20 Apr 2026 16:55:57 -0600 Subject: V8 --- ui/style.qss | 545 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 545 insertions(+) (limited to 'ui/style.qss') diff --git a/ui/style.qss b/ui/style.qss index 60415fb..3761c68 100644 --- a/ui/style.qss +++ b/ui/style.qss @@ -376,3 +376,548 @@ QPushButton:pressed { background-color: #172554; } QPushButton:disabled { color: #334155; border-color: #1c2540; } QLabel { color: #94a3b8; } + +/* ══════════════════════════════════════════════════════════════ + Devices Window + ══════════════════════════════════════════════════════════════ */ + +QWidget#devWindowTitleBar { + background-color: #0f1521; + border-bottom: 1px solid #2a3558; +} +QLabel#devWindowTitle { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + font-weight: 700; + letter-spacing: 2px; + color: #64748b; +} +QFrame#devWindowDivider { + color: #2a3558; + max-height: 1px; +} + +/* ══════════════════════════════════════════════════════════════ + Control Widgets — shared frame + ══════════════════════════════════════════════════════════════ */ + +QFrame#controlWidget { + background-color: #161d2e; + border: 1px solid #2a3558; + border-radius: 6px; +} +QFrame#controlWidget:hover { + border-color: #3b82f6; +} + +QWidget#controlWidgetHeader { + background-color: #0f1521; + border-radius: 5px 5px 0 0; + border-bottom: 1px solid #2a3558; +} +QLabel#controlWidgetIcon { + font-size: 13px; + color: #3b82f6; + padding-right: 4px; +} +QLabel#controlWidgetTitle { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + font-weight: 700; + letter-spacing: 1.5px; + color: #64748b; +} +QWidget#controlWidgetBody { + background-color: #161d2e; + border-radius: 0 0 5px 5px; +} + +/* ── On/Off Switch ─────────────────────────────────────────── */ + +QPushButton#switchBtn, +QPushButton#switchBtnOff { + background-color: #1c2540; + color: #475569; + border: 2px solid #2a3558; + border-radius: 6px; + font-family: "IBM Plex Mono", monospace; + font-size: 18px; + font-weight: 800; + letter-spacing: 4px; + min-height: 52px; +} +QPushButton#switchBtnOn { + background-color: #14532d; + color: #dcfce7; + border: 2px solid #22c55e; + border-radius: 6px; + font-family: "IBM Plex Mono", monospace; + font-size: 18px; + font-weight: 800; + letter-spacing: 4px; + min-height: 52px; +} +QPushButton#switchBtnOff:hover { border-color: #64748b; color: #94a3b8; } +QPushButton#switchBtnOn:hover { background-color: #166534; } + +QLabel#switchIndicatorOff { + font-size: 18px; + color: #334155; +} +QLabel#switchIndicatorOn { + font-size: 18px; + color: #22c55e; +} +QLabel#switchStateLbl { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + font-weight: 700; + letter-spacing: 1px; + color: #475569; +} + +/* ── Motor Control ─────────────────────────────────────────── */ + +QLabel#motorSpeedLbl { + font-family: "IBM Plex Mono", monospace; + font-size: 28px; + font-weight: 700; + color: #00d4ff; +} +QLabel#motorUnitLbl { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + color: #475569; + padding-top: 12px; +} +QLabel#motorPctLbl { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + color: #475569; +} + +QSlider#motorSlider::groove:horizontal, +QSlider#pwmSlider::groove:horizontal { + background: #1c2540; + height: 6px; + border-radius: 3px; +} +QSlider#motorSlider::handle:horizontal, +QSlider#pwmSlider::handle:horizontal { + background: #3b82f6; + border: 2px solid #1d4ed8; + width: 16px; + height: 16px; + margin: -5px 0; + border-radius: 8px; +} +QSlider#motorSlider::sub-page:horizontal { + background: #1d4ed8; + border-radius: 3px; +} +QSlider#pwmSlider::sub-page:horizontal { + background: #7c3aed; + border-radius: 3px; +} +QSlider#motorSlider::handle:horizontal:hover, +QSlider#pwmSlider::handle:horizontal:hover { + background: #60a5fa; +} + +QPushButton#motorDirBtn { + background-color: #1c2540; + color: #94a3b8; + border: 1px solid #2a3558; + border-radius: 4px; + padding: 5px 10px; + font-family: "IBM Plex Mono", monospace; + font-size: 11px; +} +QPushButton#motorDirBtnRev { + background-color: #2d1b69; + color: #c4b5fd; + border: 1px solid #7c3aed; + border-radius: 4px; + padding: 5px 10px; + font-family: "IBM Plex Mono", monospace; + font-size: 11px; +} + +QPushButton#motorRunBtnOff { + background-color: #1c2540; + color: #64748b; + border: 1px solid #2a3558; + border-radius: 4px; + padding: 5px 12px; + font-family: "IBM Plex Mono", monospace; + font-weight: 700; + letter-spacing: 0.5px; +} +QPushButton#motorRunBtnOn { + background-color: #166534; + color: #dcfce7; + border: 1px solid #22c55e; + border-radius: 4px; + padding: 5px 12px; + font-family: "IBM Plex Mono", monospace; + font-weight: 700; + letter-spacing: 0.5px; +} +QPushButton#motorRunBtnOff:hover { border-color: #64748b; color: #94a3b8; } +QPushButton#motorRunBtnOn:hover { background-color: #15803d; } + +/* ── Setpoint Control ──────────────────────────────────────── */ + +QLabel#spLabel { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + font-weight: 700; + color: #3b82f6; + letter-spacing: 0.5px; +} +QLabel#pvLabel { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + font-weight: 700; + color: #22c55e; + letter-spacing: 0.5px; +} +QLabel#errLabel { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + font-weight: 700; + color: #f59e0b; + letter-spacing: 0.5px; +} +QLabel#pvValue, QLabel#errValue { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + color: #94a3b8; +} +QDoubleSpinBox#spSpinbox { + font-family: "IBM Plex Mono", monospace; + font-size: 13px; + font-weight: 600; + color: #e2e8f0; + background-color: #0b0e13; + border: 1px solid #3b82f6; + border-radius: 3px; + padding: 3px 6px; +} +QPushButton#spStepBtn { + background-color: #1e3a5f; + color: #93c5fd; + border: 1px solid #3b82f6; + border-radius: 3px; + font-size: 16px; + font-weight: 700; + padding: 0; +} +QPushButton#spStepBtn:hover { + background-color: #1d4ed8; + color: #eff6ff; +} + +/* ── PWM Control ───────────────────────────────────────────── */ + +QLabel#pwmLabel { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + color: #64748b; + letter-spacing: 0.5px; +} +QLabel#pwmValue { + font-family: "IBM Plex Mono", monospace; + font-size: 13px; + font-weight: 700; + color: #c4b5fd; +} +QSpinBox#pwmFreqSpin { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + background-color: #0b0e13; + border: 1px solid #2a3558; + border-radius: 3px; + color: #e2e8f0; + padding: 3px 6px; +} + +/* ══════════════════════════════════════════════════════════════ + Plot Config Button (toolbar) + ══════════════════════════════════════════════════════════════ */ + +QPushButton#plotCfgButton { + background-color: #1a1f35; + color: #818cf8; + border: 1px solid #4338ca; + border-radius: 4px; + padding: 5px 14px; + font-weight: 600; +} +QPushButton#plotCfgButton:hover { + background-color: #312e81; + color: #e0e7ff; + border-color: #6366f1; +} +QPushButton#plotCfgButton:checked { + background-color: #312e81; + color: #e0e7ff; + border-color: #818cf8; +} + +/* ══════════════════════════════════════════════════════════════ + Plot Config Window + ══════════════════════════════════════════════════════════════ */ + +QWidget#cfgTopBar { + background-color: #0b0e13; + border-bottom: 1px solid #2a3558; +} +QLabel#cfgTopBarTitle { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + font-weight: 700; + letter-spacing: 1.5px; + color: #818cf8; +} +QCheckBox#cfgLiveChk { + color: #94a3b8; + font-size: 11px; + spacing: 5px; +} + +QWidget#cfgGlobalBar { + background-color: #0f1521; + border-bottom: 1px solid #1c2540; +} +QDoubleSpinBox#cfgGlobalSpin { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + background: #0b0e13; + border: 1px solid #2a3558; + border-radius: 3px; + color: #e2e8f0; + padding: 3px 6px; +} + +QWidget#cfgBottomBar { + background-color: #0b0e13; + border-top: 1px solid #2a3558; +} + +/* ── Plot Block ──────────────────────────────────────────────── */ + +QFrame#plotBlock { + background-color: #111620; + border: 1px solid #2a3558; + border-radius: 6px; +} +QFrame#plotBlock:hover { + border-color: #4338ca; +} + +QWidget#plotBlockHeader { + background-color: #0d1117; + border-radius: 5px 5px 0 0; + border-bottom: 1px solid #2a3558; +} +QLineEdit#plotBlockTitle { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + font-weight: 700; + color: #c7d2fe; + background: transparent; + border: none; + border-bottom: 1px solid transparent; + padding: 2px 4px; +} +QLineEdit#plotBlockTitle:focus { + border-bottom: 1px solid #4338ca; + color: #e0e7ff; +} + +QToolButton#plotMoveBtn { + background-color: transparent; + color: #475569; + border: none; + font-size: 11px; + border-radius: 3px; +} +QToolButton#plotMoveBtn:hover { + background-color: #1c2540; + color: #94a3b8; +} +QToolButton#plotRemoveBtn { + background-color: transparent; + color: #475569; + border: none; + font-size: 12px; + border-radius: 3px; +} +QToolButton#plotRemoveBtn:hover { + background-color: #450a0a; + color: #ef4444; +} + +QWidget#plotBlockSettings { + background-color: #111620; + border-bottom: 1px solid #1c2540; +} +QLineEdit#plotYLabelEdit { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + background: #0b0e13; + border: 1px solid #2a3558; + border-radius: 3px; + color: #94a3b8; + padding: 3px 6px; + max-width: 140px; +} + +QWidget#plotBlockTraces { + background-color: #111620; + border-radius: 0 0 5px 5px; +} + +/* ── Trace Row ───────────────────────────────────────────────── */ + +QFrame#traceRow { + background-color: #161d2e; + border: 1px solid #1c2540; + border-radius: 4px; +} +QFrame#traceRow:hover { + border-color: #2a3558; + background-color: #1c2540; +} + +QLabel#traceSource { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + color: #475569; +} +QLineEdit#traceLabel { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + background: #0b0e13; + border: 1px solid #1c2540; + border-radius: 3px; + color: #94a3b8; + padding: 2px 6px; +} +QLineEdit#traceLabel:focus { + border-color: #3b82f6; + color: #e2e8f0; +} +QComboBox#traceStyleCb { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + background: #0b0e13; + border: 1px solid #1c2540; + border-radius: 3px; + color: #64748b; + padding: 2px 4px; +} +QDoubleSpinBox#traceWidthSpin { + font-family: "IBM Plex Mono", monospace; + font-size: 10px; + background: #0b0e13; + border: 1px solid #1c2540; + border-radius: 3px; + color: #64748b; + padding: 2px 4px; +} +QToolButton#traceRemoveBtn { + background: transparent; + color: #334155; + border: none; + font-size: 12px; + border-radius: 3px; +} +QToolButton#traceRemoveBtn:hover { + background-color: #450a0a; + color: #ef4444; +} + +/* ── Add trace button / channel picker ──────────────────────── */ + +QPushButton#addTraceBtn { + background-color: #1c2540; + color: #64748b; + border: 1px dashed #2a3558; + border-radius: 4px; + padding: 4px 12px; + font-size: 11px; +} +QPushButton#addTraceBtn:hover { + background-color: #1e3a5f; + color: #93c5fd; + border-color: #3b82f6; + border-style: solid; +} +QComboBox#channelPickerCb { + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + background: #0b0e13; + border: 1px solid #2a3558; + border-radius: 3px; + color: #64748b; + padding: 4px 8px; +} +QComboBox#channelPickerCb:focus { border-color: #3b82f6; } + +/* ══════════════════════════════════════════════════════════════ + Signal Builder window / code editor + ══════════════════════════════════════════════════════════════ */ + +QTabWidget#signalBuilderTabs::pane { + background-color: #0b0e13; + border: 1px solid #2a3558; +} +QTabWidget#signalBuilderTabs QTabBar::tab { + background-color: #0b0e13; + color: #475569; + border: 1px solid #1c2540; + padding: 6px 18px; + font-family: "IBM Plex Mono", monospace; + font-size: 11px; + letter-spacing: 0.5px; +} +QTabWidget#signalBuilderTabs QTabBar::tab:selected { + background-color: #161d2e; + color: #c7d2fe; + border-bottom: 2px solid #818cf8; +} + +QTextEdit#codeEditor { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + background-color: #060810; + color: #e2e8f0; + border: 1px solid #2a3558; + border-radius: 4px; + padding: 6px; + selection-background-color: #1e3a5f; +} +QTextEdit#codeEditor:focus { + border-color: #818cf8; +} + +/* ── Control panel header with device button ────────────────── */ +QWidget#controlPanelHeader { + background-color: #0f1521; + border-bottom: 1px solid #2a3558; +} +QPushButton#devicesSmallBtn { + background-color: transparent; + color: #475569; + border: 1px solid #2a3558; + border-radius: 3px; + font-size: 13px; + padding: 0; +} +QPushButton#devicesSmallBtn:hover { + background-color: #1c2540; + color: #94a3b8; + border-color: #3b82f6; +} -- cgit v1.2.3