Files
gemini-banlancer/web/static/css/input_old.css
2025-11-20 12:24:05 +08:00

2348 lines
73 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@tailwind base;
@tailwind components;
@tailwind utilities;
/* 自定义样式文件: status-grid */
#poolGridContainer {
position: relative; /* 仅用于定位内部的Canvas */
}
#poolGridContainer canvas {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* [核心UI修复] 为 Font Awesome 的 fa-spin 类,注入旋转动画 */
.fa-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
/* ***base*** */
.glass-card {
background: rgba(255, 255, 255, 0.95); /* High opacity white for light theme */
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(0, 0, 0, 0.08); /* Light gray border */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.bg-gradient {
background: #ffffff; /* Clean white background */
}
/* Scrollbar styling */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: rgba(243, 244, 246, 0.8); /* bg-gray-100 with opacity */
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: rgba(107, 114, 128, 0.6); /* gray-500 for light theme */
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(75, 85, 99, 0.8); /* gray-600 for light theme */
}
/* Basic modal styles */
.modal {
display: none;
position: fixed;
z-index: 50;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
backdrop-filter: blur(4px);
}
.modal.show {
display: flex;
align-items: center;
justify-content: center;
}
/* Global modal content styling for light theme consistency */
.modal .w-full[style*="background-color: rgba(70, 50, 150"],
.modal .w-full[style*="background-color: rgba(80, 60, 160"] {
background-color: rgba(255, 255, 255, 0.98) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid 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;
}
/* Global modal text color fixes */
.modal .text-gray-100, .modal h2.text-gray-100, .modal h3.text-gray-100 {
color: #1f2937 !important; /* gray-800 */
font-weight: 600 !important;
}
.modal .text-gray-200, .modal .text-gray-300 {
color: #6b7280 !important; /* gray-500 */
}
.modal .text-gray-300:hover {
color: #374151 !important; /* gray-700 */
}
/* Global modal button styling */
.modal .bg-violet-600, .modal button.bg-violet-600 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
}
.modal .bg-violet-600:hover, .modal button.bg-violet-600:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Global modal blue button styling */
.modal .bg-blue-500, .modal button.bg-blue-500,
.modal .bg-blue-600, .modal button.bg-blue-600,
.modal .bg-blue-700, .modal button.bg-blue-700 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
}
.modal .bg-blue-500:hover, .modal button.bg-blue-500:hover,
.modal .bg-blue-600:hover, .modal button.bg-blue-600:hover,
.modal .bg-blue-700:hover, .modal button.bg-blue-700:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Global modal red button styling */
.modal .bg-red-500, .modal button.bg-red-500,
.modal .bg-red-600, .modal button.bg-red-600,
.modal .bg-red-700, .modal button.bg-red-700 {
background-color: #f87171 !important; /* red-400 - bright light red */
color: #ffffff !important;
}
.modal .bg-red-500:hover, .modal button.bg-red-500:hover,
.modal .bg-red-600:hover, .modal button.bg-red-600:hover,
.modal .bg-red-700:hover, .modal button.bg-red-700:hover {
background-color: #ef4444 !important; /* red-500 - darker bright light red */
}
/* Global modal gray button styling */
.modal .bg-gray-500, .modal button.bg-gray-500,
.modal .bg-gray-600, .modal button.bg-gray-600,
.modal .bg-gray-700, .modal button.bg-gray-700 {
background-color: #e5e7eb !important; /* gray-200 - light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
.modal .bg-gray-500:hover, .modal button.bg-gray-500:hover,
.modal .bg-gray-600:hover, .modal button.bg-gray-600:hover,
.modal .bg-gray-700:hover, .modal button.bg-gray-700:hover {
background-color: #d1d5db !important; /* gray-300 - darker light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
/* Comprehensive button contrast fixes */
/* Ensure all dark background buttons have white text */
.bg-blue-500, .bg-blue-600, .bg-blue-700, .bg-blue-800, .bg-blue-900,
.bg-red-500, .bg-red-600, .bg-red-700, .bg-red-800, .bg-red-900,
.bg-green-500, .bg-green-600, .bg-green-700, .bg-green-800, .bg-green-900,
.bg-purple-500, .bg-purple-600, .bg-purple-700, .bg-purple-800, .bg-purple-900,
.bg-indigo-500, .bg-indigo-600, .bg-indigo-700, .bg-indigo-800, .bg-indigo-900,
.bg-violet-500, .bg-violet-600, .bg-violet-700, .bg-violet-800, .bg-violet-900,
.bg-sky-500, .bg-sky-600, .bg-sky-700, .bg-sky-800, .bg-sky-900,
.bg-teal-500, .bg-teal-600, .bg-teal-700, .bg-teal-800, .bg-teal-900,
.bg-gray-700, .bg-gray-800, .bg-gray-900,
.bg-slate-500, .bg-slate-600, .bg-slate-700, .bg-slate-800, .bg-slate-900 {
color: #ffffff !important;
}
/* Ensure all light background buttons have dark text */
.bg-gray-50, .bg-gray-100, .bg-gray-200, .bg-gray-300,
.bg-white, .bg-transparent {
color: #374151 !important; /* gray-700 */
}
/* Fix button children text inheritance */
.bg-blue-500 *, .bg-blue-600 *, .bg-blue-700 *, .bg-blue-800 *, .bg-blue-900 *,
.bg-red-500 *, .bg-red-600 *, .bg-red-700 *, .bg-red-800 *, .bg-red-900 *,
.bg-green-500 *, .bg-green-600 *, .bg-green-700 *, .bg-green-800 *, .bg-green-900 *,
.bg-purple-500 *, .bg-purple-600 *, .bg-purple-700 *, .bg-purple-800 *, .bg-purple-900 *,
.bg-violet-500 *, .bg-violet-600 *, .bg-violet-700 *, .bg-violet-800 *, .bg-violet-900 *,
.bg-sky-500 *, .bg-sky-600 *, .bg-sky-700 *, .bg-sky-800 *, .bg-sky-900 *,
.bg-teal-500 *, .bg-teal-600 *, .bg-teal-700 *, .bg-teal-800 *, .bg-teal-900 *,
.bg-gray-700 *, .bg-gray-800 *, .bg-gray-900 *,
.bg-slate-500 *, .bg-slate-600 *, .bg-slate-700 *, .bg-slate-800 *, .bg-slate-900 * {
color: inherit !important;
}
/* Global form element styling for consistency */
select, input[type="text"], input[type="number"], input[type="search"],
input[type="email"], input[type="password"], input[type="datetime-local"],
textarea, .form-input, .form-select {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.12) !important;
border-radius: 0.375rem !important; /* rounded-md */
}
select:focus, input:focus, textarea:focus,
.form-input:focus, .form-select:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
outline: none !important;
}
/* Fix dropdown option styling */
select option {
background-color: rgba(255, 255, 255, 0.98) !important;
color: #374151 !important; /* gray-700 */
padding: 8px !important;
}
/* Fix pagination controls globally */
.pagination-button, .pagination a, .pagination button {
background-color: rgba(255, 255, 255, 0.9) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.08) !important;
transition: all 0.15s ease-in-out !important;
}
.pagination-button:hover, .pagination a:hover, .pagination button:hover {
background-color: rgba(229, 231, 235, 1) !important; /* gray-200 */
border-color: rgba(0, 0, 0, 0.12) !important;
transform: translateY(-1px) !important;
}
.pagination-button.active, .pagination a.active, .pagination button.active {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
border-color: #2563eb !important; /* blue-600 - darker light blue */
font-weight: 600 !important;
}
/* Loading spinner */
.loading-spin {
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* Notification */
.notification {
position: fixed;
bottom: 5rem; /* Adjusted from bottom-20 */
left: 50%;
transform: translateX(-50%);
padding: 0.75rem 1.25rem; /* px-5 py-3 */
border-radius: 0.5rem; /* rounded-lg */
background-color: rgba(34, 197, 94, 0.95); /* green-500 for success */
color: white;
font-weight: 500; /* font-medium */
z-index: 1000; /* Increased z-index */
opacity: 0;
transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.notification.show {
opacity: 1;
transform: translate(-50%, 0);
}
.notification.error {
background-color: rgba(239, 68, 68, 0.95); /* red-500 for error */
}
/* Scroll buttons */
.scroll-buttons {
position: fixed;
right: 1.25rem; /* right-5 */
bottom: 5rem; /* bottom-20 */
display: flex;
flex-direction: column;
gap: 0.5rem; /* gap-2 */
z-index: 10;
}
.scroll-button {
width: 2.5rem; /* w-10 */
height: 2.5rem; /* h-10 */
background-color: #3b82f6; /* blue-500 - light blue */
color: white;
border-radius: 9999px; /* rounded-full */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); /* shadow-md */
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease-in-out;
}
.scroll-button:hover {
background-color: #2563eb; /* blue-600 - darker light blue */
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* hover:shadow-lg */
}
/* Global overrides for light theme consistency */
.text-gray-200, .text-gray-300, .text-gray-400 {
color: #6b7280 !important; /* gray-500 for better contrast */
}
/* Navigation and header improvements */
.bg-primary-600, .bg-primary-700 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
}
.text-primary-600, .text-primary-700 {
color: #3b82f6 !important; /* blue-500 - light blue */
}
.border-primary-500, .focus\\:border-primary-500 {
border-color: #3b82f6 !important; /* blue-500 */
}
.ring-primary-200, .focus\\:ring-primary-200 {
--tw-ring-color: rgba(59, 130, 246, 0.2) !important; /* blue-500 with opacity */
}
/* Global purple to blue conversion */
.bg-violet-50, .bg-violet-100, .bg-violet-200, .bg-violet-300, .bg-violet-400, .bg-violet-500, .bg-violet-600, .bg-violet-700, .bg-violet-800, .bg-violet-900 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
}
.text-violet-50, .text-violet-100, .text-violet-200, .text-violet-300, .text-violet-400, .text-violet-500, .text-violet-600, .text-violet-700, .text-violet-800, .text-violet-900 {
color: #3b82f6 !important; /* blue-500 - light blue */
}
.border-violet-50, .border-violet-100, .border-violet-200, .border-violet-300, .border-violet-400, .border-violet-500, .border-violet-600, .border-violet-700, .border-violet-800, .border-violet-900 {
border-color: #3b82f6 !important; /* blue-500 - light blue */
}
/* Global button color overrides */
/* Blue buttons to light blue */
.bg-blue-500, .bg-blue-600, .bg-blue-700, .bg-blue-800, .bg-blue-900,
button.bg-blue-500, button.bg-blue-600, button.bg-blue-700, button.bg-blue-800, button.bg-blue-900 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
}
.bg-blue-500:hover, .bg-blue-600:hover, .bg-blue-700:hover, .bg-blue-800:hover, .bg-blue-900:hover,
button.bg-blue-500:hover, button.bg-blue-600:hover, button.bg-blue-700:hover, button.bg-blue-800:hover, button.bg-blue-900:hover,
.hover\\:bg-blue-600:hover, .hover\\:bg-blue-700:hover, .hover\\:bg-blue-800:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Red buttons to bright light red */
.bg-red-500, .bg-red-600, .bg-red-700, .bg-red-800, .bg-red-900,
button.bg-red-500, button.bg-red-600, button.bg-red-700, button.bg-red-800, button.bg-red-900 {
background-color: #f87171 !important; /* red-400 - bright light red */
}
.bg-red-500:hover, .bg-red-600:hover, .bg-red-700:hover, .bg-red-800:hover, .bg-red-900:hover,
button.bg-red-500:hover, button.bg-red-600:hover, button.bg-red-700:hover, button.bg-red-800:hover, button.bg-red-900:hover,
.hover\\:bg-red-600:hover, .hover\\:bg-red-700:hover, .hover\\:bg-red-800:hover {
background-color: #ef4444 !important; /* red-500 - darker bright light red */
}
/* Gray buttons to light gray */
.bg-gray-500, .bg-gray-600, .bg-gray-700, .bg-gray-800, .bg-gray-900,
button.bg-gray-500, button.bg-gray-600, button.bg-gray-700, button.bg-gray-800, button.bg-gray-900 {
background-color: #e5e7eb !important; /* gray-200 - light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
.bg-gray-500:hover, .bg-gray-600:hover, .bg-gray-700:hover, .bg-gray-800:hover, .bg-gray-900:hover,
button.bg-gray-500:hover, button.bg-gray-600:hover, button.bg-gray-700:hover, button.bg-gray-800:hover, button.bg-gray-900:hover,
.hover\\:bg-gray-600:hover, .hover\\:bg-gray-700:hover, .hover\\:bg-gray-800:hover {
background-color: #d1d5db !important; /* gray-300 - darker light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
/* Ensure all text has proper contrast in light theme */
.text-white {
color: #374151 !important; /* gray-700 for better contrast on light backgrounds */
}
/* Fix dark button text - ensure white text on dark backgrounds */
.bg-blue-500, .bg-blue-600, .bg-blue-700, .bg-blue-800, .bg-blue-900,
.bg-red-500, .bg-red-600, .bg-red-700, .bg-red-800, .bg-red-900,
.bg-green-500, .bg-green-600, .bg-green-700, .bg-green-800, .bg-green-900,
.bg-purple-500, .bg-purple-600, .bg-purple-700, .bg-purple-800, .bg-purple-900,
.bg-indigo-500, .bg-indigo-600, .bg-indigo-700, .bg-indigo-800, .bg-indigo-900,
.bg-gray-700, .bg-gray-800, .bg-gray-900,
.bg-sky-500, .bg-sky-600, .bg-sky-700, .bg-sky-800, .bg-sky-900 {
color: #ffffff !important;
}
/* Ensure buttons with dark backgrounds have white text */
button.bg-blue-500, button.bg-blue-600, button.bg-blue-700,
button.bg-red-500, button.bg-red-600, button.bg-red-700,
button.bg-green-500, button.bg-green-600, button.bg-green-700,
button.bg-sky-500, button.bg-sky-600, button.bg-sky-700,
.btn-primary, .btn-danger, .btn-success, .btn-info {
color: #ffffff !important;
}
/* Override any nested text color rules for dark buttons */
.bg-blue-500 *, .bg-blue-600 *, .bg-blue-700 *,
.bg-red-500 *, .bg-red-600 *, .bg-red-700 *,
.bg-green-500 *, .bg-green-600 *, .bg-green-700 *,
.bg-sky-500 *, .bg-sky-600 *, .bg-sky-700 * {
color: inherit !important;
}
/* auth.html specific styles */
.auth-glass-card { /* Renamed to avoid conflict if base.html has .glass-card */
background: rgba(255, 255, 255, 0.95); /* High opacity white for light theme */
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(0, 0, 0, 0.08);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.auth-bg-gradient { /* Renamed to avoid conflict if base.html has .bg-gradient */
background: #f8fafc; /* Light gray background for auth page */
}
/* .input-icon class removed, using direct Tailwind classes now */
/* Keep button ripple effect if needed, or remove if base provides similar */
.auth-button { /* Renamed to avoid conflict */
position: relative;
overflow: hidden;
}
.auth-button:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
.auth-button:active:after {
width: 300px;
height: 300px;
opacity: 0;
}
/* ***keys_status.html specific styles*** */
/* ************************************** */
.key-content {
transition: max-height 0.3s ease-in-out, opacity 0.3s ease-in-out,
padding 0.3s ease-in-out; /* Added padding transition */
overflow: hidden; /* Keep hidden initially and during collapse */
}
.key-content.collapsed {
max-height: 0 !important; /* Use important to override inline style during transition */
opacity: 0;
padding-top: 0 !important; /* Collapse padding */
padding-bottom: 0 !important; /* Collapse padding */
/* overflow: hidden; */ /* Already set above */
}
.toggle-icon {
transition: transform 0.3s ease;
}
.toggle-icon.collapsed {
transform: rotate(-90deg);
}
/* Copy status styling is handled by base.html's notification */
/* 现代数据统计样式 */
.stats-dashboard {
display: grid;
grid-template-columns: 1fr;
gap: 1.5rem;
margin-bottom: 2rem;
position: relative;
z-index: 10;
}
@media (min-width: 768px) {
.stats-dashboard {
grid-template-columns: 1fr 1fr;
}
}
/* 统计卡片样式 */
.stats-card {
background-color: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border-radius: 0.75rem;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
border: 1px solid rgba(0, 0, 0, 0.08);
overflow: hidden;
transition: all 0.3s ease-in-out;
}
.stats-card:hover {
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
0 4px 6px -2px rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.12);
}
.stats-card-header {
background-color: rgba(249, 250, 251, 0.95);
padding: 0.75rem 1rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap; /* Allow wrapping for smaller screens */
gap: 0.5rem; /* Add gap between items */
}
.stats-card-title {
display: flex;
align-items: center;
font-size: 1rem;
font-weight: 600;
color: #374151; /* gray-700 for light theme */
text-shadow: none;
}
.stats-card-title i {
margin-right: 0.5rem;
color: #6b7280; /* gray-500 for light theme */
}
.stats-card-header h2 {
color: #374151; /* gray-700 for light theme */
}
/* =================================================================== */
/* [核心重构] 统计项样式 V3.2 - 最终精调版 */
/* =================================================================== */
/* --- 网格容器 --- */
.stats-grid {
display: grid;
gap: 1rem;
padding: 0.75rem;
margin-bottom: 0.5rem !important;
}
/* --- 统计项容器 (stat-item) --- */
.stat-item {
position: relative;
display: block;
padding: 0;
border-radius: 0.5rem;
overflow: hidden;
transition: transform 0.3s ease-in-out;
min-height: 110px;
background-color: transparent !important;
}
/* --- 底部1/3的透明色块 (::before) --- */
.stat-item::before {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 30%;
background-color: currentColor;
opacity: 0.25;
z-index: 1;
transition: opacity 0.3s ease-in-out;
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
}
/* --- 悬浮动画效果 --- */
.stat-item:hover {
transform: scale(1.05);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.stat-item:hover::before {
opacity: 0.25;
}
/* --- 核心数字 (stat-value) --- */
.stat-value {
position: absolute;
z-index: 2;
top: 0;
left: 0;
width: 100%;
height: 70%;
display: flex;
align-items: center;
justify-content: center;
font-family: "Segoe UI", "Inter", "Roboto", sans-serif;
font-size: 3rem;
font-weight: 800;
color: currentColor;
opacity: 0.85;
}
/* --- 描述标签 (stat-label) --- */
.stat-label {
position: absolute;
z-index: 2;
bottom: 0;
left: 0;
width: 100%;
height: 30%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #4b5563;
}
/* --- 右侧图标 (stat-icon) --- */
.stat-icon {
position: absolute;
z-index: 2;
bottom: 0;
right: 0.75rem;
height: 30%;
align-content: center;
display: flex;
align-items: center;
font-size: 1.5rem;
opacity: 0.9;
transform: rotate(0deg);
transition: all 0.3s ease-in-out;
color: white;
}
.stat-item:hover .stat-icon {
opacity: 1;
transform: scale(1.1);
}
/* --- 主题颜色定义 --- */
.stat-primary { color: #459CEB; }
.stat-success { color: #49C65B; }
.stat-danger { color: #E81307; }
.stat-warning { color: #FCCC54; }
.stat-info { color: #06b6d4; }
.stat-info-rpm { color: #4EAAF6; font-size: 2.5rem; font-weight: 600;}
.stat-info-rph { color: #1F92F2; font-size: 2.5rem; font-weight: 600;}
.stat-info-rpd { color: #0D78D2; font-size: 2.5rem; font-weight: 600;}
.stat-info-rp30d { color: #0B5CA1; font-size: 2.5rem; font-weight: 600;}
/* --- 代码清理 --- */
.stat-item.stat-primary,
.stat-item.stat-success,
.stat-item.stat-danger,
.stat-item.stat-warning,
.stat-item.stat-info {
background-color: transparent !important;
}
/* 响应式调整 */
@media (max-width: 640px) {
.stats-dashboard {
gap: 1rem;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
gap: 0.5rem;
padding: 0.5rem;
}
.stat-item {
padding: 0.5rem;
}
.stat-value {
font-size: 1.25rem;
}
.stat-label {
font-size: 0.625rem;
}
.stats-card-header {
padding: 0.5rem 0.75rem;
} /* Adjust header padding */
.key-content ul {
grid-template-columns: 1fr;
} /* Stack keys vertically on small screens */
}
/* Tailwind Toggle Switch Helper CSS */
.toggle-checkbox:checked {
@apply: right-0 border-blue-600;
right: 0;
border-color: #2563eb;
}
.toggle-checkbox:checked + .toggle-label {
@apply: bg-blue-600;
background-color: #2563eb;
}
/* Pagination Controls */
#validPaginationControls,
#invalidPaginationControls {
display: flex;
justify-content: center;
align-items: center;
margin-top: 1rem; /* mt-4 */
gap: 0.5rem; /* space-x-2 */
}
/* Ensure list items are flex for alignment */
#validKeys li,
#invalidKeys li {
display: flex;
align-items: flex-start; /* Align checkbox with top of content */
gap: 0.75rem; /* gap-3 */
}
/* Ensure grid layout for key lists */
#validKeys,
#invalidKeys {
display: grid;
grid-template-columns: 1fr; /* Default single column */
gap: 0.75rem; /* gap-3 */
}
@media (min-width: 768px) {
/* md breakpoint */
#validKeys,
#invalidKeys {
grid-template-columns: repeat(
2,
1fr
); /* Two columns on medium screens and up */
}
}
/* 修改密钥列表背景和卡片样式 */
.key-content {
background-color: rgba(249, 250, 251, 0.8) !important;
}
#validKeys li,
#invalidKeys li {
background-color: rgba(255, 255, 255, 0.9);
border: 1px solid rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
cursor: pointer;
position: relative;
padding-left: 2.5rem; /* 为自定义复选框留出空间 */
}
#validKeys li:hover,
#invalidKeys li:hover {
border-color: rgba(0, 0, 0, 0.12);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
background-color: rgba(249, 250, 251, 0.95);
}
#validKeys li.selected,
#invalidKeys li.selected {
background-color: rgba(239, 246, 255, 0.95);
border-color: rgba(59, 130, 246, 0.3);
}
/* 隐藏原生复选框 */
.key-checkbox {
display: none;
}
/* 自定义复选框样式 */
#validKeys li::before,
#invalidKeys li::before {
content: "";
position: absolute;
left: 0.75rem;
top: 50%;
transform: translateY(-50%);
width: 1.25rem; /* 20px */
height: 1.25rem; /* 20px */
border: 2px solid rgba(156, 163, 175, 0.7); /* gray-400 */
border-radius: 0.375rem; /* 6px */
background-color: rgba(255, 255, 255, 0.9);
transition: all 0.2s ease-in-out;
}
#validKeys li.selected::before,
#invalidKeys li.selected::before {
background-color: #3b82f6; /* blue-500 */
border-color: #2563eb; /* blue-600 */
}
/* 自定义复选框对勾样式 */
#validKeys li.selected::after,
#invalidKeys li.selected::after {
content: "\f00c"; /* Font Awesome check icon */
font-family: "Font Awesome 5 Free";
font-weight: 900;
position: absolute;
left: calc(0.75rem + 0.3rem); /* 调整对勾位置 */
top: 50%;
transform: translateY(-50%) scale(0.9);
color: white;
font-size: 0.8rem;
}
.key-text {
color: #374151 !important; /* gray-700 for light theme */
text-shadow: none;
font-weight: 500;
}
/* 模态框背景色调整 - comprehensive modal styling */
#apiCallDetailsModal .bg-white,
#keyUsageDetailsModal .bg-white,
#resultModal .bg-white,
#resetModal .bg-white,
#verifyModal .bg-white,
.modal .bg-white {
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;
}
/* 模态框标题颜色 */
#apiCallDetailsModalTitle,
#keyUsageDetailsModalTitle,
#resultModalTitle,
#resetModalTitle,
#verifyModalTitle {
color: #1f2937 !important; /* gray-800 */
text-shadow: none;
font-weight: 600;
}
/* 密钥使用详情模态框头部特定样式 */
#keyUsageDetailsModal .bg-white > div.border-b {
/* 针对头部区域的下边框 */
border-bottom-color: rgba(0, 0, 0, 0.12) !important;
}
/* 模态框消息文本颜色 */
#apiCallDetailsContent,
#keyUsageDetailsContent,
#resultModalMessage,
#resetModalMessage,
#verifyModalMessage {
color: #374151 !important; /* gray-700 */
}
/* 特定调整操作结果模态框的消息区域样式 */
#resultModalMessage {
background-color: rgba(255, 255, 255, 0.95) !important; /* 浅色背景 */
border-color: rgba(0, 0, 0, 0.08) !important; /* 浅色边框 */
color: #374151 !important; /* 深色文本 */
}
/* 批量验证结果中普通信息列表 (如成功密钥列表) 的浅色主题样式 */
#resultModalMessage ul[class*="bg-gray-50"] {
/* 针对特定灰色背景色的ul */
background-color: rgba(249, 250, 251, 0.95) !important; /* 浅灰色背景 */
border-color: rgba(0, 0, 0, 0.08) !important; /* 浅色边框 */
}
#resultModalMessage ul[class*="bg-gray-50"] li {
color: #374151 !important; /* 深色文本 */
}
/* 批量验证结果中失败列表的浅色主题样式 */
#resultModalMessage ul[class*="bg-red-50"] {
/* 针对特定背景色的ul */
background-color: rgba(254, 242, 242, 0.95) !important; /* 浅红色背景 */
border-color: rgba(239, 68, 68, 0.2) !important; /* 浅红色边框 */
}
/* 失败列表中的密钥文本 (如 AIza...lJ6E) */
#resultModalMessage ul[class*="bg-red-50"] li span.font-mono {
color: #dc2626 !important; /* 深红色文本 */
}
/* 失败列表中的 "收起/展开" 按钮 - 协调的红色主题设计 */
#resultModalMessage ul[class*="bg-red-50"] li button[class*="bg-red-200"] {
background-color: #dc2626 !important; /* 深红色按钮背景,与外框协调 */
color: #ffffff !important; /* 白色按钮文本 */
border: 1px solid #b91c1c !important; /* 更深的红色边框 */
box-shadow: none !important;
font-weight: 500 !important; /* 增强文字粗细以提高可读性 */
}
#resultModalMessage
ul[class*="bg-red-50"]
li
button[class*="bg-red-200"]:hover {
background-color: #b91c1c !important; /* 悬停时更深的红色背景 */
color: #ffffff !important; /* 悬停时白色按钮文本 */
transform: translateY(-1px) !important; /* 轻微上移效果 */
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; /* 悬停阴影效果 */
}
/* 失败列表中的错误详情框 - 与红色主题协调的样式 */
#resultModalMessage ul[class*="bg-red-50"] li div[id^="error-details-"] {
background-color: rgba(254, 242, 242, 0.8) !important; /* 更浅的红色背景,与外框协调 */
border-color: rgba(248, 113, 113, 0.3) !important; /* 浅红色边框 */
color: #7f1d1d !important; /* 深红色文本,确保良好对比度 */
font-weight: 500 !important; /* 增强文字粗细以提高可读性 */
line-height: 1.5 !important; /* 改善行高以提高可读性 */
}
/* 密钥使用详情模态框内表格表头样式 */
#keyUsageDetailsModal #keyUsageDetailsContent table th {
background-color: rgba(243, 244, 246, 0.95) !important; /* 浅灰色背景 */
border-bottom: 1px solid rgba(0, 0, 0, 0.08) !important; /* 浅色边框 */
color: #374151 !important; /* 深色文字 */
text-shadow: none; /* 移除文本阴影 */
}
/* 密钥使用详情模态框表格单元格样式已移除使用默认颜色与API调用详情保持一致 */
/* 按钮文本颜色 */
.stats-card button {
color: #ffffff;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
/* 表单控件背景 */
.form-input,
.form-select {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border-color: rgba(0, 0, 0, 0.12) !important;
}
/* 标签文字颜色 */
.text-gray-500,
.text-gray-600,
.text-gray-700 {
color: #374151 !important; /* dark gray for light theme */
text-shadow: none;
}
/* 调整全局背景色,使之与白色背景更加协调 */
.glass-card {
background-color: rgba(255, 255, 255, 0.95) !important;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(0, 0, 0, 0.08);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
/* 分页控件样式增强 */
.pagination-button {
background-color: rgba(255, 255, 255, 0.9);
color: #374151; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.08);
text-shadow: none;
}
.pagination-button.active {
background-color: #3b82f6; /* blue-500 */
color: white;
border-color: #2563eb; /* blue-600 */
}
/* 状态标签增强 */
.inline-flex.items-center.px-2\.5.py-0\.5.rounded-full {
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
/* 按钮颜色增强 */
button.bg-success-600,
button.bg-blue-600,
button.bg-slate-500,
button.bg-purple-600,
button.bg-primary-700,
button.bg-teal-600 {
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
/* 复选框文本样式 */
input[type="checkbox"] + label {
color: #f1f5f9 !important;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
/* 底部版权栏文本颜色修正 */
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-200,
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-300,
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-400,
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-500,
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-600,
.fixed.bottom-0.left-0.w-full.py-3.bg-white .text-gray-700 {
color: #1f2937 !important; /* 使用更深的灰色提高对比度 */
text-shadow: none !important;
}
/* 导航链接悬停样式 - 优化以避免遮挡内容 */
.nav-link {
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; /* 蓝色阴影 */
}
/* Active navigation tab */
.bg-violet-600 {
background-color: #3b82f6 !important; /* blue-500 */
color: #ffffff !important;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important;
transform: translateY(-1px) !important;
border: 1px solid #2563eb !important; /* blue-600 */
}
.bg-violet-600:hover {
background-color: #2563eb !important; /* blue-600 */
transform: translateY(-2px) !important;
box-shadow: 0 6px 8px -1px rgba(0, 0, 0, 0.15), 0 4px 6px -1px rgba(0, 0, 0, 0.1) !important;
}
/* 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 refresh button */
.bg-white.bg-opacity-20 {
background-color: rgba(255, 255, 255, 0.9) !important;
color: #3b82f6 !important; /* blue-500 */
}
.bg-white.bg-opacity-20:hover {
background-color: rgba(255, 255, 255, 1) !important;
}
/* Fix batch actions area purple background */
#validBatchActions, #invalidBatchActions {
background-color: rgba(249, 250, 251, 0.95) !important; /* light gray */
border-color: rgba(0, 0, 0, 0.08) !important;
}
#validBatchActions .text-gray-200, #invalidBatchActions .text-gray-200 {
color: #374151 !important; /* dark gray */
}
/* Fix primary button colors */
.bg-primary-600, .bg-primary-700, .bg-primary-800 {
background-color: #3b82f6 !important; /* blue-500 */
}
.bg-primary-600:hover, .bg-primary-700:hover, .bg-primary-800:hover {
background-color: #2563eb !important; /* blue-600 */
}
/* Fix text-primary colors */
.text-primary-600 {
color: #3b82f6 !important; /* blue-500 */
}
/* Fix form input focus colors */
.focus\\:ring-primary-500:focus {
--tw-ring-color: rgba(59, 130, 246, 0.2) !important;
}
.focus\\:border-primary-500:focus {
border-color: #3b82f6 !important;
}
/* 新增:密钥列表内按钮背景和悬停颜色调整 */
/* 验证按钮 (绿色) */
#validKeys li button.bg-success-600,
#invalidKeys li button.bg-success-600 {
background-color: rgba(22, 163, 74, 0.65) !important;
border: 1px solid rgba(22, 163, 74, 0.85);
}
#validKeys li button.bg-success-600:hover,
#invalidKeys li button.bg-success-600:hover {
background-color: rgba(21, 128, 61, 0.75) !important;
border-color: rgba(21, 128, 61, 0.95);
}
/* 重置按钮 (加深灰色底,白色文字) */
#validKeys li button.bg-gray-500,
#invalidKeys li button.bg-gray-500 {
background-color: #6b7280 !important; /* gray-500 - 加深的灰色底 */
border: 1px solid #4b5563 !important; /* gray-600 */
color: #ffffff !important; /* white - 白色文字 */
}
#validKeys li button.bg-gray-500:hover,
#invalidKeys li button.bg-gray-500:hover {
background-color: #4b5563 !important; /* gray-600 - 更深的灰色 */
border-color: #374151 !important; /* gray-700 */
color: #ffffff !important; /* white - 白色文字 */
}
/* 复制按钮 (蓝色底色,白色文字) */
#validKeys li button.bg-blue-500,
#invalidKeys li button.bg-blue-500 {
background-color: #3b82f6 !important; /* blue-500 - 蓝色底 */
border: 1px solid #2563eb !important; /* blue-600 */
color: #ffffff !important; /* Keep white text as specified in HTML */
}
#validKeys li button.bg-blue-500:hover,
#invalidKeys li button.bg-blue-500:hover {
background-color: #2563eb !important; /* blue-600 - 深蓝色hover */
border-color: #1d4ed8 !important; /* blue-700 */
color: #ffffff !important; /* Keep white text on hover */
}
/* 详情按钮 (改为蓝色) */
#validKeys li button.bg-purple-600,
#invalidKeys li button.bg-purple-600 {
background-color: rgba(59, 130, 246, 0.8) !important; /* blue-500 */
border: 1px solid rgba(59, 130, 246, 0.9);
}
#validKeys li button.bg-purple-600:hover,
#invalidKeys li button.bg-purple-600:hover {
background-color: rgba(37, 99, 235, 0.9) !important; /* blue-600 */
border-color: rgba(37, 99, 235, 1);
}
/* 删除按钮 (鲜艳浅红色) - HTML中使用 bg-red-800 */
#validKeys li button.bg-red-800,
#invalidKeys li button.bg-red-800 {
background-color: #f87171 !important; /* red-400 - bright light red */
border: 1px solid #ef4444 !important; /* red-500 */
color: #ffffff !important; /* Ensure white text */
}
#validKeys li button.bg-red-800:hover,
#invalidKeys li button.bg-red-800:hover {
background-color: #ef4444 !important; /* red-500 - darker bright light red */
border-color: #dc2626 !important; /* red-600 */
}
/* Comprehensive purple to light theme conversion */
[style*="background-color: rgba(80, 60, 160"],
[style*="background-color: rgba(70, 50, 150"],
[style*="background-color: rgba(120, 100, 200"] {
background-color: rgba(255, 255, 255, 0.95) !important;
border-color: rgba(0, 0, 0, 0.08) !important;
color: #374151 !important;
}
/* Fix modal button colors - specific overrides for keys_status.html */
/* 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, .hover\\:bg-blue-800:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Red buttons in modals */
.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-700:hover, button.bg-red-700:hover,
.bg-red-800:hover, button.bg-red-800:hover,
.hover\\:bg-red-800:hover {
background-color: #ef4444 !important; /* red-500 - darker bright light red */
}
/* Primary buttons in modals */
.bg-primary-700, button.bg-primary-700,
.bg-primary-800, button.bg-primary-800 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
}
.bg-primary-700:hover, button.bg-primary-700:hover,
.bg-primary-800:hover, button.bg-primary-800:hover,
.hover\\:bg-primary-800:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Teal buttons in modals (for verify button) */
.bg-teal-700, button.bg-teal-700,
.bg-teal-800, button.bg-teal-800 {
background-color: #3b82f6 !important; /* blue-500 - light blue (change teal to light blue) */
}
.bg-teal-700:hover, button.bg-teal-700:hover,
.bg-teal-800:hover, button.bg-teal-800:hover,
.hover\\:bg-teal-800:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
}
/* Global slate/gray button color overrides - only for modal buttons */
/* Modal slate buttons should be light gray with dark text */
.modal .bg-slate-500, .modal button.bg-slate-500,
.modal .bg-slate-600, .modal button.bg-slate-600,
.modal .bg-slate-700, .modal button.bg-slate-700 {
background-color: #e5e7eb !important; /* gray-200 - light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
.modal .bg-slate-500:hover, .modal button.bg-slate-500:hover,
.modal .bg-slate-600:hover, .modal button.bg-slate-600:hover,
.modal .bg-slate-700:hover, .modal button.bg-slate-700:hover,
.modal .hover\\:bg-slate-600:hover, .modal .hover\\:bg-slate-700:hover {
background-color: #d1d5db !important; /* gray-300 - darker light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
}
/* Fix any remaining button text color issues */
.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-primary-700, .bg-primary-800,
.bg-teal-700, .bg-teal-800 {
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 * {
color: inherit !important;
}
/* Fix key action buttons styling */
#validKeys li button, #invalidKeys li button {
font-size: 0.75rem !important; /* text-xs */
padding: 0.25rem 0.5rem !important; /* px-2 py-1 */
border-radius: 0.375rem !important; /* rounded-md */
font-weight: 500 !important; /* font-medium */
transition: all 0.2s ease-in-out !important;
border: 1px solid transparent !important;
}
/* Verify button (green) */
#validKeys li button.bg-green-600,
#invalidKeys li button.bg-green-600 {
background-color: #16a34a !important; /* green-600 */
color: #ffffff !important;
border-color: #15803d !important; /* green-700 */
}
#validKeys li button.bg-green-600:hover,
#invalidKeys li button.bg-green-600:hover {
background-color: #15803d !important; /* green-700 */
transform: translateY(-1px) !important;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
}
/* Details button (light blue) */
#validKeys li button.bg-blue-600,
#invalidKeys li button.bg-blue-600 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
border-color: #2563eb !important; /* blue-600 */
}
#validKeys li button.bg-blue-600:hover,
#invalidKeys li button.bg-blue-600:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
transform: translateY(-1px) !important;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
}
/* Disable/Enable button (yellow/orange) */
#validKeys li button.bg-yellow-500,
#invalidKeys li button.bg-yellow-500,
#validKeys li button.bg-orange-500,
#invalidKeys li button.bg-orange-500 {
background-color: #f59e0b !important; /* amber-500 */
color: #ffffff !important;
border-color: #d97706 !important; /* amber-600 */
}
#validKeys li button.bg-yellow-500:hover,
#invalidKeys li button.bg-yellow-500:hover,
#validKeys li button.bg-orange-500:hover,
#invalidKeys li button.bg-orange-500:hover {
background-color: #d97706 !important; /* amber-600 */
transform: translateY(-1px) !important;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
}
/* Fix pagination dropdown styling */
.pagination-controls select {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.12) !important;
border-radius: 0.375rem !important; /* rounded-md */
padding: 0.25rem 0.5rem !important;
font-size: 0.875rem !important; /* text-sm */
}
.pagination-controls select:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
outline: none !important;
}
/* Fix pagination text */
.pagination-controls span, .pagination-controls label {
color: #374151 !important; /* gray-700 */
font-weight: 500 !important;
}
/* Fix specific pagination elements by ID and class */
#validKeysPageSize, #invalidKeysPageSize,
#itemsPerPageSelect, #invalidItemsPerPageSelect {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.12) !important;
border-radius: 0.375rem !important; /* rounded-md */
padding: 0.25rem 0.5rem !important;
font-size: 0.875rem !important; /* text-sm */
}
#validKeysPageSize:focus, #invalidKeysPageSize:focus,
#itemsPerPageSelect:focus, #invalidItemsPerPageSelect:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
outline: none !important;
}
/* Fix pagination container text */
.flex.items-center.gap-2 span {
color: #374151 !important; /* gray-700 */
font-weight: 500 !important;
}
/* Fix any remaining form elements */
select, input[type="text"], input[type="number"] {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.12) !important;
}
select:focus, input[type="text"]:focus, input[type="number"]:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
outline: none !important;
}
/* Comprehensive button text color fixes for all button states */
button.bg-success-600, button.bg-success-700,
button.bg-blue-600, button.bg-blue-700,
button.bg-purple-600, button.bg-purple-700,
button.bg-red-800, button.bg-red-900,
button.bg-teal-600, button.bg-teal-700,
button.bg-primary-700, button.bg-primary-800 {
color: #ffffff !important;
font-weight: 500 !important;
}
/* Slate buttons in modals use dark text on light background */
.modal button.bg-slate-500, .modal button.bg-slate-600, .modal button.bg-slate-700 {
color: #374151 !important; /* gray-700 - dark text for contrast */
font-weight: 500 !important;
}
/* Ensure button children (icons and text) inherit color */
button.bg-success-600 *, button.bg-success-700 *,
button.bg-blue-600 *, button.bg-blue-700 *,
button.bg-purple-600 *, button.bg-purple-700 *,
button.bg-red-800 *, button.bg-red-900 *,
button.bg-teal-600 *, button.bg-teal-700 *,
button.bg-primary-700 *, button.bg-primary-800 *,
button.bg-slate-500 *, button.bg-slate-600 *, button.bg-slate-700 * {
color: inherit !important;
}
/* Fix specific button text visibility issues */
.stats-card button, .key-content button {
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) !important;
}
/* Fix specific label text visibility issues */
label[for="selectAllValid"],
label[for="selectAllInvalid"],
label[for="failCountThreshold"],
label[for="keySearchInput"],
label[for="itemsPerPageSelect"],
label[for="invalidFailCountThreshold"],
label[for="invalidKeySearchInput"],
label[for="invalidItemsPerPageSelect"] {
color: #1f2937 !important; /* gray-800 for maximum contrast */
font-weight: 600 !important; /* font-semibold for better visibility */
text-shadow: none !important;
}
/* Fix pagination and control text */
.pagination-controls span,
.pagination-controls label,
.stats-card-header span {
color: #1f2937 !important; /* gray-800 */
font-weight: 500 !important;
text-shadow: none !important;
}
#validKeys li button.bg-red-800:hover,
#invalidKeys li button.bg-red-800:hover {
background-color: rgba(153, 27, 27, 0.75) !important; /* Based on red-800 */
border-color: rgba(153, 27, 27, 0.95);
}
/* 新增:密钥列表内状态标签颜色调整 */
/* 有效标签 (绿色) - 改为更好的对比度 */
#validKeys li span.bg-success-50.text-success-600,
#invalidKeys li span.bg-success-50.text-success-600 {
background-color: rgba(34, 197, 94, 0.15) !important; /* green-500 with low opacity */
color: #16a34a !important; /* green-600 for better contrast on light background */
border: 1px solid rgba(22, 163, 74, 0.3) !important; /* green-600 border */
font-weight: 600 !important; /* Make text bolder for better readability */
text-shadow: none !important; /* Remove any text shadow */
}
/* 失败计数标签 (黄色) - 改为更好的对比度 */
#validKeys li span.bg-amber-50.text-amber-600,
#invalidKeys li span.bg-amber-50.text-amber-600 {
background-color: rgba(251, 191, 36, 0.15) !important; /* amber-400 with low opacity */
color: #d97706 !important; /* amber-600 for better contrast on light background */
border: 1px solid rgba(217, 119, 6, 0.3) !important; /* amber-600 border */
position: absolute; /* 移动到右下角 */
bottom: 0.75rem; /* 配合li的p-3内边距 */
right: 0.75rem;
z-index: 5; /* 确保在其他元素之上 */
font-weight: 600 !important; /* Make text bolder for better readability */
text-shadow: none !important; /* Remove any text shadow */
}
/* 无效标签 (红色) - for invalidKeys list */
#invalidKeys li span.bg-danger-50.text-danger-600 {
background-color: rgba(239, 68, 68, 0.08) !important; /* 更浅的背景色 */
color: #f87171 !important; /* 更浅的红色文字 */
border: 1px solid rgba(239, 68, 68, 0.15); /* 更浅的边框 */
font-weight: 600 !important; /* 加粗字体 */
}
/* Remove border from the last row's cells in API Call Details Modal table */
#apiCallDetailsContent table tr:last-child td {
border-bottom: none !important;
}
/* Restore success/failure status colors and icon colors within the API call details table */
#apiCallDetailsContent table td span[class*="text-success"],
#apiCallDetailsContent table td span[class*="success"] {
color: #6ee7b7 !important; /* Theme success green */
}
#apiCallDetailsContent table td span[class*="text-success"] i,
#apiCallDetailsContent table td span[class*="success"] i {
color: #6ee7b7 !important;
}
#apiCallDetailsContent table td span[class*="text-danger"],
#apiCallDetailsContent table td span[class*="failure"],
#apiCallDetailsContent table td span[class*="danger"] {
color: #fca5b3 !important; /* Theme failure red */
}
#apiCallDetailsContent table td span[class*="text-danger"] i,
#apiCallDetailsContent table td span[class*="failure"] i,
#apiCallDetailsContent table td span[class*="danger"] i {
color: #fca5b3 !important;
}
/* End of API Call Details Modal Specific Styling Adjustments */
/* 下拉菜单样式 */
.dropdown-menu {
position: absolute;
top: 100%;
right: 0;
background-color: rgba(255, 255, 255, 0.98);
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
min-width: 200px;
z-index: 1000;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.2s ease-in-out;
}
.dropdown-menu.show {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-item {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1rem;
color: #374151;
text-decoration: none;
transition: all 0.2s ease-in-out;
cursor: pointer;
border: none;
background: none;
width: 100%;
text-align: left;
font-size: 0.875rem;
}
.dropdown-item:hover {
background-color: rgba(59, 130, 246, 0.1);
color: #3b82f6;
}
.dropdown-item:first-child {
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
}
.dropdown-item:last-child {
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
}
.dropdown-item i {
width: 1rem;
text-align: center;
}
.dropdown-toggle {
position: relative;
}
/* config_editor.html specific styles */
/* Animations (already in base.html, but keep fade-in class usage) */
.fade-in {
animation: fadeIn 0.3s ease forwards;
}
/* Modal specific styles (already in base.html) */
.array-container {
max-height: 300px;
overflow-y: auto;
padding: 1rem; /* p-4 consistency */
margin-bottom: 0.5rem; /* mb-2 consistency */
background-color: rgba(255, 255, 255, 0.95) !important; /* light theme */
border: 1px solid rgba(0, 0, 0, 0.12) !important; /* light gray border */
color: #374151 !important; /* gray-700 for light theme */
border-radius: 0.5rem; /* rounded-lg consistency */
}
#API_KEYS_container {
/* Keep specific ID styling if needed */
max-height: 300px;
overflow-y: auto;
}
.config-section {
display: none;
/* theming: new background and border for sections */
background-color: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 0.75rem; /* rounded-xl */
padding: 1.5rem; /* p-6 */
margin-bottom: 1.5rem; /* mb-6 */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06); /* shadow-lg */
}
.config-section.active {
display: block;
animation: fadeIn 0.3s ease forwards; /* Use base animation */
}
.provider-config {
display: none;
}
.provider-config.active {
display: block;
}
/* Tailwind Toggle Switch Helper CSS */
.toggle-checkbox:checked {
@apply: right-0 border-blue-600; /* theming: changed to blue for light theme */
right: 0;
border-color: #2563eb; /* theming: blue-600 */
}
.toggle-checkbox:checked + .toggle-label {
@apply: bg-blue-600; /* theming: changed to blue for light theme */
background-color: #2563eb; /* theming: blue-600 */
}
.toggle-label {
/* theming: style for unchecked state */
background-color: rgba(156, 163, 175, 0.3); /* gray-400 */
}
/* 统一通知样式为黑色半透明,确保与 keys_status 一致 */
.notification {
background: rgba(0, 0, 0, 0.8) !important;
color: #fff !important;
}
/* Theming for input fields - 修复边框重影问题 */
.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 */
outline: none !important; /* 移除默认outline */
box-shadow: none !important; /* 移除默认box-shadow */
transition: border-color 0.15s ease-in-out !important;
}
.form-input-themed::placeholder {
color: #9ca3af !important; /* gray-400 */
}
.form-input-themed:focus {
border-color: #3b82f6 !important; /* focus时改变边框颜色 */
box-shadow: none !important; /* 移除focus阴影只保留边框变化 */
outline: none !important; /* 确保没有outline */
}
/* 对于在包装器内的输入框,移除边框 */
.flex.items-center .form-input-themed,
.array-container .form-input-themed {
border: none !important; /* 在包装器内的输入框移除边框 */
}
.flex.items-center .form-input-themed:focus,
.array-container .form-input-themed:focus {
border: none !important; /* 确保focus时也没有边框 */
}
/* Theming for select fields - 改进下拉框样式 */
.form-select-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 文字颜色 */
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; /* 调整内边距 */
background-repeat: no-repeat !important;
background-position: right 0.6rem center !important;
background-size: 1.5em 1.5em !important;
border-radius: 0.5rem !important; /* 圆角 */
font-weight: 500 !important; /* 半粗体 */
height: auto !important; /* 自动高度 */
box-shadow: none !important; /* 移除阴影 */
cursor: pointer !important;
}
.form-select-themed:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
outline: none !important;
}
.form-select-themed option {
background-color: rgba(
255,
255,
255,
0.98
) !important; /* white background */
color: #374151 !important; /* gray-700 */
padding: 8px !important;
}
/* 日志级别样式 - 浅色主题统一设计 */
#LOG_LEVEL {
font-weight: 600 !important;
}
/* 统一的日志级别选项样式 - 使用浅色主题 */
#LOG_LEVEL option[value="DEBUG"] {
background-color: rgba(255, 255, 255, 0.98) !important; /* 白色背景 */
color: #374151 !important; /* gray-700 深灰色文字 */
}
#LOG_LEVEL option[value="INFO"] {
background-color: rgba(
249,
250,
251,
0.98
) !important; /* gray-50 浅灰背景 */
color: #374151 !important; /* gray-700 深灰色文字 */
}
#LOG_LEVEL option[value="WARNING"] {
background-color: rgba(
243,
244,
246,
0.98
) !important; /* gray-100 稍深灰背景 */
color: #374151 !important; /* gray-700 深灰色文字 */
}
#LOG_LEVEL option[value="ERROR"] {
background-color: rgba(
229,
231,
235,
0.98
) !important; /* gray-200 中灰背景 */
color: #374151 !important; /* gray-700 深灰色文字 */
}
#LOG_LEVEL option[value="CRITICAL"] {
background-color: rgba(
209,
213,
219,
0.98
) !important; /* gray-300 深灰背景 */
color: #374151 !important; /* gray-700 深灰色文字 */
}
/* 思考模型预算映射样式 */
.map-item {
background-color: rgba(60, 40, 130, 0.2) !important;
border-radius: 0.5rem !important;
padding: 0.5rem !important;
border: 1px solid rgba(167, 139, 250, 0.3) !important;
transition: all 0.2s ease-in-out !important;
}
.map-item:hover {
background-color: rgba(60, 40, 130, 0.3) !important;
border-color: rgba(167, 139, 250, 0.5) !important;
}
.map-key-input {
background-color: rgba(255, 255, 255, 0.95) !important;
border: 1px solid rgba(0, 0, 0, 0.12) !important;
color: #374151 !important; /* gray-700 */
font-weight: 500 !important;
border-radius: 0.375rem !important;
}
.map-value-input {
background-color: rgba(255, 255, 255, 0.95) !important;
border: 1px solid rgba(0, 0, 0, 0.12) !important;
color: #374151 !important; /* gray-700 */
font-weight: 600 !important;
border-radius: 0.375rem !important;
box-shadow: none !important;
transition: all 0.2s !important;
}
.map-value-input:focus {
background-color: rgba(255, 255, 255, 1) !important;
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
outline: none !important;
}
/* 警告文字样式 */
.warning-text {
color: #f87171 !important; /* red-400 */
font-weight: 600 !important;
background-color: rgba(248, 113, 113, 0.15) !important;
padding: 0.5rem 0.75rem !important;
border-radius: 0.375rem !important;
border-left: 3px solid #ef4444 !important; /* red-500 */
display: flex !important;
align-items: center !important;
margin-top: 0.5rem !important;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important;
}
.warning-text i {
margin-right: 0.5rem !important;
color: #ef4444 !important; /* red-500 */
}
/* 令牌生成按钮样式 */
.generate-btn {
background-color: rgba(59, 130, 246, 0.1) !important; /* blue-500 light */
color: #3b82f6 !important; /* blue-500 */
border: 1px solid rgba(59, 130, 246, 0.3) !important;
border-left: none !important;
transition: all 0.2s ease !important;
}
.generate-btn:hover {
background-color: rgba(
59,
130,
246,
0.2
) !important; /* blue-500 more opaque */
color: #1d4ed8 !important; /* blue-700 */
box-shadow: 0 0 8px rgba(59, 130, 246, 0.3) !important;
}
.generate-btn:focus {
outline: none !important;
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5) !important;
}
/* 导航链接悬停样式 - 优化以避免遮挡内容 */
.nav-link {
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; /* 蓝色阴影 */
}
/* 操作按钮的优化悬停效果 */
.action-btn {
position: relative;
z-index: 1;
}
.action-btn:hover {
transform: scale(1.02) !important; /* 使用缩放代替向上移动 */
}
.action-btn:hover#saveBtn {
box-shadow: 0 8px 20px rgba(59, 130, 246, 0.4) !important; /* 蓝色阴影 */
}
.action-btn:hover#resetBtn {
box-shadow: 0 8px 20px rgba(107, 114, 128, 0.4) !important; /* 灰色阴影 */
}
/* 刷新按钮样式 - 与监控面板页面保持一致 */
.bg-white.bg-opacity-20 {
background-color: rgba(255, 255, 255, 0.9) !important;
color: #3b82f6 !important; /* blue-500 - 与监控面板一致 */
}
.bg-white.bg-opacity-20:hover {
background-color: rgba(255, 255, 255, 1) !important;
color: #2563eb !important; /* blue-600 - 悬停时稍深 */
}
/* General label and small text theming for light theme */
label {
color: #374151 !important; /* Dark gray for labels in light theme */
font-weight: 600; /* semibold */
}
small {
color: #6b7280 !important; /* Medium gray for small text */
}
/* Override all violet/purple buttons to light blue */
.bg-violet-600,
button.bg-violet-600 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
}
.bg-violet-600:hover,
button.bg-violet-600:hover,
.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 */
}
/* Update section headings */
.config-section h2 {
color: #1f2937 !important; /* gray-800 */
border-color: #d1d5db !important; /* gray-300 */
}
.config-section h2 i {
color: #3b82f6 !important; /* blue-500 */
}
/* Update tab button active state - 增强选中态样式,提高优先级 */
button.tab-btn.active {
background-color: #3b82f6 !important; /* blue-500 */
color: #ffffff !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; /* 更明显的上移效果 */
border: 2px solid #2563eb !important; /* blue-600 边框 */
font-weight: 600 !important; /* 加粗字体 */
}
/* Ensure inactive tabs have proper styling - 增强未选中态样式,提高优先级 */
button.tab-btn:not(.active) {
background-color: #f8fafc !important; /* slate-50 更浅的背景 */
color: #64748b !important; /* slate-500 更明显的灰色文字 */
border: 2px solid #e2e8f0 !important; /* slate-200 边框 */
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1) !important; /* 轻微阴影 */
font-weight: 500 !important; /* 中等字体粗细 */
}
button.tab-btn:not(.active):hover {
background-color: #f1f5f9 !important; /* slate-100 */
color: #475569 !important; /* slate-600 更深的文字颜色 */
transform: translateY(-1px) !important;
border-color: #cbd5e1 !important; /* slate-300 */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) !important;
}
/* Add transition for smooth state changes - 提高优先级 */
button.tab-btn {
transition: all 0.2s ease-in-out !important;
cursor: pointer !important;
/* 确保基础样式不被Tailwind覆盖 */
padding: 0.5rem 1.25rem !important; /* px-5 py-2 */
border-radius: 9999px !important; /* rounded-full */
font-size: 0.875rem !important; /* text-sm */
font-weight: 500 !important; /* font-medium */
}
/* 额外的高优先级规则确保样式生效 */
.flex.justify-center.mb-6.flex-wrap.gap-2 button.tab-btn.active {
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;
}
.flex.justify-center.mb-6.flex-wrap.gap-2 button.tab-btn:not(.active) {
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;
}
/* Fix all modal backgrounds - comprehensive override */
.modal .w-full[style*="background-color: rgba(70, 50, 150"],
.modal .w-full.max-w-lg[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 h2.text-gray-800 {
color: #1f2937 !important; /* gray-800 */
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 body text */
.modal p,
.modal label,
.modal span {
color: #374151 !important; /* gray-700 */
}
/* Fix modal textarea and input styling */
.modal textarea,
.modal input {
background-color: rgba(255, 255, 255, 0.95) !important;
color: #374151 !important; /* gray-700 */
border: 1px solid rgba(0, 0, 0, 0.12) !important;
}
.modal textarea:focus,
.modal input:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
/* Fix modal button styling */
.modal .bg-violet-600,
.modal button.bg-violet-600 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
border: 1px solid #2563eb !important; /* blue-600 */
}
.modal .bg-violet-600:hover,
.modal button.bg-violet-600:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
transform: translateY(-1px) !important;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
}
/* Fix modal blue button styling */
.modal .bg-blue-500,
.modal button.bg-blue-500,
.modal .bg-blue-600,
.modal button.bg-blue-600,
.modal .bg-blue-700,
.modal button.bg-blue-700 {
background-color: #3b82f6 !important; /* blue-500 - light blue */
color: #ffffff !important;
border: 1px solid #2563eb !important; /* blue-600 */
}
.modal .bg-blue-500:hover,
.modal button.bg-blue-500:hover,
.modal .bg-blue-600:hover,
.modal button.bg-blue-600:hover,
.modal .bg-blue-700:hover,
.modal button.bg-blue-700:hover {
background-color: #2563eb !important; /* blue-600 - darker light blue */
transform: translateY(-1px) !important;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
}
/* Fix modal cancel/secondary buttons */
.modal .bg-gray-500,
.modal button.bg-gray-500,
.modal .bg-gray-600,
.modal button.bg-gray-600 {
background-color: #e5e7eb !important; /* gray-200 - light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
border: 1px solid #d1d5db !important; /* gray-300 */
}
.modal .bg-gray-500:hover,
.modal button.bg-gray-500:hover,
.modal .bg-gray-600:hover,
.modal button.bg-gray-600:hover {
background-color: #d1d5db !important; /* gray-300 - darker light gray */
color: #374151 !important; /* gray-700 - dark text for contrast */
transform: translateY(-1px) !important;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
}
/* Fix modal red/danger buttons */
.modal .bg-red-500,
.modal button.bg-red-500,
.modal .bg-red-600,
.modal button.bg-red-600,
.modal .bg-red-700,
.modal button.bg-red-700 {
background-color: #f87171 !important; /* red-400 - bright light red */
color: #ffffff !important;
border: 1px solid #ef4444 !important; /* red-500 */
}
.modal .bg-red-500:hover,
.modal button.bg-red-500:hover,
.modal .bg-red-600:hover,
.modal button.bg-red-600:hover,
.modal .bg-red-700:hover,
.modal button.bg-red-700:hover {
background-color: #ef4444 !important; /* red-500 - darker bright light red */
transform: translateY(-1px) !important;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1) !important;
}
/* Fix all container backgrounds with purple */
[style*="background-color: rgba(255, 255, 255, 0.05)"],
[style*="background-color: rgba(80, 60, 160"],
[style*="background-color: rgba(70, 50, 150"],
[style*="background-color: rgba(60, 40, 130"],
[style*="background-color: rgba(120, 100, 200"] {
background-color: rgba(255, 255, 255, 0.95) !important;
border-color: rgba(0, 0, 0, 0.08) !important;
color: #374151 !important;
}
/* Fix map item styling */
.map-item {
background-color: rgba(249, 250, 251, 0.8) !important; /* gray-50 */
border: 1px solid rgba(0, 0, 0, 0.08) !important;
color: #374151 !important;
}
.map-item:hover {
background-color: rgba(243, 244, 246, 1) !important; /* gray-100 */
border-color: rgba(0, 0, 0, 0.12) !important;
}
/* Update model helper buttons */
.model-helper-trigger-btn {
color: #3b82f6 !important; /* blue-500 */
background-color: rgba(59, 130, 246, 0.1) !important;
}
.model-helper-trigger-btn:hover {
background-color: rgba(59, 130, 246, 0.2) !important;
color: #1d4ed8 !important; /* blue-700 */
}
/* 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 page title gradient - comprehensive override */
h1.text-transparent,
.text-transparent.bg-clip-text,
.bg-gradient-to-r.from-violet-400.to-pink-400 {
background: none !important;
color: #1f2937 !important; /* gray-800 - consistent with other pages */
-webkit-background-clip: unset !important;
background-clip: unset !important;
text-shadow: none !important;
font-weight: 800 !important; /* font-extrabold */
}
/* Fix all gradient buttons to use solid blue */
.bg-gradient-to-r.from-violet-500.to-pink-500,
.bg-gradient-to-r.from-gray-600.to-gray-700 {
background: none !important;
}
/* Ensure all violet/purple colors are converted to blue theme */
.text-violet-300,
.text-violet-400,
.text-violet-100 {
color: #3b82f6 !important; /* blue-500 */
}
.border-violet-300,
.border-violet-400 {
border-color: rgba(
59,
130,
246,
0.3
) !important; /* blue-500 with opacity */
}
.hover\\:text-violet-400:hover,
.hover\\:text-violet-100:hover {
color: #2563eb !important; /* blue-600 */
}
.hover\\:bg-violet-700:hover {
background-color: #2563eb !important; /* blue-600 */
}
/* Fix focus states for form elements */
.focus-within\\:border-violet-400:focus-within,
.focus-within\\:ring-violet-400:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
}
/* Fix focus-within border color for auth token wrapper */
.focus-within\\:border-blue-500:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
}
/* More specific selector for auth token wrapper */
div.flex.items-center.flex-grow.border.rounded-md.focus-within\\:border-blue-500:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
}
/* Even more specific selector targeting the exact auth token wrapper */
.mb-6
.flex.items-center
div.flex.items-center.flex-grow.border.rounded-md:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
}
/* 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 */
}
/* Fix select element styling */
.form-select-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 */
outline: none !important;
box-shadow: none !important;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !important;
}
.form-select-themed:focus {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
outline: none !important;
}
/* 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 dynamic input wrapper focus states - convert violet to blue */
.focus-within\\:border-violet-400:focus-within,
.focus-within\\:ring-violet-400:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
}
/* Ensure all array input wrappers use blue theme */
.array-container .flex.items-center.flex-grow.rounded-md {
border-color: rgba(0, 0, 0, 0.12) !important;
}
.array-container .flex.items-center.flex-grow.rounded-md:focus-within {
border-color: #3b82f6 !important; /* blue-500 */
box-shadow: none !important; /* 移除focus阴影 */
}
/* Filename: web/static/css/output.css */
/* 按钮的“默认公民”外观 (inactive) */
.tab-btn {
padding: 0.5rem 1.25rem;
border-radius: 9999px;
font-size: 0.875rem;
font-weight: 500;
transition: all 0.2s ease-in-out;
background-color: #f8fafc !important;
color: #64748b !important;
border: 2px solid #e2e8f0 !important;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05) !important;
transform: translateY(0);
}
/* 按钮在被悬停时的外观 */
.tab-btn:hover {
background-color: #f1f5f9 !important;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05) !important;
}
/* 按钮被授予 .active “荣誉勋章”后的外观 */
.tab-btn.active {
background-color: #3b82f6 !important;
color: #ffffff !important;
border-color: #2563eb !important;
font-weight: 600 !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;
}