/* 深色模式樣式表 - CSS 變數定義和主題支援 */ :root { /* 亮色主題變數(預設) */ --primary-color: #1f77b4; --secondary-color: #ff7f0e; --accent-color: #2ca02c; --bg-color: #ffffff; --surface-color: #f8f9fa; --text-color: #212529; --text-secondary-color: #6c757d; --border-color: #dee2e6; --hover-color: #e9ecef; --success-color: #28a745; --warning-color: #ffc107; --error-color: #dc3545; /* 過渡設定 */ --transition-duration: 0.3s; } /* 深色主題變數 */ [data-theme="dark"] { --primary-color: #4a9eff; --secondary-color: #ffb366; --accent-color: #66dd88; --bg-color: #1a1a1a; --surface-color: #2d2d2d; --text-color: #e8e8e8; --text-secondary-color: #a0a0a0; --border-color: #404040; --hover-color: #383838; --success-color: #4ade80; --warning-color: #facc15; --error-color: #ef4444; } /* 基礎樣式應用 */ body { background-color: var(--bg-color); color: var(--text-color); transition: background-color var(--transition-duration), color var(--transition-duration); } /* 容器和卡片 */ .container, .card, .panel { background-color: var(--surface-color); border-color: var(--border-color); color: var(--text-color); } /* 按鈕樣式 */ button, .btn { background-color: var(--primary-color); color: var(--bg-color); border: none; border-radius: 4px; padding: 8px 16px; cursor: pointer; transition: background-color var(--transition-duration), transform var(--transition-duration); } button:hover, .btn:hover { background-color: var(--accent-color); transform: translateY(-2px); } button:focus, .btn:focus { outline: 2px solid var(--accent-color); outline-offset: 2px; } /* 主題切換按鈕特定樣式 */ .theme-toggle-btn { background-color: var(--surface-color); color: var(--text-color); border: 1px solid var(--border-color); padding: 8px 12px; border-radius: 4px; cursor: pointer; font-size: 14px; transition: all var(--transition-duration); } .theme-toggle-btn:hover { background-color: var(--hover-color); border-color: var(--accent-color); } .theme-toggle-btn:focus { outline: 2px solid var(--accent-color); outline-offset: 2px; } /* 輸入欄位樣式 */ input, textarea, select { background-color: var(--surface-color); color: var(--text-color); border: 1px solid var(--border-color); padding: 8px 12px; border-radius: 4px; transition: border-color var(--transition-duration); } input:focus, textarea:focus, select:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 4px var(--accent-color); } /* 標籤和文字 */ label { color: var(--text-color); } a { color: var(--primary-color); text-decoration: none; } a:hover { color: var(--accent-color); text-decoration: underline; } /* 表格樣式 */ table { background-color: var(--surface-color); border-collapse: collapse; } th { background-color: var(--hover-color); color: var(--text-color); border-bottom: 2px solid var(--border-color); } td { border-bottom: 1px solid var(--border-color); padding: 12px; color: var(--text-color); } tr:hover { background-color: var(--hover-color); } /* 狀態顏色 */ .success { color: var(--success-color); } .warning { color: var(--warning-color); } .error { color: var(--error-color); } /* Gradio 特定樣式 */ .gradio-container { background-color: var(--bg-color) !important; } .gradio-textbox, .gradio-number, .gradio-slider { background-color: var(--surface-color) !important; color: var(--text-color) !important; border-color: var(--border-color) !important; } .gradio-button { background-color: var(--primary-color) !important; color: var(--bg-color) !important; border: none !important; } .gradio-button:hover { background-color: var(--accent-color) !important; } /* 禁用狀態 */ button:disabled, input:disabled, select:disabled { opacity: 0.5; cursor: not-allowed; } /* 無障礙 - 焦點可視化 */ :focus-visible { outline: 2px solid var(--accent-color); outline-offset: 2px; } /* 平滑過渡 */ * { transition: background-color var(--transition-duration), color var(--transition-duration), border-color var(--transition-duration); } /* 尊重系統深色模式偏好 */ @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --primary-color: #4a9eff; --secondary-color: #ffb366; --accent-color: #66dd88; --bg-color: #1a1a1a; --surface-color: #2d2d2d; --text-color: #e8e8e8; --text-secondary-color: #a0a0a0; --border-color: #404040; --hover-color: #383838; --success-color: #4ade80; --warning-color: #facc15; --error-color: #ef4444; } }