diff --git a/app/static/js/config_editor.js b/app/static/js/config_editor.js index 34ac593..b2c4467 100644 --- a/app/static/js/config_editor.js +++ b/app/static/js/config_editor.js @@ -1302,27 +1302,28 @@ function handleBulkDeleteVertexApiKeys() { * @param {string} tabId - The ID of the tab to switch to. */ function switchTab(tabId) { + console.log(`Switching to tab: ${tabId}`); + + // 定义选中态和未选中态的样式 + const activeStyle = "background-color: #3b82f6 !important; color: #ffffff !important; border: 2px solid #2563eb !important; box-shadow: 0 4px 12px -2px rgba(59, 130, 246, 0.4), 0 2px 6px -1px rgba(59, 130, 246, 0.2) !important; transform: translateY(-2px) !important; font-weight: 600 !important;"; + const inactiveStyle = "background-color: #f8fafc !important; color: #64748b !important; border: 2px solid #e2e8f0 !important; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1) !important; font-weight: 500 !important; transform: none !important;"; + // 更新标签按钮状态 const tabButtons = document.querySelectorAll(".tab-btn"); + console.log(`Found ${tabButtons.length} tab buttons`); + tabButtons.forEach((button) => { - if (button.getAttribute("data-tab") === tabId) { - // 激活状态:主色背景,白色文字,添加阴影 - button.classList.remove( - "bg-white", - "bg-opacity-50", - "text-gray-700", - "hover:bg-opacity-70" - ); - button.classList.add("bg-primary-600", "text-white", "shadow-md"); + const buttonTabId = button.getAttribute("data-tab"); + if (buttonTabId === tabId) { + // 激活状态:直接设置内联样式 + button.classList.add("active"); + button.setAttribute("style", activeStyle); + console.log(`Applied active style to button: ${buttonTabId}`); } else { - // 非激活状态:白色背景,灰色文字,无阴影 - button.classList.remove("bg-primary-600", "text-white", "shadow-md"); - button.classList.add( - "bg-white", - "bg-opacity-50", - "text-gray-700", - "hover:bg-opacity-70" - ); + // 非激活状态:直接设置内联样式 + button.classList.remove("active"); + button.setAttribute("style", inactiveStyle); + console.log(`Applied inactive style to button: ${buttonTabId}`); } }); @@ -1450,9 +1451,9 @@ function addArrayItemWithValue(key, value) { const inputWrapper = document.createElement("div"); inputWrapper.className = - "flex items-center flex-grow rounded-md focus-within:border-violet-400 focus-within:ring focus-within:ring-violet-400 focus-within:ring-opacity-50"; - // Apply themed border directly via style, and ensure it has a border - inputWrapper.style.border = "1px solid rgba(120, 100, 200, 0.5)"; + "flex items-center flex-grow rounded-md focus-within:border-blue-500 focus-within:ring focus-within:ring-blue-500 focus-within:ring-opacity-50"; + // Apply light theme border directly via style + inputWrapper.style.border = "1px solid rgba(0, 0, 0, 0.12)"; inputWrapper.style.backgroundColor = "transparent"; // Ensure wrapper is transparent const input = createArrayInput( @@ -2095,7 +2096,7 @@ function renderModelsInModal() { modelItemElement.type = "button"; modelItemElement.textContent = model.id; modelItemElement.className = - "block w-full text-left px-4 py-2 rounded-md hover:bg-violet-700 focus:bg-violet-700 focus:outline-none transition-colors text-gray-200"; + "block w-full text-left px-4 py-2 rounded-md hover:bg-blue-100 focus:bg-blue-100 focus:outline-none transition-colors text-gray-700 hover:text-gray-800"; // Add any other classes for styling, e.g., from existing modals or array items modelItemElement.addEventListener("click", () => diff --git a/app/static/js/error_logs.js b/app/static/js/error_logs.js index 62d4c82..c1d84bb 100644 --- a/app/static/js/error_logs.js +++ b/app/static/js/error_logs.js @@ -782,29 +782,29 @@ function _createLogRowHtml(log, sequentialId) { const fullKey = log.gemini_key || ""; return ` - - + - ${sequentialId} - + ${sequentialId} + ${maskedKey} - ${log.error_type || "未知"} - ${log.error_type || "未知"} + ${errorCodeContent} - ${log.model_name || "未知"} - ${formattedTime} + ${log.model_name || "未知"} + ${formattedTime} - -

-
+ @@ -1000,7 +1435,7 @@ endblock %} {% block head_extra_styles %} id="CLOUDFLARE_IMGBED_URL" name="CLOUDFLARE_IMGBED_URL" placeholder="https://xxxxxxx.pages.dev/upload" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> Cloudflare图床的URL
@@ -1017,7 +1452,7 @@ endblock %} {% block head_extra_styles %} id="CLOUDFLARE_IMGBED_AUTH_CODE" name="CLOUDFLARE_IMGBED_AUTH_CODE" placeholder="xxxxxxxxx" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 sensitive-input form-input-themed" + class="w-full px-4 py-3 rounded-lg sensitive-input form-input-themed" /> Cloudflare图床的认证码 @@ -1026,7 +1461,7 @@ endblock %} {% block head_extra_styles %}

流式输出优化器

@@ -1068,7 +1503,7 @@ endblock %} {% block head_extra_styles %} min="0" max="1" step="0.001" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 流式输出的最小延迟时间
@@ -1087,7 +1522,7 @@ endblock %} {% block head_extra_styles %} min="0" max="1" step="0.001" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 流式输出的最大延迟时间 @@ -1105,7 +1540,7 @@ endblock %} {% block head_extra_styles %} name="STREAM_SHORT_TEXT_THRESHOLD" min="1" max="100" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 短文本的字符阈值 @@ -1123,7 +1558,7 @@ endblock %} {% block head_extra_styles %} name="STREAM_LONG_TEXT_THRESHOLD" min="1" max="1000" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 长文本的字符阈值 @@ -1141,7 +1576,7 @@ endblock %} {% block head_extra_styles %} name="STREAM_CHUNK_SIZE" min="1" max="100" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 流式输出的分块大小 @@ -1192,7 +1627,7 @@ endblock %} {% block head_extra_styles %} min="1" max="60" step="1" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 在启用假流式输出时,向客户端发送空数据以维持连接状态的时间间隔(建议 @@ -1204,7 +1639,7 @@ endblock %} {% block head_extra_styles %}

定时任务配置

@@ -1221,7 +1656,7 @@ endblock %} {% block head_extra_styles %} id="CHECK_INTERVAL_HOURS" name="CHECK_INTERVAL_HOURS" min="1" - class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 form-input-themed" + class="w-full px-4 py-3 rounded-lg form-input-themed" /> 定时检查密钥状态的间隔时间(单位:小时) 定时任务使用的时区,格式如 "Asia/Shanghai" 或 "UTC"

日志配置

@@ -1313,7 +1748,7 @@ endblock %} {% block head_extra_styles %} @@ -1375,25 +1810,20 @@ endblock %} {% block head_extra_styles %}
-
+
@@ -1421,17 +1851,17 @@ endblock %} {% block head_extra_styles %}
-

批量添加 API 密钥

+

批量添加 API 密钥

@@ -1443,7 +1873,7 @@ endblock %} {% block head_extra_styles %} id="apiKeyBulkInput" rows="10" placeholder="在此处粘贴 API 密钥..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1492,7 +1922,7 @@ endblock %} {% block head_extra_styles %} id="bulkDeleteApiKeyInput" rows="10" placeholder="在此处粘贴要删除的 API 密钥..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed focus:border-red-500 focus:ring-red-500" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1541,7 +1971,7 @@ endblock %} {% block head_extra_styles %} id="proxyBulkInput" rows="10" placeholder="在此处粘贴代理地址 (例如 http://user:pass@host:port 或 socks5://host:port)..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1590,7 +2020,7 @@ endblock %} {% block head_extra_styles %} id="bulkDeleteProxyInput" rows="10" placeholder="在此处粘贴要删除的代理地址..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed focus:border-red-500 focus:ring-red-500" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1660,17 +2090,17 @@ endblock %} {% block head_extra_styles %}
-

批量添加 Vertex API 密钥

+

批量添加 Vertex API 密钥

@@ -1682,7 +2112,7 @@ endblock %} {% block head_extra_styles %} id="vertexApiKeyBulkInput" rows="10" placeholder="在此处粘贴 Vertex API 密钥..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1731,7 +2161,7 @@ endblock %} {% block head_extra_styles %} id="bulkDeleteVertexApiKeyInput" rows="10" placeholder="在此处粘贴要删除的 Vertex API 密钥..." - class="w-full px-4 py-3 rounded-lg border font-mono text-sm form-input-themed focus:border-red-500 focus:ring-red-500" + class="w-full px-4 py-3 rounded-lg font-mono text-sm form-input-themed" >
@@ -1779,7 +2209,7 @@ endblock %} {% block head_extra_styles %} type="text" id="modelHelperSearchInput" placeholder="搜索模型..." - class="w-full px-4 py-3 mb-4 rounded-lg border font-mono text-sm form-input-themed" + class="w-full px-4 py-3 mb-4 rounded-lg font-mono text-sm form-input-themed" />
{ const value = logLevelSelect.value; - // 根据不同日志级别设置不同的样式 + // 统一使用浅色主题样式,通过轻微的边框变化来区分级别 switch (value) { case "DEBUG": - logLevelSelect.style.borderColor = "rgba(129, 140, 248, 0.8)"; - logLevelSelect.style.color = "#c7d2fe"; // indigo-200 + logLevelSelect.style.borderColor = "#3b82f6"; // blue-500 主题色 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 break; case "INFO": - logLevelSelect.style.borderColor = "rgba(96, 165, 250, 0.8)"; - logLevelSelect.style.color = "#bfdbfe"; // blue-200 + logLevelSelect.style.borderColor = "#3b82f6"; // blue-500 主题色 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 break; case "WARNING": - logLevelSelect.style.borderColor = "rgba(251, 191, 36, 0.8)"; - logLevelSelect.style.color = "#fde68a"; // amber-200 + logLevelSelect.style.borderColor = "#6b7280"; // gray-500 中性灰 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 break; case "ERROR": - logLevelSelect.style.borderColor = "rgba(239, 68, 68, 0.8)"; - logLevelSelect.style.color = "#fecaca"; // red-200 + logLevelSelect.style.borderColor = "#6b7280"; // gray-500 中性灰 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 break; case "CRITICAL": - logLevelSelect.style.borderColor = "rgba(220, 38, 38, 0.8)"; - logLevelSelect.style.color = "#fca5a5"; // red-300 + logLevelSelect.style.borderColor = "#4b5563"; // gray-600 稍深灰 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 break; default: - logLevelSelect.style.borderColor = "rgba(167, 139, 250, 0.7)"; - logLevelSelect.style.color = "#ffffff"; + logLevelSelect.style.borderColor = "rgba(0, 0, 0, 0.12)"; // 默认边框 + logLevelSelect.style.color = "#374151"; // gray-700 深灰文字 } }; @@ -1880,8 +2310,8 @@ endblock %} {% block head_extra_styles %} input.addEventListener("focus", function () { const parentItem = this.closest(".map-item"); if (parentItem) { - parentItem.style.backgroundColor = "rgba(60, 40, 130, 0.4)"; - parentItem.style.borderColor = "rgba(167, 139, 250, 0.7)"; + parentItem.style.backgroundColor = "rgba(243, 244, 246, 1)"; /* gray-100 */ + parentItem.style.borderColor = "rgba(59, 130, 246, 0.5)"; /* blue-500 */ } }); diff --git a/app/templates/error_logs.html b/app/templates/error_logs.html index 82972ef..4534e1a 100644 --- a/app/templates/error_logs.html +++ b/app/templates/error_logs.html @@ -5,13 +5,13 @@ endblock %} {% block head_extra_styles %} .styled-table th { position: sticky; top: 0; - background-color: rgba(80, 60, 160, 0.8); /* theming: table header bg */ - color: #ffffff !important; /* theming: table header text, ensured light */ + background-color: rgba(249, 250, 251, 0.95) !important; /* light gray header */ + color: #374151 !important; /* dark gray text */ z-index: 10; - border-bottom: 1px solid rgba(120, 100, 200, 0.4); + border-bottom: 1px solid rgba(0, 0, 0, 0.08); } .styled-table tbody tr:hover { - background-color: rgba(90, 70, 170, 0.4); /* theming: table row hover */ + background-color: rgba(59, 130, 246, 0.05) !important; /* light blue hover */ } .styled-table td { padding: 12px 20px; @@ -21,24 +21,25 @@ endblock %} {% block head_extra_styles %} text-overflow: ellipsis; max-width: 250px; color: #d1d5db; /* theming: table cell text (gray-300) */ - border-bottom: 1px solid rgba(120, 100, 200, 0.2); /* theming: cell border */ + border-bottom: 1px solid rgba(0, 0, 0, 0.08); /* light theme: cell border */ } .styled-table td:nth-child(4) { white-space: nowrap; } .btn-view-details { - background-color: rgba(107, 70, 193, 0.4); /* theming */ - color: #c4b5fd; /* theming */ + background-color: #3b82f6 !important; /* blue-600 for light theme */ + color: #ffffff !important; /* white text */ padding: 6px 12px; border-radius: 6px; font-weight: 500; transition: all 0.2s ease-in-out; - border: 1px solid rgba(120, 100, 200, 0.6); /* theming */ + border: 1px solid #2563eb !important; /* blue-700 border */ } .btn-view-details:hover { - background-color: rgba(120, 100, 200, 0.6); /* theming */ - color: #ede9fe; /* theming */ - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + background-color: #2563eb !important; /* blue-700 on hover */ + color: #ffffff !important; /* white text on hover */ + box-shadow: 0 4px 8px rgba(59, 130, 246, 0.3) !important; /* blue shadow */ + transform: translateY(-1px) !important; /* slight lift effect */ } @media (max-width: 768px) { .search-container { @@ -52,51 +53,67 @@ endblock %} {% block head_extra_styles %} button { height: 36px !important; } - .form-input-themed, + .form-input-themed { + background-color: rgba(255, 255, 255, 0.95) !important; + border: 1px solid rgba(0, 0, 0, 0.12) !important; + color: #374151 !important; /* gray-700 */ + box-shadow: none !important; + outline: none !important; + } + input[type="datetime-local"], select#pageSize { - background-color: rgba(255, 255, 255, 0.1) !important; - border-color: rgba(120, 100, 200, 0.5) !important; - color: #ffffff !important; + background-color: rgba(255, 255, 255, 0.95) !important; + border: 1px solid rgba(0, 0, 0, 0.12) !important; + color: #374151 !important; /* gray-700 */ + box-shadow: none !important; + outline: none !important; } .form-input-themed::placeholder, input[type="datetime-local"]::placeholder { - color: #a0aec0 !important; + color: #9ca3af !important; /* gray-400 */ } .form-input-themed:focus, input[type="datetime-local"]:focus, select#pageSize:focus { - border-color: #a78bfa !important; - box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.4) !important; + border-color: #3b82f6 !important; /* blue-500 */ + box-shadow: none !important; /* 移除focus阴影 */ + outline: none !important; } select#pageSize { - /* Styles from config_editor.html .form-select-themed, adapted for select#pageSize */ - background-color: rgba(60, 40, 130, 0.6) !important; - border: 1px solid rgba(167, 139, 250, 0.7) !important; - color: #ffffff !important; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23d8b4fe' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important; + /* Light theme pagination dropdown styling */ + background-color: rgba(255, 255, 255, 0.95) !important; + border: 1px solid rgba(0, 0, 0, 0.12) !important; + color: #374151 !important; /* gray-700 */ + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important; appearance: none !important; - padding: 0.6rem 2.5rem 0.6rem 0.8rem !important; + padding: 0.5rem 2.5rem 0.5rem 0.75rem !important; background-repeat: no-repeat !important; background-position: right 0.6rem center !important; - background-size: 1.5em 1.5em !important; - border-radius: 0.5rem !important; + background-size: 1.2em 1.2em !important; + border-radius: 0.375rem !important; font-weight: 500 !important; - height: 36px !important; /* Retain original height or use auto */ - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important; + height: auto !important; + min-height: 2.25rem !important; /* 36px equivalent */ + line-height: 1.25 !important; + display: inline-flex !important; + align-items: center !important; + vertical-align: middle !important; + box-shadow: none !important; /* 移除默认阴影 */ cursor: pointer !important; } select#pageSize:focus { - border-color: #d8b4fe !important; /* violet-300 */ - box-shadow: 0 0 0 3px rgba(216, 180, 254, 0.4) !important; /* ring-violet-300 */ + border-color: #3b82f6 !important; /* blue-500 */ + box-shadow: none !important; /* 移除focus阴影 */ outline: none !important; } select#pageSize option { - background-color: rgba(76, 29, 149, 0.95) !important; /* 暗紫色背景 */ - color: #ffffff !important; + background-color: rgba(255, 255, 255, 0.98) !important; + color: #374151 !important; /* gray-700 */ padding: 8px !important; + font-weight: 500 !important; } .date-range-container { @@ -122,17 +139,127 @@ endblock %} {% block head_extra_styles %} } .nav-link:hover { - background-color: rgba(120, 100, 200, 0.6) !important; + background-color: rgba(59, 130, 246, 0.1) !important; /* blue-500 light */ transform: translateY(-2px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } - /* Ensure text around pageSize select is light */ - .pagination-text { - color: #e2e8f0 !important; /* Light gray/white for text */ + /* Fix all purple backgrounds to light theme */ + .rounded-2xl[style*="background-color: rgba(80, 60, 160"], + .rounded-xl[style*="background-color: rgba(70, 50, 150"] { + background-color: rgba(255, 255, 255, 0.95) !important; + border-color: rgba(0, 0, 0, 0.08) !important; + } + + /* Fix navigation styling */ + .nav-link { + background-color: rgba(229, 231, 235, 0.8) !important; /* gray-200 */ + color: #374151 !important; /* gray-700 */ + transition: all 0.2s ease-in-out; + position: relative; + z-index: 1; /* 确保不会遮挡重要内容 */ + } + + .nav-link:hover { + background-color: rgba(59, 130, 246, 0.1) !important; /* blue-500 light */ + transform: scale(1.02); /* 使用缩放代替向上移动 */ + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15); /* 增强阴影效果 */ + } + + /* 导航按钮容器样式 - 为悬停效果预留空间 */ + .nav-buttons-container { + padding-top: 0.5rem; /* 为悬停效果预留上方空间 */ + padding-bottom: 0.75rem; /* 为悬停效果预留下方空间 */ + } + + /* 主导航按钮的优化悬停效果 */ + .main-nav-btn:hover { + transform: scale(1.02) !important; /* 使用缩放代替向上移动 */ + box-shadow: 0 8px 16px rgba(59, 130, 246, 0.3) !important; /* 蓝色阴影 */ + } + + .bg-violet-600 { + background-color: #3b82f6 !important; /* blue-500 */ + } + + /* Fix page title gradient */ + .text-transparent.bg-clip-text.bg-gradient-to-r.from-violet-400.to-pink-400 { + background: none !important; + color: #1f2937 !important; /* gray-800 */ + -webkit-background-clip: unset !important; + background-clip: unset !important; + } + + /* Fix section headings */ + .text-gray-100 { + color: #1f2937 !important; /* gray-800 */ + } + + .border-violet-300 { + border-color: #d1d5db !important; /* gray-300 */ + } + + .text-violet-400 { + color: #3b82f6 !important; /* blue-500 */ + } + + /* Fix text colors for light theme */ + .pagination-text, .text-gray-300 { + color: #374151 !important; /* dark gray for light theme */ font-weight: 500; } + /* Fix button colors */ + .bg-violet-600, .bg-violet-700 { + background-color: #3b82f6 !important; /* blue-500 - light blue */ + } + + .hover\\:bg-violet-700:hover { + background-color: #2563eb !important; /* blue-600 - darker light blue */ + } + + /* Override blue buttons to light blue */ + .bg-blue-600, button.bg-blue-600 { + background-color: #3b82f6 !important; /* blue-500 - light blue */ + } + + .bg-blue-600:hover, button.bg-blue-600:hover, + .hover\\:bg-blue-700:hover { + background-color: #2563eb !important; /* blue-600 - darker light blue */ + } + + /* Override red buttons to bright light red */ + .bg-red-600, button.bg-red-600, + .bg-red-700, button.bg-red-700, + .bg-red-800, button.bg-red-800 { + background-color: #f87171 !important; /* red-400 - bright light red */ + } + + .bg-red-600:hover, button.bg-red-600:hover, + .bg-red-700:hover, button.bg-red-700:hover, + .bg-red-800:hover, button.bg-red-800:hover, + .hover\\:bg-red-700:hover, .hover\\:bg-red-800:hover { + background-color: #ef4444 !important; /* red-500 - darker bright light red */ + } + + /* Fix form elements */ + .text-violet-500 { + color: #3b82f6 !important; /* blue-500 */ + } + + .focus\\:ring-violet-500:focus { + --tw-ring-color: rgba(59, 130, 246, 0.2) !important; + } + + .focus\\:border-violet-400:focus { + border-color: #3b82f6 !important; /* blue-500 */ + } + + /* Fix loading indicator */ + .border-violet-400 { + border-color: #3b82f6 !important; /* blue-500 */ + } + /* New Pagination Styles (inspired by keys_status.html) */ ul.pagination a { /* Targets the tags directly within ul.pagination */ @@ -141,10 +268,10 @@ endblock %} {% block head_extra_styles %} justify-content: center; /* Tailwind classes from JS will handle padding, border-radius, font-size, transition */ /* Defaults for non-active, non-disabled, non-hover buttons */ - background-color: rgba(80, 60, 160, 0.8); - color: #ffffff; - border: 1px solid rgba(120, 100, 200, 0.4); - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + background-color: rgba(255, 255, 255, 0.9) !important; + color: #374151 !important; /* gray-700 */ + border: 1px solid rgba(0, 0, 0, 0.08) !important; + text-shadow: none; min-width: 36px; /* Retain from original error_logs for consistency */ text-align: center; /* Retain from original error_logs for consistency */ /* Ensure base transition if not fully handled by JS's Tailwind classes */ @@ -154,49 +281,295 @@ endblock %} {% block head_extra_styles %} ul.pagination a:hover:not(.active):not(.disabled) { /* Hover for non-active, non-disabled */ - background-color: rgba( - 100, - 80, - 180, - 0.9 - ); /* Slightly lighter/more interactive purple */ - border-color: rgba(140, 120, 220, 0.7); - color: #ffffff; + background-color: rgba(229, 231, 235, 1) !important; /* gray-200 */ + border-color: rgba(0, 0, 0, 0.12) !important; + color: #374151 !important; } ul.pagination a.active { /* Active state */ - background-color: rgba(120, 100, 200, 0.9); - border-color: rgba(150, 130, 230, 0.7); - color: #ffffff; /* Ensure text is white */ + background-color: #3b82f6 !important; /* blue-500 */ + border-color: #2563eb !important; /* blue-600 */ + color: #ffffff !important; /* Ensure text is white */ font-weight: 600; /* Make active page number bolder */ cursor: default; } ul.pagination a.disabled { /* Disabled state for '...' or prev/next unavailable */ - background-color: rgba( - 80, - 60, - 160, - 0.3 - ) !important; /* Use existing disabled bg */ - color: rgba( - 226, - 232, - 240, - 0.6 - ) !important; /* Use existing disabled text color */ - border-color: rgba( - 120, - 100, - 200, - 0.4 - ) !important; /* Use existing disabled border color */ + background-color: rgba(249, 250, 251, 0.5) !important; /* light gray */ + color: rgba(156, 163, 175, 0.8) !important; /* gray-400 */ + border-color: rgba(0, 0, 0, 0.04) !important; cursor: not-allowed; pointer-events: none; text-shadow: none; } + + /* Fix modal styling - comprehensive override */ + .modal .w-full.max-w-6xl[style*="background-color: rgba(70, 50, 150"], + .modal .w-full.max-w-md[style*="background-color: rgba(70, 50, 150"] { + background-color: rgba(255, 255, 255, 0.98) !important; + color: #374151 !important; /* gray-700 */ + border-color: rgba(0, 0, 0, 0.08) !important; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important; + } + + /* Fix modal titles */ + .modal .text-gray-100, .modal h2.text-gray-100 { + color: #1f2937 !important; /* gray-800 */ + font-weight: 600 !important; + } + + /* Fix modal section labels */ + .modal .text-violet-200, .modal h6.text-violet-200 { + color: #3b82f6 !important; /* blue-500 */ + font-weight: 600 !important; + } + + /* Fix modal close buttons */ + .modal .text-gray-300 { + color: #6b7280 !important; /* gray-500 */ + } + + .modal .text-gray-300:hover { + color: #374151 !important; /* gray-700 */ + } + + /* Fix modal content areas with purple backgrounds */ + .modal [style*="background-color: rgba(80, 60, 160"] { + background-color: rgba(249, 250, 251, 0.95) !important; /* gray-50 */ + border: 1px solid rgba(0, 0, 0, 0.08) !important; + } + + /* Fix modal pre and code text */ + .modal pre, .modal code { + background-color: rgba(243, 244, 246, 0.95) !important; /* gray-100 */ + color: #374151 !important; /* gray-700 */ + border: 1px solid rgba(0, 0, 0, 0.08) !important; + } + + /* Fix modal text content */ + .modal .text-gray-200, .modal p.text-gray-200 { + color: #374151 !important; /* gray-700 */ + } + + /* Fix modal error text */ + .modal .text-red-300 { + color: #dc2626 !important; /* red-600 */ + font-weight: 500 !important; + } + + /* Fix modal button styling */ + .modal .bg-gray-500, .modal button.bg-gray-500 { + background-color: #6b7280 !important; /* gray-500 */ + color: #ffffff !important; + border: 1px solid #4b5563 !important; /* gray-600 */ + } + + .modal .bg-gray-500:hover, .modal button.bg-gray-500:hover { + background-color: #4b5563 !important; /* gray-600 */ + transform: translateY(-1px) !important; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important; + } + + /* Fix modal red/danger buttons */ + .modal .bg-red-600, .modal button.bg-red-600 { + background-color: #dc2626 !important; /* red-600 */ + color: #ffffff !important; + border: 1px solid #b91c1c !important; /* red-700 */ + } + + .modal .bg-red-600:hover, .modal button.bg-red-600:hover { + background-color: #b91c1c !important; /* red-700 */ + transform: translateY(-1px) !important; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important; + } + + /* Fix modal copy buttons */ + .modal .copy-btn { + background-color: rgba(107, 114, 128, 0.8) !important; /* gray-500 with opacity */ + color: #ffffff !important; + border: 1px solid rgba(75, 85, 99, 0.8) !important; /* gray-600 with opacity */ + } + + .modal .copy-btn:hover { + background-color: rgba(75, 85, 99, 0.9) !important; /* gray-600 with opacity */ + transform: translateY(-1px) !important; + } + + /* 表格内容文字颜色修复 */ + .styled-table tbody td { + color: #374151 !important; /* gray-700 for light theme */ + } + + .styled-table tbody tr:hover td { + color: #1f2937 !important; /* gray-800 for better contrast on hover */ + } + + /* 表格头部文字颜色 */ + .styled-table thead th { + color: #374151 !important; /* gray-700 for light theme */ + } + + /* 状态指示器文字颜色 */ + .text-gray-300 { + color: #6b7280 !important; /* gray-500 for light theme */ + } + + .text-gray-400 { + color: #9ca3af !important; /* gray-400 for light theme */ + } + + /* 分页文字颜色和对齐 */ + .pagination-text { + color: #374151 !important; /* gray-700 for light theme */ + display: inline-flex !important; + align-items: center !important; + line-height: 1.25 !important; + vertical-align: middle !important; + } + + /* 分页容器对齐优化 */ + .pagination-container { + display: flex !important; + align-items: center !important; + gap: 0.5rem !important; + } + + .pagination-container > * { + display: inline-flex !important; + align-items: center !important; + vertical-align: middle !important; + } + + /* Comprehensive button text color fixes */ + .bg-blue-500, .bg-blue-600, .bg-blue-700, + .bg-red-500, .bg-red-600, .bg-red-700, .bg-red-800, + .bg-green-500, .bg-green-600, .bg-green-700, + .bg-sky-500, .bg-sky-600, .bg-sky-700, + .bg-purple-500, .bg-purple-600, .bg-purple-700, + .bg-violet-500, .bg-violet-600, .bg-violet-700 { + color: #ffffff !important; + } + + /* Ensure button children inherit white text */ + .bg-blue-500 *, .bg-blue-600 *, .bg-blue-700 *, + .bg-red-500 *, .bg-red-600 *, .bg-red-700 *, .bg-red-800 *, + .bg-green-500 *, .bg-green-600 *, .bg-green-700 *, + .bg-sky-500 *, .bg-sky-600 *, .bg-sky-700 *, + .bg-purple-500 *, .bg-purple-600 *, .bg-purple-700 *, + .bg-violet-500 *, .bg-violet-600 *, .bg-violet-700 * { + color: inherit !important; + } + + /* Fix primary color focus states - convert purple to blue */ + .focus\\:border-primary-500:focus, + .focus\\:border-primary-600:focus { + border-color: #3b82f6 !important; /* blue-500 */ + } + + .focus\\:ring-primary-200:focus, + .focus\\:ring-primary-300:focus { + --tw-ring-color: rgba(59, 130, 246, 0.2) !important; /* blue-500 with opacity */ + } + + /* Override any remaining primary colors */ + .text-primary-600, .text-primary-500 { + color: #3b82f6 !important; /* blue-500 */ + } + + .bg-primary-600, .bg-primary-500 { + background-color: #3b82f6 !important; /* blue-500 */ + } + + .bg-primary-700:hover, .hover\\:bg-primary-700:hover { + background-color: #2563eb !important; /* blue-600 */ + } + + /* Fix modal button colors - specific overrides for error_logs.html */ + /* Red buttons in modals */ + .bg-red-600, button.bg-red-600, + .bg-red-700, button.bg-red-700 { + background-color: #f87171 !important; /* red-400 - bright light red */ + } + + .bg-red-600:hover, button.bg-red-600:hover, + .bg-red-700:hover, button.bg-red-700:hover, + .hover\\:bg-red-700:hover { + background-color: #ef4444 !important; /* red-500 - darker bright light red */ + } + + /* Gray buttons in modals (cancel buttons) */ + .bg-gray-500, button.bg-gray-500, + .bg-gray-600, button.bg-gray-600 { + background-color: #e5e7eb !important; /* gray-200 - light gray */ + color: #374151 !important; /* gray-700 - dark text for contrast */ + } + + .bg-gray-500:hover, button.bg-gray-500:hover, + .bg-gray-600:hover, button.bg-gray-600:hover, + .hover\\:bg-gray-600:hover { + background-color: #d1d5db !important; /* gray-300 - darker light gray */ + color: #374151 !important; /* gray-700 - dark text for contrast */ + } + + /* Blue buttons in modals */ + .bg-blue-600, button.bg-blue-600, + .bg-blue-700, button.bg-blue-700 { + background-color: #3b82f6 !important; /* blue-500 - light blue */ + } + + .bg-blue-600:hover, button.bg-blue-600:hover, + .bg-blue-700:hover, button.bg-blue-700:hover, + .hover\\:bg-blue-700:hover { + background-color: #2563eb !important; /* blue-600 - darker light blue */ + } + + /* Sky buttons in modals */ + .bg-sky-600, button.bg-sky-600, + .bg-sky-700, button.bg-sky-700 { + background-color: #3b82f6 !important; /* blue-500 - light blue (change sky to light blue) */ + } + + .bg-sky-600:hover, button.bg-sky-600:hover, + .bg-sky-700:hover, button.bg-sky-700:hover, + .hover\\:bg-sky-700:hover { + background-color: #2563eb !important; /* blue-600 - darker light blue */ + } + + /* Specific fixes for delete confirmation modal buttons */ + #deleteConfirmModal .bg-red-600, #deleteConfirmModal button.bg-red-600 { + background-color: #f87171 !important; /* red-400 - bright light red */ + color: #ffffff !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; + } + + #deleteConfirmModal .bg-red-600:hover, #deleteConfirmModal button.bg-red-600:hover { + background-color: #ef4444 !important; /* red-500 - darker bright light red */ + } + + #deleteConfirmModal .bg-gray-500, #deleteConfirmModal button.bg-gray-500 { + background-color: #e5e7eb !important; /* gray-200 - light gray */ + color: #374151 !important; /* gray-700 - dark text for contrast */ + display: flex !important; + align-items: center !important; + justify-content: center !important; + } + + #deleteConfirmModal .bg-gray-500:hover, #deleteConfirmModal button.bg-gray-500:hover { + background-color: #d1d5db !important; /* gray-300 - darker light gray */ + color: #374151 !important; /* gray-700 - dark text for contrast */ + } + + /* Ensure all modal buttons have proper text centering */ + .modal button { + display: flex !important; + align-items: center !important; + justify-content: center !important; + text-align: center !important; + } {% endblock %} {% block content %}
@@ -210,7 +583,7 @@ endblock %} {% block head_extra_styles %} " >

-
+ @@ -313,7 +687,7 @@ endblock %} {% block head_extra_styles %}
@@ -344,7 +718,7 @@ endblock %} {% block head_extra_styles %}
@@ -355,22 +729,22 @@ endblock %} {% block head_extra_styles %} - - - - - + + + + + @@ -379,7 +753,7 @@ endblock %} {% block head_extra_styles %} @@ -392,12 +766,12 @@ endblock %} {% block head_extra_styles %} class="flex items-center justify-center p-8 hidden" >
-

加载中,请稍候...

+

加载中,请稍候...

- @@ -1106,23 +1459,24 @@ endblock %} {% block head_extra_styles %} id="invalidBatchActions" class="p-3 border-t hidden flex items-center flex-wrap gap-3" style=" - background-color: rgba(80, 60, 160, 0.8); - border-color: rgba(120, 100, 200, 0.4); + background-color: rgba(249, 250, 251, 0.95); + border-color: rgba(0, 0, 0, 0.08); " > - 已选择 0 @@ -1308,9 +1663,9 @@ endblock %} {% block head_extra_styles %}
@@ -1318,8 +1673,7 @@ endblock %} {% block head_extra_styles %} class="text-lg font-semibold" id="verifyModalTitle" style=" - color: #ffffff; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + color: #1f2937; font-weight: 600; " > @@ -1327,24 +1681,25 @@ endblock %} {% block head_extra_styles %}
-

+

@@ -1360,9 +1715,9 @@ endblock %} {% block head_extra_styles %}
@@ -1370,8 +1725,7 @@ endblock %} {% block head_extra_styles %} class="text-lg font-semibold" id="deleteConfirmModalTitle" style=" - color: #ffffff; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + color: #1f2937; font-weight: 600; " > @@ -1379,18 +1733,19 @@ endblock %} {% block head_extra_styles %}
-

+

@@ -1412,9 +1767,9 @@ endblock %} {% block head_extra_styles %}
@@ -1422,8 +1777,7 @@ endblock %} {% block head_extra_styles %} class="text-lg font-semibold" id="singleKeyDeleteConfirmModalTitle" style=" - color: #ffffff; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + color: #1f2937; font-weight: 600; " > @@ -1431,18 +1785,19 @@ endblock %} {% block head_extra_styles %}
-

+

@@ -1542,7 +1897,7 @@ endblock %} {% block head_extra_styles %}
@@ -1587,7 +1942,7 @@ endblock %} {% block head_extra_styles %}
ID Gemini密钥错误类型错误码模型名称请求时间Gemini密钥错误类型错误码模型名称请求时间 操作