diff --git a/programmer/static/programmer/css/styles.css b/programmer/static/programmer/css/styles.css index d3347a9..f33ee2d 100644 --- a/programmer/static/programmer/css/styles.css +++ b/programmer/static/programmer/css/styles.css @@ -6,48 +6,69 @@ } :root { - /* 1C Brand Colors - Modern Gradient Palette */ - --primary: #FF6B00; /* 1C Orange */ + /* Брендовые цвета (не меняются от темы) */ + --primary: #FF6B00; --primary-dark: #E55A00; --primary-light: #FF8A3D; - --secondary: #0055A5; /* 1C Blue */ + --secondary: #0055A5; --secondary-dark: #004488; --secondary-light: #3377CC; --accent: #00A8FF; - - /* Extended 1C Color Palette */ + --gradient-primary: linear-gradient(135deg, #FF6B00 0%, #FF8A3D 100%); --gradient-secondary: linear-gradient(135deg, #0055A5 0%, #3377CC 100%); --gradient-hero: linear-gradient(135deg, #FF6B00 0%, #0055A5 100%); - - --text-primary: #1A1F36; - --text-secondary: #4A5568; - --text-light: #718096; - - --bg-primary: #FFFFFF; - --bg-secondary: #F7FAFC; - --bg-tertiary: #EDF2F7; - - --border-light: #E2E8F0; - --border-medium: #CBD5E0; - - /* Modern Shadows */ + + /* Общие тени и радиусы (не зависят от темы) */ --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); - - /* Border radius */ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 20px; - - /* Transitions */ --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); } +/* Светлая тема (по умолчанию) */ +body { + --text-primary: #1A1F36; + --text-secondary: #4A5568; + --text-light: #718096; + --bg-primary: #FFFFFF; + --bg-secondary: #F7FAFC; + --bg-tertiary: #EDF2F7; + --bg-card: #FFFFFF; /* в светлой теме карты светлые */ + --border-light: #E2E8F0; + --border-medium: #CBD5E0; + --border-dark: #252A3A; /* для тёмной темы, но оставим */ + /* --footer-bg: linear-gradient(135deg, var(--text-primary) 0%, #2D3748 100%);*/ + --footer-bg: linear-gradient(135deg, #F7FAFC 0%, #E2E8F0 100%); + --mobile-menu-bg: #FFFFFF; + --mobile-menu-text: #1A1F36; + --mobile-menu-border: #E2E8F0; +} + +/* Тёмная тема */ +body.theme-dark { + --text-primary: #FFFFFF; + --text-secondary: #B0B8D1; + --text-light: #8A93B0; + --bg-primary: #1A1F2E; + --bg-secondary: #151925; + --bg-tertiary: #0F131F; + --bg-card: #222738; + --border-light: #2D3447; + --border-medium: #3A4158; + --border-dark: #252A3A; + --footer-bg: linear-gradient(135deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%); + --mobile-menu-bg: #222738; + --mobile-menu-text: #FFFFFF; + --mobile-menu-border: #2D3447; +} + /* ===== BASE STYLES ===== */ html { scroll-behavior: smooth; @@ -57,9 +78,10 @@ body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; line-height: 1.6; color: var(--text-primary); - background: linear-gradient(135deg, #F7FAFC 0%, #EDF2F7 100%); + background: linear-gradient(135deg, var(--bg-tertiary) 0%, var(--bg-secondary) 50%, var(--bg-primary) 100%); font-size: 16px; overflow-x: hidden; + min-height: 100vh; } .container { @@ -68,11 +90,12 @@ body { padding: 0 20px; } -/* ===== ENHANCED HEADER ===== */ +/* ===== HEADER ===== */ .header { - background: rgba(255, 255, 255, 0.95); - border-bottom: 1px solid var(--border-light); - box-shadow: var(--shadow-sm); + background: rgba(var(--bg-primary-rgb), 0.95); /* если нужно, но пока так */ + background: var(--bg-primary); + border-bottom: 1px solid var(--border-dark); + box-shadow: var(--shadow-lg); position: sticky; top: 0; z-index: 1000; @@ -113,6 +136,7 @@ body { border-radius: var(--radius-md); background: var(--gradient-primary); padding: 4px; + filter: drop-shadow(0 4px 8px rgba(255, 107, 0, 0.3)); } .nav-menu { @@ -160,7 +184,7 @@ body { background: var(--gradient-primary); color: white; text-decoration: none; - padding: 0.875rem 1.75rem; + padding: 0.6rem 1.2rem; border-radius: var(--radius-lg); font-weight: 600; transition: var(--transition); @@ -177,15 +201,24 @@ body { background: var(--gradient-primary); } -/* ===== ENHANCED HERO SECTION ===== */ +/* ===== HERO ===== */ .hero-section { text-align: center; - padding: 4rem 0 3rem; - background: var(--gradient-hero); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; + padding: 2rem 0 2rem; margin-bottom: 3rem; + position: relative; +} + +.hero-section::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 200px; + height: 200px; + background: radial-gradient(circle, rgba(255, 107, 0, 0.2) 0%, transparent 70%); + border-radius: 50%; } .hero-title { @@ -197,6 +230,7 @@ body { -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; + text-shadow: 0 4px 20px rgba(255, 107, 0, 0.3); } .hero-subtitle { @@ -208,11 +242,11 @@ body { line-height: 1.6; } -/* ===== MODERN CARD STYLES ===== */ +/* ===== MODERN CARD ===== */ .modern-card { - background: var(--bg-primary); + background: var(--bg-card); border-radius: var(--radius-xl); - padding: 2rem; + padding: 1rem; box-shadow: var(--shadow-lg); border: 1px solid var(--border-light); transition: var(--transition-slow); @@ -234,6 +268,7 @@ body { .modern-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-xl); + border-color: var(--primary-light); } .modern-card.secondary::before { @@ -283,7 +318,7 @@ body { flex-wrap: wrap; } -/* ===== GRID LAYOUTS ===== */ +/* ===== GRID ===== */ .grid { display: grid; gap: 2rem; @@ -297,7 +332,7 @@ body { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } -/* ===== ENHANCED BUTTONS ===== */ +/* ===== BUTTONS ===== */ .btn { display: inline-flex; align-items: center; @@ -321,7 +356,7 @@ body { left: -100%; width: 100%; height: 100%; - background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent); + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); transition: left 0.5s; } @@ -363,11 +398,15 @@ body { transform: translateY(-2px); } -/* ===== ENHANCED ABOUT PAGE ===== */ +/* ===== ABOUT PAGE ===== */ .about-header { text-align: center; margin-bottom: 3rem; - padding: 2rem 0; + padding: 3rem 0; + background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-primary) 100%); + border-radius: var(--radius-xl); + box-shadow: var(--shadow-lg); + border: 1px solid var(--border-light); } .about-header h2 { @@ -389,10 +428,11 @@ body { .about-section { margin-bottom: 3rem; padding: 2.5rem; - background: var(--bg-primary); + background: var(--bg-card); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); border-left: 4px solid var(--primary); + border: 1px solid var(--border-light); } .about-section h3 { @@ -413,7 +453,7 @@ body { } .skill-category { - background: var(--bg-secondary); + background: var(--bg-primary); padding: 1.5rem; border-radius: var(--radius-lg); border: 1px solid var(--border-light); @@ -423,6 +463,7 @@ body { .skill-category:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); + border-color: var(--primary-light); } .skill-category h4 { @@ -432,7 +473,32 @@ body { font-size: 1.125rem; } -/* ===== ENHANCED COMPETENCE STYLES ===== */ +.skill-category ul { + list-style: none; + padding: 0; +} + +.skill-category li { + padding: 0.5rem 0; + color: var(--text-secondary); + border-bottom: 1px solid var(--border-dark); + position: relative; + padding-left: 1.5rem; +} + +.skill-category li:before { + content: '▸'; + position: absolute; + left: 0; + color: var(--primary); + font-weight: bold; +} + +.skill-category li:last-child { + border-bottom: none; +} + +/* ===== COMPETENCE ===== */ .competence-grid { display: grid; gap: 2rem; @@ -443,16 +509,18 @@ body { gap: 2rem; align-items: flex-start; padding: 2rem; - background: var(--bg-primary); + background: var(--bg-card); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); border-left: 4px solid var(--secondary); transition: var(--transition); + border: 1px solid var(--border-light); } .competence-item:hover { transform: translateX(8px); box-shadow: var(--shadow-xl); + border-color: var(--primary-light); } .competence-scan-wrapper { @@ -502,7 +570,7 @@ body { transform: translateY(0); } -/* ===== ENHANCED RECALL STYLES ===== */ +/* ===== RECALL ===== */ .recall-grid { display: grid; gap: 2rem; @@ -547,15 +615,75 @@ body { font-weight: 600; } -/* ===== ENHANCED PAGE HEADERS ===== */ +/* Стили для страницы отзывов */ +.recall-item { + display: flex; + flex-direction: column; + gap: 1.5rem; +} + +.recall-content { + display: flex; + gap: 2rem; + align-items: flex-start; +} + +.recall-scan-wrapper { + flex-shrink: 0; +} + +.recall-scan-container { + width: 280px; + cursor: pointer; + border-radius: var(--radius-lg); + overflow: hidden; + border: 2px solid var(--border-light); + transition: var(--transition); + position: relative; + box-shadow: var(--shadow-md); +} + +.recall-scan-container:hover { + transform: translateY(-4px) scale(1.02); + box-shadow: var(--shadow-xl); + border-color: var(--primary); +} + +.recall-scan { + width: 100%; + height: auto; + display: block; + transition: var(--transition); +} + +.recall-text { + flex: 1; + min-width: 0; + line-height: 1.7; + font-size: 1.05rem; +} + +/* ===== PAGE HEADERS ===== */ .page-header { margin-bottom: 3rem; padding: 3rem 0; text-align: center; - background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%); + background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-primary) 100%); border-radius: var(--radius-xl); - box-shadow: var(--shadow-md); + box-shadow: var(--shadow-lg); border: 1px solid var(--border-light); + position: relative; + overflow: hidden; +} + +.page-header::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + background: var(--gradient-primary); } .page-title { @@ -567,6 +695,7 @@ body { -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; + text-shadow: 0 4px 20px rgba(255, 107, 0, 0.3); } .page-subtitle { @@ -577,13 +706,14 @@ body { margin: 0 auto; } -/* ===== ENHANCED FOOTER ===== */ +/* ===== FOOTER ===== */ .footer { - background: linear-gradient(135deg, var(--text-primary) 0%, #2D3748 100%); - color: white; - padding: 4rem 0 2rem; - margin-top: 6rem; + background: var(--footer-bg); + color: var(--text-primary); + padding: 1rem 0 0rem; + margin-top: 3rem; position: relative; + border-top: 1px solid var(--border-dark); } .footer::before { @@ -599,20 +729,21 @@ body { .footer-content { display: grid; grid-template-columns: 1fr 1fr 1fr; - gap: 3rem; + gap: 2rem; margin-bottom: 3rem; } .footer-info h3 { - margin-bottom: 1rem; - color: white; - font-size: 1.5rem; + margin-bottom: 0.5rem; + color: var(--text-primary); + font-size: 1.25rem; font-weight: 700; } .footer-info p { opacity: 0.9; font-size: 1.05rem; + color: var(--text-secondary); } .footer-contacts p { @@ -622,15 +753,17 @@ body { align-items: center; gap: 0.5rem; font-size: 1.05rem; + color: var(--text-secondary); } .footer-copyright { grid-column: 1 / -1; text-align: center; padding-top: 2rem; - border-top: 1px solid rgba(255, 255, 255, 0.2); + border-top: 1px solid var(--border-light); opacity: 0.7; font-size: 0.95rem; + color: var(--text-light); } /* ===== ANIMATIONS ===== */ @@ -646,24 +779,14 @@ body { } @keyframes float { - 0%, 100% { - transform: translateY(0); - } - 50% { - transform: translateY(-10px); - } + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-10px); } } @keyframes gradientShift { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } } .fade-in { @@ -679,138 +802,50 @@ body { animation: gradientShift 3s ease infinite; } -/* ===== RESPONSIVE DESIGN ===== */ -@media (max-width: 1024px) { - .hero-title { - font-size: 3rem; - } - - .grid-2 { - grid-template-columns: 1fr; - } - - .footer-content { - grid-template-columns: 1fr 1fr; - } -} - -@media (max-width: 768px) { - .container { - padding: 0 16px; - } - - .nav { - flex-direction: column; - gap: 1.5rem; - text-align: center; - } - - .nav-menu { - justify-content: center; - gap: 1.5rem; - } - - .hero-title { - font-size: 2.5rem; - } - - .hero-subtitle { - font-size: 1.125rem; - } - - .competence-item { - flex-direction: column; - text-align: center; - gap: 1.5rem; - } - - .competence-scan-container { - width: 100%; - max-width: 280px; - margin: 0 auto; - } - - .footer-content { - grid-template-columns: 1fr; - text-align: center; - gap: 2rem; - } - - .page-content { - padding: 1.5rem; - } - - .about-section { - padding: 2rem 1.5rem; - } -} - -@media (max-width: 480px) { - .main { - padding: 1rem 0; - } - - .page-content { - padding: 1rem; - } - - .modern-card { - padding: 1.5rem; - } - - .card-actions { - flex-direction: column; - } - - .btn { - width: 100%; - justify-content: center; - } - - .nav-menu { - flex-direction: column; - gap: 1rem; - } - - .hero-title { - font-size: 2rem; - } - - .page-title { - font-size: 2rem; - } -} - /* ===== UTILITY CLASSES ===== */ .text-center { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } - .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } - .mb-1 { margin-bottom: 0.5rem; } .mb-2 { margin-bottom: 1rem; } .mb-3 { margin-bottom: 1.5rem; } .mb-4 { margin-bottom: 2rem; } - .mt-1 { margin-top: 0.5rem; } .mt-2 { margin-top: 1rem; } .mt-3 { margin-top: 1.5rem; } .mt-4 { margin-top: 2rem; } - .hidden { display: none; } /* ===== CUSTOM COMPONENTS ===== */ .content-card { - background: var(--bg-primary); + background: var(--bg-card); border-radius: var(--radius-xl); padding: 2.5rem; box-shadow: var(--shadow-lg); border: 1px solid var(--border-light); margin-bottom: 2rem; position: relative; - overflow: hidden; + overflow: visible !important; +} + +.content-card img { + max-width: 100% !important; + height: auto !important; +} + +.content-card figure.image { + max-width: 100%; + margin: 1rem auto; + text-align: center; +} + +.content-card figure.image img { + max-width: 100%; + height: auto; + display: block; + margin: 0 auto; } .content-card::before { @@ -829,7 +864,7 @@ body { } .improved-list li { - margin-bottom: 2rem; + margin-bottom: 1rem; } /* ===== FORM STYLES ===== */ @@ -844,7 +879,8 @@ body { color: var(--text-primary); } -.form-input, .form-textarea { +.form-input, +.form-textarea { width: 100%; padding: 1rem 1.25rem; border: 2px solid var(--border-light); @@ -852,14 +888,22 @@ body { font-size: 1rem; transition: var(--transition); background: var(--bg-primary); + color: var(--text-primary); font-family: inherit; } -.form-input:focus, .form-textarea:focus { +.form-input::placeholder, +.form-textarea::placeholder { + color: var(--text-light); +} + +.form-input:focus, +.form-textarea:focus { outline: none; border-color: var(--primary); - box-shadow: 0 0 0 4px rgba(255, 107, 0, 0.1); + box-shadow: 0 0 0 4px rgba(255, 107, 0, 0.2); transform: translateY(-2px); + background: var(--bg-card); } .form-textarea { @@ -877,13 +921,13 @@ body { top: 0; width: 100%; height: 100%; - background-color: rgba(0, 0, 0, 0.8); + background-color: rgba(15, 19, 31, 0.95); backdrop-filter: blur(10px); animation: fadeIn 0.3s ease; } .modal-content { - background: var(--bg-primary); + background: var(--bg-card); margin: 2% auto; border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); @@ -892,6 +936,7 @@ body { max-width: 90%; max-height: 90vh; overflow: auto; + border: 1px solid var(--border-light); } .modal-header { @@ -936,10 +981,39 @@ body { .modal-close:hover { color: var(--primary); - background: var(--bg-secondary); + background: var(--bg-primary); transform: rotate(90deg); } +/* Стили для модального окна с изображением */ +.modal-image { + max-width: 90vw; + max-height: 80vh; + width: auto; + height: auto; + display: block; + margin: 0 auto; + border-radius: var(--radius-md); + box-shadow: var(--shadow-xl); + transition: all 0.3s ease; +} + +.modal-content.image-modal { + max-width: 95vw; + max-height: 95vh; + background: transparent; + border: none; + box-shadow: none; +} + +.modal-body.image-modal-body { + padding: 1rem; + display: flex; + align-items: center; + justify-content: center; + background: transparent; +} + @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } @@ -962,7 +1036,7 @@ body { } .accordion-item { - background: var(--bg-secondary); + background: var(--bg-primary); border-radius: var(--radius-lg); margin-bottom: 1rem; border: 2px solid var(--border-light); @@ -994,8 +1068,9 @@ body { .accordion-content { padding: 1.5rem; - background: var(--bg-primary); + background: var(--bg-card); line-height: 1.7; + color: var(--text-secondary); } .accordion-content p { @@ -1004,4 +1079,563 @@ body { .accordion-content p:last-child { margin-bottom: 0; +} + +/* ===== MAIN CONTENT AREA ===== */ +.main { + min-height: calc(100vh - 140px); + padding: 2rem 0; +} + +.content { + min-height: 600px; +} + +.breadcrumbs { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 2rem; + font-size: 0.875rem; + color: var(--text-light); +} + +.breadcrumb-link { + color: var(--text-secondary); + text-decoration: none; + transition: var(--transition); +} + +.breadcrumb-link:hover { + color: var(--primary); +} + +.breadcrumb-separator { + color: var(--text-light); +} + +.breadcrumb-current { + color: var(--text-primary); + font-weight: 500; +} + +.page-content { + background: var(--bg-card); + border-radius: var(--radius-xl); + padding: 2rem; + box-shadow: var(--shadow-lg); + border: 1px solid var(--border-light); +} + +/* ===== THEME SWITCHER STYLES ===== */ +.theme-switcher { + display: flex; + align-items: center; +} + +.theme-toggle-checkbox { + display: none; +} + +.theme-toggle-label { + position: relative; + display: flex; + align-items: center; + width: 60px; + height: 30px; + background: var(--bg-card); + border: 2px solid var(--border-light); + border-radius: 25px; + cursor: pointer; + transition: all 0.3s ease; + padding: 2px; + box-shadow: var(--shadow-sm); +} + +.theme-toggle-label:hover { + border-color: var(--primary); + box-shadow: 0 0 10px rgba(255, 107, 0, 0.3); +} + +.theme-toggle-slider { + position: absolute; + width: 24px; + height: 24px; + background: var(--primary); + border-radius: 50%; + transition: all 0.3s ease; + left: 2px; + z-index: 2; +} + +.theme-toggle-checkbox:checked + .theme-toggle-label .theme-toggle-slider { + transform: translateX(30px); + background: var(--secondary); +} + +.theme-icon { + position: absolute; + font-size: 12px; + transition: all 0.3s ease; + z-index: 1; +} + +.theme-icon.sun { + left: 8px; + opacity: 1; + color: var(--text-primary); +} + +.theme-icon.moon { + right: 8px; + opacity: 0; + color: var(--text-primary); +} + +.theme-toggle-checkbox:checked + .theme-toggle-label .theme-icon.sun { + opacity: 0; +} + +.theme-toggle-checkbox:checked + .theme-toggle-label .theme-icon.moon { + opacity: 1; +} + +/* ===== MOBILE MENU ===== */ +.mobile-menu-btn { + display: none; + background: none; + border: none; + color: var(--text-primary); + font-size: 1.5rem; + cursor: pointer; + padding: 0.5rem; + border-radius: 4px; + transition: all 0.3s ease; +} + +.mobile-menu-btn:hover { + background: var(--border-light); +} + +.mobile-menu-overlay { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 999; +} + +.mobile-menu { + position: fixed; + top: 0; + right: -100%; + width: 300px; + height: 100%; + background: var(--mobile-menu-bg); + box-shadow: -5px 0 15px rgba(0, 0, 0, 0.3); + transition: right 0.3s ease; + z-index: 1000; + overflow-y: auto; + padding: 2rem 1.5rem; +} + +.mobile-menu.active { + right: 0; +} + +.mobile-menu-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; + padding-bottom: 1rem; + border-bottom: 1px solid var(--mobile-menu-border); +} + +.mobile-menu-header h3 { + color: var(--mobile-menu-text); +} + +.mobile-menu-close { + background: none; + border: none; + font-size: 1.5rem; + color: var(--mobile-menu-text); + cursor: pointer; + padding: 0.5rem; + border-radius: 4px; + transition: all 0.3s ease; +} + +.mobile-menu-close:hover { + background: var(--border-light); +} + +.mobile-nav-menu { + list-style: none; + margin-bottom: 2rem; +} + +.mobile-nav-item { + margin-bottom: 0.5rem; +} + +.mobile-nav-link { + display: block; + padding: 1rem; + color: var(--mobile-menu-text); + text-decoration: none; + border-radius: 8px; + transition: all 0.3s ease; + font-weight: 500; +} + +.mobile-nav-link:hover, +.mobile-nav-link.active { + background: var(--primary); + color: white; +} + +.mobile-nav-actions { + display: flex; + flex-direction: column; + gap: 1rem; + padding-top: 1rem; + border-top: 1px solid var(--mobile-menu-border); +} + +/* ===== RESPONSIVE ===== */ +@media (max-width: 1024px) { + .nav-menu { + gap: 1.5rem; + } + + .nav-actions { + gap: 0.75rem; + } +} + +@media (max-width: 768px) { + .nav-menu { + display: none !important; + } + + .mobile-menu-btn { + display: block !important; + } + + .nav-actions .telegram-btn span:not(.telegram-icon), + .nav-actions .telegram-btn .telegram-icon { + display: none; + } + + .nav-actions .telegram-btn { + padding: 0.75rem; + width: 45px; + height: 45px; + display: flex; + align-items: center; + justify-content: center; + } + + .nav-actions .telegram-btn::after { + content: "📱"; + font-size: 1.2rem; + } + + .theme-switcher { + display: none; + } + + .user-menu { + display: none; + } + + .nav { + gap: 1rem; + } + + .logo-text { + font-size: 1.1rem; + } + + .hero-title { + font-size: 2.5rem; + } + + .hero-subtitle { + font-size: 1.125rem; + padding: 0 1rem; + } + + .page-title { + font-size: 2.25rem; + } + + .page-subtitle { + font-size: 1.125rem; + padding: 0 1rem; + } + + .grid-2 { + grid-template-columns: 1fr; + gap: 1.5rem; + } + + .modern-card { + padding: 1.5rem; + margin-bottom: 1.5rem; + } + + .card-title { + font-size: 1.375rem; + } + + .content-card { + padding: 1.5rem; + } + + .about-section { + padding: 1.5rem; + } + + .skills-grid { + grid-template-columns: 1fr; + gap: 1.5rem; + } + + .competence-item { + flex-direction: column; + padding: 1.5rem; + gap: 1.5rem; + } + + .competence-scan-container { + width: 100%; + max-width: 280px; + margin: 0 auto; + } + + .recall-header { + flex-direction: column; + gap: 1rem; + align-items: flex-start; + } + + .recall-meta { + flex-direction: column; + gap: 0.5rem; + } + + .footer-content { + grid-template-columns: 1fr; + gap: 2rem; + text-align: center; + } + + .footer-contacts p { + justify-content: center; + } + + .card-actions { + flex-direction: column; + } + + .btn { + width: 100%; + justify-content: center; + } + + .modal-content { + margin: 5% auto; + max-width: 95%; + } + + .modal-header { + padding: 1.5rem 1.5rem 1rem; + } + + .modal-body { + padding: 1.5rem; + } + + .page-content { + padding: 1.5rem; + } + + .breadcrumbs { + font-size: 0.8rem; + } + + .recall-content { + flex-direction: column; + gap: 1.5rem; + } + + .recall-scan-container { + width: 100%; + max-width: 300px; + margin: 0 auto; + } + + .recall-scan-wrapper { + order: -1; + } + + .modal-image { + max-width: 95vw; + max-height: 70vh; + } + + .modal-content.image-modal { + margin: 10% auto; + } +} + +@media (max-width: 480px) { + .container { + padding: 0 12px; + } + + .nav { + padding: 0.75rem 0; + } + + .logo-img { + width: 32px; + height: 32px; + } + + .logo-text { + font-size: 1rem; + } + + .mobile-menu { + width: 280px; + } + + .nav-actions { + gap: 0.5rem; + } + + .nav-actions .telegram-btn { + width: 40px; + height: 40px; + padding: 0.5rem; + } + + .hero-title { + font-size: 2rem; + } + + .hero-subtitle { + font-size: 1rem; + } + + .page-title { + font-size: 1.875rem; + } + + .modern-card { + padding: 1.25rem; + } + + .content-card { + padding: 1.25rem; + } + + .about-section { + padding: 1.25rem; + } + + .card-title { + font-size: 1.25rem; + } + + .competence-scan-container { + max-width: 100%; + } + + .recall-scan-container { + max-width: 100%; + } + + .modal-content.image-modal { + margin: 5% auto; + max-width: 98vw; + } + + .modal-body.image-modal-body { + padding: 0.5rem; + } +} + +@media (min-width: 769px) { + .mobile-menu-btn, + .mobile-menu-overlay, + .mobile-menu { + display: none !important; + } +} + +/* ===== COOKIE CONSENT ===== */ +.cookie-bottom { + position: fixed; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + z-index: 9999; + width: auto; + max-width: 450px; + min-width: 300px; + background-color: var(--bg-card); + border-radius: 12px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); + border: 1px solid var(--border-light); + animation: slideUpFade 0.3s ease; +} + +@keyframes slideUpFade { + from { opacity: 0; transform: translate(-50%, 20px); } + to { opacity: 1; transform: translate(-50%, 0); } +} + +.cookie-bottom-content { + padding: 1.5rem; + text-align: center; +} + +.cookie-bottom-content h3 { + margin: 0 0 0.75rem 0; + font-size: 1.25rem; + color: var(--text-primary); +} + +.cookie-bottom-content p { + margin: 0 0 1.5rem 0; + font-size: 0.95rem; + line-height: 1.5; + color: var(--text-secondary); +} + +.cookie-bottom-content a { + color: var(--primary); + text-decoration: underline; +} + +.cookie-bottom-content .btn { + width: 100%; + padding: 0.75rem; + font-size: 1rem; + border-radius: 8px; +} + +@media (max-width: 480px) { + .cookie-bottom { + max-width: 90%; + bottom: 10px; + } } \ No newline at end of file diff --git a/programmer/static/programmer/js/theme-switcher.js b/programmer/static/programmer/js/theme-switcher.js index 5d8683c..e84942c 100644 --- a/programmer/static/programmer/js/theme-switcher.js +++ b/programmer/static/programmer/js/theme-switcher.js @@ -2,7 +2,6 @@ document.addEventListener('DOMContentLoaded', function() { const themeToggle = document.getElementById('theme-toggle'); const mobileThemeToggle = document.getElementById('mobile-theme-toggle'); - const themeCSS = document.getElementById('theme-css'); const themeCSS1C = document.getElementById('theme-css-1c'); // Проверяем сохраненную тему в localStorage @@ -42,16 +41,20 @@ document.addEventListener('DOMContentLoaded', function() { } function switchToLightTheme() { - themeCSS.href = themeCSS.href.replace('styles_dark.css', 'styles_w.css'); - themeCSS1C.href = themeCSS1C.href.replace('1c-dark.min.css', '1c-light.min.css'); + document.body.classList.remove('theme-dark'); + if (themeCSS1C) { + themeCSS1C.href = themeCSS1C.href.replace('1c-dark.min.css', '1c-light.min.css'); + } if (themeToggle) themeToggle.checked = true; if (mobileThemeToggle) mobileThemeToggle.checked = true; localStorage.setItem('theme', 'light'); } function switchToDarkTheme() { - themeCSS.href = themeCSS.href.replace('styles_w.css', 'styles_dark.css'); - themeCSS1C.href = themeCSS1C.href.replace('1c-light.min.css', '1c-dark.min.css'); + document.body.classList.add('theme-dark'); + if (themeCSS1C) { + themeCSS1C.href = themeCSS1C.href.replace('1c-light.min.css', '1c-dark.min.css'); + } if (themeToggle) themeToggle.checked = false; if (mobileThemeToggle) mobileThemeToggle.checked = false; localStorage.setItem('theme', 'dark'); @@ -66,7 +69,6 @@ document.addEventListener('DOMContentLoaded', function() { themeCSS.onerror = function() { console.error('Ошибка загрузки CSS файла темы'); // Восстанавливаем светлую тему по умолчанию при ошибке - themeCSS.href = themeCSS.href.replace('styles_dark.css', 'styles_w.css'); themeCSS1C.href = themeCSS1C.href.replace('1c-light.min.css', '1c-dark.min.css'); }; }); \ No newline at end of file diff --git a/programmer/templates/programmer/base.html b/programmer/templates/programmer/base.html index 82c8640..e04733e 100644 --- a/programmer/templates/programmer/base.html +++ b/programmer/templates/programmer/base.html @@ -30,7 +30,7 @@ {% bootstrap_css %} - + @@ -677,7 +677,7 @@

📱 {{ CONTACT_PHONE }}

@@ -705,29 +705,6 @@ {% endblock %} - - -