kpinquan commited on
Commit
eea9bca
·
verified ·
1 Parent(s): c7b62c3

Upload 5 files

Browse files
Files changed (5) hide show
  1. css/index.css +209 -0
  2. css/modals.css +214 -0
  3. css/player.css +395 -0
  4. css/styles.css +1029 -0
  5. css/watch.css +128 -0
css/index.css ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* 主页特定样式 */
2
+
3
+ /* 历史记录和设置按钮定位样式 */
4
+ .top-corner-button {
5
+ position: fixed;
6
+ z-index: 10;
7
+ background: #222;
8
+ border: 1px solid #333;
9
+ border-radius: 0.5rem;
10
+ padding: 0.375rem 0.75rem;
11
+ transition: all 0.2s ease;
12
+ }
13
+
14
+ .top-corner-button:hover {
15
+ background: #333;
16
+ border-color: white;
17
+ }
18
+
19
+ /* 搜索区域样式 */
20
+ .search-box {
21
+ height: 3.5rem;
22
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);
23
+ border-radius: 0.5rem;
24
+ overflow: hidden;
25
+ display: flex;
26
+ align-items: stretch;
27
+ }
28
+
29
+ .search-button {
30
+ width: 5rem;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ background: white;
35
+ color: black;
36
+ font-weight: 500;
37
+ transition: background-color 0.2s;
38
+ }
39
+
40
+ .search-button:hover {
41
+ background: #f0f0f0;
42
+ }
43
+
44
+ .search-input {
45
+ flex: 1;
46
+ background: #111;
47
+ border-top: 1px solid #333;
48
+ border-bottom: 1px solid #333;
49
+ color: white;
50
+ padding: 0 1.5rem;
51
+ font-size: 1rem;
52
+ outline: none;
53
+ transition: background-color 0.2s;
54
+ }
55
+
56
+ .search-input:focus {
57
+ background: #191919;
58
+ }
59
+
60
+ /* 最近搜索记录样式 */
61
+ .recent-search-tag {
62
+ display: inline-block;
63
+ padding: 0.25rem 0.75rem;
64
+ margin: 0.25rem;
65
+ background: rgba(59, 130, 246, 0.1);
66
+ border: 1px solid rgba(59, 130, 246, 0.2);
67
+ border-radius: 0.5rem;
68
+ color: #e5e7eb;
69
+ font-size: 0.875rem;
70
+ transition: all 0.2s;
71
+ }
72
+
73
+ .recent-search-tag:hover {
74
+ background: rgba(59, 130, 246, 0.2);
75
+ border-color: rgba(59, 130, 246, 0.4);
76
+ }
77
+
78
+ /* 豆瓣区域样式 */
79
+ .douban-container {
80
+ margin: 2rem auto;
81
+ max-width: 1280px;
82
+ padding: 0 0.5rem;
83
+ }
84
+
85
+ .douban-header {
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ margin-bottom: 1rem;
90
+ }
91
+
92
+ .douban-toggle {
93
+ display: flex;
94
+ align-items: center;
95
+ background: #222;
96
+ border-radius: 9999px;
97
+ padding: 0.25rem;
98
+ }
99
+
100
+ .douban-toggle-button {
101
+ padding: 0.25rem 0.75rem;
102
+ font-size: 0.875rem;
103
+ border-radius: 9999px;
104
+ }
105
+
106
+ .douban-toggle-button.active {
107
+ background: #db2777;
108
+ color: white;
109
+ }
110
+
111
+ .douban-toggle-button:not(.active) {
112
+ color: #9ca3af;
113
+ }
114
+
115
+ .douban-toggle-button:not(.active):hover {
116
+ color: white;
117
+ }
118
+
119
+ .douban-refresh-button {
120
+ font-size: 0.875rem;
121
+ padding: 0.25rem 0.75rem;
122
+ background: #db2777;
123
+ color: white;
124
+ border-radius: 0.5rem;
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.25rem;
128
+ }
129
+
130
+ .douban-refresh-button:hover {
131
+ background: #be185d;
132
+ }
133
+
134
+ .douban-tags-container {
135
+ overflow-x: auto;
136
+ padding-bottom: 0.5rem;
137
+ }
138
+
139
+ .douban-tags {
140
+ display: flex;
141
+ gap: 0.5rem;
142
+ min-width: max-content;
143
+ }
144
+
145
+ .douban-tag {
146
+ padding: 0.25rem 0.75rem;
147
+ background: rgba(219, 39, 119, 0.1);
148
+ border: 1px solid rgba(219, 39, 119, 0.2);
149
+ border-radius: 0.5rem;
150
+ color: #f9a8d4;
151
+ font-size: 0.875rem;
152
+ transition: all 0.2s;
153
+ }
154
+
155
+ .douban-tag:hover {
156
+ background: rgba(219, 39, 119, 0.2);
157
+ border-color: rgba(219, 39, 119, 0.4);
158
+ }
159
+
160
+ .douban-tag.active {
161
+ background: #db2777;
162
+ border-color: #db2777;
163
+ color: white;
164
+ }
165
+
166
+ /* 搜索结果样式 */
167
+ .search-results-container {
168
+ width: 100%;
169
+ max-width: 1280px;
170
+ margin: 0 auto;
171
+ padding: 0 0.5rem;
172
+ }
173
+
174
+ .search-result-stats {
175
+ text-align: right;
176
+ font-size: 0.875rem;
177
+ color: #9ca3af;
178
+ margin-bottom: 1rem;
179
+ }
180
+
181
+ /* 响应式网格布局 */
182
+ .search-results-grid {
183
+ display: grid;
184
+ gap: 1rem;
185
+ }
186
+
187
+ @media (max-width: 640px) {
188
+ .search-results-grid {
189
+ grid-template-columns: 1fr;
190
+ }
191
+ }
192
+
193
+ @media (min-width: 641px) and (max-width: 768px) {
194
+ .search-results-grid {
195
+ grid-template-columns: repeat(2, 1fr);
196
+ }
197
+ }
198
+
199
+ @media (min-width: 769px) and (max-width: 1024px) {
200
+ .search-results-grid {
201
+ grid-template-columns: repeat(3, 1fr);
202
+ }
203
+ }
204
+
205
+ @media (min-width: 1025px) {
206
+ .search-results-grid {
207
+ grid-template-columns: repeat(4, 1fr);
208
+ }
209
+ }
css/modals.css ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* 模态框通用样式 */
2
+ .modal-overlay {
3
+ position: fixed;
4
+ inset: 0;
5
+ background-color: rgba(0, 0, 0, 0.95);
6
+ display: none;
7
+ align-items: center;
8
+ justify-content: center;
9
+ z-index: 40;
10
+ transition: opacity 0.3s ease;
11
+ }
12
+
13
+ .modal-content {
14
+ background-color: #111;
15
+ padding: 2rem;
16
+ border-radius: 0.5rem;
17
+ border: 1px solid #333;
18
+ width: 91.666667%;
19
+ max-width: 56rem;
20
+ max-height: 90vh;
21
+ display: flex;
22
+ flex-direction: column;
23
+ }
24
+
25
+ .modal-header {
26
+ display: flex;
27
+ justify-content: space-between;
28
+ align-items: center;
29
+ margin-bottom: 1.5rem;
30
+ flex: none;
31
+ }
32
+
33
+ .modal-title {
34
+ font-size: 1.5rem;
35
+ font-weight: 700;
36
+ background: linear-gradient(to right, #00ccff, #ff3c78);
37
+ -webkit-background-clip: text;
38
+ -webkit-text-fill-color: transparent;
39
+ word-break: break-word;
40
+ padding-right: 1rem;
41
+ max-width: 80%;
42
+ }
43
+
44
+ .modal-close {
45
+ color: #9ca3af;
46
+ font-size: 1.5rem;
47
+ transition: color 0.2s;
48
+ flex-shrink: 0;
49
+ }
50
+
51
+ .modal-close:hover {
52
+ color: white;
53
+ }
54
+
55
+ .modal-body {
56
+ overflow: auto;
57
+ flex: 1;
58
+ min-height: 0;
59
+ }
60
+
61
+ /* 密码验证模态框 */
62
+ .password-modal {
63
+ z-index: 65;
64
+ }
65
+
66
+ .password-form {
67
+ margin-bottom: 1.5rem;
68
+ }
69
+
70
+ .password-input {
71
+ width: 100%;
72
+ background-color: #111;
73
+ border: 1px solid #333;
74
+ color: white;
75
+ padding: 1rem;
76
+ border-radius: 0.5rem;
77
+ margin-bottom: 1rem;
78
+ }
79
+
80
+ .password-input:focus {
81
+ outline: none;
82
+ border-color: white;
83
+ }
84
+
85
+ .password-submit {
86
+ width: 100%;
87
+ background-color: #3b82f6;
88
+ color: white;
89
+ padding: 0.5rem 1rem;
90
+ border-radius: 0.25rem;
91
+ font-weight: 500;
92
+ }
93
+
94
+ .password-submit:hover {
95
+ background-color: #2563eb;
96
+ }
97
+
98
+ .password-error {
99
+ color: #ef4444;
100
+ margin-top: 0.5rem;
101
+ display: none;
102
+ }
103
+
104
+ /* 声明模态框 */
105
+ .disclaimer-modal {
106
+ z-index: 60;
107
+ }
108
+
109
+ .disclaimer-content {
110
+ color: #d1d5db;
111
+ line-height: 1.5;
112
+ }
113
+
114
+ .disclaimer-content p {
115
+ margin-bottom: 1rem;
116
+ }
117
+
118
+ .disclaimer-content strong {
119
+ color: #60a5fa;
120
+ }
121
+
122
+ .disclaimer-button {
123
+ margin-top: 1.5rem;
124
+ padding: 0.75rem 1.5rem;
125
+ background: linear-gradient(to right, #4f46e5, #8b5cf6, #ec4899);
126
+ color: white;
127
+ font-weight: 600;
128
+ border-radius: 0.5rem;
129
+ transition: all 0.3s;
130
+ }
131
+
132
+ .disclaimer-button:hover {
133
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2);
134
+ transform: translateY(-1px);
135
+ }
136
+
137
+ /* Toast 和 Loading 提示 */
138
+ .toast {
139
+ position: fixed;
140
+ top: 1rem;
141
+ left: 50%;
142
+ transform: translateX(-50%) translateY(-100%);
143
+ background-color: #ef4444;
144
+ color: white;
145
+ padding: 0.75rem 1.5rem;
146
+ border-radius: 0.5rem;
147
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.3);
148
+ transition: all 0.3s;
149
+ opacity: 0;
150
+ z-index: 50;
151
+ }
152
+
153
+ .toast.show {
154
+ transform: translateX(-50%) translateY(0);
155
+ opacity: 1;
156
+ }
157
+
158
+ .loading-overlay {
159
+ position: fixed;
160
+ inset: 0;
161
+ background-color: rgba(0, 0, 0, 0.8);
162
+ display: none;
163
+ align-items: center;
164
+ justify-content: center;
165
+ z-index: 50;
166
+ }
167
+
168
+ .loading-content {
169
+ background-color: #111;
170
+ padding: 2rem;
171
+ border-radius: 0.5rem;
172
+ border: 1px solid #333;
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 1rem;
176
+ }
177
+
178
+ .loading-spinner {
179
+ width: 2rem;
180
+ height: 2rem;
181
+ border: 4px solid white;
182
+ border-top-color: transparent;
183
+ border-radius: 50%;
184
+ animation: spin 1s linear infinite;
185
+ }
186
+
187
+ @keyframes spin {
188
+ to { transform: rotate(360deg); }
189
+ }
190
+
191
+ .loading-text {
192
+ color: white;
193
+ font-size: 1.125rem;
194
+ }
195
+
196
+ /* 动画效果 */
197
+ @keyframes fadeIn {
198
+ from { opacity: 0; }
199
+ to { opacity: 1; }
200
+ }
201
+
202
+ @keyframes fadeOut {
203
+ from { opacity: 1; }
204
+ to { opacity: 0; }
205
+ }
206
+
207
+ .modal-overlay.show {
208
+ animation: fadeIn 0.3s forwards;
209
+ display: flex;
210
+ }
211
+
212
+ .modal-overlay.hide {
213
+ animation: fadeOut 0.3s forwards;
214
+ }
css/player.css ADDED
@@ -0,0 +1,395 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body, html {
2
+ margin: 0;
3
+ padding: 0;
4
+ width: 100%;
5
+ height: 100%;
6
+ background-color: #0f1622;
7
+ color: white;
8
+ padding-top: 37px;
9
+ }
10
+
11
+ /* Critical header and navigation styles */
12
+ .player-header {
13
+ position: relative;
14
+ z-index: 2147483647 !important;
15
+ pointer-events: auto !important;
16
+ }
17
+
18
+ .player-header-fixed {
19
+ position: fixed !important;
20
+ top: 0;
21
+ left: 0;
22
+ width: 100vw;
23
+ z-index: 9000 !important;
24
+ pointer-events: auto !important;
25
+ background: #111;
26
+ }
27
+
28
+ #homeButton {
29
+ pointer-events: auto !important;
30
+ }
31
+
32
+ .home-button {
33
+ background: none !important;
34
+ border: none !important;
35
+ padding: 0 !important;
36
+ }
37
+
38
+ /* Critical loading styles to prevent FOUC */
39
+ .player-placeholder {
40
+ width: 100% !important;
41
+ height: auto !important;
42
+ aspect-ratio: 16/9 !important;
43
+ background-color: #1f2937 !important;
44
+ position: relative !important;
45
+ display: block !important;
46
+ border-radius: 8px !important;
47
+ overflow: hidden !important;
48
+ }
49
+
50
+ .player-loading-container {
51
+ width: 100% !important;
52
+ height: 0 !important;
53
+ padding-bottom: 56.25% !important;
54
+ position: relative !important;
55
+ background-color: #1f2937 !important;
56
+ border-radius: 8px !important;
57
+ overflow: hidden !important;
58
+ display: block !important;
59
+ }
60
+
61
+ .player-loading-overlay {
62
+ position: absolute !important;
63
+ top: 0 !important;
64
+ left: 0 !important;
65
+ width: 100% !important;
66
+ height: 100% !important;
67
+ display: flex !important;
68
+ flex-direction: column !important;
69
+ align-items: center !important;
70
+ justify-content: center !important;
71
+ background-color: rgba(17, 24, 39, 0.7) !important;
72
+ }
73
+
74
+ .player-loading-spinner {
75
+ width: 48px !important;
76
+ height: 48px !important;
77
+ border: 4px solid rgba(255, 255, 255, 0.1) !important;
78
+ border-radius: 50% !important;
79
+ border-top-color: #f97316 !important;
80
+ position: relative !important;
81
+ margin-bottom: 16px !important;
82
+ animation: spin 1s linear infinite !important;
83
+ }
84
+
85
+ /* Critical styles for loading text */
86
+ .player-loading-text,
87
+ .player-loading-overlay div:nth-child(2),
88
+ div.player-loading-text {
89
+ display: block !important;
90
+ visibility: visible !important;
91
+ opacity: 1 !important;
92
+ color: #f9fafb !important;
93
+ font-size: 16px !important;
94
+ font-weight: 500 !important;
95
+ margin-bottom: 8px !important;
96
+ text-align: center !important;
97
+ font-family: system-ui, -apple-system, sans-serif !important;
98
+ line-height: 1.4 !important;
99
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important;
100
+ pointer-events: none !important;
101
+ z-index: 100 !important;
102
+ background: transparent !important;
103
+ max-width: 90% !important;
104
+ }
105
+
106
+ @keyframes player-spinner-rotate {
107
+ to { transform: rotate(360deg); }
108
+ }
109
+
110
+ @keyframes spin {
111
+ 0% { transform: rotate(0deg); }
112
+ 100% { transform: rotate(360deg); }
113
+ }
114
+
115
+ /* ArtPlayer specific styles */
116
+ .art-video-player, .art-video-player video {
117
+ width: 100% !important;
118
+ height: 100% !important;
119
+ min-height: 150px !important;
120
+ max-height: 100vh !important;
121
+ background: #000 !important;
122
+ object-fit: contain !important;
123
+ display: block !important;
124
+ }
125
+
126
+ /* Fix for Chrome-specific issues */
127
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
128
+ .art-video-player video {
129
+ transform: translateZ(0) !important;
130
+ will-change: transform !important;
131
+ }
132
+
133
+ /* Force visibility of video element */
134
+ .art-video-player.art-playing video {
135
+ visibility: visible !important;
136
+ opacity: 1 !important;
137
+ }
138
+ }
139
+
140
+ .player-container {
141
+ width: 100%;
142
+ max-width: 1000px;
143
+ margin: 0 auto;
144
+ }
145
+
146
+ #player {
147
+ width: 100%;
148
+ height: 60vh; /* 视频播放器高度 */
149
+ }
150
+
151
+ .loading-container {
152
+ position: absolute;
153
+ top: 0;
154
+ left: 0;
155
+ right: 0;
156
+ bottom: 0;
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ background-color: rgba(0, 0, 0, 0.7);
161
+ color: white;
162
+ z-index: 100;
163
+ flex-direction: column;
164
+ }
165
+
166
+ .loading-spinner {
167
+ width: 50px;
168
+ height: 50px;
169
+ border: 4px solid rgba(255, 255, 255, 0.3);
170
+ border-radius: 50%;
171
+ border-top-color: white;
172
+ animation: spin 1s ease-in-out infinite;
173
+ margin-bottom: 10px;
174
+ }
175
+
176
+ .error-container {
177
+ position: absolute;
178
+ top: 0;
179
+ left: 0;
180
+ right: 0;
181
+ bottom: 0;
182
+ display: none;
183
+ align-items: center;
184
+ justify-content: center;
185
+ background-color: rgba(0, 0, 0, 0.7);
186
+ color: white;
187
+ z-index: 100;
188
+ flex-direction: column;
189
+ text-align: center;
190
+ padding: 1rem;
191
+ }
192
+
193
+ .error-icon {
194
+ font-size: 48px;
195
+ margin-bottom: 10px;
196
+ }
197
+
198
+ .error-message-sub {
199
+ margin-top: 10px;
200
+ font-size: 14px;
201
+ color: #aaa;
202
+ }
203
+
204
+ .episode-active {
205
+ background-color: #3b82f6 !important;
206
+ border-color: #60a5fa !important;
207
+ }
208
+
209
+ .episode-grid {
210
+ max-height: 30vh;
211
+ overflow-y: auto;
212
+ }
213
+
214
+ /* 恢复播放位���提示样式 */
215
+ .position-restore-hint {
216
+ position: fixed;
217
+ bottom: 20px;
218
+ left: 50%;
219
+ transform: translateX(-50%) translateY(100%);
220
+ background-color: rgba(0, 0, 0, 0.8);
221
+ color: white;
222
+ padding: 10px 20px;
223
+ border-radius: 4px;
224
+ z-index: 1000;
225
+ transition: transform 0.3s ease;
226
+ font-size: 14px;
227
+ }
228
+
229
+ .position-restore-hint.show {
230
+ transform: translateX(-50%) translateY(0);
231
+ }
232
+
233
+ .hint-content {
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ }
238
+
239
+ .switch {
240
+ position: relative;
241
+ display: inline-block;
242
+ width: 46px;
243
+ height: 24px;
244
+ }
245
+
246
+ .switch input {
247
+ opacity: 0;
248
+ width: 0;
249
+ height: 0;
250
+ }
251
+
252
+ .slider {
253
+ position: absolute;
254
+ cursor: pointer;
255
+ top: 0;
256
+ left: 0;
257
+ right: 0;
258
+ bottom: 0;
259
+ background-color: #333;
260
+ transition: .4s;
261
+ border-radius: 24px;
262
+ }
263
+
264
+ .slider:before {
265
+ position: absolute;
266
+ content: "";
267
+ height: 18px;
268
+ width: 18px;
269
+ left: 3px;
270
+ bottom: 3px;
271
+ background-color: white;
272
+ transition: .4s;
273
+ border-radius: 50%;
274
+ }
275
+
276
+ input:checked + .slider {
277
+ background-color: #00ccff;
278
+ }
279
+
280
+ input:checked + .slider:before {
281
+ transform: translateX(22px);
282
+ }
283
+
284
+ /* 添加快捷键提示样式 */
285
+ .shortcut-hint {
286
+ position: fixed;
287
+ top: 50%;
288
+ left: 50%;
289
+ transform: translate(-50%, -50%);
290
+ background-color: rgba(0, 0, 0, 0.8);
291
+ color: white;
292
+ padding: 1rem 2rem;
293
+ border-radius: 0.5rem;
294
+ font-size: 1.5rem;
295
+ display: flex;
296
+ align-items: center;
297
+ gap: 0.5rem;
298
+ z-index: 1000;
299
+ opacity: 0;
300
+ transition: opacity 0.3s ease;
301
+ }
302
+
303
+ .shortcut-hint.show {
304
+ opacity: 1;
305
+ }
306
+
307
+ /* 原生全屏时,播放器容器铺满 */
308
+ .player-container:-webkit-full-screen,
309
+ .player-container:fullscreen {
310
+ position: fixed;
311
+ top: 0; left: 0;
312
+ width: 100vw; height: 100vh;
313
+ z-index: 10000;
314
+ background-color: #000;
315
+ }
316
+
317
+ .player-container:-webkit-full-screen #player,
318
+ .player-container:fullscreen #player {
319
+ width: 100%; height: 100%;
320
+ }
321
+
322
+ /* 资源信息卡片区 */
323
+ #resourceInfoBarContainer {
324
+ align-items: center;
325
+ border-radius: 0.5rem;
326
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
327
+ }
328
+
329
+ .resource-info-bar-left {
330
+ align-items: center;
331
+ font-size: 1.1rem;
332
+ font-weight: bold;
333
+ color: #fff;
334
+ flex: 1;
335
+ }
336
+
337
+ .resource-info-bar-videos {
338
+ font-size: 1rem;
339
+ font-weight: normal;
340
+ margin-left: 10px;
341
+ color: #ccc;
342
+ }
343
+
344
+ .resource-switch-btn {
345
+ align-items: center;
346
+ background: none;
347
+ border: none;
348
+ color: #a67c2d;
349
+ font-weight: bold;
350
+ font-size: 1rem;
351
+ cursor: pointer;
352
+ gap: 6px;
353
+ padding: 6px 12px;
354
+ border-radius: 0.5rem;
355
+ transition: background 0.2s;
356
+ }
357
+
358
+ .resource-switch-btn:hover {
359
+ background: #f5e9d7;
360
+ }
361
+
362
+ .resource-switch-btn:active {
363
+ background: #f5e9d7;
364
+ }
365
+
366
+ .resource-switch-icon {
367
+ width: 20px;
368
+ height: 20px;
369
+ margin-right: 0;
370
+ color: #a67c2d;
371
+ vertical-align: middle;
372
+ transition: transform 0.3s;
373
+ }
374
+
375
+ /* 新增:移动端响应式样式 */
376
+ @media (max-width: 640px) {
377
+ .episode-grid {
378
+ max-height: 40vh; /* 移动端增加集数列表高度 */
379
+ }
380
+
381
+ /* 改进移动端按钮显示 */
382
+ button {
383
+ white-space: nowrap;
384
+ }
385
+
386
+ /* 控制栏在小屏幕上可能需要换行 */
387
+ .player-container .flex-wrap {
388
+ margin-bottom: 4px;
389
+ }
390
+ }
391
+
392
+ /* 隐藏用户名输入框 */
393
+ #username {
394
+ display: none !important;
395
+ }
css/styles.css ADDED
@@ -0,0 +1,1029 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ LibreTV 全局样式
3
+ 包含多个页面共享的基础样式
4
+ 对于特定页面的样式,请参考:
5
+ - index.css: 首页特定样式
6
+ - player.css: 播放器页面特定样式
7
+ - watch.css: 重定向页面特定样式
8
+ - modals.css: 模态框和提示框样式
9
+ */
10
+
11
+ .close-btn {
12
+ position: absolute;
13
+ top: 12px;
14
+ right: 12px;
15
+ background: #222;
16
+ border: 1px solid #333;
17
+ border-radius: 8px;
18
+ padding: 6px;
19
+ color: white;
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ cursor: pointer;
24
+ transition: all 0.2s ease;
25
+ z-index: 10;
26
+ }
27
+
28
+ .close-btn:hover {
29
+ background: #333;
30
+ border-color: #555;
31
+ }
32
+
33
+ .close-btn svg {
34
+ width: 16px;
35
+ height: 16px;
36
+ stroke: currentColor;
37
+ }
38
+
39
+ :root {
40
+ /* 赛博影视主题配色方案 - 柔和版 */
41
+ --primary-color: #00ccff; /* 霓虹蓝主色调 */
42
+ --primary-light: #33d6ff; /* 浅霓虹蓝变体 */
43
+ --secondary-color: #0f1622; /* 深蓝黑背景色 */
44
+ --accent-color: #ff3c78; /* 霓虹粉强调色 */
45
+ --text-color: #e6f2ff; /* 柔和的蓝白色文本 */
46
+ --text-muted: #8599b2; /* 淡蓝灰色次级文本 */
47
+ --border-color: rgba(0, 204, 255, 0.15);
48
+ --page-gradient-start: #0f1622; /* 深蓝黑起始色 */
49
+ --page-gradient-end: #192231; /* 深靛蓝结束色 */
50
+ --card-gradient-start: #121b29; /* 卡片起始色 */
51
+ --card-gradient-end: #1c2939; /* 卡片结束色 */
52
+ --card-accent: rgba(0, 204, 255, 0.12); /* 霓虹蓝卡片强调色 */
53
+ --card-hover-border: rgba(0, 204, 255, 0.5); /* 悬停边框颜色 */
54
+ }
55
+
56
+ .page-bg {
57
+ background: linear-gradient(180deg, var(--page-gradient-start), var(--page-gradient-end));
58
+ min-height: 100vh;
59
+ /* 柔和赛博点状背景 */
60
+ background-image:
61
+ linear-gradient(180deg, var(--page-gradient-start), var(--page-gradient-end)),
62
+ radial-gradient(circle at 25px 25px, rgba(0, 204, 255, 0.04) 2px, transparent 3px),
63
+ radial-gradient(circle at 75px 75px, rgba(255, 60, 120, 0.02) 1px, transparent 2px),
64
+ radial-gradient(circle at 50px 50px, rgba(150, 255, 250, 0.015) 1px, transparent 2px);
65
+ background-blend-mode: normal;
66
+ background-size: cover, 100px 100px, 50px 50px, 75px 75px;
67
+ }
68
+
69
+ button, .card-hover {
70
+ transition: all 0.3s ease;
71
+ }
72
+
73
+ /* 改进卡片适应不同内容长度 */
74
+ .card-hover {
75
+ border: 1px solid var(--border-color);
76
+ background: linear-gradient(135deg, var(--card-gradient-start), var(--card-gradient-end));
77
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
78
+ position: relative;
79
+ overflow: hidden;
80
+ border-radius: 6px;
81
+ display: flex;
82
+ flex-direction: column;
83
+ height: 100%;
84
+ }
85
+
86
+ /* 确保卡片内容区域高度一致性 */
87
+ .card-hover .flex-grow {
88
+ min-height: unset; /* 移除最小高度限制,让内容自然流动 */
89
+ display: flex;
90
+ flex-direction: column;
91
+ }
92
+
93
+ /* 针对不同长度的标题优化显示 */
94
+ .card-hover h3 {
95
+ min-height: unset;
96
+ max-height: unset;
97
+ display: -webkit-box;
98
+ -webkit-box-orient: vertical;
99
+ overflow: hidden;
100
+ text-overflow: ellipsis;
101
+ -webkit-line-clamp: 2;
102
+ line-height: 1.2rem;
103
+ word-break: break-word; /* 允许在任何字符间断行 */
104
+ hyphens: auto; /* 允许断词 */
105
+ }
106
+
107
+ .card-hover::before {
108
+ content: "";
109
+ position: absolute;
110
+ top: 0;
111
+ left: -100%;
112
+ width: 100%;
113
+ height: 100%;
114
+ background: linear-gradient(90deg, transparent, var(--card-accent), transparent);
115
+ transition: left 0.6s ease;
116
+ }
117
+
118
+ .card-hover:hover {
119
+ border-color: var(--card-hover-border);
120
+ transform: translateY(-3px);
121
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.5);
122
+ }
123
+
124
+ .card-hover:hover::before {
125
+ left: 100%;
126
+ }
127
+
128
+ .gradient-text {
129
+ background: linear-gradient(to right, var(--primary-color), var(--accent-color));
130
+ -webkit-background-clip: text;
131
+ -webkit-text-fill-color: transparent;
132
+ }
133
+
134
+ /* 改进设置面板样式 */
135
+ .settings-panel {
136
+ scrollbar-width: thin;
137
+ scrollbar-color: #444 #222;
138
+ transform: translateX(100%);
139
+ transition: transform 0.3s ease;
140
+ background: linear-gradient(135deg, var(--page-gradient-end), var(--page-gradient-start));
141
+ border-left: 1px solid var(--primary-color);
142
+ }
143
+
144
+ .settings-panel.show {
145
+ transform: translateX(0);
146
+ }
147
+
148
+ .settings-panel::-webkit-scrollbar {
149
+ width: 6px;
150
+ }
151
+
152
+ .settings-panel::-webkit-scrollbar-track {
153
+ background: transparent;
154
+ }
155
+
156
+ .settings-panel::-webkit-scrollbar-thumb {
157
+ background-color: #444;
158
+ border-radius: 4px;
159
+ }
160
+
161
+ .search-button {
162
+ background: var(--primary-color);
163
+ color: var(--text-color);
164
+ }
165
+
166
+ .search-button:hover {
167
+ background: var(--primary-light);
168
+ }
169
+
170
+ ::-webkit-scrollbar {
171
+ width: 8px;
172
+ height: 8px;
173
+ }
174
+
175
+ ::-webkit-scrollbar-track {
176
+ background: #111;
177
+ border-radius: 4px;
178
+ }
179
+
180
+ ::-webkit-scrollbar-thumb {
181
+ background: #333;
182
+ border-radius: 4px;
183
+ transition: all 0.3s ease;
184
+ }
185
+
186
+ ::-webkit-scrollbar-thumb:hover {
187
+ background: #444;
188
+ }
189
+
190
+ * {
191
+ scrollbar-width: thin;
192
+ scrollbar-color: #333 #111;
193
+ }
194
+
195
+ .search-tag {
196
+ background: linear-gradient(135deg, var(--card-gradient-start), var(--card-gradient-end));
197
+ color: var(--text-color);
198
+ padding: 0.5rem 1rem;
199
+ border-radius: 0.5rem;
200
+ font-size: 0.875rem;
201
+ border: 1px solid var(--border-color);
202
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
203
+ }
204
+
205
+ .search-tag:hover {
206
+ background: linear-gradient(135deg, var(--card-gradient-end), var(--card-gradient-start));
207
+ border-color: var(--primary-color);
208
+ }
209
+
210
+ .footer {
211
+ width: 100%;
212
+ transition: all 0.3s ease;
213
+ margin-top: auto;
214
+ background: linear-gradient(to bottom, transparent, var(--page-gradient-start));
215
+ border-top: 1px solid var(--border-color);
216
+ }
217
+
218
+ .footer a:hover {
219
+ text-decoration: underline;
220
+ }
221
+
222
+ body {
223
+ display: flex;
224
+ flex-direction: column;
225
+ min-height: 100vh;
226
+ }
227
+
228
+ .container {
229
+ flex: 1;
230
+ }
231
+
232
+ @media screen and (min-height: 800px) {
233
+ body {
234
+ display: flex;
235
+ flex-direction: column;
236
+ min-height: 100vh;
237
+ }
238
+
239
+ .container {
240
+ flex: 1;
241
+ }
242
+
243
+ .footer {
244
+ margin-top: auto;
245
+ }
246
+ }
247
+
248
+ @media screen and (max-width: 640px) {
249
+ .footer {
250
+ padding-bottom: 2rem;
251
+ }
252
+ }
253
+
254
+ /* 移动端布局优化 */
255
+ @media screen and (max-width: 768px) {
256
+ .card-hover h3 {
257
+ min-height: 2.5rem;
258
+ }
259
+
260
+ .card-hover .flex-grow {
261
+ min-height: 80px;
262
+ }
263
+ }
264
+
265
+ @keyframes fadeIn {
266
+ from { opacity: 0; }
267
+ to { opacity: 1; }
268
+ }
269
+
270
+ @keyframes fadeOut {
271
+ from { opacity: 1; }
272
+ to { opacity: 0; }
273
+ }
274
+
275
+ #modal.show {
276
+ animation: fadeIn 0.3s forwards;
277
+ }
278
+
279
+ #modal.hide {
280
+ animation: fadeOut 0.3s forwards;
281
+ }
282
+
283
+ #modal > div {
284
+ background: linear-gradient(135deg, var(--card-gradient-start), var(--card-gradient-end));
285
+ border: 1px solid var(--primary-color);
286
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.7), 0 0 15px rgba(0, 204, 255, 0.1);
287
+ border-radius: 8px;
288
+ }
289
+
290
+ #episodesGrid button {
291
+ background: rgba(0, 204, 255, 0.08);
292
+ border: 1px solid rgba(0, 204, 255, 0.2);
293
+ transition: all 0.2s ease;
294
+ }
295
+
296
+ #episodesGrid button:hover {
297
+ background: rgba(0, 204, 255, 0.15);
298
+ border-color: var(--primary-color);
299
+ box-shadow: 0 0 8px rgba(0, 204, 255, 0.3);
300
+ }
301
+
302
+ #yellowFilterToggle:checked + .toggle-bg {
303
+ background-color: var(--primary-color);
304
+ }
305
+
306
+ #yellowFilterToggle:checked ~ .toggle-dot {
307
+ transform: translateX(1.5rem);
308
+ }
309
+
310
+ #yellowFilterToggle:focus + .toggle-bg,
311
+ #yellowFilterToggle:hover + .toggle-bg {
312
+ box-shadow: 0 0 0 2px rgba(0, 204, 255, 0.3);
313
+ }
314
+
315
+ /* 添加广告过滤开关的CSS */
316
+ #adFilterToggle:checked + .toggle-bg {
317
+ background-color: var(--primary-color);
318
+ }
319
+
320
+ #adFilterToggle:checked ~ .toggle-dot {
321
+ transform: translateX(1.5rem);
322
+ }
323
+
324
+ #adFilterToggle:focus + .toggle-bg,
325
+ #adFilterToggle:hover + .toggle-bg {
326
+ box-shadow: 0 0 0 2px rgba(0, 204, 255, 0.3);
327
+ }
328
+
329
+ .toggle-dot {
330
+ transition: transform 0.3s ease-in-out;
331
+ box-shadow: 0 2px 4px rgba(0,0,0,0.2);
332
+ }
333
+
334
+ .toggle-bg {
335
+ transition: background-color 0.3s ease-in-out;
336
+ }
337
+
338
+ #yellowFilterToggle:checked ~ .toggle-dot {
339
+ box-shadow: 0 2px 4px rgba(0, 204, 255, 0.3);
340
+ }
341
+
342
+ #adFilterToggle:checked ~ .toggle-dot {
343
+ box-shadow: 0 2px 4px rgba(0, 204, 255, 0.3);
344
+ }
345
+
346
+ /* 添加API复选框样式 */
347
+ .form-checkbox {
348
+ appearance: none;
349
+ -webkit-appearance: none;
350
+ -moz-appearance: none;
351
+ height: 14px;
352
+ width: 14px;
353
+ background-color: #222;
354
+ border: 1px solid #333;
355
+ border-radius: 3px;
356
+ cursor: pointer;
357
+ position: relative;
358
+ outline: none;
359
+ }
360
+
361
+ .form-checkbox:checked {
362
+ background-color: var(--primary-color);
363
+ border-color: var(--primary-color);
364
+ }
365
+
366
+ .form-checkbox:checked::after {
367
+ content: '';
368
+ position: absolute;
369
+ left: 4px;
370
+ top: 1px;
371
+ width: 4px;
372
+ height: 8px;
373
+ border: solid white;
374
+ border-width: 0 2px 2px 0;
375
+ transform: rotate(45deg);
376
+ }
377
+
378
+ /* API滚动区域美化 */
379
+ #apiCheckboxes {
380
+ scrollbar-width: thin;
381
+ scrollbar-color: #444 #222;
382
+ }
383
+
384
+ #apiCheckboxes::-webkit-scrollbar {
385
+ width: 6px;
386
+ }
387
+
388
+ #apiCheckboxes::-webkit-scrollbar-track {
389
+ background: #222;
390
+ border-radius: 4px;
391
+ }
392
+
393
+ #apiCheckboxes::-webkit-scrollbar-thumb {
394
+ background-color: #444;
395
+ border-radius: 4px;
396
+ }
397
+
398
+ /* 自定义API列表样式 */
399
+ #customApisList {
400
+ scrollbar-width: thin;
401
+ scrollbar-color: #444 #222;
402
+ }
403
+
404
+ #customApisList::-webkit-scrollbar {
405
+ width: 6px;
406
+ }
407
+
408
+ #customApisList::-webkit-scrollbar-track {
409
+ background: transparent;
410
+ }
411
+
412
+ #customApisList::-webkit-scrollbar-thumb {
413
+ background-color: #444;
414
+ border-radius: 4px;
415
+ }
416
+
417
+ /* 设置面板滚动样式 */
418
+ .settings-panel {
419
+ scrollbar-width: thin;
420
+ scrollbar-color: #444 #222;
421
+ }
422
+
423
+ .settings-panel::-webkit-scrollbar {
424
+ width: 6px;
425
+ }
426
+
427
+ .settings-panel::-webkit-scrollbar-track {
428
+ background: transparent;
429
+ }
430
+
431
+ .settings-panel::-webkit-scrollbar-thumb {
432
+ background-color: #444;
433
+ border-radius: 4px;
434
+ }
435
+
436
+ /* 添加自定义API表单动画 */
437
+ #addCustomApiForm {
438
+ transition: all 0.3s ease;
439
+ max-height: 0;
440
+ opacity: 0;
441
+ overflow: hidden;
442
+ }
443
+
444
+ #addCustomApiForm.hidden {
445
+ max-height: 0;
446
+ padding: 0;
447
+ opacity: 0;
448
+ }
449
+
450
+ #addCustomApiForm:not(.hidden) {
451
+ max-height: 230px;
452
+ opacity: 1;
453
+ }
454
+
455
+ /* 成人内容API标记样式 */
456
+ .api-adult + label {
457
+ color: #ff6b8b !important;
458
+ }
459
+
460
+ /* 添加警告图标和标签样式 */
461
+ .adult-warning {
462
+ display: inline-flex;
463
+ align-items: center;
464
+ margin-left: 0.25rem;
465
+ color: #ff6b8b;
466
+ }
467
+
468
+ .adult-warning svg {
469
+ width: 12px;
470
+ height: 12px;
471
+ margin-right: 4px;
472
+ }
473
+
474
+ /* 过滤器禁用样式 */
475
+ .filter-disabled {
476
+ opacity: 0.5;
477
+ pointer-events: none;
478
+ cursor: not-allowed;
479
+ }
480
+
481
+ /* API组标题样式 */
482
+ .api-group-title {
483
+ grid-column: span 2;
484
+ padding: 0.25rem 0;
485
+ margin-top: 0.5rem;
486
+ border-top: 1px solid #333;
487
+ color: #8599b2;
488
+ font-size: 0.75rem;
489
+ text-transform: uppercase;
490
+ letter-spacing: 0.05em;
491
+ }
492
+
493
+ .api-group-title.adult {
494
+ color: #ff6b8b;
495
+ }
496
+
497
+ /* 过滤器禁用样式 - 改进版本 */
498
+ .filter-disabled {
499
+ position: relative;
500
+ }
501
+
502
+ .filter-disabled::after {
503
+ content: '';
504
+ position: absolute;
505
+ top: 0;
506
+ left: 0;
507
+ width: 100%;
508
+ height: 100%;
509
+ background-color: rgba(0,0,0,0.4);
510
+ border-radius: 0.5rem;
511
+ z-index: 5;
512
+ }
513
+
514
+ .filter-disabled > * {
515
+ opacity: 0.7;
516
+ }
517
+
518
+ .filter-disabled .toggle-bg {
519
+ background-color: #333 !important;
520
+ }
521
+
522
+ .filter-disabled .toggle-dot {
523
+ transform: translateX(0) !important;
524
+ background-color: #666 !important;
525
+ }
526
+
527
+ /* 改进过滤器禁用样式 */
528
+ .filter-disabled .filter-description {
529
+ color: #ff6b8b !important;
530
+ font-style: italic;
531
+ font-weight: 500;
532
+ }
533
+
534
+ /* 修改过滤器禁用样式,确保文字清晰可见 */
535
+ .filter-disabled {
536
+ position: relative;
537
+ }
538
+
539
+ .filter-disabled::after {
540
+ content: '';
541
+ position: absolute;
542
+ top: 0;
543
+ left: 0;
544
+ width: 100%;
545
+ height: 100%;
546
+ background-color: rgba(0,0,0,0.3);
547
+ border-radius: 0.5rem;
548
+ z-index: 5;
549
+ }
550
+
551
+ .filter-disabled > * {
552
+ opacity: 1; /* 提高子元素不透明度,保证可见性 */
553
+ z-index: 6; /* 确保内容在遮罩上方 */
554
+ }
555
+
556
+ /* 改进过滤器禁用状态下的描述样式 */
557
+ .filter-disabled .filter-description {
558
+ color: #ff7b9d !important; /* 更亮的粉色 */
559
+ font-style: italic;
560
+ font-weight: 500;
561
+ text-shadow: 0 0 2px rgba(0,0,0,0.8); /* 添加文字阴影提高对比度 */
562
+ }
563
+
564
+ /* 开关的禁用样式 */
565
+ .filter-disabled .toggle-bg {
566
+ background-color: #444 !important;
567
+ opacity: 0.8;
568
+ }
569
+
570
+ .filter-disabled .toggle-dot {
571
+ transform: translateX(0) ;
572
+ background-color: #777 ;
573
+ opacity: 0.9;
574
+ }
575
+
576
+ /* 警告提示样式改进 */
577
+ .filter-tooltip {
578
+ background-color: rgba(255, 61, 87, 0.1);
579
+ border: 1px solid rgba(255, 61, 87, 0.2);
580
+ border-radius: 0.25rem;
581
+ padding: 0.5rem;
582
+ margin-top: 0.5rem;
583
+ display: flex;
584
+ align-items: center;
585
+ font-size: 0.75rem;
586
+ line-height: 1.25;
587
+ position: relative;
588
+ z-index: 10;
589
+ }
590
+
591
+ .filter-tooltip svg {
592
+ flex-shrink: 0;
593
+ width: 14px;
594
+ height: 14px;
595
+ margin-right: 0.35rem;
596
+ }
597
+
598
+ /* 编辑按钮样式 */
599
+ .custom-api-edit {
600
+ color: #3b82f6;
601
+ transition: color 0.2s ease;
602
+ }
603
+
604
+ .custom-api-edit:hover {
605
+ color: #2563eb;
606
+ }
607
+
608
+ /* 自定义API条目样式改进 */
609
+ #customApisList .api-item {
610
+ display: flex;
611
+ align-items: center;
612
+ justify-content: space-between;
613
+ padding: 0.25rem 0.5rem;
614
+ margin-bottom: 0.25rem;
615
+ background-color: #222;
616
+ border-radius: 0.25rem;
617
+ transition: background-color 0.2s ease;
618
+ }
619
+
620
+ #customApisList .api-item:hover {
621
+ background-color: #2a2a2a;
622
+ }
623
+
624
+ /* 成人内容标签样式 */
625
+ .adult-tag {
626
+ display: inline-flex;
627
+ align-items: center;
628
+ color: #ff6b8b;
629
+ font-size: 0.7rem;
630
+ font-weight: 500;
631
+ margin-right: 0.35rem;
632
+ }
633
+
634
+ /* 历史记录面板样式 */
635
+ .history-panel {
636
+ box-shadow: 2px 0 10px rgba(0,0,0,0.5);
637
+ transition: transform 0.3s ease-in-out;
638
+ overflow-y: scroll; /* 始终显示滚动条,防止宽度变化 */
639
+ overflow-x: hidden; /* 防止水平滚动 */
640
+ width: 320px; /* 固定宽度 */
641
+ box-sizing: border-box; /* 确保padding不影响总宽度 */
642
+ scrollbar-gutter: stable; /* 现代浏览器:为滚动条预留空间 */
643
+ }
644
+
645
+ .history-panel.show {
646
+ transform: translateX(0);
647
+ }
648
+
649
+ #historyList {
650
+ padding-right: 6px; /* 为滚动条预留空间,确保内容不被挤压 */
651
+ }
652
+
653
+ /* 历史记录项样式优化 */
654
+ .history-item {
655
+ background: #1a1a1a;
656
+ border-radius: 6px; /* 减小圆角 */
657
+ border: 1px solid #333;
658
+ overflow: hidden;
659
+ transition: all 0.2s ease;
660
+ padding: 10px 14px;
661
+ position: relative;
662
+ margin-bottom: 8px; /* 减小底部间距 */
663
+ width: 100%; /* ���保宽度一致 */
664
+ }
665
+
666
+ .history-item:hover {
667
+ transform: translateY(-2px);
668
+ border-color: #444;
669
+ box-shadow: 0 4px 8px rgba(0,0,0,0.2);
670
+ }
671
+
672
+ /* 添加组悬停效果,使删除按钮在悬停时显示 */
673
+ .history-item .delete-btn {
674
+ opacity: 0;
675
+ transition: opacity 0.2s ease;
676
+ }
677
+
678
+ .history-item:hover .delete-btn {
679
+ opacity: 1;
680
+ }
681
+
682
+ .history-info {
683
+ padding: 0; /* 移除额外的内边距 */
684
+ min-height: 70px;
685
+ }
686
+
687
+ .history-title {
688
+ font-weight: 500;
689
+ font-size: 0.95rem; /* 减小字体大小 */
690
+ margin-bottom: 2px; /* 减小底部边距 */
691
+ overflow: hidden;
692
+ text-overflow: ellipsis;
693
+ white-space: nowrap;
694
+ }
695
+
696
+ .history-meta {
697
+ color: #bbb;
698
+ font-size: 0.75rem; /* 减小字体大小 */
699
+ display: flex;
700
+ flex-wrap: wrap;
701
+ margin-bottom: 1px; /* 减小边距 */
702
+ }
703
+
704
+ .history-episode {
705
+ color: #3b82f6;
706
+ }
707
+
708
+ .history-source {
709
+ color: #10b981;
710
+ }
711
+
712
+ .history-time {
713
+ color: #888;
714
+ font-size: 0.7rem; /* 减小字体大小 */
715
+ margin-top: 1px; /* 减小顶部边距 */
716
+ }
717
+
718
+ .history-separator {
719
+ color: #666;
720
+ }
721
+
722
+ .history-thumbnail {
723
+ width: 100%;
724
+ height: 90px;
725
+ background-color: #222;
726
+ overflow: hidden;
727
+ }
728
+
729
+ .history-thumbnail img {
730
+ width: 100%;
731
+ height: 100%;
732
+ object-fit: cover;
733
+ }
734
+
735
+ .history-info {
736
+ padding: 10px;
737
+ }
738
+
739
+ .history-time {
740
+ color: #888;
741
+ font-size: 0.8rem;
742
+ margin-top: 4px;
743
+ }
744
+
745
+ .history-title {
746
+ font-weight: 500;
747
+ white-space: nowrap;
748
+ overflow: hidden;
749
+ text-overflow: ellipsis;
750
+ }
751
+
752
+ /* 添加播放进度条样式 */
753
+ .history-progress {
754
+ margin: 5px 0;
755
+ }
756
+
757
+ .progress-bar {
758
+ height: 3px;
759
+ background-color: rgba(255, 255, 255, 0.1);
760
+ border-radius: 2px;
761
+ overflow: hidden;
762
+ margin-bottom: 2px;
763
+ }
764
+
765
+ .progress-filled {
766
+ height: 100%;
767
+ background: linear-gradient(to right, #00ccff, #3b82f6);
768
+ border-radius: 2px;
769
+ }
770
+
771
+ .progress-text {
772
+ font-size: 10px;
773
+ color: #888;
774
+ text-align: right;
775
+ }
776
+
777
+ /* 添加恢复播放提示样式 */
778
+ .position-restore-hint {
779
+ position: absolute;
780
+ bottom: 60px;
781
+ left: 50%;
782
+ transform: translateX(-50%) translateY(20px);
783
+ background-color: rgba(0, 0, 0, 0.7);
784
+ color: white;
785
+ padding: 8px 16px;
786
+ border-radius: 4px;
787
+ font-size: 14px;
788
+ z-index: 100;
789
+ opacity: 0;
790
+ transition: all 0.3s ease;
791
+ }
792
+
793
+ .position-restore-hint.show {
794
+ opacity: 1;
795
+ transform: translateX(-50%) translateY(0);
796
+ }
797
+
798
+ /* 锁定控制时屏蔽交互 */
799
+ .player-container.controls-locked .dplayer-controller,
800
+ .player-container.controls-locked .dplayer-mask,
801
+ .player-container.controls-locked .dplayer-bar-wrap,
802
+ .player-container.controls-locked .dplayer-statusbar,
803
+ .player-container.controls-locked .shortcut-hint {
804
+ opacity: 0 !important;
805
+ pointer-events: none !important;
806
+ }
807
+ /* 保留锁按钮可见可点 */
808
+ .player-container.controls-locked #lockToggle {
809
+ opacity: 1 !important;
810
+ pointer-events: auto !important;
811
+ }
812
+
813
+ /* 播放器顶部header移动端优化 */
814
+ .player-header {
815
+ gap: 0.5rem;
816
+ }
817
+ .custom-title-scroll {
818
+ overflow-x: auto;
819
+ white-space: nowrap;
820
+ text-overflow: ellipsis;
821
+ -webkit-overflow-scrolling: touch;
822
+ scrollbar-width: none;
823
+ }
824
+ .custom-title-scroll::-webkit-scrollbar {
825
+ display: none;
826
+ }
827
+ .logo-text {
828
+ display: inline;
829
+ }
830
+ .home-btn-text {
831
+ display: inline;
832
+ }
833
+ @media (max-width: 640px) {
834
+ .logo-text {
835
+ display: none;
836
+ }
837
+ .home-btn-text {
838
+ display: none;
839
+ }
840
+ .logo-icon {
841
+ margin-right: 0;
842
+ }
843
+ .home-btn svg {
844
+ margin-right: 0;
845
+ }
846
+ .player-header {
847
+ padding-left: 2px !important;
848
+ padding-right: 2px !important;
849
+ }
850
+ .custom-title-scroll {
851
+ font-size: 1rem;
852
+ }
853
+ }
854
+
855
+ /* 搜索结果卡片优化:横向布局 */
856
+ .search-card-img-container {
857
+ width: 100px; /* 增加宽度,从80px到100px */
858
+ height: 150px; /* 增加高度,从120px到150px */
859
+ overflow: hidden;
860
+ background-color: #191919;
861
+ }
862
+
863
+ /* 确保图片不会被拉伸,并且能够正确显示 */
864
+ .search-card-img-container img {
865
+ width: 100%;
866
+ height: 100%;
867
+ object-fit: cover;
868
+ }
869
+
870
+ /* 针对搜索结果卡片修改网格布局以适应横向卡片 */
871
+ @media (max-width: 640px) {
872
+ #results {
873
+ grid-template-columns: repeat(1, minmax(0, 1fr)) !important;
874
+ }
875
+ }
876
+
877
+ /* 响应式调整:在小屏幕上依然保持较好的视觉效果 */
878
+ @media (min-width: 641px) and (max-width: 768px) {
879
+ #results {
880
+ grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
881
+ }
882
+ }
883
+
884
+ /* 调整网格布局,减少每行卡片数量以适应更大尺寸的卡片 */
885
+ @media (min-width: 769px) and (max-width: 1024px) {
886
+ #results {
887
+ grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
888
+ }
889
+ }
890
+
891
+ @media (min-width: 1025px) {
892
+ #results {
893
+ grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
894
+ }
895
+ }
896
+
897
+ /* 优化卡片内元素间距 */
898
+ .card-hover .p-2 {
899
+ padding: 0.75rem; /* 增加内边距 */
900
+ }
901
+
902
+ /* 增加卡片内字体大小 */
903
+ .card-hover h3 {
904
+ font-size: 0.95rem; /* 增加标题字体大小 */
905
+ line-height: 1.3rem;
906
+ margin-bottom: 0.5rem;
907
+ }
908
+
909
+ .card-hover p {
910
+ font-size: 0.8rem; /* 增加描述字体大小 */
911
+ }
912
+
913
+ /* 优化卡片内元素间距 */
914
+ .card-hover .p-2 {
915
+ padding: 0.5rem;
916
+ }
917
+
918
+ /* 确保Toast显示在顶层并有适当的转换效果 */
919
+ #toast {
920
+ z-index: 9999; /* 确保显示在最上层 */
921
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
922
+ min-width: 200px;
923
+ text-align: center;
924
+ pointer-events: none; /* 防止toast阻挡点击事件 */
925
+ transform: translateX(-50%) translateY(0);
926
+ transition: opacity 0.3s ease, transform 0.3s ease;
927
+ }
928
+
929
+ #toast.hidden {
930
+ opacity: 0;
931
+ transform: translateX(-50%) translateY(-100%);
932
+ }
933
+
934
+ /* 详情模态框样式优化 */
935
+ #modal .modal-detail-info {
936
+ background: linear-gradient(135deg, #0a0a0a, #111);
937
+ border: 1px solid #222;
938
+ border-radius: 8px;
939
+ padding: 1rem;
940
+ margin-bottom: 1.5rem;
941
+ }
942
+
943
+ #modal .detail-grid {
944
+ display: grid;
945
+ grid-template-columns: 1fr;
946
+ gap: 0.75rem;
947
+ font-size: 0.875rem;
948
+ }
949
+
950
+ @media (min-width: 768px) {
951
+ #modal .detail-grid {
952
+ grid-template-columns: 1fr 1fr;
953
+ }
954
+ }
955
+
956
+ #modal .detail-item {
957
+ display: flex;
958
+ flex-wrap: wrap;
959
+ gap: 0.5rem;
960
+ }
961
+
962
+ #modal .detail-label {
963
+ color: #9ca3af;
964
+ font-weight: 500;
965
+ min-width: 3rem;
966
+ flex-shrink: 0;
967
+ }
968
+
969
+ #modal .detail-value {
970
+ color: white;
971
+ flex: 1;
972
+ word-break: break-word;
973
+ }
974
+
975
+ #modal .detail-desc {
976
+ margin-top: 1rem;
977
+ padding-top: 1rem;
978
+ border-top: 1px solid #333;
979
+ }
980
+
981
+ #modal .detail-desc-content {
982
+ color: #d1d5db;
983
+ font-size: 0.875rem;
984
+ line-height: 1.6;
985
+ max-height: 8rem;
986
+ overflow-y: auto;
987
+ scrollbar-width: thin;
988
+ scrollbar-color: #444 #222;
989
+ }
990
+
991
+ #modal .detail-desc-content::-webkit-scrollbar {
992
+ width: 6px;
993
+ }
994
+
995
+ #modal .detail-desc-content::-webkit-scrollbar-track {
996
+ background: #222;
997
+ border-radius: 4px;
998
+ }
999
+
1000
+ #modal .detail-desc-content::-webkit-scrollbar-thumb {
1001
+ background-color: #444;
1002
+ border-radius: 4px;
1003
+ }
1004
+
1005
+ /* 集数统计信息样式 */
1006
+ #modal .episode-stats {
1007
+ color: #9ca3af;
1008
+ font-size: 0.875rem;
1009
+ display: flex;
1010
+ align-items: center;
1011
+ gap: 0.5rem;
1012
+ }
1013
+
1014
+ /* 移动端优化 */
1015
+ @media (max-width: 640px) {
1016
+ #modal .detail-grid {
1017
+ gap: 0.5rem;
1018
+ font-size: 0.8rem;
1019
+ }
1020
+
1021
+ #modal .detail-label {
1022
+ min-width: 2.5rem;
1023
+ }
1024
+
1025
+ #modal .detail-desc-content {
1026
+ max-height: 6rem;
1027
+ font-size: 0.8rem;
1028
+ }
1029
+ }
css/watch.css ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* 添加重定向页面的基本样式 */
2
+ body {
3
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
4
+ background-color: #0f1622;
5
+ color: white;
6
+ margin: 0;
7
+ padding: 0;
8
+ height: 100vh;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ }
13
+
14
+ .redirect-container {
15
+ text-align: center;
16
+ max-width: 90%;
17
+ width: 380px;
18
+ padding: 2rem;
19
+ background-color: rgba(0, 0, 0, 0.3);
20
+ border-radius: 16px;
21
+ backdrop-filter: blur(10px);
22
+ -webkit-backdrop-filter: blur(10px);
23
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
24
+ border: 1px solid rgba(255, 255, 255, 0.1);
25
+ }
26
+
27
+ .logo-container {
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ margin-bottom: 1.5rem;
32
+ }
33
+
34
+ .logo-icon {
35
+ width: 40px;
36
+ height: 40px;
37
+ color: #00ccff;
38
+ margin-right: 10px;
39
+ }
40
+
41
+ .logo-text {
42
+ font-size: 2rem;
43
+ margin: 0;
44
+ background: linear-gradient(to right, #00ccff, #ff3c78);
45
+ -webkit-background-clip: text;
46
+ -webkit-text-fill-color: transparent;
47
+ background-clip: text;
48
+ }
49
+
50
+ .loading-animation {
51
+ display: inline-block;
52
+ width: 50px;
53
+ height: 50px;
54
+ border: 3px solid rgba(255, 255, 255, 0.2);
55
+ border-radius: 50%;
56
+ border-top-color: #00ccff;
57
+ animation: spin 1s linear infinite;
58
+ margin-bottom: 20px;
59
+ }
60
+
61
+ @keyframes spin {
62
+ to { transform: rotate(360deg); }
63
+ }
64
+
65
+ .redirect-message {
66
+ font-size: 1.2rem;
67
+ margin-bottom: 10px;
68
+ font-weight: 500;
69
+ }
70
+
71
+ #redirect-status {
72
+ font-size: 0.9rem;
73
+ color: #8599b2;
74
+ margin-bottom: 1.5rem;
75
+ height: 20px;
76
+ }
77
+
78
+ .redirect-hint {
79
+ font-size: 0.9rem;
80
+ color: #8599b2;
81
+ margin-top: 20px;
82
+ }
83
+
84
+ .redirect-hint a {
85
+ color: #00ccff;
86
+ text-decoration: none;
87
+ font-weight: 500;
88
+ transition: all 0.2s ease;
89
+ padding: 5px 10px;
90
+ border-radius: 4px;
91
+ background-color: rgba(0, 204, 255, 0.1);
92
+ }
93
+
94
+ .redirect-hint a:hover {
95
+ background-color: rgba(0, 204, 255, 0.2);
96
+ text-decoration: underline;
97
+ }
98
+
99
+ /* 移动端优化 */
100
+ @media (max-width: 480px) {
101
+ .redirect-container {
102
+ padding: 1.5rem;
103
+ width: 85%;
104
+ }
105
+
106
+ .logo-icon {
107
+ width: 30px;
108
+ height: 30px;
109
+ }
110
+
111
+ .logo-text {
112
+ font-size: 1.7rem;
113
+ }
114
+
115
+ .loading-animation {
116
+ width: 40px;
117
+ height: 40px;
118
+ margin-bottom: 15px;
119
+ }
120
+
121
+ .redirect-message {
122
+ font-size: 1rem;
123
+ }
124
+
125
+ #redirect-status {
126
+ font-size: 0.8rem;
127
+ }
128
+ }