diff --git a/README.md b/README.md
index 6192088a48..53d3b9c213 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,7 @@ create/
├── mods/ # Kindred addon workbenches (git submodules)
│ ├── ztools/ # ztools workbench
│ └── silo/ # Silo parts database
-├── resources/preferences/ # Default preferences and theme
+├── resources/ # Branding, icons, desktop integration
├── package/ # Packaging (Debian, AppImage, Windows installer, RPM)
├── .gitea/workflows/ # CI/CD (build and release pipelines)
├── docs/ # Architecture and integration docs
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index d66a29b331..0fedc01800 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -55,7 +55,7 @@ mods/silo/ [submodule -> silo-mod.git] FreeCAD workbench
└── silo_origin.py FileOrigin backend for Silo
src/Gui/Stylesheets/ QSS themes and SVG assets
-resources/preferences/ Canonical preference pack (KindredCreate)
+src/Gui/PreferencePacks/ KindredCreate preference pack (cfg + build-time QSS)
```
See [INTEGRATION_PLAN.md](INTEGRATION_PLAN.md) for architecture layers and phase status.
diff --git a/docs/COMPONENTS.md b/docs/COMPONENTS.md
index 70d38e530e..f9b23dc2e5 100644
--- a/docs/COMPONENTS.md
+++ b/docs/COMPONENTS.md
@@ -82,17 +82,14 @@ These appear in the File menu and "Origin Tools" toolbar across all workbenches
## Theme
-**Canonical source:** `resources/preferences/KindredCreate/KindredCreate.qss`
+**Canonical source:** `src/Gui/Stylesheets/KindredCreate.qss`
-Three copies must stay in sync (see [KNOWN_ISSUES.md](KNOWN_ISSUES.md) for planned consolidation):
-1. `resources/preferences/KindredCreate/KindredCreate.qss` (canonical)
-2. `src/Gui/Stylesheets/KindredCreate.qss`
-3. `src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss`
+The PreferencePacks copy (`src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss`) is generated at build time via `configure_file()` in `src/Gui/PreferencePacks/CMakeLists.txt`. Only the Stylesheets copy needs to be maintained.
Notable theme customizations beyond standard Catppuccin colors:
- `QGroupBox::indicator` styling to match `QCheckBox::indicator` (consistent checkbox appearance)
- `QLabel[haslink="true"]` link color (`#b4befe` Catppuccin Lavender) -- picked up by FreeCAD to set `QPalette::Link`
-- Spanning-line tree branch indicators (in Stylesheets copy) vs disclosure arrows (in other copies)
+- Spanning-line tree branch indicators
---
diff --git a/docs/INTEGRATION_PLAN.md b/docs/INTEGRATION_PLAN.md
index b963c6d808..840385cfed 100644
--- a/docs/INTEGRATION_PLAN.md
+++ b/docs/INTEGRATION_PLAN.md
@@ -100,18 +100,13 @@ Pure Python workbenches following FreeCAD's addon pattern. Self-contained with `
**Decision:** Superseded by the AttachExtension approach. Only `tangent_to_cylinder` still uses manual placement (requires a vertex reference not currently collected by the UI).
-### Phase 4: Theme system -- PARTIAL
+### Phase 4: Theme system -- DONE
**Goal:** Theme applies consistently at startup regardless of active workbench.
-**Current state:** The Catppuccin Mocha theme is set as the default via the KindredCreate preference pack. Three copies of the QSS file exist and must be kept in sync manually:
-1. `resources/preferences/KindredCreate/KindredCreate.qss` (canonical)
-2. `src/Gui/Stylesheets/KindredCreate.qss`
-3. `src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss`
+**Current state:** The Catppuccin Mocha theme is set as the default via the KindredCreate preference pack. The canonical QSS lives in `src/Gui/Stylesheets/KindredCreate.qss`. The PreferencePacks copy is generated at build time via `configure_file()` in `src/Gui/PreferencePacks/CMakeLists.txt`. The unused `resources/preferences/KindredCreate/` directory has been removed. Recent additions: `QGroupBox::indicator` styling for consistent checkbox appearance, and `QLabel[haslink="true"]` link color (`#b4befe` Catppuccin Lavender). Preference defaults tuned for document, selection, notification, and report view settings via `KindredCreate.cfg`.
-Recent additions: `QGroupBox::indicator` styling for consistent checkbox appearance across checkable group boxes, and `QLabel[haslink="true"]` link color (`#b4befe` Catppuccin Lavender) picked up by FreeCAD to set `QPalette::Link`. Preference defaults tuned for document, selection, notification, and report view settings via `KindredCreate.cfg`.
-
-**Remaining work:** Eliminate QSS duplication via build-time copy or symlinks. Move theme responsibility out of ztools and into the Create module.
+**Remaining work:** Move theme responsibility out of ztools and into the Create module.
### Phase 5: Silo deep integration -- DONE
diff --git a/docs/KNOWN_ISSUES.md b/docs/KNOWN_ISSUES.md
index 1763c07620..f720d2c860 100644
--- a/docs/KNOWN_ISSUES.md
+++ b/docs/KNOWN_ISSUES.md
@@ -4,7 +4,7 @@
### Critical
-1. **QSS duplication.** Four copies of the stylesheet must be kept in sync manually. A build step or symlinks should eliminate this.
+1. ~~**QSS duplication.**~~ Resolved. The canonical QSS lives in `src/Gui/Stylesheets/KindredCreate.qss`. The PreferencePacks copy is now generated at build time via `configure_file()` in `src/Gui/PreferencePacks/CMakeLists.txt`. The unused `resources/preferences/KindredCreate/` directory has been removed.
2. **WorkbenchManipulator timing.** The `_ZToolsPartDesignManipulator` appends commands by name. If ZToolsWorkbench hasn't been activated when the user switches to PartDesign, the commands may not be registered. The manipulator API tolerates missing commands silently, but buttons won't appear.
diff --git a/resources/preferences/KindredCreate/KindredCreate.cfg b/resources/preferences/KindredCreate/KindredCreate.cfg
deleted file mode 100644
index fe8b92cc31..0000000000
--- a/resources/preferences/KindredCreate/KindredCreate.cfg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ZToolsWorkbench
-
-
- KindredCreate.qss
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/resources/preferences/KindredCreate/KindredCreate.qss b/resources/preferences/KindredCreate/KindredCreate.qss
deleted file mode 100644
index 7d7d8ae502..0000000000
--- a/resources/preferences/KindredCreate/KindredCreate.qss
+++ /dev/null
@@ -1,1287 +0,0 @@
-
-/* =============================================================================
- Catppuccin Mocha Theme for FreeCAD
- Bundled with ztools addon
- https://catppuccin.com/
- ============================================================================= */
-
-/* =============================================================================
- Global Defaults
- ============================================================================= */
-
-* {
- color: #cdd6f4;
- font-family: "Segoe UI", "Ubuntu", "Noto Sans", sans-serif;
-}
-
-QWidget {
- background-color: #1e1e2e;
- color: #cdd6f4;
- selection-background-color: #585b70;
- selection-color: #cdd6f4;
-}
-
-/* =============================================================================
- Main Window and MDI Area
- ============================================================================= */
-
-QMainWindow {
- background-color: #181825;
-}
-
-QMainWindow::separator {
- background-color: #313244;
- width: 4px;
- height: 4px;
-}
-
-QMainWindow::separator:hover {
- background-color: #cba6f7;
-}
-
-QMdiArea {
- background-color: #11111b;
-}
-
-QMdiSubWindow {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
-}
-
-QMdiSubWindow > QWidget {
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Menu Bar
- ============================================================================= */
-
-QMenuBar {
- background-color: #181825;
- color: #cdd6f4;
- border-bottom: 1px solid #313244;
- padding: 2px;
-}
-
-QMenuBar::item {
- background-color: transparent;
- padding: 4px 8px;
- border-radius: 4px;
-}
-
-QMenuBar::item:selected {
- background-color: #313244;
-}
-
-QMenuBar::item:pressed {
- background-color: #45475a;
-}
-
-/* =============================================================================
- Menus
- ============================================================================= */
-
-QMenu {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 6px;
- padding: 4px;
-}
-
-QMenu::item {
- padding: 6px 24px 6px 8px;
- border-radius: 4px;
-}
-
-QMenu::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QMenu::item:disabled {
- color: #6c7086;
-}
-
-QMenu::separator {
- height: 1px;
- background-color: #45475a;
- margin: 4px 8px;
-}
-
-QMenu::icon {
- margin-left: 8px;
-}
-
-QMenu::indicator {
- width: 16px;
- height: 16px;
- margin-left: 4px;
-}
-
-/* =============================================================================
- Toolbars
- ============================================================================= */
-
-QToolBar {
- background-color: #181825;
- border: none;
- spacing: 2px;
- padding: 2px;
-}
-
-QToolBar::handle {
- background-color: #45475a;
- width: 8px;
- margin: 2px;
- border-radius: 2px;
-}
-
-QToolBar::handle:horizontal {
- width: 8px;
-}
-
-QToolBar::handle:vertical {
- height: 8px;
-}
-
-QToolBar::separator {
- background-color: #45475a;
- width: 1px;
- margin: 4px 2px;
-}
-
-/* =============================================================================
- Tool Buttons (Toolbar icons)
- ============================================================================= */
-
-QToolButton {
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 4px;
- padding: 4px;
- margin: 1px;
-}
-
-QToolButton:hover {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-QToolButton:pressed {
- background-color: #45475a;
-}
-
-QToolButton:checked {
- background-color: #45475a;
- border: 1px solid #cba6f7;
-}
-
-QToolButton:disabled {
- color: #6c7086;
-}
-
-QToolButton[popupMode="1"] {
- padding-right: 16px;
-}
-
-QToolButton::menu-button {
- border: none;
- width: 14px;
-}
-
-QToolButton::menu-arrow {
- width: 10px;
- height: 10px;
-}
-
-/* =============================================================================
- Push Buttons
- ============================================================================= */
-
-QPushButton {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 6px;
- padding: 6px 16px;
- min-height: 20px;
-}
-
-QPushButton:hover {
- background-color: #45475a;
- border-color: #585b70;
-}
-
-QPushButton:pressed {
- background-color: #585b70;
-}
-
-QPushButton:checked {
- background-color: #cba6f7;
- color: #11111b;
- border-color: #cba6f7;
-}
-
-QPushButton:disabled {
- background-color: #313244;
- color: #6c7086;
- border-color: #313244;
-}
-
-QPushButton:default {
- border: 2px solid #cba6f7;
-}
-
-/* =============================================================================
- Dock Widgets
- ============================================================================= */
-
-QDockWidget {
- background-color: #1e1e2e;
- color: #cdd6f4;
- titlebar-close-icon: none;
- titlebar-normal-icon: none;
-}
-
-QDockWidget::title {
- background-color: #181825;
- color: #cdd6f4;
- padding: 8px 6px;
- border-bottom: 1px solid #313244;
- min-height: 18px;
-}
-
-QDockWidget::close-button,
-QDockWidget::float-button {
- background-color: transparent;
- border: none;
- padding: 2px;
-}
-
-QDockWidget::close-button:hover,
-QDockWidget::float-button:hover {
- background-color: #313244;
- border-radius: 4px;
-}
-
-/* =============================================================================
- Tab Widgets
- ============================================================================= */
-
-QTabWidget::pane {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 4px;
- top: -1px;
-}
-
-QTabBar {
- background-color: transparent;
-}
-
-QTabBar::tab {
- background-color: #313244;
- color: #bac2de;
- border: 1px solid #45475a;
- padding: 6px 12px;
- margin-right: 2px;
- border-top-left-radius: 6px;
- border-top-right-radius: 6px;
-}
-
-QTabBar::tab:selected {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border-bottom-color: #1e1e2e;
-}
-
-QTabBar::tab:hover:!selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTabBar::tab:disabled {
- color: #6c7086;
-}
-
-QTabBar::close-button {
- margin-left: 4px;
-}
-
-QTabBar::close-button:hover {
- background-color: #f38ba8;
- border-radius: 2px;
-}
-
-/* =============================================================================
- Scroll Bars
- ============================================================================= */
-
-QScrollBar:horizontal {
- background-color: #181825;
- height: 12px;
- margin: 0 12px 0 12px;
- border-radius: 6px;
-}
-
-QScrollBar:vertical {
- background-color: #181825;
- width: 12px;
- margin: 12px 0 12px 0;
- border-radius: 6px;
-}
-
-QScrollBar::handle:horizontal {
- background-color: #45475a;
- min-width: 20px;
- border-radius: 5px;
- margin: 1px;
-}
-
-QScrollBar::handle:vertical {
- background-color: #45475a;
- min-height: 20px;
- border-radius: 5px;
- margin: 1px;
-}
-
-QScrollBar::handle:horizontal:hover,
-QScrollBar::handle:vertical:hover {
- background-color: #585b70;
-}
-
-QScrollBar::add-line:horizontal,
-QScrollBar::sub-line:horizontal,
-QScrollBar::add-line:vertical,
-QScrollBar::sub-line:vertical {
- width: 12px;
- height: 12px;
- background-color: #313244;
- border-radius: 6px;
-}
-
-QScrollBar::add-line:horizontal:hover,
-QScrollBar::sub-line:horizontal:hover,
-QScrollBar::add-line:vertical:hover,
-QScrollBar::sub-line:vertical:hover {
- background-color: #45475a;
-}
-
-QScrollBar::add-page:horizontal,
-QScrollBar::sub-page:horizontal,
-QScrollBar::add-page:vertical,
-QScrollBar::sub-page:vertical {
- background-color: transparent;
-}
-
-/* =============================================================================
- Input Fields
- ============================================================================= */
-
-QLineEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-QLineEdit:focus {
- border-color: #cba6f7;
-}
-
-QLineEdit:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QLineEdit:read-only {
- background-color: #181825;
-}
-
-QTextEdit, QPlainTextEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-QTextEdit:focus, QPlainTextEdit:focus {
- border-color: #cba6f7;
-}
-
-/* =============================================================================
- Spin Boxes
- ============================================================================= */
-
-QSpinBox, QDoubleSpinBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px;
- padding-right: 20px;
-}
-
-QSpinBox:focus, QDoubleSpinBox:focus {
- border-color: #cba6f7;
-}
-
-QSpinBox:disabled, QDoubleSpinBox:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QSpinBox::up-button, QDoubleSpinBox::up-button {
- subcontrol-origin: border;
- subcontrol-position: top right;
- width: 16px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- background-color: #45475a;
-}
-
-QSpinBox::down-button, QDoubleSpinBox::down-button {
- subcontrol-origin: border;
- subcontrol-position: bottom right;
- width: 16px;
- border-left: 1px solid #45475a;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover,
-QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover {
- background-color: #585b70;
-}
-
-QSpinBox::up-button:pressed, QDoubleSpinBox::up-button:pressed,
-QSpinBox::down-button:pressed, QDoubleSpinBox::down-button:pressed {
- background-color: #cba6f7;
-}
-
-QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
- width: 0px;
- height: 0px;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-bottom: 6px solid #cdd6f4;
-}
-
-QSpinBox::up-arrow:hover, QDoubleSpinBox::up-arrow:hover {
- border-bottom-color: #f5e0dc;
-}
-
-QSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:disabled {
- border-bottom-color: #6c7086;
-}
-
-QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QSpinBox::down-arrow:hover, QDoubleSpinBox::down-arrow:hover {
- border-top-color: #f5e0dc;
-}
-
-QSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:disabled {
- border-top-color: #6c7086;
-}
-
-/* =============================================================================
- Combo Boxes
- ============================================================================= */
-
-QComboBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
- padding-right: 24px;
- min-height: 20px;
-}
-
-QComboBox:hover {
- border-color: #585b70;
-}
-
-QComboBox:focus {
- border-color: #cba6f7;
-}
-
-QComboBox:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QComboBox::drop-down {
- subcontrol-origin: padding;
- subcontrol-position: top right;
- width: 20px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QComboBox::drop-down:hover {
- background-color: #585b70;
-}
-
-QComboBox::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QComboBox::down-arrow:disabled {
- border-top-color: #6c7086;
-}
-
-QComboBox QAbstractItemView {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- selection-background-color: #45475a;
- selection-color: #cdd6f4;
- outline: none;
-}
-
-QComboBox QAbstractItemView::item {
- padding: 4px 8px;
- min-height: 24px;
-}
-
-QComboBox QAbstractItemView::item:hover {
- background-color: #45475a;
-}
-
-QComboBox QAbstractItemView::item:selected {
- background-color: #585b70;
-}
-
-/* =============================================================================
- Check Boxes
- ============================================================================= */
-
-QCheckBox {
- spacing: 8px;
- color: #cdd6f4;
-}
-
-QCheckBox:disabled {
- color: #6c7086;
-}
-
-QCheckBox::indicator {
- width: 18px;
- height: 18px;
- border: 2px solid #585b70;
- border-radius: 4px;
- background-color: #313244;
-}
-
-QCheckBox::indicator:hover {
- border-color: #cba6f7;
-}
-
-QCheckBox::indicator:checked {
- background-color: #cba6f7;
- border-color: #cba6f7;
-}
-
-QCheckBox::indicator:checked:disabled {
- background-color: #6c7086;
- border-color: #6c7086;
-}
-
-QCheckBox::indicator:disabled {
- background-color: #181825;
- border-color: #45475a;
-}
-
-/* =============================================================================
- Radio Buttons
- ============================================================================= */
-
-QRadioButton {
- spacing: 8px;
- color: #cdd6f4;
-}
-
-QRadioButton:disabled {
- color: #6c7086;
-}
-
-QRadioButton::indicator {
- width: 18px;
- height: 18px;
- border: 2px solid #585b70;
- border-radius: 9px;
- background-color: #313244;
-}
-
-QRadioButton::indicator:hover {
- border-color: #cba6f7;
-}
-
-QRadioButton::indicator:checked {
- background-color: #cba6f7;
- border-color: #cba6f7;
-}
-
-QRadioButton::indicator:checked:disabled {
- background-color: #6c7086;
- border-color: #6c7086;
-}
-
-QRadioButton::indicator:disabled {
- background-color: #181825;
- border-color: #45475a;
-}
-
-/* =============================================================================
- Sliders
- ============================================================================= */
-
-QSlider::groove:horizontal {
- height: 6px;
- background-color: #45475a;
- border-radius: 3px;
-}
-
-QSlider::groove:vertical {
- width: 6px;
- background-color: #45475a;
- border-radius: 3px;
-}
-
-QSlider::handle:horizontal {
- width: 16px;
- height: 16px;
- margin: -5px 0;
- background-color: #cba6f7;
- border-radius: 8px;
-}
-
-QSlider::handle:vertical {
- width: 16px;
- height: 16px;
- margin: 0 -5px;
- background-color: #cba6f7;
- border-radius: 8px;
-}
-
-QSlider::handle:horizontal:hover,
-QSlider::handle:vertical:hover {
- background-color: #b4befe;
-}
-
-QSlider::handle:horizontal:pressed,
-QSlider::handle:vertical:pressed {
- background-color: #f5c2e7;
-}
-
-QSlider::sub-page:horizontal {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-QSlider::add-page:vertical {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-/* =============================================================================
- Progress Bars
- ============================================================================= */
-
-QProgressBar {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- text-align: center;
- height: 20px;
-}
-
-QProgressBar::chunk {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-/* =============================================================================
- Group Boxes
- ============================================================================= */
-
-QGroupBox {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 6px;
- margin-top: 12px;
- padding-top: 8px;
-}
-
-QGroupBox::title {
- subcontrol-origin: margin;
- subcontrol-position: top left;
- left: 12px;
- padding: 0 4px;
- color: #bac2de;
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Tree View
- ============================================================================= */
-
-QTreeView {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- outline: none;
- show-decoration-selected: 1;
-}
-
-QTreeView::item {
- padding: 4px;
- border-radius: 2px;
-}
-
-QTreeView::item:hover {
- background-color: #313244;
-}
-
-QTreeView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTreeView::item:selected:active {
- background-color: #585b70;
-}
-
-QTreeView::branch {
- background-color: transparent;
-}
-
-QTreeView::branch:hover {
- background-color: #313244;
-}
-
-QTreeView::branch:selected {
- background-color: #45475a;
-}
-
-QTreeView::branch:has-children:!has-siblings:closed,
-QTreeView::branch:closed:has-children:has-siblings {
- image: url(qss:images_dark-light/branch_closed.svg);
-}
-
-QTreeView::branch:open:has-children:!has-siblings,
-QTreeView::branch:open:has-children:has-siblings {
- image: url(qss:images_dark-light/branch_open.svg);
-}
-
-/* =============================================================================
- List View
- ============================================================================= */
-
-QListView {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- outline: none;
-}
-
-QListView::item {
- padding: 4px;
- border-radius: 2px;
-}
-
-QListView::item:hover {
- background-color: #313244;
-}
-
-QListView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-/* =============================================================================
- Table View
- ============================================================================= */
-
-QTableView {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- gridline-color: #313244;
- outline: none;
-}
-
-QTableView::item {
- padding: 4px;
-}
-
-QTableView::item:hover {
- background-color: #313244;
-}
-
-QTableView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTableView QTableCornerButton::section {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-/* =============================================================================
- Header Views (for Tables/Trees)
- ============================================================================= */
-
-QHeaderView {
- background-color: #313244;
- border: none;
-}
-
-QHeaderView::section {
- background-color: #313244;
- color: #bac2de;
- border: none;
- border-right: 1px solid #45475a;
- border-bottom: 1px solid #45475a;
- padding: 6px 8px;
- min-height: 20px;
-}
-
-QHeaderView::section:hover {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QHeaderView::section:checked {
- background-color: #45475a;
-}
-
-QHeaderView::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QHeaderView::up-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 6px solid #cdd6f4;
-}
-
-/* =============================================================================
- Splitters
- ============================================================================= */
-
-QSplitter::handle {
- background-color: #313244;
-}
-
-QSplitter::handle:horizontal {
- width: 4px;
-}
-
-QSplitter::handle:vertical {
- height: 4px;
-}
-
-QSplitter::handle:hover {
- background-color: #cba6f7;
-}
-
-/* =============================================================================
- Status Bar
- ============================================================================= */
-
-QStatusBar {
- background-color: #181825;
- color: #bac2de;
- border-top: 1px solid #313244;
-}
-
-QStatusBar::item {
- border: none;
-}
-
-QStatusBar QLabel {
- padding: 2px 8px;
-}
-
-/* =============================================================================
- Tooltips
- ============================================================================= */
-
-QToolTip {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
-}
-
-/* =============================================================================
- Labels
- ============================================================================= */
-
-QLabel {
- color: #cdd6f4;
- background-color: transparent;
-}
-
-QLabel:disabled {
- color: #6c7086;
-}
-
-/* =============================================================================
- Frames
- ============================================================================= */
-
-QFrame {
- border: none;
-}
-
-QFrame[frameShape="4"] {
- /* HLine */
- background-color: #45475a;
- max-height: 1px;
-}
-
-QFrame[frameShape="5"] {
- /* VLine */
- background-color: #45475a;
- max-width: 1px;
-}
-
-/* =============================================================================
- Tool Box (Collapsible sections)
- ============================================================================= */
-
-QToolBox {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 4px;
-}
-
-QToolBox::tab {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 8px;
-}
-
-QToolBox::tab:selected {
- background-color: #45475a;
- border-color: #cba6f7;
-}
-
-QToolBox::tab:hover {
- background-color: #45475a;
-}
-
-/* =============================================================================
- Dialog Buttons
- ============================================================================= */
-
-QDialogButtonBox {
- button-layout: 0;
-}
-
-/* =============================================================================
- Date/Time Edits
- ============================================================================= */
-
-QDateEdit, QTimeEdit, QDateTimeEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px;
-}
-
-QDateEdit:focus, QTimeEdit:focus, QDateTimeEdit:focus {
- border-color: #cba6f7;
-}
-
-QDateEdit::drop-down, QTimeEdit::drop-down, QDateTimeEdit::drop-down {
- subcontrol-origin: padding;
- subcontrol-position: top right;
- width: 20px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QCalendarWidget {
- background-color: #1e1e2e;
-}
-
-QCalendarWidget QToolButton {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- margin: 2px;
-}
-
-QCalendarWidget QToolButton:hover {
- background-color: #45475a;
-}
-
-QCalendarWidget QMenu {
- background-color: #313244;
-}
-
-QCalendarWidget QSpinBox {
- background-color: #313244;
-}
-
-QCalendarWidget QAbstractItemView {
- background-color: #1e1e2e;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-/* =============================================================================
- Wizard
- ============================================================================= */
-
-QWizard {
- background-color: #1e1e2e;
-}
-
-QWizard QLabel {
- color: #cdd6f4;
-}
-
-/* =============================================================================
- FreeCAD Specific Widgets
- ============================================================================= */
-
-/* Property Editor */
-Gui--PropertyEditor--PropertyEditor {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border: 1px solid #45475a;
- qproperty-groupBackground: #313244;
- qproperty-groupTextColor: #bac2de;
- qproperty-itemBackground: #1e1e2e;
-}
-
-Gui--PropertyEditor--PropertyEditor QLineEdit {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-Gui--PropertyEditor--PropertyEditor QComboBox {
- background-color: #313244;
-}
-
-/* Color Button */
-Gui--ColorButton {
- background-color: #313244;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 2px;
-}
-
-Gui--ColorButton:hover {
- border-color: #cba6f7;
-}
-
-/* Workbench Selector */
-Gui--WorkbenchComboBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
-}
-
-Gui--WorkbenchComboBox:hover {
- border-color: #585b70;
-}
-
-Gui--WorkbenchComboBox::drop-down {
- background-color: #45475a;
- border-left: 1px solid #45475a;
- border-radius: 0 4px 4px 0;
-}
-
-/* Task Panel */
-QSint--ActionGroup {
- background-color: #313244;
- border: 1px solid #45475a;
- border-radius: 6px;
-}
-
-QSint--ActionGroup QToolButton {
- background-color: #313244;
- color: #cdd6f4;
- border: none;
- border-radius: 4px;
- padding: 8px 6px;
- min-height: 18px;
-}
-
-QSint--ActionGroup QToolButton:hover {
- background-color: #45475a;
-}
-
-QSint--ActionGroup QFrame {
- background-color: #1e1e2e;
- border: none;
- border-radius: 4px;
-}
-
-/* Input Field */
-Gui--InputField {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
-}
-
-Gui--InputField:focus {
- border-color: #cba6f7;
-}
-
-/* Expression Completer */
-Gui--ExpressionCompleter {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
-}
-
-/* Spreadsheet */
-SpreadsheetGui--SheetTableView {
- background-color: #1e1e2e;
- color: #cdd6f4;
- gridline-color: #45475a;
- selection-background-color: #45475a;
- selection-color: #cdd6f4;
-}
-
-SpreadsheetGui--SheetTableView QHeaderView::section {
- background-color: #313244;
- color: #bac2de;
- border: 1px solid #45475a;
- padding: 4px;
-}
-
-/* Spreadsheet cell editor - reduce padding for better text visibility */
-SpreadsheetGui--SheetTableView QLineEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #cba6f7;
- border-radius: 0px;
- padding: 1px 2px;
- margin: 0px;
-}
-
-/* Python Console */
-Gui--PythonConsole {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
- selection-background-color: #45475a;
-}
-
-/* Python Editor */
-Gui--PythonEditor {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-/* Report View */
-Gui--DockWnd--ReportOutput {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
-}
-
-/* DAG View */
-Gui--DAG--Model {
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Sketcher Specific Styles
- ============================================================================= */
-
-/* Sketcher constraint colors are handled via preferences, not QSS */
-
-/* =============================================================================
- Syntax Highlighting Colors (Python Editor)
- Note: These are typically set via FreeCAD preferences, but we define them here
- for reference and any widgets that support them.
- ============================================================================= */
-
-/*
- Python Editor Syntax Colors (Catppuccin Mocha):
- - Comment: #7f849c
- - Number: #fab387
- - String: #a6e3a1
- - Keyword: #cba6f7
- - Class/Def name: #89b4fa
- - Operator: #89dceb
- - Output: #cdd6f4
- - Error: #f38ba8
-*/
-
-/* =============================================================================
- Custom Color Accents by Context
- ============================================================================= */
-
-/* Success states */
-*[state="success"] {
- color: #a6e3a1;
-}
-
-/* Warning states */
-*[state="warning"] {
- color: #f9e2af;
-}
-
-/* Error states */
-*[state="error"] {
- color: #f38ba8;
-}
-
-/* Info states */
-*[state="info"] {
- color: #89b4fa;
-}
diff --git a/resources/preferences/package.xml b/resources/preferences/package.xml
deleted file mode 100644
index 263ed8059c..0000000000
--- a/resources/preferences/package.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- Kindred Create Preference Packs
- Default preference packs for Kindred Create, featuring the Catppuccin Mocha color theme.
- 0.1.0
- Kindred Systems LLC
- LGPL-2.1-or-later
- https://kindredsystems.net
-
-
-
- KindredCreate
- The default Kindred Create theme based on Catppuccin Mocha - a soothing dark color palette.
-
-
-
-
diff --git a/src/Gui/PreferencePacks/CMakeLists.txt b/src/Gui/PreferencePacks/CMakeLists.txt
index a1c78cee45..05c6a09ca9 100644
--- a/src/Gui/PreferencePacks/CMakeLists.txt
+++ b/src/Gui/PreferencePacks/CMakeLists.txt
@@ -12,6 +12,14 @@ ADD_CUSTOM_TARGET(PreferencePacks_data ALL
FILE(COPY ${PreferencePacks_Files} ${PreferencePacks_Directories} DESTINATION "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks")
+# Copy KindredCreate.qss from Stylesheets into the PreferencePacks build directory.
+# The canonical QSS lives in src/Gui/Stylesheets/; this avoids maintaining a duplicate. (#51)
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../Stylesheets/KindredCreate.qss
+ ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks/KindredCreate/KindredCreate.qss
+ COPYONLY
+)
+
fc_copy_sources(PreferencePacks_data "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks"
${PreferencePacks_Files}
${PreferencePacks_Directories})
@@ -23,9 +31,10 @@ INSTALL(
${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks
)
+# Install from build directory so the generated QSS copy is included
INSTALL(
DIRECTORY
- ${PreferencePacks_Directories}
+ ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks/KindredCreate
DESTINATION
${CMAKE_INSTALL_DATADIR}/Gui/PreferencePacks
)
diff --git a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.cfg b/src/Gui/PreferencePacks/KindredCreate/KindredCreate.cfg
index 5c466f3adc..1668bbc597 100644
--- a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.cfg
+++ b/src/Gui/PreferencePacks/KindredCreate/KindredCreate.cfg
@@ -25,6 +25,10 @@
+
+
+
+
@@ -81,9 +85,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ZToolsWorkbench
KindredCreate.qss
diff --git a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss b/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss
deleted file mode 100644
index afbf474893..0000000000
--- a/src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss
+++ /dev/null
@@ -1,1313 +0,0 @@
-
-/* =============================================================================
- Catppuccin Mocha Theme for FreeCAD
- Bundled with ztools addon
- https://catppuccin.com/
- ============================================================================= */
-
-/* =============================================================================
- Global Defaults
- ============================================================================= */
-
-* {
- color: #cdd6f4;
- font-family: "Segoe UI", "Ubuntu", "Noto Sans", sans-serif;
-}
-
-QWidget {
- background-color: #1e1e2e;
- color: #cdd6f4;
- selection-background-color: #585b70;
- selection-color: #cdd6f4;
-}
-
-/* =============================================================================
- Main Window and MDI Area
- ============================================================================= */
-
-QMainWindow {
- background-color: #181825;
-}
-
-QMainWindow::separator {
- background-color: #313244;
- width: 4px;
- height: 4px;
-}
-
-QMainWindow::separator:hover {
- background-color: #cba6f7;
-}
-
-QMdiArea {
- background-color: #11111b;
-}
-
-QMdiSubWindow {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
-}
-
-QMdiSubWindow > QWidget {
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Menu Bar
- ============================================================================= */
-
-QMenuBar {
- background-color: #181825;
- color: #cdd6f4;
- border-bottom: 1px solid #313244;
- padding: 2px;
-}
-
-QMenuBar::item {
- background-color: transparent;
- padding: 4px 8px;
- border-radius: 4px;
-}
-
-QMenuBar::item:selected {
- background-color: #313244;
-}
-
-QMenuBar::item:pressed {
- background-color: #45475a;
-}
-
-/* =============================================================================
- Menus
- ============================================================================= */
-
-QMenu {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 6px;
- padding: 4px;
-}
-
-QMenu::item {
- padding: 6px 24px 6px 8px;
- border-radius: 4px;
-}
-
-QMenu::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QMenu::item:disabled {
- color: #6c7086;
-}
-
-QMenu::separator {
- height: 1px;
- background-color: #45475a;
- margin: 4px 8px;
-}
-
-QMenu::icon {
- margin-left: 8px;
-}
-
-QMenu::indicator {
- width: 16px;
- height: 16px;
- margin-left: 4px;
-}
-
-/* =============================================================================
- Toolbars
- ============================================================================= */
-
-QToolBar {
- background-color: #181825;
- border: none;
- spacing: 2px;
- padding: 2px;
-}
-
-QToolBar::handle {
- background-color: #45475a;
- width: 8px;
- margin: 2px;
- border-radius: 2px;
-}
-
-QToolBar::handle:horizontal {
- width: 8px;
-}
-
-QToolBar::handle:vertical {
- height: 8px;
-}
-
-QToolBar::separator {
- background-color: #45475a;
- width: 1px;
- margin: 4px 2px;
-}
-
-/* =============================================================================
- Tool Buttons (Toolbar icons)
- ============================================================================= */
-
-QToolButton {
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 4px;
- padding: 4px;
- margin: 1px;
-}
-
-QToolButton:hover {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-QToolButton:pressed {
- background-color: #45475a;
-}
-
-QToolButton:checked {
- background-color: #45475a;
- border: 1px solid #cba6f7;
-}
-
-QToolButton:disabled {
- color: #6c7086;
-}
-
-QToolButton[popupMode="1"] {
- padding-right: 16px;
-}
-
-QToolButton::menu-button {
- border: none;
- width: 14px;
-}
-
-QToolButton::menu-arrow {
- width: 10px;
- height: 10px;
-}
-
-/* =============================================================================
- Push Buttons
- ============================================================================= */
-
-QPushButton {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 6px;
- padding: 6px 16px;
- min-height: 20px;
-}
-
-QPushButton:hover {
- background-color: #45475a;
- border-color: #585b70;
-}
-
-QPushButton:pressed {
- background-color: #585b70;
-}
-
-QPushButton:checked {
- background-color: #cba6f7;
- color: #11111b;
- border-color: #cba6f7;
-}
-
-QPushButton:disabled {
- background-color: #313244;
- color: #6c7086;
- border-color: #313244;
-}
-
-QPushButton:default {
- border: 2px solid #cba6f7;
-}
-
-/* =============================================================================
- Dock Widgets
- ============================================================================= */
-
-QDockWidget {
- background-color: #1e1e2e;
- color: #cdd6f4;
- titlebar-close-icon: none;
- titlebar-normal-icon: none;
-}
-
-QDockWidget::title {
- background-color: #181825;
- color: #cdd6f4;
- padding: 8px 6px;
- border-bottom: 1px solid #313244;
- min-height: 18px;
-}
-
-QDockWidget::close-button,
-QDockWidget::float-button {
- background-color: transparent;
- border: none;
- padding: 2px;
-}
-
-QDockWidget::close-button:hover,
-QDockWidget::float-button:hover {
- background-color: #313244;
- border-radius: 4px;
-}
-
-/* =============================================================================
- Tab Widgets
- ============================================================================= */
-
-QTabWidget::pane {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 4px;
- top: -1px;
-}
-
-QTabBar {
- background-color: transparent;
-}
-
-QTabBar::tab {
- background-color: #313244;
- color: #bac2de;
- border: 1px solid #45475a;
- padding: 6px 12px;
- margin-right: 2px;
- border-top-left-radius: 6px;
- border-top-right-radius: 6px;
-}
-
-QTabBar::tab:selected {
- background-color: #1e1e2e;
- color: #cdd6f4;
- border-bottom-color: #1e1e2e;
-}
-
-QTabBar::tab:hover:!selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTabBar::tab:disabled {
- color: #6c7086;
-}
-
-QTabBar::close-button {
- margin-left: 4px;
-}
-
-QTabBar::close-button:hover {
- background-color: #f38ba8;
- border-radius: 2px;
-}
-
-/* =============================================================================
- Scroll Bars
- ============================================================================= */
-
-QScrollBar:horizontal {
- background-color: #181825;
- height: 12px;
- margin: 0 12px 0 12px;
- border-radius: 6px;
-}
-
-QScrollBar:vertical {
- background-color: #181825;
- width: 12px;
- margin: 12px 0 12px 0;
- border-radius: 6px;
-}
-
-QScrollBar::handle:horizontal {
- background-color: #45475a;
- min-width: 20px;
- border-radius: 5px;
- margin: 1px;
-}
-
-QScrollBar::handle:vertical {
- background-color: #45475a;
- min-height: 20px;
- border-radius: 5px;
- margin: 1px;
-}
-
-QScrollBar::handle:horizontal:hover,
-QScrollBar::handle:vertical:hover {
- background-color: #585b70;
-}
-
-QScrollBar::add-line:horizontal,
-QScrollBar::sub-line:horizontal,
-QScrollBar::add-line:vertical,
-QScrollBar::sub-line:vertical {
- width: 12px;
- height: 12px;
- background-color: #313244;
- border-radius: 6px;
-}
-
-QScrollBar::add-line:horizontal:hover,
-QScrollBar::sub-line:horizontal:hover,
-QScrollBar::add-line:vertical:hover,
-QScrollBar::sub-line:vertical:hover {
- background-color: #45475a;
-}
-
-QScrollBar::add-page:horizontal,
-QScrollBar::sub-page:horizontal,
-QScrollBar::add-page:vertical,
-QScrollBar::sub-page:vertical {
- background-color: transparent;
-}
-
-/* =============================================================================
- Input Fields
- ============================================================================= */
-
-QLineEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-QLineEdit:focus {
- border-color: #cba6f7;
-}
-
-QLineEdit:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QLineEdit:read-only {
- background-color: #181825;
-}
-
-QTextEdit, QPlainTextEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-QTextEdit:focus, QPlainTextEdit:focus {
- border-color: #cba6f7;
-}
-
-/* =============================================================================
- Spin Boxes
- ============================================================================= */
-
-QSpinBox, QDoubleSpinBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px;
- padding-right: 20px;
-}
-
-QSpinBox:focus, QDoubleSpinBox:focus {
- border-color: #cba6f7;
-}
-
-QSpinBox:disabled, QDoubleSpinBox:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QSpinBox::up-button, QDoubleSpinBox::up-button {
- subcontrol-origin: border;
- subcontrol-position: top right;
- width: 16px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- background-color: #45475a;
-}
-
-QSpinBox::down-button, QDoubleSpinBox::down-button {
- subcontrol-origin: border;
- subcontrol-position: bottom right;
- width: 16px;
- border-left: 1px solid #45475a;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover,
-QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover {
- background-color: #585b70;
-}
-
-QSpinBox::up-button:pressed, QDoubleSpinBox::up-button:pressed,
-QSpinBox::down-button:pressed, QDoubleSpinBox::down-button:pressed {
- background-color: #cba6f7;
-}
-
-QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
- width: 0px;
- height: 0px;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-bottom: 6px solid #cdd6f4;
-}
-
-QSpinBox::up-arrow:hover, QDoubleSpinBox::up-arrow:hover {
- border-bottom-color: #f5e0dc;
-}
-
-QSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:disabled {
- border-bottom-color: #6c7086;
-}
-
-QSpinBox::down-arrow, QDoubleSpinBox::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QSpinBox::down-arrow:hover, QDoubleSpinBox::down-arrow:hover {
- border-top-color: #f5e0dc;
-}
-
-QSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:disabled {
- border-top-color: #6c7086;
-}
-
-/* =============================================================================
- Combo Boxes
- ============================================================================= */
-
-QComboBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
- padding-right: 24px;
- min-height: 20px;
-}
-
-QComboBox:hover {
- border-color: #585b70;
-}
-
-QComboBox:focus {
- border-color: #cba6f7;
-}
-
-QComboBox:disabled {
- background-color: #181825;
- color: #6c7086;
-}
-
-QComboBox::drop-down {
- subcontrol-origin: padding;
- subcontrol-position: top right;
- width: 20px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QComboBox::drop-down:hover {
- background-color: #585b70;
-}
-
-QComboBox::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QComboBox::down-arrow:disabled {
- border-top-color: #6c7086;
-}
-
-QComboBox QAbstractItemView {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- selection-background-color: #45475a;
- selection-color: #cdd6f4;
- outline: none;
-}
-
-QComboBox QAbstractItemView::item {
- padding: 4px 8px;
- min-height: 24px;
-}
-
-QComboBox QAbstractItemView::item:hover {
- background-color: #45475a;
-}
-
-QComboBox QAbstractItemView::item:selected {
- background-color: #585b70;
-}
-
-/* =============================================================================
- Check Boxes
- ============================================================================= */
-
-QCheckBox {
- spacing: 8px;
- color: #cdd6f4;
-}
-
-QCheckBox:disabled {
- color: #6c7086;
-}
-
-QCheckBox::indicator {
- width: 18px;
- height: 18px;
- border: 2px solid #585b70;
- border-radius: 4px;
- background-color: #313244;
-}
-
-QCheckBox::indicator:hover {
- border-color: #cba6f7;
-}
-
-QCheckBox::indicator:checked {
- background-color: #cba6f7;
- border-color: #cba6f7;
-}
-
-QCheckBox::indicator:checked:disabled {
- background-color: #6c7086;
- border-color: #6c7086;
-}
-
-QCheckBox::indicator:disabled {
- background-color: #181825;
- border-color: #45475a;
-}
-
-/* =============================================================================
- Radio Buttons
- ============================================================================= */
-
-QRadioButton {
- spacing: 8px;
- color: #cdd6f4;
-}
-
-QRadioButton:disabled {
- color: #6c7086;
-}
-
-QRadioButton::indicator {
- width: 18px;
- height: 18px;
- border: 2px solid #585b70;
- border-radius: 9px;
- background-color: #313244;
-}
-
-QRadioButton::indicator:hover {
- border-color: #cba6f7;
-}
-
-QRadioButton::indicator:checked {
- background-color: #cba6f7;
- border-color: #cba6f7;
-}
-
-QRadioButton::indicator:checked:disabled {
- background-color: #6c7086;
- border-color: #6c7086;
-}
-
-QRadioButton::indicator:disabled {
- background-color: #181825;
- border-color: #45475a;
-}
-
-/* =============================================================================
- Sliders
- ============================================================================= */
-
-QSlider::groove:horizontal {
- height: 6px;
- background-color: #45475a;
- border-radius: 3px;
-}
-
-QSlider::groove:vertical {
- width: 6px;
- background-color: #45475a;
- border-radius: 3px;
-}
-
-QSlider::handle:horizontal {
- width: 16px;
- height: 16px;
- margin: -5px 0;
- background-color: #cba6f7;
- border-radius: 8px;
-}
-
-QSlider::handle:vertical {
- width: 16px;
- height: 16px;
- margin: 0 -5px;
- background-color: #cba6f7;
- border-radius: 8px;
-}
-
-QSlider::handle:horizontal:hover,
-QSlider::handle:vertical:hover {
- background-color: #b4befe;
-}
-
-QSlider::handle:horizontal:pressed,
-QSlider::handle:vertical:pressed {
- background-color: #f5c2e7;
-}
-
-QSlider::sub-page:horizontal {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-QSlider::add-page:vertical {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-/* =============================================================================
- Progress Bars
- ============================================================================= */
-
-QProgressBar {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- text-align: center;
- height: 20px;
-}
-
-QProgressBar::chunk {
- background-color: #cba6f7;
- border-radius: 3px;
-}
-
-/* =============================================================================
- Group Boxes
- ============================================================================= */
-
-QGroupBox {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 6px;
- margin-top: 12px;
- padding-top: 8px;
-}
-
-QGroupBox::title {
- subcontrol-origin: margin;
- subcontrol-position: top left;
- left: 12px;
- padding: 0 4px;
- color: #bac2de;
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Tree View
- ============================================================================= */
-
-QTreeView {
- background-color: #1e1e2e;
- alternate-background-color: #181825;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- outline: none;
- show-decoration-selected: 1;
-}
-
-QTreeView::item {
- padding: 2px 0px;
- border-radius: 2px;
-}
-
-QTreeView::item:hover {
- background-color: #313244;
-}
-
-QTreeView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTreeView::item:selected:active {
- background-color: #585b70;
-}
-
-QTreeView::branch {
- background-color: transparent;
-}
-
-QTreeView::branch:hover {
- background-color: #313244;
-}
-
-QTreeView::branch:selected {
- background-color: #45475a;
-}
-
-QTreeView::branch:has-children:!has-siblings:closed,
-QTreeView::branch:closed:has-children:has-siblings {
- image: url(qss:images_dark-light/branch_closed.svg);
-}
-
-QTreeView::branch:open:has-children:!has-siblings,
-QTreeView::branch:open:has-children:has-siblings {
- image: url(qss:images_dark-light/branch_open.svg);
-}
-
-/* =============================================================================
- List View
- ============================================================================= */
-
-QListView {
- background-color: #1e1e2e;
- alternate-background-color: #181825;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- outline: none;
-}
-
-QListView::item {
- padding: 4px;
- border-radius: 2px;
-}
-
-QListView::item:hover {
- background-color: #313244;
-}
-
-QListView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-/* =============================================================================
- Table View
- ============================================================================= */
-
-QTableView {
- background-color: #1e1e2e;
- alternate-background-color: #181825;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- gridline-color: #313244;
- outline: none;
-}
-
-QTableView::item {
- padding: 4px;
-}
-
-QTableView::item:hover {
- background-color: #313244;
-}
-
-QTableView::item:selected {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QTableView QTableCornerButton::section {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-/* =============================================================================
- Header Views (for Tables/Trees)
- ============================================================================= */
-
-QHeaderView {
- background-color: #313244;
- border: none;
-}
-
-QHeaderView::section {
- background-color: #313244;
- color: #bac2de;
- border: none;
- border-right: 1px solid #45475a;
- border-bottom: 1px solid #45475a;
- padding: 6px 8px;
- min-height: 20px;
-}
-
-QHeaderView::section:hover {
- background-color: #45475a;
- color: #cdd6f4;
-}
-
-QHeaderView::section:checked {
- background-color: #45475a;
-}
-
-QHeaderView::down-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 6px solid #cdd6f4;
-}
-
-QHeaderView::up-arrow {
- width: 0px;
- height: 0px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 6px solid #cdd6f4;
-}
-
-/* =============================================================================
- Splitters
- ============================================================================= */
-
-QSplitter::handle {
- background-color: #313244;
-}
-
-QSplitter::handle:horizontal {
- width: 4px;
-}
-
-QSplitter::handle:vertical {
- height: 4px;
-}
-
-QSplitter::handle:hover {
- background-color: #cba6f7;
-}
-
-/* =============================================================================
- Status Bar
- ============================================================================= */
-
-QStatusBar {
- background-color: #181825;
- color: #bac2de;
- border-top: 1px solid #313244;
-}
-
-QStatusBar::item {
- border: none;
-}
-
-QStatusBar QLabel {
- padding: 2px 8px;
-}
-
-/* =============================================================================
- Tooltips
- ============================================================================= */
-
-QToolTip {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
-}
-
-/* =============================================================================
- Labels
- ============================================================================= */
-
-QLabel {
- color: #cdd6f4;
- background-color: transparent;
-}
-
-QLabel:disabled {
- color: #6c7086;
-}
-
-/* =============================================================================
- Frames
- ============================================================================= */
-
-QFrame {
- border: none;
-}
-
-QFrame[frameShape="4"] {
- /* HLine */
- background-color: #45475a;
- max-height: 1px;
-}
-
-QFrame[frameShape="5"] {
- /* VLine */
- background-color: #45475a;
- max-width: 1px;
-}
-
-/* =============================================================================
- Tool Box (Collapsible sections)
- ============================================================================= */
-
-QToolBox {
- background-color: #1e1e2e;
- border: 1px solid #45475a;
- border-radius: 4px;
-}
-
-QToolBox::tab {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 8px;
-}
-
-QToolBox::tab:selected {
- background-color: #45475a;
- border-color: #cba6f7;
-}
-
-QToolBox::tab:hover {
- background-color: #45475a;
-}
-
-/* =============================================================================
- Dialog Buttons
- ============================================================================= */
-
-QDialogButtonBox {
- button-layout: 0;
-}
-
-/* =============================================================================
- Date/Time Edits
- ============================================================================= */
-
-QDateEdit, QTimeEdit, QDateTimeEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px;
-}
-
-QDateEdit:focus, QTimeEdit:focus, QDateTimeEdit:focus {
- border-color: #cba6f7;
-}
-
-QDateEdit::drop-down, QTimeEdit::drop-down, QDateTimeEdit::drop-down {
- subcontrol-origin: padding;
- subcontrol-position: top right;
- width: 20px;
- border-left: 1px solid #45475a;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- background-color: #45475a;
-}
-
-QCalendarWidget {
- background-color: #1e1e2e;
-}
-
-QCalendarWidget QToolButton {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- margin: 2px;
-}
-
-QCalendarWidget QToolButton:hover {
- background-color: #45475a;
-}
-
-QCalendarWidget QMenu {
- background-color: #313244;
-}
-
-QCalendarWidget QSpinBox {
- background-color: #313244;
-}
-
-QCalendarWidget QAbstractItemView {
- background-color: #1e1e2e;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-/* =============================================================================
- Wizard
- ============================================================================= */
-
-QWizard {
- background-color: #1e1e2e;
-}
-
-QWizard QLabel {
- color: #cdd6f4;
-}
-
-/* =============================================================================
- FreeCAD Specific Widgets
- ============================================================================= */
-
-/* Property Editor */
-Gui--PropertyEditor--PropertyEditor {
- background-color: #1e1e2e;
- alternate-background-color: #181825;
- color: #cdd6f4;
- border: 1px solid #45475a;
- qproperty-groupBackground: #313244;
- qproperty-groupTextColor: #bac2de;
- qproperty-itemBackground: #1e1e2e;
-}
-
-Gui--PropertyEditor--PropertyEditor QLineEdit {
- background-color: #313244;
- border: 1px solid #45475a;
-}
-
-Gui--PropertyEditor--PropertyEditor QComboBox {
- background-color: #313244;
-}
-
-/* Color Button */
-Gui--ColorButton {
- background-color: #313244;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 2px;
-}
-
-Gui--ColorButton:hover {
- border-color: #cba6f7;
-}
-
-/* Workbench Selector */
-Gui--WorkbenchComboBox {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
-}
-
-Gui--WorkbenchComboBox:hover {
- border-color: #585b70;
-}
-
-Gui--WorkbenchComboBox::drop-down {
- background-color: #45475a;
- border-left: 1px solid #45475a;
- border-radius: 0 4px 4px 0;
-}
-
-/* Origin Selector */
-Gui--OriginSelectorWidget {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
- padding: 4px 8px;
- min-width: 70px;
- max-width: 120px;
-}
-
-Gui--OriginSelectorWidget:hover {
- border-color: #585b70;
- background-color: #45475a;
-}
-
-Gui--OriginSelectorWidget::menu-indicator {
- subcontrol-origin: padding;
- subcontrol-position: center right;
- right: 4px;
-}
-
-/* Task Panel */
-QSint--ActionGroup {
- background-color: #313244;
- border: 1px solid #45475a;
- border-radius: 6px;
-}
-
-QSint--ActionGroup QToolButton {
- background-color: #313244;
- color: #cdd6f4;
- border: none;
- border-radius: 4px;
- padding: 8px 6px;
- min-height: 18px;
-}
-
-QSint--ActionGroup QToolButton:hover {
- background-color: #45475a;
-}
-
-QSint--ActionGroup QFrame {
- background-color: #1e1e2e;
- border: none;
- border-radius: 4px;
-}
-
-/* Input Field */
-Gui--InputField {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
- border-radius: 4px;
-}
-
-Gui--InputField:focus {
- border-color: #cba6f7;
-}
-
-/* Expression Completer */
-Gui--ExpressionCompleter {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #45475a;
-}
-
-/* Spreadsheet */
-SpreadsheetGui--SheetTableView {
- background-color: #1e1e2e;
- color: #cdd6f4;
- gridline-color: #45475a;
- selection-background-color: #45475a;
- selection-color: #cdd6f4;
-}
-
-SpreadsheetGui--SheetTableView QHeaderView::section {
- background-color: #313244;
- color: #bac2de;
- border: 1px solid #45475a;
- padding: 4px;
-}
-
-/* Spreadsheet cell editor - reduce padding for better text visibility */
-SpreadsheetGui--SheetTableView QLineEdit {
- background-color: #313244;
- color: #cdd6f4;
- border: 1px solid #cba6f7;
- border-radius: 0px;
- padding: 1px 2px;
- margin: 0px;
-}
-
-/* Python Console */
-Gui--PythonConsole {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
- selection-background-color: #45475a;
-}
-
-/* Python Editor */
-Gui--PythonEditor {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
- selection-background-color: #cba6f7;
- selection-color: #11111b;
-}
-
-/* Report View */
-Gui--DockWnd--ReportOutput {
- background-color: #11111b;
- color: #cdd6f4;
- font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace;
-}
-
-/* DAG View */
-Gui--DAG--Model {
- background-color: #1e1e2e;
-}
-
-/* =============================================================================
- Sketcher Specific Styles
- ============================================================================= */
-
-/* Sketcher constraint colors are handled via preferences, not QSS */
-
-/* =============================================================================
- Syntax Highlighting Colors (Python Editor)
- Note: These are typically set via FreeCAD preferences, but we define them here
- for reference and any widgets that support them.
- ============================================================================= */
-
-/*
- Python Editor Syntax Colors (Catppuccin Mocha):
- - Comment: #7f849c
- - Number: #fab387
- - String: #a6e3a1
- - Keyword: #cba6f7
- - Class/Def name: #89b4fa
- - Operator: #89dceb
- - Output: #cdd6f4
- - Error: #f38ba8
-*/
-
-/* =============================================================================
- Custom Color Accents by Context
- ============================================================================= */
-
-/* Success states */
-*[state="success"] {
- color: #a6e3a1;
-}
-
-/* Warning states */
-*[state="warning"] {
- color: #f9e2af;
-}
-
-/* Error states */
-*[state="error"] {
- color: #f38ba8;
-}
-
-/* Info states */
-*[state="info"] {
- color: #89b4fa;
-}