Commit
·
17be659
1
Parent(s):
0d65580
🌙 统一采用暗色主题设计 - GitHub风格
Browse files🎨 完整暗色主题设计:
1. **全局色彩系统**
- 主背景: #0d1117 (GitHub深色)
- 表面色: #161b22 (卡片背景)
- 次级表面: #21262d (输入框等)
- 边框色: #30363d / #21262d
- 主色调: #0969da (GitHub蓝)
- 文本色: #f0f6fc (主要) / #8b949e (次要)
2. **组件样式统一**
- 所有输入框、下拉框、音频组件使用暗色背景
- 统一12px圆角设计
- hover效果带有蓝色边框和阴影
- 按钮采用主品牌色配色方案
3. **Gradio主题定制**
- 使用 gr.themes.Base 创建自定义暗色主题
- 覆盖默认配色为GitHub暗色风格
- 自定义CSS进一步精细化样式控制
4. **视觉层次优化**
- 卡片hover效果: 上移 + 蓝色边框 + 增强阴影
- 按钮渐变hover效果: 颜色变化 + 位移 + 阴影
- 折叠面板、文本、代码块统一暗色处理
5. **护眼体验**
- 深色背景减少眼部疲劳
- 合适的对比度确保文字清晰可读
- 现代化的视觉感受
🔧 技术实现:
- CSS变量系统便于主题维护
- Gradio原生主题 + 自定义CSS双重保障
- 全面覆盖所有UI组件的样式重置
现在整个界面呈现统一的现代暗色风格,视觉体验更加一致和舒适!
app.py
CHANGED
@@ -402,20 +402,26 @@ def generate_dialogue_audio(
|
|
402 |
# =========================
|
403 |
|
404 |
def create_space_ui() -> gr.Blocks:
|
405 |
-
# Apple-inspired
|
406 |
custom_css = """
|
407 |
-
/* 全局样式 - Apple
|
408 |
.gradio-container {
|
409 |
max-width: 1400px !important;
|
410 |
margin: 0 auto !important;
|
411 |
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif !important;
|
412 |
-
background: #
|
413 |
-
--primary-color: #
|
414 |
-
--
|
415 |
-
--
|
416 |
-
--
|
417 |
-
--
|
418 |
-
--
|
|
|
|
|
|
|
|
|
|
|
|
|
419 |
--radius: 12px;
|
420 |
}
|
421 |
/* 主标题区域 */
|
@@ -442,50 +448,137 @@ def create_space_ui() -> gr.Blocks:
|
|
442 |
color: var(--text-secondary);
|
443 |
font-weight: 400;
|
444 |
}
|
|
|
445 |
.section {
|
446 |
-
background:
|
447 |
-
|
448 |
-
|
449 |
-
border: 1px solid
|
450 |
-
margin
|
451 |
-
box-shadow:
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
}
|
|
|
453 |
.quick-btn {
|
454 |
-
background:
|
455 |
border: none !important;
|
456 |
-
color:
|
457 |
font-weight: 600 !important;
|
458 |
-
border-radius:
|
459 |
-
|
|
|
460 |
}
|
461 |
.quick-btn:hover {
|
462 |
-
|
463 |
-
|
|
|
464 |
}
|
465 |
.generate-btn {
|
466 |
-
background:
|
467 |
border: none !important;
|
468 |
-
color:
|
469 |
font-weight: 700 !important;
|
470 |
font-size: 1.1rem !important;
|
471 |
-
border-radius:
|
472 |
padding: 1rem 2rem !important;
|
473 |
width: 100% !important;
|
474 |
-
transition: all 0.
|
|
|
475 |
}
|
476 |
.generate-btn:hover {
|
477 |
-
|
478 |
-
|
|
|
479 |
}
|
480 |
.speaker-section {
|
481 |
-
background:
|
482 |
padding: 1.5rem;
|
483 |
-
border-radius:
|
484 |
-
border:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
}
|
486 |
"""
|
487 |
|
488 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
489 |
gr.HTML(
|
490 |
"""
|
491 |
<div class="header">
|
|
|
402 |
# =========================
|
403 |
|
404 |
def create_space_ui() -> gr.Blocks:
|
405 |
+
# Apple-inspired 暗色主题设计
|
406 |
custom_css = """
|
407 |
+
/* 全局样式 - Apple暗色风格 */
|
408 |
.gradio-container {
|
409 |
max-width: 1400px !important;
|
410 |
margin: 0 auto !important;
|
411 |
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif !important;
|
412 |
+
background: #0d1117 !important;
|
413 |
+
--primary-color: #0969da;
|
414 |
+
--primary-hover: #1f6feb;
|
415 |
+
--surface-color: #161b22;
|
416 |
+
--surface-secondary: #21262d;
|
417 |
+
--border-color: #30363d;
|
418 |
+
--border-secondary: #21262d;
|
419 |
+
--text-primary: #f0f6fc;
|
420 |
+
--text-secondary: #8b949e;
|
421 |
+
--text-muted: #656d76;
|
422 |
+
--success-color: #238636;
|
423 |
+
--shadow: 0 4px 16px rgba(0,0,0,0.4);
|
424 |
+
--shadow-elevated: 0 8px 32px rgba(0,0,0,0.6);
|
425 |
--radius: 12px;
|
426 |
}
|
427 |
/* 主标题区域 */
|
|
|
448 |
color: var(--text-secondary);
|
449 |
font-weight: 400;
|
450 |
}
|
451 |
+
/* 卡片组件 - 暗色主题 */
|
452 |
.section {
|
453 |
+
background: var(--surface-color);
|
454 |
+
border-radius: var(--radius);
|
455 |
+
padding: 2rem;
|
456 |
+
border: 1px solid var(--border-color);
|
457 |
+
margin: 1rem 0;
|
458 |
+
box-shadow: var(--shadow);
|
459 |
+
transition: all 0.2s ease;
|
460 |
+
}
|
461 |
+
.section:hover {
|
462 |
+
box-shadow: var(--shadow-elevated);
|
463 |
+
transform: translateY(-2px);
|
464 |
+
border-color: var(--primary-color);
|
465 |
}
|
466 |
+
/* 按钮样式 - 暗色主题 */
|
467 |
.quick-btn {
|
468 |
+
background: var(--primary-color) !important;
|
469 |
border: none !important;
|
470 |
+
color: var(--text-primary) !important;
|
471 |
font-weight: 600 !important;
|
472 |
+
border-radius: var(--radius) !important;
|
473 |
+
padding: 0.875rem 2rem !important;
|
474 |
+
transition: all 0.2s ease !important;
|
475 |
}
|
476 |
.quick-btn:hover {
|
477 |
+
background: var(--primary-hover) !important;
|
478 |
+
transform: translateY(-1px) !important;
|
479 |
+
box-shadow: 0 8px 24px rgba(9,105,218,0.4) !important;
|
480 |
}
|
481 |
.generate-btn {
|
482 |
+
background: var(--primary-color) !important;
|
483 |
border: none !important;
|
484 |
+
color: var(--text-primary) !important;
|
485 |
font-weight: 700 !important;
|
486 |
font-size: 1.1rem !important;
|
487 |
+
border-radius: var(--radius) !important;
|
488 |
padding: 1rem 2rem !important;
|
489 |
width: 100% !important;
|
490 |
+
transition: all 0.2s ease !important;
|
491 |
+
box-shadow: var(--shadow) !important;
|
492 |
}
|
493 |
.generate-btn:hover {
|
494 |
+
background: var(--primary-hover) !important;
|
495 |
+
transform: translateY(-2px) !important;
|
496 |
+
box-shadow: var(--shadow-elevated) !important;
|
497 |
}
|
498 |
.speaker-section {
|
499 |
+
background: var(--surface-secondary);
|
500 |
padding: 1.5rem;
|
501 |
+
border-radius: var(--radius);
|
502 |
+
border: 1px solid var(--border-color);
|
503 |
+
}
|
504 |
+
|
505 |
+
/* Gradio 组件暗色主题覆盖 */
|
506 |
+
.gradio-container .gr-textbox,
|
507 |
+
.gradio-container .gr-textarea,
|
508 |
+
.gradio-container .gr-dropdown,
|
509 |
+
.gradio-container .gr-audio,
|
510 |
+
.gradio-container .gr-slider,
|
511 |
+
.gradio-container .gr-checkbox,
|
512 |
+
.gradio-container .gr-accordion {
|
513 |
+
background: var(--surface-color) !important;
|
514 |
+
border: 1px solid var(--border-color) !important;
|
515 |
+
color: var(--text-primary) !important;
|
516 |
+
border-radius: var(--radius) !important;
|
517 |
+
}
|
518 |
+
|
519 |
+
.gradio-container .gr-textbox:focus,
|
520 |
+
.gradio-container .gr-textarea:focus,
|
521 |
+
.gradio-container .gr-dropdown:focus {
|
522 |
+
border-color: var(--primary-color) !important;
|
523 |
+
box-shadow: 0 0 0 3px rgba(9,105,218,0.2) !important;
|
524 |
+
}
|
525 |
+
|
526 |
+
/* 文本和标签暗色主题 */
|
527 |
+
.gradio-container .gr-markdown,
|
528 |
+
.gradio-container .gr-markdown *,
|
529 |
+
.gradio-container label,
|
530 |
+
.gradio-container p,
|
531 |
+
.gradio-container span {
|
532 |
+
color: var(--text-primary) !important;
|
533 |
+
}
|
534 |
+
|
535 |
+
.gradio-container .gr-markdown code {
|
536 |
+
background: var(--surface-secondary) !important;
|
537 |
+
color: var(--text-primary) !important;
|
538 |
+
border-radius: 4px !important;
|
539 |
+
padding: 2px 6px !important;
|
540 |
+
}
|
541 |
+
|
542 |
+
/* 按钮统一暗色主题 */
|
543 |
+
.gradio-container .gr-button {
|
544 |
+
background: var(--surface-color) !important;
|
545 |
+
border: 1px solid var(--border-color) !important;
|
546 |
+
color: var(--text-primary) !important;
|
547 |
+
border-radius: var(--radius) !important;
|
548 |
+
}
|
549 |
+
|
550 |
+
.gradio-container .gr-button:hover {
|
551 |
+
background: var(--surface-secondary) !important;
|
552 |
+
border-color: var(--primary-color) !important;
|
553 |
+
}
|
554 |
+
|
555 |
+
.gradio-container .gr-button.primary {
|
556 |
+
background: var(--primary-color) !important;
|
557 |
+
border: none !important;
|
558 |
+
color: var(--text-primary) !important;
|
559 |
+
}
|
560 |
+
|
561 |
+
.gradio-container .gr-button.primary:hover {
|
562 |
+
background: var(--primary-hover) !important;
|
563 |
}
|
564 |
"""
|
565 |
|
566 |
+
# 创建暗色主题
|
567 |
+
dark_theme = gr.themes.Base(
|
568 |
+
primary_hue="blue",
|
569 |
+
secondary_hue="gray",
|
570 |
+
neutral_hue="gray",
|
571 |
+
).set(
|
572 |
+
background_fill_primary="#0d1117",
|
573 |
+
background_fill_secondary="#161b22",
|
574 |
+
border_color_primary="#30363d",
|
575 |
+
border_color_secondary="#21262d",
|
576 |
+
color_accent_soft="#0969da",
|
577 |
+
text_color_primary="#f0f6fc",
|
578 |
+
text_color_secondary="#8b949e",
|
579 |
+
)
|
580 |
+
|
581 |
+
with gr.Blocks(css=custom_css, title="🎙️ MOSS-TTSD | Hugging Face Space", theme=dark_theme) as demo:
|
582 |
gr.HTML(
|
583 |
"""
|
584 |
<div class="header">
|