KAPPA66 commited on
Commit
04ce8fc
·
verified ·
1 Parent(s): 205e965

crée un site modern de directeur artistique, gen ai digital artist, photographe , il faut que ce soit tres beau et tres modernen tres graphique

Browse files
Files changed (4) hide show
  1. components/header.js +110 -123
  2. index.html +81 -79
  3. script.js +43 -31
  4. style.css +104 -27
components/header.js CHANGED
@@ -1,127 +1,114 @@
1
  class CustomHeader extends HTMLElement {
2
- connectedCallback() {
3
- this.attachShadow({ mode: 'open' });
4
- this.shadowRoot.innerHTML = `
5
- <style>
6
- :host {
7
- display: block;
8
- position: fixed;
9
- top: 0;
10
- left: 0;
11
- right: 0;
12
- z-index: 1000;
13
- background: rgba(247, 255, 247, 0.95);
14
- backdrop-filter: blur(10px);
15
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
16
- }
17
-
18
- nav {
19
- display: flex;
20
- justify-content: space-between;
21
- align-items: center;
22
- padding: 1.5rem 2rem;
23
- max-width: 1400px;
24
- margin: 0 auto;
25
- }
26
-
27
- .logo {
28
- font-weight: 700;
29
- font-size: 1.5rem;
30
- color: #FF6B6B;
31
- }
32
-
33
- .nav-links {
34
- display: flex;
35
- gap: 2rem;
36
- }
37
-
38
- .nav-link {
39
- text-decoration: none;
40
- color: #292F36;
41
- font-weight: 500;
42
- transition: color 0.3s;
43
- position: relative;
44
- }
45
-
46
- .nav-link:hover {
47
- color: #FF6B6B;
48
- }
49
-
50
- .nav-link::after {
51
- content: '';
52
- position: absolute;
53
- bottom: -5px;
54
- left: 0;
55
- width: 0;
56
- height: 2px;
57
- background-color: #FF6B6B;
58
- transition: width 0.3s;
59
- }
60
-
61
- .nav-link:hover::after {
62
- width: 100%;
63
- }
64
-
65
- .mobile-menu-btn {
66
- display: none;
67
- background: none;
68
- border: none;
69
- cursor: pointer;
70
- }
71
-
72
- @media (max-width: 768px) {
73
- .mobile-menu-btn {
74
- display: block;
75
- }
76
-
77
- .nav-links {
78
- position: fixed;
79
- top: 80px;
80
- left: 0;
81
- right: 0;
82
- background: #F7FFF7;
83
- flex-direction: column;
84
- gap: 1.5rem;
85
- padding: 2rem;
86
- align-items: center;
87
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
88
- transform: translateY(-150%);
89
- transition: transform 0.3s ease;
90
- }
91
-
92
- .nav-links.active {
93
- transform: translateY(0);
94
- }
95
- }
96
- </style>
97
-
98
- <nav>
99
- <a href="/" class="logo">La Pieuvre</a>
100
-
101
- <div class="nav-links">
102
- <a href="/" class="nav-link">Accueil</a>
103
- <a href="#services" class="nav-link">Services</a>
104
- <a href="#projects" class="nav-link">Projets</a>
105
- <a href="#contact" class="nav-link">Contact</a>
106
- </div>
107
-
108
- <button class="mobile-menu-btn">
109
- <i data-feather="menu" class="w-6 h-6 text-dark"></i>
110
- </button>
111
- </nav>
112
-
113
- <script>
114
- feather.replace();
115
-
116
- const menuBtn = this.shadowRoot.querySelector('.mobile-menu-btn');
117
- const navLinks = this.shadowRoot.querySelector('.nav-links');
118
-
119
- menuBtn.addEventListener('click', () => {
120
- navLinks.classList.toggle('active');
121
- });
122
- </script>
123
- `;
124
- }
125
  }
126
 
127
  customElements.define('custom-header', CustomHeader);
 
1
  class CustomHeader extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ position: fixed;
9
+ top: 0;
10
+ left: 0;
11
+ right: 0;
12
+ z-index: 1000;
13
+ background: rgba(0, 0, 0, 0.9);
14
+ backdrop-filter: blur(20px);
15
+ -webkit-backdrop-filter: blur(20px);
16
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
17
+ padding: 1.5rem 3rem;
18
+ transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
19
+ }
20
+
21
+ nav {
22
+ max-width: 1800px;
23
+ margin: 0 auto;
24
+ display: flex;
25
+ justify-content: space-between;
26
+ align-items: center;
27
+ }
28
+
29
+ .logo {
30
+ color: #fff;
31
+ font-size: 1.8rem;
32
+ font-weight: 700;
33
+ letter-spacing: 4px;
34
+ text-transform: uppercase;
35
+ text-decoration: none;
36
+ position: relative;
37
+ font-family: 'Bebas Neue', sans-serif;
38
+ }
39
+
40
+ .logo::after {
41
+ content: '';
42
+ position: absolute;
43
+ bottom: -10px;
44
+ left: 0;
45
+ width: 60%;
46
+ height: 4px;
47
+ background: linear-gradient(90deg, #ff4d4d, #f9cb28);
48
+ transform: scaleX(0);
49
+ transform-origin: left;
50
+ transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
51
+ }
52
+
53
+ .logo:hover::after {
54
+ transform: scaleX(1);
55
+ }
56
+
57
+ .nav-links {
58
+ display: flex;
59
+ gap: 4rem;
60
+ }
61
+
62
+ .nav-link {
63
+ color: #fff;
64
+ text-decoration: none;
65
+ font-size: 1.1rem;
66
+ font-weight: 500;
67
+ letter-spacing: 1px;
68
+ position: relative;
69
+ padding: 0.5rem 0;
70
+ overflow: hidden;
71
+ font-family: 'Montserrat', sans-serif;
72
+ }
73
+
74
+ .nav-link::before {
75
+ content: '';
76
+ position: absolute;
77
+ bottom: 0;
78
+ left: 0;
79
+ width: 100%;
80
+ height: 2px;
81
+ background: linear-gradient(90deg, #ff4d4d, #f9cb28);
82
+ transform: translateX(-101%);
83
+ transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
84
+ }
85
+
86
+ .nav-link:hover::before {
87
+ transform: translateX(0);
88
+ }
89
+
90
+ @media (max-width: 992px) {
91
+ .nav-links {
92
+ display: none;
93
+ }
94
+
95
+ :host {
96
+ padding: 1.5rem;
97
+ }
98
+ }
99
+ </style>
100
+
101
+ <nav>
102
+ <a href="/" class="logo">STUDIO</a>
103
+ <div class="nav-links">
104
+ <a href="/work" class="nav-link">Work</a>
105
+ <a href="/about" class="nav-link">About</a>
106
+ <a href="/contact" class="nav-link">Contact</a>
107
+ <a href="/journal" class="nav-link">Journal</a>
108
+ </div>
109
+ </nav>
110
+ `;
111
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
113
 
114
  customElements.define('custom-header', CustomHeader);
index.html CHANGED
@@ -1,89 +1,91 @@
1
  <!DOCTYPE html>
2
- <html lang="fr">
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Lucie Martin | Photographie</title>
7
- <link rel="stylesheet" href="style.css">
8
- <link rel="stylesheet" href="https://use.typekit.net/xyz1234.css"> <!-- Replace with actual font link -->
 
 
 
9
  </head>
10
  <body>
11
- <custom-navbar></custom-navbar>
12
-
13
- <main class="portfolio-grid">
14
- <!-- Hero Section -->
15
- <section class="hero">
16
- <div class="hero-content">
17
- <h1>Lucie Martin</h1>
18
- <p class="subtitle">Photographe d'art & portrait</p>
19
- </div>
20
- </section>
 
21
 
22
- <!-- Gallery Grid -->
23
- <section class="gallery">
24
- <div class="grid-item" data-category="portrait">
25
- <img src="http://static.photos/people/1024x576/1" alt="Portrait 1">
26
- <div class="overlay">
27
- <p class="title">Portraits Intimes</p>
28
- </div>
29
- </div>
30
- <div class="grid-item" data-category="fashion">
31
- <img src="http://static.photos/fashion/1024x576/2" alt="Fashion 1">
32
- <div class="overlay">
33
- <p class="title">Mode Éditoriale</p>
34
- </div>
35
- </div>
36
- <div class="grid-item" data-category="landscape">
37
- <img src="http://static.photos/nature/1024x576/3" alt="Landscape 1">
38
- <div class="overlay">
39
- <p class="title">Paysages Urbains</p>
40
- </div>
41
- </div>
42
- <div class="grid-item" data-category="portrait">
43
- <img src="http://static.photos/people/1024x576/4" alt="Portrait 2">
44
- <div class="overlay">
45
- <p class="title">Séries Personnelles</p>
46
- </div>
47
- </div>
48
- </section>
 
 
 
 
 
 
 
 
 
 
 
49
 
50
- <!-- About Section -->
51
- <section class="about" id="about">
52
- <div class="about-content">
53
- <h2>À propos</h2>
54
- <p>Photographe basée à Paris, je capture des moments d'authenticité et d'émotion à travers mon travail. Mon approche mélange sensibilité artistique et technique rigoureuse.</p>
55
- <a href="#contact" class="cta-button">Travaillons ensemble</a>
56
- </div>
57
- <div class="about-image">
58
- <img src="http://static.photos/people/640x360/5" alt="Lucie Martin">
59
- </div>
60
- </section>
 
 
 
 
 
 
 
 
61
 
62
- <!-- Featured Project -->
63
- <section class="featured-project">
64
- <div class="project-content">
65
- <h2>Projet: Lumière Nocturne</h2>
66
- <p>Une exploration des nuances de lumière en milieu urbain la nuit.</p>
67
- <a href="/series/lumiere-nocturne" class="cta-button">Voir la série</a>
68
- </div>
69
- </section>
70
 
71
- <!-- Contact Section -->
72
- <section class="contact" id="contact">
73
- <h2>Me contacter</h2>
74
- <form class="contact-form">
75
- <input type="text" placeholder="Votre nom">
76
- <input type="email" placeholder="Votre email">
77
- <textarea placeholder="Votre message"></textarea>
78
- <button type="submit" class="cta-button">Envoyer</button>
79
- </form>
80
- </section>
81
- </main>
82
-
83
- <custom-footer></custom-footer>
84
-
85
- <script src="components/navbar.js"></script>
86
- <script src="components/footer.js"></script>
87
- <script src="script.js"></script>
88
  </body>
89
  </html>
 
1
  <!DOCTYPE html>
2
+ <html lang="en">
3
  <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Creative Director & AI Artist | Studio</title>
7
+ <meta name="description" content="Digital artist blending generative AI and photography to create visionary experiences">
8
+ <link rel="stylesheet" href="style.css">
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Montserrat:wght@300;400;500;600;700&display=swap" rel="stylesheet">
12
  </head>
13
  <body>
14
+ <custom-header></custom-header>
15
+
16
+ <main class="portfolio-grid">
17
+ <!-- Hero Section -->
18
+ <section class="hero">
19
+ <div class="hero-content">
20
+ <h1>Creative Director | AI Artist | Photographer</h1>
21
+ <p class="subtitle">Bridging technology and artistry</p>
22
+ <a href="#work" class="cta-button">View Work</a>
23
+ </div>
24
+ </section>
25
 
26
+ <!-- Projects Grid -->
27
+ <section class="gallery" id="work">
28
+ <div class="grid-item">
29
+ <img src="http://static.photos/abstract/1200x800/1" alt="AI Generated Art">
30
+ <div class="overlay">
31
+ <p class="title">Neural Dreams</p>
32
+ <span class="category">AI Art</span>
33
+ </div>
34
+ </div>
35
+ <div class="grid-item">
36
+ <img src="http://static.photos/technology/1200x800/2" alt="Digital Experience">
37
+ <div class="overlay">
38
+ <p class="title">Digital Frontiers</p>
39
+ <span class="category">Interactive</span>
40
+ </div>
41
+ </div>
42
+ <div class="grid-item">
43
+ <img src="http://static.photos/minimal/1200x800/3" alt="Visual Identity">
44
+ <div class="overlay">
45
+ <p class="title">Brand Ecosystems</p>
46
+ <span class="category">Identity</span>
47
+ </div>
48
+ </div>
49
+ <div class="grid-item">
50
+ <img src="http://static.photos/people/1200x800/4" alt="Photography">
51
+ <div class="overlay">
52
+ <p class="title">Human Elements</p>
53
+ <span class="category">Photography</span>
54
+ </div>
55
+ </div>
56
+ <div class="grid-item">
57
+ <img src="http://static.photos/white/1200x800/5" alt="Experimental">
58
+ <div class="overlay">
59
+ <p class="title">Form Studies</p>
60
+ <span class="category">Experimental</span>
61
+ </div>
62
+ </div>
63
+ </section>
64
 
65
+ <!-- About Section -->
66
+ <section class="about" id="about">
67
+ <div class="about-content">
68
+ <h2>Visionary Creative</h2>
69
+ <p>Bridging the gap between technology and human creativity, I craft immersive experiences that resonate with audiences and push boundaries. My work sits at the intersection of generative AI, visual identity, and storytelling.</p>
70
+ <div class="skills">
71
+ <span>Creative Direction</span>
72
+ <span>Generative AI</span>
73
+ <span>Digital Art</span>
74
+ <span>Photography</span>
75
+ <span>Brand Systems</span>
76
+ </div>
77
+ <a href="/about" class="cta-button">Full Bio</a>
78
+ </div>
79
+ <div class="about-image">
80
+ <img src="http://static.photos/studio/1200x800/6" alt="Creative Director">
81
+ </div>
82
+ </section>
83
+ </main>
84
 
85
+ <custom-footer></custom-footer>
 
 
 
 
 
 
 
86
 
87
+ <script src="components/header.js"></script>
88
+ <script src="components/footer.js"></script>
89
+ <script src="script.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  </body>
91
  </html>
script.js CHANGED
@@ -1,41 +1,53 @@
1
- document.addEventListener('DOMContentLoaded', function() {
2
- // Smooth scrolling
3
- document.querySelectorAll('a[href^="#"]').forEach(anchor => {
4
- anchor.addEventListener('click', function(e) {
5
- e.preventDefault();
6
- document.querySelector(this.getAttribute('href')).scrollIntoView({
7
- behavior: 'smooth'
8
- });
9
- });
10
- });
11
 
12
- // Lightbox for gallery items
13
- const galleryItems = document.querySelectorAll('.grid-item');
14
-
15
- galleryItems.forEach(item => {
16
- item.addEventListener('click', function() {
17
- // In a real implementation, this would open a lightbox
18
- console.log('Opening lightbox for item');
19
- });
20
  });
21
 
22
- // Navbar scroll effect
 
23
  window.addEventListener('scroll', function() {
24
- const navbar = document.querySelector('custom-navbar').shadowRoot.querySelector('nav');
25
- if (window.scrollY > 50) {
26
- navbar.style.background = 'rgba(0,0,0,0.9)';
27
  } else {
28
- navbar.style.background = 'rgba(0,0,0,0.5)';
 
29
  }
30
  });
31
 
32
- // Form submission
33
- const contactForm = document.querySelector('.contact-form');
34
- if (contactForm) {
35
- contactForm.addEventListener('submit', function(e) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  e.preventDefault();
37
- alert('Merci pour votre message. Je vous répondrai bientôt!');
38
- this.reset();
 
39
  });
40
- }
41
- });
 
 
 
 
 
 
 
 
 
 
 
1
 
2
+ document.addEventListener('DOMContentLoaded', function() {
3
+ // Parallax effect
4
+ const hero = document.querySelector('.hero');
5
+ window.addEventListener('scroll', function() {
6
+ const scroll = window.pageYOffset;
7
+ hero.style.transform = `translateY(${scroll * 0.3}px)`;
 
 
8
  });
9
 
10
+ // Dynamic header
11
+ const header = document.querySelector('custom-header');
12
  window.addEventListener('scroll', function() {
13
+ if (window.scrollY > 100) {
14
+ header.shadowRoot.host.style.background = 'rgba(0, 0, 0, 0.95)';
15
+ header.shadowRoot.host.style.boxShadow = '0 4px 30px rgba(0, 0, 0, 0.3)';
16
  } else {
17
+ header.shadowRoot.host.style.background = 'rgba(0, 0, 0, 0.9)';
18
+ header.shadowRoot.host.style.boxShadow = '0 4px 30px rgba(0, 0, 0, 0.1)';
19
  }
20
  });
21
 
22
+ // Animate elements on scroll
23
+ const animateOnScroll = function() {
24
+ const elements = document.querySelectorAll('.grid-item, .about-content');
25
+ elements.forEach(el => {
26
+ const elementTop = el.getBoundingClientRect().top;
27
+ if (elementTop < window.innerHeight - 100) {
28
+ el.style.opacity = '1';
29
+ el.style.transform = 'translateY(0)';
30
+ }
31
+ });
32
+ };
33
+
34
+ // Set initial state
35
+ document.querySelectorAll('.grid-item, .about-content').forEach(el => {
36
+ el.style.opacity = '0';
37
+ el.style.transform = 'translateY(20px)';
38
+ el.style.transition = 'all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1)';
39
+ });
40
+
41
+ window.addEventListener('scroll', animateOnScroll);
42
+ animateOnScroll(); // Run once on load
43
+
44
+ // Smooth scrolling
45
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
46
+ anchor.addEventListener('click', function(e) {
47
  e.preventDefault();
48
+ document.querySelector(this.getAttribute('href')).scrollIntoView({
49
+ behavior: 'smooth'
50
+ });
51
  });
52
+ });
53
+ });
style.css CHANGED
@@ -1,94 +1,171 @@
 
1
  /* Base Styles */
 
 
 
 
 
 
 
 
 
2
  body {
3
  margin: 0;
4
  padding: 0;
5
- font-family: 'aktiv-grotesk', sans-serif;
6
- color: #333;
7
- line-height: 1.6;
 
 
8
  }
9
-
10
  /* Portfolio Grid */
11
  .portfolio-grid {
12
  display: grid;
13
  grid-template-rows: auto auto auto auto;
14
  }
15
-
16
  /* Hero Section */
17
  .hero {
18
  height: 100vh;
19
- background: #000;
20
  color: white;
21
  display: flex;
22
  align-items: center;
23
  justify-content: center;
24
  text-align: center;
25
  position: relative;
 
26
  }
27
 
28
  .hero::before {
29
  content: '';
30
  position: absolute;
31
- top: 0;
32
- left: 0;
33
- right: 0;
34
- bottom: 0;
35
- background: linear-gradient(to bottom, rgba(0,0,0,0.3), rgba(0,0,0,0.7));
 
 
 
 
 
 
36
  }
37
 
38
  .hero-content {
39
- z-index: 1;
 
 
40
  }
41
 
42
  .hero h1 {
43
- font-size: 4rem;
44
- font-weight: 300;
45
- letter-spacing: 5px;
46
- margin-bottom: 1rem;
 
 
 
 
 
 
 
 
47
  }
48
 
49
- .subtitle {
50
  font-size: 1.2rem;
51
- letter-spacing: 3px;
52
- opacity: 0.8;
 
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /* Gallery Grid */
56
  .gallery {
57
  display: grid;
58
- grid-template-columns: repeat(2, 1fr);
59
- grid-gap: 0;
 
60
  }
61
 
62
  .grid-item {
63
  position: relative;
64
- aspect-ratio: 1/1;
65
  overflow: hidden;
 
66
  }
67
 
 
 
 
68
  .grid-item img {
69
  width: 100%;
70
  height: 100%;
71
  object-fit: cover;
72
- transition: transform 0.5s ease;
 
 
 
 
 
 
73
  }
74
 
75
  .grid-item:hover img {
76
- transform: scale(1.05);
 
77
  }
78
 
79
  .overlay {
80
  position: absolute;
81
- bottom: 2rem;
82
- left: 2rem;
83
  color: white;
84
  opacity: 0;
85
- transition: opacity 0.3s ease;
 
 
86
  }
87
 
88
  .grid-item:hover .overlay {
89
  opacity: 1;
 
 
 
 
 
 
 
 
 
 
90
  }
91
 
 
 
 
 
 
 
 
92
  /* About Section */
93
  .about {
94
  display: grid;
 
1
+
2
  /* Base Styles */
3
+ @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Montserrat:wght@300;400;500;600;700&display=swap');
4
+
5
+ :root {
6
+ --primary: #ff4d4d;
7
+ --secondary: #f9cb28;
8
+ --dark: #101010;
9
+ --light: #f8f8f8;
10
+ }
11
+
12
  body {
13
  margin: 0;
14
  padding: 0;
15
+ font-family: 'Montserrat', sans-serif;
16
+ color: var(--light);
17
+ line-height: 1.8;
18
+ background-color: var(--dark);
19
+ overflow-x: hidden;
20
  }
 
21
  /* Portfolio Grid */
22
  .portfolio-grid {
23
  display: grid;
24
  grid-template-rows: auto auto auto auto;
25
  }
 
26
  /* Hero Section */
27
  .hero {
28
  height: 100vh;
29
+ background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);
30
  color: white;
31
  display: flex;
32
  align-items: center;
33
  justify-content: center;
34
  text-align: center;
35
  position: relative;
36
+ overflow: hidden;
37
  }
38
 
39
  .hero::before {
40
  content: '';
41
  position: absolute;
42
+ top: -50%;
43
+ left: -50%;
44
+ width: 200%;
45
+ height: 200%;
46
+ background: radial-gradient(circle, rgba(255,77,77,0.1) 0%, rgba(0,0,0,0) 70%);
47
+ animation: pulse 20s infinite alternate;
48
+ }
49
+
50
+ @keyframes pulse {
51
+ 0% { transform: rotate(0deg); }
52
+ 100% { transform: rotate(360deg); }
53
  }
54
 
55
  .hero-content {
56
+ z-index: 2;
57
+ max-width: 1200px;
58
+ padding: 0 2rem;
59
  }
60
 
61
  .hero h1 {
62
+ font-size: 6rem;
63
+ font-weight: 700;
64
+ letter-spacing: 8px;
65
+ margin-bottom: 2rem;
66
+ font-family: 'Bebas Neue', sans-serif;
67
+ text-transform: uppercase;
68
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
69
+ -webkit-background-clip: text;
70
+ background-clip: text;
71
+ color: transparent;
72
+ line-height: 1;
73
+ margin-bottom: 2rem;
74
  }
75
 
76
+ .hero p {
77
  font-size: 1.2rem;
78
+ max-width: 600px;
79
+ margin: 0 auto 3rem;
80
+ opacity: 0.9;
81
  }
82
 
83
+ .subtitle {
84
+ font-size: 1.4rem;
85
+ letter-spacing: 4px;
86
+ text-transform: uppercase;
87
+ display: inline-block;
88
+ margin-bottom: 3rem;
89
+ position: relative;
90
+ }
91
+
92
+ .subtitle::after {
93
+ content: '';
94
+ position: absolute;
95
+ bottom: -10px;
96
+ left: 50%;
97
+ transform: translateX(-50%);
98
+ width: 100px;
99
+ height: 3px;
100
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
101
+ }
102
  /* Gallery Grid */
103
  .gallery {
104
  display: grid;
105
+ grid-template-columns: repeat(3, 1fr);
106
+ grid-auto-rows: 500px;
107
+ gap: 0;
108
  }
109
 
110
  .grid-item {
111
  position: relative;
 
112
  overflow: hidden;
113
+ transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
114
  }
115
 
116
+ .grid-item:nth-child(1) { grid-column: span 2; }
117
+ .grid-item:nth-child(5) { grid-column: span 2; }
118
+
119
  .grid-item img {
120
  width: 100%;
121
  height: 100%;
122
  object-fit: cover;
123
+ filter: grayscale(100%) contrast(120%);
124
+ transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
125
+ }
126
+
127
+ .grid-item:hover {
128
+ transform: translateY(-10px);
129
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
130
  }
131
 
132
  .grid-item:hover img {
133
+ filter: grayscale(0%) contrast(100%);
134
+ transform: scale(1.1);
135
  }
136
 
137
  .overlay {
138
  position: absolute;
139
+ bottom: 3rem;
140
+ left: 3rem;
141
  color: white;
142
  opacity: 0;
143
+ transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
144
+ transform: translateY(20px);
145
+ z-index: 2;
146
  }
147
 
148
  .grid-item:hover .overlay {
149
  opacity: 1;
150
+ transform: translateY(0);
151
+ }
152
+
153
+ .overlay .title {
154
+ font-size: 1.8rem;
155
+ font-weight: 700;
156
+ margin-bottom: 0.5rem;
157
+ text-transform: uppercase;
158
+ letter-spacing: 3px;
159
+ text-shadow: 0 2px 10px rgba(0,0,0,0.5);
160
  }
161
 
162
+ .overlay .category {
163
+ font-size: 0.9rem;
164
+ letter-spacing: 2px;
165
+ display: inline-block;
166
+ padding: 0.2rem 1rem;
167
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
168
+ }
169
  /* About Section */
170
  .about {
171
  display: grid;