diff --git a/themes/catppuccin-mocha.qss b/themes/catppuccin-mocha.qss index 8764ce9..a7867d5 100644 --- a/themes/catppuccin-mocha.qss +++ b/themes/catppuccin-mocha.qss @@ -1,17 +1,62 @@ -/* booru-viewer — Catppuccin Mocha */ +/* booru-viewer — Catppuccin Mocha + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #1e1e2e + * bg_alt #181825 + * bg_subtle #313244 + * bg_hover #45475a + * bg_active #585b70 + * text #cdd6f4 + * text_dim #a6adc8 + * text_disabled #6c7086 + * border #313244 + * border_strong #45475a + * accent #cba6f7 + * accent_text #1e1e2e + * accent_dim #b4befe + * link #89b4fa + * danger #f38ba8 + * success #a6e3a1 + * warning #f9e2af + */ + +/* ---------- Base ---------- */ QWidget { background-color: #1e1e2e; color: #cdd6f4; font-size: 13px; + selection-background-color: #cba6f7; + selection-color: #1e1e2e; } +QWidget:disabled { + color: #6c7086; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #1e1e2e; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #313244; color: #cdd6f4; border: 1px solid #45475a; - border-radius: 6px; - padding: 5px 14px; + border-radius: 4px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { background-color: #45475a; @@ -25,102 +70,459 @@ QPushButton:checked { color: #1e1e2e; border-color: #cba6f7; } +QPushButton:checked:hover { + background-color: #b4befe; + border-color: #b4befe; +} +QPushButton:disabled { + background-color: #181825; + color: #6c7086; + border-color: #313244; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #45475a; +} -QLineEdit, QSpinBox, QComboBox { +QToolButton { + background-color: transparent; + color: #cdd6f4; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #45475a; + border-color: #45475a; +} +QToolButton:pressed, QToolButton:checked { + background-color: #585b70; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { background-color: #313244; color: #cdd6f4; border: 1px solid #45475a; - border-radius: 6px; + border-radius: 4px; padding: 4px 8px; selection-background-color: #cba6f7; selection-color: #1e1e2e; } -QLineEdit:focus, QSpinBox:focus { +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { border-color: #cba6f7; } +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #181825; + color: #6c7086; + border-color: #313244; +} +QComboBox { + background-color: #313244; + color: #cdd6f4; + border: 1px solid #45475a; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #cba6f7; +} +QComboBox:focus { + border-color: #cba6f7; +} QComboBox::drop-down { border: none; - width: 20px; + width: 18px; } QComboBox QAbstractItemView { background-color: #313244; color: #cdd6f4; border: 1px solid #45475a; - selection-background-color: #45475a; + selection-background-color: #cba6f7; + selection-color: #1e1e2e; + outline: none; + padding: 2px; } +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #1e1e2e; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #585b70; + background: #45475a; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #585b70; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #cba6f7; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #1e1e2e; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #585b70; + background: #45475a; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #585b70; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { +QScrollArea { + background: transparent; + border: none; +} + +/* ---------- Menus ---------- */ + +QMenuBar { background-color: #1e1e2e; color: #cdd6f4; - border: 1px solid #313244; + border-bottom: 1px solid #313244; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #45475a; + color: #cdd6f4; +} +QMenuBar::item:pressed { + background-color: #585b70; +} + +QMenu { + background-color: #313244; + color: #cdd6f4; + border: 1px solid #45475a; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; } QMenu::item:selected { - background-color: #45475a; + background-color: #cba6f7; + color: #1e1e2e; } +QMenu::item:disabled { + color: #6c7086; +} +QMenu::separator { + height: 1px; + background: #313244; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; +} + +/* ---------- Status bar ---------- */ QStatusBar { background-color: #1e1e2e; color: #a6adc8; + border-top: 1px solid #313244; } +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ QSplitter::handle { - background: #45475a; + background: #313244; +} +QSplitter::handle:horizontal { width: 2px; } +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #cba6f7; +} -QLabel { background: transparent; } +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #313244; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #cba6f7; + border-radius: 2px; +} QSlider::handle:horizontal { background: #cba6f7; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #b4befe; +} + +QSlider::groove:vertical { + background: #313244; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #cba6f7; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } -QTabBar::tab { - background: #313244; +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #313244; color: #cdd6f4; - border: 1px solid #45475a; - padding: 6px 16px; - border-radius: 4px 4px 0 0; + border: 1px solid #313244; + border-radius: 3px; + text-align: center; + height: 6px; } -QTabBar::tab:selected { - background: #45475a; - color: #cba6f7; +QProgressBar::chunk { + background-color: #cba6f7; + border-radius: 3px; } -/* Popout & preview overlay controls */ +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #cdd6f4; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #313244; + border: 1px solid #45475a; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #cba6f7; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #cba6f7; + border-color: #cba6f7; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #181825; + border-color: #313244; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #313244; + color: #cdd6f4; + border: 1px solid #45475a; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #1e1e2e; + alternate-background-color: #181825; + color: #cdd6f4; + border: 1px solid #313244; + selection-background-color: #cba6f7; + selection-color: #1e1e2e; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #45475a; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #cba6f7; + color: #1e1e2e; +} + +QHeaderView::section { + background-color: #313244; + color: #cdd6f4; + border: none; + border-right: 1px solid #313244; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #45475a; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #313244; + top: -1px; +} +QTabBar::tab { + background: #313244; + color: #a6adc8; + border: 1px solid #313244; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +QTabBar::tab:selected { + background: #1e1e2e; + color: #cdd6f4; + border-color: #45475a; +} +QTabBar::tab:hover:!selected { + background: #45475a; + color: #cdd6f4; +} + +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #cdd6f4; + border: 1px solid #313244; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #a6adc8; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #313244; + color: #313244; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #1e1e2e; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #313244; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #cdd6f4; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #313244; + padding: 4px; + border: 1px solid #313244; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #cba6f7; + border: 1px solid #cba6f7; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #f9e2af; + qproperty-tagCharacterColor: #a6e3a1; + qproperty-tagCopyrightColor: #cba6f7; + qproperty-tagSpeciesColor: #f38ba8; + qproperty-tagMetaColor: #a6adc8; + qproperty-tagLoreColor: #a6adc8; +} diff --git a/themes/everforest.qss b/themes/everforest.qss index 50bb925..be5ceea 100644 --- a/themes/everforest.qss +++ b/themes/everforest.qss @@ -1,123 +1,528 @@ -/* booru-viewer — Everforest Dark */ +/* booru-viewer — Everforest Dark + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #2d353b + * bg_alt #232a2e + * bg_subtle #343f44 + * bg_hover #3d484d + * bg_active #4f585e + * text #d3c6aa + * text_dim #9da9a0 + * text_disabled #7a8478 + * border #343f44 + * border_strong #3d484d + * accent #a7c080 + * accent_text #2d353b + * accent_dim #83c092 + * link #7fbbb3 + * danger #e67e80 + * success #a7c080 + * warning #dbbc7f + */ + +/* ---------- Base ---------- */ QWidget { background-color: #2d353b; color: #d3c6aa; font-size: 13px; + selection-background-color: #a7c080; + selection-color: #2d353b; } +QWidget:disabled { + color: #7a8478; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #2d353b; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #343f44; color: #d3c6aa; - border: 1px solid #4f585e; + border: 1px solid #3d484d; border-radius: 4px; - padding: 5px 14px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { - background-color: #4f585e; + background-color: #3d484d; border-color: #a7c080; } QPushButton:pressed { - background-color: #a7c080; - color: #2d353b; + background-color: #4f585e; } QPushButton:checked { background-color: #a7c080; color: #2d353b; border-color: #a7c080; } +QPushButton:checked:hover { + background-color: #83c092; + border-color: #83c092; +} +QPushButton:disabled { + background-color: #232a2e; + color: #7a8478; + border-color: #343f44; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #3d484d; +} -QLineEdit, QSpinBox, QComboBox, QTextEdit { - background-color: #272e33; +QToolButton { + background-color: transparent; color: #d3c6aa; - border: 1px solid #4f585e; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #3d484d; + border-color: #3d484d; +} +QToolButton:pressed, QToolButton:checked { + background-color: #4f585e; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { + background-color: #343f44; + color: #d3c6aa; + border: 1px solid #3d484d; border-radius: 4px; padding: 4px 8px; selection-background-color: #a7c080; selection-color: #2d353b; } -QLineEdit:focus, QSpinBox:focus, QTextEdit:focus { +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { border-color: #a7c080; } - -QComboBox::drop-down { border: none; width: 20px; } -QComboBox QAbstractItemView { - background-color: #272e33; - color: #d3c6aa; - border: 1px solid #4f585e; - selection-background-color: #343f44; +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #232a2e; + color: #7a8478; + border-color: #343f44; } +QComboBox { + background-color: #343f44; + color: #d3c6aa; + border: 1px solid #3d484d; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #a7c080; +} +QComboBox:focus { + border-color: #a7c080; +} +QComboBox::drop-down { + border: none; + width: 18px; +} +QComboBox QAbstractItemView { + background-color: #343f44; + color: #d3c6aa; + border: 1px solid #3d484d; + selection-background-color: #a7c080; + selection-color: #2d353b; + outline: none; + padding: 2px; +} + +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #2d353b; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #4f585e; + background: #3d484d; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #4f585e; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #a7c080; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #2d353b; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #4f585e; + background: #3d484d; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #4f585e; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { +QScrollArea { + background: transparent; + border: none; +} + +/* ---------- Menus ---------- */ + +QMenuBar { background-color: #2d353b; color: #d3c6aa; - border: 1px solid #343f44; + border-bottom: 1px solid #343f44; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #3d484d; + color: #d3c6aa; +} +QMenuBar::item:pressed { + background-color: #4f585e; +} + +QMenu { + background-color: #343f44; + color: #d3c6aa; + border: 1px solid #3d484d; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; } QMenu::item:selected { - background-color: #343f44; + background-color: #a7c080; + color: #2d353b; } +QMenu::item:disabled { + color: #7a8478; +} +QMenu::separator { + height: 1px; + background: #343f44; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; +} + +/* ---------- Status bar ---------- */ QStatusBar { - background-color: #272e33; - color: #859289; + background-color: #2d353b; + color: #9da9a0; + border-top: 1px solid #343f44; } +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ QSplitter::handle { - background: #4f585e; + background: #343f44; +} +QSplitter::handle:horizontal { width: 2px; } +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #a7c080; +} -QLabel { background: transparent; } +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #343f44; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #a7c080; + border-radius: 2px; +} QSlider::handle:horizontal { background: #a7c080; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #83c092; +} + +QSlider::groove:vertical { + background: #343f44; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #a7c080; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } -QTabBar::tab { - background: #343f44; +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #343f44; color: #d3c6aa; - border: 1px solid #4f585e; - padding: 6px 16px; + border: 1px solid #343f44; + border-radius: 3px; + text-align: center; + height: 6px; } -QTabBar::tab:selected { - background: #4f585e; - color: #a7c080; +QProgressBar::chunk { + background-color: #a7c080; + border-radius: 3px; } -/* Popout & preview overlay controls */ +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #d3c6aa; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #343f44; + border: 1px solid #3d484d; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #a7c080; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #a7c080; + border-color: #a7c080; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #232a2e; + border-color: #343f44; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #343f44; + color: #d3c6aa; + border: 1px solid #3d484d; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #2d353b; + alternate-background-color: #232a2e; + color: #d3c6aa; + border: 1px solid #343f44; + selection-background-color: #a7c080; + selection-color: #2d353b; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #3d484d; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #a7c080; + color: #2d353b; +} + +QHeaderView::section { + background-color: #343f44; + color: #d3c6aa; + border: none; + border-right: 1px solid #343f44; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #3d484d; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #343f44; + top: -1px; +} +QTabBar::tab { + background: #343f44; + color: #9da9a0; + border: 1px solid #343f44; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +QTabBar::tab:selected { + background: #2d353b; + color: #d3c6aa; + border-color: #3d484d; +} +QTabBar::tab:hover:!selected { + background: #3d484d; + color: #d3c6aa; +} + +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #d3c6aa; + border: 1px solid #343f44; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #9da9a0; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #343f44; + color: #343f44; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #2d353b; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #343f44; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #d3c6aa; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #343f44; + padding: 4px; + border: 1px solid #343f44; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #a7c080; + border: 1px solid #a7c080; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #dbbc7f; + qproperty-tagCharacterColor: #a7c080; + qproperty-tagCopyrightColor: #a7c080; + qproperty-tagSpeciesColor: #e67e80; + qproperty-tagMetaColor: #9da9a0; + qproperty-tagLoreColor: #9da9a0; +} diff --git a/themes/gruvbox.qss b/themes/gruvbox.qss index f03930a..915b11a 100644 --- a/themes/gruvbox.qss +++ b/themes/gruvbox.qss @@ -1,123 +1,528 @@ -/* booru-viewer — Gruvbox Dark */ +/* booru-viewer — Gruvbox Dark + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #282828 + * bg_alt #1d2021 + * bg_subtle #3c3836 + * bg_hover #504945 + * bg_active #665c54 + * text #ebdbb2 + * text_dim #d5c4a1 + * text_disabled #928374 + * border #3c3836 + * border_strong #504945 + * accent #d79921 + * accent_text #282828 + * accent_dim #fabd2f + * link #83a598 + * danger #fb4934 + * success #b8bb26 + * warning #fabd2f + */ + +/* ---------- Base ---------- */ QWidget { background-color: #282828; color: #ebdbb2; font-size: 13px; + selection-background-color: #d79921; + selection-color: #282828; } +QWidget:disabled { + color: #928374; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #282828; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #3c3836; color: #ebdbb2; border: 1px solid #504945; border-radius: 4px; - padding: 5px 14px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { background-color: #504945; - border-color: #fe8019; + border-color: #d79921; } QPushButton:pressed { - background-color: #fe8019; - color: #282828; + background-color: #665c54; } QPushButton:checked { - background-color: #fe8019; + background-color: #d79921; color: #282828; - border-color: #fe8019; + border-color: #d79921; +} +QPushButton:checked:hover { + background-color: #fabd2f; + border-color: #fabd2f; +} +QPushButton:disabled { + background-color: #1d2021; + color: #928374; + border-color: #3c3836; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #504945; } -QLineEdit, QSpinBox, QComboBox, QTextEdit { +QToolButton { + background-color: transparent; + color: #ebdbb2; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #504945; + border-color: #504945; +} +QToolButton:pressed, QToolButton:checked { + background-color: #665c54; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { background-color: #3c3836; color: #ebdbb2; border: 1px solid #504945; border-radius: 4px; padding: 4px 8px; - selection-background-color: #fe8019; + selection-background-color: #d79921; selection-color: #282828; } -QLineEdit:focus, QSpinBox:focus, QTextEdit:focus { - border-color: #fe8019; +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + border-color: #d79921; +} +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #1d2021; + color: #928374; + border-color: #3c3836; } -QComboBox::drop-down { border: none; width: 20px; } +QComboBox { + background-color: #3c3836; + color: #ebdbb2; + border: 1px solid #504945; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #d79921; +} +QComboBox:focus { + border-color: #d79921; +} +QComboBox::drop-down { + border: none; + width: 18px; +} QComboBox QAbstractItemView { background-color: #3c3836; color: #ebdbb2; border: 1px solid #504945; - selection-background-color: #504945; + selection-background-color: #d79921; + selection-color: #282828; + outline: none; + padding: 2px; } +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #282828; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #665c54; + background: #504945; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #665c54; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #fe8019; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #282828; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #665c54; + background: #504945; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #665c54; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { +QScrollArea { + background: transparent; + border: none; +} + +/* ---------- Menus ---------- */ + +QMenuBar { background-color: #282828; color: #ebdbb2; - border: 1px solid #3c3836; + border-bottom: 1px solid #3c3836; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #504945; + color: #ebdbb2; +} +QMenuBar::item:pressed { + background-color: #665c54; +} + +QMenu { + background-color: #3c3836; + color: #ebdbb2; + border: 1px solid #504945; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; } QMenu::item:selected { - background-color: #504945; + background-color: #d79921; + color: #282828; } +QMenu::item:disabled { + color: #928374; +} +QMenu::separator { + height: 1px; + background: #3c3836; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; +} + +/* ---------- Status bar ---------- */ QStatusBar { background-color: #282828; - color: #a89984; + color: #d5c4a1; + border-top: 1px solid #3c3836; } +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ QSplitter::handle { - background: #504945; + background: #3c3836; +} +QSplitter::handle:horizontal { width: 2px; } +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #d79921; +} -QLabel { background: transparent; } +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #3c3836; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #d79921; + border-radius: 2px; +} QSlider::handle:horizontal { - background: #fe8019; + background: #d79921; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #fabd2f; +} + +QSlider::groove:vertical { + background: #3c3836; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #d79921; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } -QTabBar::tab { - background: #3c3836; +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #3c3836; color: #ebdbb2; - border: 1px solid #504945; - padding: 6px 16px; + border: 1px solid #3c3836; + border-radius: 3px; + text-align: center; + height: 6px; } -QTabBar::tab:selected { - background: #504945; - color: #fe8019; +QProgressBar::chunk { + background-color: #d79921; + border-radius: 3px; } -/* Popout & preview overlay controls */ +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #ebdbb2; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #3c3836; + border: 1px solid #504945; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #d79921; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #d79921; + border-color: #d79921; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #1d2021; + border-color: #3c3836; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #3c3836; + color: #ebdbb2; + border: 1px solid #504945; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #282828; + alternate-background-color: #1d2021; + color: #ebdbb2; + border: 1px solid #3c3836; + selection-background-color: #d79921; + selection-color: #282828; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #504945; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #d79921; + color: #282828; +} + +QHeaderView::section { + background-color: #3c3836; + color: #ebdbb2; + border: none; + border-right: 1px solid #3c3836; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #504945; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #3c3836; + top: -1px; +} +QTabBar::tab { + background: #3c3836; + color: #d5c4a1; + border: 1px solid #3c3836; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +QTabBar::tab:selected { + background: #282828; + color: #ebdbb2; + border-color: #504945; +} +QTabBar::tab:hover:!selected { + background: #504945; + color: #ebdbb2; +} + +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #ebdbb2; + border: 1px solid #3c3836; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #d5c4a1; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #3c3836; + color: #3c3836; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #282828; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #3c3836; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #ebdbb2; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #3c3836; + padding: 4px; + border: 1px solid #3c3836; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #d79921; + border: 1px solid #d79921; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #fabd2f; + qproperty-tagCharacterColor: #b8bb26; + qproperty-tagCopyrightColor: #d79921; + qproperty-tagSpeciesColor: #fb4934; + qproperty-tagMetaColor: #d5c4a1; + qproperty-tagLoreColor: #d5c4a1; +} diff --git a/themes/nord.qss b/themes/nord.qss index c547425..bc65a1f 100644 --- a/themes/nord.qss +++ b/themes/nord.qss @@ -1,17 +1,62 @@ -/* booru-viewer — Nord */ +/* booru-viewer — Nord + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #2e3440 + * bg_alt #272b36 + * bg_subtle #3b4252 + * bg_hover #434c5e + * bg_active #4c566a + * text #eceff4 + * text_dim #d8dee9 + * text_disabled #4c566a + * border #3b4252 + * border_strong #4c566a + * accent #88c0d0 + * accent_text #2e3440 + * accent_dim #81a1c1 + * link #8fbcbb + * danger #bf616a + * success #a3be8c + * warning #ebcb8b + */ + +/* ---------- Base ---------- */ QWidget { background-color: #2e3440; - color: #d8dee9; + color: #eceff4; font-size: 13px; + selection-background-color: #88c0d0; + selection-color: #2e3440; } +QWidget:disabled { + color: #4c566a; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #2e3440; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #3b4252; - color: #d8dee9; + color: #eceff4; border: 1px solid #4c566a; border-radius: 4px; - padding: 5px 14px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { background-color: #434c5e; @@ -21,106 +66,463 @@ QPushButton:pressed { background-color: #4c566a; } QPushButton:checked { - background-color: #5e81ac; - color: #eceff4; - border-color: #5e81ac; + background-color: #88c0d0; + color: #2e3440; + border-color: #88c0d0; +} +QPushButton:checked:hover { + background-color: #81a1c1; + border-color: #81a1c1; +} +QPushButton:disabled { + background-color: #272b36; + color: #4c566a; + border-color: #3b4252; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #434c5e; } -QLineEdit, QSpinBox, QComboBox { +QToolButton { + background-color: transparent; + color: #eceff4; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #434c5e; + border-color: #4c566a; +} +QToolButton:pressed, QToolButton:checked { + background-color: #4c566a; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { background-color: #3b4252; color: #eceff4; border: 1px solid #4c566a; border-radius: 4px; padding: 4px 8px; - selection-background-color: #5e81ac; - selection-color: #eceff4; + selection-background-color: #88c0d0; + selection-color: #2e3440; } -QLineEdit:focus, QSpinBox:focus { +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { border-color: #88c0d0; } +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #272b36; + color: #4c566a; + border-color: #3b4252; +} +QComboBox { + background-color: #3b4252; + color: #eceff4; + border: 1px solid #4c566a; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #88c0d0; +} +QComboBox:focus { + border-color: #88c0d0; +} QComboBox::drop-down { border: none; - width: 20px; + width: 18px; } QComboBox QAbstractItemView { background-color: #3b4252; - color: #d8dee9; + color: #eceff4; border: 1px solid #4c566a; - selection-background-color: #434c5e; + selection-background-color: #88c0d0; + selection-color: #2e3440; + outline: none; + padding: 2px; } +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #2e3440; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #4c566a; + background: #434c5e; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #4c566a; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #5e81ac; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #2e3440; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #4c566a; + background: #434c5e; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #4c566a; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { +QScrollArea { + background: transparent; + border: none; +} + +/* ---------- Menus ---------- */ + +QMenuBar { background-color: #2e3440; - color: #d8dee9; - border: 1px solid #3b4252; + color: #eceff4; + border-bottom: 1px solid #3b4252; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #434c5e; + color: #eceff4; +} +QMenuBar::item:pressed { + background-color: #4c566a; +} + +QMenu { + background-color: #3b4252; + color: #eceff4; + border: 1px solid #4c566a; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; } QMenu::item:selected { - background-color: #434c5e; + background-color: #88c0d0; + color: #2e3440; } +QMenu::item:disabled { + color: #4c566a; +} +QMenu::separator { + height: 1px; + background: #3b4252; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; +} + +/* ---------- Status bar ---------- */ QStatusBar { background-color: #2e3440; - color: #81a1c1; + color: #d8dee9; + border-top: 1px solid #3b4252; } +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ QSplitter::handle { - background: #4c566a; + background: #3b4252; +} +QSplitter::handle:horizontal { width: 2px; } +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #88c0d0; +} -QLabel { background: transparent; } +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #3b4252; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #88c0d0; + border-radius: 2px; +} QSlider::handle:horizontal { background: #88c0d0; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #81a1c1; +} + +QSlider::groove:vertical { + background: #3b4252; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #88c0d0; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #3b4252; + color: #eceff4; + border: 1px solid #3b4252; + border-radius: 3px; + text-align: center; + height: 6px; +} +QProgressBar::chunk { + background-color: #88c0d0; + border-radius: 3px; +} + +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #eceff4; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #3b4252; + border: 1px solid #4c566a; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #88c0d0; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #88c0d0; + border-color: #88c0d0; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #272b36; + border-color: #3b4252; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #3b4252; + color: #eceff4; + border: 1px solid #4c566a; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #2e3440; + alternate-background-color: #272b36; + color: #eceff4; + border: 1px solid #3b4252; + selection-background-color: #88c0d0; + selection-color: #2e3440; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #434c5e; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #88c0d0; + color: #2e3440; +} + +QHeaderView::section { + background-color: #3b4252; + color: #eceff4; + border: none; + border-right: 1px solid #3b4252; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #434c5e; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #3b4252; + top: -1px; +} QTabBar::tab { background: #3b4252; color: #d8dee9; - border: 1px solid #4c566a; - padding: 6px 16px; + border: 1px solid #3b4252; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } QTabBar::tab:selected { + background: #2e3440; + color: #eceff4; + border-color: #4c566a; +} +QTabBar::tab:hover:!selected { background: #434c5e; - color: #88c0d0; - border-bottom-color: #88c0d0; + color: #eceff4; } -/* Popout & preview overlay controls */ +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #eceff4; + border: 1px solid #3b4252; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #d8dee9; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #3b4252; + color: #3b4252; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #2e3440; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #3b4252; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #eceff4; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #3b4252; + padding: 4px; + border: 1px solid #3b4252; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #88c0d0; + border: 1px solid #88c0d0; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #ebcb8b; + qproperty-tagCharacterColor: #a3be8c; + qproperty-tagCopyrightColor: #88c0d0; + qproperty-tagSpeciesColor: #bf616a; + qproperty-tagMetaColor: #d8dee9; + qproperty-tagLoreColor: #d8dee9; +} diff --git a/themes/solarized-dark.qss b/themes/solarized-dark.qss index adc4cd1..5ae94e9 100644 --- a/themes/solarized-dark.qss +++ b/themes/solarized-dark.qss @@ -1,123 +1,528 @@ -/* booru-viewer — Solarized Dark */ +/* booru-viewer — Solarized Dark + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #002b36 + * bg_alt #001f27 + * bg_subtle #073642 + * bg_hover #0d4654 + * bg_active #586e75 + * text #93a1a1 + * text_dim #839496 + * text_disabled #586e75 + * border #073642 + * border_strong #0d4654 + * accent #268bd2 + * accent_text #002b36 + * accent_dim #2aa198 + * link #2aa198 + * danger #dc322f + * success #859900 + * warning #b58900 + */ + +/* ---------- Base ---------- */ QWidget { background-color: #002b36; - color: #839496; + color: #93a1a1; font-size: 13px; + selection-background-color: #268bd2; + selection-color: #002b36; } +QWidget:disabled { + color: #586e75; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #002b36; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #073642; color: #93a1a1; - border: 1px solid #586e75; + border: 1px solid #0d4654; border-radius: 4px; - padding: 5px 14px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { - background-color: #586e75; - color: #fdf6e3; + background-color: #0d4654; + border-color: #268bd2; } QPushButton:pressed { - background-color: #268bd2; - color: #fdf6e3; + background-color: #586e75; } QPushButton:checked { background-color: #268bd2; - color: #fdf6e3; + color: #002b36; border-color: #268bd2; } +QPushButton:checked:hover { + background-color: #2aa198; + border-color: #2aa198; +} +QPushButton:disabled { + background-color: #001f27; + color: #586e75; + border-color: #073642; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #0d4654; +} -QLineEdit, QSpinBox, QComboBox, QTextEdit { +QToolButton { + background-color: transparent; + color: #93a1a1; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #0d4654; + border-color: #0d4654; +} +QToolButton:pressed, QToolButton:checked { + background-color: #586e75; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { background-color: #073642; color: #93a1a1; - border: 1px solid #586e75; + border: 1px solid #0d4654; border-radius: 4px; padding: 4px 8px; selection-background-color: #268bd2; - selection-color: #fdf6e3; + selection-color: #002b36; } -QLineEdit:focus, QSpinBox:focus, QTextEdit:focus { +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { border-color: #268bd2; } +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #001f27; + color: #586e75; + border-color: #073642; +} -QComboBox::drop-down { border: none; width: 20px; } +QComboBox { + background-color: #073642; + color: #93a1a1; + border: 1px solid #0d4654; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #268bd2; +} +QComboBox:focus { + border-color: #268bd2; +} +QComboBox::drop-down { + border: none; + width: 18px; +} QComboBox QAbstractItemView { background-color: #073642; color: #93a1a1; - border: 1px solid #586e75; - selection-background-color: #586e75; + border: 1px solid #0d4654; + selection-background-color: #268bd2; + selection-color: #002b36; + outline: none; + padding: 2px; } +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #002b36; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #586e75; + background: #0d4654; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #586e75; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #268bd2; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #002b36; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #586e75; + background: #0d4654; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #586e75; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { +QScrollArea { + background: transparent; + border: none; +} + +/* ---------- Menus ---------- */ + +QMenuBar { background-color: #002b36; - color: #839496; - border: 1px solid #073642; + color: #93a1a1; + border-bottom: 1px solid #073642; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #0d4654; + color: #93a1a1; +} +QMenuBar::item:pressed { + background-color: #586e75; +} + +QMenu { + background-color: #073642; + color: #93a1a1; + border: 1px solid #0d4654; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; } QMenu::item:selected { - background-color: #073642; + background-color: #268bd2; + color: #002b36; } +QMenu::item:disabled { + color: #586e75; +} +QMenu::separator { + height: 1px; + background: #073642; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; +} + +/* ---------- Status bar ---------- */ QStatusBar { background-color: #002b36; - color: #586e75; + color: #839496; + border-top: 1px solid #073642; } +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ QSplitter::handle { - background: #586e75; + background: #073642; +} +QSplitter::handle:horizontal { width: 2px; } +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #268bd2; +} -QLabel { background: transparent; } +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #073642; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #268bd2; + border-radius: 2px; +} QSlider::handle:horizontal { background: #268bd2; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #2aa198; +} + +QSlider::groove:vertical { + background: #073642; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #268bd2; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #073642; + color: #93a1a1; + border: 1px solid #073642; + border-radius: 3px; + text-align: center; + height: 6px; +} +QProgressBar::chunk { + background-color: #268bd2; + border-radius: 3px; +} + +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #93a1a1; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #073642; + border: 1px solid #0d4654; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #268bd2; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #268bd2; + border-color: #268bd2; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #001f27; + border-color: #073642; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #073642; + color: #93a1a1; + border: 1px solid #0d4654; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #002b36; + alternate-background-color: #001f27; + color: #93a1a1; + border: 1px solid #073642; + selection-background-color: #268bd2; + selection-color: #002b36; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #0d4654; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #268bd2; + color: #002b36; +} + +QHeaderView::section { + background-color: #073642; + color: #93a1a1; + border: none; + border-right: 1px solid #073642; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #0d4654; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #073642; + top: -1px; +} QTabBar::tab { background: #073642; color: #839496; - border: 1px solid #586e75; - padding: 6px 16px; + border: 1px solid #073642; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } QTabBar::tab:selected { - background: #586e75; - color: #fdf6e3; + background: #002b36; + color: #93a1a1; + border-color: #0d4654; +} +QTabBar::tab:hover:!selected { + background: #0d4654; + color: #93a1a1; } -/* Popout & preview overlay controls */ +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #93a1a1; + border: 1px solid #073642; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #839496; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #073642; + color: #073642; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #002b36; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #073642; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #93a1a1; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #073642; + padding: 4px; + border: 1px solid #073642; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #268bd2; + border: 1px solid #268bd2; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #b58900; + qproperty-tagCharacterColor: #859900; + qproperty-tagCopyrightColor: #268bd2; + qproperty-tagSpeciesColor: #dc322f; + qproperty-tagMetaColor: #839496; + qproperty-tagLoreColor: #839496; +} diff --git a/themes/tokyo-night.qss b/themes/tokyo-night.qss index ed46fe2..e1d59e5 100644 --- a/themes/tokyo-night.qss +++ b/themes/tokyo-night.qss @@ -1,123 +1,528 @@ -/* booru-viewer — Tokyo Night */ +/* booru-viewer — Tokyo Night + * + * Comprehensive Fusion-style QSS. Mimics the visual feel of Qt's Fusion + * style + a dark KDE color scheme: subtle borders, modest corner radius, + * clear hover/pressed/focus states, transparent labels. + * + * Palette (edit these and the rest of the file together if you fork): + * bg #1a1b26 + * bg_alt #16161e + * bg_subtle #24283b + * bg_hover #292e42 + * bg_active #3b4261 + * text #c0caf5 + * text_dim #a9b1d6 + * text_disabled #565f89 + * border #24283b + * border_strong #292e42 + * accent #7aa2f7 + * accent_text #1a1b26 + * accent_dim #7dcfff + * link #7dcfff + * danger #f7768e + * success #9ece6a + * warning #e0af68 + */ + +/* ---------- Base ---------- */ QWidget { background-color: #1a1b26; - color: #a9b1d6; + color: #c0caf5; font-size: 13px; + selection-background-color: #7aa2f7; + selection-color: #1a1b26; } +QWidget:disabled { + color: #565f89; +} + +/* Labels should never paint an opaque background — they sit on top of + * other widgets in many places (toolbars, info panels, overlays). */ +QLabel { + background: transparent; +} + +QMainWindow, QDialog { + background-color: #1a1b26; +} + +/* ---------- Buttons ---------- */ + QPushButton { background-color: #24283b; - color: #a9b1d6; - border: 1px solid #3b4261; + color: #c0caf5; + border: 1px solid #292e42; border-radius: 4px; - padding: 5px 14px; + padding: 5px 12px; + min-height: 18px; } QPushButton:hover { - background-color: #3b4261; + background-color: #292e42; border-color: #7aa2f7; } QPushButton:pressed { - background-color: #7aa2f7; - color: #1a1b26; + background-color: #3b4261; } QPushButton:checked { background-color: #7aa2f7; color: #1a1b26; border-color: #7aa2f7; } +QPushButton:checked:hover { + background-color: #7dcfff; + border-color: #7dcfff; +} +QPushButton:disabled { + background-color: #16161e; + color: #565f89; + border-color: #24283b; +} +QPushButton:flat { + background: transparent; + border: none; +} +QPushButton:flat:hover { + background-color: #292e42; +} -QLineEdit, QSpinBox, QComboBox, QTextEdit { +QToolButton { + background-color: transparent; + color: #c0caf5; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px; +} +QToolButton:hover { + background-color: #292e42; + border-color: #292e42; +} +QToolButton:pressed, QToolButton:checked { + background-color: #3b4261; +} + +/* ---------- Inputs ---------- */ + +QLineEdit, QSpinBox, QDoubleSpinBox, QTextEdit, QPlainTextEdit { background-color: #24283b; - color: #a9b1d6; - border: 1px solid #3b4261; + color: #c0caf5; + border: 1px solid #292e42; border-radius: 4px; padding: 4px 8px; selection-background-color: #7aa2f7; selection-color: #1a1b26; } -QLineEdit:focus, QSpinBox:focus, QTextEdit:focus { +QLineEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QTextEdit:focus, +QPlainTextEdit:focus { border-color: #7aa2f7; } +QLineEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QPlainTextEdit:disabled { + background-color: #16161e; + color: #565f89; + border-color: #24283b; +} -QComboBox::drop-down { border: none; width: 20px; } +QComboBox { + background-color: #24283b; + color: #c0caf5; + border: 1px solid #292e42; + border-radius: 4px; + padding: 4px 8px; + min-height: 18px; +} +QComboBox:hover { + border-color: #7aa2f7; +} +QComboBox:focus { + border-color: #7aa2f7; +} +QComboBox::drop-down { + border: none; + width: 18px; +} QComboBox QAbstractItemView { background-color: #24283b; - color: #a9b1d6; - border: 1px solid #3b4261; - selection-background-color: #3b4261; + color: #c0caf5; + border: 1px solid #292e42; + selection-background-color: #7aa2f7; + selection-color: #1a1b26; + outline: none; + padding: 2px; } +/* ---------- Scrollbars ---------- */ + QScrollBar:vertical { background: #1a1b26; width: 10px; border: none; + margin: 0; } QScrollBar::handle:vertical { - background: #3b4261; + background: #292e42; border-radius: 4px; - min-height: 20px; + min-height: 24px; + margin: 1px; +} +QScrollBar::handle:vertical:hover { + background: #3b4261; +} +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0; + border: none; +} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: transparent; } -QScrollBar::handle:vertical:hover { background: #7aa2f7; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; } QScrollBar:horizontal { background: #1a1b26; height: 10px; + border: none; + margin: 0; } QScrollBar::handle:horizontal { - background: #3b4261; + background: #292e42; border-radius: 4px; + min-width: 24px; + margin: 1px; +} +QScrollBar::handle:horizontal:hover { + background: #3b4261; +} +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + width: 0; + border: none; +} +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + background: transparent; } -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; } -QMenuBar, QMenu { - background-color: #1a1b26; - color: #a9b1d6; - border: 1px solid #24283b; +QScrollArea { + background: transparent; + border: none; } -QMenu::item:selected { + +/* ---------- Menus ---------- */ + +QMenuBar { + background-color: #1a1b26; + color: #c0caf5; + border-bottom: 1px solid #24283b; +} +QMenuBar::item { + background: transparent; + padding: 4px 10px; +} +QMenuBar::item:selected { + background-color: #292e42; + color: #c0caf5; +} +QMenuBar::item:pressed { background-color: #3b4261; } -QStatusBar { - background-color: #1a1b26; +QMenu { + background-color: #24283b; + color: #c0caf5; + border: 1px solid #292e42; + padding: 4px 0; +} +QMenu::item { + background: transparent; + padding: 5px 24px 5px 24px; +} +QMenu::item:selected { + background-color: #7aa2f7; + color: #1a1b26; +} +QMenu::item:disabled { color: #565f89; } - -QSplitter::handle { - background: #3b4261; - width: 2px; +QMenu::separator { + height: 1px; + background: #24283b; + margin: 4px 8px; +} +QMenu::icon { + padding-left: 6px; } -QLabel { background: transparent; } +/* ---------- Status bar ---------- */ + +QStatusBar { + background-color: #1a1b26; + color: #a9b1d6; + border-top: 1px solid #24283b; +} +QStatusBar::item { + border: none; +} + +/* ---------- Splitters ---------- */ + +QSplitter::handle { + background: #24283b; +} +QSplitter::handle:horizontal { + width: 2px; +} +QSplitter::handle:vertical { + height: 2px; +} +QSplitter::handle:hover { + background: #7aa2f7; +} + +/* ---------- Sliders ---------- */ QSlider::groove:horizontal { background: #24283b; height: 4px; border-radius: 2px; } +QSlider::sub-page:horizontal { + background: #7aa2f7; + border-radius: 2px; +} QSlider::handle:horizontal { background: #7aa2f7; width: 12px; - margin: -4px 0; + height: 12px; + margin: -5px 0; + border-radius: 6px; +} +QSlider::handle:horizontal:hover { + background: #7dcfff; +} + +QSlider::groove:vertical { + background: #24283b; + width: 4px; + border-radius: 2px; +} +QSlider::handle:vertical { + background: #7aa2f7; + width: 12px; + height: 12px; + margin: 0 -5px; border-radius: 6px; } +/* ---------- Progress ---------- */ + +QProgressBar { + background-color: #24283b; + color: #c0caf5; + border: 1px solid #24283b; + border-radius: 3px; + text-align: center; + height: 6px; +} +QProgressBar::chunk { + background-color: #7aa2f7; + border-radius: 3px; +} + +/* ---------- Checkboxes & radio buttons ---------- */ + +QCheckBox, QRadioButton { + background: transparent; + color: #c0caf5; + spacing: 6px; +} +QCheckBox::indicator, QRadioButton::indicator { + width: 14px; + height: 14px; + background-color: #24283b; + border: 1px solid #292e42; +} +QCheckBox::indicator { + border-radius: 3px; +} +QRadioButton::indicator { + border-radius: 7px; +} +QCheckBox::indicator:hover, QRadioButton::indicator:hover { + border-color: #7aa2f7; +} +QCheckBox::indicator:checked, QRadioButton::indicator:checked { + background-color: #7aa2f7; + border-color: #7aa2f7; +} +QCheckBox::indicator:disabled, QRadioButton::indicator:disabled { + background-color: #16161e; + border-color: #24283b; +} + +/* ---------- Tooltips ---------- */ + +QToolTip { + background-color: #24283b; + color: #c0caf5; + border: 1px solid #292e42; + padding: 4px 6px; + border-radius: 3px; +} + +/* ---------- Item views (lists, trees, tables) ---------- */ + +QListView, QListWidget, QTreeView, QTreeWidget, QTableView, QTableWidget { + background-color: #1a1b26; + alternate-background-color: #16161e; + color: #c0caf5; + border: 1px solid #24283b; + selection-background-color: #7aa2f7; + selection-color: #1a1b26; + outline: none; +} +QListView::item, QListWidget::item, +QTreeView::item, QTreeWidget::item, +QTableView::item, QTableWidget::item { + padding: 4px; +} +QListView::item:hover, QListWidget::item:hover, +QTreeView::item:hover, QTreeWidget::item:hover, +QTableView::item:hover, QTableWidget::item:hover { + background-color: #292e42; +} +QListView::item:selected, QListWidget::item:selected, +QTreeView::item:selected, QTreeWidget::item:selected, +QTableView::item:selected, QTableWidget::item:selected { + background-color: #7aa2f7; + color: #1a1b26; +} + +QHeaderView::section { + background-color: #24283b; + color: #c0caf5; + border: none; + border-right: 1px solid #24283b; + padding: 4px 8px; +} +QHeaderView::section:hover { + background-color: #292e42; +} + +/* ---------- Tabs ---------- */ + +QTabWidget::pane { + border: 1px solid #24283b; + top: -1px; +} QTabBar::tab { background: #24283b; color: #a9b1d6; - border: 1px solid #3b4261; - padding: 6px 16px; + border: 1px solid #24283b; + border-bottom: none; + padding: 6px 14px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } QTabBar::tab:selected { - background: #3b4261; - color: #7aa2f7; + background: #1a1b26; + color: #c0caf5; + border-color: #292e42; +} +QTabBar::tab:hover:!selected { + background: #292e42; + color: #c0caf5; } -/* Popout & preview overlay controls */ +/* ---------- Group boxes ---------- */ + +QGroupBox { + background: transparent; + color: #c0caf5; + border: 1px solid #24283b; + border-radius: 4px; + margin-top: 10px; + padding-top: 8px; +} +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 0 6px; + color: #a9b1d6; +} + +/* ---------- Frames ---------- */ + +QFrame[frameShape="4"], /* HLine */ +QFrame[frameShape="5"] /* VLine */ { + background: #24283b; + color: #24283b; +} + +/* ---------- Toolbars ---------- */ + +QToolBar { + background: #1a1b26; + border: none; + spacing: 4px; + padding: 2px; +} +QToolBar::separator { + background: #24283b; + width: 1px; + margin: 4px 4px; +} + +/* ---------- Dock widgets ---------- */ + +QDockWidget { + color: #c0caf5; + titlebar-close-icon: none; +} +QDockWidget::title { + background: #24283b; + padding: 4px; + border: 1px solid #24283b; +} + +/* ---------- Rubber band (multi-select drag rectangle) ---------- */ + +QRubberBand { + background: #7aa2f7; + border: 1px solid #7aa2f7; + /* Qt blends rubber band at ~30% so this reads as a translucent + * accent-tinted rectangle without needing rgba(). */ +} + +/* ---------- Popout & preview overlay controls ---------- */ + QWidget#_preview_controls, QWidget#_slideshow_toolbar, QWidget#_slideshow_controls { background: rgba(0, 0, 0, 160); } + +/* ---------- Thumbnail dot indicators (Qt properties on ThumbnailWidget) ---------- */ + +ThumbnailWidget { + qproperty-savedColor: #22cc22; /* green dot: saved to library — universal "confirmed" feel */ + qproperty-bookmarkedColor: #ffcc00; /* yellow star: bookmarked */ +} + +/* ---------- Info panel tag category colors ---------- */ + +InfoPanel { + qproperty-tagArtistColor: #e0af68; + qproperty-tagCharacterColor: #9ece6a; + qproperty-tagCopyrightColor: #7aa2f7; + qproperty-tagSpeciesColor: #f7768e; + qproperty-tagMetaColor: #a9b1d6; + qproperty-tagLoreColor: #a9b1d6; +}