diff --git a/src/qEmbyApp/components/collectioncard.cpp b/src/qEmbyApp/components/collectioncard.cpp index dae5a08..930e257 100644 --- a/src/qEmbyApp/components/collectioncard.cpp +++ b/src/qEmbyApp/components/collectioncard.cpp @@ -1,6 +1,7 @@ #include "collectioncard.h" #include "collectiongrid.h" #include "../managers/thememanager.h" +#include "../tokens/ColorTokens.h" #include "../utils/hoveranimator.h" #include @@ -123,28 +124,29 @@ void CollectionCard::paintEvent(QPaintEvent* event) int w = width(), h = height(); - QColor cardBg = isDark ? QColor(51, 65, 85, 140) : QColor(255, 255, 255, 245); - QColor border = isDark ? QColor(71, 85, 105, 100) : QColor(226, 232, 240); - QColor nameFg = isDark ? QColor("#F1F5F9") : QColor("#0F172A"); - QColor typeFg = isDark ? QColor("#94A3B8") : QColor("#64748B"); - const QColor accent("#3B82F6"); + using namespace ColorTokens; + QColor cardBg = isDark ? withAlpha(Slate::k700, 140) : withAlpha(Qt::white, 245); + QColor border = isDark ? withAlpha(Slate::k600, 100) : Slate::k200; + QColor nameFg = isDark ? Slate::k100 : Slate::k900; + QColor typeFg = isDark ? Slate::k400 : Slate::k500; + const QColor accent = Blue::k500; const qreal hp = m_hover->progress(); if (hp > 0.0 && !m_selected && !m_dragging) { - const QColor hoverBorder = isDark ? QColor(96, 165, 250, 190) : QColor(59, 130, 246, 190); - const QColor hoverBg = isDark ? QColor(51, 65, 85, 190) : QColor(255, 255, 255, 255); + const QColor hoverBorder = withAlpha(isDark ? Blue::k400 : Blue::k500, 190); + const QColor hoverBg = isDark ? withAlpha(Slate::k700, 190) : QColor(Qt::white); border = lerpColor(border, hoverBorder, hp); cardBg = lerpColor(cardBg, hoverBg, hp); } if (m_selected) { - cardBg = isDark ? QColor(30, 41, 59, 220) : QColor(239, 246, 255, 245); - border = isDark ? QColor(96, 165, 250, 220) : QColor(59, 130, 246, 220); + cardBg = isDark ? withAlpha(Slate::k800, 220) : withAlpha(Blue::k50, 245); + border = withAlpha(isDark ? Blue::k400 : Blue::k500, 220); } if (m_dragging) { - cardBg = isDark ? QColor(15, 23, 42, 235) : QColor(248, 250, 252, 252); - border = isDark ? QColor(59, 130, 246, 235) : QColor(37, 99, 235, 230); + cardBg = isDark ? withAlpha(Slate::k900, 235) : withAlpha(Slate::k50, 252); + border = isDark ? withAlpha(Blue::k500, 235) : withAlpha(Blue::k600, 230); } p.setPen(QPen(border, m_selected ? 2 : 1)); @@ -153,12 +155,12 @@ void CollectionCard::paintEvent(QPaintEvent* event) const QRectF badgeRect(w - 28, 10, 18, 18); p.setPen(QPen(m_selected ? accent - : (isDark ? QColor(100, 116, 139, 160) - : QColor(148, 163, 184, 180)), + : (isDark ? withAlpha(Slate::k500, 160) + : withAlpha(Slate::k400, 180)), 1.5)); p.setBrush(m_selected ? accent - : (isDark ? QColor(15, 23, 42, 180) - : QColor(255, 255, 255, 220))); + : (isDark ? withAlpha(Slate::k900, 180) + : withAlpha(Qt::white, 220))); p.drawEllipse(badgeRect); if (m_selected) { @@ -180,8 +182,8 @@ void CollectionCard::paintEvent(QPaintEvent* event) useSquareThumb ? imgSide : defaultImgAreaH); QLinearGradient grad(imgRect.topLeft(), imgRect.bottomRight()); - grad.setColorAt(0, isDark ? QColor(30, 41, 59) : QColor(241, 245, 249)); - grad.setColorAt(1, isDark ? QColor(51, 65, 85) : QColor(226, 232, 240)); + grad.setColorAt(0, isDark ? Slate::k800 : Slate::k100); + grad.setColorAt(1, isDark ? Slate::k700 : Slate::k200); QPainterPath clipPath; clipPath.addRoundedRect(imgRect, 9, 9); @@ -207,7 +209,7 @@ void CollectionCard::paintEvent(QPaintEvent* event) QFont iconFont = font(); iconFont.setPixelSize(32); p.setFont(iconFont); - p.setPen(isDark ? QColor(148, 163, 184, 80) : QColor(100, 116, 139, 80)); + p.setPen(withAlpha(isDark ? Slate::k400 : Slate::k500, 80)); QString placeholder = (m_type == "Playlist") ? QString::fromUtf8("🎵") : QString::fromUtf8("📂"); p.drawText(imgRect, Qt::AlignCenter, placeholder); diff --git a/src/qEmbyApp/components/searchcompleterpopup.cpp b/src/qEmbyApp/components/searchcompleterpopup.cpp index 22d4d22..873b9d1 100644 --- a/src/qEmbyApp/components/searchcompleterpopup.cpp +++ b/src/qEmbyApp/components/searchcompleterpopup.cpp @@ -1,6 +1,7 @@ #include "searchcompleterpopup.h" #include "../managers/thememanager.h" +#include "../tokens/ColorTokens.h" #include #include #include @@ -40,74 +41,19 @@ struct PopupItemPalette PopupItemPalette popupItemPalette(bool darkMode, bool hovered, bool selected) { - if (darkMode) - { - if (selected) - { - return { - QColor(QStringLiteral("#163356")), - QColor(QStringLiteral("#102B49")), - QColor(QStringLiteral("#3C73A7")), - QColor(QStringLiteral("#F8FAFC")), - QColor(QStringLiteral("#BFDBFE")), - QColor(QStringLiteral("#1D446C")), - QColor(QStringLiteral("#BFDBFE"))}; - } + using namespace ColorTokens; + const int level = selected ? 3 : (hovered ? 2 : 0); + const SearchTint::Surface s = SearchTint::surface(level, darkMode); - if (hovered) - { - return { - QColor(QStringLiteral("#162234")), - QColor(QStringLiteral("#101B2C")), - QColor(QStringLiteral("#28486B")), - QColor(QStringLiteral("#E6EEF8")), - QColor(QStringLiteral("#93C5FD")), - QColor(QStringLiteral("#17314E")), - QColor(QStringLiteral("#93C5FD"))}; - } - - return { - QColor(QStringLiteral("#111B2B")), - QColor(QStringLiteral("#0D1726")), - QColor(QStringLiteral("#1D2B3D")), - QColor(QStringLiteral("#CBD5E1")), - QColor(QStringLiteral("#93C5FD")), - QColor(QStringLiteral("#162233")), - QColor(QStringLiteral("#7F93AA"))}; - } - - if (selected) - { - return { - QColor(QStringLiteral("#EAF2FF")), - QColor(QStringLiteral("#E2EEFF")), - QColor(QStringLiteral("#C6D9F6")), - QColor(QStringLiteral("#1E40AF")), - QColor(QStringLiteral("#1D4ED8")), - QColor(QStringLiteral("#DDE9FF")), - QColor(QStringLiteral("#1D4ED8"))}; - } - - if (hovered) - { - return { - QColor(QStringLiteral("#F6FAFF")), - QColor(QStringLiteral("#EEF5FF")), - QColor(QStringLiteral("#D8E5F7")), - QColor(QStringLiteral("#284675")), - QColor(QStringLiteral("#2563EB")), - QColor(QStringLiteral("#EAF2FF")), - QColor(QStringLiteral("#2563EB"))}; - } - - return { - QColor(QStringLiteral("#F8FBFE")), - QColor(QStringLiteral("#F3F7FA")), - QColor(QStringLiteral("#E4EBF3")), - QColor(QStringLiteral("#334155")), - QColor(QStringLiteral("#2563EB")), - QColor(QStringLiteral("#EFF4FA")), - QColor(QStringLiteral("#7A8CA3"))}; + PopupItemPalette palette; + palette.backgroundTop = s.bgTop; + palette.backgroundBottom = s.bgBottom; + palette.border = s.border; + palette.text = s.text; + palette.textHighlight = darkMode ? Blue::k200 : Blue::k700; + palette.iconBubble = mix(s.bgTop, s.accent, darkMode ? 0.25 : 0.15); + palette.icon = s.accent; + return palette; } class SearchCompleterItemDelegate : public QStyledItemDelegate diff --git a/src/qEmbyApp/components/searchhistorychip.cpp b/src/qEmbyApp/components/searchhistorychip.cpp index c6e58fd..4e3a5f2 100644 --- a/src/qEmbyApp/components/searchhistorychip.cpp +++ b/src/qEmbyApp/components/searchhistorychip.cpp @@ -15,6 +15,7 @@ #include #include #include "../tokens/AnimationTokens.h" +#include "../tokens/ColorTokens.h" namespace { @@ -105,116 +106,40 @@ QFont chipBadgeFont(const QWidget *widget) return font; } -ChipPalette basePalette(const QString &heatLevel, bool darkMode) +int heatTintLevel(const QString &heatLevel) { - if (darkMode) - { - if (heatLevel == QLatin1String("top")) - { - return { - QColor(QStringLiteral("#23476D")), - QColor(QStringLiteral("#183B5F")), - QColor(QStringLiteral("#4F80B5")), - QColor(QStringLiteral("#F8FBFF")), - QColor(QStringLiteral("#315F93")), - QColor(QStringLiteral("#6499D1")), - QColor(QStringLiteral("#FFFFFF")), - QColor(QStringLiteral("#284F7B")), - QColor(QStringLiteral("#EAF3FF"))}; - } - - if (heatLevel == QLatin1String("high")) - { - return { - QColor(QStringLiteral("#1B3A59")), - QColor(QStringLiteral("#15314D")), - QColor(QStringLiteral("#3F71A4")), - QColor(QStringLiteral("#EAF3FF")), - QColor(QStringLiteral("#28527E")), - QColor(QStringLiteral("#5082B9")), - QColor(QStringLiteral("#F5FAFF")), - QColor(QStringLiteral("#24486F")), - QColor(QStringLiteral("#EAF3FF"))}; - } - - if (heatLevel == QLatin1String("mid")) - { - return { - QColor(QStringLiteral("#17304A")), - QColor(QStringLiteral("#122943")), - QColor(QStringLiteral("#355C84")), - QColor(QStringLiteral("#D6E7FF")), - QColor(QStringLiteral("#23486F")), - QColor(QStringLiteral("#4472A5")), - QColor(QStringLiteral("#E7F2FF")), - QColor(QStringLiteral("#203F61")), - QColor(QStringLiteral("#DDEBFF"))}; - } - - return { - QColor(QStringLiteral("#1B2535")), - QColor(QStringLiteral("#141E2D")), - QColor(QStringLiteral("#2F3D54")), - QColor(QStringLiteral("#D6E0EB")), - QColor(QStringLiteral("#253247")), - QColor(QStringLiteral("#43546C")), - QColor(QStringLiteral("#C8D4E2")), - QColor(QStringLiteral("#222F43")), - QColor(QStringLiteral("#CBD5E1"))}; - } - if (heatLevel == QLatin1String("top")) { - return { - QColor(QStringLiteral("#E2F0FF")), - QColor(QStringLiteral("#CFE2FF")), - QColor(QStringLiteral("#95B9F0")), - QColor(QStringLiteral("#173D8C")), - QColor(QStringLiteral("#CFE1FF")), - QColor(QStringLiteral("#95B9F0")), - QColor(QStringLiteral("#1D4ED8")), - QColor(QStringLiteral("#E9F2FF")), - QColor(QStringLiteral("#5A79B8"))}; + return 3; } - if (heatLevel == QLatin1String("high")) { - return { - QColor(QStringLiteral("#EDF5FF")), - QColor(QStringLiteral("#DDEBFF")), - QColor(QStringLiteral("#B9D2F8")), - QColor(QStringLiteral("#214AA5")), - QColor(QStringLiteral("#DDEBFF")), - QColor(QStringLiteral("#ABC8F6")), - QColor(QStringLiteral("#2563EB")), - QColor(QStringLiteral("#EEF4FC")), - QColor(QStringLiteral("#63758F"))}; + return 2; } - if (heatLevel == QLatin1String("mid")) { - return { - QColor(QStringLiteral("#F5F9FF")), - QColor(QStringLiteral("#E9F1FF")), - QColor(QStringLiteral("#CBDCF4")), - QColor(QStringLiteral("#2558BB")), - QColor(QStringLiteral("#EAF2FF")), - QColor(QStringLiteral("#C5D8F7")), - QColor(QStringLiteral("#2D69D1")), - QColor(QStringLiteral("#F2F6FB")), - QColor(QStringLiteral("#71839B"))}; + return 1; } + return 0; +} - return { - QColor(QStringLiteral("#FBFCFE")), - QColor(QStringLiteral("#F3F7FA")), - QColor(QStringLiteral("#DEE6EF")), - QColor(QStringLiteral("#334155")), - QColor(QStringLiteral("#FFFFFF")), - QColor(QStringLiteral("#D8E1EC")), - QColor(QStringLiteral("#64748B")), - QColor(QStringLiteral("#F3F6F9")), - QColor(QStringLiteral("#8090A4"))}; +ChipPalette basePalette(const QString &heatLevel, bool darkMode) +{ + using namespace ColorTokens; + const SearchTint::Surface s = + SearchTint::surface(heatTintLevel(heatLevel), darkMode); + + ChipPalette palette; + palette.backgroundTop = s.bgTop; + palette.backgroundBottom = s.bgBottom; + palette.border = s.border; + palette.text = s.text; + palette.badgeBackground = mix(s.bgTop, s.accent, darkMode ? 0.35 : 0.20); + palette.badgeBorder = mix(s.border, s.accent, 0.5); + palette.badgeText = darkMode ? Slate::k50 : Blue::k700; + palette.removeBackground = mix(s.bgTop, s.border, 0.5); + palette.removeIcon = darkMode ? Slate::k200 : Slate::k500; + return palette; } ChipPalette statePalette(const QString &heatLevel, bool darkMode, bool hovered, bool pressed) diff --git a/src/qEmbyApp/resources/qss/dark-style.qss b/src/qEmbyApp/resources/qss/dark-style.qss index 5912bb4..f35f4c4 100644 --- a/src/qEmbyApp/resources/qss/dark-style.qss +++ b/src/qEmbyApp/resources/qss/dark-style.qss @@ -1,21 +1,30 @@ /* ========================================================= qEmby Dark Theme — QSS Style Sheet Design tokens: see src/qEmbyApp/tokens/DesignTokens.h + Color tokens: see src/qEmbyApp/tokens/ColorTokens.h Animation tokens: see src/qEmbyApp/tokens/AnimationTokens.h Border-radius scale: 2(kXs) 4(kSm) 6(kMd) 8(kLg) 14(kXl) Spacing scale: 4(kXs) 8(kSm) 12(kMd) 16(kLg) 24(kXl) Font scale: 10 11 12 13 14 16 20 24 28 + White overlay alpha: 0.04 0.08 0.12 0.18 0.30 0.70 + (player OSD text may use 0.35-0.92) Color palette (Tailwind Dark): Primary Blue: #3B82F6, Hover: #2563EB Danger Red: #EF4444, Hover: #DC2626 + Success Green: #22C55E (the only green) Slate-900 (主背景): #0F172A Slate-800 (卡片/侧边栏): #1E293B Slate-700 (边框/悬浮): #334155 + Slate-600 (柔和边框): #475569 + Slate-500 (弱化元素): #64748B Slate-400 (次要文字): #94A3B8 Slate-300 (正文文字): #CBD5E1 + Slate-200 (亮文字): #E2E8F0 + Slate-100 (强调文字): #F1F5F9 Slate-50 (标题文字): #F8FAFC + 禁止使用 Tailwind Gray/Zinc 或手调近似色。 ========================================================= */ /* ========================================= @@ -109,7 +118,7 @@ QLabel#mac-title-label { color: #F8FAFC; background-color: transparent; min-height: 32px; - font-size: 15px; + font-size: 14px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -121,7 +130,7 @@ QLabel#mac-title-label { QLineEdit#titlebar-search { background-color: #1E293B; border: 1px solid transparent; - border-radius: 16px; + border-radius: 14px; padding: 0px 18px 0px 8px; font-size: 13px; font-weight: 500; @@ -229,7 +238,7 @@ QToolButton#SearchHistoryExpandButton { QToolButton#SearchHistoryModeButton:hover, QToolButton#SearchHistoryClearButton:hover, QToolButton#SearchHistoryExpandButton:hover { - background-color: rgba(255, 255, 255, 0.035); + background-color: rgba(255, 255, 255, 0.04); } QToolButton#SearchHistoryModeButton:checked, @@ -385,7 +394,7 @@ QWK--WindowBar QAbstractButton#close-button { QWK--WindowBar QAbstractButton#close-button:hover, QWK--WindowBar QAbstractButton#close-button:pressed { - background-color: #E81123; + background-color: #DC2626; qproperty-iconNormal: url(":/svg/close.svg"); /* 保持纯白 */ } @@ -514,8 +523,8 @@ QWidget#login-add-page QLabel#login-error-label { } QWidget#login-add-page QLineEdit { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -539,12 +548,12 @@ QWidget#login-add-page QLineEdit:focus { QWidget#login-add-page QWidget#login-ssl-card { background-color: rgba(255, 255, 255, 0.04); - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 14px; } QWidget#login-add-page QWidget#login-ssl-card:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.18); } @@ -701,8 +710,8 @@ QComboBox QAbstractItemView::item:selected { } QWidget#login-add-page ModernComboBox#login-protocol-combo { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -714,7 +723,7 @@ QWidget#login-add-page ModernComboBox#login-protocol-combo { } QWidget#login-add-page ModernComboBox#login-protocol-combo:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -740,7 +749,7 @@ QWidget#login-add-page ModernComboBox#login-protocol-combo::down-arrow { QWidget#login-add-page ModernComboBox#login-protocol-combo QAbstractItemView { background-color: #1E293B; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -757,7 +766,7 @@ QWidget#login-add-page ModernComboBox#login-protocol-combo QAbstractItemView::it } QWidget#login-add-page ModernComboBox#login-protocol-combo QAbstractItemView::item:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -790,9 +799,9 @@ QPushButton:hover { } QWidget#login-add-page QPushButton { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #E2E8F0; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; padding: 5px 16px; font-size: 13px; @@ -802,7 +811,7 @@ QWidget#login-add-page QPushButton { } QWidget#login-add-page QPushButton:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); color: #F8FAFC; border-color: rgba(255, 255, 255, 0.18); } @@ -857,8 +866,8 @@ QLabel#app-version-label { /* ── 登录页:端口框右侧的代理图标按钮(与 QLineEdit 同款视觉与尺寸) ── */ QWidget#login-add-page QPushButton#login-proxy-icon-btn { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; padding: 5px; min-height: 24px; @@ -866,7 +875,7 @@ QWidget#login-add-page QPushButton#login-proxy-icon-btn { } QWidget#login-add-page QPushButton#login-proxy-icon-btn:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -923,8 +932,8 @@ QLabel#ProxyDialogTestStatus[status="pending"] { /* 代理对话框内的 ModernComboBox:与登录页 login-protocol-combo 同款紧凑外观, 避免落入 Qt 原生默认样式(视觉偏高、不一致) */ #ProxySettingsDialog ModernComboBox { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -936,7 +945,7 @@ QLabel#ProxyDialogTestStatus[status="pending"] { } #ProxySettingsDialog ModernComboBox:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -948,8 +957,8 @@ QLabel#ProxyDialogTestStatus[status="pending"] { #ProxySettingsDialog ModernComboBox:disabled { color: rgba(226, 232, 240, 0.4); - background-color: rgba(255, 255, 255, 0.03); - border-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.08); } #ProxySettingsDialog ModernComboBox::drop-down { @@ -968,7 +977,7 @@ QLabel#ProxyDialogTestStatus[status="pending"] { #ProxySettingsDialog ModernComboBox QAbstractItemView { background-color: #1E293B; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -985,7 +994,7 @@ QLabel#ProxyDialogTestStatus[status="pending"] { } #ProxySettingsDialog ModernComboBox QAbstractItemView::item:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -1036,13 +1045,13 @@ QPushButton#dialog-close-btn { QWK--WindowButton#dialog-close-btn:hover, QPushButton#dialog-close-btn:hover { - background-color: #E81123; + background-color: #DC2626; qproperty-iconNormal: url(":/svg/close.svg"); } QWK--WindowButton#dialog-close-btn:pressed, QPushButton#dialog-close-btn:pressed { - background-color: #F1707A; + background-color: #EF4444; } /* PlayerOverlayDialog 内置对话框关闭按钮:右上角圆角匹配 surface 圆角 */ @@ -1074,8 +1083,8 @@ QLabel#dialog-option-label { } QPushButton#dialog-btn-cancel { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -1086,7 +1095,7 @@ QPushButton#dialog-btn-cancel { } QPushButton#dialog-btn-cancel:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); color: #F8FAFC; } @@ -1130,7 +1139,7 @@ QPushButton#dialog-btn-primary:hover { QPushButton#dialog-btn-primary:disabled { background-color: rgba(59, 130, 246, 0.4); - color: rgba(255, 255, 255, 0.7); + color: rgba(255, 255, 255, 0.70); } ModernDialogBase#playerDanmakuSettingsDialog, @@ -1148,7 +1157,7 @@ QWidget#playerDanmakuSettingsDialog { #playerDanmakuSettingsDialog QLabel#playerDanmakuSummaryText { font-size: 12px; - color: #B8C6DB; + color: #CBD5E1; line-height: 1.45; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -1233,7 +1242,7 @@ QWidget#playerDanmakuSettingsDialog { #playerDanmakuSettingsDialog QFrame#playerDanmakuSliderTile QWidget#DanmakuOptionSlider ModernSlider { qproperty-themeColor: #60A5FA; - qproperty-trackColor: rgba(255, 255, 255, 0.10); + qproperty-trackColor: rgba(255, 255, 255, 0.12); qproperty-bufferColor: rgba(96, 165, 250, 0.18); qproperty-handleColor: #FFFFFF; qproperty-normalTrackHeight: 5; @@ -1243,9 +1252,9 @@ QWidget#playerDanmakuSettingsDialog { } #playerDanmakuSettingsDialog QFrame#playerDanmakuInputTile QFrame#TagInputContainer { - background-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(148, 163, 184, 0.16); - border-radius: 10px; + border-radius: 8px; } #playerDanmakuSettingsDialog QFrame#playerDanmakuInputTile QFrame#TagInputContainer:focus-within { @@ -1267,7 +1276,7 @@ QWidget#playerSubtitleSettingsDialog { #playerSubtitleSettingsDialog QLabel#playerSubtitleSummaryText { font-size: 12px; - color: #B8C6DB; + color: #CBD5E1; line-height: 1.45; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -1336,7 +1345,7 @@ QWidget#playerSubtitleSettingsDialog { #playerSubtitleSettingsDialog QFrame#playerSubtitleSliderTile QWidget#SubtitleOptionSlider ModernSlider { qproperty-themeColor: #60A5FA; - qproperty-trackColor: rgba(255, 255, 255, 0.10); + qproperty-trackColor: rgba(255, 255, 255, 0.12); qproperty-bufferColor: rgba(96, 165, 250, 0.18); qproperty-handleColor: #FFFFFF; qproperty-normalTrackHeight: 5; @@ -1346,9 +1355,9 @@ QWidget#playerSubtitleSettingsDialog { } #playerSubtitleSettingsDialog ModernComboBox#playerSubtitleFontCombo { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); - border-radius: 10px; + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 8px; color: #E2E8F0; font-size: 13px; font-weight: 500; @@ -1359,7 +1368,7 @@ QWidget#playerSubtitleSettingsDialog { } #playerSubtitleSettingsDialog ModernComboBox#playerSubtitleFontCombo:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -1385,7 +1394,7 @@ QWidget#playerSubtitleSettingsDialog { #playerSubtitleSettingsDialog ModernComboBox#playerSubtitleFontCombo QAbstractItemView { background-color: #1E293B; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -1429,7 +1438,7 @@ QListWidget#modernComboEmbeddedList[flush-right-scrollbar="true"] QScrollBar::ha } #playerSubtitleSettingsDialog ModernComboBox#playerSubtitleFontCombo QAbstractItemView::item:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -1452,7 +1461,7 @@ QWidget#modernComboEmbeddedOverlay { QFrame#modernComboEmbeddedFrame { background-color: #1E293B; border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 10px; + border-radius: 8px; padding: 3px; } @@ -1475,7 +1484,7 @@ QListWidget#modernComboEmbeddedList::item { } QListWidget#modernComboEmbeddedList::item:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -1496,13 +1505,13 @@ QListWidget#modernComboEmbeddedList QScrollBar:vertical { } QListWidget#modernComboEmbeddedList QScrollBar::handle:vertical { - background-color: rgba(255, 255, 255, 0.15); + background-color: rgba(255, 255, 255, 0.18); border-radius: 4px; min-height: 30px; } QListWidget#modernComboEmbeddedList QScrollBar::handle:vertical:hover { - background-color: rgba(255, 255, 255, 0.25); + background-color: rgba(255, 255, 255, 0.30); } QListWidget#modernComboEmbeddedList QScrollBar::add-line:vertical, @@ -1550,14 +1559,14 @@ QWidget#floating-sidebar[pinned="true"] QLineEdit#sidebar-search { } QLabel#sidebar-server-name { - font-size: 15px; + font-size: 14px; font-weight: 700; color: #F8FAFC; } QLabel#sidebar-server-address { font-size: 11px; - color: rgba(255, 255, 255, 0.5); + color: rgba(255, 255, 255, 0.45); } QLabel#sidebar-user-name { @@ -1870,7 +1879,7 @@ QPushButton#library-tab-btn, QPushButton#modern-sort-btn { background-color: transparent; border: 1px solid transparent; - border-radius: 16px; + border-radius: 14px; padding: 6px 16px; font-size: 14px; font-weight: 600; @@ -1898,7 +1907,7 @@ QPushButton#modern-sort-btn::menu-indicator { QPushButton#icon-action-btn { background-color: transparent; border: none; - border-radius: 16px; + border-radius: 14px; padding: 6px; } @@ -1972,13 +1981,13 @@ QPushButton#gallery-nav-btn { } QPushButton#gallery-nav-btn:hover { - background-color: rgba(255, 255, 255, 30); - color: rgba(255, 255, 255, 230); + background-color: rgba(255, 255, 255, 0.12); + color: rgba(255, 255, 255, 0.92); } QPushButton#gallery-nav-btn:pressed { - background-color: rgba(255, 255, 255, 50); - color: rgba(255, 255, 255, 255); + background-color: rgba(255, 255, 255, 0.18); + color: #FFFFFF; } QPushButton#section-more-btn { @@ -2011,7 +2020,7 @@ QLabel#detail-title { } QLabel#detail-series-title { - font-size: 26px; + font-size: 24px; font-weight: 800; color: #F8FAFC; letter-spacing: -0.2px; @@ -2021,12 +2030,12 @@ QLabel#detail-meta { font-size: 13px; font-weight: 500; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; - color: #D6DEE9; + color: #CBD5E1; } QPushButton#detail-number-chip { padding: 2px 8px; - border-radius: 10px; + border-radius: 8px; border: 1px solid transparent; background-color: transparent; color: #F8FAFC; @@ -2149,7 +2158,7 @@ QLabel#detail-filemeta { QWidget#stream-card { background-color: #1E293B; border: 1px solid #334155; - border-radius: 10px; + border-radius: 8px; } QWidget#stream-card QLabel#stream-type { @@ -2280,7 +2289,7 @@ QLabel#MediaImageEditIntroText { } QWidget#MediaImageEditSidePanel { - background-color: rgba(255, 255, 255, 0.03); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 14px; } @@ -2295,7 +2304,7 @@ QLabel#MediaImageEditSectionTitle { QLabel#MediaImageEditSideStatus { background-color: rgba(15, 23, 42, 0.72); border: 1px solid rgba(59, 130, 246, 0.18); - border-radius: 10px; + border-radius: 8px; color: #CBD5E1; font-size: 12px; padding: 8px 10px; @@ -2326,8 +2335,8 @@ QLabel#identify-preview-label[media-image-editor="true"] { QLabel#identify-preview-label[drag-over="true"] { background-color: #0F172A; - border-color: #38BDF8; - color: #E0F2FE; + border-color: #60A5FA; + color: #DBEAFE; } QLabel#overview-title { @@ -2344,17 +2353,12 @@ QWidget#overview-scroll-content { } QLabel#overview-text { - font-size: 15px; + font-size: 14px; color: #CBD5E1; /* Slate-300 柔和的正文阅读色 */ line-height: 1.8; } -/* Player Control Bar Background */ -#playerControlBar { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(0, 0, 0, 0), stop:1 rgba(0, 0, 0, 200)); -} - /* Player Typography */ #playerTimeLabel, #playerTitleLabel { @@ -2364,18 +2368,6 @@ QLabel#overview-text { font-weight: 500; } -#playPauseBtn { - background: transparent; - border: none; - color: #ffffff; - font-size: 16px; - font-weight: bold; -} - -#playPauseBtn:hover { - color: #52B54B; -} - /* ========================================= Detail View 播放进度条 (极致 2px 纤细风格) ========================================= */ @@ -2390,7 +2382,6 @@ QProgressBar#detail-progress-bar { QProgressBar#detail-progress-bar::chunk { background-color: #3B82F6; - /* 如果你要苹果绿,请替换为 #30D158 */ border-radius: 2px; } @@ -2398,11 +2389,11 @@ QProgressBar#detail-progress-bar::chunk { Detail View 外置播放器分区按钮 (暗色模式) ========================================= */ SplitPlayerButton#detail-ext-player-btn { - qproperty-hoverColor: rgba(255, 255, 255, 30); - qproperty-pressedColor: rgba(255, 255, 255, 20); - qproperty-separatorColor: rgba(255, 255, 255, 50); - qproperty-arrowColor: rgba(255, 255, 255, 180); - qproperty-textColor: rgba(255, 255, 255, 180); + qproperty-hoverColor: rgba(255, 255, 255, 0.12); + qproperty-pressedColor: rgba(255, 255, 255, 0.08); + qproperty-separatorColor: rgba(255, 255, 255, 0.18); + qproperty-arrowColor: rgba(255, 255, 255, 0.70); + qproperty-textColor: rgba(255, 255, 255, 0.70); qproperty-borderRadius: 6; } @@ -2443,7 +2434,7 @@ QLabel#playerTimeLabel { } QLabel#playerNetworkSpeed { - color: rgba(255, 255, 255, 130); + color: rgba(255, 255, 255, 0.50); font-size: 10px; font-weight: 500; background: transparent; @@ -2468,11 +2459,11 @@ QPushButton#hud-back-btn { QPushButton#hud-min-btn:hover, QPushButton#hud-max-btn:hover, QPushButton#hud-back-btn:hover { - background: rgba(255, 255, 255, 30); + background: rgba(255, 255, 255, 0.12); } QPushButton#hud-close-btn:hover { - background-color: #E81123; + background-color: #DC2626; } QPushButton.player-hud-btn { @@ -2482,11 +2473,11 @@ QPushButton.player-hud-btn { } QPushButton.player-hud-btn:hover { - background: rgba(255, 255, 255, 30); + background: rgba(255, 255, 255, 0.12); } QPushButton.player-hud-btn:pressed { - background: rgba(255, 255, 255, 50); + background: rgba(255, 255, 255, 0.18); } /* ========================================================= @@ -2501,7 +2492,7 @@ QWidget#playerStatisticsOverlay { ========================================================= */ QLabel#playerNetworkSpeed { - color: rgba(255, 255, 255, 130); + color: rgba(255, 255, 255, 0.50); font-size: 11px; font-weight: 500; } @@ -2536,11 +2527,11 @@ QPushButton#playerMediaSwitchBtn { } QPushButton#playerMediaSwitchBtn:hover { - background: rgba(255, 255, 255, 30); + background: rgba(255, 255, 255, 0.12); } QPushButton#playerMediaSwitchBtn:pressed { - background: rgba(255, 255, 255, 50); + background: rgba(255, 255, 255, 0.18); } QPushButton#playerSpeedBtn:focus { @@ -2549,31 +2540,31 @@ QPushButton#playerSpeedBtn:focus { } QPushButton#playerSpeedBtn:hover { - background: rgba(255, 255, 255, 30); + background: rgba(255, 255, 255, 0.12); } QPushButton#playerSpeedBtn:pressed { - background: rgba(255, 255, 255, 50); + background: rgba(255, 255, 255, 0.18); } QPushButton#playerMediaSwitchBtn[drawerActive="true"] { - background: rgba(255, 255, 255, 45); - border: 1px solid rgba(255, 255, 255, 88); + background: rgba(255, 255, 255, 0.18); + border: 1px solid rgba(255, 255, 255, 0.35); } QPushButton#playerMediaSwitchBtn[drawerActive="true"]:hover { - background: rgba(255, 255, 255, 58); + background: rgba(255, 255, 255, 0.18); } QPushButton#playerMediaSwitchBtn[drawerActive="true"]:pressed { - background: rgba(255, 255, 255, 72); + background: rgba(255, 255, 255, 0.30); } /* 【修复】:更紧凑、更精致的悬浮毛玻璃菜单 */ QMenu#playerPopupMenu { background-color: rgba(25, 25, 25, 180); /* 极高透明度的深色底 */ - border: 1px solid rgba(255, 255, 255, 25); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; /* 圆角微调缩小,更现代 */ padding: 4px; @@ -2594,7 +2585,7 @@ QMenu#playerPopupMenu::item { } QMenu#playerPopupMenu::item:selected { - background-color: rgba(255, 255, 255, 35); + background-color: rgba(255, 255, 255, 0.12); /* 悬浮高亮反馈 */ color: #FFFFFF; } @@ -2613,7 +2604,7 @@ QMenu#playerPopupMenu::indicator { QWidget#playerRightSidebar { background-color: rgba(20, 20, 20, 120); /* Alpha降到120,画面能透出来 */ - border-left: 1px solid rgba(255, 255, 255, 30); + border-left: 1px solid rgba(255, 255, 255, 0.12); } /* 2. 标题排版 */ @@ -2645,12 +2636,12 @@ QListWidget#playerResumeList::item { } QListWidget#playerResumeList::item:hover { - background: rgba(255, 255, 255, 40); + background: rgba(255, 255, 255, 0.18); color: #FFFFFF; } QListWidget#playerResumeList::item:selected { - background: rgba(255, 255, 255, 20); + background: rgba(255, 255, 255, 0.08); color: #FFFFFF; } @@ -2664,13 +2655,13 @@ QListWidget#playerResumeList QScrollBar:vertical { } QListWidget#playerResumeList QScrollBar::handle:vertical { - background: rgba(255, 255, 255, 0.4); + background: rgba(255, 255, 255, 0.45); border-radius: 2px; min-height: 20px; } QListWidget#playerResumeList QScrollBar::handle:vertical:hover { - background: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.70); } QListWidget#playerResumeList QScrollBar::add-line:vertical, @@ -2687,7 +2678,7 @@ QListWidget#playerResumeList QScrollBar::sub-page:vertical { QFrame#playerMediaSwitcherPanel { background-color: rgba(18, 18, 20, 220); - border: 1px solid rgba(255, 255, 255, 28); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 14px; } @@ -2700,7 +2691,7 @@ QLabel#playerMediaSwitcherTitle { } QLabel#playerMediaSwitcherSectionTitle { - color: rgba(255, 255, 255, 150); + color: rgba(255, 255, 255, 0.55); font-size: 10px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -2708,7 +2699,7 @@ QLabel#playerMediaSwitcherSectionTitle { } QLabel#playerMediaSwitcherStatus { - color: rgba(255, 255, 255, 140); + color: rgba(255, 255, 255, 0.55); font-size: 11px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; margin: 0px 0px 2px 0px; @@ -2737,9 +2728,9 @@ QWidget#playerMediaSwitcherEpisodeGallery { /* 自定义属性传导给 C++ */ qproperty-themeColor: #3B82F6; /* Tailwind 主题蓝 */ - qproperty-trackColor: rgba(255, 255, 255, 40); + qproperty-trackColor: rgba(255, 255, 255, 0.18); /* 未播放底层透明轨道 */ - qproperty-bufferColor: rgba(255, 255, 255, 120); + qproperty-bufferColor: rgba(255, 255, 255, 0.45); /* 新增缓冲轨道:更亮的白色半透明 */ qproperty-handleColor: #FFFFFF; /* 纯白小巧圆滑块 */ @@ -2750,7 +2741,7 @@ QWidget#playerMediaSwitcherEpisodeGallery { QPushButton#immersive-stream-btn { background: transparent; - color: rgba(255, 255, 255, 0.7); + color: rgba(255, 255, 255, 0.70); font-size: 12px; /* 【调优】字号缩小,更具精致标签感 */ font-weight: 500; @@ -2764,11 +2755,11 @@ QPushButton#immersive-stream-btn { QPushButton#immersive-stream-btn:hover { color: #ffffff; - background: rgba(255, 255, 255, 0.15); + background: rgba(255, 255, 255, 0.18); } QPushButton#immersive-stream-btn:pressed { - background: rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.12); } QWidget#detail-episode-header-controls { @@ -2777,7 +2768,7 @@ QWidget#detail-episode-header-controls { QLineEdit#detail-episode-jump-edit { background: transparent; - color: rgba(255, 255, 255, 0.7); + color: rgba(255, 255, 255, 0.70); font-size: 12px; font-weight: 500; border: none; @@ -2789,7 +2780,7 @@ QLineEdit#detail-episode-jump-edit { QLineEdit#detail-episode-jump-edit:hover { color: #FFFFFF; - background: rgba(255, 255, 255, 0.15); + background: rgba(255, 255, 255, 0.18); } QLineEdit#detail-episode-jump-edit:focus { @@ -2820,14 +2811,14 @@ QMenu#immersive-stream-menu { } QMenu#immersive-stream-menu::item { - color: #E0E0E0; + color: #E2E8F0; padding: 6px 28px 6px 14px; border-radius: 6px; font-size: 12px; } QMenu#immersive-stream-menu::item:selected { - background-color: rgba(255, 255, 255, 0.15); + background-color: rgba(255, 255, 255, 0.18); color: #FFFFFF; font-weight: bold; } @@ -2841,13 +2832,13 @@ QMenu#immersive-stream-menu[customItemHighlight="true"]::item { QMenu#immersive-stream-menu[customItemHighlight="true"]::item:selected { background: transparent; - color: #E0E0E0; + color: #E2E8F0; font-weight: 500; } QMenu#immersive-stream-menu::separator { height: 1px; - background: rgba(255, 255, 255, 0.05); + background: rgba(255, 255, 255, 0.04); margin: 4px 8px; } @@ -2863,7 +2854,7 @@ QWidget#stream-menu-item { QWidget#stream-menu-item:hover, QWidget#stream-menu-item[checked="true"] { - background-color: rgba(255, 255, 255, 0.15); + background-color: rgba(255, 255, 255, 0.18); } QWidget#stream-menu-item:hover QLabel#stream-menu-line1, @@ -2872,7 +2863,7 @@ QWidget#stream-menu-item[checked="true"] QLabel#stream-menu-line1 { } QLabel#stream-menu-line1 { - color: #E0E0E0; + color: #E2E8F0; font-size: 12px; font-weight: 500; background: transparent; @@ -2889,8 +2880,8 @@ QLabel#stream-menu-line2 { QToolTip { background-color: rgba(28, 28, 30, 0.95); /* 深邃的类苹果毛玻璃灰 */ - color: #E0E0E0; - border: 1px solid rgba(255, 255, 255, 0.1); + color: #E2E8F0; + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 4px; /* Qt 原生对 tooltip 圆角支持有限,4px 最安全 */ padding: 4px 8px; @@ -2920,7 +2911,7 @@ QLabel#osdSeekTimeLabel { font-weight: 600; padding: 4px 10px; border-radius: 6px; - border: 1px solid rgba(255, 255, 255, 28); + border: 1px solid rgba(255, 255, 255, 0.12); } /* 进度条悬停时间气泡(面板底色由 SeekTimeBubble 自绘) */ @@ -2945,8 +2936,8 @@ QWidget#osdSeekMarker { QWidget#osdVolumePanel { background-color: rgba(15, 23, 42, 154); - border: 1px solid rgba(255, 255, 255, 30); - border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 8px; } QLabel#osdVolumeIconLabel { @@ -2955,13 +2946,13 @@ QLabel#osdVolumeIconLabel { } QProgressBar#osdVolumeBar { - background-color: rgba(255, 255, 255, 42); + background-color: rgba(255, 255, 255, 0.18); border: none; border-radius: 2px; } QProgressBar#osdVolumeBar::chunk { - background-color: rgba(255, 255, 255, 232); + background-color: rgba(255, 255, 255, 0.92); border-radius: 2px; } @@ -2976,20 +2967,20 @@ QLabel#osdVolumeLabel { } QWidget#playerMouseEdgeIndicator { - background-color: rgba(255, 255, 255, 18); - border: 1px solid rgba(255, 255, 255, 52); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.18); border-radius: 14px; } QWidget#playerMouseEdgeIndicator[gestureActive="true"] { - background-color: rgba(255, 255, 255, 24); - border: 1px solid rgba(255, 255, 255, 120); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.45); } QLabel#playerMouseEdgeIndicatorIcon, QLabel#playerMouseEdgeIndicatorText { background: transparent; - color: rgba(255, 255, 255, 235); + color: rgba(255, 255, 255, 0.92); } QLabel#playerMouseEdgeIndicatorText { @@ -3018,7 +3009,7 @@ QScrollArea#modernMenuScrollArea { /* 让 QScrollArea 自身不画背景;viewport 自己负责玻璃色,避免 Qt 在 light 主题下把 QScrollArea 的 background 不可靠转发到 viewport 导致颜色丢失的问题。 */ - border: 1px solid rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; } @@ -3038,7 +3029,7 @@ QWidget#modernMenuContainer { /* 完美对齐的按钮设计 */ QPushButton#modernMenuItemBtn { background-color: transparent; - color: #E0E0E0; + color: #E2E8F0; border: none; border-radius: 4px; /* 与 modernscrollpanel.cpp 中 kMenuItemMinHeight 同步, @@ -3051,7 +3042,7 @@ QPushButton#modernMenuItemBtn { } QPushButton#modernMenuItemBtn:hover { - background-color: rgba(255, 255, 255, 0.1); + background-color: rgba(255, 255, 255, 0.12); color: #FFFFFF; } @@ -3078,7 +3069,7 @@ QScrollBar#modernMenuScrollBar::handle:vertical { QScrollBar#modernMenuScrollBar::handle:vertical:hover, QScrollBar#modernMenuScrollBar::handle:vertical:pressed { - background: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.70); margin: 0px; } @@ -3097,7 +3088,7 @@ QScrollBar#modernMenuScrollBar::sub-page:vertical { ModernToast { background-color: rgba(30, 30, 30, 0.90); /* 质感背景 */ - border: 1px solid rgba(255, 255, 255, 0.15); + border: 1px solid rgba(255, 255, 255, 0.18); /* 描边 */ border-radius: 6px; /* 圆角 */ @@ -3110,8 +3101,8 @@ ModernToast { /* ========================================================= */ QMenu#media-action-menu { - background-color: #1F2937; - border: 1px solid #374151; + background-color: #1E293B; + border: 1px solid #334155; border-radius: 8px; padding: 6px 0px; } @@ -3121,7 +3112,7 @@ QMenu#media-action-menu::item { margin: 0px 6px; padding: 8px 18px 8px 10px; border-radius: 4px; - color: #D1D5DB; + color: #CBD5E1; font-size: 13px; font-weight: 500; background-color: transparent; @@ -3129,13 +3120,13 @@ QMenu#media-action-menu::item { /* 菜单项悬浮/选中状态(仅改变颜色) */ QMenu#media-action-menu::item:selected { - background-color: #374151; - color: #F9FAFB; + background-color: #334155; + color: #F8FAFC; } QMenu#media-action-menu::separator { height: 1px; - background-color: #374151; + background-color: #334155; margin: 4px 12px; } @@ -3156,11 +3147,11 @@ LoadingOverlay { qproperty-hudColorBottom: rgba(20, 20, 20, 170); /* 边框与阴影:极具立体感的白色高光与重阴影 */ - qproperty-borderColor: rgba(255, 255, 255, 55); + qproperty-borderColor: rgba(255, 255, 255, 0.18); qproperty-shadowColor: rgba(0, 0, 0, 60); /* 加载条:白底轨与纯白光圈 */ - qproperty-trackColor: rgba(255, 255, 255, 12); + qproperty-trackColor: rgba(255, 255, 255, 0.04); qproperty-sweepColor: #FFFFFF; } @@ -3171,13 +3162,13 @@ LoadingOverlay { /* 1. 设置项卡片容器 */ #SettingsCard { background-color: rgba(255, 255, 255, 0.04); - border: 1px solid rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 14px; } #SettingsCard:hover { - background-color: rgba(255, 255, 255, 0.07); - border-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.12); } /* 2. 图标圆角背景容器 */ @@ -3190,7 +3181,7 @@ LoadingOverlay { #SettingsCardTitle { font-size: 14px; font-weight: 600; - color: #F0F0F0; + color: #F1F5F9; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -3250,7 +3241,7 @@ QLabel#DanmakuOptionSliderHint { #SettingsCard QWidget#DanmakuOptionSlider ModernSlider, #SettingsSubPanel QWidget#DanmakuOptionSlider ModernSlider { qproperty-themeColor: #60A5FA; - qproperty-trackColor: rgba(255, 255, 255, 0.10); + qproperty-trackColor: rgba(255, 255, 255, 0.12); qproperty-bufferColor: rgba(96, 165, 250, 0.16); qproperty-handleColor: #F8FAFC; qproperty-normalTrackHeight: 6; @@ -3295,7 +3286,7 @@ QLabel#SubtitleOptionSliderHint { #SettingsCard QWidget#SubtitleOptionSlider ModernSlider, #SettingsSubPanel QWidget#SubtitleOptionSlider ModernSlider { qproperty-themeColor: #60A5FA; - qproperty-trackColor: rgba(255, 255, 255, 0.10); + qproperty-trackColor: rgba(255, 255, 255, 0.12); qproperty-bufferColor: rgba(96, 165, 250, 0.16); qproperty-handleColor: #F8FAFC; qproperty-normalTrackHeight: 6; @@ -3306,8 +3297,8 @@ QLabel#SubtitleOptionSliderHint { /* 7. Settings 内的下拉选择框 */ #SettingsCard ModernComboBox { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -3320,7 +3311,7 @@ QLabel#SubtitleOptionSliderHint { } #SettingsCard ModernComboBox:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -3346,8 +3337,8 @@ QLabel#SubtitleOptionSliderHint { /* Settings 内的数字输入框 */ #SettingsCard QSpinBox#ModernNumberInput { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -3360,7 +3351,7 @@ QLabel#SubtitleOptionSliderHint { } #SettingsCard QSpinBox#ModernNumberInput:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); } @@ -3386,7 +3377,7 @@ QLabel#SubtitleOptionSliderHint { /* 弹出列表容器 */ #SettingsCard ModernComboBox QAbstractItemView { background-color: #1E293B; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -3402,7 +3393,7 @@ QLabel#SubtitleOptionSliderHint { } #SettingsCard ModernComboBox QAbstractItemView::item:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -3449,8 +3440,8 @@ QLabel#SubtitleOptionSliderHint { /* 8. Settings 内的操作按钮 */ #SettingsCardButton { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -3461,7 +3452,7 @@ QLabel#SubtitleOptionSliderHint { } #SettingsCardButton:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.18); color: #F8FAFC; } @@ -3504,8 +3495,8 @@ QLabel#SubtitleOptionSliderHint { /* 外层容器(模拟输入框外观) */ #TagInputContainer { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; } @@ -3517,7 +3508,7 @@ QLabel#SubtitleOptionSliderHint { QPushButton#TagChipInline { background-color: rgba(59, 130, 246, 0.25); border: none; - border-radius: 10px; + border-radius: 8px; color: #93C5FD; font-size: 11px; font-weight: 600; @@ -3534,7 +3525,7 @@ QPushButton#TagChipInline:hover { QPushButton#TagChipSummary { background-color: rgba(148, 163, 184, 0.18); border: none; - border-radius: 10px; + border-radius: 8px; color: #CBD5E1; font-size: 11px; font-weight: 600; @@ -3578,13 +3569,13 @@ QToolButton#TagInputMoreBtn { QToolButton#TagInputClearBtn:hover, QToolButton#TagInputMoreBtn:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); } /* 预设弹出菜单 */ QMenu#TagPresetMenu { background-color: #1E293B; - border: 1px solid rgba(255, 255, 255, 0.10); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; padding: 4px; } @@ -3597,7 +3588,7 @@ QMenu#TagPresetMenu::item { } QMenu#TagPresetMenu::item:selected { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -3609,8 +3600,8 @@ QMenu#TagPresetMenu::indicator { /* 9. URL 路径替换面板 (UrlReplaceFrame) */ #UrlReplaceFrame { - background: rgba(255, 255, 255, 0.025); - border: 1px solid rgba(255, 255, 255, 0.06); + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); border-left: 3px solid #3B82F6; border-radius: 14px; margin-left: 20px; @@ -3623,8 +3614,8 @@ QMenu#TagPresetMenu::indicator { } #UrlReplaceFrame QPlainTextEdit { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -3644,7 +3635,7 @@ QMenu#TagPresetMenu::indicator { /* 左侧控制面板容器 */ #SettingsLeftPanel { background-color: transparent; - border-right: 1px solid rgba(255, 255, 255, 0.05); + border-right: 1px solid rgba(255, 255, 255, 0.04); /* 极弱的亮线分割 */ } @@ -3681,7 +3672,7 @@ QMenu#TagPresetMenu::indicator { /* 菜单项悬停态 */ #SettingsNavMenu::item:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -3761,7 +3752,7 @@ QLabel#AboutLinkLabel a:hover { } QFrame#AboutSeparatorLine { - background-color: rgba(255, 255, 255, 0.1); + background-color: rgba(255, 255, 255, 0.12); border: none; max-height: 1px; margin: 20px 40px; @@ -3806,7 +3797,7 @@ QLabel#AboutThanksSubtitle { QFrame#AboutThanksCard { background-color: rgba(15, 23, 42, 0.44); border: 1px solid rgba(148, 163, 184, 0.16); - border-radius: 16px; + border-radius: 14px; } QFrame#AboutThanksCard:hover { @@ -3931,7 +3922,7 @@ QPushButton#AboutLicenseBtn { /* 鼠标移入:唤醒精美的圆角矩形微光轮廓 */ QPushButton#AboutLicenseBtn:hover { - background-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); /* 出现圆角矩形的背景色 */ color: #94A3B8; /* 文字适度提亮 */ @@ -3939,7 +3930,7 @@ QPushButton#AboutLicenseBtn:hover { /* 鼠标按下:真实物理反馈 */ QPushButton#AboutLicenseBtn:pressed { - background-color: rgba(255, 255, 255, 0.02); + background-color: rgba(255, 255, 255, 0.04); color: #64748B; } @@ -3947,7 +3938,7 @@ QPushButton#AboutLicenseBtn:pressed { Settings Page 标题 (SettingsPageBase) ========================================= */ QLabel#SettingsPageTitle { - font-size: 22px; + font-size: 20px; font-weight: 800; color: #F8FAFC; /* Slate-50 极亮标题 */ @@ -3966,9 +3957,9 @@ QLabel#SettingsPageTitle { ========================================== */ #modern-tray-menu { /* 使用 rgba 允许底部有非常轻微的透色感 */ - background-color: rgba(30, 30, 32, 245); - border: 1px solid #3F3F46; - /* Tailwind Zinc 700 细腻光泽边框 */ + background-color: rgba(15, 23, 42, 245); + border: 1px solid #334155; + /* Slate-700 细腻光泽边框 */ border-radius: 8px; /* 整体菜单外沿圆角 */ padding: 6px 0px; @@ -3976,8 +3967,8 @@ QLabel#SettingsPageTitle { } #modern-tray-menu::item { - color: #E4E4E7; - /* Tailwind Zinc 200 */ + color: #CBD5E1; + /* Slate-300 */ padding: 6px 32px 6px 14px; /* 左右宽阔的热区,保证不拥挤 */ margin: 2px 6px; @@ -3995,7 +3986,7 @@ QLabel#SettingsPageTitle { #modern-tray-menu::separator { height: 1px; - background-color: #3F3F46; + background-color: #334155; /* 边框同色分割线 */ margin: 4px 12px; /* 分割线缩进,不贯穿两头 */ @@ -4028,7 +4019,7 @@ QLabel#SettingsPageTitle { /* 管理卡片标题 */ QLabel#ManageCardTitle { color: #F1F5F9; - font-size: 15px; + font-size: 16px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -4279,12 +4270,12 @@ QPushButton#ManageShutdownBtn:pressed { QFrame#NowPlayingCard { background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); - border-radius: 10px; + border-radius: 8px; } QLabel#NowPlayingImage { - background-color: rgba(255, 255, 255, 0.06); - border-radius: 10px; + background-color: rgba(255, 255, 255, 0.08); + border-radius: 8px; border: none; } @@ -4310,7 +4301,7 @@ QLabel#NowPlayingProgress { QProgressBar#NowPlayingProgressBar { min-height: 2px; max-height: 2px; - background-color: rgba(255, 255, 255, 0.25); + background-color: rgba(255, 255, 255, 0.30); border: 1px solid transparent; border-radius: 2px; } @@ -4379,9 +4370,9 @@ QListWidget#ManageLibraryList::item { } QFrame#DanmakuServerListPanel { - background-color: rgba(255, 255, 255, 0.035); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); - border-radius: 16px; + border-radius: 14px; } QListWidget#DanmakuServerList { @@ -4402,18 +4393,18 @@ QWidget#DanmakuServerListRow { } QFrame#DanmakuServerCard { - background-color: rgba(255, 255, 255, 0.045); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 14px; } QFrame#DanmakuServerCard:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); border: 1px solid rgba(148, 163, 184, 0.22); } QFrame#DanmakuServerCard[selected="true"] { - background-color: rgba(255, 255, 255, 0.075); + background-color: rgba(255, 255, 255, 0.08); border: 1px solid rgba(148, 163, 184, 0.28); } @@ -4428,12 +4419,12 @@ QFrame#DanmakuServerCard[selected="true"][currentServer="true"] { } QFrame#DanmakuServerCard[serverEnabled="false"] { - background-color: rgba(255, 255, 255, 0.02); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(100, 116, 139, 0.16); } QFrame#DanmakuServerCard[selected="true"][serverEnabled="false"] { - background-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(148, 163, 184, 0.22); } @@ -4471,7 +4462,7 @@ QLabel#DanmakuServerCardMeta { QPushButton#DanmakuServerRemoveButton { background: transparent; border: none; - border-radius: 10px; + border-radius: 8px; padding: 0; } @@ -4496,9 +4487,9 @@ QPushButton#DanmakuServerRemoveButton[removable="false"]:pressed { } QFrame#DanmakuServerEditorPanel { - background-color: rgba(255, 255, 255, 0.035); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); - border-radius: 16px; + border-radius: 14px; } QLabel#DanmakuServerEditorTitle { @@ -4654,8 +4645,8 @@ QPushButton#LibCardDeleteBtn:pressed { /* 添加路径按钮 */ QPushButton#ManageLibAddPathBtn { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; color: #94A3B8; font-size: 12px; @@ -4686,8 +4677,8 @@ QPushButton#ManageLibRemovePathBtn:hover { /* 对话框内输入框 */ QLineEdit#ManageLibInput { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -4700,8 +4691,8 @@ QLineEdit#ManageLibInput:focus { } QLineEdit#LibraryMetadataLineEdit { - background-color: rgba(255, 255, 255, 0.05); - border: 1px solid rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; color: #CBD5E1; font-size: 12px; @@ -4712,12 +4703,12 @@ QLineEdit#LibraryMetadataLineEdit { } QLineEdit#LibraryMetadataLineEdit:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.12); } QLineEdit#LibraryMetadataLineEdit:focus { - background-color: rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(59, 130, 246, 0.50); } @@ -4728,8 +4719,8 @@ QLabel#LibraryMetadataFieldLabel { } QPlainTextEdit#LibraryMetadataOverviewEdit { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -4757,7 +4748,7 @@ QCheckBox#LibraryMetadataLockCheck::indicator { height: 16px; border-radius: 4px; border: 1px solid rgba(255, 255, 255, 0.18); - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); } QCheckBox#LibraryMetadataLockCheck::indicator:hover { @@ -4771,8 +4762,8 @@ QCheckBox#LibraryMetadataLockCheck::indicator:checked { } QLineEdit#PlaylistSearchEdit { - background-color: rgba(255, 255, 255, 0.05); - border: 1px solid rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 6px; color: #CBD5E1; font-size: 12px; @@ -4785,12 +4776,12 @@ QLineEdit#PlaylistSearchEdit { } QLineEdit#PlaylistSearchEdit:hover { - background-color: rgba(255, 255, 255, 0.07); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.12); } QLineEdit#PlaylistSearchEdit:focus { - background-color: rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(59, 130, 246, 0.50); } @@ -4800,7 +4791,7 @@ QWidget#PlaylistInlineCreateRow { } QLineEdit#PlaylistInlineCreateEdit { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); border: 1px solid rgba(59, 130, 246, 0.18); border-radius: 6px; color: #E2E8F0; @@ -4812,7 +4803,7 @@ QLineEdit#PlaylistInlineCreateEdit { } QLineEdit#PlaylistInlineCreateEdit:focus { - background-color: rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.08); border-color: rgba(59, 130, 246, 0.50); } @@ -4904,7 +4895,7 @@ QListWidget#ManageLibPathList::item:selected { } QListWidget#ManageLibPathList::item:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); } QFrame#DashboardSectionOrderStrip { @@ -4914,7 +4905,7 @@ QFrame#DashboardSectionOrderStrip { } QFrame#DashboardSectionOrderChip { - background-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 14px; } @@ -4969,7 +4960,7 @@ QPushButton#LibAdvancedToggle:hover { /* ── 高级设置面板 ── */ QWidget#LibAdvancedPanel { - background-color: rgba(255, 255, 255, 0.03); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; } @@ -4986,8 +4977,8 @@ QCheckBox#ManageLibCheckBox::indicator { width: 16px; height: 16px; border-radius: 4px; - border: 1px solid rgba(255, 255, 255, 0.2); - background-color: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.18); + background-color: rgba(255, 255, 255, 0.04); } QCheckBox#ManageLibCheckBox::indicator:checked { @@ -5002,7 +4993,7 @@ QPushButton#FetcherArrowBtn { border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 4px; color: #94A3B8; - font-size: 9px; + font-size: 10px; padding: 0; } @@ -5012,7 +5003,7 @@ QPushButton#FetcherArrowBtn:hover { } QPushButton#FetcherArrowBtn:pressed { - background-color: rgba(255, 255, 255, 0.14); + background-color: rgba(255, 255, 255, 0.12); } QPushButton#FetcherArrowBtn:disabled { @@ -5031,15 +5022,15 @@ QLabel#FetcherRowLabel { /* ── 可排序抽取器行 — 行容器 ── */ QWidget#FetcherRowWidget { background-color: rgba(255, 255, 255, 0.04); - border: 1px solid rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 6px; } /* ── 高级设置 SpinBox ── */ QSpinBox#ManageLibSpinBox, QDoubleSpinBox#ManageLibSpinBox { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; color: #E2E8F0; font-size: 12px; @@ -5060,8 +5051,8 @@ QDoubleSpinBox#ManageLibSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 20px; - border-top: 1px solid rgba(255, 255, 255, 0.10); - border-right: 1px solid rgba(255, 255, 255, 0.10); + border-top: 1px solid rgba(255, 255, 255, 0.12); + border-right: 1px solid rgba(255, 255, 255, 0.12); border-bottom: none; border-left: 1px solid rgba(255, 255, 255, 0.08); border-top-right-radius: 5px; @@ -5070,7 +5061,7 @@ QDoubleSpinBox#ManageLibSpinBox::up-button { QSpinBox#ManageLibSpinBox::up-button:hover, QDoubleSpinBox#ManageLibSpinBox::up-button:hover { - background: rgba(255, 255, 255, 0.10); + background: rgba(255, 255, 255, 0.12); } QSpinBox#ManageLibSpinBox::up-button:pressed, @@ -5090,9 +5081,9 @@ QDoubleSpinBox#ManageLibSpinBox::down-button { subcontrol-origin: border; subcontrol-position: bottom right; width: 20px; - border-top: 1px solid rgba(255, 255, 255, 0.06); - border-right: 1px solid rgba(255, 255, 255, 0.10); - border-bottom: 1px solid rgba(255, 255, 255, 0.10); + border-top: 1px solid rgba(255, 255, 255, 0.08); + border-right: 1px solid rgba(255, 255, 255, 0.12); + border-bottom: 1px solid rgba(255, 255, 255, 0.12); border-left: 1px solid rgba(255, 255, 255, 0.08); border-bottom-right-radius: 5px; background: rgba(255, 255, 255, 0.04); @@ -5100,7 +5091,7 @@ QDoubleSpinBox#ManageLibSpinBox::down-button { QSpinBox#ManageLibSpinBox::down-button:hover, QDoubleSpinBox#ManageLibSpinBox::down-button:hover { - background: rgba(255, 255, 255, 0.10); + background: rgba(255, 255, 255, 0.12); } QSpinBox#ManageLibSpinBox::down-button:pressed, @@ -5133,8 +5124,8 @@ QScrollArea#LibCreateScrollArea>QWidget>QWidget { /* ── 对话框内 ComboBox ── */ QComboBox#ManageLibComboBox { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #E2E8F0; font-size: 13px; @@ -5181,7 +5172,7 @@ QComboBox#ManageLibComboBox QAbstractItemView::item { } QComboBox#ManageLibComboBox QAbstractItemView::item:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); } QComboBox#ManageLibComboBox QAbstractItemView::item:selected, @@ -5191,8 +5182,8 @@ QComboBox#ManageLibComboBox QAbstractItemView::item:selected:hover { } QComboBox#ManageLibComboBox:disabled { - background-color: rgba(255, 255, 255, 0.03); - border-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); + border-color: rgba(255, 255, 255, 0.04); color: rgba(226, 232, 240, 0.35); } @@ -5257,7 +5248,7 @@ QLabel#ManageLibPathLabel { border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; padding: 5px 10px; - color: rgba(255, 255, 255, 0.7); + color: rgba(255, 255, 255, 0.70); font-size: 12px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; min-height: 20px; @@ -5265,7 +5256,7 @@ QLabel#ManageLibPathLabel { QLabel#ManageLibPathLabel[empty="true"] { border-style: dashed; - color: rgba(255, 255, 255, 0.3); + color: rgba(255, 255, 255, 0.30); font-style: italic; } @@ -5315,7 +5306,7 @@ QProgressBar#ManageLibScanProgress::chunk { QPushButton#ManageLibCancelScanBtn { background-color: rgba(239, 68, 68, 0.15); border: 1px solid rgba(239, 68, 68, 0.3); - border-radius: 10px; + border-radius: 8px; qproperty-icon: url(":/svg/dark/close.svg"); qproperty-iconSize: 10px 10px; } @@ -5335,8 +5326,8 @@ QPushButton#ManageLibCancelScanBtn:pressed { /* 整体容器框:模拟 lineEdit 外观 */ QFrame#TagInputContainer { - background-color: rgba(255, 255, 255, 0.07); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; } @@ -5360,7 +5351,7 @@ QLineEdit#TagInputInlineEdit { QPushButton#TagChipInline { background-color: rgba(59, 130, 246, 0.18); border: 1px solid rgba(59, 130, 246, 0.32); - border-radius: 10px; + border-radius: 8px; color: #93C5FD; font-size: 11px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -5381,7 +5372,7 @@ QPushButton#TagChipInline:pressed { QPushButton#TagChipSummary { background-color: rgba(148, 163, 184, 0.12); border: 1px solid rgba(148, 163, 184, 0.22); - border-radius: 10px; + border-radius: 8px; color: #94A3B8; font-size: 11px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -5430,15 +5421,15 @@ QToolButton#TagInputMoreBtn:pressed { /* ── 预设弹出面板 ── */ QFrame#TagPresetPopup { - background-color: #1A2438; - border: 1px solid rgba(255, 255, 255, 0.11); - border-radius: 10px; + background-color: #1E293B; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 14px; } /* 弹出面板内搜索框:小巧精致 */ QLineEdit#TagPresetSearchEdit { - background-color: rgba(255, 255, 255, 0.06); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; color: #CBD5E1; font-size: 12px; @@ -5452,7 +5443,7 @@ QLineEdit#TagPresetSearchEdit { QLineEdit#TagPresetSearchEdit:focus { border-color: rgba(59, 130, 246, 0.50); - background-color: rgba(255, 255, 255, 0.09); + background-color: rgba(255, 255, 255, 0.08); } /* 弹出面板内复选框 */ @@ -5462,7 +5453,7 @@ QFrame#TagPresetOptionRow { } QFrame#TagPresetOptionRow:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); } QFrame#TagPresetOptionRow:hover QCheckBox#TagPresetCheckbox { @@ -5485,7 +5476,7 @@ QCheckBox#TagPresetCheckbox { } QCheckBox#TagPresetCheckbox:hover { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); color: #E2E8F0; } @@ -5493,8 +5484,8 @@ QCheckBox#TagPresetCheckbox::indicator { width: 15px; height: 15px; border-radius: 4px; - border: 1px solid rgba(255, 255, 255, 0.20); - background-color: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.18); + background-color: rgba(255, 255, 255, 0.04); } QCheckBox#TagPresetCheckbox::indicator:hover { @@ -5533,7 +5524,7 @@ QScrollArea#TagPresetScrollArea QScrollBar::handle:vertical { } QScrollArea#TagPresetScrollArea QScrollBar::handle:vertical:hover { - background: rgba(255, 255, 255, 0.32); + background: rgba(255, 255, 255, 0.30); } QScrollArea#TagPresetScrollArea QScrollBar::add-line:vertical, @@ -5591,8 +5582,8 @@ QPushButton#CollCardDeleteBtn:disabled { /* ── 管理页 Tab 按钮 ── */ QPushButton#ManageTabBtn { - background-color: rgba(255, 255, 255, 0.06); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 8px; color: #94A3B8; font-size: 13px; @@ -5602,7 +5593,7 @@ QPushButton#ManageTabBtn { } QPushButton#ManageTabBtn:hover { - background-color: rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.12); color: #CBD5E1; } @@ -5724,7 +5715,7 @@ QPushButton#ManageTaskStopBtn:pressed { QProgressBar#ManageTaskProgress { min-height: 4px; max-height: 4px; - background-color: rgba(255, 255, 255, 0.1); + background-color: rgba(255, 255, 255, 0.12); border: none; border-radius: 2px; } @@ -5857,7 +5848,7 @@ QTabBar#UserEditTabBar::tab:selected { QTabBar#UserEditTabBar::tab:hover:!selected { color: #CBD5E1; - background-color: rgba(255, 255, 255, 0.05); + background-color: rgba(255, 255, 255, 0.04); } QFrame#UserEditSectionCard { @@ -5876,7 +5867,7 @@ QLabel#UserEditSectionTitle { QWidget#UserEditSwitchRow { background-color: rgba(15, 23, 42, 0.42); border: 1px solid rgba(148, 163, 184, 0.10); - border-radius: 10px; + border-radius: 8px; } QWidget#UserEditSwitchRow:hover { @@ -5886,7 +5877,7 @@ QWidget#UserEditSwitchRow:hover { QWidget#UserEditFolderListContainer { background-color: rgba(15, 23, 42, 0.4); border: 1px solid rgba(148, 163, 184, 0.10); - border-radius: 10px; + border-radius: 8px; } QFrame#UserEditFooterBar { @@ -5960,7 +5951,7 @@ QLabel#TaskSummaryCaption { QLabel#TaskMetaBadge { background-color: rgba(59, 130, 246, 0.12); border: 1px solid rgba(59, 130, 246, 0.22); - border-radius: 10px; + border-radius: 8px; color: #BFDBFE; padding: 3px 10px; font-size: 11px; @@ -5970,7 +5961,7 @@ QLabel#TaskMetaBadge { QLabel#TaskMutedBadge { background-color: rgba(51, 65, 85, 0.72); border: 1px solid rgba(148, 163, 184, 0.16); - border-radius: 10px; + border-radius: 8px; color: rgba(226, 232, 240, 0.88); padding: 3px 10px; font-size: 11px; @@ -5980,7 +5971,7 @@ QLabel#TaskMutedBadge { QWidget#TaskEditTriggerRow { background-color: rgba(15, 23, 42, 0.55); border: 1px solid rgba(148, 163, 184, 0.12); - border-radius: 10px; + border-radius: 8px; } QLabel#TaskTriggerMetaLabel { @@ -5991,7 +5982,7 @@ QLabel#TaskTriggerMetaLabel { QLabel#TaskReadOnlyBadge { background-color: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.22); - border-radius: 10px; + border-radius: 8px; color: #FCD34D; padding: 3px 10px; font-size: 11px; @@ -6104,7 +6095,7 @@ QFrame#DownloadRecordRow:hover { QLabel#DownloadRecordIndex { background-color: rgba(59, 130, 246, 0.18); border: 1px solid rgba(96, 165, 250, 0.28); - border-radius: 10px; + border-radius: 8px; color: #BFDBFE; padding: 6px 0px; font-size: 11px; @@ -6124,7 +6115,7 @@ QLabel#DownloadRecordValue { } QLabel#DownloadRecordProgress { - border-radius: 10px; + border-radius: 8px; padding: 6px 10px; font-size: 11px; font-weight: 600; @@ -6175,7 +6166,7 @@ QLabel#DownloadLocationValue { QFrame#DownloadEmptyState { background-color: transparent; border: 1px dashed rgba(100, 116, 139, 0.24); - border-radius: 16px; + border-radius: 14px; } QLabel#DownloadEmptyIcon { @@ -6267,8 +6258,8 @@ QPushButton#DownloadIconButton:disabled { } #webdav-sync-dialog QLineEdit { - background-color: rgba(255, 255, 255, 0.06); - border: 1px solid rgba(255, 255, 255, 0.10); + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; padding: 6px 10px; font-size: 13px; @@ -6290,7 +6281,7 @@ QPushButton#DownloadIconButton:disabled { } QFrame#webdav-card { - background-color: rgba(255, 255, 255, 0.03); + background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; } @@ -6316,7 +6307,7 @@ QLabel#webdav-hint { } QLabel#webdav-strategy-label { - color: #A8B4C7; + color: #94A3B8; font-size: 12px; font-weight: 600; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -6341,7 +6332,7 @@ QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"] { } QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"]:hover:!checked { - background-color: rgba(255, 255, 255, 0.06); + background-color: rgba(255, 255, 255, 0.08); color: #F8FAFC; } @@ -6358,10 +6349,10 @@ QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"]:checked QTableView#webdav-snapshot-table { background-color: rgba(15, 23, 42, 0.6); - alternate-background-color: rgba(255, 255, 255, 0.02); + alternate-background-color: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; - gridline-color: rgba(255, 255, 255, 0.06); + gridline-color: rgba(255, 255, 255, 0.08); color: #E2E8F0; font-size: 12px; selection-background-color: rgba(59, 130, 246, 0.30); @@ -6391,8 +6382,8 @@ QTableView#webdav-snapshot-table QHeaderView::section { background-color: rgba(30, 41, 59, 0.85); color: #CBD5E1; border: none; - border-right: 1px solid rgba(255, 255, 255, 0.06); - border-bottom: 1px solid rgba(255, 255, 255, 0.10); + border-right: 1px solid rgba(255, 255, 255, 0.08); + border-bottom: 1px solid rgba(255, 255, 255, 0.12); padding: 6px 10px; font-size: 12px; font-weight: 600; diff --git a/src/qEmbyApp/resources/qss/light-style.qss b/src/qEmbyApp/resources/qss/light-style.qss index 176f224..22397e1 100644 --- a/src/qEmbyApp/resources/qss/light-style.qss +++ b/src/qEmbyApp/resources/qss/light-style.qss @@ -1,20 +1,29 @@ /* ========================================================= qEmby Light Theme — QSS Style Sheet Design tokens: see src/qEmbyApp/tokens/DesignTokens.h + Color tokens: see src/qEmbyApp/tokens/ColorTokens.h Animation tokens: see src/qEmbyApp/tokens/AnimationTokens.h Border-radius scale: 2(kXs) 4(kSm) 6(kMd) 8(kLg) 14(kXl) Spacing scale: 4(kXs) 8(kSm) 12(kMd) 16(kLg) 24(kXl) Font scale: 10 11 12 13 14 16 20 24 28 - Color palette (Tailwind Light): + Color palette (Tailwind Light, Slate 系): Primary Blue: #3B82F6, Hover: #2563EB Danger Red: #EF4444, Hover: #DC2626 - Gray-800 (标题): #1F2937 - Gray-600 (正文): #4B5563 - Gray-500 (弱化): #6B7280 - Gray-200 (边框): #E5E7EB - Gray-50 (背景): #F9FAFB + Success Green: #22C55E (the only green) + Slate-900 (最深标题): #0F172A + Slate-800 (标题): #1E293B + Slate-700 (深正文): #334155 + Slate-600 (正文): #475569 + Slate-500 (弱化): #64748B + Slate-400 (占位符): #94A3B8 + Slate-300 (深边框): #CBD5E1 + Slate-200 (边框): #E2E8F0 + Slate-100 (浅底): #F1F5F9 + Slate-50 (背景): #F8FAFC + 蓝色底三档: #EFF6FF(Blue-50) #DBEAFE(Blue-100) #F8FAFC(近白) + 禁止使用 Tailwind Gray/Zinc 或手调近似色。 ========================================================= */ /* ========================================= @@ -94,7 +103,7 @@ QWK--WindowBar>QLabel#win-title-slot, QWK--WindowBar QLabel#win-title-label { padding: 0; border: none; - color: #1F2937; + color: #1E293B; background-color: transparent; min-height: 32px; font-size: 14px; @@ -105,10 +114,10 @@ QWK--WindowBar QLabel#win-title-label { QLabel#mac-title-label { padding: 0; border: none; - color: #1F2937; + color: #1E293B; background-color: transparent; min-height: 32px; - font-size: 15px; + font-size: 14px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -118,20 +127,20 @@ QLabel#mac-title-label { ========================================= */ /* 标题栏居中全局搜索框 */ QLineEdit#titlebar-search { - background-color: #F3F4F6; + background-color: #F1F5F9; border: 1px solid transparent; - border-radius: 16px; + border-radius: 14px; /* 32px 高度对应的完美胶囊圆角 */ padding: 0px 18px 0px 8px; /* 右侧留白防止文字遮挡清空按钮 */ font-size: 13px; font-weight: 500; - color: #1F2937; + color: #1E293B; margin: 0; } QLineEdit#titlebar-search:hover { - background-color: #E5E7EB; + background-color: #E2E8F0; /* 悬浮微量加深 */ } @@ -144,19 +153,19 @@ QLineEdit#titlebar-search:focus { /* 侧边栏内部搜索框 */ QLineEdit#sidebar-search { - background-color: #F3F4F6; + background-color: #F1F5F9; border: 1px solid transparent; border-radius: 8px; /* 圆角配合现代卡片风格 */ padding: 6px 10px; font-size: 13px; font-weight: 500; - color: #1F2937; + color: #1E293B; min-height: 20px; } QLineEdit#sidebar-search:hover { - background-color: #E5E7EB; + background-color: #E2E8F0; } QLineEdit#sidebar-search:focus { @@ -171,7 +180,7 @@ QFrame#SearchHistoryPopup { QFrame#SearchHistoryPopupCard { background-color: #FFFFFF; - border: 1px solid #E4EBF3; + border: 1px solid #E2E8F0; border-radius: 14px; } @@ -182,7 +191,7 @@ QWidget#SearchHistoryPopupHeader { } QFrame#SearchHistoryHeaderDivider { - background-color: #E7EDF5; + background-color: #E2E8F0; border: none; } @@ -201,14 +210,14 @@ QScrollArea#SearchHistoryScrollArea QScrollBar:vertical { } QScrollArea#SearchHistoryScrollArea QScrollBar::handle:vertical { - background-color: #D1DDED; + background-color: #CBD5E1; border: none; border-radius: 2px; min-height: 28px; } QScrollArea#SearchHistoryScrollArea QScrollBar::handle:vertical:hover { - background-color: #BDD0E8; + background-color: #BFDBFE; } QScrollArea#SearchHistoryScrollArea QScrollBar::add-line:vertical, @@ -234,25 +243,25 @@ QToolButton#SearchHistoryExpandButton { QToolButton#SearchHistoryModeButton:hover, QToolButton#SearchHistoryClearButton:hover, QToolButton#SearchHistoryExpandButton:hover { - background-color: #F7FAFD; + background-color: #F8FAFC; } QToolButton#SearchHistoryModeButton:checked, QToolButton#SearchHistoryExpandButton:checked { - background-color: #EEF4FF; + background-color: #EFF6FF; } QToolButton#SearchHistoryModeButton:checked:hover, QToolButton#SearchHistoryExpandButton:checked:hover { - background-color: #E9F0FF; + background-color: #DBEAFE; } QToolButton#SearchHistoryClearButton[armed="true"] { - background-color: #FDEEEE; + background-color: #FEF2F2; } QToolButton#SearchHistoryClearButton[armed="true"]:hover { - background-color: #FCE4E4; + background-color: #FEE2E2; } QAbstractButton#SearchHistoryChip { @@ -264,7 +273,7 @@ QAbstractButton#SearchHistoryChip { QListView#SearchCompleterPopup, QListView#SearchHistoryCompleterPopup { background-color: #FFFFFF; - border: 1px solid #E4EBF3; + border: 1px solid #E2E8F0; border-radius: 14px; padding: 0px; outline: none; @@ -296,7 +305,7 @@ QListView#SearchHistoryCompleterPopup QScrollBar:vertical { QListView#SearchCompleterPopup QScrollBar::handle:vertical, QListView#SearchHistoryCompleterPopup QScrollBar::handle:vertical { - background-color: #D9E6F6; + background-color: #DBEAFE; border: none; border-radius: 4px; min-height: 34px; @@ -304,7 +313,7 @@ QListView#SearchHistoryCompleterPopup QScrollBar::handle:vertical { QListView#SearchCompleterPopup QScrollBar::handle:vertical:hover, QListView#SearchHistoryCompleterPopup QScrollBar::handle:vertical:hover { - background-color: #C7DBF7; + background-color: #BFDBFE; } QListView#SearchCompleterPopup QScrollBar::add-line:vertical, @@ -394,7 +403,7 @@ QWK--WindowBar QAbstractButton#close-button { QWK--WindowBar QAbstractButton#close-button:hover, QWK--WindowBar QAbstractButton#close-button:pressed { - background-color: #E81123; + background-color: #DC2626; qproperty-iconNormal: url(":/svg/close.svg"); } @@ -422,12 +431,12 @@ QMenuBar>QToolButton#qt_menubar_ext_button { QMenuBar>QToolButton#qt_menubar_ext_button:hover, QMenuBar>QToolButton#qt_menubar_ext_button:pressed, QMenuBar::item:selected { - background-color: #E5E7EB; + background-color: #E2E8F0; border-radius: 4px; } QMenuBar::item { - color: #4B5563; + color: #475569; border: none; padding: 6px 12px; margin: 2px; @@ -436,30 +445,30 @@ QMenuBar::item { QMenu { padding: 6px; background: #FFFFFF; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 8px; } QMenu::item { background: transparent; - color: #4B5563; + color: #475569; padding: 8px 24px 8px 12px; border-radius: 4px; margin: 2px 0px; } QMenu::item:selected { - background-color: #F3F4F6; - color: #1F2937; + background-color: #F1F5F9; + color: #1E293B; } QMenu::item:disabled { - color: #9CA3AF; + color: #94A3B8; } QMenu::separator { height: 1px; - background-color: #E5E7EB; + background-color: #E2E8F0; margin: 6px 0; } @@ -506,7 +515,7 @@ QMenu#AppTextContextMenu::icon { QLabel#login-title { font-size: 20px; font-weight: 700; - color: #1F2937; + color: #1E293B; margin-bottom: 5px; } @@ -575,22 +584,22 @@ QWidget#login-add-page QLabel#login-ssl-description { QWidget#server-card { background-color: #FFFFFF; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 14px; } QWidget#server-card:hover { - background-color: #F9FAFB; - border: 1px solid #D1D5DB; + background-color: #F8FAFC; + border: 1px solid #CBD5E1; } QLabel#server-name-label { font-weight: 700; - color: #1F2937; + color: #1E293B; } QLabel#server-url-label { - color: #6B7280; + color: #64748B; } QLabel#server-fallback-icon { @@ -603,14 +612,14 @@ QLabel#server-fallback-icon { QPushButton#action-edit-btn { qproperty-icon: url(":/svg/light/edit.svg"); qproperty-iconSize: 16px 16px; - background-color: #6B7280; + background-color: #64748B; border: none; border-radius: 6px; padding: 6px; } QPushButton#action-edit-btn:hover { - background-color: #4B5563; + background-color: #475569; } QPushButton#action-del-btn { @@ -647,11 +656,11 @@ QPushButton#add-server-btn:hover { QLineEdit, QComboBox { background-color: #FFFFFF; - border: 1px solid #D1D5DB; + border: 1px solid #CBD5E1; border-radius: 6px; padding: 8px 12px; font-size: 14px; - color: #1F2937; + color: #1E293B; min-height: 22px; selection-background-color: #93C5FD; selection-color: #0F172A; @@ -675,7 +684,7 @@ QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 28px; - border-left: 1px solid #E5E7EB; + border-left: 1px solid #E2E8F0; border-top-right-radius: 6px; border-bottom-right-radius: 6px; background-color: transparent; @@ -688,7 +697,7 @@ QComboBox::down-arrow { } QComboBox QAbstractItemView { - border: 1px solid #D1D5DB; + border: 1px solid #CBD5E1; border-radius: 8px; background-color: #FFFFFF; selection-background-color: #EFF6FF; @@ -700,7 +709,7 @@ QComboBox QAbstractItemView { QComboBox QAbstractItemView::item { min-height: 28px; padding-left: 8px; - color: #4B5563; + color: #475569; border-radius: 4px; border: none; } @@ -782,13 +791,13 @@ QWidget#login-add-page ModernComboBox#login-protocol-combo QAbstractItemView::it QLabel#url-colon { font-size: 18px; font-weight: bold; - color: #6B7280; + color: #64748B; } QPushButton { background-color: #FFFFFF; - color: #4B5563; - border: 1px solid #D1D5DB; + color: #475569; + border: 1px solid #CBD5E1; border-radius: 6px; padding: 10px 16px; font-size: 14px; @@ -796,9 +805,9 @@ QPushButton { } QPushButton:hover { - background-color: #F9FAFB; - color: #1F2937; - border-color: #9CA3AF; + background-color: #F8FAFC; + color: #1E293B; + border-color: #94A3B8; } QWidget#login-add-page QPushButton { @@ -856,14 +865,14 @@ QPushButton#password-toggle-btn { } QPushButton#password-toggle-btn:hover { - background-color: #F3F4F6; - border: 1px solid #E5E7EB; + background-color: #F1F5F9; + border: 1px solid #E2E8F0; } QLabel#app-version-label { font-size: 11px; font-weight: 500; - color: #9CA3AF; + color: #94A3B8; letter-spacing: 0.5px; } @@ -1015,13 +1024,13 @@ QLabel#ProxyDialogTestStatus[status="pending"] { ModernDialogBase, ModernMessageBox { background-color: #FFFFFF; - border: 1px solid #D1D5DB; + border: 1px solid #CBD5E1; /* 如果开启了 Win11 原生圆角,边框将被裁剪,对低版本系统起到兜底作用 */ } QWidget[playerDialogSurface="true"] { background-color: rgba(255, 255, 255, 0.96); - border: 1px solid #D1D5DB; + border: 1px solid #CBD5E1; border-radius: 14px; } @@ -1033,7 +1042,7 @@ QWidget#dialog-titlebar { QLabel#dialog-title { font-size: 14px; font-weight: 700; - color: #1F2937; + color: #1E293B; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -1054,14 +1063,14 @@ QPushButton#dialog-close-btn { QWK--WindowButton#dialog-close-btn:hover, QPushButton#dialog-close-btn:hover { - background-color: #E81123; + background-color: #DC2626; qproperty-iconNormal: url(":/svg/close.svg"); /* 悬停切换为纯白 SVG */ } QWK--WindowButton#dialog-close-btn:pressed, QPushButton#dialog-close-btn:pressed { - background-color: #F1707A; + background-color: #EF4444; } /* PlayerOverlayDialog 内置对话框关闭按钮:右上角圆角匹配 surface 圆角 */ @@ -1075,7 +1084,7 @@ QWidget[playerDialogSurface="true"] QPushButton#dialog-close-btn:hover { QLabel#dialog-text { font-size: 14px; - color: #4B5563; + color: #475569; line-height: 1.5; padding-top: 4px; } @@ -1267,7 +1276,7 @@ QWidget#playerDanmakuSettingsDialog { #playerDanmakuSettingsDialog QFrame#playerDanmakuInputTile QFrame#TagInputContainer { background-color: rgba(255, 255, 255, 0.72); border: 1px solid rgba(148, 163, 184, 0.28); - border-radius: 10px; + border-radius: 8px; } #playerDanmakuSettingsDialog QFrame#playerDanmakuInputTile QFrame#TagInputContainer:focus-within { @@ -1370,7 +1379,7 @@ QWidget#playerSubtitleSettingsDialog { #playerSubtitleSettingsDialog ModernComboBox#playerSubtitleFontCombo { background-color: #FFFFFF; border: 1px solid #CBD5E1; - border-radius: 10px; + border-radius: 8px; color: #1E293B; font-size: 13px; font-weight: 500; @@ -1475,7 +1484,7 @@ QWidget#modernComboEmbeddedOverlay { QFrame#modernComboEmbeddedFrame { background-color: #1E293B; border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 10px; + border-radius: 8px; padding: 3px; } @@ -1547,26 +1556,26 @@ QWidget#home-content { QLabel#home-welcome-label { font-size: 20px; - color: #9CA3AF; + color: #94A3B8; font-weight: 600; } /* 侧边栏本体,纯白质感,配合外层阴影更加立体 */ QWidget#floating-sidebar { background-color: #FFFFFF; - border-right: 1px solid #E5E7EB; + border-right: 1px solid #E2E8F0; } QWidget#floating-sidebar[pinned="true"][sidebarSide="left"] { background-color: #F1F5F9; - border-right: 1px solid #E5E7EB; + border-right: 1px solid #E2E8F0; border-left: none; border-radius: 0px; } QWidget#floating-sidebar[pinned="true"][sidebarSide="right"] { background-color: #F1F5F9; - border-left: 1px solid #E5E7EB; + border-left: 1px solid #E2E8F0; border-right: none; border-radius: 0px; } @@ -1577,21 +1586,21 @@ QWidget#floating-sidebar[pinned="true"] QLineEdit#sidebar-search { /* 侧边栏专属 QLabel 样式 */ QLabel#sidebar-server-name { - font-size: 15px; + font-size: 14px; font-weight: 700; - color: #111827; + color: #0F172A; /* 更深的颜色,突出层级 */ } QLabel#sidebar-server-address { font-size: 11px; - color: #9CA3AF; + color: #94A3B8; } QLabel#sidebar-user-name { font-size: 13px; font-weight: 600; - color: #4B5563; + color: #475569; } QWidget#floating-sidebar[pinned="true"] QLabel#sidebar-user-name { @@ -1614,7 +1623,7 @@ QPushButton#sidebar-icon-btn:pressed { } QLabel#sidebar-title { - color: #6B7280; + color: #64748B; /* Tailwind Gray 500 */ font-size: 12px; font-weight: 700; @@ -1625,8 +1634,8 @@ QLabel#sidebar-title { /* 沉浸式水痕隐形分割线 - 【加深并增加留白】 */ QFrame#sidebar-sep { - background-color: #E5E7EB; - /* 从 #F3F4F6 加深到 Gray-200 */ + background-color: #E2E8F0; + /* 从 #F1F5F9 加深到 Gray-200 */ max-height: 1px; min-height: 1px; margin: 6px 0px; @@ -1637,7 +1646,7 @@ QFrame#sidebar-sep { QPushButton#sidebar-btn, QPushButton#sidebar-btn-danger { background-color: transparent; - color: #4B5563; + color: #475569; border: none; border-radius: 8px; padding: 8px 12px; @@ -1666,14 +1675,14 @@ QWidget#floating-sidebar[pinned="true"] QPushButton#sidebar-btn-danger::icon { /* 普通按钮悬停 - 【加深背景】 */ QPushButton#sidebar-btn:hover { - background-color: #E5E7EB; - /* 从 #F3F4F6 加深到 Gray-200 */ - color: #111827; + background-color: #E2E8F0; + /* 从 #F1F5F9 加深到 Gray-200 */ + color: #0F172A; } /* 普通按钮按下 - 【更深的点击态】 */ QPushButton#sidebar-btn:pressed { - background-color: #D1D5DB; + background-color: #CBD5E1; /* Gray-300 */ } @@ -1742,7 +1751,7 @@ QWidget#floating-sidebar[pinned="true"] QListWidget#sidebar-list QScrollBar::sub } QListWidget#sidebar-list::item { - color: #4B5563; + color: #475569; font-size: 14px; font-weight: 500; padding: 8px 12px; @@ -1757,9 +1766,9 @@ QWidget#floating-sidebar[pinned="true"] QListWidget#sidebar-list::item { /* 列表悬停 - 【同步加深】 */ QListWidget#sidebar-list::item:hover { - background-color: #E5E7EB; - /* 从 #F3F4F6 加深到 Gray-200 */ - color: #111827; + background-color: #E2E8F0; + /* 从 #F1F5F9 加深到 Gray-200 */ + color: #0F172A; } /* 列表选中 - 【大幅加深选中背景,强调层次】 */ @@ -1785,7 +1794,7 @@ QScrollArea#dashboard-scroll QScrollBar:vertical, QScrollArea#favorites-scroll QScrollBar:vertical, QScrollArea#overview-scroll QScrollBar:vertical, QScrollArea#SettingsScrollArea QScrollBar:vertical { - background: #F9FAFB; + background: #F8FAFC; border: none; width: 10px; margin: 0px; @@ -1844,7 +1853,7 @@ QScrollArea#overview-scroll QScrollBar::sub-page:vertical, QScrollArea#SettingsScrollArea QScrollBar::add-page:vertical, QScrollArea#SettingsScrollArea QScrollBar::sub-page:vertical { border: none; - background: #F9FAFB; + background: #F8FAFC; } QWidget#library-container { @@ -1857,30 +1866,30 @@ QWidget#media-card { } QWidget#media-card:hover { - background-color: #E5E7EB; + background-color: #E2E8F0; /* Tailwind Gray-200 悬停阴影反馈 */ } QLabel#poster-label { - background-color: #E5E7EB; + background-color: #E2E8F0; border-radius: 8px; } QLabel#title-label { font-size: 13px; font-weight: 600; - color: #1F2937; + color: #1E293B; } QLabel#year-label { font-size: 12px; - color: #6B7280; + color: #64748B; } QLabel#library-title { font-size: 24px; font-weight: 700; - color: #111827; + color: #0F172A; padding: 20px 20px 10px 20px; } @@ -1890,7 +1899,7 @@ QLabel#library-title { QLabel#dashboard-section-title { font-size: 20px; font-weight: 700; - color: #111827; + color: #0F172A; } /* 【新增】:Dashboard "查看全部" 浮动按钮,彻底脱离硬编码 */ @@ -1910,8 +1919,8 @@ QPushButton#dashboard-see-all-btn:hover { QLabel#dashboard-placeholder { font-size: 14px; - color: #9CA3AF; - background-color: #E5E7EB; + color: #94A3B8; + background-color: #E2E8F0; border-radius: 8px; padding: 40px; qproperty-alignment: AlignCenter; @@ -1929,24 +1938,24 @@ QPushButton#library-tab-btn, QPushButton#modern-sort-btn { background-color: transparent; border: 1px solid transparent; - border-radius: 16px; + border-radius: 14px; /* 统一的 16px 胶囊圆角 */ padding: 6px 16px; font-size: 14px; font-weight: 600; - color: #6B7280; + color: #64748B; text-align: center; } QPushButton#library-tab-btn:hover, QPushButton#modern-sort-btn:hover { - background-color: #E5E7EB; - color: #1F2937; + background-color: #E2E8F0; + color: #1E293B; } /* 选项卡选中状态的强视觉反馈 (深色背景,现代流媒体常见) */ QPushButton#library-tab-btn:checked { - background-color: #1F2937; + background-color: #1E293B; color: #FFFFFF; } @@ -1962,13 +1971,13 @@ QPushButton#modern-sort-btn::menu-indicator { QPushButton#icon-action-btn { background-color: transparent; border: none; - border-radius: 16px; + border-radius: 14px; /* 搭配 32x32 的宽高,就是完美的圆形 */ padding: 6px; } QPushButton#icon-action-btn:hover { - background-color: #E5E7EB; + background-color: #E2E8F0; } /* ========================================= @@ -1993,14 +2002,14 @@ QPushButton#refresh-btn { } QPushButton#refresh-btn:hover { - background-color: #E5E7EB; + background-color: #E2E8F0; } QLabel#library-stats-label { font-size: 13px; font-weight: 500; - color: #6B7280; + color: #64748B; } /* ========================================= @@ -2011,7 +2020,7 @@ QWidget#dashboard-view, QWidget#favorites-view, QWidget#library-view, QStackedWidget#main-view-stack { - background-color: #F9FAFB; + background-color: #F8FAFC; } /* ========================================= @@ -2055,7 +2064,7 @@ QPushButton#gallery-nav-btn:pressed { /* ---- 查看全部按钮样式 ---- */ QPushButton#section-more-btn { background: transparent; - color: #0078D7; + color: #2563EB; /* 经典强调色,或替换为系统的 Primary Color */ font-size: 14px; font-weight: 500; @@ -2066,7 +2075,7 @@ QPushButton#section-more-btn { QPushButton#section-more-btn:hover { background-color: rgba(0, 120, 215, 0.1); - color: #005A9E; + color: #1D4ED8; } QPushButton#section-more-btn:pressed { @@ -2081,14 +2090,14 @@ QPushButton#section-more-btn:pressed { QLabel#detail-title { font-size: 28px; font-weight: 800; - color: #111827; + color: #0F172A; letter-spacing: -0.2px; } QLabel#detail-series-title { - font-size: 26px; + font-size: 24px; font-weight: 800; - color: #111827; + color: #0F172A; letter-spacing: -0.2px; } @@ -2096,39 +2105,39 @@ QLabel#detail-meta { font-size: 13px; font-weight: 500; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; - color: #374151; + color: #334155; } QPushButton#detail-number-chip { padding: 2px 8px; - border-radius: 10px; + border-radius: 8px; border: 1px solid transparent; background-color: transparent; - color: #111827; + color: #0F172A; font-size: 12px; font-weight: 600; } QPushButton#detail-number-chip:hover { - background-color: #F3F4F6; - border-color: #D1D5DB; + background-color: #F1F5F9; + border-color: #CBD5E1; } QPushButton#detail-number-chip:pressed { - background-color: #E5E7EB; - border-color: #D1D5DB; + background-color: #E2E8F0; + border-color: #CBD5E1; } /* 去除斜体,采用中等强调 */ QLabel#detail-tagline { font-size: 14px; font-weight: 500; - color: #6B7280; + color: #64748B; } QLabel#detail-overview { font-size: 14px; - color: #374151; + color: #334155; line-height: 1.6; } @@ -2136,7 +2145,7 @@ QLabel#detail-overview { QLabel#detail-section-title { font-size: 20px; font-weight: 800; - color: #1F2937; + color: #1E293B; margin-bottom: 4px; } @@ -2168,8 +2177,8 @@ QPushButton#detail-fav-btn { } QPushButton#detail-fav-btn:hover { - background-color: #F3F4F6; - border-color: #D1D5DB; + background-color: #F1F5F9; + border-color: #CBD5E1; } QPushButton#detail-fav-btn[isFavorite="true"] { @@ -2178,8 +2187,8 @@ QPushButton#detail-fav-btn[isFavorite="true"] { } QPushButton#detail-fav-btn[isFavorite="true"]:hover { - background-color: #F3F4F6; - border-color: #D1D5DB; + background-color: #F1F5F9; + border-color: #CBD5E1; } QPushButton#detail-played-btn { @@ -2189,14 +2198,14 @@ QPushButton#detail-played-btn { padding: 0px; } QPushButton#detail-played-btn:hover { - background-color: #F3F4F6; - border-color: #D1D5DB; + background-color: #F1F5F9; + border-color: #CBD5E1; } /* 3. 药丸式标签 (Tags) - 缩小字号变得更精致 */ QPushButton#detail-genre-tag { - background-color: #F3F4F6; - color: #374151; + background-color: #F1F5F9; + color: #334155; font-size: 12px; /* 从 14px 降级到更精致的 12px */ font-weight: 600; @@ -2205,25 +2214,25 @@ QPushButton#detail-genre-tag { padding: 0px 12px; /* 固定标签高度,避免 macOS 按全局 QPushButton 内边距计算行高 */ border-radius: 14px; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; } QPushButton#detail-genre-tag:hover { - background-color: #E5E7EB; - color: #111827; + background-color: #E2E8F0; + color: #0F172A; } /* 4. 文件信息区 */ QLabel#detail-filepath { background-color: transparent; - color: #4B5563; + color: #475569; font-size: 13px; font-weight: 600; padding-left: 2px; } QLabel#detail-filemeta { - color: #6B7280; + color: #64748B; font-size: 13px; font-weight: 600; padding-top: 4px; @@ -2233,28 +2242,28 @@ QLabel#detail-filemeta { /* 5. 画廊卡片 */ QWidget#stream-card { background-color: #FFFFFF; - border: 1px solid #E5E7EB; - border-radius: 10px; + border: 1px solid #E2E8F0; + border-radius: 8px; } QWidget#stream-card QLabel#stream-type { - color: #1F2937; + color: #1E293B; font-size: 14px; font-weight: 800; background: transparent; border: none; padding-bottom: 6px; - border-bottom: 1px solid #F3F4F6; + border-bottom: 1px solid #F1F5F9; } QWidget#stream-card QLabel#stream-info-key { - color: #6B7280; + color: #64748B; font-size: 12px; font-weight: 600; } QWidget#stream-card QLabel#stream-info-value { - color: #111827; + color: #0F172A; font-size: 13px; font-weight: 500; } @@ -2265,7 +2274,7 @@ QComboBox#detail-version-combo { border-radius: 6px; padding: 6px 14px; font-weight: 500; - color: #111827; + color: #0F172A; } QComboBox#detail-version-combo::drop-down { @@ -2274,18 +2283,18 @@ QComboBox#detail-version-combo::drop-down { /* ---- DetailView 版本切换 ComboBox 样式 ---- */ QComboBox#detail-version-combo { - background-color: #F3F4F6; - border: 1px solid #E5E7EB; + background-color: #F1F5F9; + border: 1px solid #E2E8F0; border-radius: 6px; padding: 6px 30px 6px 12px; font-size: 13px; font-weight: 600; - color: #111827; + color: #0F172A; } QComboBox#detail-version-combo:hover { - background-color: #E5E7EB; - border-color: #D1D5DB; + background-color: #E2E8F0; + border-color: #CBD5E1; } QComboBox#detail-version-combo::drop-down { @@ -2306,9 +2315,9 @@ QComboBox#detail-version-combo::down-arrow { QComboBox#detail-version-combo QAbstractItemView { background-color: #FFFFFF; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 6px; - selection-background-color: #EBF5FF; + selection-background-color: #DBEAFE; selection-color: #1D4ED8; outline: none; padding: 4px; @@ -2323,23 +2332,23 @@ QComboBox#detail-version-combo QAbstractItemView::item { DetailContentWidget { /* baseColor: 纯白底色 */ qproperty-baseColor: #FFFFFF; - /* gradientColor: #F9FAFB (对应原代码中的 249, 250, 251) */ - qproperty-gradientColor: #F9FAFB; + /* gradientColor: #F8FAFC (对应原代码中的 249, 250, 251) */ + qproperty-gradientColor: #F8FAFC; } /* Media Card Delegate 映射变量 (Light) */ MediaCardThemeHelper#media-card-theme { - qproperty-hoverBg: #E5E7EB; + qproperty-hoverBg: #E2E8F0; /* Tailwind Gray-200 悬浮底色 */ qproperty-selectedBg: #DBEAFE; /* Tailwind Blue-100 选中底色 */ - qproperty-titleColor: #1F2937; + qproperty-titleColor: #1E293B; /* Tailwind Gray-800 标题文字 */ - qproperty-subTitleColor: #6B7280; + qproperty-subTitleColor: #64748B; /* Tailwind Gray-500 年份/角色文字 */ - qproperty-placeholderBg: #E5E7EB; + qproperty-placeholderBg: #E2E8F0; /* 图像未加载前的骨架屏背景 */ - qproperty-placeholderTextColor: #9CA3AF; + qproperty-placeholderTextColor: #94A3B8; /* No Image 的提示字 */ } @@ -2349,7 +2358,7 @@ MediaCardThemeHelper#media-card-theme { QLabel#detail-stream-info { font-size: 13px; font-weight: 600; - color: #4B5563; + color: #475569; /* Gray-600 */ background-color: transparent; padding: 4px 10px; @@ -2360,7 +2369,7 @@ QLabel#detail-stream-info { QLabel#detail-remaining-time { font-size: 13px; font-weight: 500; - color: #6B7280; + color: #64748B; /* Gray-500 弱化文本 */ } @@ -2368,7 +2377,7 @@ QLabel#detail-remaining-time { Overview Dialog (作品简介弹窗) ========================================= */ QLabel#overview-poster { - background-color: #E5E7EB; + background-color: #E2E8F0; border-radius: 8px; } @@ -2394,7 +2403,7 @@ QLabel#MediaImageEditSectionTitle { QLabel#MediaImageEditSideStatus { background-color: #FFFFFF; border: 1px solid rgba(59, 130, 246, 0.16); - border-radius: 10px; + border-radius: 8px; color: #475569; font-size: 12px; padding: 8px 10px; @@ -2407,18 +2416,18 @@ QLabel#MediaImageEditMetaText { } QLabel#identify-preview-label { - background-color: #E5E7EB; + background-color: #E2E8F0; border: 2px dashed transparent; border-radius: 8px; - color: #6B7280; + color: #64748B; font-size: 13px; font-weight: 600; padding: 16px; } QLabel#identify-preview-label[media-image-editor="true"] { - background-color: #EEF2F7; - border: 1px solid #D8E0EA; + background-color: #F1F5F9; + border: 1px solid #CBD5E1; border-radius: 14px; padding: 0px; } @@ -2432,7 +2441,7 @@ QLabel#identify-preview-label[drag-over="true"] { QLabel#overview-title { font-size: 24px; font-weight: 800; - color: #111827; + color: #0F172A; /* Gray-900 极深色标题 */ } @@ -2443,8 +2452,8 @@ QWidget#overview-scroll-content { } QLabel#overview-text { - font-size: 15px; - color: #4B5563; + font-size: 14px; + color: #475569; /* Gray-600 舒适正文灰 */ line-height: 1.8; /* 优化长文本阅读的行距 */ @@ -2546,7 +2555,7 @@ QPushButton#hud-back-btn:hover { } QPushButton#hud-close-btn:hover { - background-color: #E81123; + background-color: #DC2626; } QPushButton.player-hud-btn { @@ -2890,7 +2899,7 @@ QMenu#immersive-stream-menu { } QMenu#immersive-stream-menu::item { - color: #333333; + color: #334155; padding: 6px 28px 6px 14px; border-radius: 6px; font-size: 12px; @@ -2911,7 +2920,7 @@ QMenu#immersive-stream-menu[customItemHighlight="true"]::item { QMenu#immersive-stream-menu[customItemHighlight="true"]::item:selected { background: transparent; - color: #333333; + color: #334155; font-weight: 500; } @@ -2959,7 +2968,7 @@ QWidget#stream-menu-item[checked="true"] QLabel#stream-menu-line2 { } QLabel#stream-menu-line1 { - color: #333333; + color: #334155; font-size: 12px; font-weight: 500; background: transparent; @@ -2975,7 +2984,7 @@ QLabel#stream-menu-line2 { /* ========== 全局 ToolTip 极致美化 ========== */ QToolTip { background-color: rgba(250, 250, 252, 0.98); - color: #333333; + color: #334155; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 4px; padding: 4px 8px; @@ -3030,7 +3039,7 @@ QWidget#osdSeekMarker { QWidget#osdVolumePanel { background-color: rgba(15, 23, 42, 154); border: 1px solid rgba(255, 255, 255, 30); - border-radius: 10px; + border-radius: 8px; } QLabel#osdVolumeIconLabel { @@ -3123,7 +3132,7 @@ QWidget#modernMenuContainer { /* 完美对齐的按钮设计 */ QPushButton#modernMenuItemBtn { background-color: transparent; - color: #E0E0E0; + color: #E2E8F0; border: none; border-radius: 4px; /* 与 modernscrollpanel.cpp 中 kMenuItemMinHeight 同步, @@ -3188,7 +3197,7 @@ ModernToast { /* 描边:极其轻微的黑色轮廓,勾勒出组件边缘 */ border-radius: 6px; /* 圆角:保持与暗黑主题一致的物理形态 */ - color: #333333; + color: #334155; /* 字体颜色:使用深灰色而非纯黑,阅读更舒适、视觉更高级 */ } @@ -3198,7 +3207,7 @@ ModernToast { QMenu#media-action-menu { background-color: #FFFFFF; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 8px; padding: 6px 0px; } @@ -3211,7 +3220,7 @@ QMenu#media-action-menu::item { /* 固化内边距 */ border-radius: 4px; /* 提前预设好圆角 */ - color: #4B5563; + color: #475569; font-size: 13px; font-weight: 500; background-color: transparent; @@ -3219,15 +3228,15 @@ QMenu#media-action-menu::item { /* 菜单项悬浮/选中状态(仅改变颜色) */ QMenu#media-action-menu::item:selected { - background-color: #F3F4F6; + background-color: #F1F5F9; /* 浅灰悬浮底色 */ - color: #111827; + color: #0F172A; /* 文字颜色加深 */ } QMenu#media-action-menu::separator { height: 1px; - background-color: #F3F4F6; + background-color: #F1F5F9; margin: 4px 12px; } @@ -3287,7 +3296,7 @@ QLabel#AboutLinkLabel { margin-top: 10px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; /* 纷色分隔符 | 在亮色主题下显示为柔和灰色 */ - color: #9CA3AF; + color: #94A3B8; } /* 拦截并修饰 QLabel 内部的 a 标签富文本 */ @@ -3348,7 +3357,7 @@ QLabel#AboutThanksSubtitle { QFrame#AboutThanksCard { background-color: rgba(255, 255, 255, 0.72); border: 1px solid rgba(148, 163, 184, 0.28); - border-radius: 16px; + border-radius: 14px; } QFrame#AboutThanksCard:hover { @@ -3484,9 +3493,9 @@ QPushButton#AboutLicenseBtn:pressed { Settings Page 标题 (SettingsPageBase) ========================================= */ QLabel#SettingsPageTitle { - font-size: 22px; + font-size: 20px; font-weight: 800; - color: #111827; + color: #0F172A; /* Gray-900 深色标题 */ font-family: "Segoe UI", "Microsoft YaHei", sans-serif; letter-spacing: -0.3px; @@ -3845,7 +3854,7 @@ QLabel#SubtitleOptionSliderHint { QPushButton#TagChipInline { background-color: rgba(59, 130, 246, 0.12); border: none; - border-radius: 10px; + border-radius: 8px; color: #2563EB; font-size: 11px; font-weight: 600; @@ -3862,7 +3871,7 @@ QPushButton#TagChipInline:hover { QPushButton#TagChipSummary { background-color: rgba(148, 163, 184, 0.18); border: none; - border-radius: 10px; + border-radius: 8px; color: #475569; font-size: 11px; font-weight: 600; @@ -3939,7 +3948,7 @@ QMenu#TagPresetMenu::indicator { #UrlReplaceFrame { background: rgba(0, 0, 0, 0.018); border: 1px solid rgba(0, 0, 0, 0.06); - border-left: 3px solid #4A90D9; + border-left: 3px solid #3B82F6; border-radius: 14px; margin-left: 20px; } @@ -4036,14 +4045,14 @@ QLabel#SettingsSubTitle { ========================================== */ #modern-tray-menu { background-color: rgba(255, 255, 255, 248); - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; /* Tailwind Gray 200 */ border-radius: 8px; padding: 6px 0px; } #modern-tray-menu::item { - color: #374151; + color: #334155; /* Tailwind Gray 700 */ padding: 6px 32px 6px 14px; margin: 2px 6px; @@ -4060,7 +4069,7 @@ QLabel#SettingsSubTitle { #modern-tray-menu::separator { height: 1px; - background-color: #F3F4F6; + background-color: #F1F5F9; /* Tailwind Gray 100 */ margin: 4px 12px; } @@ -4091,7 +4100,7 @@ QLabel#SettingsSubTitle { /* 管理卡片标题 */ QLabel#ManageCardTitle { color: #0F172A; - font-size: 15px; + font-size: 16px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } @@ -4146,7 +4155,7 @@ QFrame#TranscodingCodecItem { } QFrame#TranscodingCodecItem[dragging="true"] { - background-color: #F8FBFF; + background-color: #EFF6FF; border: 1px solid rgba(59, 130, 246, 0.5); } @@ -4342,12 +4351,12 @@ QPushButton#ManageShutdownBtn:pressed { QFrame#NowPlayingCard { background-color: rgba(0, 0, 0, 0.03); border: 1px solid rgba(0, 0, 0, 0.08); - border-radius: 10px; + border-radius: 8px; } QLabel#NowPlayingImage { background-color: rgba(0, 0, 0, 0.06); - border-radius: 10px; + border-radius: 8px; border: none; } @@ -4444,7 +4453,7 @@ QListWidget#ManageLibraryList::item { QFrame#DanmakuServerListPanel { background-color: #FFFFFF; border: 1px solid #E2E8F0; - border-radius: 16px; + border-radius: 14px; } QListWidget#DanmakuServerList { @@ -4534,7 +4543,7 @@ QLabel#DanmakuServerCardMeta { QPushButton#DanmakuServerRemoveButton { background: transparent; border: none; - border-radius: 10px; + border-radius: 8px; padding: 0; } @@ -4561,7 +4570,7 @@ QPushButton#DanmakuServerRemoveButton[removable="false"]:pressed { QFrame#DanmakuServerEditorPanel { background-color: #FFFFFF; border: 1px solid #E2E8F0; - border-radius: 16px; + border-radius: 14px; } QLabel#DanmakuServerEditorTitle { @@ -4913,7 +4922,7 @@ QPushButton#PlaylistInlineCreateCancelBtn:hover { /* 路径列表 */ QListWidget#ManageLibPathList { - background-color: #FAFBFC; + background-color: #F8FAFC; border: 1px solid #E2E8F0; border-radius: 8px; color: #334155; @@ -5063,7 +5072,7 @@ QPushButton#FetcherArrowBtn { border: 1px solid #E2E8F0; border-radius: 4px; color: #64748B; - font-size: 9px; + font-size: 10px; padding: 0; } @@ -5266,7 +5275,7 @@ QComboBox#ManageLibComboBox:disabled::down-arrow { ═══════════════════════════════════════════════════════════════ */ QTreeWidget#ServerBrowserTree { - background-color: #FAFBFC; + background-color: #F8FAFC; border: 1px solid #E2E8F0; border-radius: 8px; padding: 6px; @@ -5376,7 +5385,7 @@ QProgressBar#ManageLibScanProgress::chunk { QPushButton#ManageLibCancelScanBtn { background-color: rgba(239, 68, 68, 0.08); border: 1px solid rgba(239, 68, 68, 0.25); - border-radius: 10px; + border-radius: 8px; qproperty-icon: url(":/svg/light/close.svg"); qproperty-iconSize: 10px 10px; } @@ -5421,7 +5430,7 @@ QLineEdit#TagInputInlineEdit { QPushButton#TagChipInline { background-color: rgba(59, 130, 246, 0.10); border: 1px solid rgba(59, 130, 246, 0.25); - border-radius: 10px; + border-radius: 8px; color: #2563EB; font-size: 11px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -5442,7 +5451,7 @@ QPushButton#TagChipInline:pressed { QPushButton#TagChipSummary { background-color: rgba(0, 0, 0, 0.04); border: 1px solid #CBD5E1; - border-radius: 10px; + border-radius: 8px; color: #64748B; font-size: 11px; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -5493,7 +5502,7 @@ QToolButton#TagInputMoreBtn:pressed { QFrame#TagPresetPopup { background-color: #FFFFFF; border: 1px solid #E2E8F0; - border-radius: 10px; + border-radius: 14px; } /* 弹出面板内搜索框:小巧精致 */ @@ -5938,7 +5947,7 @@ QLabel#UserEditSectionTitle { QWidget#UserEditSwitchRow { background-color: rgba(248, 250, 252, 0.82); border: 1px solid rgba(148, 163, 184, 0.14); - border-radius: 10px; + border-radius: 8px; } QWidget#UserEditSwitchRow:hover { @@ -5948,7 +5957,7 @@ QWidget#UserEditSwitchRow:hover { QWidget#UserEditFolderListContainer { background-color: rgba(248, 250, 252, 0.72); border: 1px solid rgba(148, 163, 184, 0.12); - border-radius: 10px; + border-radius: 8px; } QFrame#UserEditFooterBar { @@ -6022,7 +6031,7 @@ QLabel#TaskSummaryCaption { QLabel#TaskMetaBadge { background-color: rgba(59, 130, 246, 0.09); border: 1px solid rgba(59, 130, 246, 0.18); - border-radius: 10px; + border-radius: 8px; color: #1D4ED8; padding: 3px 10px; font-size: 11px; @@ -6032,7 +6041,7 @@ QLabel#TaskMetaBadge { QLabel#TaskMutedBadge { background-color: rgba(226, 232, 240, 0.82); border: 1px solid rgba(148, 163, 184, 0.22); - border-radius: 10px; + border-radius: 8px; color: #475569; padding: 3px 10px; font-size: 11px; @@ -6042,7 +6051,7 @@ QLabel#TaskMutedBadge { QWidget#TaskEditTriggerRow { background-color: rgba(248, 250, 252, 0.96); border: 1px solid rgba(100, 116, 139, 0.15); - border-radius: 10px; + border-radius: 8px; } QLabel#TaskTriggerMetaLabel { @@ -6053,7 +6062,7 @@ QLabel#TaskTriggerMetaLabel { QLabel#TaskReadOnlyBadge { background-color: rgba(245, 158, 11, 0.10); border: 1px solid rgba(245, 158, 11, 0.2); - border-radius: 10px; + border-radius: 8px; color: #B45309; padding: 3px 10px; font-size: 11px; @@ -6166,7 +6175,7 @@ QFrame#DownloadRecordRow:hover { QLabel#DownloadRecordIndex { background-color: rgba(59, 130, 246, 0.10); border: 1px solid rgba(59, 130, 246, 0.18); - border-radius: 10px; + border-radius: 8px; color: #2563EB; padding: 6px 0px; font-size: 11px; @@ -6186,7 +6195,7 @@ QLabel#DownloadRecordValue { } QLabel#DownloadRecordProgress { - border-radius: 10px; + border-radius: 8px; padding: 6px 10px; font-size: 11px; font-weight: 600; @@ -6237,7 +6246,7 @@ QLabel#DownloadLocationValue { QFrame#DownloadEmptyState { background-color: transparent; border: 1px dashed rgba(148, 163, 184, 0.20); - border-radius: 16px; + border-radius: 14px; } QLabel#DownloadEmptyIcon { @@ -6307,12 +6316,12 @@ QPushButton#DownloadIconButton:disabled { * 同时把内嵌 QLineEdit 调整到与登录页 EditServer 密码框一致的视觉密度。 * 应用策略使用 checkable QPushButton 渲染为分段按钮,避免原生 radio 圆点。 */ #webdav-sync-dialog QLabel { - color: #1F2937; + color: #1E293B; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; } #webdav-sync-dialog QRadioButton { - color: #1F2937; + color: #1E293B; font-size: 13px; spacing: 6px; } @@ -6323,9 +6332,9 @@ QPushButton#DownloadIconButton:disabled { border-radius: 6px; padding: 6px 10px; font-size: 13px; - color: #1F2937; + color: #1E293B; min-height: 18px; - placeholder-text-color: #9CA3AF; + placeholder-text-color: #94A3B8; selection-background-color: rgba(59, 130, 246, 0.20); selection-color: #1E3A8A; } @@ -6336,18 +6345,18 @@ QPushButton#DownloadIconButton:disabled { #webdav-sync-dialog QLineEdit:focus { border-color: #3B82F6; - background-color: #FAFCFF; + background-color: #F8FAFC; padding: 6px 10px; } QFrame#webdav-card { background-color: #FFFFFF; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 8px; } QLabel#webdav-card-title { - color: #1F2937; + color: #1E293B; font-size: 13px; font-weight: 700; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; @@ -6392,7 +6401,7 @@ QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"] { } QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"]:hover:!checked { - background-color: #EEF2FF; + background-color: #EFF6FF; color: #1E40AF; } @@ -6408,38 +6417,13 @@ QFrame#webdav-strategy-selector QPushButton[webdavStrategyOption="true"]:checked color: #1E40AF; } -/* 旧 QToolButton 密码切换样式保留:避免其他位置如有引用时不报错; - * 当前对话框已改用 QAction + eye/eye-off,下面规则不会被命中。 */ -QToolButton#webdav-visibility-toggle { - background-color: #FFFFFF; - border: 1px solid #CBD5E1; - border-radius: 6px; - padding: 4px 10px; - color: #475569; - font-size: 12px; - min-width: 56px; -} - -QToolButton#webdav-visibility-toggle:hover { - background-color: #F8FAFC; - border-color: #94A3B8; - color: #1F2937; -} - -QToolButton#webdav-visibility-toggle:pressed, -QToolButton#webdav-visibility-toggle:checked { - background-color: #EFF6FF; - border-color: #3B82F6; - color: #1E3A8A; -} - QTableView#webdav-snapshot-table { background-color: #FFFFFF; alternate-background-color: #F8FAFC; - border: 1px solid #E5E7EB; + border: 1px solid #E2E8F0; border-radius: 8px; - gridline-color: #EEF2F7; - color: #1F2937; + gridline-color: #F1F5F9; + color: #1E293B; font-size: 12px; selection-background-color: rgba(59, 130, 246, 0.18); selection-color: #1E3A8A; @@ -6468,8 +6452,8 @@ QTableView#webdav-snapshot-table QHeaderView::section { background-color: #F8FAFC; color: #475569; border: none; - border-right: 1px solid #E5E7EB; - border-bottom: 1px solid #E5E7EB; + border-right: 1px solid #E2E8F0; + border-bottom: 1px solid #E2E8F0; padding: 6px 10px; font-size: 12px; font-weight: 600; diff --git a/src/qEmbyApp/tokens/ColorTokens.h b/src/qEmbyApp/tokens/ColorTokens.h new file mode 100644 index 0000000..db70051 --- /dev/null +++ b/src/qEmbyApp/tokens/ColorTokens.h @@ -0,0 +1,125 @@ +#ifndef QEMBYAPP_COLOR_TOKENS_H +#define QEMBYAPP_COLOR_TOKENS_H + +#include + +// Palette scales mirror the Tailwind Slate/Blue values documented at the top +// of resources/qss/dark-style.qss and light-style.qss. C++ paint code should +// take colors from here instead of hardcoding hex literals so the two QSS +// themes and painted widgets stay in the same color system. +namespace ColorTokens { + +namespace Slate { + inline const QColor k50 {"#F8FAFC"}; + inline const QColor k100 {"#F1F5F9"}; + inline const QColor k200 {"#E2E8F0"}; + inline const QColor k300 {"#CBD5E1"}; + inline const QColor k400 {"#94A3B8"}; + inline const QColor k500 {"#64748B"}; + inline const QColor k600 {"#475569"}; + inline const QColor k700 {"#334155"}; + inline const QColor k800 {"#1E293B"}; + inline const QColor k900 {"#0F172A"}; + inline const QColor k950 {"#020617"}; +} + +namespace Blue { + inline const QColor k50 {"#EFF6FF"}; + inline const QColor k100 {"#DBEAFE"}; + inline const QColor k200 {"#BFDBFE"}; + inline const QColor k300 {"#93C5FD"}; + inline const QColor k400 {"#60A5FA"}; + inline const QColor k500 {"#3B82F6"}; + inline const QColor k600 {"#2563EB"}; + inline const QColor k700 {"#1D4ED8"}; + inline const QColor k800 {"#1E40AF"}; + inline const QColor k900 {"#1E3A8A"}; +} + +namespace Red { + inline const QColor k500 {"#EF4444"}; + inline const QColor k600 {"#DC2626"}; +} + +namespace Green { + inline const QColor k500 {"#22C55E"}; +} + +// Semantic roles per theme. Pick Dark/Light based on ThemeManager state. +namespace Dark { + inline const QColor kBgBase = Slate::k900; + inline const QColor kBgSurface = Slate::k800; + inline const QColor kBgRaised = Slate::k700; + inline const QColor kBorder = Slate::k700; + inline const QColor kBorderSoft = Slate::k600; + inline const QColor kTextPrimary = Slate::k100; + inline const QColor kTextBody = Slate::k300; + inline const QColor kTextMuted = Slate::k400; + inline const QColor kAccent = Blue::k500; + inline const QColor kAccentHover = Blue::k400; +} + +namespace Light { + inline const QColor kBgBase = Slate::k50; + inline const QColor kBgSurface = QColor("#FFFFFF"); + inline const QColor kBgRaised = Slate::k100; + inline const QColor kBorder = Slate::k200; + inline const QColor kBorderSoft = Slate::k300; + inline const QColor kTextPrimary = Slate::k800; + inline const QColor kTextBody = Slate::k600; + inline const QColor kTextMuted = Slate::k500; + inline const QColor kAccent = Blue::k500; + inline const QColor kAccentHover = Blue::k600; +} + +inline QColor withAlpha(QColor c, int alpha) +{ + c.setAlpha(alpha); + return c; +} + +inline QColor mix(const QColor &from, const QColor &to, qreal t) +{ + return QColor(qRound(from.red() + (to.red() - from.red()) * t), + qRound(from.green() + (to.green() - from.green()) * t), + qRound(from.blue() + (to.blue() - from.blue()) * t)); +} + +// Shared blue-tinted surface ramp for the search history chips and the +// search completer popup, so the same intensity level renders the same +// color in both components. Level 0 is a neutral Slate surface; level 3 +// is the strongest blue tint. +namespace SearchTint { + +struct Surface +{ + QColor bgTop; + QColor bgBottom; + QColor border; + QColor text; + QColor accent; +}; + +inline Surface surface(int level, bool dark) +{ + const qreal t = qBound(0, level, 3) / 3.0; + if (dark) + { + return {mix(Slate::k800, Blue::k800, t * 0.45), + mix(Slate::k900, Blue::k900, t * 0.45), + mix(Slate::k600, Blue::k400, t * 0.45), + mix(Slate::k300, Blue::k50, t), + mix(Slate::k400, Blue::k300, t)}; + } + return {mix(Slate::k50, Blue::k100, t * 0.75), + mix(Slate::k100, Blue::k200, t * 0.6), + mix(Slate::k200, Blue::k300, t * 0.6), + mix(Slate::k700, Blue::k800, t), + mix(Slate::k500, Blue::k600, t)}; +} + +} // namespace SearchTint + +} // namespace ColorTokens + +#endif // QEMBYAPP_COLOR_TOKENS_H diff --git a/src/qEmbyApp/views/admin/librarycard.cpp b/src/qEmbyApp/views/admin/librarycard.cpp index 2d6a592..2dcb929 100644 --- a/src/qEmbyApp/views/admin/librarycard.cpp +++ b/src/qEmbyApp/views/admin/librarycard.cpp @@ -2,6 +2,7 @@ #include "librarygrid.h" #include "../../components/libraryactionmenu.h" #include "../../managers/thememanager.h" +#include "../../tokens/ColorTokens.h" #include "../../utils/hoveranimator.h" #include "../../utils/tweenedvalue.h" @@ -156,23 +157,24 @@ void LibraryCard::paintEvent(QPaintEvent* event) int w = width(), h = height(); - QColor cardBg = isDark ? QColor(51, 65, 85, 140) : QColor(255, 255, 255, 245); - QColor border = isDark ? QColor(71, 85, 105, 100) : QColor(226, 232, 240); - QColor nameFg = isDark ? QColor("#F1F5F9") : QColor("#0F172A"); - QColor typeFg = isDark ? QColor("#94A3B8") : QColor("#64748B"); - const QColor accent("#3B82F6"); + using namespace ColorTokens; + QColor cardBg = isDark ? withAlpha(Slate::k700, 140) : withAlpha(Qt::white, 245); + QColor border = isDark ? withAlpha(Slate::k600, 100) : Slate::k200; + QColor nameFg = isDark ? Slate::k100 : Slate::k900; + QColor typeFg = isDark ? Slate::k400 : Slate::k500; + const QColor accent = Blue::k500; const qreal hp = m_hover->progress(); if (hp > 0.0 && !m_selected && !m_dragging) { - const QColor hoverBorder = isDark ? QColor(96, 165, 250, 190) : QColor(59, 130, 246, 190); - const QColor hoverBg = isDark ? QColor(51, 65, 85, 190) : QColor(255, 255, 255, 255); + const QColor hoverBorder = withAlpha(isDark ? Blue::k400 : Blue::k500, 190); + const QColor hoverBg = isDark ? withAlpha(Slate::k700, 190) : QColor(Qt::white); border = lerpColor(border, hoverBorder, hp); cardBg = lerpColor(cardBg, hoverBg, hp); } if (m_selected) { - cardBg = isDark ? QColor(30, 41, 59, 220) : QColor(239, 246, 255, 245); - border = isDark ? QColor(96, 165, 250, 220) : QColor(59, 130, 246, 220); + cardBg = isDark ? withAlpha(Slate::k800, 220) : withAlpha(Blue::k50, 245); + border = withAlpha(isDark ? Blue::k400 : Blue::k500, 220); } p.setPen(QPen(border, m_selected ? 2 : 1)); @@ -182,12 +184,12 @@ void LibraryCard::paintEvent(QPaintEvent* event) const QRectF badgeRect(w - 28, 10, 18, 18); p.setPen(QPen(m_selected ? accent - : (isDark ? QColor(100, 116, 139, 160) - : QColor(148, 163, 184, 180)), + : (isDark ? withAlpha(Slate::k500, 160) + : withAlpha(Slate::k400, 180)), 1.5)); p.setBrush(m_selected ? accent - : (isDark ? QColor(15, 23, 42, 180) - : QColor(255, 255, 255, 220))); + : (isDark ? withAlpha(Slate::k900, 180) + : withAlpha(Qt::white, 220))); p.drawEllipse(badgeRect); if (m_selected) { @@ -221,8 +223,8 @@ void LibraryCard::paintEvent(QPaintEvent* event) p.restore(); } else { QLinearGradient grad(imgRect.topLeft(), imgRect.bottomRight()); - grad.setColorAt(0, isDark ? QColor(30, 41, 59) : QColor(241, 245, 249)); - grad.setColorAt(1, isDark ? QColor(51, 65, 85) : QColor(226, 232, 240)); + grad.setColorAt(0, isDark ? Slate::k800 : Slate::k100); + grad.setColorAt(1, isDark ? Slate::k700 : Slate::k200); QPainterPath clipPath; clipPath.addRoundedRect(imgRect, 9, 9); p.save(); @@ -232,7 +234,7 @@ void LibraryCard::paintEvent(QPaintEvent* event) QFont iconFont = font(); iconFont.setPixelSize(32); p.setFont(iconFont); - p.setPen(isDark ? QColor(148, 163, 184, 80) : QColor(100, 116, 139, 80)); + p.setPen(withAlpha(isDark ? Slate::k400 : Slate::k500, 80)); p.drawText(imgRect, Qt::AlignCenter, "📁"); p.restore(); }