efface cette poubelle que tu viens de faire, et crée moi un site portfolio de photographe basé sur les plus élégant site de photographe de squarespace ou de wiz en version payante
Browse files- components/footer.js +47 -146
- components/navbar.js +82 -0
- index.html +58 -115
- script.js +35 -26
- style.css +170 -23
components/footer.js
CHANGED
|
@@ -1,150 +1,51 @@
|
|
| 1 |
class CustomFooter extends HTMLElement {
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
gap: 1rem;
|
| 50 |
-
}
|
| 51 |
-
|
| 52 |
-
.footer-link {
|
| 53 |
-
color: rgba(247, 255, 247, 0.7);
|
| 54 |
-
text-decoration: none;
|
| 55 |
-
transition: color 0.3s;
|
| 56 |
-
}
|
| 57 |
-
|
| 58 |
-
.footer-link:hover {
|
| 59 |
-
color: #FF6B6B;
|
| 60 |
-
}
|
| 61 |
-
|
| 62 |
-
.social-links {
|
| 63 |
-
display: flex;
|
| 64 |
-
gap: 1rem;
|
| 65 |
-
}
|
| 66 |
-
|
| 67 |
-
.social-link {
|
| 68 |
-
width: 40px;
|
| 69 |
-
height: 40px;
|
| 70 |
-
border-radius: 50%;
|
| 71 |
-
background: rgba(247, 255, 247, 0.1);
|
| 72 |
-
display: flex;
|
| 73 |
-
align-items: center;
|
| 74 |
-
justify-content: center;
|
| 75 |
-
transition: all 0.3s;
|
| 76 |
-
}
|
| 77 |
-
|
| 78 |
-
.social-link:hover {
|
| 79 |
-
background: #FF6B6B;
|
| 80 |
-
transform: translateY(-3px);
|
| 81 |
-
}
|
| 82 |
-
|
| 83 |
-
.copyright {
|
| 84 |
-
text-align: center;
|
| 85 |
-
margin-top: 4rem;
|
| 86 |
-
padding-top: 2rem;
|
| 87 |
-
border-top: 1px solid rgba(247, 255, 247, 0.1);
|
| 88 |
-
color: rgba(247, 255, 247, 0.5);
|
| 89 |
-
}
|
| 90 |
-
</style>
|
| 91 |
-
|
| 92 |
-
<div class="footer-container">
|
| 93 |
-
<div>
|
| 94 |
-
<a href="/" class="footer-logo">La <span>Pieuvre</span></a>
|
| 95 |
-
<p class="footer-about">
|
| 96 |
-
Agence web créative spécialisée dans le développement, le design et la stratégie digitale.
|
| 97 |
-
Nous créons des solutions uniques et performantes pour vos projets.
|
| 98 |
-
</p>
|
| 99 |
-
</div>
|
| 100 |
-
|
| 101 |
-
<div>
|
| 102 |
-
<h3 class="footer-title">Services</h3>
|
| 103 |
-
<div class="footer-links">
|
| 104 |
-
<a href="#" class="footer-link">Développement web</a>
|
| 105 |
-
<a href="#" class="footer-link">Design UI/UX</a>
|
| 106 |
-
<a href="#" class="footer-link">Stratégie digitale</a>
|
| 107 |
-
<a href="#" class="footer-link">Application mobile</a>
|
| 108 |
-
</div>
|
| 109 |
-
</div>
|
| 110 |
-
|
| 111 |
-
<div>
|
| 112 |
-
<h3 class="footer-title">Contact</h3>
|
| 113 |
-
<div class="footer-links">
|
| 114 |
-
<a href="#" class="footer-link">hello@lapieuvre.com</a>
|
| 115 |
-
<a href="#" class="footer-link">01 23 45 67 89</a>
|
| 116 |
-
<a href="#" class="footer-link">10 Rue des Tentacules, Paris</a>
|
| 117 |
-
</div>
|
| 118 |
-
</div>
|
| 119 |
-
|
| 120 |
-
<div>
|
| 121 |
-
<h3 class="footer-title">Suivez-nous</h3>
|
| 122 |
-
<div class="social-links">
|
| 123 |
-
<a href="#" class="social-link">
|
| 124 |
-
<i data-feather="twitter"></i>
|
| 125 |
-
</a>
|
| 126 |
-
<a href="#" class="social-link">
|
| 127 |
-
<i data-feather="instagram"></i>
|
| 128 |
-
</a>
|
| 129 |
-
<a href="#" class="social-link">
|
| 130 |
-
<i data-feather="linkedin"></i>
|
| 131 |
-
</a>
|
| 132 |
-
<a href="#" class="social-link">
|
| 133 |
-
<i data-feather="dribbble"></i>
|
| 134 |
-
</a>
|
| 135 |
-
</div>
|
| 136 |
-
</div>
|
| 137 |
-
</div>
|
| 138 |
-
|
| 139 |
-
<div class="copyright">
|
| 140 |
-
© ${new Date().getFullYear()} La Pieuvre. Tous droits réservés.
|
| 141 |
-
</div>
|
| 142 |
-
|
| 143 |
-
<script>
|
| 144 |
-
feather.replace();
|
| 145 |
-
</script>
|
| 146 |
-
`;
|
| 147 |
-
}
|
| 148 |
}
|
| 149 |
|
| 150 |
customElements.define('custom-footer', CustomFooter);
|
|
|
|
| 1 |
class CustomFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
background: #111;
|
| 9 |
+
color: #fff;
|
| 10 |
+
padding: 4rem 2rem;
|
| 11 |
+
text-align: center;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.footer-content {
|
| 15 |
+
max-width: 1400px;
|
| 16 |
+
margin: 0 auto;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
.social-links {
|
| 20 |
+
display: flex;
|
| 21 |
+
justify-content: center;
|
| 22 |
+
gap: 1.5rem;
|
| 23 |
+
margin-bottom: 2rem;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
.social-link {
|
| 27 |
+
color: #fff;
|
| 28 |
+
text-decoration: none;
|
| 29 |
+
font-weight: 300;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
.copyright {
|
| 33 |
+
margin-top: 2rem;
|
| 34 |
+
font-size: 0.8rem;
|
| 35 |
+
opacity: 0.7;
|
| 36 |
+
}
|
| 37 |
+
</style>
|
| 38 |
+
|
| 39 |
+
<div class="footer-content">
|
| 40 |
+
<div class="social-links">
|
| 41 |
+
<a href="#" class="social-link">Instagram</a>
|
| 42 |
+
<a href="#" class="social-link">Behance</a>
|
| 43 |
+
<a href="#" class="social-link">LinkedIn</a>
|
| 44 |
+
</div>
|
| 45 |
+
<p class="copyright">© ${new Date().getFullYear()} Lucie Martin. Tous droits réservés.</p>
|
| 46 |
+
</div>
|
| 47 |
+
`;
|
| 48 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
}
|
| 50 |
|
| 51 |
customElements.define('custom-footer', CustomFooter);
|
components/navbar.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomNavbar 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.5);
|
| 14 |
+
backdrop-filter: blur(10px);
|
| 15 |
+
padding: 1.5rem 2rem;
|
| 16 |
+
transition: background 0.3s ease;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
nav {
|
| 20 |
+
max-width: 1400px;
|
| 21 |
+
margin: 0 auto;
|
| 22 |
+
display: flex;
|
| 23 |
+
justify-content: space-between;
|
| 24 |
+
align-items: center;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.logo {
|
| 28 |
+
color: white;
|
| 29 |
+
font-weight: 300;
|
| 30 |
+
letter-spacing: 2px;
|
| 31 |
+
text-decoration: none;
|
| 32 |
+
font-size: 1.1rem;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
.nav-links {
|
| 36 |
+
display: flex;
|
| 37 |
+
gap: 2rem;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
.nav-link {
|
| 41 |
+
color: white;
|
| 42 |
+
text-decoration: none;
|
| 43 |
+
font-weight: 300;
|
| 44 |
+
letter-spacing: 1px;
|
| 45 |
+
position: relative;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.nav-link::after {
|
| 49 |
+
content: '';
|
| 50 |
+
position: absolute;
|
| 51 |
+
bottom: -5px;
|
| 52 |
+
left: 0;
|
| 53 |
+
width: 0;
|
| 54 |
+
height: 1px;
|
| 55 |
+
background: white;
|
| 56 |
+
transition: width 0.3s ease;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.nav-link:hover::after {
|
| 60 |
+
width: 100%;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
@media (max-width: 768px) {
|
| 64 |
+
.nav-links {
|
| 65 |
+
display: none;
|
| 66 |
+
}
|
| 67 |
+
}
|
| 68 |
+
</style>
|
| 69 |
+
|
| 70 |
+
<nav>
|
| 71 |
+
<a href="/" class="logo">LUCIA MARTIN</a>
|
| 72 |
+
<div class="nav-links">
|
| 73 |
+
<a href="/" class="nav-link">Accueil</a>
|
| 74 |
+
<a href="#about" class="nav-link">À propos</a>
|
| 75 |
+
<a href="#contact" class="nav-link">Contact</a>
|
| 76 |
+
</div>
|
| 77 |
+
</nav>
|
| 78 |
+
`;
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
customElements.define('custom-navbar', CustomNavbar);
|
index.html
CHANGED
|
@@ -3,144 +3,87 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="stylesheet" href="style.css">
|
| 8 |
-
<
|
| 9 |
-
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
-
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
-
<script>
|
| 12 |
-
tailwind.config = {
|
| 13 |
-
theme: {
|
| 14 |
-
extend: {
|
| 15 |
-
colors: {
|
| 16 |
-
primary: '#FF6B6B',
|
| 17 |
-
secondary: '#4ECDC4',
|
| 18 |
-
dark: '#292F36',
|
| 19 |
-
light: '#F7FFF7'
|
| 20 |
-
}
|
| 21 |
-
}
|
| 22 |
-
}
|
| 23 |
-
}
|
| 24 |
-
</script>
|
| 25 |
</head>
|
| 26 |
-
<body
|
| 27 |
-
<custom-
|
| 28 |
|
| 29 |
-
<main class="
|
| 30 |
<!-- Hero Section -->
|
| 31 |
-
<section class="
|
| 32 |
-
<div class="
|
| 33 |
-
<h1
|
| 34 |
-
|
| 35 |
-
</h1>
|
| 36 |
-
<p class="text-xl text-gray-600 mb-8">
|
| 37 |
-
Nous déployons nos compétences pour créer des solutions web uniques et performantes.
|
| 38 |
-
</p>
|
| 39 |
-
<a href="#contact" class="bg-primary hover:bg-opacity-90 text-white font-bold py-3 px-6 rounded-full transition-all shadow-lg">
|
| 40 |
-
Parlons de votre projet
|
| 41 |
-
</a>
|
| 42 |
-
</div>
|
| 43 |
-
<div class="md:w-1/2 relative">
|
| 44 |
-
<div class="absolute -top-10 -left-10 w-32 h-32 bg-secondary rounded-full opacity-30 animate-pulse"></div>
|
| 45 |
-
<div class="absolute -bottom-10 -right-10 w-40 h-40 bg-primary rounded-full opacity-20 animate-pulse delay-300"></div>
|
| 46 |
-
<img src="http://static.photos/abstract/1024x576/42" alt="Design abstrait" class="relative z-10 rounded-3xl shadow-2xl">
|
| 47 |
</div>
|
| 48 |
</section>
|
| 49 |
|
| 50 |
-
<!--
|
| 51 |
-
<section class="
|
| 52 |
-
<
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
<div
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
<p class="
|
| 62 |
</div>
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
<
|
| 68 |
-
<p class="text-gray-600">Des interfaces fluides et naturelles qui captent l'attention.</p>
|
| 69 |
</div>
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
<
|
| 75 |
-
<p class="text-gray-600">Une approche globale pour maximiser votre présence en ligne.</p>
|
| 76 |
</div>
|
| 77 |
</div>
|
| 78 |
</section>
|
| 79 |
|
| 80 |
-
<!--
|
| 81 |
-
<section class="
|
| 82 |
-
<
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
<div class="absolute inset-0 bg-gradient-to-t from-dark to-transparent opacity-90 flex items-end p-6">
|
| 90 |
-
<div>
|
| 91 |
-
<h3 class="text-white text-xl font-bold mb-2">Site e-commerce luxe</h3>
|
| 92 |
-
<p class="text-gray-300">Une expérience d'achat immersive et haut de gamme</p>
|
| 93 |
-
</div>
|
| 94 |
-
</div>
|
| 95 |
-
</div>
|
| 96 |
-
<!-- Project 2 -->
|
| 97 |
-
<div class="relative group rounded-2xl overflow-hidden shadow-lg">
|
| 98 |
-
<img src="http://static.photos/abstract/640x360/2" alt="Projet 2" class="w-full h-64 object-cover transition-transform group-hover:scale-105">
|
| 99 |
-
<div class="absolute inset-0 bg-gradient-to-t from-dark to-transparent opacity-90 flex items-end p-6">
|
| 100 |
-
<div>
|
| 101 |
-
<h3 class="text-white text-xl font-bold mb-2">Plateforme SaaS B2B</h3>
|
| 102 |
-
<p class="text-gray-300">Une solution complète pour les entreprises</p>
|
| 103 |
-
</div>
|
| 104 |
-
</div>
|
| 105 |
-
</div>
|
| 106 |
</div>
|
| 107 |
</section>
|
| 108 |
|
| 109 |
-
<!--
|
| 110 |
-
<section
|
| 111 |
-
<div class="
|
| 112 |
-
<h2
|
| 113 |
-
|
| 114 |
-
</
|
| 115 |
-
<form class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
| 116 |
-
<div>
|
| 117 |
-
<label for="name" class="block text-gray-700 mb-2">Votre nom</label>
|
| 118 |
-
<input type="text" id="name" class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent">
|
| 119 |
-
</div>
|
| 120 |
-
<div>
|
| 121 |
-
<label for="email" class="block text-gray-700 mb-2">Votre email</label>
|
| 122 |
-
<input type="email" id="email" class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent">
|
| 123 |
-
</div>
|
| 124 |
-
<div class="md:col-span-2">
|
| 125 |
-
<label for="message" class="block text-gray-700 mb-2">Votre message</label>
|
| 126 |
-
<textarea id="message" rows="5" class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent"></textarea>
|
| 127 |
-
</div>
|
| 128 |
-
<button type="submit" class="md:col-span-2 bg-primary hover:bg-opacity-90 text-white font-bold py-3 px-6 rounded-full transition-all shadow-lg w-full md:w-auto">
|
| 129 |
-
Envoyer le message
|
| 130 |
-
</button>
|
| 131 |
-
</form>
|
| 132 |
</div>
|
| 133 |
</section>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
</main>
|
| 135 |
|
| 136 |
<custom-footer></custom-footer>
|
| 137 |
|
| 138 |
-
<script src="components/
|
| 139 |
<script src="components/footer.js"></script>
|
| 140 |
<script src="script.js"></script>
|
| 141 |
-
<script>
|
| 142 |
-
feather.replace();
|
| 143 |
-
</script>
|
| 144 |
-
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 145 |
</body>
|
| 146 |
</html>
|
|
|
|
| 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>
|
script.js
CHANGED
|
@@ -1,32 +1,41 @@
|
|
| 1 |
document.addEventListener('DOMContentLoaded', function() {
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
window.scrollTo({
|
| 10 |
-
top: target.offsetTop - 100,
|
| 11 |
-
behavior: 'smooth'
|
| 12 |
-
});
|
| 13 |
-
}
|
| 14 |
-
});
|
| 15 |
});
|
|
|
|
| 16 |
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
observer.unobserve(entry.target);
|
| 25 |
-
}
|
| 26 |
-
});
|
| 27 |
-
}, {
|
| 28 |
-
threshold: 0.1
|
| 29 |
});
|
|
|
|
| 30 |
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
});
|
|
|
|
| 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 |
});
|
style.css
CHANGED
|
@@ -1,37 +1,184 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
body {
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
}
|
| 6 |
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
0%, 100% {
|
| 10 |
-
transform: translateY(0);
|
| 11 |
-
}
|
| 12 |
-
50% {
|
| 13 |
-
transform: translateY(-15px);
|
| 14 |
-
}
|
| 15 |
}
|
| 16 |
|
| 17 |
-
.
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
}
|
| 20 |
|
| 21 |
-
|
| 22 |
-
:
|
| 23 |
-
width: 8px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
}
|
| 29 |
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
border-radius: 10px;
|
| 33 |
}
|
| 34 |
|
| 35 |
-
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
}
|
|
|
|
| 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;
|
| 95 |
+
grid-template-columns: 1fr 1fr;
|
| 96 |
+
min-height: 80vh;
|
| 97 |
+
align-items: center;
|
| 98 |
}
|
| 99 |
|
| 100 |
+
.about-content {
|
| 101 |
+
padding: 4rem;
|
|
|
|
| 102 |
}
|
| 103 |
|
| 104 |
+
.about-image {
|
| 105 |
+
height: 100%;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
.about-image img {
|
| 109 |
+
width: 100%;
|
| 110 |
+
height: 100%;
|
| 111 |
+
object-fit: cover;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
/* Featured Project */
|
| 115 |
+
.featured-project {
|
| 116 |
+
height: 100vh;
|
| 117 |
+
background: #000;
|
| 118 |
+
color: white;
|
| 119 |
+
display: flex;
|
| 120 |
+
align-items: center;
|
| 121 |
+
justify-content: center;
|
| 122 |
+
text-align: center;
|
| 123 |
+
padding: 0 20%;
|
| 124 |
+
background-image: url('http://static.photos/black/1200x630/1');
|
| 125 |
+
background-size: cover;
|
| 126 |
+
background-position: center;
|
| 127 |
+
position: relative;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
.featured-project::before {
|
| 131 |
+
content: '';
|
| 132 |
+
position: absolute;
|
| 133 |
+
top: 0;
|
| 134 |
+
left: 0;
|
| 135 |
+
right: 0;
|
| 136 |
+
bottom: 0;
|
| 137 |
+
background: rgba(0,0,0,0.5);
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
.featured-project .project-content {
|
| 141 |
+
z-index: 1;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
/* Contact Section */
|
| 145 |
+
.contact {
|
| 146 |
+
padding: 8rem 4rem;
|
| 147 |
+
background: #f9f9f9;
|
| 148 |
+
text-align: center;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
.contact-form {
|
| 152 |
+
max-width: 500px;
|
| 153 |
+
margin: 2rem auto 0;
|
| 154 |
+
display: flex;
|
| 155 |
+
flex-direction: column;
|
| 156 |
+
gap: 1rem;
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
/* Buttons */
|
| 160 |
+
.cta-button {
|
| 161 |
+
display: inline-block;
|
| 162 |
+
padding: 1rem 2rem;
|
| 163 |
+
background: transparent;
|
| 164 |
+
color: #000;
|
| 165 |
+
border: 1px solid #000;
|
| 166 |
+
text-decoration: none;
|
| 167 |
+
transition: all 0.3s ease;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
.cta-button:hover {
|
| 171 |
+
background: #000;
|
| 172 |
+
color: white;
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
/* Responsive */
|
| 176 |
+
@media (max-width: 768px) {
|
| 177 |
+
.gallery {
|
| 178 |
+
grid-template-columns: 1fr;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
.about {
|
| 182 |
+
grid-template-columns: 1fr;
|
| 183 |
+
}
|
| 184 |
}
|