/** * deev.space - Main Stylesheet * @author Егор Деев * @version 2.0 */ /* ===== Google Fonts Import ===== */ @import url('https://fonts.googleapis.com/css2?family=Raleway:wght@400;500;600;700;800&family=Inter:wght@400;500;600;700&display=swap'); /* ===== CSS Variables ===== */ :root { /* Primary Colors - Red Theme */ --primary-color: #e63946; --primary-light: #ff6b6b; --primary-dark: #c1121f; --primary-muted: rgba(230, 57, 70, 0.15); --primary-glow: rgba(230, 57, 70, 0.3); /* Background Colors */ --bg-dark: #0d0d0d; --bg-darker: #080808; --bg-card: #141414; --bg-card-hover: #1a1a1a; --bg-elevated: #1e1e1e; --bg-input: #1a1a1a; /* Text Colors */ --text-primary: #ffffff; --text-secondary: #b0b0b0; --text-muted: #666666; --text-dark: #0d0d0d; /* Border Colors */ --border-color: #2a2a2a; --border-light: #3a3a3a; --border-focus: var(--primary-color); /* Status Colors */ --success-color: #22c55e; --warning-color: #f59e0b; --error-color: #ef4444; --info-color: #3b82f6; /* Gradients */ --gradient-primary: linear-gradient(135deg, #e63946 0%, #c1121f 100%); --gradient-card: linear-gradient(145deg, #1a1a1a 0%, #141414 100%); --gradient-glow: radial-gradient(ellipse at center, rgba(230, 57, 70, 0.15) 0%, transparent 70%); --gradient-text: linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%); /* Shadows */ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.2); --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.3); --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.4); --shadow-glow: 0 0 40px rgba(230, 57, 70, 0.2); --shadow-glow-strong: 0 0 60px rgba(230, 57, 70, 0.3); /* Border Radius */ --radius-xs: 4px; --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 24px; --radius-full: 9999px; /* Transitions */ --transition-fast: all 0.15s ease; --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); /* Z-Index */ --z-dropdown: 100; --z-sticky: 200; --z-fixed: 300; --z-modal: 400; --z-tooltip: 500; /* Spacing */ --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-2xl: 3rem; --space-3xl: 4rem; /* Container */ --container-max: 1400px; --container-padding: 2rem; } /* ===== Reset & Base ===== */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; -webkit-text-size-adjust: 100%; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-dark); color: var(--text-primary); line-height: 1.6; overflow-x: hidden; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body.nav-open { overflow: hidden; } /* ===== Typography ===== */ h1, h2, h3, h4, h5, h6 { font-family: 'Raleway', sans-serif; font-weight: 700; line-height: 1.2; letter-spacing: -0.02em; color: var(--text-primary); } h1 { font-size: clamp(2rem, 5vw, 3.5rem); } h2 { font-size: clamp(1.5rem, 4vw, 2.5rem); } h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); } h4 { font-size: clamp(1.1rem, 2vw, 1.25rem); } h5 { font-size: 1rem; } h6 { font-size: 0.875rem; } p { margin-bottom: var(--space-md); color: var(--text-secondary); } a { color: var(--primary-color); text-decoration: none; transition: var(--transition); } a:hover { color: var(--primary-light); } strong, b { font-weight: 600; } code { font-family: 'Fira Code', 'Monaco', 'Consolas', monospace; background: var(--bg-elevated); padding: 0.2em 0.4em; border-radius: var(--radius-xs); font-size: 0.9em; color: var(--primary-light); } pre { background: var(--bg-darker); padding: var(--space-lg); border-radius: var(--radius-md); overflow-x: auto; margin: var(--space-lg) 0; } pre code { background: none; padding: 0; } ::selection { background: var(--primary-color); color: var(--text-primary); } /* ===== Scrollbar ===== */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-dark); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--primary-color); } /* ===== Container ===== */ .container { width: 100%; max-width: var(--container-max); margin: 0 auto; padding: 0 var(--container-padding); } @media (max-width: 768px) { .container { padding: 0 var(--space-md); } } /* ===== Logo ===== */ .logo { display: inline-flex; align-items: center; gap: 0; font-family: 'Raleway', sans-serif; font-weight: 700; font-size: 1.5rem; letter-spacing: -0.02em; text-decoration: none; } .logo-deev, .logo-space { color: var(--text-primary); transition: var(--transition); } .logo-dot { width: 8px; height: 8px; background-color: var(--primary-color); margin: 0 2px; flex-shrink: 0; transition: var(--transition); } .logo:hover .logo-dot { transform: scale(1.3); box-shadow: 0 0 15px var(--primary-color); } .logo:hover .logo-deev, .logo:hover .logo-space { color: var(--text-primary); } /* ===== Navigation ===== */ .navbar { position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-fixed); background: rgba(13, 13, 13, 0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--border-color); padding: var(--space-md) 0; transition: var(--transition); } .navbar.scrolled { background: rgba(13, 13, 13, 0.95); padding: var(--space-sm) 0; box-shadow: var(--shadow-md); } .navbar.hidden { transform: translateY(-100%); } .navbar > .container { display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); } .nav-menu { display: flex; align-items: center; gap: var(--space-xs); list-style: none; margin: 0; padding: 0; } .nav-link { display: flex; align-items: center; gap: var(--space-sm); color: var(--text-secondary); padding: var(--space-sm) var(--space-md); border-radius: var(--radius-sm); font-weight: 500; font-size: 0.9rem; transition: var(--transition); text-decoration: none; } .nav-link i { font-size: 0.85rem; opacity: 0.7; } .nav-link:hover { color: var(--text-primary); background: var(--primary-muted); } .nav-link.active { color: var(--primary-color); background: var(--primary-muted); } .nav-auth { display: flex; align-items: center; gap: var(--space-md); } .nav-user-info { display: flex; align-items: center; gap: var(--space-sm); } .nav-user-avatar { width: 32px; height: 32px; background: var(--primary-muted); color: var(--primary-color); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 0.875rem; } .nav-user-name { color: var(--text-secondary); font-size: 0.9rem; font-weight: 500; } /* Mobile Navigation Toggle */ .nav-toggle { display: none; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 5px; z-index: var(--z-fixed); } .nav-toggle span { width: 24px; height: 2px; background: var(--text-primary); transition: var(--transition); transform-origin: center; } .nav-toggle.active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); } .nav-toggle.active span:nth-child(2) { opacity: 0; } .nav-toggle.active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); } @media (max-width: 992px) { .nav-toggle { display: flex; } .nav-menu { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--bg-dark); flex-direction: column; justify-content: center; padding: var(--space-2xl); gap: var(--space-sm); transform: translateX(100%); transition: var(--transition); z-index: var(--z-modal); } .nav-menu.active { transform: translateX(0); } .nav-link { width: 100%; padding: var(--space-md); font-size: 1.1rem; justify-content: center; } .nav-auth { position: fixed; bottom: var(--space-2xl); left: 50%; transform: translateX(-50%); z-index: var(--z-modal); opacity: 0; pointer-events: none; transition: var(--transition); } .nav-menu.active ~ .nav-auth, body.nav-open .nav-auth { opacity: 1; pointer-events: auto; } .nav-user-name, .btn-text { display: none; } } /* ===== Buttons ===== */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-sm); padding: 0.75rem 1.5rem; font-family: 'Inter', sans-serif; font-weight: 600; font-size: 0.9rem; line-height: 1; border-radius: var(--radius-md); border: none; cursor: pointer; transition: var(--transition); text-decoration: none; white-space: nowrap; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-primary { background: var(--gradient-primary); color: var(--text-primary); box-shadow: 0 4px 15px var(--primary-glow); } .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 8px 25px var(--primary-glow); color: var(--text-primary); } .btn-outline { background: transparent; border: 2px solid var(--border-light); color: var(--text-primary); } .btn-outline:hover:not(:disabled) { border-color: var(--primary-color); background: var(--primary-muted); color: var(--text-primary); } .btn-ghost { background: var(--bg-elevated); color: var(--text-secondary); border: 1px solid var(--border-color); } .btn-ghost:hover:not(:disabled) { background: var(--bg-card-hover); color: var(--text-primary); border-color: var(--border-light); } .btn-sm { padding: 0.5rem 1rem; font-size: 0.8rem; } .btn-lg { padding: 1rem 2rem; font-size: 1rem; } .btn-full { width: 100%; } /* ===== Forms ===== */ .form-group { margin-bottom: var(--space-lg); } .form-row { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-lg); } @media (max-width: 576px) { .form-row { grid-template-columns: 1fr; } } .form-label { display: flex; align-items: center; gap: var(--space-sm); font-size: 0.9rem; font-weight: 500; color: var(--text-secondary); margin-bottom: var(--space-sm); } .form-label i { color: var(--primary-color); font-size: 0.85rem; } .form-control { width: 100%; background: var(--bg-input); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 0.875rem 1rem; color: var(--text-primary); font-family: inherit; font-size: 1rem; transition: var(--transition); } .form-control:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px var(--primary-muted); } .form-control::placeholder { color: var(--text-muted); } textarea.form-control { min-height: 120px; resize: vertical; } .form-hint { display: block; font-size: 0.8rem; color: var(--text-muted); margin-top: var(--space-xs); } .form-error { display: block; font-size: 0.8rem; color: var(--error-color); margin-top: var(--space-xs); } .form-checkbox { display: flex; align-items: center; gap: var(--space-sm); } .form-checkbox input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--primary-color); } .form-checkbox label { font-size: 0.9rem; color: var(--text-secondary); cursor: pointer; } .captcha-group { display: flex; justify-content: center; } /* ===== Bento Grid Layout ===== */ .bento-grid { display: grid; gap: var(--space-lg); padding: var(--space-lg) 0; } .bento-hero { grid-template-columns: repeat(12, 1fr); grid-auto-rows: minmax(100px, auto); padding-top: 100px; min-height: calc(100vh - 100px); } .bento-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-xl); transition: var(--transition); position: relative; overflow: hidden; } .bento-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--primary-muted), transparent); opacity: 0; transition: var(--transition); } .bento-card:hover { border-color: var(--border-light); transform: translateY(-2px); } .bento-card:hover::before { opacity: 1; } .bento-card-title { display: flex; align-items: center; gap: var(--space-sm); font-size: 1rem; color: var(--text-muted); margin-bottom: var(--space-lg); } .bento-card-title i { color: var(--primary-color); } /* Profile Card */ .bento-profile { grid-column: span 8; display: flex; align-items: center; gap: var(--space-2xl); background: var(--gradient-card); padding: var(--space-2xl); } .profile-photo { flex-shrink: 0; } .profile-photo img { width: 200px; height: 200px; border-radius: var(--radius-xl); object-fit: cover; border: 3px solid var(--border-color); transition: var(--transition); } .bento-profile:hover .profile-photo img { border-color: var(--primary-color); box-shadow: var(--shadow-glow); } .profile-info { flex: 1; } .profile-info h1 { margin-bottom: var(--space-sm); background: var(--gradient-text); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .profile-title { font-size: 1.25rem; color: var(--primary-color); font-weight: 600; margin-bottom: var(--space-md); display: flex; align-items: center; gap: var(--space-sm); } .profile-title i { font-size: 1rem; } .profile-description { color: var(--text-secondary); font-size: 1rem; line-height: 1.8; margin-bottom: var(--space-lg); max-width: 550px; } .profile-buttons { display: flex; gap: var(--space-md); flex-wrap: wrap; } /* Quick Info Cards */ .bento-quick { grid-column: span 4; display: flex; flex-direction: column; gap: var(--space-lg); } .quick-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: var(--space-lg); display: flex; align-items: center; gap: var(--space-md); transition: var(--transition); flex: 1; } .quick-card:hover { border-color: var(--primary-color); background: var(--bg-card-hover); } .quick-icon { width: 50px; height: 50px; background: var(--primary-muted); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-size: 1.25rem; flex-shrink: 0; } .quick-content h4 { font-size: 0.8rem; color: var(--text-muted); font-weight: 500; margin-bottom: var(--space-xs); text-transform: uppercase; letter-spacing: 0.5px; } .quick-content p { font-size: 1rem; color: var(--text-primary); font-weight: 600; margin: 0; } /* Social Links Card */ .bento-socials { grid-column: span 4; } .socials-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-md); } .social-link { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-md); background: var(--bg-elevated); border-radius: var(--radius-md); color: var(--text-secondary); transition: var(--transition); border: 1px solid transparent; text-decoration: none; } .social-link:hover { background: var(--primary-muted); color: var(--primary-color); border-color: var(--primary-color); transform: translateY(-2px); } .social-link i { font-size: 1.25rem; } .social-link span { font-weight: 500; font-size: 0.9rem; } /* Skills Card */ .bento-skills { grid-column: span 8; } .skills-header { display: flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-lg); } .skills-header h3 { margin: 0; font-size: 1.25rem; } .icon-box { width: 44px; height: 44px; background: var(--primary-muted); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-size: 1.1rem; } .skills-categories { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--space-lg); } .skill-category { background: var(--bg-elevated); padding: var(--space-md); border-radius: var(--radius-md); border: 1px solid var(--border-color); } .skill-category-title { font-size: 0.7rem; color: var(--primary-color); text-transform: uppercase; letter-spacing: 1px; margin-bottom: var(--space-md); font-weight: 600; } .skill-tags { display: flex; flex-wrap: wrap; gap: var(--space-sm); } .skill-tag { display: inline-flex; align-items: center; gap: var(--space-sm); background: var(--bg-card); padding: 0.35rem 0.65rem; border-radius: var(--radius-sm); font-size: 0.8rem; color: var(--text-secondary); border: 1px solid var(--border-color); transition: var(--transition); } .skill-tag:hover { border-color: var(--primary-color); color: var(--text-primary); } .skill-tag i { font-size: 0.9rem; color: var(--primary-color); } /* ===== Sections ===== */ .section { padding: var(--space-3xl) 0; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-2xl); flex-wrap: wrap; gap: var(--space-md); } .section-title { display: flex; align-items: center; gap: var(--space-md); margin: 0; } .section-icon { width: 48px; height: 48px; background: var(--primary-muted); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-size: 1.25rem; } .section-subtitle { display: flex; align-items: center; gap: var(--space-sm); font-size: 1.25rem; color: var(--text-secondary); margin-bottom: var(--space-xl); } .section-subtitle i { color: var(--primary-color); } .count-badge { background: var(--primary-muted); color: var(--primary-color); padding: 0.2rem 0.6rem; border-radius: var(--radius-full); font-size: 0.8rem; font-weight: 600; margin-left: var(--space-sm); } .section-divider { height: 1px; background: linear-gradient(90deg, var(--primary-color), var(--border-color), transparent); margin: var(--space-2xl) 0; } /* ===== Page Header ===== */ .page-header { text-align: center; padding: calc(100px + var(--space-2xl)) 0 var(--space-2xl); } .page-title { display: inline-flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-md); } .page-icon { width: 56px; height: 56px; background: var(--primary-muted); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-size: 1.5rem; } .page-subtitle { font-size: 1.1rem; color: var(--text-secondary); max-width: 600px; margin: 0 auto; } /* ===== Projects Grid ===== */ .projects-bento { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--space-lg); } .project-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); overflow: hidden; transition: var(--transition); position: relative; } .project-card:hover { border-color: var(--primary-color); transform: translateY(-4px); box-shadow: var(--shadow-lg); } /* Featured Project */ .project-card.featured { grid-column: span 8; display: grid; grid-template-columns: 1fr 1fr; } .project-card.featured .project-image { height: 100%; min-height: 320px; } /* Regular Project */ .project-card.regular { grid-column: span 4; } /* Small Project */ .project-card.small { grid-column: span 3; } .project-image { position: relative; height: 200px; overflow: hidden; background: var(--bg-elevated); } .project-image img { width: 100%; height: 100%; object-fit: cover; transition: var(--transition-slow); } .project-card:hover .project-image img { transform: scale(1.05); } .project-image-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-card) 100%); } .project-image-placeholder i { font-size: 3rem; color: var(--border-light); } .project-logo { position: absolute; top: var(--space-md); left: var(--space-md); width: 48px; height: 48px; background: var(--bg-dark); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; border: 1px solid var(--border-color); } .project-logo i { font-size: 1.25rem; color: var(--primary-color); } .project-logo-small { width: 56px; height: 56px; background: var(--primary-muted); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; margin-bottom: var(--space-md); } .project-logo-small i { font-size: 1.5rem; color: var(--primary-color); } .project-status { position: absolute; top: var(--space-md); right: var(--space-md); padding: 0.3rem 0.7rem; border-radius: var(--radius-full); font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .project-status.completed { background: rgba(34, 197, 94, 0.2); color: var(--success-color); } .project-status.beta { background: var(--primary-muted); color: var(--primary-color); } .project-content { padding: var(--space-lg); } .project-card.small .project-content { text-align: center; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; min-height: 200px; } .project-title { font-size: 1.25rem; margin-bottom: var(--space-sm); display: flex; align-items: center; gap: var(--space-sm); flex-wrap: wrap; } .project-card.small .project-title { font-size: 1rem; justify-content: center; } .project-users { font-size: 0.8rem; color: var(--primary-color); font-weight: 500; display: inline-flex; align-items: center; gap: 0.25rem; } .project-description { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: var(--space-md); line-height: 1.6; } .project-features { list-style: none; margin: 0 0 var(--space-md) 0; padding: 0; } .project-features li { display: flex; align-items: flex-start; gap: var(--space-sm); font-size: 0.85rem; color: var(--text-secondary); margin-bottom: var(--space-sm); } .project-features li i { color: var(--primary-color); margin-top: 0.2em; flex-shrink: 0; } .project-tech { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin-bottom: var(--space-md); } .project-card.small .project-tech { justify-content: center; margin-bottom: 0; } .tech-badge { display: inline-flex; align-items: center; gap: 0.35rem; background: var(--bg-elevated); padding: 0.3rem 0.6rem; border-radius: var(--radius-sm); font-size: 0.75rem; color: var(--text-secondary); border: 1px solid var(--border-color); transition: var(--transition); } .tech-badge:hover { border-color: var(--primary-color); color: var(--primary-color); } .tech-badge i { color: var(--primary-color); font-size: 0.85rem; } .project-links { display: flex; gap: var(--space-sm); flex-wrap: wrap; } .project-link { display: inline-flex; align-items: center; gap: var(--space-sm); color: var(--text-secondary); font-size: 0.85rem; padding: var(--space-sm) var(--space-md); background: var(--bg-elevated); border-radius: var(--radius-sm); transition: var(--transition); text-decoration: none; } .project-link:hover { color: var(--primary-color); background: var(--primary-muted); } /* GitHub CTA */ .github-cta { grid-column: span 3; display: flex; align-items: center; justify-content: center; min-height: 200px; } .github-cta-content { text-align: center; } .github-cta-content i { font-size: 3rem; color: var(--text-muted); margin-bottom: var(--space-md); } .github-cta-content p { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: var(--space-md); } .github-cta-section { margin-top: var(--space-2xl); } .github-cta-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-2xl); display: flex; align-items: center; gap: var(--space-xl); transition: var(--transition); } .github-cta-card:hover { border-color: var(--primary-color); } .github-cta-card > i { font-size: 3rem; color: var(--text-muted); } .github-cta-text { flex: 1; } .github-cta-text h3 { margin-bottom: var(--space-sm); } .github-cta-text p { margin: 0; } /* ===== Blog Grid ===== */ .blog-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: var(--space-lg); } .article-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); overflow: hidden; transition: var(--transition); display: flex; flex-direction: column; } .article-card:hover { border-color: var(--primary-color); transform: translateY(-4px); box-shadow: var(--shadow-lg); } .article-image { height: 200px; overflow: hidden; background: var(--bg-elevated); } .article-image img { width: 100%; height: 100%; object-fit: cover; transition: var(--transition-slow); } .article-card:hover .article-image img { transform: scale(1.05); } .article-content { padding: var(--space-lg); flex: 1; display: flex; flex-direction: column; } .article-meta { display: flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-sm); flex-wrap: wrap; } .article-category { font-size: 0.75rem; color: var(--primary-color); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; text-decoration: none; display: inline-flex; align-items: center; gap: var(--space-xs); } .article-category:hover { color: var(--primary-light); } .article-date { font-size: 0.8rem; color: var(--text-muted); display: inline-flex; align-items: center; gap: var(--space-xs); } .article-title { font-size: 1.25rem; margin-bottom: var(--space-sm); line-height: 1.4; } .article-title a { color: var(--text-primary); text-decoration: none; } .article-title a:hover { color: var(--primary-color); } .article-subtitle { font-size: 0.9rem; color: var(--text-muted); font-style: italic; margin-bottom: var(--space-sm); } .article-excerpt { color: var(--text-secondary); font-size: 0.9rem; line-height: 1.6; flex: 1; margin-bottom: var(--space-md); } .article-footer { display: flex; align-items: center; justify-content: space-between; padding-top: var(--space-md); border-top: 1px solid var(--border-color); margin-top: auto; } .article-stats { display: flex; gap: var(--space-md); } .article-stats span { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: 0.8rem; color: var(--text-muted); } .article-read-more { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: 0.85rem; font-weight: 500; color: var(--primary-color); text-decoration: none; } .article-read-more:hover { color: var(--primary-light); } .article-read-more i { transition: var(--transition); } .article-read-more:hover i { transform: translateX(4px); } /* ===== Blog Filters ===== */ .blog-filters { margin-bottom: var(--space-2xl); } .search-form { display: flex; gap: var(--space-md); margin-bottom: var(--space-lg); } .search-input-wrapper { flex: 1; position: relative; } .search-input-wrapper i { position: absolute; left: var(--space-md); top: 50%; transform: translateY(-50%); color: var(--text-muted); } .search-input { width: 100%; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: var(--space-md) var(--space-md) var(--space-md) 2.5rem; color: var(--text-primary); font-size: 1rem; transition: var(--transition); } .search-input:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px var(--primary-muted); } .search-clear { position: absolute; right: var(--space-md); top: 50%; transform: translateY(-50%); color: var(--text-muted); cursor: pointer; } .search-clear:hover { color: var(--primary-color); } .categories-list { display: flex; flex-wrap: wrap; gap: var(--space-sm); } .category-chip { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-full); color: var(--text-secondary); font-size: 0.85rem; font-weight: 500; text-decoration: none; transition: var(--transition); } .category-chip:hover { border-color: var(--primary-color); color: var(--primary-color); } .category-chip.active { background: var(--primary-muted); border-color: var(--primary-color); color: var(--primary-color); } .category-chip i { font-size: 0.8rem; } .category-count { background: var(--bg-elevated); padding: 0.1rem 0.4rem; border-radius: var(--radius-full); font-size: 0.75rem; } .category-chip.active .category-count { background: var(--primary-color); color: var(--text-primary); } .search-results-info { padding: var(--space-md); background: var(--bg-card); border-radius: var(--radius-md); margin-bottom: var(--space-lg); } .search-results-info p { margin: 0; } .results-count { color: var(--text-muted); } /* ===== Filters Section ===== */ .filters-section { margin-bottom: var(--space-2xl); } .filters-wrapper { display: flex; flex-wrap: wrap; gap: var(--space-xl); align-items: center; } .filter-group { display: flex; align-items: center; gap: var(--space-md); } .filter-label { font-size: 0.9rem; color: var(--text-muted); font-weight: 500; } .filter-buttons { display: flex; gap: var(--space-sm); } .filter-btn { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-secondary); font-size: 0.85rem; font-weight: 500; text-decoration: none; transition: var(--transition); } .filter-btn:hover { border-color: var(--primary-color); color: var(--primary-color); } .filter-btn.active { background: var(--primary-muted); border-color: var(--primary-color); color: var(--primary-color); } .filter-select { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: var(--space-sm) var(--space-md); color: var(--text-primary); font-size: 0.85rem; cursor: pointer; min-width: 180px; } .filter-select:focus { outline: none; border-color: var(--primary-color); } /* ===== Article Full (Detail Page) ===== */ .article-full { max-width: 900px; margin: 0 auto; padding-top: 100px; } .breadcrumb { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-sm); margin-bottom: var(--space-xl); font-size: 0.85rem; } .breadcrumb a { color: var(--text-muted); text-decoration: none; } .breadcrumb a:hover { color: var(--primary-color); } .breadcrumb-separator { color: var(--text-muted); font-size: 0.7rem; } .breadcrumb-current { color: var(--text-secondary); } .article-header { margin-bottom: var(--space-2xl); } .article-category-badge { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); background: var(--primary-muted); border-radius: var(--radius-full); color: var(--primary-color); font-size: 0.8rem; font-weight: 600; text-decoration: none; margin-bottom: var(--space-lg); } .article-full-title { font-size: clamp(2rem, 5vw, 3rem); margin-bottom: var(--space-md); line-height: 1.2; } .article-full-subtitle { font-size: 1.25rem; color: var(--text-secondary); margin-bottom: var(--space-lg); } .article-meta-full { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-lg); padding: var(--space-lg); background: var(--bg-card); border-radius: var(--radius-lg); } .article-author { display: flex; align-items: center; gap: var(--space-md); } .author-avatar { width: 48px; height: 48px; background: var(--primary-muted); color: var(--primary-color); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 1.1rem; } .author-name { font-weight: 600; color: var(--text-primary); } .article-meta-items { display: flex; gap: var(--space-lg); flex-wrap: wrap; } .meta-item { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: 0.9rem; color: var(--text-muted); } .article-featured-image { margin-bottom: var(--space-2xl); border-radius: var(--radius-xl); overflow: hidden; } .article-featured-image img { width: 100%; height: auto; display: block; } .article-body { font-size: 1.1rem; line-height: 1.8; color: var(--text-secondary); } .article-body p { margin-bottom: var(--space-lg); } .article-body h2, .article-body h3, .article-body h4 { color: var(--text-primary); margin-top: var(--space-2xl); margin-bottom: var(--space-md); } .article-body ul, .article-body ol { margin-bottom: var(--space-lg); padding-left: var(--space-xl); } .article-body li { margin-bottom: var(--space-sm); } .article-body img { max-width: 100%; height: auto; border-radius: var(--radius-md); margin: var(--space-lg) 0; } .article-body blockquote { border-left: 4px solid var(--primary-color); padding-left: var(--space-lg); margin: var(--space-lg) 0; font-style: italic; color: var(--text-muted); } .article-footer-full { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-lg); padding: var(--space-xl) 0; border-top: 1px solid var(--border-color); border-bottom: 1px solid var(--border-color); margin: var(--space-2xl) 0; } .article-reactions { display: flex; align-items: center; gap: var(--space-md); } .reactions-label, .share-label { font-size: 0.9rem; color: var(--text-muted); } .reactions-buttons { display: flex; gap: var(--space-sm); } .vote-btn { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-muted); font-size: 0.9rem; cursor: pointer; transition: var(--transition); } .vote-btn:hover:not(:disabled) { border-color: var(--border-light); color: var(--text-secondary); } .vote-btn.active.like { background: rgba(34, 197, 94, 0.1); border-color: var(--success-color); color: var(--success-color); } .vote-btn.active.dislike { background: rgba(239, 68, 68, 0.1); border-color: var(--error-color); color: var(--error-color); } .vote-btn:disabled { opacity: 0.5; cursor: not-allowed; } .article-share { display: flex; align-items: center; gap: var(--space-md); } .share-buttons { display: flex; gap: var(--space-sm); } .share-btn { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-muted); font-size: 1rem; cursor: pointer; transition: var(--transition); text-decoration: none; } .share-btn:hover { border-color: var(--primary-color); color: var(--primary-color); } .share-btn.telegram:hover { border-color: #0088cc; color: #0088cc; } .share-btn.vk:hover { border-color: #4a76a8; color: #4a76a8; } .share-btn.twitter:hover { border-color: #1da1f2; color: #1da1f2; } /* Related Articles */ .related-articles { margin-bottom: var(--space-2xl); } .related-articles h3 { margin-bottom: var(--space-lg); } .related-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--space-md); } .related-card { display: flex; gap: var(--space-md); padding: var(--space-md); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-lg); text-decoration: none; transition: var(--transition); } .related-card:hover { border-color: var(--primary-color); transform: translateY(-2px); } .related-image { width: 80px; height: 80px; border-radius: var(--radius-md); object-fit: cover; flex-shrink: 0; } .related-content h4 { font-size: 0.95rem; margin-bottom: var(--space-xs); color: var(--text-primary); line-height: 1.4; } .related-date { font-size: 0.8rem; color: var(--text-muted); } /* ===== Comments ===== */ .comments-section { margin-top: var(--space-2xl); } .comments-title { display: flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-xl); } .comments-count { font-weight: 400; color: var(--text-muted); } .comment-form { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-lg); margin-bottom: var(--space-xl); } .comment-form-header { display: flex; align-items: center; gap: var(--space-md); margin-bottom: var(--space-md); } .comment-avatar { width: 40px; height: 40px; background: var(--primary-muted); color: var(--primary-color); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 0.9rem; flex-shrink: 0; } .comment-author-name { font-weight: 600; color: var(--text-primary); } .comment-form-footer { display: flex; align-items: center; justify-content: space-between; margin-top: var(--space-md); flex-wrap: wrap; gap: var(--space-md); } .comment-hint { font-size: 0.8rem; color: var(--text-muted); } .comment-auth-prompt { padding: var(--space-xl); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); text-align: center; margin-bottom: var(--space-xl); } .comment-auth-prompt p { margin: 0; } .comments-list { display: flex; flex-direction: column; gap: var(--space-md); } .comment { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-lg); } .comment-reply { border-left: 3px solid var(--primary-muted); } .comment-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-md); } .comment-author { display: flex; align-items: center; gap: var(--space-md); } .comment-author-info { display: flex; flex-direction: column; } .comment-name { font-weight: 600; color: var(--text-primary); font-size: 0.95rem; } .comment-date { font-size: 0.8rem; color: var(--text-muted); } .comment-content { color: var(--text-secondary); line-height: 1.7; margin-bottom: var(--space-md); } .comment-content p:last-child { margin-bottom: 0; } .comment-actions { display: flex; align-items: center; gap: var(--space-md); } .reply-btn { display: inline-flex; align-items: center; gap: var(--space-xs); background: none; border: none; color: var(--text-muted); font-size: 0.85rem; cursor: pointer; transition: var(--transition); padding: 0; } .reply-btn:hover { color: var(--primary-color); } .reply-form-container { margin-top: var(--space-md); padding-top: var(--space-md); border-top: 1px solid var(--border-color); } .reply-form { padding: var(--space-md); } .comment-replies { margin-top: var(--space-md); display: flex; flex-direction: column; gap: var(--space-md); } .comments-empty { text-align: center; padding: var(--space-2xl); color: var(--text-muted); } .comments-empty i { font-size: 3rem; margin-bottom: var(--space-md); opacity: 0.5; } /* ===== Achievements ===== */ .achievements-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--space-lg); } .achievement-card { display: flex; align-items: flex-start; gap: var(--space-lg); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-xl); text-decoration: none; transition: var(--transition); position: relative; } .achievement-card:hover { border-color: var(--primary-color); transform: translateY(-4px); box-shadow: var(--shadow-lg); } .achievement-icon { width: 64px; height: 64px; background: var(--primary-muted); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; font-size: 1.75rem; color: var(--primary-color); flex-shrink: 0; } .achievement-content { flex: 1; } .achievement-title { font-size: 1.1rem; color: var(--text-primary); margin-bottom: var(--space-sm); line-height: 1.4; } .achievement-subtitle { font-size: 0.9rem; color: var(--primary-color); font-weight: 500; margin-bottom: var(--space-sm); } .achievement-excerpt { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: var(--space-md); line-height: 1.6; } .achievement-date { display: inline-flex; align-items: center; gap: var(--space-xs); font-size: 0.8rem; color: var(--text-muted); } .achievement-arrow { position: absolute; right: var(--space-xl); top: 50%; transform: translateY(-50%); color: var(--text-muted); transition: var(--transition); } .achievement-card:hover .achievement-arrow { color: var(--primary-color); transform: translateY(-50%) translateX(4px); } /* ===== Contacts ===== */ .contact-bento { display: grid; grid-template-columns: 7fr 5fr; gap: var(--space-lg); padding-bottom: var(--space-2xl); } .contact-form-card { padding: var(--space-2xl); } .contact-form .form-control { background: var(--bg-elevated); } .contact-info-card { padding: var(--space-2xl); } .contact-methods { margin-bottom: var(--space-xl); } .contact-method { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md); background: var(--bg-elevated); border-radius: var(--radius-md); margin-bottom: var(--space-md); transition: var(--transition); border: 1px solid transparent; } .contact-method:hover { border-color: var(--primary-color); } .contact-method-icon { width: 48px; height: 48px; background: var(--primary-muted); border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-size: 1.25rem; flex-shrink: 0; } .contact-method-icon.telegram { background: rgba(0, 136, 204, 0.15); color: #0088cc; } .contact-method-info { flex: 1; } .contact-method-info h4 { font-size: 0.8rem; color: var(--text-muted); font-weight: 500; margin-bottom: var(--space-xs); text-transform: uppercase; letter-spacing: 0.5px; } .contact-method-info p, .contact-method-info a { color: var(--text-primary); font-weight: 500; margin: 0; } .contact-method-info a { text-decoration: none; } .contact-method-info a:hover { color: var(--primary-color); } .contact-copy-btn { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-sm); color: var(--text-muted); cursor: pointer; transition: var(--transition); } .contact-copy-btn:hover { border-color: var(--primary-color); color: var(--primary-color); } .contact-copy-btn.copied { background: var(--primary-muted); border-color: var(--primary-color); color: var(--primary-color); } .contact-social { margin-bottom: var(--space-xl); } .contact-social h4, .contact-resume h4 { font-size: 0.9rem; margin-bottom: var(--space-md); } .contact-social-links { display: flex; gap: var(--space-sm); } .contact-social-link { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background: var(--bg-elevated); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-secondary); font-size: 1.25rem; text-decoration: none; transition: var(--transition); } .contact-social-link:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-2px); } .contact-social-link.telegram:hover { border-color: #0088cc; color: #0088cc; } .contact-social-link.github:hover { border-color: #fff; color: #fff; } .contact-social-link.vk:hover { border-color: #4a76a8; color: #4a76a8; } .contact-social-link.linkedin:hover { border-color: #0077b5; color: #0077b5; } .contact-resume p { font-size: 0.9rem; margin-bottom: var(--space-md); } /* ===== About Page ===== */ .about-bento { display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--space-lg); padding-bottom: var(--space-2xl); } .about-bio { grid-column: span 8; } .about-stats { grid-column: span 4; } .about-bio-header { display: flex; align-items: center; gap: var(--space-xl); margin-bottom: var(--space-xl); } .about-photo img { width: 150px; height: 150px; border-radius: var(--radius-xl); object-fit: cover; border: 3px solid var(--border-color); } .about-bio-info h2 { margin-bottom: var(--space-xs); } .about-title { color: var(--primary-color); font-weight: 600; margin-bottom: var(--space-sm); } .about-location { display: flex; align-items: center; gap: var(--space-sm); color: var(--text-muted); font-size: 0.9rem; } .about-bio-text { margin-bottom: var(--space-xl); color: var(--text-secondary); line-height: 1.8; } .about-bio-actions { display: flex; gap: var(--space-md); flex-wrap: wrap; } .stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-md); } .stat-item { text-align: center; padding: var(--space-lg); background: var(--bg-elevated); border-radius: var(--radius-md); } .stat-value { display: block; font-size: 2rem; font-weight: 700; color: var(--primary-color); font-family: 'Raleway', sans-serif; } .stat-label { display: block; font-size: 0.8rem; color: var(--text-muted); margin-top: var(--space-xs); } /* Timeline */ .timeline-card { grid-column: span 6; } .timeline { position: relative; padding-left: var(--space-xl); } .timeline::before { content: ''; position: absolute; left: 5px; top: 0; bottom: 0; width: 2px; background: var(--border-color); } .timeline-item { position: relative; padding-bottom: var(--space-xl); } .timeline-item:last-child { padding-bottom: 0; } .timeline-marker { position: absolute; left: calc(-1 * var(--space-xl) + 1px); top: 0; width: 12px; height: 12px; background: var(--primary-color); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; } .timeline-marker i { font-size: 0.5rem; color: var(--text-primary); } .timeline-content { background: var(--bg-elevated); padding: var(--space-lg); border-radius: var(--radius-md); border: 1px solid var(--border-color); } .timeline-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-sm); margin-bottom: var(--space-sm); } .timeline-date { font-size: 0.8rem; color: var(--primary-color); font-weight: 600; } .timeline-duration { font-size: 0.75rem; color: var(--text-muted); background: var(--bg-card); padding: 0.2rem 0.5rem; border-radius: var(--radius-sm); } .timeline-title { font-size: 1.1rem; margin-bottom: var(--space-xs); } .timeline-subtitle { font-size: 0.9rem; color: var(--text-muted); margin-bottom: var(--space-md); } .timeline-description { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: var(--space-md); line-height: 1.6; } .timeline-list { list-style: none; margin: 0 0 var(--space-md) 0; padding: 0; } .timeline-list li { display: flex; align-items: flex-start; gap: var(--space-sm); font-size: 0.85rem; color: var(--text-secondary); margin-bottom: var(--space-sm); } .timeline-list li i { color: var(--primary-color); margin-top: 0.2em; flex-shrink: 0; font-size: 0.7rem; } .timeline-tech { display: flex; flex-wrap: wrap; gap: var(--space-sm); } .timeline-certificate { display: flex; align-items: center; gap: var(--space-sm); font-size: 0.8rem; color: var(--text-muted); margin-top: var(--space-md); padding-top: var(--space-md); border-top: 1px solid var(--border-color); } .timeline-certificate i { color: var(--warning-color); } .education-type { font-size: 0.7rem; padding: 0.2rem 0.5rem; border-radius: var(--radius-sm); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; } .education-type-university { background: rgba(59, 130, 246, 0.15); color: var(--info-color); } .education-type-course { background: rgba(34, 197, 94, 0.15); color: var(--success-color); } /* Skills Full */ .skills-full { grid-column: span 12; } .skills-full-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-lg); } .skill-category-card { background: var(--bg-elevated); padding: var(--space-lg); border-radius: var(--radius-md); border: 1px solid var(--border-color); } .skill-category-card .skill-category-title { margin-bottom: var(--space-md); } /* Soft Skills & Interests */ .soft-skills-list, .interests-list { display: flex; flex-direction: column; gap: var(--space-sm); } .soft-skill-item, .interest-item { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-sm); background: var(--bg-elevated); border-radius: var(--radius-sm); } .soft-skill-item i, .interest-item i { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: var(--primary-muted); color: var(--primary-color); border-radius: var(--radius-sm); font-size: 0.9rem; flex-shrink: 0; } .soft-skill-item span, .interest-item span { font-size: 0.9rem; color: var(--text-secondary); } /* Languages */ .languages-card { grid-column: span 4; } .languages-list { display: flex; flex-direction: column; gap: var(--space-md); } .language-item { display: flex; align-items: center; justify-content: space-between; padding: var(--space-md); background: var(--bg-elevated); border-radius: var(--radius-md); } .language-name { font-weight: 600; color: var(--text-primary); } .language-level { font-size: 0.85rem; color: var(--text-muted); } /* ===== Auth Pages ===== */ .auth-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: var(--space-xl); padding-top: 100px; } .auth-card { width: 100%; max-width: 440px; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-2xl); } .auth-header { text-align: center; margin-bottom: var(--space-xl); } .auth-header .logo { margin-bottom: var(--space-lg); justify-content: center; } .auth-title { font-size: 1.5rem; margin-bottom: var(--space-sm); } .auth-subtitle { color: var(--text-muted); font-size: 0.9rem; margin: 0; } .auth-error { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-md); background: rgba(239, 68, 68, 0.1); border: 1px solid var(--error-color); border-radius: var(--radius-md); color: var(--error-color); font-size: 0.9rem; margin-bottom: var(--space-lg); } .auth-footer { text-align: center; margin-top: var(--space-xl); padding-top: var(--space-xl); border-top: 1px solid var(--border-color); } .auth-footer p { margin: 0; color: var(--text-muted); } /* ===== Minimal Footer (Корректировка 2) ===== */ .footer-minimal { background: var(--bg-darker); border-top: 1px solid var(--border-color); padding: var(--space-xl) 0; margin-top: var(--space-3xl); } .footer-minimal-content { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-lg); } .footer-logo { display: inline-flex; align-items: center; font-family: 'Raleway', sans-serif; font-weight: 700; font-size: 1.25rem; text-decoration: none; transition: var(--transition); } .footer-logo .logo-deev, .footer-logo .logo-space { color: var(--text-primary); } .footer-logo .logo-dot { width: 6px; height: 6px; background-color: var(--primary-color); border-radius: 50%; margin: 0 2px; display: inline-block; transition: var(--transition); } .footer-logo:hover .logo-dot { transform: scale(1.4); box-shadow: 0 0 10px var(--primary-color); } .footer-social-icons { display: flex; align-items: center; gap: var(--space-md); } .footer-social-icons a { color: var(--text-secondary); font-size: 1.125rem; transition: color 0.3s ease, transform 0.3s ease, text-shadow 0.3s ease; text-decoration: none; } .footer-social-icons a:hover { color: var(--primary-color); transform: translateY(-2px); text-shadow: 0 0 12px var(--primary-color); } .footer-copyright-minimal { color: var(--text-muted); font-size: 0.85rem; margin: 0; } /* Responsive */ @media (max-width: 768px) { .footer-minimal-content { flex-direction: column; text-align: center; gap: var(--space-md); } } /* ===== Projects Section Spacing (Корректировка 3) ===== */ .projects-section { margin-bottom: var(--space-2xl); } .projects-section + .projects-section { margin-top: var(--space-3xl); padding-top: var(--space-2xl); border-top: 1px solid var(--border-color); } .section-subtitle { display: flex; align-items: center; gap: var(--space-sm); font-size: 1.25rem; color: var(--text-primary); margin-bottom: var(--space-xl); } .section-subtitle i { color: var(--primary-color); } .count-badge { background: var(--primary-muted); color: var(--primary-color); font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: var(--radius-full); margin-left: var(--space-sm); } /* Плавная анимация при фильтрации */ .project-card { transition: opacity 0.3s ease, transform 0.3s ease; } .project-card.hidden { opacity: 0; transform: scale(0.95); pointer-events: none; position: absolute; } /* Активный фильтр */ .filter-btn.active { background: var(--primary-color); color: var(--text-primary); border-color: var(--primary-color); } /* ===== SmartCaptcha Styles (Корректировка 4) ===== */ .smart-captcha-wrapper { display: flex; justify-content: center; margin: var(--space-md) 0; } .smart-captcha { border-radius: var(--radius-md); overflow: hidden; } .smart-captcha iframe { border-radius: var(--radius-md) !important; } /* ===== Social Icons Inline (Корректировка 5) ===== */ .social-icons-inline { display: flex; align-items: center; gap: var(--space-md); margin-top: var(--space-xs); } .social-icon-link { display: inline-flex; align-items: center; justify-content: center; color: var(--text-secondary); font-size: 1.25rem; transition: color 0.3s ease, transform 0.3s ease, text-shadow 0.3s ease; text-decoration: none; } .social-icon-link:hover { color: var(--primary-color); transform: scale(1.15); text-shadow: 0 0 15px var(--primary-color); } /* Специфичные цвета при наведении */ .social-icon-link:hover .fa-telegram { color: #0088cc; text-shadow: 0 0 15px rgba(0, 136, 204, 0.6); } .social-icon-link:hover .fa-github { color: #fff; text-shadow: 0 0 15px rgba(255, 255, 255, 0.4); } .social-icon-link:hover .fa-vk { color: #4a76a8; text-shadow: 0 0 15px rgba(74, 118, 168, 0.6); } .social-icon-link:hover .fa-linkedin { color: #0077b5; text-shadow: 0 0 15px rgba(0, 119, 181, 0.6); } /* ===== Error Pages ===== */ .error-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: var(--space-xl); } .error-card { text-align: center; max-width: 500px; } .error-code { font-size: 8rem; font-weight: 800; font-family: 'Raleway', sans-serif; background: var(--gradient-primary); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; line-height: 1; margin-bottom: var(--space-lg); } .error-title { font-size: 1.75rem; margin-bottom: var(--space-md); } .error-description { color: var(--text-secondary); margin-bottom: var(--space-xl); } .error-actions { display: flex; gap: var(--space-md); justify-content: center; flex-wrap: wrap; } /* ===== Empty State ===== */ .empty-state { text-align: center; padding: var(--space-3xl); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); } .empty-state i { font-size: 4rem; color: var(--text-muted); opacity: 0.5; margin-bottom: var(--space-lg); } .empty-state h3 { margin-bottom: var(--space-sm); } .empty-state p { margin-bottom: var(--space-lg); } /* ===== CTA Section ===== */ .cta-section { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-xl); padding: var(--space-3xl); margin: var(--space-3xl) 0; position: relative; overflow: hidden; } .cta-section::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: var(--gradient-glow); pointer-events: none; } .cta-content { position: relative; text-align: center; max-width: 600px; margin: 0 auto; } .cta-icon { width: 80px; height: 80px; background: var(--primary-muted); border-radius: var(--radius-xl); display: flex; align-items: center; justify-content: center; font-size: 2rem; color: var(--primary-color); margin: 0 auto var(--space-xl); } .cta-content h2 { margin-bottom: var(--space-md); } .cta-content p { margin-bottom: var(--space-xl); } .cta-buttons { display: flex; gap: var(--space-md); justify-content: center; flex-wrap: wrap; } /* ===== Pagination ===== */ .pagination-wrapper { margin-top: var(--space-2xl); } .pagination { display: flex; align-items: center; justify-content: center; gap: var(--space-sm); } .pagination-btn, .pagination-num { display: flex; align-items: center; justify-content: center; min-width: 40px; height: 40px; padding: 0 var(--space-sm); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-secondary); font-size: 0.9rem; text-decoration: none; transition: var(--transition); } .pagination-btn:hover, .pagination-num:hover { border-color: var(--primary-color); color: var(--primary-color); } .pagination-num.active { background: var(--primary-muted); border-color: var(--primary-color); color: var(--primary-color); font-weight: 600; } .pagination-dots { color: var(--text-muted); } .pagination-numbers { display: flex; gap: var(--space-sm); } /* ===== Messages / Notifications ===== */ .messages-container { position: fixed; top: 100px; right: var(--space-lg); z-index: var(--z-tooltip); display: flex; flex-direction: column; gap: var(--space-sm); max-width: 400px; } .message { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md) var(--space-lg); background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); animation: slideIn 0.3s ease; } .message.hiding { animation: slideOut 0.3s ease forwards; } @keyframes slideIn { from { opacity: 0; transform: translateX(100%); } to { opacity: 1; transform: translateX(0); } } @keyframes slideOut { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(100%); } } .message i { font-size: 1.25rem; flex-shrink: 0; } .message span { flex: 1; font-size: 0.9rem; } .message-close { background: none; border: none; color: var(--text-muted); font-size: 1.25rem; cursor: pointer; padding: 0; line-height: 1; } .message-close:hover { color: var(--text-primary); } .message-success { border-color: var(--success-color); } .message-success i { color: var(--success-color); } .message-error { border-color: var(--error-color); } .message-error i { color: var(--error-color); } .message-warning { border-color: var(--warning-color); } .message-warning i { color: var(--warning-color); } .message-info { border-color: var(--info-color); } .message-info i { color: var(--info-color); } /* ===== Back to Top ===== */ .back-to-top { position: fixed; bottom: var(--space-xl); right: var(--space-xl); width: 48px; height: 48px; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); color: var(--text-secondary); font-size: 1rem; cursor: pointer; opacity: 0; visibility: hidden; transition: var(--transition); z-index: var(--z-sticky); } .back-to-top.visible { opacity: 1; visibility: visible; } .back-to-top:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-4px); } /* ===== Footer ===== */ .footer { background: var(--bg-darker); padding: var(--space-3xl) 0 var(--space-xl); border-top: 1px solid var(--border-color); margin-top: var(--space-3xl); } .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: var(--space-2xl); margin-bottom: var(--space-2xl); } .footer-brand p { color: var(--text-secondary); margin-top: var(--space-md); font-size: 0.9rem; line-height: 1.6; max-width: 300px; } .footer h4 { font-size: 1rem; margin-bottom: var(--space-lg); color: var(--text-primary); } .footer-links { list-style: none; } .footer-links li { margin-bottom: var(--space-sm); } .footer-links a, .footer-links span { color: var(--text-secondary); font-size: 0.9rem; transition: var(--transition); text-decoration: none; display: inline-flex; align-items: center; gap: var(--space-sm); } .footer-links a:hover { color: var(--primary-color); } .footer-links i { font-size: 0.85rem; color: var(--primary-color); } .footer-socials { display: flex; gap: var(--space-sm); } .footer-social-link { width: 40px; height: 40px; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; color: var(--text-secondary); font-size: 1rem; transition: var(--transition); text-decoration: none; } .footer-social-link:hover { background: var(--primary-muted); border-color: var(--primary-color); color: var(--primary-color); } .footer-bottom { padding-top: var(--space-xl); border-top: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-md); } .footer-copyright, .footer-made { color: var(--text-muted); font-size: 0.85rem; margin: 0; } /* ===== Responsive ===== */ @media (max-width: 1200px) { .bento-profile { grid-column: span 12; } .bento-quick { grid-column: span 12; flex-direction: row; } .bento-socials { grid-column: span 6; } .bento-skills { grid-column: span 6; } .project-card.featured { grid-column: span 12; } .project-card.regular { grid-column: span 6; } .project-card.small { grid-column: span 4; } .about-bio { grid-column: span 12; } .about-stats { grid-column: span 12; } .timeline-card { grid-column: span 12; } .languages-card { grid-column: span 6; } .footer-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 992px) { .bento-profile { flex-direction: column; text-align: center; padding: var(--space-xl); } .profile-photo img { width: 160px; height: 160px; } .profile-buttons { justify-content: center; } .bento-quick { flex-wrap: wrap; } .quick-card { flex: 1 1 calc(33.333% - var(--space-lg)); min-width: 150px; } .bento-socials, .bento-skills { grid-column: span 12; } .project-card.featured { grid-template-columns: 1fr; } .project-card.featured .project-image { min-height: 200px; } .project-card.small { grid-column: span 6; } .contact-bento { grid-template-columns: 1fr; } .about-bento > .bento-card { grid-column: span 12 !important; } } @media (max-width: 768px) { :root { --container-padding: 1rem; } .bento-hero { padding-top: 80px; } .page-header { padding-top: calc(80px + var(--space-xl)); } .article-full { padding-top: 80px; } .project-card.regular, .project-card.small { grid-column: span 12; } .github-cta { grid-column: span 12; } .blog-grid { grid-template-columns: 1fr; } .achievements-grid { grid-template-columns: 1fr; } .achievement-card { flex-direction: column; text-align: center; } .achievement-arrow { display: none; } .article-meta-full { flex-direction: column; align-items: flex-start; } .article-footer-full { flex-direction: column; align-items: flex-start; } .footer-grid { grid-template-columns: 1fr; text-align: center; } .footer-brand p { max-width: none; } .footer-socials { justify-content: center; } .footer-bottom { flex-direction: column; text-align: center; } .filters-wrapper { flex-direction: column; align-items: flex-start; } .filter-group { width: 100%; } .filter-buttons { flex-wrap: wrap; } .filter-select { width: 100%; } .search-form { flex-direction: column; } .cta-section { padding: var(--space-xl); } .cta-buttons { flex-direction: column; width: 100%; } .cta-buttons .btn { width: 100%; } .messages-container { right: var(--space-md); left: var(--space-md); max-width: none; } .back-to-top { bottom: var(--space-md); right: var(--space-md); width: 44px; height: 44px; } .github-cta-card { flex-direction: column; text-align: center; } } @media (max-width: 576px) { .quick-card { flex: 1 1 100%; } .socials-grid { grid-template-columns: 1fr; } .stats-grid { grid-template-columns: 1fr; } .skills-categories { grid-template-columns: 1fr; } .profile-buttons { flex-direction: column; width: 100%; } .profile-buttons .btn { width: 100%; } .about-bio-header { flex-direction: column; text-align: center; } .about-bio-actions { flex-direction: column; } .about-bio-actions .btn { width: 100%; } .share-buttons { flex-wrap: wrap; } .related-grid { grid-template-columns: 1fr; } .pagination-numbers { flex-wrap: wrap; justify-content: center; } .error-code { font-size: 5rem; } .social-icon-link { font-size: 1.5rem; padding: var(--space-xs); } .social-icons-inline { gap: var(--space-lg); } } /* ===== Print Styles ===== */ @media print { .navbar, .footer, .back-to-top, .messages-container, .share-buttons, .vote-btn, .comment-form, .nav-toggle { display: none !important; } body { background: white; color: black; } .bento-card, .article-card, .project-card { background: white; border: 1px solid #ddd; box-shadow: none; } a { color: black; text-decoration: underline; } } /* ===== Animations ===== */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes glow { 0%, 100% { box-shadow: 0 0 20px var(--primary-glow); } 50% { box-shadow: 0 0 40px var(--primary-glow); } } /* Skeleton Loading */ .skeleton { background: linear-gradient(90deg, var(--bg-card) 25%, var(--bg-elevated) 50%, var(--bg-card) 75%); background-size: 200% 100%; animation: skeleton-loading 1.5s infinite; } @keyframes skeleton-loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* ===== Utility Classes ===== */ .text-center { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .text-primary { color: var(--primary-color); } .text-secondary { color: var(--text-secondary); } .text-muted { color: var(--text-muted); } .mt-0 { margin-top: 0; } .mt-1 { margin-top: var(--space-sm); } .mt-2 { margin-top: var(--space-md); } .mt-3 { margin-top: var(--space-lg); } .mt-4 { margin-top: var(--space-xl); } .mb-0 { margin-bottom: 0; } .mb-1 { margin-bottom: var(--space-sm); } .mb-2 { margin-bottom: var(--space-md); } .mb-3 { margin-bottom: var(--space-lg); } .mb-4 { margin-bottom: var(--space-xl); } .d-none { display: none; } .d-block { display: block; } .d-flex { display: flex; } .d-grid { display: grid; } .flex-center { display: flex; align-items: center; justify-content: center; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* ===== Hero Profile Card - Fixed Version ===== */ /* .bento-profile-new { grid-column: span 8; padding: 0; overflow: hidden; } .profile-layout { display: flex; align-items: stretch; min-height: 420px; position: relative; } .profile-photo-container { flex: 0 0 280px; background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-card) 100%); display: flex; align-items: center; justify-content: center; padding: var(--space-xl); position: relative; } .profile-photo-container::after { content: ''; position: absolute; right: 0; top: 10%; bottom: 10%; width: 1px; background: linear-gradient( to bottom, transparent, var(--primary-color) 30%, var(--primary-color) 70%, transparent ); } .profile-photo-frame { width: 100%; max-width: 200px; aspect-ratio: 2 / 3; border-radius: var(--radius-lg); overflow: hidden; border: 2px solid var(--border-color); background: var(--bg-darker); transition: var(--transition); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2); } .profile-photo-frame img { width: 100%; height: 100%; object-fit: contain; object-position: center; display: block; } .bento-profile-new:hover .profile-photo-frame { border-color: var(--primary-color); box-shadow: 0 12px 32px rgba(230, 57, 70, 0.3); transform: translateY(-4px); } .profile-text-content { flex: 1; padding: var(--space-2xl); display: flex; flex-direction: column; justify-content: center; } .profile-text-content h1 { font-size: clamp(1.75rem, 3vw, 2.25rem); margin-bottom: var(--space-sm); line-height: 1.2; } .profile-text-content .profile-title { color: var(--primary-color); font-weight: 600; font-size: 1.05rem; margin-bottom: var(--space-lg); display: flex; align-items: center; gap: var(--space-sm); } .profile-text-content .profile-description { color: var(--text-secondary); font-size: 0.95rem; line-height: 1.7; margin-bottom: var(--space-xl); } .profile-text-content .profile-buttons { display: flex; gap: var(--space-md); flex-wrap: wrap; } */ /* ===== Logo Image Styling ===== */ .logo img, .footer-logo img { display: block; max-width: 130px; height: auto; filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.3)); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); border-radius: var(--radius-sm); } .logo:hover img { filter: drop-shadow(0 4px 16px rgba(230, 57, 70, 0.4)) drop-shadow(0 0 20px rgba(230, 57, 70, 0.2)); transform: translateY(-2px) scale(1.02); } .footer-logo img { opacity: 0.9; } .footer-logo:hover img { opacity: 1; filter: drop-shadow(0 4px 12px rgba(230, 57, 70, 0.3)); transform: translateY(-1px); } /* Альтернативный вариант с рамкой и свечением */ .logo img.bordered, .footer-logo img.bordered { padding: 8px; background: rgba(255, 255, 255, 0.02); border: 1px solid var(--border-color); border-radius: var(--radius-md); } .logo:hover img.bordered { background: rgba(230, 57, 70, 0.05); border-color: var(--primary-color); box-shadow: 0 0 20px rgba(230, 57, 70, 0.3); }