feat: site Le Moulin des Rives — design Tailwind + config Docker
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 l’Allier 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
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user