perf: smooth UI animations and reduce repaint overhead

Batch of performance and animation work: shared FadeHelper/MotionPrefs
primitives, hover animators, shadow pixmap caching, smooth scrolling,
seek time bubble, and widespread component repaint reductions.
This commit is contained in:
dela
2026-07-08 11:29:38 +08:00
parent 03bc33518c
commit ab1accc821
85 changed files with 2308 additions and 661 deletions
+74 -57
View File
@@ -1,13 +1,21 @@
/* =========================================================
全局基础设定 & Tailwind Dark 色板映射
Primary Blue: #3B82F6, Hover: #2563EB
Danger Red: #EF4444, Hover: #DC2626
Slate-900 (主背景): #0F172A
Slate-800 (卡片/侧边栏): #1E293B
Slate-700 (边框/悬浮): #334155
Slate-400 (次要文字): #94A3B8
Slate-300 (正文文字): #CBD5E1
Slate-50 (标题文字): #F8FAFC
qEmby Dark Theme — QSS Style Sheet
Design tokens: see src/qEmbyApp/tokens/DesignTokens.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 Dark):
Primary Blue: #3B82F6, Hover: #2563EB
Danger Red: #EF4444, Hover: #DC2626
Slate-900 (主背景): #0F172A
Slate-800 (卡片/侧边栏): #1E293B
Slate-700 (边框/悬浮): #334155
Slate-400 (次要文字): #94A3B8
Slate-300 (正文文字): #CBD5E1
Slate-50 (标题文字): #F8FAFC
========================================================= */
/* =========================================
@@ -252,7 +260,7 @@ QListView#SearchCompleterPopup,
QListView#SearchHistoryCompleterPopup {
background-color: #0F172A;
border: 1px solid rgba(148, 163, 184, 0.20);
border-radius: 20px;
border-radius: 14px;
padding: 0px;
outline: none;
}
@@ -450,7 +458,7 @@ QMenu::separator {
QMenu#AppTextContextMenu {
background-color: #0F172A;
border: 1px solid #334155;
border-radius: 12px;
border-radius: 14px;
padding: 8px 0px;
}
@@ -532,7 +540,7 @@ 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-radius: 12px;
border-radius: 14px;
}
QWidget#login-add-page QWidget#login-ssl-card:hover {
@@ -558,7 +566,7 @@ QWidget#login-add-page QLabel#login-ssl-description {
QWidget#server-card {
background-color: #1E293B;
border: 1px solid #334155;
border-radius: 12px;
border-radius: 14px;
}
QWidget#server-card:hover {
@@ -578,7 +586,7 @@ QLabel#server-url-label {
QLabel#server-fallback-icon {
background-color: #1E3A8A;
color: #60A5FA;
border-radius: 20px;
border-radius: 14px;
font-weight: bold;
}
@@ -613,7 +621,7 @@ QPushButton#add-server-btn {
qproperty-iconSize: 16px 16px;
background-color: transparent;
border: 2px dashed #334155;
border-radius: 12px;
border-radius: 14px;
color: #60A5FA;
font-size: 14px;
font-weight: 600;
@@ -999,7 +1007,7 @@ ModernMessageBox {
QWidget[playerDialogSurface="true"] {
background-color: rgba(15, 23, 42, 0.94);
border: 1px solid rgba(71, 85, 105, 0.88);
border-radius: 18px;
border-radius: 14px;
}
QWidget#dialog-titlebar {
@@ -1168,7 +1176,7 @@ QWidget#playerDanmakuSettingsDialog {
}
#playerDanmakuSettingsDialog QLabel#playerDanmakuTileIcon[compactIcon="true"] {
border-radius: 11px;
border-radius: 14px;
}
#playerDanmakuSettingsDialog QLabel#playerDanmakuTileTitle {
@@ -1489,7 +1497,7 @@ QListWidget#modernComboEmbeddedList QScrollBar:vertical {
QListWidget#modernComboEmbeddedList QScrollBar::handle:vertical {
background-color: rgba(255, 255, 255, 0.15);
border-radius: 3px;
border-radius: 4px;
min-height: 30px;
}
@@ -2312,7 +2320,7 @@ QLabel#identify-preview-label {
QLabel#identify-preview-label[media-image-editor="true"] {
background-color: rgba(15, 23, 42, 0.84);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
border-radius: 14px;
padding: 0px;
}
@@ -2377,13 +2385,13 @@ QProgressBar#detail-progress-bar {
background-color: rgba(255, 255, 255, 0.12);
border: 1px solid transparent;
/* 核心:用透明边框强制覆盖原生样式引擎 */
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#detail-progress-bar::chunk {
background-color: #3B82F6;
/* 如果你要苹果绿,请替换为 #30D158 */
border-radius: 1px;
border-radius: 2px;
}
/* =========================================
@@ -2470,7 +2478,7 @@ QPushButton#hud-close-btn:hover {
QPushButton.player-hud-btn {
background: transparent;
border: none;
border-radius: 12px;
border-radius: 14px;
}
QPushButton.player-hud-btn:hover {
@@ -2516,7 +2524,7 @@ QPushButton#playerSpeedBtn {
/* 彻底抹除边框 */
outline: none;
/* 彻底抹除焦点虚线 */
border-radius: 12px;
border-radius: 14px;
padding: 0 10px;
}
@@ -2524,7 +2532,7 @@ QPushButton#playerMediaSwitchBtn {
min-width: 0px;
padding: 0px;
border: none;
border-radius: 12px;
border-radius: 14px;
}
QPushButton#playerMediaSwitchBtn:hover {
@@ -2749,7 +2757,7 @@ QPushButton#immersive-stream-btn {
border: none;
padding: 4px 10px;
/* 【调优】上下内边距收紧,打造细长的精致胶囊 */
border-radius: 5px;
border-radius: 6px;
/* 圆角微调,配合更小的高度 */
text-align: left;
}
@@ -2774,7 +2782,7 @@ QLineEdit#detail-episode-jump-edit {
font-weight: 500;
border: none;
padding: 4px 8px;
border-radius: 5px;
border-radius: 6px;
selection-background-color: rgba(59, 130, 246, 0.55);
selection-color: #FFFFFF;
}
@@ -2814,7 +2822,7 @@ QMenu#immersive-stream-menu {
QMenu#immersive-stream-menu::item {
color: #E0E0E0;
padding: 6px 28px 6px 14px;
border-radius: 5px;
border-radius: 6px;
font-size: 12px;
}
@@ -2850,7 +2858,7 @@ QWidget#stream-menu-item-host {
QWidget#stream-menu-item {
background: transparent;
border-radius: 5px;
border-radius: 6px;
}
QWidget#stream-menu-item:hover,
@@ -2915,15 +2923,24 @@ QLabel#osdSeekTimeLabel {
border: 1px solid rgba(255, 255, 255, 28);
}
/* 进度条悬停时间气泡(面板底色由 SeekTimeBubble 自绘) */
QLabel#seekBubbleTime {
background: transparent;
color: #F8FAFC;
font-family: "Segoe UI", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif;
font-size: 12px;
font-weight: 600;
}
QWidget#osdSeekStem {
background-color: rgba(96, 165, 250, 180);
border-radius: 1px;
border-radius: 2px;
}
QWidget#osdSeekMarker {
background-color: rgba(248, 250, 252, 220);
border: 1px solid rgba(96, 165, 250, 230);
border-radius: 3px;
border-radius: 4px;
}
QWidget#osdVolumePanel {
@@ -2961,7 +2978,7 @@ QLabel#osdVolumeLabel {
QWidget#playerMouseEdgeIndicator {
background-color: rgba(255, 255, 255, 18);
border: 1px solid rgba(255, 255, 255, 52);
border-radius: 22px;
border-radius: 14px;
}
QWidget#playerMouseEdgeIndicator[gestureActive="true"] {
@@ -3053,7 +3070,7 @@ QScrollBar#modernMenuScrollBar:vertical {
QScrollBar#modernMenuScrollBar::handle:vertical {
background: rgba(255, 255, 255, 0.45);
border-radius: 3px;
border-radius: 4px;
min-height: 28px;
/* 显式归零,覆盖全局规则的 margin: 0px 3px,否则会被压缩成 0 宽不可见 */
margin: 0px;
@@ -3155,7 +3172,7 @@ LoadingOverlay {
#SettingsCard {
background-color: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 12px;
border-radius: 14px;
}
#SettingsCard:hover {
@@ -3546,7 +3563,7 @@ QLineEdit#TagInputInlineEdit {
QToolButton#TagInputClearBtn {
background: transparent;
border: none;
border-radius: 3px;
border-radius: 4px;
qproperty-icon: url(":/svg/dark/close.svg");
qproperty-iconSize: 8px 8px;
}
@@ -3595,7 +3612,7 @@ QMenu#TagPresetMenu::indicator {
background: rgba(255, 255, 255, 0.025);
border: 1px solid rgba(255, 255, 255, 0.06);
border-left: 3px solid #3B82F6;
border-radius: 12px;
border-radius: 14px;
margin-left: 20px;
}
@@ -3801,7 +3818,7 @@ QLabel#AboutThanksAvatar {
color: #FFFFFF;
background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
stop:0 #F97316, stop:0.48 #DB2777, stop:1 #2563EB);
border-radius: 11px;
border-radius: 14px;
font-size: 10px;
font-weight: 700;
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
@@ -3965,7 +3982,7 @@ QLabel#SettingsPageTitle {
/* 左右宽阔的热区,保证不拥挤 */
margin: 2px 6px;
/* 【核心】:让 hover 高亮区不贴边,形成独立胶囊 */
border-radius: 5px;
border-radius: 6px;
/* 胶囊状内圆角 */
font-size: 13px;
}
@@ -3997,14 +4014,14 @@ QLabel#SettingsPageTitle {
#ManageInfoCard {
background-color: rgba(30, 41, 59, 0.5);
border: 1px solid rgba(71, 85, 105, 0.4);
border-radius: 12px;
border-radius: 14px;
padding: 20px;
}
#ManageActivityCard {
background-color: rgba(30, 41, 59, 0.5);
border: 1px solid rgba(71, 85, 105, 0.4);
border-radius: 12px;
border-radius: 14px;
padding: 0px;
}
@@ -4062,7 +4079,7 @@ QFrame#TranscodingGroupBlock,
QFrame#TranscodingCodecItem {
background-color: rgba(30, 41, 59, 0.6);
border: 1px solid rgba(71, 85, 105, 0.28);
border-radius: 12px;
border-radius: 14px;
}
QFrame#TranscodingCodecItem[dragging="true"] {
@@ -4295,12 +4312,12 @@ QProgressBar#NowPlayingProgressBar {
max-height: 2px;
background-color: rgba(255, 255, 255, 0.25);
border: 1px solid transparent;
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#NowPlayingProgressBar::chunk {
background-color: #3B82F6;
border-radius: 1px;
border-radius: 2px;
}
QLabel#NowPlayingUser {
@@ -4756,7 +4773,7 @@ QCheckBox#LibraryMetadataLockCheck::indicator:checked {
QLineEdit#PlaylistSearchEdit {
background-color: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.09);
border-radius: 7px;
border-radius: 6px;
color: #CBD5E1;
font-size: 12px;
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
@@ -5286,12 +5303,12 @@ QProgressBar#ManageLibScanProgress {
max-height: 2px;
background-color: rgba(255, 255, 255, 0.12);
border: 1px solid transparent;
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#ManageLibScanProgress::chunk {
background-color: #3B82F6;
border-radius: 1px;
border-radius: 2px;
}
/* 取消扫描按钮 */
@@ -5383,7 +5400,7 @@ QToolButton#TagInputClearBtn {
border: none;
qproperty-icon: url(:/svg/dark/close.svg);
qproperty-iconSize: 10px 10px;
border-radius: 5px;
border-radius: 6px;
}
QToolButton#TagInputClearBtn:hover {
@@ -5441,7 +5458,7 @@ QLineEdit#TagPresetSearchEdit:focus {
/* 弹出面板内复选框 */
QFrame#TagPresetOptionRow {
background-color: transparent;
border-radius: 5px;
border-radius: 6px;
}
QFrame#TagPresetOptionRow:hover {
@@ -5464,7 +5481,7 @@ QCheckBox#TagPresetCheckbox {
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
spacing: 8px;
padding: 3px 6px;
border-radius: 5px;
border-radius: 6px;
}
QCheckBox#TagPresetCheckbox:hover {
@@ -5606,7 +5623,7 @@ QPushButton#ManageTabBtn:checked:hover {
QFrame#ManageUserCard {
background-color: rgba(30, 41, 59, 0.5);
border: 1px solid rgba(71, 85, 105, 0.4);
border-radius: 12px;
border-radius: 14px;
}
QFrame#ManageUserCard:hover {
@@ -5618,7 +5635,7 @@ QFrame#ManageUserCard:hover {
QLabel#ManageUserAvatar {
background-color: rgba(59, 130, 246, 0.2);
border: 1px solid rgba(59, 130, 246, 0.35);
border-radius: 24px;
border-radius: 14px;
color: #93C5FD;
font-size: 18px;
font-weight: 700;
@@ -5813,7 +5830,7 @@ QPlainTextEdit#ManageLogViewer {
QFrame#UserEditNavCard {
background-color: rgba(30, 41, 59, 0.62);
border: 1px solid rgba(148, 163, 184, 0.12);
border-radius: 12px;
border-radius: 14px;
}
QTabBar#UserEditTabBar {
@@ -5846,7 +5863,7 @@ QTabBar#UserEditTabBar::tab:hover:!selected {
QFrame#UserEditSectionCard {
background-color: rgba(30, 41, 59, 0.58);
border: 1px solid rgba(148, 163, 184, 0.10);
border-radius: 12px;
border-radius: 14px;
}
QLabel#UserEditSectionTitle {
@@ -5875,7 +5892,7 @@ QWidget#UserEditFolderListContainer {
QFrame#UserEditFooterBar {
background-color: rgba(15, 23, 42, 0.78);
border: 1px solid rgba(148, 163, 184, 0.12);
border-radius: 12px;
border-radius: 14px;
}
/* UserEdit 滚动区 */
@@ -6056,7 +6073,7 @@ QScrollArea#DownloadRecordsArea QScrollBar:vertical {
QScrollArea#DownloadRecordsArea QScrollBar::handle:vertical {
background-color: rgba(148, 163, 184, 0.28);
border: none;
border-radius: 3px;
border-radius: 4px;
min-height: 28px;
}
@@ -6148,7 +6165,7 @@ QLabel#DownloadSectionTitle {
QLabel#DownloadLocationValue {
background-color: rgba(15, 23, 42, 0.52);
border: 1px solid rgba(100, 116, 139, 0.14);
border-radius: 12px;
border-radius: 14px;
color: #F8FAFC;
padding: 10px 12px;
font-size: 12px;
@@ -6180,7 +6197,7 @@ QLabel#DownloadEmptyHint {
QPushButton#DownloadIconButton {
background-color: rgba(15, 23, 42, 0.76);
border: 1px solid rgba(100, 116, 139, 0.24);
border-radius: 11px;
border-radius: 14px;
padding: 0px;
}
@@ -6252,7 +6269,7 @@ QPushButton#DownloadIconButton:disabled {
#webdav-sync-dialog QLineEdit {
background-color: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.10);
border-radius: 7px;
border-radius: 6px;
padding: 6px 10px;
font-size: 13px;
color: #F8FAFC;
+66 -49
View File
@@ -1,5 +1,13 @@
/* =========================================================
全局基础设定 & Tailwind 色板变量映射 (供参考)
qEmby Light Theme — QSS Style Sheet
Design tokens: see src/qEmbyApp/tokens/DesignTokens.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):
Primary Blue: #3B82F6, Hover: #2563EB
Danger Red: #EF4444, Hover: #DC2626
Gray-800 (标题): #1F2937
@@ -257,7 +265,7 @@ QListView#SearchCompleterPopup,
QListView#SearchHistoryCompleterPopup {
background-color: #FFFFFF;
border: 1px solid #E4EBF3;
border-radius: 20px;
border-radius: 14px;
padding: 0px;
outline: none;
}
@@ -458,7 +466,7 @@ QMenu::separator {
QMenu#AppTextContextMenu {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
padding: 8px 0px;
}
@@ -542,7 +550,7 @@ QWidget#login-add-page QLineEdit:focus {
QWidget#login-add-page QWidget#login-ssl-card {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
}
QWidget#login-add-page QWidget#login-ssl-card:hover {
@@ -568,7 +576,7 @@ QWidget#login-add-page QLabel#login-ssl-description {
QWidget#server-card {
background-color: #FFFFFF;
border: 1px solid #E5E7EB;
border-radius: 12px;
border-radius: 14px;
}
QWidget#server-card:hover {
@@ -588,7 +596,7 @@ QLabel#server-url-label {
QLabel#server-fallback-icon {
background-color: #EFF6FF;
color: #3B82F6;
border-radius: 20px;
border-radius: 14px;
font-weight: bold;
}
@@ -623,7 +631,7 @@ QPushButton#add-server-btn {
qproperty-iconSize: 16px 16px;
background-color: transparent;
border: 2px dashed #BFDBFE;
border-radius: 12px;
border-radius: 14px;
color: #3B82F6;
font-size: 14px;
font-weight: 600;
@@ -1014,7 +1022,7 @@ ModernMessageBox {
QWidget[playerDialogSurface="true"] {
background-color: rgba(255, 255, 255, 0.96);
border: 1px solid #D1D5DB;
border-radius: 18px;
border-radius: 14px;
}
QWidget#dialog-titlebar {
@@ -1190,7 +1198,7 @@ QWidget#playerDanmakuSettingsDialog {
}
#playerDanmakuSettingsDialog QLabel#playerDanmakuTileIcon[compactIcon="true"] {
border-radius: 11px;
border-radius: 14px;
}
#playerDanmakuSettingsDialog QLabel#playerDanmakuTileTitle {
@@ -1512,7 +1520,7 @@ QListWidget#modernComboEmbeddedList QScrollBar:vertical {
QListWidget#modernComboEmbeddedList QScrollBar::handle:vertical {
background-color: rgba(255, 255, 255, 0.15);
border-radius: 3px;
border-radius: 4px;
min-height: 30px;
}
@@ -2411,7 +2419,7 @@ QLabel#identify-preview-label {
QLabel#identify-preview-label[media-image-editor="true"] {
background-color: #EEF2F7;
border: 1px solid #D8E0EA;
border-radius: 12px;
border-radius: 14px;
padding: 0px;
}
@@ -2451,13 +2459,13 @@ QProgressBar#detail-progress-bar {
background-color: rgba(0, 0, 0, 0.12);
border: 1px solid transparent;
/* 核心:用透明边框强制覆盖原生样式引擎 */
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#detail-progress-bar::chunk {
background-color: #3B82F6;
/* 主题蓝 */
border-radius: 1px;
border-radius: 2px;
}
/* =========================================
@@ -2544,7 +2552,7 @@ QPushButton#hud-close-btn:hover {
QPushButton.player-hud-btn {
background: transparent;
border: none;
border-radius: 12px;
border-radius: 14px;
}
QPushButton.player-hud-btn:hover {
@@ -2590,7 +2598,7 @@ QPushButton#playerSpeedBtn {
/* 彻底抹除边框 */
outline: none;
/* 彻底抹除焦点虚线 */
border-radius: 12px;
border-radius: 14px;
padding: 0 10px;
}
@@ -2598,7 +2606,7 @@ QPushButton#playerMediaSwitchBtn {
min-width: 0px;
padding: 0px;
border: none;
border-radius: 12px;
border-radius: 14px;
}
QPushButton#playerMediaSwitchBtn:hover {
@@ -2822,7 +2830,7 @@ QPushButton#immersive-stream-btn {
border: none;
padding: 4px 10px;
/* 【调优】上下内边距收紧,打造细长的精致胶囊 */
border-radius: 5px;
border-radius: 6px;
text-align: left;
}
@@ -2846,7 +2854,7 @@ QLineEdit#detail-episode-jump-edit {
font-weight: 500;
border: none;
padding: 4px 8px;
border-radius: 5px;
border-radius: 6px;
selection-background-color: rgba(59, 130, 246, 0.22);
selection-color: #1D4ED8;
}
@@ -2884,7 +2892,7 @@ QMenu#immersive-stream-menu {
QMenu#immersive-stream-menu::item {
color: #333333;
padding: 6px 28px 6px 14px;
border-radius: 5px;
border-radius: 6px;
font-size: 12px;
}
@@ -2921,7 +2929,7 @@ QWidget#stream-menu-item-host {
QWidget#stream-menu-item {
background: transparent;
border: 1px solid transparent;
border-radius: 5px;
border-radius: 6px;
}
QWidget#stream-menu-item:hover {
@@ -2999,15 +3007,24 @@ QLabel#osdSeekTimeLabel {
border: 1px solid rgba(255, 255, 255, 28);
}
/* 进度条悬停时间气泡(播放器恒暗,与 dark 一致;面板底色由 SeekTimeBubble 自绘) */
QLabel#seekBubbleTime {
background: transparent;
color: #F8FAFC;
font-family: "Segoe UI", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif;
font-size: 12px;
font-weight: 600;
}
QWidget#osdSeekStem {
background-color: rgba(96, 165, 250, 180);
border-radius: 1px;
border-radius: 2px;
}
QWidget#osdSeekMarker {
background-color: rgba(248, 250, 252, 220);
border: 1px solid rgba(96, 165, 250, 230);
border-radius: 3px;
border-radius: 4px;
}
QWidget#osdVolumePanel {
@@ -3045,7 +3062,7 @@ QLabel#osdVolumeLabel {
QWidget#playerMouseEdgeIndicator {
background-color: rgba(255, 255, 255, 18);
border: 1px solid rgba(255, 255, 255, 52);
border-radius: 22px;
border-radius: 14px;
}
QWidget#playerMouseEdgeIndicator[gestureActive="true"] {
@@ -3140,7 +3157,7 @@ QScrollBar#modernMenuScrollBar:vertical {
QScrollBar#modernMenuScrollBar::handle:vertical {
background: rgba(255, 255, 255, 0.45);
border-radius: 3px;
border-radius: 4px;
min-height: 28px;
/* 显式归零,覆盖全局规则的 margin: 0px 3px,否则会被压缩成 0 宽不可见 */
margin: 0px;
@@ -3343,7 +3360,7 @@ QLabel#AboutThanksAvatar {
color: #FFFFFF;
background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
stop:0 #FB923C, stop:0.48 #DB2777, stop:1 #2563EB);
border-radius: 11px;
border-radius: 14px;
font-size: 10px;
font-weight: 700;
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
@@ -3488,7 +3505,7 @@ QLabel#SettingsPageTitle {
#SettingsCard {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
}
#SettingsCard:hover {
@@ -3874,7 +3891,7 @@ QLineEdit#TagInputInlineEdit {
QToolButton#TagInputClearBtn {
background: transparent;
border: none;
border-radius: 3px;
border-radius: 4px;
qproperty-icon: url(":/svg/light/close.svg");
qproperty-iconSize: 8px 8px;
}
@@ -3923,7 +3940,7 @@ QMenu#TagPresetMenu::indicator {
background: rgba(0, 0, 0, 0.018);
border: 1px solid rgba(0, 0, 0, 0.06);
border-left: 3px solid #4A90D9;
border-radius: 12px;
border-radius: 14px;
margin-left: 20px;
}
@@ -4030,7 +4047,7 @@ QLabel#SettingsSubTitle {
/* Tailwind Gray 700 */
padding: 6px 32px 6px 14px;
margin: 2px 6px;
border-radius: 5px;
border-radius: 6px;
font-size: 13px;
}
@@ -4060,14 +4077,14 @@ QLabel#SettingsSubTitle {
#ManageInfoCard {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
padding: 20px;
}
#ManageActivityCard {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
padding: 0px;
}
@@ -4125,7 +4142,7 @@ QFrame#TranscodingGroupBlock,
QFrame#TranscodingCodecItem {
background-color: #F8FAFC;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
}
QFrame#TranscodingCodecItem[dragging="true"] {
@@ -4358,12 +4375,12 @@ QProgressBar#NowPlayingProgressBar {
max-height: 2px;
background-color: rgba(0, 0, 0, 0.12);
border: 1px solid transparent;
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#NowPlayingProgressBar::chunk {
background-color: #3B82F6;
border-radius: 1px;
border-radius: 2px;
}
QLabel#NowPlayingUser {
@@ -4818,7 +4835,7 @@ QCheckBox#LibraryMetadataLockCheck::indicator:checked {
QLineEdit#PlaylistSearchEdit {
background-color: #F8FAFC;
border: 1px solid #E2E8F0;
border-radius: 7px;
border-radius: 6px;
color: #334155;
font-size: 12px;
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
@@ -5347,12 +5364,12 @@ QProgressBar#ManageLibScanProgress {
max-height: 2px;
background-color: rgba(0, 0, 0, 0.12);
border: 1px solid transparent;
border-radius: 1px;
border-radius: 2px;
}
QProgressBar#ManageLibScanProgress::chunk {
background-color: #3B82F6;
border-radius: 1px;
border-radius: 2px;
}
/* 取消扫描按钮 */
@@ -5444,7 +5461,7 @@ QToolButton#TagInputClearBtn {
border: none;
qproperty-icon: url(:/svg/light/close.svg);
qproperty-iconSize: 10px 10px;
border-radius: 5px;
border-radius: 6px;
}
QToolButton#TagInputClearBtn:hover {
@@ -5502,7 +5519,7 @@ QLineEdit#TagPresetSearchEdit:focus {
/* 弹出面板内复选框 */
QFrame#TagPresetOptionRow {
background-color: transparent;
border-radius: 5px;
border-radius: 6px;
}
QFrame#TagPresetOptionRow:hover {
@@ -5525,7 +5542,7 @@ QCheckBox#TagPresetCheckbox {
font-family: "Segoe UI", "Microsoft YaHei", sans-serif;
spacing: 8px;
padding: 3px 6px;
border-radius: 5px;
border-radius: 6px;
}
QCheckBox#TagPresetCheckbox:hover {
@@ -5667,7 +5684,7 @@ QPushButton#ManageTabBtn:checked:hover {
QFrame#ManageUserCard {
background-color: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
border-radius: 14px;
}
QFrame#ManageUserCard:hover {
@@ -5679,7 +5696,7 @@ QFrame#ManageUserCard:hover {
QLabel#ManageUserAvatar {
background-color: rgba(59, 130, 246, 0.1);
border: 1px solid rgba(59, 130, 246, 0.25);
border-radius: 24px;
border-radius: 14px;
color: #2563EB;
font-size: 18px;
font-weight: 700;
@@ -5875,7 +5892,7 @@ QPlainTextEdit#ManageLogViewer {
QFrame#UserEditNavCard {
background-color: rgba(248, 250, 252, 0.88);
border: 1px solid rgba(148, 163, 184, 0.14);
border-radius: 12px;
border-radius: 14px;
}
QTabBar#UserEditTabBar {
@@ -5908,7 +5925,7 @@ QTabBar#UserEditTabBar::tab:hover:!selected {
QFrame#UserEditSectionCard {
background-color: #FFFFFF;
border: 1px solid rgba(148, 163, 184, 0.14);
border-radius: 12px;
border-radius: 14px;
}
QLabel#UserEditSectionTitle {
@@ -5937,7 +5954,7 @@ QWidget#UserEditFolderListContainer {
QFrame#UserEditFooterBar {
background-color: rgba(255, 255, 255, 0.96);
border: 1px solid rgba(148, 163, 184, 0.16);
border-radius: 12px;
border-radius: 14px;
}
/* UserEdit 滚动区 */
@@ -6118,7 +6135,7 @@ QScrollArea#DownloadRecordsArea QScrollBar:vertical {
QScrollArea#DownloadRecordsArea QScrollBar::handle:vertical {
background-color: rgba(148, 163, 184, 0.42);
border: none;
border-radius: 3px;
border-radius: 4px;
min-height: 28px;
}
@@ -6210,7 +6227,7 @@ QLabel#DownloadSectionTitle {
QLabel#DownloadLocationValue {
background-color: rgba(248, 250, 252, 0.72);
border: 1px solid rgba(148, 163, 184, 0.10);
border-radius: 12px;
border-radius: 14px;
color: #0F172A;
padding: 10px 12px;
font-size: 12px;
@@ -6242,7 +6259,7 @@ QLabel#DownloadEmptyHint {
QPushButton#DownloadIconButton {
background-color: rgba(255, 255, 255, 0.92);
border: 1px solid rgba(148, 163, 184, 0.18);
border-radius: 11px;
border-radius: 14px;
padding: 0px;
}
@@ -6303,7 +6320,7 @@ QPushButton#DownloadIconButton:disabled {
#webdav-sync-dialog QLineEdit {
background-color: #FFFFFF;
border: 1px solid #CBD5E1;
border-radius: 7px;
border-radius: 6px;
padding: 6px 10px;
font-size: 13px;
color: #1F2937;