blob: 2882f5cff5c988528b3e101f0390389dae1ef43c [file] [log] [blame]
Akane121765b61a72025-05-17 13:52:25 +08001/* src/components/Dashboard.css */
2.dashboard-container {
DREW5b1883e2025-06-07 10:41:32 +08003 display: flex;
4 flex-direction: column;
5 min-height: 100vh;
6 background-color: #f8f9fa;
7 font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
8}
Akane121765b61a72025-05-17 13:52:25 +08009
DREW5b1883e2025-06-07 10:41:32 +080010/* 顶部栏样式 */
11.top-bar {
12 display: flex;
13 justify-content: space-between;
14 align-items: center;
15 padding: 10px 30px;
16 background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
17 box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
18 position: sticky;
19 top: 0;
20 z-index: 1000;
21}
22
23.platform-name h2 {
24 margin: 0;
25 color: white;
26 font-size: 24px;
27 font-weight: 700;
28 text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
29}
30
31.user-actions {
32 display: flex;
33 align-items: center;
34 gap: 15px;
35}
36
37.admin-center-button {
38 padding: 8px 16px;
39 background-color: #ff7f50;
40 color: white;
41 border: none;
42 border-radius: 4px;
43 font-weight: 600;
44 cursor: pointer;
45 transition: all 0.2s;
46}
47
48.admin-center-button:hover {
49 background-color: #ff6347;
50 transform: translateY(-1px);
51}
52
53.user-info {
54 display: flex;
55 align-items: center;
56 gap: 10px;
57 color: white;
58}
59
60.user-avatar {
61 width: 36px;
62 height: 36px;
63 border-radius: 50%;
64 object-fit: cover;
65 border: 2px solid rgba(255, 255, 255, 0.3);
66}
67
68.username {
69 font-weight: 600;
70 color: white !important;
71}
72
73.logout-button {
74 padding: 6px 12px;
75 background-color: transparent;
76 border: 1px solid rgba(255, 255, 255, 0.3);
77 color: white;
78 border-radius: 4px;
79 cursor: pointer;
80 transition: all 0.2s;
81}
82
83.logout-button:hover {
84 background-color: rgba(255, 255, 255, 0.1);
85 border-color: rgba(255, 255, 255, 0.5);
86}
87
88/* 导航标签样式 */
89.nav-tabs {
90 display: flex;
91 background-color: white;
92 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
93 padding: 0 30px;
94}
95
96.tab-button {
97 padding: 14px 24px;
98 background: none;
99 border: none;
100 border-bottom: 3px solid transparent;
101 cursor: pointer;
102 font-size: 15px;
103 font-weight: 600;
104 color: #666;
105 transition: all 0.2s;
106 position: relative;
107}
108
109.tab-button:hover {
110 color: #1e3c72;
111}
112
113.tab-button.active {
114 color: #1e3c72;
115 border-bottom-color: #1e3c72;
116}
117
118.tab-button.active::after {
119 content: '';
120 position: absolute;
121 bottom: -3px;
122 left: 0;
123 right: 0;
124 height: 3px;
125 background-color: #1e3c72;
126}
127
128/* 内容区域样式 */
129.content-area {
130 flex-grow: 1;
131 padding: 25px 30px;
132 background-color: white;
133 margin: 20px;
134 border-radius: 8px;
135 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
136}
137
138.section-search-container {
139 display: flex;
140 margin-bottom: 25px;
141 gap: 10px;
142}
143
144.section-search-input {
145 flex: 1;
146 padding: 10px 16px;
147 border: 1px solid #ddd;
148 border-radius: 6px;
149 font-size: 14px;
150 transition: all 0.2s;
151}
152
153.section-search-input:focus {
154 border-color: #1e3c72;
155 box-shadow: 0 0 0 2px rgba(30, 60, 114, 0.2);
156}
157
158.search-button, .reset-button {
159 padding: 10px 18px;
160 border: none;
161 border-radius: 6px;
162 font-weight: 600;
163 cursor: pointer;
164 transition: all 0.2s;
165}
166
167.search-button {
168 background-color: #1e3c72;
169 color: white;
170}
171
172.search-button:hover {
173 background-color: #2a5298;
174 transform: translateY(-1px);
175}
176
177.reset-button {
178 background-color: #f1f1f1;
179 color: #555;
180}
181
182.reset-button:hover {
183 background-color: #e0e0e0;
184}
185
186/* 轮播图样式 */
Akane121765b61a72025-05-17 13:52:25 +0800187.carousel-container {
DREW5b1883e2025-06-07 10:41:32 +0800188 position: relative;
189 width: 100%;
190 height: 200px;
191 overflow: hidden;
192 margin-bottom: 30px;
193 border-radius: 8px;
194 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
195}
196
197.carousel-slide {
198 position: absolute;
199 width: 100%;
200 height: 100%;
201 opacity: 0;
202 transition: opacity 0.5s ease-in-out;
203}
204
205.carousel-slide.active {
206 opacity: 1;
207}
208
209.carousel-image {
210 width: 100%;
211 height: 100%;
212 display: flex;
213 flex-direction: column;
214 align-items: flex-start;
215 justify-content: center;
216 padding: 30px;
217 color: white;
218 background: linear-gradient(135deg, #4b6cb7 0%, #182848 100%);
219}
220
221.carousel-image h3 {
222 font-size: 28px;
223 margin: 0 0 10px 0;
224 text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3);
225}
226
227.carousel-image p {
228 margin: 5px 0;
229 font-size: 16px;
230 text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
231}
232
233.carousel-dots {
234 position: absolute;
235 bottom: 15px;
236 left: 0;
237 right: 0;
238 display: flex;
239 justify-content: center;
240 gap: 8px;
241}
242
243.dot {
244 width: 10px;
245 height: 10px;
246 border-radius: 50%;
247 background-color: rgba(255, 255, 255, 0.5);
248 cursor: pointer;
249 transition: all 0.2s;
250}
251
252.dot.active {
253 background-color: white;
254 transform: scale(1.2);
255}
256
257/* 公告网格样式 */
258.announcement-grid {
259 display: grid;
260 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
261 gap: 20px;
262 margin-bottom: 30px;
263}
264
265.announcement-card {
266 background-color: white;
267 padding: 20px;
268 border-radius: 8px;
269 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
270 transition: all 0.2s;
271 border-left: 4px solid #1e3c72;
272 cursor: pointer;
273}
274
275.announcement-card:hover {
276 transform: translateY(-3px);
277 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
278}
279
280.announcement-card h3 {
281 margin: 0 0 12px 0;
282 color: #1e3c72;
283 font-size: 18px;
284 font-weight: 600;
285}
286
287.announcement-card p {
288 margin: 0 0 12px 0;
289 color: #555;
290 line-height: 1.5;
291 font-size: 14px;
292}
293
294.announcement-footer {
295 display: flex;
296 justify-content: space-between;
297 align-items: center;
298 color: #888;
299 font-size: 13px;
300}
301
302/* 推荐区域样式 */
303.recommend-section {
304 margin-top: 40px;
305 padding-top: 20px;
306 border-top: 1px solid #eee;
307}
308
309.section-header {
310 display: flex;
311 justify-content: space-between;
312 align-items: center;
313 margin-bottom: 20px;
314}
315
316.section-title {
317 margin: 0;
318 color: #1e3c72;
319 font-size: 20px;
320 font-weight: 600;
321}
322
323.refresh-btn {
324 padding: 8px 16px;
325 background-color: #f1f1f1;
326 border: none;
327 border-radius: 6px;
328 font-weight: 600;
329 color: #555;
330 cursor: pointer;
331 transition: all 0.2s;
332}
333
334.refresh-btn:hover {
335 background-color: #e0e0e0;
336}
337
338.refresh-btn:disabled {
339 opacity: 0.6;
340 cursor: not-allowed;
341}
342
343.recommend-grid {
344 display: grid;
345 grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
346 gap: 20px;
347}
348
349.recommend-card {
350 background-color: white;
351 border-radius: 8px;
352 overflow: hidden;
353 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
354 transition: all 0.2s;
355 cursor: pointer;
356}
357
358.recommend-card:hover {
359 transform: translateY(-3px);
360 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
361}
362
363.card-poster {
364 height: 120px;
365 background-color: #f5f5f5;
366 display: flex;
367 align-items: center;
368 justify-content: center;
369}
370
371.poster-image {
372 width: 100%;
373 height: 100%;
374 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
375 color: white;
376 font-size: 36px;
377 font-weight: bold;
378 display: flex;
379 align-items: center;
380 justify-content: center;
381}
382
383.card-info {
384 padding: 15px;
385}
386
387.card-title {
388 margin: 0 0 8px 0;
389 font-size: 16px;
390 font-weight: 600;
391 color: #333;
392 white-space: nowrap;
393 overflow: hidden;
394 text-overflow: ellipsis;
395}
396
397.card-meta {
398 margin: 0 0 5px 0;
399 font-size: 13px;
400 color: #666;
401}
402
403.card-subtitle {
404 margin: 0;
405 font-size: 13px;
406 color: #888;
407}
408
409.card-stats {
410 padding: 10px 15px;
411 border-top: 1px solid #eee;
412 font-size: 13px;
413 color: #666;
414}
415
416.no-recommendations {
417 grid-column: 1 / -1;
418 text-align: center;
419 padding: 30px;
420 color: #888;
421 font-size: 15px;
422}
423
424/* 上传按钮样式 */
Akane121765b61a72025-05-17 13:52:25 +0800425.upload-header {
426 margin-bottom: 20px;
Akane121765b61a72025-05-17 13:52:25 +0800427}
428
429.upload-btn {
430 padding: 10px 20px;
DREW5b1883e2025-06-07 10:41:32 +0800431 background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
Akane121765b61a72025-05-17 13:52:25 +0800432 color: white;
433 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800434 border-radius: 6px;
435 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800436 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800437 transition: all 0.2s;
438 display: inline-flex;
439 align-items: center;
440 gap: 8px;
Akane121765b61a72025-05-17 13:52:25 +0800441}
442
443.upload-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800444 transform: translateY(-1px);
445 box-shadow: 0 2px 8px rgba(30, 60, 114, 0.3);
Akane121765b61a72025-05-17 13:52:25 +0800446}
447
DREW5b1883e2025-06-07 10:41:32 +0800448/* 筛选区域样式 */
Akane121765b61a72025-05-17 13:52:25 +0800449.filter-section {
DREW5b1883e2025-06-07 10:41:32 +0800450 background-color: white;
451 padding: 15px 20px;
Akane121765b61a72025-05-17 13:52:25 +0800452 border-radius: 8px;
DREW5b1883e2025-06-07 10:41:32 +0800453 margin-bottom: 25px;
454 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
Akane121765b61a72025-05-17 13:52:25 +0800455}
456
457.filter-group {
458 margin-bottom: 15px;
459}
460
461.filter-group h4 {
DREW5b1883e2025-06-07 10:41:32 +0800462 margin: 0 0 10px 0;
463 font-size: 14px;
464 color: #555;
465 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800466}
467
DREW5b1883e2025-06-07 10:41:32 +0800468.filter-options {
469 display: flex;
470 flex-wrap: wrap;
471 gap: 8px;
472}
473
Akane121765b61a72025-05-17 13:52:25 +0800474.filter-btn {
475 padding: 6px 12px;
DREW5b1883e2025-06-07 10:41:32 +0800476 background-color: #f5f5f5;
477 color: #333; /* 改为黑字 */
Akane121765b61a72025-05-17 13:52:25 +0800478 border: 1px solid #ddd;
Akane121765b61a72025-05-17 13:52:25 +0800479 border-radius: 4px;
DREW5b1883e2025-06-07 10:41:32 +0800480 font-size: 13px;
Akane121765b61a72025-05-17 13:52:25 +0800481 cursor: pointer;
482 transition: all 0.2s;
483}
484
485.filter-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800486 border-color: #1e3c72;
487 color: #fbfbfc;
Akane121765b61a72025-05-17 13:52:25 +0800488}
489
490.filter-btn.active {
DREW5b1883e2025-06-07 10:41:32 +0800491 background-color: #1e3c72;
Akane121765b61a72025-05-17 13:52:25 +0800492 color: white;
DREW5b1883e2025-06-07 10:41:32 +0800493 border-color: #1e3c72;
Akane121765b61a72025-05-17 13:52:25 +0800494}
495
Akane121765b61a72025-05-17 13:52:25 +0800496.confirm-btn {
497 padding: 8px 20px;
DREW5b1883e2025-06-07 10:41:32 +0800498 background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
Akane121765b61a72025-05-17 13:52:25 +0800499 color: white;
500 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800501 border-radius: 6px;
502 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800503 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800504 transition: all 0.2s;
Akane121765b61a72025-05-17 13:52:25 +0800505}
506
507.confirm-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800508 transform: translateY(-1px);
509 box-shadow: 0 2px 8px rgba(30, 60, 114, 0.3);
Akane121765b61a72025-05-17 13:52:25 +0800510}
511
DREW5b1883e2025-06-07 10:41:32 +0800512/* 资源列表样式 */
Akane121765b61a72025-05-17 13:52:25 +0800513.resource-list {
DREW5b1883e2025-06-07 10:41:32 +0800514 display: grid;
Akane121765b61a72025-05-17 13:52:25 +0800515 gap: 15px;
516}
517
518.resource-item {
519 display: flex;
520 align-items: center;
521 padding: 15px;
522 background-color: white;
DREW5b1883e2025-06-07 10:41:32 +0800523 border-radius: 8px;
524 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
525 transition: all 0.2s;
526 cursor: pointer;
Akane121765b61a72025-05-17 13:52:25 +0800527}
528
529.resource-item:hover {
DREW5b1883e2025-06-07 10:41:32 +0800530 transform: translateY(-3px);
531 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
Akane121765b61a72025-05-17 13:52:25 +0800532}
533
534.resource-poster {
535 margin-right: 15px;
DREW5b1883e2025-06-07 10:41:32 +0800536 flex-shrink: 0;
Akane121765b61a72025-05-17 13:52:25 +0800537}
538
539.poster-image {
DREW5b1883e2025-06-07 10:41:32 +0800540 width: 80px;
541 height: 110px;
542 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
543 color: white;
544 font-size: 28px;
545 font-weight: bold;
Akane121765b61a72025-05-17 13:52:25 +0800546 display: flex;
547 align-items: center;
548 justify-content: center;
Akane121765b61a72025-05-17 13:52:25 +0800549 border-radius: 4px;
550}
551
552.resource-info {
553 flex-grow: 1;
DREW5b1883e2025-06-07 10:41:32 +0800554 min-width: 0;
Akane121765b61a72025-05-17 13:52:25 +0800555}
556
557.resource-title {
DREW5b1883e2025-06-07 10:41:32 +0800558 margin: 0 0 8px 0;
Akane121765b61a72025-05-17 13:52:25 +0800559 font-size: 16px;
DREW5b1883e2025-06-07 10:41:32 +0800560 font-weight: 600;
561 color: #333;
562 white-space: nowrap;
563 overflow: hidden;
564 text-overflow: ellipsis;
Akane121765b61a72025-05-17 13:52:25 +0800565}
566
567.resource-meta {
DREW5b1883e2025-06-07 10:41:32 +0800568 margin: 0 0 5px 0;
569 font-size: 13px;
Akane121765b61a72025-05-17 13:52:25 +0800570 color: #666;
571}
572
DREW5b1883e2025-06-07 10:41:32 +0800573.resource-subtitle {
574 margin: 0;
575 font-size: 13px;
576 color: #888;
577}
578
Akane121765b61a72025-05-17 13:52:25 +0800579.resource-stats {
Akane121765b61a72025-05-17 13:52:25 +0800580 margin-right: 20px;
DREW5b1883e2025-06-07 10:41:32 +0800581 text-align: right;
582 min-width: 120px;
Akane121765b61a72025-05-17 13:52:25 +0800583}
584
585.stat {
DREW5b1883e2025-06-07 10:41:32 +0800586 display: block;
Akane121765b61a72025-05-17 13:52:25 +0800587 font-size: 13px;
588 color: #666;
589 margin-bottom: 5px;
590}
591
592.download-btn {
DREW5b1883e2025-06-07 10:41:32 +0800593 padding: 8px 16px;
594 background: linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%);
Akane121765b61a72025-05-17 13:52:25 +0800595 color: white;
596 border: none;
597 border-radius: 4px;
DREW5b1883e2025-06-07 10:41:32 +0800598 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800599 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800600 transition: all 0.2s;
601 white-space: nowrap;
Akane121765b61a72025-05-17 13:52:25 +0800602}
603
604.download-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800605 transform: translateY(-1px);
606 box-shadow: 0 2px 8px rgba(46, 125, 50, 0.3);
Akane121765b61a72025-05-17 13:52:25 +0800607}
608
DREW5b1883e2025-06-07 10:41:32 +0800609.delete-btn {
610 padding: 8px 16px;
611 background: linear-gradient(135deg, #ff5e62 0%, #ff2400 100%);
Akane121765b61a72025-05-17 13:52:25 +0800612 color: white;
613 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800614 border-radius: 4px;
615 font-weight: 600;
616 cursor: pointer;
617 transition: all 0.2s;
618 margin-left: 10px;
619 white-space: nowrap;
620}
621
622.delete-btn:hover {
623 transform: translateY(-1px);
624 box-shadow: 0 2px 8px rgba(255, 94, 98, 0.3);
625}
626
627/* 分页样式 */
628.pagination {
629 display: flex;
630 justify-content: center;
631 margin: 30px 0 20px;
632 gap: 8px;
633}
634
635.pagination button {
636 padding: 8px 14px;
637 border: 1px solid #ddd;
638 background-color: white;
639 color: #333;
Akane121765b61a72025-05-17 13:52:25 +0800640 border-radius: 4px;
641 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800642 transition: all 0.2s;
Akane121765b61a72025-05-17 13:52:25 +0800643 font-size: 14px;
Akane121765b61a72025-05-17 13:52:25 +0800644}
645
DREW5b1883e2025-06-07 10:41:32 +0800646.pagination button:hover:not(.active):not(:disabled) {
647 border-color: #1e3c72;
648 color: #1e3c72;
Akane121765b61a72025-05-17 13:52:25 +0800649}
650
DREW5b1883e2025-06-07 10:41:32 +0800651.pagination button.active {
652 background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
653 color: white;
654 border-color: #1e3c72;
655}
656
657.pagination button:disabled {
658 opacity: 0.5;
659 cursor: not-allowed;
660}
661
662/* 修改后的模态框样式 */
Akane121765b61a72025-05-17 13:52:25 +0800663.post-modal-overlay {
664 position: fixed;
665 top: 0;
666 left: 0;
667 right: 0;
668 bottom: 0;
669 background-color: rgba(0, 0, 0, 0.5);
670 display: flex;
671 justify-content: center;
672 align-items: center;
DREW5b1883e2025-06-07 10:41:32 +0800673 z-index: 9999; /* 确保在最上层 */
Akane121765b61a72025-05-17 13:52:25 +0800674}
675
DREW5b1883e2025-06-07 10:41:32 +0800676.upload-modal,
677.post-modal,
678.download-modal {
Akane121765b61a72025-05-17 13:52:25 +0800679 background-color: white;
DREW5b1883e2025-06-07 10:41:32 +0800680 padding: 25px;
Akane121765b61a72025-05-17 13:52:25 +0800681 border-radius: 8px;
682 width: 500px;
DREW5b1883e2025-06-07 10:41:32 +0800683 max-width: calc(100% - 40px);
684 box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2);
Akane121765b61a72025-05-17 13:52:25 +0800685 position: relative;
DREW5b1883e2025-06-07 10:41:32 +0800686 margin: 20px auto; /* 添加一些外边距 */
687 max-height: 90vh; /* 限制最大高度 */
688 overflow-y: auto; /* 允许内容滚动 */
Akane121765b61a72025-05-17 13:52:25 +0800689}
690
DREW5b1883e2025-06-07 10:41:32 +0800691/* 针对移动端的调整 */
692@media (max-width: 576px) {
693 .post-modal {
694 padding: 20px 15px;
695 width: 100%;
696 margin: 10px;
697 }
Akane121765b61a72025-05-17 13:52:25 +0800698}
699
DREW5b1883e2025-06-07 10:41:32 +0800700/* 确保模态框关闭按钮在最上层 */
Akane121765b61a72025-05-17 13:52:25 +0800701.modal-close-btn {
702 position: absolute;
DREW5b1883e2025-06-07 10:41:32 +0800703 top: 15px;
704 right: 15px;
Akane121765b61a72025-05-17 13:52:25 +0800705 background: none;
706 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800707 font-size: 22px;
708 color: #888;
Akane121765b61a72025-05-17 13:52:25 +0800709 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800710 transition: all 0.2s;
711 z-index: 1;
Akane121765b61a72025-05-17 13:52:25 +0800712}
713
714.modal-close-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800715 color: #555;
716 transform: rotate(90deg);
Akane121765b61a72025-05-17 13:52:25 +0800717}
718
719/* 表单样式 */
720.form-group {
DREW5b1883e2025-06-07 10:41:32 +0800721 margin-bottom: 18px;
Akane121765b61a72025-05-17 13:52:25 +0800722}
723
724.form-group label {
725 display: block;
726 margin-bottom: 8px;
DREW5b1883e2025-06-07 10:41:32 +0800727 font-weight: 600;
728 color: #555;
729 font-size: 14px;
Akane121765b61a72025-05-17 13:52:25 +0800730}
731
732.form-group input[type="text"],
DREW5b1883e2025-06-07 10:41:32 +0800733.form-group input[type="file"],
734.form-group select,
Akane121765b61a72025-05-17 13:52:25 +0800735.form-group textarea {
736 width: 100%;
DREW5b1883e2025-06-07 10:41:32 +0800737 padding: 10px 12px;
738 border: 1px solid #ddd;
739 border-radius: 6px;
Akane121765b61a72025-05-17 13:52:25 +0800740 font-size: 14px;
DREW5b1883e2025-06-07 10:41:32 +0800741 transition: all 0.2s;
742}
743
744.form-group input[type="text"]:focus,
745.form-group select:focus,
746.form-group textarea:focus {
747 border-color: #1e3c72;
748 box-shadow: 0 0 0 2px rgba(30, 60, 114, 0.2);
Akane121765b61a72025-05-17 13:52:25 +0800749}
750
751.form-group textarea {
DREW5b1883e2025-06-07 10:41:32 +0800752 min-height: 100px;
Akane121765b61a72025-05-17 13:52:25 +0800753 resize: vertical;
754}
755
Akane121765b61a72025-05-17 13:52:25 +0800756.form-actions {
757 display: flex;
758 justify-content: flex-end;
DREW5b1883e2025-06-07 10:41:32 +0800759 gap: 12px;
760 margin-top: 25px;
Akane121765b61a72025-05-17 13:52:25 +0800761}
762
763.cancel-btn {
DREW5b1883e2025-06-07 10:41:32 +0800764 padding: 10px 18px;
Akane121765b61a72025-05-17 13:52:25 +0800765 background-color: #f5f5f5;
DREW5b1883e2025-06-07 10:41:32 +0800766 color: #555;
Akane121765b61a72025-05-17 13:52:25 +0800767 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800768 border-radius: 6px;
769 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800770 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800771 transition: all 0.2s;
Akane121765b61a72025-05-17 13:52:25 +0800772}
773
774.cancel-btn:hover {
DREW5b1883e2025-06-07 10:41:32 +0800775 background-color: #e0e0e0;
Akane121765b61a72025-05-17 13:52:25 +0800776}
777
DREW5b1883e2025-06-07 10:41:32 +0800778.submit-btn, .confirm-btn {
779 padding: 10px 18px;
780 background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
Akane121765b61a72025-05-17 13:52:25 +0800781 color: white;
782 border: none;
DREW5b1883e2025-06-07 10:41:32 +0800783 border-radius: 6px;
784 font-weight: 600;
Akane121765b61a72025-05-17 13:52:25 +0800785 cursor: pointer;
DREW5b1883e2025-06-07 10:41:32 +0800786 transition: all 0.2s;
Akane121765b61a72025-05-17 13:52:25 +0800787}
788
DREW5b1883e2025-06-07 10:41:32 +0800789.submit-btn:hover, .confirm-btn:hover {
790 transform: translateY(-1px);
791 box-shadow: 0 2px 8px rgba(30, 60, 114, 0.3);
Akane121765b61a72025-05-17 13:52:25 +0800792}
793
DREW5b1883e2025-06-07 10:41:32 +0800794/* 进度条样式 */
DREWae420b22025-06-02 14:07:20 +0800795.progress-container {
DREW5b1883e2025-06-07 10:41:32 +0800796 height: 10px;
797 background-color: #f0f0f0;
798 border-radius: 5px;
799 margin: 15px 0;
800 overflow: hidden;
DREWae420b22025-06-02 14:07:20 +0800801}
802
803.progress-bar {
DREW5b1883e2025-06-07 10:41:32 +0800804 height: 100%;
805 background: linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%);
806 transition: width 0.3s;
807 border-radius: 5px;
DREWae420b22025-06-02 14:07:20 +0800808}
809
DREW5b1883e2025-06-07 10:41:32 +0800810/* 加载和错误提示 */
811.loading {
Akane12173a7bb972025-06-01 01:05:27 +0800812 text-align: center;
DREW5b1883e2025-06-07 10:41:32 +0800813 padding: 30px;
814 color: #666;
Akane12173a7bb972025-06-01 01:05:27 +0800815 font-size: 16px;
816}
817
DREW5b1883e2025-06-07 10:41:32 +0800818.error {
819 text-align: center;
820 padding: 20px;
821 color: #e74c3c;
822 font-size: 16px;
823 background-color: #fdecea;
824 border-radius: 6px;
825 margin: 20px 0;
Akane12173a7bb972025-06-01 01:05:27 +0800826}
827
DREW5b1883e2025-06-07 10:41:32 +0800828/* 响应式调整 */
829@media (max-width: 768px) {
830 .top-bar {
831 padding: 10px 15px;
832 }
833
834 .nav-tabs {
835 padding: 0 15px;
836 overflow-x: auto;
837 white-space: nowrap;
838 -webkit-overflow-scrolling: touch;
839 }
840
841 .content-area {
842 padding: 15px;
843 margin: 10px;
844 }
845
846 .announcement-grid, .recommend-grid {
847 grid-template-columns: 1fr;
848 }
849
850 .resource-item {
851 flex-direction: column;
852 align-items: flex-start;
853 }
854
855 .resource-poster {
856 margin-right: 0;
857 margin-bottom: 15px;
858 }
859
860 .resource-stats {
861 margin-right: 0;
862 margin-top: 10px;
863 text-align: left;
864 width: 100%;
865 }
Akane121765b61a72025-05-17 13:52:25 +0800866}