From 5a594f86ca1cf2dd46d72c96468a34a0bc2e8ded Mon Sep 17 00:00:00 2001 From: Astound Date: Mon, 27 Oct 2025 00:32:38 -0500 Subject: [PATCH] css DRY --- static/css/custom.css | 475 ++++++++++++++++++++++++++---------------- 1 file changed, 297 insertions(+), 178 deletions(-) diff --git a/static/css/custom.css b/static/css/custom.css index cd4c973..c700c67 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,23 +1,120 @@ /* Estilos personalizados para el Balotario */ :root { + /* Base colors */ --primary-color: #2c3e50; --secondary-color: #3498db; --success-color: #27ae60; --danger-color: #e74c3c; - --warning-color: #f39c1 --light-bg: #ecf0f1; - --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - --gradient-success: linear-gradient(45deg, #27ae60, #58d68d); - --gradient-danger: linear-gradient(45deg, #e74c3c, #ec7063); - --gradient-warning: linear-gradient(45deg, #f39c12, #f7dc6f); + --warning-color: #f39c12; + --light-bg: #ecf0f1; + + /* Light theme colors */ + --light-text: #333333; + --light-bg-primary: #ffffff; + --light-bg-secondary: #f8f9fa; + --light-border: #e9ecef; + + /* Dark theme colors */ + --dark-bg-primary: #2c3e50; + --dark-bg-secondary: #34495e; + --dark-bg-tertiary: #4a5f7a; + --dark-bg-hover: #3d566e; + --dark-bg-secondary-hover: #5a6f8a; + --dark-text-primary: #ecf0f1; + --dark-text-secondary: #e0e0e0; + --dark-text-muted: #bbb; + --dark-border: #5a6c7d; + + /* Extended color palette */ + --white: #ffffff; + --success-light: #58d68d; + --success-border: #2ecc71; + --success-dark: #1e7e34; + --success-text: #0d4016; + --danger-light: #ec7063; + --danger-border: #c82333; + --danger-text: #721c24; + --warning-light: #f7dc6f; + --info-color: #17a2b8; + --purple: #8e44ad; + --purple-light: #a569bd; + --purple-hover: #9b59b6; + --purple-border: #bb8fce; + --blue-light: #5dade2; + --gradient-blue-start: #667eea; + --gradient-blue-end: #764ba2; + --modal-border: #dee2e6; + --dark-body-bg: #1a1a1a; + + /* Question navigator colors */ + --nav-btn-default: var(--dark-bg-secondary); + --nav-btn-default-border: var(--dark-border); + --nav-btn-hover: var(--dark-bg-tertiary); + --nav-btn-visited: var(--purple); + --nav-btn-visited-border: var(--purple-light); + --nav-btn-visited-hover: var(--purple-hover); + --nav-btn-visited-hover-border: var(--purple-border); + --nav-btn-answered: var(--success-color); + --nav-btn-answered-border: var(--success-border); + --nav-btn-current: var(--secondary-color); + --nav-btn-current-border: var(--blue-light); + + /* Shadow colors */ + --shadow-light: rgba(0, 0, 0, 0.1); + --shadow-medium: rgba(0, 0, 0, 0.2); + --shadow-medium-intense: rgba(0, 0, 0, 0.15); + --shadow-dark: rgba(0, 0, 0, 0.3); + --shadow-blue: rgba(52, 152, 219, 0.4); + --shadow-blue-intense: rgba(52, 152, 219, 0.5); + --shadow-green: rgba(39, 174, 96, 0.4); + --shadow-purple: rgba(142, 68, 173, 0.4); + --shadow-purple-intense: rgba(155, 89, 182, 0.5); + + /* Background alpha colors - for better DRY */ + --bg-secondary-alpha-10: rgba(52, 152, 219, 0.1); + --bg-secondary-alpha-20: rgba(52, 152, 219, 0.2); + --bg-secondary-alpha-25: rgba(52, 152, 219, 0.25); + --bg-secondary-alpha-30: rgba(52, 152, 219, 0.3); + --bg-secondary-alpha-35: rgba(52, 152, 219, 0.35); + --bg-success-alpha-20: rgba(39, 174, 96, 0.2); + --bg-success-alpha-25: rgba(39, 174, 96, 0.25); + --bg-success-alpha-30: rgba(39, 174, 96, 0.3); + --bg-success-alpha-40: rgba(39, 174, 96, 0.4); + --bg-danger-alpha-20: rgba(231, 76, 60, 0.2); + --bg-danger-alpha-25: rgba(231, 76, 60, 0.25); + --bg-danger-alpha-30: rgba(231, 76, 60, 0.3); + --bg-danger-alpha-40: rgba(231, 76, 60, 0.4); + --bg-white-alpha-95: rgba(255, 255, 255, 0.95); + --bg-dark-primary-alpha-95: rgba(44, 62, 80, 0.95); + --bg-dark-primary-alpha-98: rgba(44, 62, 80, 0.98); + --bg-navbar-dark: rgba(26, 26, 26, 0.95); + --bg-white-alpha-10: rgba(255, 255, 255, 0.1); + --bg-white-alpha-20: rgba(255, 255, 255, 0.2); + --bg-white-alpha-30: rgba(255, 255, 255, 0.3); + --bg-white-alpha-50: rgba(255, 255, 255, 0.5); + --bg-modal-backdrop: rgba(0, 0, 0, 0.5); + + /* Gradients */ + --gradient-primary: linear-gradient(135deg, var(--gradient-blue-start) 0%, var(--gradient-blue-end) 100%); + --gradient-success: linear-gradient(45deg, var(--success-color), var(--success-light)); + --gradient-danger: linear-gradient(45deg, var(--danger-color), var(--danger-light)); + --gradient-warning: linear-gradient(45deg, var(--warning-color), var(--warning-light)); } /* Animaciones personalizadas */ @keyframes pulse { - 0% { transform: scale(1); } - 50% { transform: scale(1.05); } - 100% { transform: scale(1); } + 0% { + transform: scale(1); + } + + 50% { + transform: scale(1.05); + } + + 100% { + transform: scale(1); + } } @keyframes slideInUp { @@ -25,6 +122,7 @@ opacity: 0; transform: translateY(30px); } + to { opacity: 1; transform: translateY(0); @@ -36,6 +134,7 @@ opacity: 0; transform: scale(0.9); } + to { opacity: 1; transform: scale(1); @@ -49,7 +148,7 @@ .card-hover:hover { transform: translateY(-8px); - box-shadow: 0 20px 40px rgba(0,0,0,0.15); + box-shadow: 0 20px 40px var(--shadow-medium-intense); } /* Botones con efectos especiales */ @@ -65,7 +164,7 @@ left: -100%; width: 100%; height: 100%; - background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent); + background: linear-gradient(90deg, transparent, var(--bg-white-alpha-30), transparent); transition: left 0.5s; } @@ -93,11 +192,11 @@ } .progress-ring .bg { - stroke: rgba(255,255,255,0.2); + stroke: var(--bg-white-alpha-20); } .progress-ring .progress { - stroke: #fff; + stroke: var(--white); stroke-dasharray: 283; stroke-dashoffset: 283; transition: stroke-dashoffset 0.5s ease-in-out; @@ -105,11 +204,11 @@ /* Efectos de texto */ .text-glow { - text-shadow: 0 0 10px rgba(255,255,255,0.5); + text-shadow: 0 0 10px var(--bg-white-alpha-50); } .text-gradient { - background: linear-gradient(45deg, #667eea, #764ba2); + background: linear-gradient(45deg, var(--gradient-blue-start), var(--gradient-blue-end)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; @@ -117,12 +216,12 @@ /* Tarjetas de preguntas mejoradas - tema claro por defecto */ .question-card-enhanced { - background: white; - color: #333333; + background: var(--white); + color: var(--light-text); border-radius: 20px; padding: 2.5rem; margin-bottom: 2rem; - box-shadow: 0 15px 35px rgba(0,0,0,0.1); + box-shadow: 0 15px 35px var(--shadow-light); position: relative; overflow: hidden; } @@ -139,8 +238,8 @@ /* Opciones de respuesta mejoradas */ .option-enhanced { - background: white; - border: 2px solid #e9ecef; + background: var(--white); + border: 2px solid var(--light-border); border-radius: 15px; padding: 20px; margin-bottom: 15px; @@ -157,7 +256,7 @@ left: -100%; width: 100%; height: 100%; - background: linear-gradient(90deg, transparent, rgba(52, 152, 219, 0.1), transparent); + background: linear-gradient(90deg, transparent, var(--bg-secondary-alpha-10), transparent); transition: left 0.3s ease; pointer-events: none; } @@ -169,46 +268,46 @@ .option-enhanced:hover { border-color: var(--secondary-color); transform: translateX(5px); - box-shadow: 0 8px 25px rgba(52, 152, 219, 0.2); + box-shadow: 0 8px 25px var(--shadow-blue); } .option-enhanced.selected { border-color: var(--secondary-color); - background: rgba(52, 152, 219, 0.25); + background: var(--bg-secondary-alpha-25); transform: translateX(5px); - box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3); + box-shadow: 0 4px 15px var(--bg-secondary-alpha-30); } .option-enhanced.correct { border-color: var(--success-color); - background: rgba(39, 174, 96, 0.25); + background: var(--bg-success-alpha-25); animation: pulse 0.6s ease-in-out; - color: #1e5631; + color: var(--success-dark); font-weight: 600; } .option-enhanced.incorrect { border-color: var(--danger-color); - background: rgba(231, 76, 60, 0.25); - color: #721c24; + background: var(--bg-danger-alpha-25); + color: var(--danger-text); font-weight: 600; } /* Navegador de preguntas mejorado */ .question-navigator { - background: rgba(255,255,255,0.95); + background: var(--bg-white-alpha-95); backdrop-filter: blur(10px); border-radius: 15px; padding: 1.5rem; - box-shadow: 0 8px 25px rgba(0,0,0,0.1); + box-shadow: 0 8px 25px var(--shadow-light); } .nav-question-btn { width: 45px; height: 45px; border-radius: 50%; - border: 2px solid #e9ecef; - background: white; + border: 2px solid var(--light-border); + background: var(--white); display: flex; align-items: center; justify-content: center; @@ -219,7 +318,7 @@ .nav-question-btn:hover { transform: scale(1.1); - box-shadow: 0 5px 15px rgba(0,0,0,0.2); + box-shadow: 0 5px 15px var(--shadow-medium); } .nav-question-btn.answered { @@ -271,19 +370,24 @@ left: -50%; width: 200%; height: 200%; - background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%); + background: radial-gradient(circle, var(--bg-white-alpha-10) 0%, transparent 70%); animation: rotate 20s linear infinite; } @keyframes rotate { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } } .stats-number { font-size: 2.5rem; font-weight: bold; - text-shadow: 0 2px 4px rgba(0,0,0,0.3); + text-shadow: 0 2px 4px var(--shadow-dark); } /* Responsive mejoras */ @@ -314,247 +418,247 @@ [data-theme="light"] .option-enhanced.selected, :root:not([data-theme="dark"]) .option-enhanced.selected { border-color: var(--secondary-color); - background: rgba(52, 152, 219, 0.35); + background: var(--bg-secondary-alpha-35); transform: translateX(5px); - box-shadow: 0 6px 20px rgba(52, 152, 219, 0.4); + box-shadow: 0 6px 20px var(--shadow-blue); border-width: 3px; } [data-theme="light"] .option-btn.selected, :root:not([data-theme="dark"]) .option-btn.selected { - background: rgba(52, 152, 219, 0.35) !important; + background: var(--bg-secondary-alpha-35) !important; border-color: var(--secondary-color) !important; - box-shadow: 0 6px 20px rgba(52, 152, 219, 0.4) !important; + box-shadow: 0 6px 20px var(--shadow-blue) !important; border-width: 3px !important; } /* Tema claro - respuestas correctas más intensas */ [data-theme="light"] .option-enhanced.correct, :root:not([data-theme="dark"]) .option-enhanced.correct { - border-color: #1e7e34; - background: rgba(39, 174, 96, 0.4); - color: #0d4016; + border-color: var(--success-dark); + background: var(--bg-success-alpha-40); + color: var(--success-text); font-weight: 700; border-width: 3px; - box-shadow: 0 6px 20px rgba(39, 174, 96, 0.3); + box-shadow: 0 6px 20px var(--shadow-green); } [data-theme="light"] .option-btn.correct, :root:not([data-theme="dark"]) .option-btn.correct { - background: rgba(39, 174, 96, 0.4) !important; - border-color: #1e7e34 !important; - color: #0d4016 !important; + background: var(--bg-success-alpha-40) !important; + border-color: var(--success-dark) !important; + color: var(--success-text) !important; font-weight: 700 !important; border-width: 3px !important; - box-shadow: 0 6px 20px rgba(39, 174, 96, 0.3) !important; + box-shadow: 0 6px 20px var(--shadow-green) !important; } /* Tema claro - respuestas incorrectas más intensas */ [data-theme="light"] .option-enhanced.incorrect, :root:not([data-theme="dark"]) .option-enhanced.incorrect { - border-color: #c82333; - background: rgba(231, 76, 60, 0.4); - color: #721c24; + border-color: var(--danger-border); + background: var(--bg-danger-alpha-40); + color: var(--danger-text); font-weight: 700; border-width: 3px; - box-shadow: 0 6px 20px rgba(231, 76, 60, 0.3); + box-shadow: 0 6px 20px var(--bg-danger-alpha-30); } [data-theme="light"] .option-btn.incorrect, :root:not([data-theme="dark"]) .option-btn.incorrect { - background: rgba(231, 76, 60, 0.4) !important; - border-color: #c82333 !important; - color: #721c24 !important; + background: var(--bg-danger-alpha-40) !important; + border-color: var(--danger-border) !important; + color: var(--danger-text) !important; font-weight: 700 !important; border-width: 3px !important; - box-shadow: 0 6px 20px rgba(231, 76, 60, 0.3) !important; + box-shadow: 0 6px 20px var(--bg-danger-alpha-30) !important; } /* Modal support for light theme - ensuring proper styling */ [data-theme="light"] .modal-content, :root:not([data-theme="dark"]) .modal-content { - background: #ffffff !important; - color: #333333 !important; - border: 1px solid #dee2e6 !important; + background: var(--white) !important; + color: var(--light-text) !important; + border: 1px solid var(--modal-border) !important; } [data-theme="light"] .modal-header, :root:not([data-theme="dark"]) .modal-header { - border-bottom-color: #dee2e6 !important; + border-bottom-color: var(--modal-border) !important; } [data-theme="light"] .modal-footer, :root:not([data-theme="dark"]) .modal-footer { - border-top-color: #dee2e6 !important; + border-top-color: var(--modal-border) !important; } [data-theme="light"] .modal-title, :root:not([data-theme="dark"]) .modal-title { - color: #333333 !important; + color: var(--light-text) !important; } /* Tema claro - question cards */ [data-theme="light"] .question-card-enhanced, :root:not([data-theme="dark"]) .question-card-enhanced { - background: white !important; - color: #333333 !important; - box-shadow: 0 15px 35px rgba(0,0,0,0.1) !important; + background: var(--white) !important; + color: var(--light-text) !important; + box-shadow: 0 15px 35px var(--shadow-light) !important; } [data-theme="light"] .question-card, :root:not([data-theme="dark"]) .question-card { - background: white !important; - color: #333333 !important; + background: var(--white) !important; + color: var(--light-text) !important; } /* Modo oscuro */ [data-theme="dark"] { - background: #1a1a1a !important; - color: #e0e0e0 !important; + background: var(--dark-body-bg) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] body { - background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%) !important; - color: #e0e0e0 !important; + background: linear-gradient(135deg, var(--dark-bg-primary) 0%, var(--dark-bg-secondary) 100%) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .container-main { - background: rgba(44, 62, 80, 0.95) !important; - color: #e0e0e0 !important; + background: var(--bg-dark-primary-alpha-95) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .card { - background: #34495e !important; - color: #e0e0e0 !important; - border-color: #4a5f7a !important; + background: var(--dark-bg-secondary) !important; + color: var(--dark-text-secondary) !important; + border-color: var(--dark-bg-tertiary) !important; } [data-theme="dark"] .question-card, [data-theme="dark"] .question-card-enhanced { - background: #34495e !important; - color: #e0e0e0 !important; + background: var(--dark-bg-secondary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .option-btn, [data-theme="dark"] .option-enhanced { - background: #2c3e50 !important; - border-color: #4a5f7a !important; - color: #e0e0e0 !important; + background: var(--dark-bg-primary) !important; + border-color: var(--dark-bg-tertiary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .option-btn:hover, [data-theme="dark"] .option-enhanced:hover { - background: #3d566e !important; + background: var(--dark-bg-hover) !important; border-color: var(--secondary-color) !important; } [data-theme="dark"] .option-btn.correct, [data-theme="dark"] .option-enhanced.correct { - background: rgba(39, 174, 96, 0.3) !important; - border-color: #27ae60 !important; - color: #ffffff !important; + background: var(--bg-success-alpha-30) !important; + border-color: var(--success-color) !important; + color: var(--white) !important; } [data-theme="dark"] .option-btn.incorrect, [data-theme="dark"] .option-enhanced.incorrect { - background: rgba(231, 76, 60, 0.3) !important; - border-color: #e74c3c !important; - color: #ffffff !important; + background: var(--bg-danger-alpha-30) !important; + border-color: var(--danger-color) !important; + color: var(--white) !important; } [data-theme="dark"] .option-btn.selected, [data-theme="dark"] .option-enhanced.selected { - background: rgba(52, 152, 219, 0.3) !important; - border-color: #3498db !important; - color: #ffffff !important; + background: var(--bg-secondary-alpha-30) !important; + border-color: var(--secondary-color) !important; + color: var(--white) !important; } [data-theme="dark"] .navbar { - background: rgba(26, 26, 26, 0.95) !important; + background: var(--bg-navbar-dark) !important; } [data-theme="dark"] .form-control, [data-theme="dark"] .form-select { - background: #2c3e50 !important; - border-color: #4a5f7a !important; - color: #e0e0e0 !important; + background: var(--dark-bg-primary) !important; + border-color: var(--dark-bg-tertiary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .form-control:focus, [data-theme="dark"] .form-select:focus { - background: #34495e !important; + background: var(--dark-bg-secondary) !important; border-color: var(--secondary-color) !important; - color: #e0e0e0 !important; - box-shadow: 0 0 0 0.2rem rgba(52, 152, 219, 0.25) !important; + color: var(--dark-text-secondary) !important; + box-shadow: 0 0 0 0.2rem var(--bg-secondary-alpha-25) !important; } [data-theme="dark"] .alert-success { - background: rgba(39, 174, 96, 0.2) !important; + background: var(--bg-success-alpha-20) !important; border-color: var(--success-color) !important; - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .alert-danger { - background: rgba(231, 76, 60, 0.2) !important; + background: var(--bg-danger-alpha-20) !important; border-color: var(--danger-color) !important; - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .badge { - color: #fff !important; + color: var(--white) !important; } [data-theme="dark"] .text-muted { - color: #bbb !important; + color: var(--dark-text-muted) !important; } [data-theme="dark"] .correct-option { - background: rgba(39, 174, 96, 0.4) !important; - border-color: #27ae60 !important; - color: #ffffff !important; + background: var(--bg-success-alpha-40) !important; + border-color: var(--success-color) !important; + color: var(--white) !important; } [data-theme="dark"] .answer-indicator { - color: #27ae60 !important; + color: var(--success-color) !important; } [data-theme="dark"] .fa-check-circle { - color: #27ae60 !important; + color: var(--success-color) !important; } [data-theme="dark"] .text-success { - color: #2ecc71 !important; + color: var(--success-border) !important; } [data-theme="dark"] .text-danger { - color: #e74c3c !important; + color: var(--danger-color) !important; } [data-theme="dark"] .text-warning { - color: #f39c12 !important; + color: var(--warning-color) !important; } [data-theme="dark"] .text-primary { - color: #3498db !important; + color: var(--secondary-color) !important; } /* Modal support for dark theme */ [data-theme="dark"] .modal-content { - background: #2c3e50 !important; - color: #e0e0e0 !important; - border: 1px solid #4a5f7a !important; + background: var(--dark-bg-primary) !important; + color: var(--dark-text-secondary) !important; + border: 1px solid var(--dark-bg-tertiary) !important; } [data-theme="dark"] .modal-header { - border-bottom-color: #4a5f7a !important; + border-bottom-color: var(--dark-bg-tertiary) !important; } [data-theme="dark"] .modal-footer { - border-top-color: #4a5f7a !important; + border-top-color: var(--dark-bg-tertiary) !important; } [data-theme="dark"] .modal-title { - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .btn-close { @@ -563,25 +667,25 @@ /* Buttons in dark theme */ [data-theme="dark"] .btn-secondary { - background: #4a5f7a !important; - border-color: #4a5f7a !important; - color: #e0e0e0 !important; + background: var(--dark-bg-tertiary) !important; + border-color: var(--dark-bg-tertiary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .btn-secondary:hover { - background: #5a6f8a !important; - border-color: #5a6f8a !important; + background: var(--dark-bg-secondary-hover) !important; + border-color: var(--dark-bg-secondary-hover) !important; } [data-theme="dark"] .btn-outline-secondary { - border-color: #4a5f7a !important; - color: #e0e0e0 !important; + border-color: var(--dark-bg-tertiary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] .btn-outline-secondary:hover { - background: #4a5f7a !important; - border-color: #4a5f7a !important; - color: #ffffff !important; + background: var(--dark-bg-tertiary) !important; + border-color: var(--dark-bg-tertiary) !important; + color: var(--white) !important; } [data-theme="dark"] .btn-outline-primary { @@ -592,65 +696,65 @@ [data-theme="dark"] .btn-outline-primary:hover { background: var(--secondary-color) !important; border-color: var(--secondary-color) !important; - color: #ffffff !important; + color: var(--white) !important; } /* Progress bars in dark theme */ [data-theme="dark"] .progress { - background: rgba(255, 255, 255, 0.1) !important; + background: var(--bg-white-alpha-10) !important; } /* Badges in dark theme */ [data-theme="dark"] .badge.bg-warning { background: var(--warning-color) !important; - color: #ffffff !important; + color: var(--white) !important; } [data-theme="dark"] .badge.bg-success { background: var(--success-color) !important; - color: #ffffff !important; + color: var(--white) !important; } [data-theme="dark"] .badge.bg-primary { background: var(--secondary-color) !important; - color: #ffffff !important; + color: var(--white) !important; } /* Question navigator buttons in dark theme */ -/* Dark theme question navigator buttons - DRY approach */ +/* Dark theme question navigator buttons - DRY approach with CSS variables */ [data-theme="dark"] .question-nav-btn, [data-theme="dark"] .nav-question-btn { - background: #34495e !important; - border: 2px solid #5a6c7d !important; - color: #ecf0f1 !important; - box-shadow: 0 2px 8px rgba(0,0,0,0.3) !important; + background: var(--nav-btn-default) !important; + border: 2px solid var(--nav-btn-default-border) !important; + color: var(--dark-text-primary) !important; + box-shadow: 0 2px 8px var(--shadow-dark) !important; transition: all 0.3s ease !important; } /* Hover state for all buttons */ [data-theme="dark"] .question-nav-btn:hover, [data-theme="dark"] .nav-question-btn:hover { - background: #4a5f7a !important; - border-color: #3498db !important; - color: #ffffff !important; - box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4) !important; + background: var(--nav-btn-hover) !important; + border-color: var(--secondary-color) !important; + color: var(--white) !important; + box-shadow: 0 4px 12px var(--shadow-blue) !important; transform: scale(1.05) !important; } /* Visited questions - purple */ [data-theme="dark"] .question-nav-btn.visited, [data-theme="dark"] .nav-question-btn.visited { - background: #8e44ad !important; - border-color: #a569bd !important; - color: #ffffff !important; - box-shadow: 0 3px 10px rgba(142, 68, 173, 0.4) !important; + background: var(--nav-btn-visited) !important; + border-color: var(--nav-btn-visited-border) !important; + color: var(--white) !important; + box-shadow: 0 3px 10px var(--shadow-purple) !important; } [data-theme="dark"] .question-nav-btn.visited:hover, [data-theme="dark"] .nav-question-btn.visited:hover { - background: #9b59b6 !important; - border-color: #bb8fce !important; - box-shadow: 0 4px 12px rgba(155, 89, 182, 0.5) !important; + background: var(--nav-btn-visited-hover) !important; + border-color: var(--nav-btn-visited-hover-border) !important; + box-shadow: 0 4px 12px var(--shadow-purple-intense) !important; } /* Answered questions - green (higher priority than visited) */ @@ -658,10 +762,10 @@ [data-theme="dark"] .nav-question-btn.answered, [data-theme="dark"] .question-nav-btn.btn-success, [data-theme="dark"] .nav-question-btn.btn-success { - background: #27ae60 !important; - border-color: #2ecc71 !important; - color: #ffffff !important; - box-shadow: 0 3px 10px rgba(39, 174, 96, 0.4) !important; + background: var(--nav-btn-answered) !important; + border-color: var(--nav-btn-answered-border) !important; + color: var(--white) !important; + box-shadow: 0 3px 10px var(--shadow-green) !important; } /* Current question - blue (highest priority) */ @@ -669,10 +773,10 @@ [data-theme="dark"] .nav-question-btn.current, [data-theme="dark"] .question-nav-btn.btn-primary, [data-theme="dark"] .nav-question-btn.btn-primary { - background: #3498db !important; - border-color: #5dade2 !important; - color: #ffffff !important; - box-shadow: 0 3px 10px rgba(52, 152, 219, 0.5) !important; + background: var(--nav-btn-current) !important; + border-color: var(--nav-btn-current-border) !important; + color: var(--white) !important; + box-shadow: 0 3px 10px var(--shadow-blue-intense) !important; transform: scale(1.1) !important; z-index: 10 !important; } @@ -680,7 +784,7 @@ /* Timer and other exam elements */ [data-theme="dark"] .timer-display { background: var(--gradient-warning) !important; - color: #ffffff !important; + color: var(--white) !important; } [data-theme="dark"] .timer-display.warning { @@ -689,15 +793,15 @@ /* Question navigator card */ [data-theme="dark"] .question-navigator { - background: rgba(44, 62, 80, 0.98) !important; - color: #ecf0f1 !important; - border: 1px solid #5a6c7d !important; - box-shadow: 0 4px 15px rgba(0,0,0,0.3) !important; + background: var(--bg-dark-primary-alpha-98) !important; + color: var(--dark-text-primary) !important; + border: 1px solid var(--dark-border) !important; + box-shadow: 0 4px 15px var(--shadow-dark) !important; } [data-theme="dark"] .question-navigator .card-title { - color: #ecf0f1 !important; - border-bottom: 1px solid #5a6c7d; + color: var(--dark-text-primary) !important; + border-bottom: 1px solid var(--dark-border); padding-bottom: 0.5rem; margin-bottom: 1rem; } @@ -765,29 +869,29 @@ body.modal-open { left: 0 !important; width: 100vw !important; height: 100vh !important; - background-color: rgba(0, 0, 0, 0.5) !important; + background-color: var(--bg-modal-backdrop) !important; } /* Custom modal theme support */ [data-theme="dark"] #confirmDialog { - background: #2c3e50 !important; - color: #e0e0e0 !important; + background: var(--dark-bg-primary) !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] #confirmDialog h5 { - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] #confirmDialog p { - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] #confirmDialog #confirm-message { - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } [data-theme="dark"] #confirmModalClose { - color: #e0e0e0 !important; + color: var(--dark-text-secondary) !important; } /* Modo oscuro automático removido para evitar conflictos */ @@ -803,10 +907,24 @@ body.modal-open { } @keyframes dots { - 0%, 20% { content: ''; } - 40% { content: '.'; } - 60% { content: '..'; } - 80%, 100% { content: '...'; } + + 0%, + 20% { + content: ''; + } + + 40% { + content: '.'; + } + + 60% { + content: '..'; + } + + 80%, + 100% { + content: '...'; + } } /* Confetti effect para celebrar */ @@ -824,7 +942,7 @@ body.modal-open { position: absolute; width: 10px; height: 10px; - background: #f39c12; + background: var(--warning-color); animation: confetti-fall 3s linear infinite; } @@ -833,6 +951,7 @@ body.modal-open { transform: translateY(-100vh) rotate(0deg); opacity: 1; } + 100% { transform: translateY(100vh) rotate(720deg); opacity: 0;