/* ============================================ OmégaKube - Styles Globaux ============================================ */ /* Custom Fonts */ @font-face { font-family: 'OmegaLarge'; src: url('../fonts/custom_font_large.otf') format('opentype'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'OmegaSmall'; src: url('../fonts/custom_font_small.otf') format('opentype'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Montserrat-Bold'; src: url('../fonts/Montserrat/static/Montserrat-Bold.ttf') format('opentype'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Montserrat-BoldItalic'; src: url('../fonts/Montserrat/static/Montserrat-BoldItalic.ttf') format('opentype'); font-weight: normal; font-style: normal; font-display: swap; } /* ============================================ Variables & Thèmes ============================================ */ :root { --bg-deep: #1a0f1f; --bg-secondary: #251528; --bg-tertiary: #2d1b33; --accent-primary: #8b3a62; --accent-secondary: #a64d79; --accent-light: #c77daa; --accent-glow: #d4a5c9; --text-primary: #ffffff; --text-secondary: #c9b8d0; --text-muted: #8a7a91; --glass-bg: rgba(45, 27, 51, 0.7); --glass-border: rgba(167, 77, 121, 0.3); --card-bg: rgba(37, 21, 40, 0.8); --input-bg: #1a0f1f; --shadow-color: rgba(139, 58, 98, 0.3); --shape-color: rgba(255, 255, 255, 0.08); --shape-border: rgba(255, 255, 255, 0.15); } [data-theme="light"] { --bg-deep: #faf7fb; --bg-secondary: #f3edf5; --bg-tertiary: #ebe3ee; --accent-primary: #8b3a62; --accent-secondary: #a64d79; --accent-light: #c77daa; --accent-glow: #8b3a62; --text-primary: #1a0f1f; --text-secondary: #4a3a52; --text-muted: #6a5a72; --glass-bg: rgba(255, 255, 255, 0.9); --glass-border: rgba(139, 58, 98, 0.2); --card-bg: rgba(255, 255, 255, 0.95); --input-bg: #ffffff; --shadow-color: rgba(139, 58, 98, 0.15); --shape-color: rgba(139, 58, 98, 0.06); --shape-border: rgba(139, 58, 98, 0.12); } /* ============================================ Reset & Base ============================================ */ * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic',/* 'OmegaSmall',*/ 'Segoe UI', sans-serif; background: var(--bg-deep); color: var(--text-primary); overflow-x: hidden; line-height: 1.6; transition: background 0.4s ease, color 0.4s ease; } ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--bg-deep); } ::-webkit-scrollbar-thumb { background: var(--accent-primary); border-radius: 4px; } /* ============================================ Background Effects ============================================ */ .geo-bg { position: fixed; inset: 0; z-index: -2; background: linear-gradient(135deg, var(--bg-deep) 0%, var(--bg-secondary) 50%, var(--bg-tertiary) 100%); } .grid-pattern { position: fixed; inset: 0; z-index: -1; background-image: radial-gradient(circle, var(--shape-border) 1px, transparent 1px); background-size: 40px 40px; opacity: 0.5; } .geo-shapes { position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; } .shape { position: absolute; opacity: 0.6; animation: floatShape 20s ease-in-out infinite; } .shape-triangle { width: 0; height: 0; border-left: 30px solid transparent; border-right: 30px solid transparent; border-bottom: 52px solid var(--shape-color); } .shape-triangle-outline { width: 60px; height: 52px; background: transparent; border: 2px solid var(--shape-border); clip-path: polygon(50% 0%, 0% 100%, 100% 100%); } .shape-square { width: 40px; height: 40px; background: var(--shape-color); } .shape-square-outline { width: 50px; height: 50px; background: transparent; border: 2px solid var(--shape-border); } .shape-rect { width: 80px; height: 30px; background: var(--shape-color); } .shape-diamond { width: 40px; height: 40px; background: var(--shape-color); transform: rotate(45deg); } .shape-dots { display: grid; grid-template-columns: repeat(4, 8px); grid-template-rows: repeat(4, 8px); gap: 6px; } .shape-dots span { width: 4px; height: 4px; background: var(--shape-border); border-radius: 50%; } .shape:nth-child(1) { top: 10%; left: 5%; animation-delay: 0s; } .shape:nth-child(2) { top: 20%; right: 10%; animation-delay: -3s; } .shape:nth-child(3) { top: 60%; left: 8%; animation-delay: -6s; } .shape:nth-child(4) { top: 75%; right: 5%; animation-delay: -9s; } .shape:nth-child(5) { top: 40%; left: 3%; animation-delay: -12s; } .shape:nth-child(6) { top: 85%; left: 15%; animation-delay: -15s; } .shape:nth-child(7) { top: 15%; right: 20%; animation-delay: -4s; } .shape:nth-child(8) { top: 50%; right: 3%; animation-delay: -8s; } .shape:nth-child(9) { top: 30%; left: 12%; animation-delay: -11s; } .shape:nth-child(10) { top: 90%; right: 15%; animation-delay: -14s; } @keyframes floatShape { 0%, 100% { transform: translateY(0) rotate(0deg); } 25% { transform: translateY(-20px) rotate(5deg); } 50% { transform: translateY(-10px) rotate(-3deg); } 75% { transform: translateY(-25px) rotate(3deg); } } /* ============================================ Navigation ============================================ */ nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 1.5rem 2rem; transition: all 0.4s ease; } nav.scrolled { background: var(--glass-bg); backdrop-filter: blur(20px); border-bottom: 1px solid var(--glass-border); padding: 1rem 2rem; } .nav-container { max-width: 1400px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; } .logo { font-family: 'OmegaLarge', sans-serif; font-size: 1.6rem; text-decoration: none; color: var(--text-primary); display: flex; align-items: center; gap: 0.75rem; transition: color 0.3s ease; } .logo-icon { width: 45px; height: 45px; flex-shrink: 0; } .logo-icon img { width: 100%; height: 100%; object-fit: contain; } .logo-text { display: flex; align-items: baseline; gap: 0.15rem; } .logo-text .omega { color: var(--text-primary); } .logo-text .kube { color: var(--accent-light); } .logo-short { display: none; } .nav-right { display: flex; align-items: center; gap: 2rem; } .nav-links { display: flex; gap: 2.5rem; list-style: none; } .nav-links a { color: var(--text-secondary); text-decoration: none; font-weight: 500; font-size: 0.95rem; transition: color 0.3s ease; position: relative; } .nav-links a::after { content: ''; position: absolute; bottom: -5px; left: 0; width: 0; height: 2px; background: var(--accent-primary); transition: width 0.3s ease; } .nav-links a:hover, .nav-links a.active { color: var(--text-primary); } .nav-links a:hover::after, .nav-links a.active::after { width: 100%; } /* Theme Toggle */ .theme-toggle { width: 56px; height: 30px; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 50px; cursor: pointer; position: relative; transition: all 0.3s ease; display: flex; align-items: center; padding: 4px; flex-shrink: 0; } .theme-toggle:hover { border-color: var(--accent-primary); } .theme-toggle-thumb { width: 22px; height: 22px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 50%; transition: transform 0.3s ease; box-shadow: 0 2px 10px var(--shadow-color); } [data-theme="light"] .theme-toggle-thumb { transform: translateX(26px); } .theme-toggle .icon-moon, .theme-toggle .icon-sun { position: absolute; width: 14px; height: 14px; transition: opacity 0.3s ease; } .theme-toggle .icon-moon { left: 8px; opacity: 1; color: var(--text-muted); } .theme-toggle .icon-sun { right: 8px; opacity: 0.4; color: var(--text-muted); } [data-theme="light"] .theme-toggle .icon-moon { opacity: 0.4; } [data-theme="light"] .theme-toggle .icon-sun { opacity: 1; } .mobile-toggle { display: none; flex-direction: column; gap: 5px; cursor: pointer; padding: 5px; flex-shrink: 0; } .mobile-toggle span { width: 25px; height: 2px; background: var(--text-primary); transition: all 0.3s ease; } /* Responsive: show mobile toggle and hide nav links on small screens */ @media (max-width:880px) { .nav-links { display: none; position: absolute; right: 2rem; top: 100%; background: var(--glass-bg); padding: 0.75rem 1rem; border-radius: 8px; box-shadow: 0 6px 18px rgba(2,6,23,.12); flex-direction: column; gap: 1rem; width: auto; min-width: 160px; z-index: 1002; } .nav-links.active { display: block; } .mobile-toggle { display: flex; } /* Debug helpers: make elements clearly visible during testing */ /* .mobile-toggle { outline: 2px solid rgba(255,0,0,0.9) !important; } .nav-links { outline: 2px dashed rgba(0,128,255,0.9) !important; } .nav-links { z-index: 1100 !important; } */ } /* ============================================ Hero Sections ============================================ */ .hero { min-height: 100vh; display: flex; align-items: center; justify-content: center; position: relative; padding: 6rem 2rem 4rem; } .page-hero { min-height: 50vh; display: flex; align-items: center; justify-content: center; position: relative; padding: 8rem 2rem 4rem; text-align: center; } /* Le contenu du page-hero est toujours visible dès le chargement */ .page-hero .reveal, .page-hero-content { opacity: 1; transform: none; transition: none; animation: fadeInUp 0.7s ease forwards; } .page-hero .reveal.active { opacity: 1; transform: none; } .hero-content { text-align: center; max-width: 900px; z-index: 1; } .hero-badge { display: inline-flex; align-items: center; gap: 0.5rem; background: var(--glass-bg); border: 1px solid var(--glass-border); padding: 0.5rem 1.25rem; border-radius: 4px; font-size: 0.85rem; color: var(--accent-light); margin-bottom: 2rem; backdrop-filter: blur(10px); animation: fadeInUp 0.8s ease forwards; } .hero-badge::before { content: ''; width: 0; height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 10px solid var(--accent-light); } .hero h1, .page-hero h1 { font-family: 'OmegaLarge', sans-serif; font-size: clamp(3rem, 8vw, 5.5rem); font-weight: normal; line-height: 1.1; margin-bottom: 1.5rem; animation: fadeInUp 0.8s ease 0.1s forwards; opacity: 0; } .page-hero h1 { font-size: clamp(2.5rem, 6vw, 4rem); opacity: 1; animation: fadeInUp 0.8s ease forwards; } .hero h1 .highlight, .page-hero h1 .highlight { color: var(--accent-light); } .hero p, .page-hero p { font-size: 1.25rem; color: var(--text-secondary); max-width: 600px; margin: 0 auto 2.5rem; animation: fadeInUp 0.8s ease 0.2s forwards; opacity: 0; } .page-hero p { margin-bottom: 0; } .hero-buttons { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; animation: fadeInUp 0.8s ease 0.3s forwards; opacity: 0; } /* ============================================ Buttons ============================================ */ .btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 1rem 2rem; border-radius: 4px; font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic', /*'OmegaSmall',*/ sans-serif; font-weight: 500; font-size: 1rem; text-decoration: none; transition: all 0.3s ease; cursor: pointer; border: none; } .btn-primary { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); color: white; box-shadow: 0 4px 20px var(--shadow-color); } .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 8px 30px var(--shadow-color); } .btn-secondary { background: var(--glass-bg); color: var(--text-primary); border: 1px solid var(--glass-border); backdrop-filter: blur(10px); } .btn-secondary:hover { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } /* ============================================ Sections ============================================ */ section { padding: 8rem 2rem; position: relative; } .section-header { text-align: center; max-width: 700px; margin: 0 auto 5rem; } .section-tag { font-size: 0.85rem; color: var(--accent-light); text-transform: uppercase; letter-spacing: 3px; margin-bottom: 1rem; display: flex; align-items: center; justify-content: center; gap: 0.75rem; } .section-tag::before, .section-tag::after { content: ''; width: 30px; height: 1px; background: var(--accent-primary); } .section-title { font-family: 'OmegaLarge', sans-serif; font-size: clamp(2rem, 5vw, 3rem); font-weight: normal; margin-bottom: 1rem; } .section-desc { color: var(--text-secondary); font-size: 1.1rem; } /* ============================================ About Section ============================================ */ .about { background: linear-gradient(180deg, transparent 0%, var(--bg-secondary) 50%, transparent 100%); } .about-grid { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; } .about-content h3 { font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; margin-bottom: 1.5rem; color: var(--accent-light); } .about-content p { color: var(--text-secondary); margin-bottom: 1.5rem; font-size: 1.1rem; } .about-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; margin-top: 2rem; } .stat-item { text-align: center; padding: 1.5rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; backdrop-filter: blur(10px); position: relative; overflow: hidden; } .stat-item::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary)); } .stat-number { font-family: 'OmegaLarge', sans-serif; font-size: 2rem; color: var(--accent-light); } .stat-label { font-size: 0.85rem; color: var(--text-muted); margin-top: 0.25rem; } .about-card { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; padding: 3rem; backdrop-filter: blur(20px); position: relative; overflow: hidden; } .about-card::before { content: ''; position: absolute; top: 0; left: 0; width: 4px; height: 100%; background: linear-gradient(180deg, var(--accent-primary), var(--accent-secondary)); } .about-card h4 { font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; margin-bottom: 1rem; } .about-card p { color: var(--text-secondary); line-height: 1.8; } .deco-triangle { position: absolute; width: 0; height: 0; border-left: 20px solid transparent; border-right: 20px solid transparent; border-bottom: 35px solid var(--accent-primary); opacity: 0.3; bottom: 20px; right: 20px; } /* ============================================ Services ============================================ */ .services-grid { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .service-card { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; padding: 2.5rem; backdrop-filter: blur(10px); transition: all 0.4s ease; position: relative; overflow: hidden; } .service-card::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary)); transform: scaleX(0); transition: transform 0.4s ease; } .service-card:hover { transform: translateY(-10px); border-color: var(--accent-primary); box-shadow: 0 20px 40px var(--shadow-color); } .service-card:hover::after { transform: scaleX(1); } .service-icon { width: 70px; height: 70px; position: relative; display: flex; align-items: center; justify-content: center; margin-bottom: 1.5rem; } .service-icon::before { content: ''; position: absolute; width: 100%; height: 100%; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); } .service-icon svg { width: 28px; height: 28px; color: white; position: relative; z-index: 1; } .service-card h3 { font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; margin-bottom: 1rem; } .service-card p { color: var(--text-secondary); margin-bottom: 1.5rem; } .service-features { list-style: none; } .service-features li { display: flex; align-items: center; gap: 0.75rem; color: var(--text-secondary); margin-bottom: 0.75rem; font-size: 0.95rem; } .service-features li::before { content: ''; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 8px solid var(--accent-light); flex-shrink: 0; } /* Service Detail */ .service-detail { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; padding: 3rem; margin-bottom: 3rem; position: relative; overflow: hidden; } .service-detail::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 4px; background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary)); } .service-detail-header { display: flex; align-items: center; gap: 2rem; margin-bottom: 2rem; } .service-detail-icon { width: 100px; height: 100px; position: relative; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .service-detail-icon::before { content: ''; position: absolute; width: 100%; height: 100%; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); } .service-detail-icon svg { width: 40px; height: 40px; color: white; position: relative; z-index: 1; } .service-detail h2 { font-family: 'OmegaLarge', sans-serif; font-size: 2rem; margin-bottom: 0.5rem; } .service-detail h2 + p { color: var(--text-secondary); font-size: 1.1rem; } .service-detail-content { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; } .service-detail-content h3 { font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; margin-bottom: 1rem; color: var(--accent-light); } .service-detail-content p { color: var(--text-secondary); line-height: 1.8; margin-bottom: 1.5rem; } .service-detail-content ul { list-style: none; } .service-detail-content ul li { display: flex; align-items: center; gap: 0.75rem; color: var(--text-secondary); margin-bottom: 0.75rem; } .service-detail-content ul li::before { content: ''; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 8px solid var(--accent-light); flex-shrink: 0; } /* ============================================ Team Carousel ============================================ */ .team { background: linear-gradient(180deg, transparent 0%, var(--bg-secondary) 50%, transparent 100%); } .team-carousel-container { max-width: 1200px; margin: 0 auto; position: relative; overflow: hidden; padding: 0.5rem 1rem; } .team-carousel { display: flex; transition: transform 0.5s ease; } .team-card { flex: 0 0 calc(33.333% - 2rem); margin: 0 1rem; text-align: center; padding: 2rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; backdrop-filter: blur(10px); transition: all 0.4s ease; } .team-card:hover { border-color: var(--accent-primary); box-shadow: 0 5px 20px var(--shadow-color); cursor: pointer; } .team-avatar { width: 120px; height: 120px; margin: 0 auto 1.5rem; position: relative; } .team-avatar::before { content: ''; position: absolute; inset: -4px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); clip-path: polygon(29.3% 0%, 70.7% 0%, 100% 29.3%, 100% 70.7%, 70.7% 100%, 29.3% 100%, 0% 70.7%, 0% 29.3%); } .team-avatar-inner { position: absolute; inset: 0; background: var(--bg-secondary); clip-path: polygon(29.3% 0%, 70.7% 0%, 100% 29.3%, 100% 70.7%, 70.7% 100%, 29.3% 100%, 0% 70.7%, 0% 29.3%); display: flex; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 2rem; overflow: hidden; transition: background 0.3s ease; } .team-avatar-inner img { width: 100%; height: 100%; object-fit: cover; } .team-card h4 { font-family: 'OmegaLarge', sans-serif; font-size: 1.1rem; margin-bottom: 0.25rem; } .team-role { color: var(--accent-light); font-size: 0.9rem; margin-bottom: 1rem; } .team-desc { color: var(--text-muted); font-size: 0.9rem; } /* Carousel Controls */ .carousel-controls { display: flex; justify-content: center; align-items: center; gap: 1rem; margin-top: 2rem; } .carousel-btn { width: 50px; height: 50px; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; color: var(--text-primary); } .carousel-btn:hover { background: var(--accent-primary); border-color: var(--accent-primary); } .carousel-btn svg { width: 24px; height: 24px; } .carousel-dots { display: flex; gap: 0.5rem; } .carousel-dot { width: 10px; height: 10px; background: var(--glass-border); border-radius: 50%; cursor: pointer; transition: all 0.3s ease; } .carousel-dot.active { background: var(--accent-primary); width: 30px; border-radius: 5px; } /* ============================================ Portfolio ============================================ */ .portfolio-grid { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .portfolio-item { position: relative; border-radius: 4px; overflow: hidden; aspect-ratio: 4/3; background: var(--card-bg); border: 1px solid var(--glass-border); cursor: pointer; transition: all 0.4s ease; } .portfolio-item:hover { transform: scale(1.02); box-shadow: 0 20px 40px var(--shadow-color); } .portfolio-item.hidden { display: none; } .portfolio-bg { position: absolute; inset: 0; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); /* opacity retiré — géré par portfolio-content gradient */ } .portfolio-content { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 2rem; /* Gradient sombre uniquement en bas pour lisibilité du texte sans masquer l'image */ background: linear-gradient(180deg, transparent 55%, rgba(10,10,15,0.92) 100%); z-index: 2; } .portfolio-tag { font-size: 0.75rem; color: var(--accent-light); text-transform: uppercase; letter-spacing: 2px; margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem; } .portfolio-tag::before { content: ''; width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-bottom: 7px solid var(--accent-light); } .portfolio-item h4 { font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; } .portfolio-item p { display: none; /* Description masquée dans les cartes — visible uniquement dans la modal */ } /* Portfolio Detail */ .portfolio-detail { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; overflow: hidden; margin-bottom: 3rem; } .portfolio-detail-image { width: 100%; height: 300px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); } .portfolio-detail-content { padding: 2.5rem; } .portfolio-detail-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 2rem; flex-wrap: wrap; gap: 1rem; } .portfolio-detail h2 { font-family: 'OmegaLarge', sans-serif; font-size: 2rem; margin-bottom: 0.5rem; } .portfolio-detail-meta { display: flex; gap: 2rem; color: var(--text-muted); font-size: 0.9rem; } .portfolio-detail-meta span { display: flex; align-items: center; gap: 0.5rem; } .portfolio-detail-meta svg { width: 16px; height: 16px; } .portfolio-detail p { color: var(--text-secondary); line-height: 1.8; margin-bottom: 1.5rem; } .portfolio-detail-features { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin-top: 2rem; list-style: none; } .portfolio-detail-features li { display: flex; align-items: center; gap: 0.75rem; color: var(--text-secondary); } .portfolio-detail-features li::before { content: ''; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 8px solid var(--accent-light); flex-shrink: 0; } /* ============================================ Contact ============================================ */ .contact { background: linear-gradient(180deg, transparent 0%, var(--bg-secondary) 100%); } .contact-wrapper { max-width: 1000px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; } .contact-info h3 { font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; margin-bottom: 1.5rem; } .contact-info p { color: var(--text-secondary); margin-bottom: 2rem; font-size: 1.1rem; } .contact-links { display: flex; flex-direction: column; gap: 1.5rem; } .contact-link { display: flex; align-items: center; gap: 1rem; color: var(--text-secondary); text-decoration: none; transition: color 0.3s ease; } .contact-link:hover { color: var(--accent-light); } .contact-link-icon { width: 50px; height: 50px; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; } .contact-link:hover .contact-link-icon { background: var(--accent-primary); border-color: var(--accent-primary); } .contact-form { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; padding: 2.5rem; backdrop-filter: blur(10px); position: relative; } .contact-form::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 4px; background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary)); } .form-group { margin-bottom: 1.5rem; } .form-group label { display: block; margin-bottom: 0.5rem; font-weight: 500; color: var(--text-secondary); } .form-group input, .form-group textarea { width: 100%; padding: 1rem; background: var(--input-bg); border: 1px solid var(--glass-border); border-radius: 4px; color: var(--text-primary); font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic', /*'OmegaSmall',*/ sans-serif; font-size: 1rem; transition: all 0.3s ease; } .form-group input:focus, .form-group textarea:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 3px var(--shadow-color); } .form-group textarea { resize: vertical; min-height: 120px; } .form-submit { width: 100%; } /* ============================================ Footer ============================================ */ footer { padding: 4rem 2rem 2rem; border-top: 1px solid var(--glass-border); } .footer-content { max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 2rem; } .footer-links { display: flex; gap: 2rem; } .footer-links a { color: var(--text-muted); text-decoration: none; transition: color 0.3s ease; } .footer-links a:hover { color: var(--text-primary); } .footer-social { display: flex; gap: 1rem; } .footer-social a { width: 44px; height: 44px; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: all 0.3s ease; flex-shrink: 0; } .footer-social a svg { width: 20px; height: 20px; fill: currentColor; display: block; } .footer-social a:hover { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } /* ── Partners Section ──────────────────────────────────────────────────────── */ .partners { padding: 6rem 2rem; max-width: 1200px; margin: 0 auto; } .partners-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; margin-top: 3rem; } .partner-card { display: flex; align-items: center; gap: 1.25rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; padding: 1.5rem; text-decoration: none; color: var(--text-primary); transition: all 0.3s ease; } .partner-card:hover { border-color: var(--accent-primary); transform: translateY(-3px); box-shadow: 0 8px 30px rgba(var(--accent-primary-rgb, 142, 36, 170), 0.15); } .partner-avatar { width: 56px; height: 56px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 1rem; color: white; flex-shrink: 0; } .partner-info h4 { font-family: 'OmegaLarge', sans-serif; font-size: 1rem; margin-bottom: 0.25rem; color: var(--text-primary); } .partner-info p { font-size: 0.85rem; color: var(--text-muted); } /* ── Easter Egg ────────────────────────────────────────────────────────────── */ #easter-egg-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.85); display: flex; align-items: center; justify-content: center; z-index: 9999; animation: fadeIn 0.3s ease; } .easter-egg-box { background: var(--card-bg); border: 2px solid var(--accent-primary); border-radius: 12px; padding: 3rem 2.5rem; text-align: center; max-width: 480px; width: 90%; animation: scaleIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .easter-egg-icon { font-size: 4rem; margin-bottom: 1rem; display: block; } .easter-egg-box h2 { font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; color: var(--accent-light); margin-bottom: 1rem; } .easter-egg-box p { color: var(--text-secondary); margin-bottom: 2rem; } @keyframes scaleIn { from { transform: scale(0.7); opacity: 0; } to { transform: scale(1); opacity: 1; } } .footer-bottom { max-width: 1200px; margin: 2rem auto 0; padding-top: 2rem; border-top: 1px solid var(--glass-border); text-align: center; color: var(--text-muted); font-size: 0.9rem; } /* ============================================ Animations ============================================ */ .reveal { opacity: 0; transform: translateY(40px); transition: all 0.8s ease; } .reveal.active { opacity: 1; transform: translateY(0); } .reveal-delay-1 { transition-delay: 0.1s; } .reveal-delay-2 { transition-delay: 0.2s; } .reveal-delay-3 { transition-delay: 0.3s; } /* ============================================ Responsive ============================================ */ @media (max-width: 1024px) { .services-grid, .portfolio-grid { grid-template-columns: repeat(2, 1fr); } .team-card { flex: 0 0 calc(50% - 2rem); } } @media (max-width: 768px) { nav { padding: 1rem; } nav.scrolled { padding: 0.75rem 1rem; } .nav-links { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--glass-bg); backdrop-filter: blur(20px); flex-direction: column; padding: 2rem; gap: 1.5rem; border-bottom: 1px solid var(--glass-border); } .nav-links.active { display: flex; } .mobile-toggle { display: flex; } .mobile-toggle.active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); } .mobile-toggle.active span:nth-child(2) { opacity: 0; } .mobile-toggle.active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); } .nav-right { gap: 0.75rem; } .logo-text .logo-full { display: none; } .logo-short { display: flex !important; align-items: baseline; gap: 0.1rem; } .logo-short .omega-symbol { color: var(--text-primary); } .logo-short .kube-short { color: var(--accent-light); } .logo-icon { width: 35px; height: 35px; } .logo { font-size: 1.3rem; gap: 0.5rem; } .about-grid, .contact-wrapper { grid-template-columns: 1fr; gap: 3rem; } .services-grid, .portfolio-grid { grid-template-columns: 1fr; } .service-detail-content, .portfolio-detail-features { grid-template-columns: 1fr; } .service-detail-header { flex-direction: column; text-align: center; } .team-card { flex: 0 0 calc(100% - 2rem); } section { padding: 5rem 1.5rem; } .hero { padding: 8rem 1.5rem 4rem; } .footer-content { flex-direction: column; text-align: center; } .footer-links { flex-wrap: wrap; justify-content: center; } } @media (max-width: 480px) { .about-stats { grid-template-columns: 1fr; gap: 1rem; } .theme-toggle { width: 48px; height: 26px; } .theme-toggle-thumb { width: 18px; height: 18px; } [data-theme="light"] .theme-toggle-thumb { transform: translateX(22px); } .carousel-controls { flex-wrap: wrap; } } /* ============================================ Team Member Modal ============================================ */ .team-modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.8); backdrop-filter: blur(10px); z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 1rem; overflow-y: auto; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .team-modal-overlay.active { opacity: 1; visibility: visible; } .team-modal { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; max-width: 500px; width: 100%; max-height: calc(100dvh - 2rem); overflow-y: auto; position: relative; transform: scale(0.9) translateY(20px); transition: transform 0.3s ease; overscroll-behavior: contain; } .team-modal-overlay.active .team-modal { transform: scale(1) translateY(0); } .team-modal-header { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); padding: 2rem; text-align: center; position: relative; } .team-modal-close { position: absolute; top: 1rem; right: 1rem; width: 36px; height: 36px; background: rgba(255, 255, 255, 0.2); border: none; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; color: white; transition: all 0.3s ease; } .team-modal-close:hover { background: rgba(255, 255, 255, 0.3); transform: rotate(90deg); } .team-modal-close svg { width: 20px; height: 20px; } .team-modal-avatar { width: 120px; height: 120px; margin: 0 auto; position: relative; } .team-modal-avatar::before { content: ''; position: absolute; inset: -4px; background: rgba(255, 255, 255, 0.3); clip-path: polygon(29.3% 0%, 70.7% 0%, 100% 29.3%, 100% 70.7%, 70.7% 100%, 29.3% 100%, 0% 70.7%, 0% 29.3%); } .team-modal-avatar-inner { position: absolute; inset: 0; background: var(--bg-secondary); clip-path: polygon(29.3% 0%, 70.7% 0%, 100% 29.3%, 100% 70.7%, 70.7% 100%, 29.3% 100%, 0% 70.7%, 0% 29.3%); display: flex; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 2.5rem; color: var(--text-primary); } .team-modal-name { font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; color: white; margin-top: 1rem; } .team-modal-role { color: rgba(255, 255, 255, 0.8); font-size: 0.95rem; margin-top: 0.25rem; } .team-modal-content { padding: 2rem; } .team-modal-bio { color: var(--text-secondary); line-height: 1.8; margin-bottom: 1.5rem; } .team-modal-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-bottom: 1.5rem; } .team-modal-stat { text-align: center; padding: 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; } .team-modal-stat-value { font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; color: var(--accent-light); } .team-modal-stat-label { font-size: 0.75rem; color: var(--text-muted); margin-top: 0.25rem; } .team-modal-skills { display: flex; flex-wrap: wrap; gap: 0.5rem; } .team-modal-skill { padding: 0.5rem 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; font-size: 0.85rem; color: var(--text-secondary); transition: all 0.3s ease; } .team-modal-skill:hover { border-color: var(--accent-primary); color: var(--accent-light); } .team-modal-social { display: flex; justify-content: center; gap: 1rem; margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--glass-border); } .team-modal-social a { width: 40px; height: 40px; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: all 0.3s ease; } .team-modal-social a:hover { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } .team-modal-social a svg { width: 18px; height: 18px; fill: currentColor; display: block; } @media (max-width: 480px) { .team-modal-stats { grid-template-columns: repeat(3, 1fr); } .team-modal { max-height: calc(100dvh - 1rem); border-radius: 6px; } .team-modal-header { padding: 1.5rem 1rem; } .team-modal-content { padding: 1.25rem 1rem; } .team-modal-avatar { width: 90px; height: 90px; } .team-modal-name { font-size: 1.2rem; } } @media (max-width: 360px) { .team-modal-stats { grid-template-columns: 1fr; } } /* ============================================ Pagination ============================================ */ .pagination { display: flex; justify-content: center; align-items: center; gap: 0.5rem; margin-top: 4rem; flex-wrap: wrap; } .pagination-btn { width: 44px; height: 44px; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--text-secondary); font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic', /*'OmegaSmall',*/ sans-serif; font-size: 0.95rem; transition: all 0.3s ease; } .pagination-btn:hover:not(:disabled) { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } .pagination-btn:disabled { opacity: 0.4; cursor: not-allowed; } .pagination-btn.active { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } .pagination-btn svg { width: 20px; height: 20px; } .pagination-arrow { width: 50px; } .pagination-ellipsis { width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: 1.2rem; letter-spacing: 2px; } .pagination-info { width: 100%; text-align: center; margin-top: 1rem; color: var(--text-muted); font-size: 0.9rem; } @media (max-width: 480px) { .pagination-btn { width: 38px; height: 38px; font-size: 0.85rem; } .pagination-arrow { width: 44px; } } /* ============================================ Bento Grid - Projets Phares ============================================ */ .bento-grid { display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: auto; gap: 1.5rem; max-width: 1200px; margin: 0 auto; } .bento-item { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; overflow: hidden; transition: all 0.4s ease; position: relative; } .bento-item:hover { border-color: var(--accent-primary); box-shadow: 0 20px 40px var(--shadow-color); transform: translateY(-5px); } /* Bento Project Layout */ .bento-project { grid-column: span 12; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: auto auto; gap: 1.5rem; padding: 0; background: transparent; border: none; } .bento-project:hover { transform: none; box-shadow: none; } .bento-project .bento-image { grid-column: 1; grid-row: 1 / 3; min-height: 400px; background-size: cover; background-position: center; border-radius: 8px; position: relative; overflow: hidden; } /* Pas d'overlay sur le bento — juste gradient bas pour lisibilité texte */ .bento-project .bento-image::before { display: none; } /* Gradient sombre en bas pour le texte */ .bento-project .bento-image::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 50%; background: linear-gradient(to top, rgba(10,10,15,0.9) 0%, transparent 100%); z-index: 2; pointer-events: none; } .bento-image-content { position: absolute; bottom: 2rem; left: 2rem; right: 2rem; z-index: 3; } .bento-image-content .portfolio-tag { margin-bottom: 0.75rem; } .bento-image-content h3 { font-family: 'OmegaLarge', sans-serif; font-size: 2rem; margin-bottom: 0.5rem; } .bento-image-content p { color: var(--text-secondary); font-size: 1rem; } /* Stats Grid */ .bento-stats { grid-column: 2; grid-row: 1; display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; } .bento-stat { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; padding: 1.5rem; text-align: center; transition: all 0.3s ease; } .bento-stat:hover { border-color: var(--accent-primary); background: var(--glass-bg); } .bento-stat-icon { width: 50px; height: 50px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 8px; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; } .bento-stat-icon svg { width: 24px; height: 24px; color: white; } .bento-stat-value { font-family: 'OmegaLarge', sans-serif; font-size: 1.75rem; color: var(--accent-light); margin-bottom: 0.25rem; } .bento-stat-label { font-size: 0.85rem; color: var(--text-muted); } /* Info Card */ .bento-info { grid-column: 2; grid-row: 2; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; padding: 2rem; display: flex; flex-direction: column; } .bento-info h4 { font-family: 'OmegaLarge', sans-serif; font-size: 1.1rem; color: var(--accent-light); margin-bottom: 1rem; display: flex; align-items: center; gap: 0.5rem; } .bento-info h4::before { content: ''; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 8px solid var(--accent-light); } .bento-info p { color: var(--text-secondary); line-height: 1.7; margin-bottom: 1.5rem; flex-grow: 1; } .bento-features { display: flex; flex-wrap: wrap; gap: 0.5rem; } .bento-feature { padding: 0.4rem 0.8rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; font-size: 0.8rem; color: var(--text-secondary); transition: all 0.3s ease; } .bento-feature:hover { border-color: var(--accent-primary); color: var(--accent-light); } /* Tech Stack */ .bento-tech { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; padding: 1.5rem; } .bento-tech h4 { font-family: 'OmegaLarge', sans-serif; font-size: 0.9rem; color: var(--accent-light); margin-bottom: 1rem; } .bento-tech-list { display: flex; flex-wrap: wrap; gap: 0.5rem; } .bento-tech-item { padding: 0.5rem 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; font-size: 0.85rem; color: var(--text-secondary); display: flex; align-items: center; gap: 0.5rem; transition: all 0.3s ease; } .bento-tech-item:hover { border-color: var(--accent-primary); color: var(--accent-light); } .bento-tech-item svg { width: 16px; height: 16px; } /* Alternate Layout (Image Right) */ .bento-project.reverse .bento-image { grid-column: 2; grid-row: 1 / 3; } .bento-project.reverse .bento-stats { grid-column: 1; grid-row: 1; } .bento-project.reverse .bento-info { grid-column: 1; grid-row: 2; } /* Bento Divider */ .bento-divider { grid-column: span 12; height: 1px; background: linear-gradient(90deg, transparent, var(--glass-border), transparent); margin: 2rem 0; } @media (max-width: 1024px) { .bento-project { grid-template-columns: 1fr; } .bento-project .bento-image { grid-column: 1; grid-row: 1; min-height: 300px; } .bento-project .bento-stats { grid-column: 1; grid-row: 2; } .bento-project .bento-info { grid-column: 1; grid-row: 3; } .bento-project.reverse .bento-image, .bento-project.reverse .bento-stats, .bento-project.reverse .bento-info { grid-column: 1; } .bento-project.reverse .bento-image { grid-row: 1; } .bento-project.reverse .bento-stats { grid-row: 2; } .bento-project.reverse .bento-info { grid-row: 3; } } @media (max-width: 480px) { .bento-stats { grid-template-columns: 1fr; } .bento-project .bento-image { min-height: 250px; } .bento-image-content h3 { font-size: 1.5rem; } } /* ============================================ Project Modal - Galerie ============================================ */ .project-modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.9); backdrop-filter: blur(10px); z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 2rem; opacity: 0; visibility: hidden; transition: all 0.3s ease; } .project-modal-overlay.active { opacity: 1; visibility: visible; } .project-modal { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 12px; max-width: 900px; width: 100%; max-height: 90vh; overflow: hidden; position: relative; transform: scale(0.9) translateY(20px); transition: transform 0.3s ease; display: flex; flex-direction: column; } .project-modal-overlay.active .project-modal { transform: scale(1) translateY(0); } .project-modal-close { position: absolute; top: 1rem; right: 1rem; width: 44px; height: 44px; background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; color: white; transition: all 0.3s ease; z-index: 10; } .project-modal-close:hover { background: var(--accent-primary); border-color: var(--accent-primary); } .project-modal-close svg { width: 24px; height: 24px; } /* Gallery */ .project-gallery { position: relative; width: 100%; height: 350px; overflow: hidden; } .project-gallery-slides { position: relative; width: 100%; height: 100%; } .project-gallery-slide { position: absolute; inset: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity 0.35s ease, transform 0.35s ease; transform: translateX(100%); will-change: transform, opacity; } /* Slide à gauche de la courante */ .project-gallery-slide.slide-left { transform: translateX(-100%); opacity: 0; } /* Slide à droite de la courante */ .project-gallery-slide.slide-right { transform: translateX(100%); opacity: 0; } /* Slide active — visible */ .project-gallery-slide.active { opacity: 1; transform: translateX(0) !important; pointer-events: auto; } .project-gallery-slide::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(139, 58, 98, 0.4), rgba(45, 27, 51, 0.6)); } .gallery-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; color: white; transition: all 0.3s ease; z-index: 5; } .gallery-nav:hover { background: var(--accent-primary); border-color: var(--accent-primary); } .gallery-nav svg { width: 20px; height: 20px; } .gallery-nav.prev { left: 1rem; } .gallery-nav.next { right: 1rem; } .gallery-dots { position: absolute; bottom: 1rem; left: 50%; transform: translateX(-50%); display: flex; gap: 0.5rem; z-index: 5; } .gallery-dot { width: 10px; height: 10px; background: rgba(255, 255, 255, 0.4); border-radius: 50%; cursor: pointer; transition: all 0.3s ease; } .gallery-dot.active { background: white; width: 30px; border-radius: 5px; } /* Modal Content */ .project-modal-content { padding: 2rem; overflow-y: auto; flex-grow: 1; } .project-modal-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem; } .project-modal-header h2 { font-family: 'OmegaLarge', sans-serif; font-size: 1.75rem; margin-bottom: 0.5rem; } .project-modal-meta { display: flex; gap: 1.5rem; color: var(--text-muted); font-size: 0.9rem; } .project-modal-meta span { display: flex; align-items: center; gap: 0.5rem; } .project-modal-meta svg { width: 16px; height: 16px; } .project-modal-desc { color: var(--text-secondary); line-height: 1.8; margin-bottom: 2rem; } /* Modal Tabs */ .project-modal-tabs { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; border-bottom: 1px solid var(--glass-border); padding-bottom: 1rem; } .project-modal-tab { padding: 0.75rem 1.25rem; background: transparent; border: 1px solid var(--glass-border); border-radius: 4px; color: var(--text-secondary); font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic', /*'OmegaSmall',*/ sans-serif; font-size: 0.9rem; cursor: pointer; transition: all 0.3s ease; } .project-modal-tab:hover, .project-modal-tab.active { background: var(--accent-primary); border-color: var(--accent-primary); color: white; } .project-modal-tab-content { display: none; } .project-modal-tab-content.active { display: block; } /* Features Grid */ .project-features-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; } .project-feature-item { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 4px; color: var(--text-secondary); transition: all 0.3s ease; } .project-feature-item:hover { border-color: var(--accent-primary); } .project-feature-item::before { content: ''; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 8px solid var(--accent-light); flex-shrink: 0; } /* Tech Stack Grid */ .project-tech-grid { display: flex; flex-wrap: wrap; gap: 0.75rem; } /* project-tech-item and project-stats-grid → see end of file */ /* project-stat-card-value / label → see end of file */ @media (max-width: 768px) { .project-modal { max-height: 95vh; margin: 0.5rem; } .project-gallery { height: 250px; } .project-modal-content { padding: 1.5rem; } .project-features-grid, .project-stats-grid { grid-template-columns: 1fr; } .project-modal-tabs { flex-wrap: wrap; } } /* Portfolio Item Click State */ .portfolio-item { cursor: pointer; } .portfolio-item::before { content: ''; position: absolute; inset: 0; background: transparent; z-index: 3; transition: background 0.3s ease; } .portfolio-item:hover::before { background: rgba(139, 58, 98, 0.08); } .portfolio-item:active { transform: scale(0.98); } /* ============================================ Process Timeline ============================================ */ .process-section { padding: 6rem 2rem; background: linear-gradient(180deg, transparent 0%, var(--bg-secondary) 50%, transparent 100%); } .process-timeline { max-width: 1000px; margin: 0 auto; display: flex; justify-content: space-between; position: relative; padding: 2rem 0; } .process-timeline::before { content: ''; position: absolute; top: 50%; left: 10%; right: 10%; height: 3px; background: var(--glass-border); transform: translateY(-50%); z-index: 0; } .process-timeline::after { content: ''; position: absolute; top: 50%; left: 10%; height: 3px; background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary)); transform: translateY(-50%); z-index: 1; width: 0%; transition: width 5s ease; } .process-timeline.animated::after { width: 80%; } .process-step { display: flex; flex-direction: column; align-items: center; position: relative; z-index: 2; flex: 1; } .process-step-number { width: 70px; height: 70px; background: var(--card-bg); border: 3px solid var(--glass-border); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; color: var(--text-muted); margin-bottom: 1.5rem; transition: all 0.5s ease; position: relative; } .process-step-number::before { content: ''; position: absolute; inset: -6px; border-radius: 50%; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); opacity: 0; z-index: -1; transition: opacity 0.5s ease; } .process-step.active .process-step-number { border-color: var(--accent-primary); color: var(--accent-light); background: var(--bg-deep); } .process-step.active .process-step-number::before { opacity: 1; } .process-step-icon { position: absolute; width: 30px; height: 30px; color: var(--text-muted); transition: color 0.5s ease; } .process-step.active .process-step-icon { color: var(--accent-light); } [data-theme="light"] .process-step.active .process-step-icon { color: var(--accent-primary); } .process-step-content { text-align: center; max-width: 150px; } .process-step-title { font-family: 'OmegaLarge', sans-serif; font-size: 1rem; margin-bottom: 0.5rem; color: var(--text-primary); } .process-step-desc { font-size: 0.85rem; color: var(--text-muted); line-height: 1.5; } @media (max-width: 768px) { .process-timeline { flex-direction: column; gap: 2rem; padding: 0; } .process-timeline::before, .process-timeline::after { top: 10%; bottom: 10%; left: 35px; right: auto; width: 3px; height: auto; transform: none; } .process-timeline::after { height: 0%; width: 3px; } .process-timeline.animated::after { height: 80%; width: 3px; } .process-step { flex-direction: row; gap: 1.5rem; } .process-step-number { margin-bottom: 0; flex-shrink: 0; } .process-step-content { text-align: left; max-width: none; } } /* ============================================ Service Tabs ============================================ */ .service-tabs-section { padding: 6rem 2rem; } .service-tabs-container { max-width: 1200px; margin: 0 auto; } .service-tabs-nav { display: flex; justify-content: center; gap: 1rem; margin-bottom: 3rem; flex-wrap: wrap; } .service-tab-btn { display: flex; align-items: center; gap: 0.75rem; padding: 1rem 1.5rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 8px; color: var(--text-secondary); font-family: 'Montserrat-Bold', 'Montserrat-BoldItalic', /*'OmegaSmall',*/ sans-serif; font-size: 0.95rem; cursor: pointer; transition: all 0.3s ease; } .service-tab-btn:hover { border-color: var(--accent-primary); color: var(--text-primary); } .service-tab-btn.active { background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-color: transparent; color: white; } .service-tab-btn svg { width: 20px; height: 20px; } /* Service Tags / Stamps */ .service-stamp { position: relative; display: inline-flex; align-items: center; justify-content: center; padding: 0.3rem 0.6rem; font-family: 'OmegaLarge', sans-serif; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 1px; border-radius: 4px; font-weight: bold; transform: rotate(12deg); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); animation: stampPop 0.4s ease; } @keyframes stampPop { 0% { transform: rotate(12deg) scale(0); opacity: 0; } 50% { transform: rotate(12deg) scale(1.2); } 100% { transform: rotate(12deg) scale(1); opacity: 1; } } .service-stamp-free { background: linear-gradient(135deg, #2ecc71, #27ae60); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-new { background: linear-gradient(135deg, #3498db, #2980b9); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-soon { background: linear-gradient(135deg, #686b6d, #828e96); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-popular { background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-promo { background: linear-gradient(135deg, #f39c12, #e67e22); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-best { background: linear-gradient(135deg, #9b59b6, #8e44ad); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } /* Stamp on tab button */ .service-tab-btn { position: relative; } .service-tab-btn .service-stamp { position: absolute; top: -10px; right: -10px; font-size: 0.55rem; padding: 0.2rem 0.5rem; z-index: 10; } /* Large stamp for service visual */ .service-visual-stamp { position: absolute; top: 20px; right: 20px; z-index: 10; padding: 0.5rem 1rem; font-size: 0.85rem; transform: rotate(12deg); border: 3px dashed rgba(255, 255, 255, 0.6); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); } .service-visual-stamp::before { content: ''; position: absolute; inset: -6px; border: 2px solid currentColor; border-radius: 6px; opacity: 0.3; } /* Stamp in header - inline with transparency */ .service-tab-header { position: relative; } .service-tab-header .service-stamp-inline { display: inline-flex; margin-left: 1rem; vertical-align: middle; transform: rotate(12deg); opacity: 0.7; font-size: 0.55rem; padding: 0.2rem 0.45rem; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); transition: opacity 0.3s ease; } .service-tab-header .service-stamp-inline:hover { opacity: 1; } /* Animated stamp effect */ .service-stamp-animated { animation: stampBounce 2s ease infinite; } @keyframes stampBounce { 0%, 100% { transform: rotate(12deg) scale(1); } 50% { transform: rotate(12deg) scale(1.05); } } /* Ribbon style stamp */ .service-ribbon { position: absolute; top: 20px; left: -35px; background: linear-gradient(135deg, #2ecc71, #27ae60); color: white; padding: 0.5rem 3rem; font-family: 'OmegaLarge', sans-serif; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 1px; transform: rotate(-45deg); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); z-index: 10; } .service-ribbon::before, .service-ribbon::after { content: ''; position: absolute; bottom: -5px; border: 5px solid #1e8449; border-bottom-color: transparent; } .service-ribbon::before { left: 0; border-left-color: transparent; } .service-ribbon::after { right: 0; border-right-color: transparent; } /* Tab Content */ .service-tab-content { display: none; animation: fadeInTab 0.5s ease; } .service-tab-content.active { display: block; } @keyframes fadeInTab { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .service-tab-grid { display: grid; grid-template-columns: 1fr 1.2fr; gap: 3rem; align-items: center; } /* Service Visual */ .service-visual { position: relative; height: 400px; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 12px; overflow: hidden; display: flex; align-items: center; justify-content: center; } .service-visual::before { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); opacity: 0.1; } .service-visual-icon { position: relative; z-index: 1; } .service-visual-icon .icon-main { width: 120px; height: 120px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 24px; display: flex; align-items: center; justify-content: center; animation: floatIcon 3s ease-in-out infinite; box-shadow: 0 20px 60px var(--shadow-color); } .service-visual-icon .icon-main svg { width: 60px; height: 60px; color: white; } @keyframes floatIcon { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-15px); } } /* Floating elements around icon */ .service-visual-particles { position: absolute; inset: 0; pointer-events: none; } .particle { position: absolute; background: var(--accent-primary); border-radius: 50%; opacity: 0.3; animation: particleFloat 4s ease-in-out infinite; } .particle:nth-child(1) { width: 10px; height: 10px; top: 20%; left: 20%; animation-delay: 0s; } .particle:nth-child(2) { width: 15px; height: 15px; top: 30%; right: 25%; animation-delay: -1s; } .particle:nth-child(3) { width: 8px; height: 8px; bottom: 25%; left: 30%; animation-delay: -2s; } .particle:nth-child(4) { width: 12px; height: 12px; bottom: 20%; right: 20%; animation-delay: -3s; } .particle:nth-child(5) { width: 6px; height: 6px; top: 50%; left: 15%; animation-delay: -0.5s; } .particle:nth-child(6) { width: 14px; height: 14px; top: 15%; right: 35%; animation-delay: -1.5s; } @keyframes particleFloat { 0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.3; } 50% { transform: translate(10px, -20px) scale(1.2); opacity: 0.6; } } /* Service Details */ .service-tab-details { padding: 1rem 0; } .service-tab-header { margin-bottom: 2rem; } .service-tab-header h2 { font-family: 'OmegaLarge', sans-serif; font-size: 2.25rem; margin-bottom: 0.75rem; } .service-tab-header p { color: var(--text-secondary); font-size: 1.1rem; line-height: 1.7; } .service-tab-features { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin-bottom: 2rem; } .service-feature-item { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 8px; transition: all 0.3s ease; } .service-feature-item:hover { border-color: var(--accent-primary); transform: translateX(5px); } .service-feature-icon { width: 40px; height: 40px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .service-feature-icon svg { width: 20px; height: 20px; color: white; } .service-feature-text h4 { font-size: 0.95rem; margin-bottom: 0.2rem; } .service-feature-text p { font-size: 0.8rem; color: var(--text-muted); } /* Service CTA */ .service-tab-cta { display: flex; gap: 1rem; flex-wrap: wrap; } /* Service Highlights */ .service-highlights { display: flex; gap: 2rem; margin-bottom: 2rem; padding: 1.5rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 8px; } .service-highlight { text-align: center; flex: 1; } .service-highlight-value { font-family: 'OmegaLarge', sans-serif; font-size: 1.75rem; color: var(--accent-light); margin-bottom: 0.25rem; } .service-highlight-label { font-size: 0.8rem; color: var(--text-muted); } @media (max-width: 1024px) { .service-tab-grid { grid-template-columns: 1fr; gap: 2rem; } .service-visual { height: 300px; } } @media (max-width: 600px) { .service-tab-features { grid-template-columns: 1fr; } .service-highlights { flex-direction: column; gap: 1rem; } .service-tab-btn { padding: 0.75rem 1rem; font-size: 0.85rem; } .service-tab-btn span { display: none; } } /* ============================================ Why Choose Us Section ============================================ */ .why-us-grid { max-width: 1000px; margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .why-us-card { text-align: center; padding: 2.5rem 2rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; transition: all 0.3s ease; } .why-us-card:hover { border-color: var(--accent-primary); transform: translateY(-5px); } .why-us-icon { width: 80px; height: 80px; margin: 0 auto 1.5rem; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 16px; display: flex; align-items: center; justify-content: center; } .why-us-icon svg { width: 36px; height: 36px; color: white; } .why-us-card h3 { font-family: 'OmegaLarge', sans-serif; font-size: 1.2rem; margin-bottom: 0.75rem; } .why-us-card p { color: var(--text-secondary); font-size: 0.95rem; line-height: 1.6; } @media (max-width: 768px) { .why-us-grid { grid-template-columns: 1fr; } } /* |||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||| */ /* ============================================ Service Stamps / Tags ============================================ */ .service-stamp { position: relative; display: inline-flex; align-items: center; justify-content: center; padding: 0.3rem 0.6rem; font-family: 'OmegaLarge', sans-serif; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 1px; border-radius: 4px; font-weight: bold; transform: rotate(12deg); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); } .service-stamp-free { background: linear-gradient(135deg, #2ecc71, #27ae60); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-new { background: linear-gradient(135deg, #3498db, #2980b9); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-soon { background: linear-gradient(135deg, #686b6d, #828e96); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-popular { background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-stamp-promo { background: linear-gradient(135deg, #f39c12, #e67e22); color: white; border: 2px dashed rgba(255, 255, 255, 0.5); } .service-tab-btn .service-stamp { position: absolute; top: -10px; right: -10px; font-size: 0.55rem; padding: 0.2rem 0.5rem; z-index: 10; } .service-visual-stamp { position: absolute; top: 20px; right: 20px; z-index: 10; padding: 0.5rem 1rem; font-size: 0.85rem; transform: rotate(12deg); border: 3px dashed rgba(255, 255, 255, 0.6); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); } .service-tab-header .service-stamp-inline { display: inline-flex; margin-left: 1rem; vertical-align: middle; transform: rotate(12deg); opacity: 0.75; font-size: 0.75rem; padding: 0.35rem 0.7rem; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); transition: opacity 0.3s ease, transform 0.3s ease; } .service-tab-header .service-stamp-inline:hover { opacity: 1; transform: rotate(12deg) scale(1.1); } .service-stamp-animated { animation: stampBounce 2s ease infinite; } @keyframes stampBounce { 0%, 100% { transform: rotate(12deg) scale(1); } 50% { transform: rotate(12deg) scale(1.05); } } /* ============================================ Partners Section - Infinite Logo Carousel ============================================ */ .partners-section { padding: 4rem 0; } .partners-section .section-header { margin-bottom: 2.5rem; } .partners-marquee { position: relative; width: 100%; overflow: hidden; padding: 2rem 0 3rem; -webkit-mask-image: linear-gradient(90deg, transparent 0%, white 8%, white 92%, transparent 100%); mask-image: linear-gradient(90deg, transparent 0%, white 8%, white 92%, transparent 100%); } .partners-track { display: flex; gap: 5rem; width: max-content; animation: marqueeInfinite 35s linear infinite; will-change: transform; backface-visibility: hidden; perspective: 1000px; } .partners-track:hover { animation-play-state: paused; } @keyframes marqueeInfinite { 0% { transform: translate3d(0, 0, 0); } 100% { transform: translate3d(-50%, 0, 0); } } .partner-item { display: flex; flex-direction: column; align-items: center; gap: 1rem; flex-shrink: 0; cursor: pointer; transition: transform 0.3s ease; } .partner-item:hover { transform: translateY(-8px); } .partner-logo-icon { width: 100px; height: 100px; display: flex; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 2rem; color: var(--text-muted); background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 20px; transition: all 0.3s ease; } .partner-item:hover .partner-logo-icon { color: var(--accent-light); border-color: var(--accent-primary); background: var(--glass-bg); box-shadow: 0 15px 40px rgba(139, 58, 98, 0.3); } .partner-item span { font-size: 0.95rem; color: var(--text-muted); font-weight: 500; transition: color 0.3s ease; white-space: nowrap; } .partner-item:hover span { color: var(--text-primary); } @media (max-width: 768px) { .partners-track { gap: 3rem; animation-duration: 25s; } .partner-logo-icon { width: 75px; height: 75px; font-size: 1.5rem; border-radius: 14px; } .partner-item span { font-size: 0.8rem; } } /* ============================================ Legal Pages Styles ============================================ */ .legal-content { padding: 4rem 2rem 6rem; max-width: 900px; margin: 0 auto; } .legal-container { display: flex; flex-direction: column; gap: 2.5rem; } .legal-section h2 { font-family: 'OmegaLarge', sans-serif; font-size: 1.3rem; color: var(--text-primary); margin-bottom: 1rem; display: flex; align-items: center; gap: 0.75rem; } .legal-section h2 svg { width: 22px; height: 22px; color: var(--accent-light); } .legal-card { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 12px; padding: 1.5rem 2rem; } .legal-card p { color: var(--text-secondary); line-height: 1.7; margin-bottom: 1rem; } .legal-card p:last-child { margin-bottom: 0; } .legal-card strong { color: var(--text-primary); } .legal-card ul { margin: 1rem 0; padding-left: 1.5rem; color: var(--text-secondary); } .legal-card ul li { margin-bottom: 0.5rem; line-height: 1.6; } .legal-card ul li::marker { color: var(--accent-light); } @media (max-width: 768px) { .legal-content { padding: 2rem 1rem 4rem; } .legal-card { padding: 1.25rem 1.5rem; } .legal-section h2 { font-size: 1.1rem; } } /* ═══════════════════════════════════════════════════════════════════════════ HOME — Partners carousel ═══════════════════════════════════════════════════════════════════════════ */ .partners-carousel-wrapper { overflow: hidden; padding: 2rem 0; position: relative; mask-image: linear-gradient(to right, transparent 0%, black 8%, black 92%, transparent 100%); -webkit-mask-image: linear-gradient(to right, transparent 0%, black 8%, black 92%, transparent 100%); } .partners-carousel-track { display: flex; gap: 1.5rem; width: max-content; will-change: transform; } .partner-slide { flex-shrink: 0; cursor: pointer; } .partner-slide-inner { display: flex; flex-direction: column; align-items: center; gap: 0.6rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 10px; padding: 1.25rem 1.75rem; width: 160px; transition: border-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease; } .partner-slide:hover .partner-slide-inner { border-color: var(--accent-primary); transform: translateY(-4px); box-shadow: 0 8px 24px rgba(142,36,170,0.18); } .partner-logo-img { width: 72px; height: 72px; object-fit: contain; border-radius: 8px; } .partner-logo-fallback { width: 72px; height: 72px; border-radius: 8px; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 1.2rem; color: white; display: none; } .partner-slide-name { font-size: 0.82rem; color: var(--text-secondary); text-align: center; font-weight: 500; } /* Partner modal — réutilise team-modal, surcharge avatar */ .partner-modal-avatar { background: none !important; border: none !important; } .team-modal-avatar-photo { width: 72px; height: 72px; border-radius: 10px; object-fit: contain; display: block; } .team-modal-avatar-fallback { width: 72px; height: 72px; border-radius: 10px; align-items: center; justify-content: center; font-family: 'OmegaLarge', sans-serif; font-size: 1.25rem; color: white; display: none; } /* ═══════════════════════════════════════════════════════════════════════════ TEAM — Avatar photo ═══════════════════════════════════════════════════════════════════════════ */ .team-avatar-photo { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block; } .team-avatar-fallback { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; font-family: 'OmegaLarge', sans-serif; font-size: 1.5rem; color: var(--text-primary); } .team-avatar-inner { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; border-radius: 50%; overflow: hidden; } /* Modal avatar photo */ .team-modal-avatar-inner { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; overflow: hidden; } /* ═══════════════════════════════════════════════════════════════════════════ SERVICES — Note ═══════════════════════════════════════════════════════════════════════════ */ .service-note { font-size: 0.78rem; color: var(--text-muted); margin-bottom: 1rem; line-height: 1.5; font-style: italic; } .service-note-mark { color: var(--accent-light); font-style: normal; font-weight: 600; } /* ═══════════════════════════════════════════════════════════════════════════ FAQ — Page ═══════════════════════════════════════════════════════════════════════════ */ .faq-teaser { padding: 0 2rem 2rem; max-width: 1200px; margin: 0 auto; } .faq-teaser-inner { display: flex; align-items: center; justify-content: space-between; gap: 2rem; background: var(--card-bg); border: 1px solid var(--glass-border); border-left: 4px solid var(--accent-primary); border-radius: 10px; padding: 2rem 2.5rem; } .faq-teaser-text p.section-tag { margin-bottom: 0.5rem; } .faq-teaser-text h2 { font-family: 'OmegaLarge', sans-serif; font-size: 1.4rem; color: var(--text-primary); margin-bottom: 0.6rem; } .faq-teaser-text p:last-child { color: var(--text-secondary); font-size: 0.9rem; max-width: 480px; } .faq-teaser-btn { white-space: nowrap; flex-shrink: 0; } .faq-page-section { padding: 2rem 2rem 5rem; } .faq-page-container { max-width: 860px; margin: 0 auto; display: flex; flex-direction: column; gap: 2.5rem; } .faq-category-title { font-family: 'OmegaLarge', sans-serif; font-size: 1rem; color: var(--accent-light); display: flex; align-items: center; gap: 0.6rem; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--glass-border); } .faq-category-title svg { width: 18px; height: 18px; flex-shrink: 0; } .faq-list { display: flex; flex-direction: column; gap: 0.5rem; } .faq-item { background: var(--card-bg); border: 1px solid var(--glass-border); border-radius: 8px; overflow: hidden; transition: border-color 0.25s ease; } .faq-item.open { border-color: var(--accent-primary); } .faq-question { width: 100%; background: none; border: none; padding: 1.1rem 1.5rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; cursor: pointer; font-size: 0.95rem; font-weight: 500; color: var(--text-primary); text-align: left; transition: color 0.25s ease; } .faq-question:hover { color: var(--accent-light); } .faq-chevron { width: 18px; height: 18px; flex-shrink: 0; color: var(--text-muted); transition: transform 0.3s ease; } .faq-item.open .faq-chevron { transform: rotate(180deg); color: var(--accent-light); } .faq-answer { max-height: 0; overflow: hidden; transition: max-height 0.35s cubic-bezier(0.4,0,0.2,1), padding 0.3s ease; padding: 0 1.5rem; } .faq-item.open .faq-answer { max-height: 300px; padding: 0 1.5rem 1.25rem; } .faq-answer p { font-size: 0.9rem; color: var(--text-secondary); line-height: 1.7; } .faq-answer strong { color: var(--text-primary); } .faq-cta-section { background: var(--card-bg); border-top: 1px solid var(--glass-border); padding: 4rem 2rem; text-align: center; } .faq-cta-inner { max-width: 600px; margin: 0 auto; } .faq-cta-inner h2 { font-family: 'OmegaLarge', sans-serif; font-size: 1.6rem; margin-bottom: 0.75rem; color: var(--text-primary); } .faq-cta-inner p { color: var(--text-secondary); margin-bottom: 2rem; } .faq-cta-btns { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; } @media (max-width: 768px) { .faq-teaser-inner { flex-direction: column; align-items: flex-start; } .faq-teaser-btn { width: 100%; text-align: center; justify-content: center; } } /* ═══════════════════════════════════════════════════════════════════════════ GALLERY — image réelle dans les slides ═══════════════════════════════════════════════════════════════════════════ */ /* Slide sans image chargée → masqué */ .project-gallery-slide.no-image { display: none !important; } /* Slide avec image → l'image remplace le gradient */ .project-gallery-slide.has-image { background: #000 !important; } .gallery-slide-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; display: block; } /* Enlève l'overlay gradient quand une vraie image est présente */ .project-gallery-slide.has-image::before { display: none; } /* ═══════════════════════════════════════════════════════════════════════════ MODAL TECH — tech items avec icônes ═══════════════════════════════════════════════════════════════════════════ */ .project-tech-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.75rem; } .project-tech-item { padding: 0.75rem 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 6px; color: var(--text-secondary); font-size: 0.88rem; display: flex; align-items: center; gap: 0.6rem; transition: all 0.25s ease; font-weight: 500; } .project-tech-item svg { width: 16px; height: 16px; flex-shrink: 0; color: var(--accent-light); } .project-tech-item:hover { border-color: var(--accent-primary); color: var(--text-primary); background: rgba(142, 36, 170, 0.08); } /* ═══════════════════════════════════════════════════════════════════════════ MODAL STATS — grille 2×2 valorisée ═══════════════════════════════════════════════════════════════════════════ */ .project-stats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; } .project-stat-card { text-align: center; padding: 1.5rem 1rem; background: var(--glass-bg); border: 1px solid var(--glass-border); border-radius: 10px; transition: border-color 0.25s ease, transform 0.25s ease; } .project-stat-card:hover { border-color: var(--accent-primary); transform: translateY(-2px); } .project-stat-card-icon { width: 48px; height: 48px; background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary)); border-radius: 12px; display: flex; align-items: center; justify-content: center; margin: 0 auto 0.85rem; } .project-stat-card-icon svg { width: 22px; height: 22px; color: white; } .project-stat-card-value { font-family: 'OmegaLarge', sans-serif; font-size: 2.2rem; color: var(--accent-light); line-height: 1; margin-bottom: 0.4rem; } .project-stat-card-label { font-size: 0.82rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; } /* ═══════════════════════════════════════════════════════════════════════════ PORTFOLIO — image de couverture dans les cartes ═══════════════════════════════════════════════════════════════════════════ */ .portfolio-cover-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; /* au-dessus du gradient .portfolio-bg */ display: block; } /* .portfolio-bg — override pour les cartes avec image */ .portfolio-bg { position: absolute; inset: 0; overflow: hidden; /* gradient retiré ici — défini dans la règle principale */ background: none; } /* ═══════════════════════════════════════════════════════════════════════════ BENTO + PORTFOLIO — image de couverture réelle ═══════════════════════════════════════════════════════════════════════════ */ .bento-cover-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; /* au-dessus du gradient de fond */ display: block; } /* bento-image-content — z-index géré dans la règle principale ligne ~2141 */ /* ═══════════════════════════════════════════════════════════════════════════ GALLERY — iframe YouTube ═══════════════════════════════════════════════════════════════════════════ */ .yt-wrapper { position: absolute; inset: 0; width: 100%; height: 100%; } .gallery-slide-yt-iframe { width: 100%; height: 100%; border: none; display: block; } /* ═══════════════════════════════════════════════════════════════════════════ GALLERY — bouton mute vidéo ═══════════════════════════════════════════════════════════════════════════ */ .gallery-mute-btn { position: absolute; bottom: 3rem; /* au-dessus des dots */ right: 1rem; z-index: 10; width: 38px; height: 38px; background: rgba(0, 0, 0, 0.6); border: 1px solid rgba(255,255,255,0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; color: white; transition: background 0.2s ease; backdrop-filter: blur(4px); } .gallery-mute-btn:hover { background: rgba(139, 58, 98, 0.8); border-color: var(--accent-primary); } /* Icône son coupé = visible par défaut (muted=true au départ) */ .gallery-mute-btn .icon-muted { display: block; } .gallery-mute-btn .icon-unmuted { display: none; } /* Quand le son est activé */ .gallery-mute-btn.unmuted .icon-muted { display: none; } .gallery-mute-btn.unmuted .icon-unmuted { display: block; }