feat: site Le Moulin des Rives — design Tailwind + config Docker

This commit is contained in:
2026-05-28 23:46:36 +02:00
parent 87186db304
commit 1411e6816d
19 changed files with 1060 additions and 19 deletions
+49
View File
@@ -0,0 +1,49 @@
<section id="about" class="py-32 scroll-mt-20">
<div class="max-w-6xl mx-auto px-6">
<div class="grid md:grid-cols-2 gap-16 items-center">
<div>
<span class="block text-xs tracking-[0.3em] uppercase text-primary mb-5">
Le gîte
</span>
<h2 class="font-serif text-5xl md:text-6xl font-light leading-tight mb-8">
Un havre de paix<br/>au bord de l'Allier
</h2>
<p class="text-dark/70 leading-relaxed mb-8">
Ancien moulin rénové avec soin, mêlant authenticité, pierre naturelle
et confort moderne. Laissez-vous bercer par le doux bruit de l'eau
et la beauté des paysages environnants.
</p>
<ul class="space-y-3 list-none">
<li class="flex items-center gap-3 text-dark/70">
<span class="w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0"></span>
6 couchages
</li>
<li class="flex items-center gap-3 text-dark/70">
<span class="w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0"></span>
Terrasse avec vue sur la rivière
</li>
<li class="flex items-center gap-3 text-dark/70">
<span class="w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0"></span>
Nature préservée
</li>
<li class="flex items-center gap-3 text-dark/70">
<span class="w-1.5 h-1.5 rounded-full bg-primary flex-shrink-0"></span>
Repas maison disponibles
</li>
</ul>
</div>
<div class="relative">
<img
src="https://images.unsplash.com/photo-1480074568708-e7b720bb3f09?auto=format&fit=crop&w=800&q=80"
alt="Intérieur du gîte"
class="w-full h-[500px] object-cover rounded-sm object-center"
/>
<div class="absolute -bottom-5 -left-5 w-40 h-40 border border-primary/25 -z-10"></div>
</div>
</div>
</div>
</section>
+59
View File
@@ -0,0 +1,59 @@
<section id="contact" class="py-32 bg-secondary/20 scroll-mt-20">
<div class="max-w-6xl mx-auto px-6">
<div class="grid md:grid-cols-2 gap-16">
<!-- Infos -->
<div>
<span class="block text-xs tracking-[0.3em] uppercase text-primary mb-5">
Contact
</span>
<h2 class="font-serif text-5xl md:text-6xl font-light leading-tight mb-8">
Réservez<br/>votre séjour
</h2>
<p class="text-dark/70 leading-relaxed mb-10">
Une question ou une demande de réservation ?
N'hésitez pas à nous contacter, nous répondons sous 24h.
</p>
<div class="space-y-4 text-dark/70">
<div class="flex items-center gap-4">
<span class="text-primary font-serif text-xl">→</span>
<span>06 00 00 00 00</span>
</div>
<div class="flex items-center gap-4">
<span class="text-primary font-serif text-xl">→</span>
<span>contact@moulindesrives.fr</span>
</div>
</div>
</div>
<!-- Formulaire -->
<form class="space-y-4">
<input
type="text"
name="nom"
placeholder="Votre nom"
class="w-full bg-white border border-secondary px-4 py-3 text-dark placeholder:text-dark/40 focus:outline-none focus:border-primary transition-colors"
/>
<input
type="email"
name="email"
placeholder="Votre adresse email"
class="w-full bg-white border border-secondary px-4 py-3 text-dark placeholder:text-dark/40 focus:outline-none focus:border-primary transition-colors"
/>
<textarea
name="message"
rows="5"
placeholder="Votre message (dates souhaitées, nombre de personnes...)"
class="w-full bg-white border border-secondary px-4 py-3 text-dark placeholder:text-dark/40 focus:outline-none focus:border-primary transition-colors resize-none"
></textarea>
<button
type="submit"
class="w-full bg-primary text-white py-4 text-xs tracking-[0.25em] uppercase hover:bg-primary/80 transition-colors"
>
Envoyer le message
</button>
</form>
</div>
</div>
</section>
+25
View File
@@ -0,0 +1,25 @@
---
import { BedDouble, Trees, CookingPot, Wifi } from 'lucide-astro';
const features = [
{ icon: BedDouble, label: '3 chambres' },
{ icon: Trees, label: 'Nature préservée' },
{ icon: CookingPot,label: 'Repas maison' },
{ icon: Wifi, label: 'Wifi inclus' },
];
---
<section class="py-20 bg-dark">
<div class="max-w-6xl mx-auto px-6">
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
{features.map(({ icon: Icon, label }) => (
<div class="flex flex-col items-center gap-4 text-white/60 group">
<div class="w-14 h-14 flex items-center justify-center border border-white/20 group-hover:border-primary transition-colors">
<Icon class="w-5 h-5" />
</div>
<span class="text-xs tracking-[0.2em] uppercase">{label}</span>
</div>
))}
</div>
</div>
</section>
+35
View File
@@ -0,0 +1,35 @@
<section id="food" class="py-32 bg-secondary/20 scroll-mt-20">
<div class="max-w-6xl mx-auto px-6">
<div class="grid md:grid-cols-2 gap-16 items-center">
<!-- Image -->
<div class="relative order-2 md:order-1">
<img
src="https://images.unsplash.com/photo-1414235077428-338989a2e8c0?auto=format&fit=crop&w=800&q=80"
alt="Repas fait maison"
class="w-full h-[500px] object-cover rounded-sm"
/>
<div class="absolute -top-5 -right-5 w-40 h-40 border border-primary/25 -z-10"></div>
</div>
<!-- Texte -->
<div class="order-1 md:order-2">
<span class="block text-xs tracking-[0.3em] uppercase text-primary mb-5">
Restauration
</span>
<h2 class="font-serif text-5xl md:text-6xl font-light leading-tight mb-8">
Des repas maison<br/>avec des produits locaux
</h2>
<p class="text-dark/70 leading-relaxed mb-6">
Cuisine authentique et conviviale préparée à partir de produits
frais et locaux. Chaque repas est une invitation à découvrir
les saveurs du terroir auvergnat.
</p>
<p class="text-dark/70 leading-relaxed">
Sur réservation : petits-déjeuners et dîners en table d'hôte.
</p>
</div>
</div>
</div>
</section>
+6
View File
@@ -0,0 +1,6 @@
<footer class="bg-dark py-10">
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between gap-4">
<span class="font-serif text-xl text-white/70">Le Moulin des Rives</span>
<span class="text-white/30 text-sm">© 2026 · Tous droits réservés</span>
</div>
</footer>
+38
View File
@@ -0,0 +1,38 @@
<section id="gallery" class="py-32 scroll-mt-20">
<div class="max-w-6xl mx-auto px-6">
<div class="mb-14 text-center">
<span class="block text-xs tracking-[0.3em] uppercase text-primary mb-4">Galerie</span>
<h2 class="font-serif text-5xl font-light">Découvrez le lieu</h2>
</div>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
<img
src="https://images.unsplash.com/photo-1480074568708-e7b720bb3f09?auto=format&fit=crop&w=800&q=80"
alt="Extérieur du gîte"
class="w-full h-64 object-cover rounded-sm"
/>
<img
src="https://images.unsplash.com/photo-1566665797739-1674de7a421a?auto=format&fit=crop&w=800&q=80"
alt="Chambre"
class="w-full h-64 object-cover rounded-sm"
/>
<img
src="https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?auto=format&fit=crop&w=800&q=80"
alt="Cuisine"
class="w-full h-64 object-cover rounded-sm"
/>
<img
src="https://images.unsplash.com/photo-1441974231531-c6227db76b6e?auto=format&fit=crop&w=800&q=80"
alt="Rivière et forêt"
class="w-full h-64 object-cover rounded-sm"
/>
<img
src="https://images.unsplash.com/photo-1500534314209-a25ddb2bd429?auto=format&fit=crop&w=1200&q=80"
alt="Vue panoramique"
class="w-full h-64 object-cover rounded-sm col-span-2 md:col-span-2"
/>
</div>
</div>
</section>
+47
View File
@@ -0,0 +1,47 @@
<section class="relative h-screen flex items-center justify-center overflow-hidden">
<!-- Image de fond -->
<div class="absolute inset-0">
<img
src="https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?auto=format&fit=crop&w=1920&q=80"
alt="Vallée de l'Allier"
class="w-full h-full object-cover"
/>
<div class="absolute inset-0 bg-dark/50"></div>
</div>
<!-- Contenu centré -->
<div class="relative z-10 text-center text-white px-6 max-w-4xl mx-auto">
<span class="block text-xs tracking-[0.4em] uppercase text-white/60 mb-6">
Gîte de charme · Vallée de l'Allier
</span>
<h1 class="font-serif text-7xl md:text-9xl font-light leading-none mb-6">
Le Moulin<br/>des Rives
</h1>
<p class="text-lg text-white/70 font-light mb-12 max-w-lg mx-auto">
Un lieu chaleureux et authentique au cœur de la nature.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="#contact"
class="bg-primary text-white px-10 py-4 text-xs tracking-[0.25em] uppercase hover:bg-primary/80 transition-colors"
>
Réserver votre séjour
</a>
<a
href="#about"
class="border border-white/60 text-white px-10 py-4 text-xs tracking-[0.25em] uppercase hover:bg-white/10 transition-colors"
>
Découvrir
</a>
</div>
</div>
<!-- Indicateur de défilement -->
<div class="absolute bottom-8 left-1/2 -translate-x-1/2 flex flex-col items-center gap-2 text-white/40">
<span class="text-[10px] tracking-widest uppercase">Défiler</span>
<div class="w-px h-8 bg-white/30"></div>
</div>
</section>
+38
View File
@@ -0,0 +1,38 @@
<section class="py-32">
<div class="max-w-6xl mx-auto px-6">
<div class="grid md:grid-cols-2 gap-16 items-center">
<div>
<span class="block text-xs tracking-[0.3em] uppercase text-primary mb-5">
Localisation
</span>
<h2 class="font-serif text-5xl md:text-6xl font-light leading-tight mb-8">
Au cœur de la<br/>vallée de l'Allier
</h2>
<p class="text-dark/70 leading-relaxed mb-8">
Entre rivière, forêts et villages de caractère.
Facilement accessible depuis les grandes villes.
</p>
<div class="space-y-3 text-dark/70 text-sm">
<div class="flex items-center gap-3">
<span class="text-primary">—</span>
<span>Vallée de l'Allier, Auvergne</span>
</div>
<div class="flex items-center gap-3">
<span class="text-primary">—</span>
<span>Accessible en voiture et en train</span>
</div>
</div>
</div>
<!--
Remplacez le contenu de cette div par l'iframe Google Maps :
Allez sur maps.google.com → partagez → intégrer une carte → copiez l'iframe
-->
<div class="h-[420px] bg-secondary/40 rounded-sm flex items-center justify-center text-dark/40 text-sm">
Carte à intégrer (iframe Google Maps)
</div>
</div>
</div>
</section>
+16
View File
@@ -0,0 +1,16 @@
<header class="fixed top-0 left-0 right-0 z-50 bg-cream/95 backdrop-blur-sm border-b border-secondary/60">
<div class="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
<a href="#" class="font-serif text-2xl text-dark tracking-wide">
Le Moulin des Rives
</a>
<nav class="hidden md:flex items-center gap-8">
<a href="#about" class="text-xs tracking-[0.2em] uppercase text-dark/60 hover:text-primary transition-colors">Le gîte</a>
<a href="#gallery" class="text-xs tracking-[0.2em] uppercase text-dark/60 hover:text-primary transition-colors">Galerie</a>
<a href="#food" class="text-xs tracking-[0.2em] uppercase text-dark/60 hover:text-primary transition-colors">Restauration</a>
<a href="#contact" class="text-xs tracking-[0.2em] uppercase bg-primary text-white px-6 py-2.5 hover:bg-primary/80 transition-colors">
Réserver
</a>
</nav>
</div>
</header>
+38
View File
@@ -0,0 +1,38 @@
---
import '../styles/global.css';
interface Props {
title?: string;
}
const {
title = 'Le Moulin des Rives'
} = Astro.props;
---
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>{title}</title>
<meta
name="description"
content="Gîte de charme dans la vallée de lAllier avec restauration et hébergement au cœur de la nature."
/>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&family=Inter:wght@300;400;500;600&display=swap"
rel="stylesheet"
>
</head>
<body class="bg-cream text-dark font-sans antialiased">
<slot />
</body>
</html>
+26 -14
View File
@@ -1,17 +1,29 @@
---
import MainLayout from '../layouts/MainLayout.astro';
import Navbar from '../components/Navbar.astro';
import Hero from '../components/Hero.astro';
import About from '../components/About.astro';
import Features from '../components/Features.astro';
import Gallery from '../components/Gallery.astro';
import Food from '../components/Food.astro';
import Location from '../components/Location.astro';
import Contact from '../components/Contact.astro';
import Footer from '../components/Footer.astro';
---
---
<MainLayout>
<Navbar />
<Hero />
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
<h1>Astro</h1>
</body>
</html>
<main>
<About />
<Features />
<Gallery />
<Food />
<Location />
<Contact />
</main>
<Footer />
</MainLayout>
+14
View File
@@ -0,0 +1,14 @@
@import "tailwindcss";
@theme {
--color-primary: #8b8d62;
--color-secondary: #d9d2c3;
--color-cream: #f5f2eb;
--color-dark: #1f1f1f;
--font-serif: 'Cormorant Garamond', serif;
--font-sans: 'Inter', sans-serif;
}
html {
scroll-behavior: smooth;
}