/* LabUI — Light Theme */ * { font-family:"IBM Plex Sans","Segoe UI",Tahoma,sans-serif; font-size:12px; color:#1e293b; } QMainWindow,QDialog { background:#f8fafc; } QToolBar#mainToolbar { background:#ffffff; border-bottom:1px solid #e2e8f0; padding:4px 8px; spacing:4px; } QPushButton#runButton { background:#166534; color:#dcfce7; border:1px solid #22c55e; border-radius:4px; padding:5px 16px; font-family:"IBM Plex Mono",monospace; font-weight:600; min-width:90px; } QPushButton#runButton:checked { background:#991b1b; border-color:#ef4444; color:#fee2e2; } QPushButton#logButton { background:#f1f5f9; color:#64748b; border:1px solid #cbd5e1; border-radius:4px; padding:5px 14px; font-family:"IBM Plex Mono",monospace; min-width:80px; } QPushButton#logButton:enabled { color:#1e293b; border-color:#3b82f6; } QPushButton#logButton:disabled { background:#f8fafc; color:#94a3b8; border:1px solid #e2e8f0; } QPushButton#logButton:checked { background:#fef2f2; border-color:#ef4444; color:#991b1b; } QPushButton#logButton[recording="true"] { background:#ef4444; border-color:#fca5a5; color:#ffffff; } QPushButton#toolbarSectionBtn { background:#f1f5f9; color:#475569; border:1px solid #cbd5e1; border-radius:4px; padding:5px 14px; font-weight:600; } QPushButton#toolbarSectionBtn:hover { background:#e2e8f0; color:#1e293b; } QPushButton#toolbarSectionBtn:checked { background:#dbeafe; color:#1d4ed8; border-color:#3b82f6; } QLabel#timeLabel { font-family:"IBM Plex Mono",monospace; font-size:16px; font-weight:700; color:#3b82f6; letter-spacing:2px; padding-right:8px; } QLabel#panelHeader { background:#f1f5f9; color:#64748b; font-family:"IBM Plex Mono",monospace; font-size:10px; font-weight:700; letter-spacing:2px; padding:6px 8px; border-bottom:1px solid #e2e8f0; } QFrame#deviceCard { background:#ffffff; border:1px solid #e2e8f0; border-radius:6px; } QFrame#deviceCard:hover { border-color:#3b82f6; background:#f0f9ff; } QLabel#deviceName { font-size:13px; font-weight:600; color:#1e293b; } QLabel#deviceSub { font-family:"IBM Plex Mono",monospace; font-size:10px; color:#94a3b8; } QLabel#deviceChannelCount { font-size:11px; color:#3b82f6; } QPushButton#configButton { background:#f1f5f9; color:#64748b; border:1px solid #cbd5e1; border-radius:3px; padding:3px 10px; font-size:11px; } QPushButton#configButton:hover { background:#dbeafe; color:#1d4ed8; border-color:#3b82f6; } QScrollArea#deviceScroll { background:#f8fafc; border:none; } QFrame#traceRow { background:#ffffff; border:1px solid #e2e8f0; border-radius:4px; } QFrame#plotBlock { background:#f8fafc; border:1px solid #e2e8f0; border-radius:6px; } QWidget#plotBlockHeader { background:#f1f5f9; border-bottom:1px solid #e2e8f0; border-radius:5px 5px 0 0; } QLineEdit#plotBlockTitle { font-family:"IBM Plex Mono",monospace; font-size:12px; font-weight:700; color:#334155; background:transparent; border:none; } QWidget#plotBlockSettings { background:#f8fafc; border-bottom:1px solid #e2e8f0; } QWidget#plotBlockTraces { background:#f8fafc; border-radius:0 0 5px 5px; } QPushButton#addTraceBtn { background:#f0f9ff; color:#3b82f6; border:1px dashed #93c5fd; border-radius:4px; padding:4px 12px; } QPushButton#addTraceBtn:hover { background:#dbeafe; border-style:solid; } QPushButton#applyButton { background:#1d4ed8; color:#eff6ff; border:1px solid #3b82f6; border-radius:4px; padding:6px 20px; font-weight:600; } QPushButton#applyButton:hover { background:#1e40af; } QComboBox,QLineEdit,QDoubleSpinBox,QSpinBox { background:#ffffff; border:1px solid #cbd5e1; border-radius:3px; padding:4px 8px; color:#1e293b; font-family:"IBM Plex Mono",monospace; min-height:22px; } QComboBox:focus,QLineEdit:focus,QDoubleSpinBox:focus,QSpinBox:focus { border-color:#3b82f6; } QCheckBox { color:#475569; spacing:6px; } QCheckBox::indicator { width:14px;height:14px;border:1px solid #cbd5e1;border-radius:3px;background:#ffffff; } QCheckBox::indicator:checked { background:#3b82f6;border-color:#3b82f6; } QTabWidget::pane { background:#ffffff; border:1px solid #e2e8f0; border-radius:4px; } QTabBar::tab { background:#f1f5f9; color:#64748b; border:1px solid #e2e8f0; padding:6px 16px; margin-right:2px; } QTabBar::tab:selected { background:#ffffff; color:#1e293b; border-bottom:2px solid #3b82f6; } QGroupBox { border:1px solid #e2e8f0; border-radius:5px; margin-top:26px; padding-top:6px; background:#f8fafc; } QGroupBox::title { subcontrol-origin:margin; subcontrol-position:top left; left:10px; top:4px; background:#dbeafe; padding:3px 10px; border:1px solid #3b82f6; border-radius:4px; color:#1d4ed8; font-size:12px; font-weight:700; letter-spacing:0.5px; } QScrollBar:vertical { background:#f1f5f9; width:6px; margin:0; } QScrollBar::handle:vertical { background:#cbd5e1; border-radius:3px; min-height:20px; } QScrollBar::handle:vertical:hover { background:#3b82f6; } QScrollBar::add-line:vertical,QScrollBar::sub-line:vertical { height:0; } QSplitter::handle { background:#e2e8f0; } QSplitter::handle:hover { background:#3b82f6; } QStatusBar { background:#ffffff; border-top:1px solid #e2e8f0; color:#64748b; font-family:"IBM Plex Mono",monospace; font-size:11px; } QLabel#versionLabel { font-family:"IBM Plex Mono",monospace; font-size:10px; color:#64748b; padding-right:6px; } QPushButton { background:#f1f5f9; color:#475569; border:1px solid #cbd5e1; border-radius:4px; padding:5px 12px; } QPushButton:hover { background:#e2e8f0; color:#1e293b; } QTextEdit#codeEditor { font-family:"IBM Plex Mono",monospace; font-size:12px; background:#1e293b; color:#e2e8f0; border:1px solid #cbd5e1; border-radius:4px; padding:6px; } QLabel#traceSource { font-family:"IBM Plex Mono",monospace; font-size:10px; color:#64748b; } QWidget#devWindowTitleBar { background:#f1f5f9; border-bottom:1px solid #e2e8f0; } QLabel#devWindowTitle { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; letter-spacing:2px; color:#475569; } QFrame#devWindowDivider { color:#e2e8f0; max-height:1px; } QWidget#cfgGlobalBar { background:#f8fafc; border-bottom:1px solid #e2e8f0; } QWidget#cfgBottomBar { background:#f8fafc; border-top:1px solid #e2e8f0; } QTableWidget#channelTable { background:#ffffff; gridline-color:#f1f5f9; border:1px solid #e2e8f0; alternate-background-color:#f8fafc; } QHeaderView::section { background:#f1f5f9; color:#475569; border:none; border-bottom:1px solid #e2e8f0; padding:4px 8px; font-weight:600; } /* Port scanner list — light theme */ QListWidget#portList { background:#ffffff; border:1px solid #cbd5e1; border-radius:4px; color:#1e293b; font-family:"IBM Plex Mono",monospace; font-size:12px; } QListWidget#portList::item { padding:5px 8px; border-bottom:1px solid #f1f5f9; } QListWidget#portList::item:hover { background:#f0f9ff; color:#1d4ed8; } QListWidget#portList::item:selected { background:#dbeafe; color:#1d4ed8; border-left:3px solid #3b82f6; } /* ── Control panel widgets ───────────────────────────────────────── */ QFrame#controlWidget { background:#ffffff; border:1px solid #cbd5e1; border-radius:6px; } QWidget#controlWidgetHeader { background:#f1f5f9; border-radius:5px 5px 0 0; border-bottom:1px solid #e2e8f0; } QLabel#controlWidgetIcon { font-size:14px; color:#3b82f6; padding-right:4px; } QLabel#controlWidgetTitle { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; letter-spacing:1.5px; color:#64748b; } QWidget#controlWidgetBody { background:#ffffff; border-radius:0 0 5px 5px; } QFrame#controlWidgetWrapper { background:transparent; border:none; } /* Motor */ QLabel#motorSpeedLbl { font-family:"IBM Plex Mono",monospace; font-size:28px; font-weight:700; color:#1d4ed8; } QLabel#motorUnitLbl { font-family:"IBM Plex Mono",monospace; font-size:12px; color:#94a3b8; padding-top:12px; } QLabel#motorPctLbl { font-family:"IBM Plex Mono",monospace; font-size:12px; color:#94a3b8; } QSlider#motorSlider::groove:horizontal, QSlider#pwmSlider::groove:horizontal { background:#e2e8f0; 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:#3b82f6; border-radius:3px; } QSlider#pwmSlider::sub-page:horizontal { background:#7c3aed; border-radius:3px; } QPushButton#motorDirBtn { background:#f1f5f9; color:#64748b; border:1px solid #cbd5e1; border-radius:4px; padding:5px 10px; font-family:"IBM Plex Mono",monospace; font-size:12px; } QPushButton#motorDirBtnRev { background:#ede9fe; color:#6d28d9; border:1px solid #7c3aed; border-radius:4px; padding:5px 10px; font-family:"IBM Plex Mono",monospace; font-size:12px; } QPushButton#motorRunBtnOff { background:#f1f5f9; color:#94a3b8; border:1px solid #cbd5e1; border-radius:4px; padding:5px 12px; font-family:"IBM Plex Mono",monospace; font-weight:700; } QPushButton#motorRunBtnOn { background:#dcfce7; color:#166534; border:1px solid #22c55e; border-radius:4px; padding:5px 12px; font-family:"IBM Plex Mono",monospace; font-weight:700; } /* Switch */ QPushButton#switchBtnOff, QPushButton#switchBtn { background:#f1f5f9; color:#94a3b8; border:2px solid #cbd5e1; border-radius:6px; font-family:"IBM Plex Mono",monospace; font-size:18px; font-weight:800; letter-spacing:4px; min-height:52px; } QPushButton#switchBtnOn { background:#dcfce7; color:#166534; 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; } QLabel#switchIndicatorOff { font-size:18px; color:#cbd5e1; } 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:#94a3b8; } /* Setpoint */ QLabel#spLabel { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; color:#3b82f6; letter-spacing:0.5px; } QLabel#pvLabel { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; color:#16a34a; letter-spacing:0.5px; } QLabel#errLabel { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; color:#d97706; letter-spacing:0.5px; } QLabel#pvValue, QLabel#errValue { font-family:"IBM Plex Mono",monospace; font-size:12px; color:#64748b; } QDoubleSpinBox#spSpinbox { font-family:"IBM Plex Mono",monospace; font-size:13px; font-weight:600; color:#1e293b; background:#ffffff; border:1px solid #3b82f6; border-radius:3px; padding:3px 6px; } QPushButton#spStepBtn { background:#dbeafe; color:#1d4ed8; border:1px solid #3b82f6; border-radius:3px; font-size:16px; font-weight:700; padding:0; } QPushButton#spStepBtn:hover { background:#bfdbfe; } /* PWM */ QLabel#pwmLabel { font-family:"IBM Plex Mono",monospace; font-size:11px; color:#64748b; } QLabel#pwmValue { font-family:"IBM Plex Mono",monospace; font-size:13px; font-weight:700; color:#6d28d9; } QSpinBox#pwmFreqSpin { font-family:"IBM Plex Mono",monospace; font-size:12px; background:#ffffff; border:1px solid #cbd5e1; border-radius:3px; color:#1e293b; padding:3px 6px; } QPushButton#digitalOutBtn { background:#f1f5f9; color:#94a3b8; border:1px solid #cbd5e1; border-radius:4px; padding:4px 14px; font-family:"IBM Plex Mono",monospace; min-width:50px; } QPushButton#digitalOutBtn:checked { background:#dcfce7; border-color:#22c55e; color:#166534; } /* Misc window controls */ QWidget#controlPanelHeader { background:#f1f5f9; border-bottom:1px solid #e2e8f0; } QPushButton#devicesSmallBtn { background:transparent; color:#94a3b8; border:1px solid #e2e8f0; border-radius:3px; font-size:13px; padding:0; } QPushButton#devicesSmallBtn:hover { background:#f0f9ff; color:#3b82f6; border-color:#3b82f6; } QPushButton#traceRemoveBtn { background:transparent; color:#94a3b8; border:none; font-size:13px; border-radius:3px; padding:0; } QPushButton#traceRemoveBtn:hover { background:#fee2e2; color:#ef4444; } QPushButton#plotCfgButton { background:#f0f9ff; color:#1d4ed8; border:1px solid #93c5fd; border-radius:4px; padding:5px 14px; font-weight:600; } QPushButton#plotCfgButton:hover { background:#dbeafe; border-color:#3b82f6; } QPushButton#plotCfgButton:checked { background:#dbeafe; border-color:#3b82f6; } QComboBox#channelPickerCb { font-family:"IBM Plex Mono",monospace; font-size:12px; background:#ffffff; border:1px solid #cbd5e1; border-radius:3px; color:#1e293b; padding:4px 8px; } QMenu#profileMenu { background:#ffffff; border:1px solid #e2e8f0; border-radius:4px; padding:4px 0; color:#1e293b; } QMenu#profileMenu::item { padding:7px 20px; color:#334155; } QMenu#profileMenu::item:selected { background:#dbeafe; color:#1d4ed8; } QMenu#profileMenu::separator { height:1px; background:#e2e8f0; margin:3px 8px; } /* Layout canvas */ QWidget#layoutCanvasBar { background-color:#f8fafc; border-bottom:1px solid #e2e8f0; } QLabel#layoutCanvasLabel { font-family:"IBM Plex Mono",monospace; font-size:10px; font-weight:700; letter-spacing:2px; color:#4338ca; } QFrame#layoutCanvasWidget { background-color:#f1f5f9; border:1px solid #cbd5e1; border-radius:4px; } QFrame#layoutTile { background-color:#e2e8f0; border:1px solid #94a3b8; border-radius:5px; } QFrame#layoutTile:hover { border-color:#4338ca; background-color:#c7d2fe; } QFrame#layoutTileDragging { background-color:#bfdbfe; border:2px solid #3b82f6; border-radius:5px; } QLabel#layoutTileLabel { font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:700; color:#334155; background:transparent; } /* Control Panel Dock */ QDockWidget#controlPanelDock { border: none; } QDockWidget#controlPanelDock::title { background-color:#f1f5f9; color:#475569; padding:4px 8px; text-align:left; font-size:11px; font-weight:bold; letter-spacing:1px; border-bottom:1px solid #e2e8f0; } QDockWidget#controlPanelDock::close-button, QDockWidget#controlPanelDock::float-button { background:transparent; border:none; padding:2px; } QDockWidget#controlPanelDock::close-button:hover, QDockWidget#controlPanelDock::float-button:hover { background:#e2e8f0; border-radius:2px; }