Upload files to "/"

This commit is contained in:
2025-12-12 19:58:37 +01:00
commit 1d83a1bfcd
3 changed files with 607 additions and 0 deletions

305
index.html Normal file
View File

@@ -0,0 +1,305 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>ImmersiHome — Visites VR Immobilières</title>
<meta name="description" content="ImmersiHome : casque VR + plateforme pour visiter appartements et maisons en immersion avant achat ou location." />
<link rel="icon" href="assets/logo.png" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- HEADER -->
<header class="site-header" role="banner">
<div class="container header-inner">
<a class="brand" href="#home" aria-label="ImmersiHome - accueil">
<img src="assets/logo.png" alt="Logo ImmersiHome" class="logo">
<span class="brand-name">ImmersiHome</span>
</a>
<nav class="nav" aria-label="Navigation principale">
<ul>
<li><a href="#home">Accueil</a></li>
<li><a href="#features">Fonctionnalités</a></li>
<li><a href="#offre">Offre</a></li>
<li><a href="#tarifs">Tarifs</a></li>
<li><a href="#team">Équipe</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<div class="header-actions">
<button class="burger" id="burger" aria-label="Ouvrir le menu" aria-expanded="false">
<span></span><span></span><span></span>
</button>
</div>
</div>
</header>
<!-- MAIN -->
<main id="home">
<!-- HERO -->
<section class="hero apple-hero" id="home">
<div class="container hero-inner-apple">
<div class="hero-copy-apple">
<h1 class="apple-title">Visitez votre futur logement<br><span class="accent">comme si vous y étiez.</span></h1>
<p class="apple-sub">
ImmersiHome révolutionne limmobilier : explorez appartements, maisons et locaux
en immersion grâce à notre casque VR et notre plateforme intelligente.
</p>
<div class="hero-ctas-apple">
<button class="btn apple-primary" id="openVideoBtn">Regarder la démo</button>
<a class="btn apple-secondary" href="#tarifs">Voir les tarifs</a>
</div>
<ul class="trust">
<li>✔ Pour agences & promoteurs</li>
<li>✔ Scans 3D HD & navigation 360°</li>
<li>✔ Réduction des visites inutiles</li>
</ul>
</div>
<div class="hero-media-apple">
<div class="apple-main-image">
<img src="assets/hero.jpg" alt="Visite VR ImmersiHome">
</div>
<div class="apple-media-row">
<div class="apple-mini">
<img src="assets/casque.jpg" alt="Casque ImmersiHome">
<span>Casque ImmersiHome</span>
</div>
<div class="apple-video-wrapper" aria-hidden="false">
<video class="apple-video" muted playsinline preload="metadata" controls poster="assets/hero.jpg">
<source src="assets/demo.mp4" type="video/mp4">
Votre navigateur ne supporte pas la vidéo.
</video>
</div>
</div>
</div>
</div>
</section>
<!-- FEATURES -->
<section id="features" class="section">
<div class="container">
<h2>Fonctionnalités clés</h2>
<div class="grid-3">
<article class="feature"><h3>Scans 3D HD</h3><p>Modélisation fidèle des volumes et textures.</p></article>
<article class="feature"><h3>Navigation 360° & Mesures</h3><p>Déplacement libre, mesures instantanées.</p></article>
<article class="feature"><h3>Aménagement Virtuel</h3><p>Testez meubles et couleurs en quelques clics.</p></article>
</div>
</div>
</section>
<!-- OFFRE -->
<section id="offre" class="section dark">
<div class="container grid-2">
<div>
<h2>Une solution pensée pour le marché immobilier</h2>
<p class="lead">Pour agences, promoteurs et particuliers : réduisez les visites inutiles et augmentez le taux de conversion.</p>
<ul class="bullets">
<li><strong>Plug & Play</strong> : casque livré configuré + onboarding.</li>
<li><strong>Intégration</strong> : export facile vers SeLoger, LeBonCoin et sites d'agences.</li>
<li><strong>Analytics</strong> : suivi des visites & points dintérêt.</li>
</ul>
<a class="btn primary" href="#contact">Demander un devis</a>
</div>
<div class="card-advantages">
<h3>Cas d'usage</h3>
<ol>
<li>Showroom VR en vitrine pour attirer des prospects</li>
<li>Ventes sur plan immersives pour promoteurs</li>
<li>Tri rapide des biens pour les particuliers</li>
</ol>
</div>
</div>
</section>
<!-- PRICING -->
<section id="tarifs" class="section">
<div class="container">
<h2>Tarifs & offres</h2>
<p class="lead">Formules adaptées aux particuliers, pros et agences.</p>
<div class="pricing-grid">
<div class="price-card">
<h3>Découverte</h3>
<div class="price">19€/mois</div>
<p>Accès à la plateforme — 3 visites/mois</p>
<a class="btn outline" href="#contact">Commander</a>
</div>
<div class="price-card featured">
<h3>Pro</h3>
<div class="price">79€/mois</div>
<p>Accès illimité + casque en location — analytics</p>
<a class="btn primary" href="#contact">Commander</a>
</div>
<div class="price-card">
<h3>Agence</h3>
<div class="price">149€/mois</div>
<p>Pack 5 casques — interface multi-utilisateurs</p>
<a class="btn outline" href="#contact">Commander</a>
</div>
</div>
</div>
</section>
<!-- TESTIMONIALS -->
<section class="section light">
<div class="container">
<h2>Avis & témoignages</h2>
<div class="testimonials">
<blockquote>
« Grâce à ImmersiHome, nous avons divisé par 3 le nombre de visites inutiles. »
<cite>— Agence Dupont</cite>
</blockquote>
<blockquote>
« Vente sur plan accélérée : les clients comprennent mieux l'espace. »
<cite>— Promoteur Nova</cite>
</blockquote>
</div>
</div>
</section>
<!-- TEAM -->
<section id="team" class="section">
<div class="container">
<h2>Qui sommes-nous ?</h2>
<p class="lead">Équipe tech & immobilier — CV imprimables en HTML/PDF.</p>
<div class="team-grid">
<div class="member"><img src="assets/team/member1.jpg" alt=""><h4>Mathëo Salavin-Moura</h4><p>Co-fondateur — Produit</p><a class="cv-link" href="assets/team/member1_cv.pdf" target="_blank">Voir CV</a></div>
<div class="member"><img src="assets/team/member2.jpg" alt=""><h4>Jordan Aristil</h4><p>Co-fondateur — Business</p><a class="cv-link" href="assets/team/member2_cv.pdf" target="_blank">Voir CV</a></div>
<div class="member"><img src="assets/team/member3.jpg" alt=""><h4>Kelyan Pierre-Louis</h4><p>Co-fondateur — Tech</p><a class="cv-link" href="assets/team/member3_cv.pdf" target="_blank">Voir CV</a></div>
<div class="member"><img src="assets/team/member4.jpg" alt=""><h4>Evan Gilloppé</h4><p>Designer 3D & VR</p><a class="cv-link" href="assets/team/member4_cv.pdf" target="_blank">Voir CV</a></div>
</div>
</div>
</section>
<!-- FAQ & STORY -->
<section class="section dark">
<div class="container">
<h2>FAQ & Storytelling</h2>
<div class="faq">
<details><summary>Comment se passe le scan 3D ?</summary><p>Nous scannons le bien en 3060 minutes selon la surface et livrons la visite sous 48h.</p></details>
<details><summary>Le casque est-il fourni ?</summary><p>Oui pour les formules Pro et Agence — location possible autrement.</p></details>
</div>
<article class="story">
<h3>Notre mission</h3>
<p>Rendre les visites plus intelligentes, réduire les déplacements et améliorer la transparence.</p>
</article>
</div>
</section>
<!-- CONTACT -->
<section id="contact" class="section">
<div class="container grid-2">
<div>
<h2>Contact & Démo</h2>
<p class="lead">Remplissez le formulaire — réponse sous 48h.</p>
<form id="contactForm" class="contact-form" novalidate>
<div class="row">
<select id="civ" required>
<option value="">Civilité</option>
<option>M.</option>
<option>Mme</option>
</select>
<input id="name" type="text" placeholder="Nom complet" required>
</div>
<input id="email" type="email" placeholder="Email" required>
<input id="phone" type="tel" placeholder="Téléphone">
<select id="role">
<option>Particulier</option>
<option>Agence</option>
<option>Promoteur</option>
</select>
<textarea id="message" placeholder="Décrivez votre besoin" required></textarea>
<div class="form-actions">
<button type="submit" class="btn primary">Envoyer</button>
</div>
</form>
</div>
<aside>
<div class="contact-card">
<h3>Infos</h3>
<p>Tél : 06 12 34 56 78<br>Email : contact@immersihome.com</p>
<h4>Adresse</h4>
<p>Fontainebleau, France</p>
<h4>Mentions légales</h4>
<a href="#legal">Voir</a>
</div>
<div class="newsletter">
<h4>Newsletter</h4>
<p>Recevez nos nouveautés & offres.</p>
<form id="newsletterForm">
<input id="nl-email" type="email" placeholder="Votre email" required>
<button class="btn outline" type="submit">S'inscrire</button>
</form>
</div>
</aside>
</div>
</section>
</main>
<!-- FOOTER -->
<footer class="site-footer">
<div class="container footer-inner">
<div class="footer-left">
<img src="assets/logo.png" class="f-logo" alt="ImmersiHome logo">
<small>© 2025 ImmersiHome — SAE — Groupe 8</small>
</div>
<div class="footer-right">
<nav>
<a href="#home">Accueil</a> ·
<a href="#offre">Offre</a> ·
<a href="#contact">Contact</a>
</nav>
</div>
</div>
</footer>
<!-- TOP BUTTON -->
<button id="toTop" title="Haut de page"></button>
<!-- VIDEO MODAL -->
<div id="videoModal" class="modal" aria-hidden="true">
<div class="modal-backdrop" id="modalBackdrop"></div>
<div class="modal-content" role="dialog" aria-modal="true" aria-label="Démonstration ImmersiHome" tabindex="-1">
<button class="modal-close" id="modalClose" aria-label="Fermer la vidéo"></button>
<div class="modal-video-wrap">
<video id="modalVideo" controls playsinline>
<source src="assets/demo.mp4" type="video/mp4">
Votre navigateur ne supporte pas la vidéo.
</video>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>

102
script.js Normal file
View File

@@ -0,0 +1,102 @@
// ---------- MOBILE MENU TOGGLE ----------
const burger = document.getElementById('burger');
const nav = document.querySelector('.nav');
burger && burger.addEventListener('click', () => {
const opened = burger.getAttribute('aria-expanded') === 'true';
burger.setAttribute('aria-expanded', String(!opened));
nav.classList.toggle('open');
});
// ---------- SMOOTH SCROLL ----------
document.querySelectorAll('a[href^="#"], button[data-scroll]').forEach(el => {
el.addEventListener('click', function(e){
const selector = this.getAttribute('href') || this.dataset.scroll;
if(!selector) return;
const target = document.querySelector(selector);
if(target){
e.preventDefault();
target.scrollIntoView({behavior:'smooth', block:'start'});
}
});
});
// ---------- TO TOP BUTTON ----------
const toTop = document.getElementById('toTop');
window.addEventListener('scroll', () => {
toTop.style.display = window.scrollY > 400 ? 'block' : 'none';
});
toTop && toTop.addEventListener('click', () => window.scrollTo({top:0, behavior:'smooth'}));
// ---------- CONTACT FORM (SIMULATION) ----------
const contactForm = document.getElementById('contactForm');
contactForm && contactForm.addEventListener('submit', e => {
e.preventDefault();
alert('Merci — votre demande a été enregistrée (simulation). Nous vous contacterons sous 48h.');
contactForm.reset();
});
// ---------- MAILTO QUICK SEND ----------
const mailtoBtn = document.getElementById('mailtoBtn');
mailtoBtn && mailtoBtn.addEventListener('click', () => {
const name = encodeURIComponent(document.getElementById('name')?.value || '—');
const email = encodeURIComponent(document.getElementById('email')?.value || '—');
const phone = encodeURIComponent(document.getElementById('phone')?.value || '—');
const message = encodeURIComponent(document.getElementById('message')?.value || '—');
const subject = encodeURIComponent('Demande ImmersiHome — ' + name);
const body = encodeURIComponent(`Nom: ${name}\nEmail: ${email}\nTél: ${phone}\n\n${message}`);
window.location.href = `mailto:contact@immersihome.example?subject=${subject}&body=${body}`;
});
// ---------- NEWSLETTER SIMULATION ----------
const nl = document.getElementById('newsletterForm');
nl && nl.addEventListener('submit', (e) => {
e.preventDefault();
alert('Merci — vous êtes inscrit(e) à la newsletter (simulation).');
nl.reset();
});
// ---------- VIDEO MODAL ----------
const openVideoBtn = document.getElementById('openVideoBtn');
const videoModal = document.getElementById('videoModal');
const modalClose = document.getElementById('modalClose');
const modalBackdrop = document.getElementById('modalBackdrop');
const modalVideo = document.getElementById('modalVideo');
let lastFocusedBtn = null; // Pour restaurer le focus après fermeture
function openModal(){
if(!videoModal) return;
lastFocusedBtn = document.activeElement;
videoModal.classList.add('open');
videoModal.setAttribute('aria-hidden','false');
modalClose.focus(); // focus sur bouton close
if(modalVideo){ modalVideo.currentTime = 0; modalVideo.play(); }
}
function closeModal(){
if(!videoModal) return;
videoModal.classList.remove('open');
videoModal.setAttribute('aria-hidden','true');
if(modalVideo){ modalVideo.pause(); modalVideo.currentTime = 0; }
lastFocusedBtn && lastFocusedBtn.focus(); // restaurer focus
}
openVideoBtn && openVideoBtn.addEventListener('click', openModal);
modalClose && modalClose.addEventListener('click', closeModal);
modalBackdrop && modalBackdrop.addEventListener('click', closeModal);
// ---------- ACCESSIBILITY: CLOSE ESC ----------
document.addEventListener('keydown', (e) => {
if(e.key === 'Escape') closeModal();
});
// ---------- OPTIONAL: TRAP FOCUS INSIDE MODAL ----------
document.addEventListener('keydown', (e) => {
if(!videoModal.classList.contains('open')) return;
if(e.key === 'Tab'){
const focusable = videoModal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
const first = focusable[0];
const last = focusable[focusable.length -1];
if(e.shiftKey && document.activeElement === first){ e.preventDefault(); last.focus(); }
else if(!e.shiftKey && document.activeElement === last){ e.preventDefault(); first.focus(); }
}
});

200
style.css Normal file
View File

@@ -0,0 +1,200 @@
/* =========================
ImmersiHome — Apple style (optimisé)
========================= */
/* ----- Variables ----- */
:root{
--bg: #fbfdff;
--text: #0b1220;
--muted: #6b7280;
--accent: #0ea5e9;
--black: #0b1220;
--card: #ffffff;
--glass: rgba(255,255,255,0.6);
--shadow: 0 10px 30px rgba(2,6,23,0.06);
--dark-text: #e6f6ff;
--dark-bg: #0b1220;
}
/* ----- Reset & Base ----- */
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
font-family: 'Inter', system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
background: linear-gradient(180deg, var(--bg) 0%, #f3f7fb 100%);
color:var(--text);
line-height:1.5;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
}
.container{max-width:1180px;margin:0 auto;padding:28px}
a{color:inherit;text-decoration:none}
/* ----- HEADER ----- */
.site-header{
position:sticky;top:0;z-index:60;
backdrop-filter: blur(6px);
background: rgba(255,255,255,0.7);
border-bottom:1px solid rgba(15,23,36,0.04);
}
.header-inner{display:flex;align-items:center;gap:16px;justify-content:space-between;max-width:1180px;margin:0 auto;padding:14px 28px}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:46px;height:46px;object-fit:contain;border-radius:8px}
.brand-name{font-weight:700;font-size:18px;color:var(--text)}
.nav ul{list-style:none;display:flex;gap:18px;align-items:center}
.nav a{color:var(--text);padding:8px 10px;border-radius:8px;transition:0.2s}
.nav a:hover{background:#f1f5f9}
.header-actions{display:flex;align-items:center;gap:12px}
.btn-ghost{background:transparent;border:1px solid rgba(15,23,36,0.06);padding:8px 12px;border-radius:10px}
/* burger */
.burger{display:none;background:none;border:0;cursor:pointer}
.burger span{display:block;width:22px;height:2px;background:var(--text);margin:4px 0;transition:0.2s}
/* ----- HERO ----- */
.apple-hero{padding:110px 0 60px}
.hero-inner-apple{display:grid;grid-template-columns:1fr 540px;gap:64px;align-items:center}
.apple-title{font-size:48px;line-height:1.02;font-weight:800;color:var(--black);margin-bottom:18px}
.apple-title .accent{color:var(--accent)}
.apple-sub{font-size:18px;color:var(--muted);max-width:560px;margin-bottom:28px}
.hero-ctas-apple{display:flex;gap:14px}
/* ----- Buttons ----- */
.btn{
display:inline-flex;align-items:center;gap:10px;padding:12px 18px;border-radius:999px;font-weight:700;cursor:pointer;
transition: transform 0.2s, box-shadow 0.2s;
}
.btn.apple-primary, .btn.primary{background:var(--black);color:#fff;border:0}
.btn.apple-primary:hover, .btn.primary:hover{transform:translateY(-3px);box-shadow:0 10px 20px rgba(0,0,0,0.12);}
.btn.apple-secondary, .btn.outline{background:transparent;border:1px solid rgba(15,23,36,0.06);color:var(--black)}
.btn.apple-secondary:hover, .btn.outline:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,0.08);}
.trust{display:flex;gap:20px;color:var(--muted);margin-top:18px;list-style:none}
/* hero media */
.hero-media-apple{display:flex;flex-direction:column;gap:26px}
.apple-main-image img{width:100%;height:380px;object-fit:cover;border-radius:18px;box-shadow:0 30px 70px rgba(2,6,23,0.06)}
.apple-media-row{display:flex;gap:18px;align-items:center}
.apple-mini{display:flex;flex-direction:column;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.apple-mini img{width:76px;height:76px;object-fit:cover;border-radius:12px;box-shadow:0 12px 30px rgba(2,6,23,0.06)}
.apple-video-wrapper{flex:1}
.apple-video{width:100%;height:110px;border-radius:12px;object-fit:cover;box-shadow:0 18px 40px rgba(2,6,23,0.06)}
/* ----- SECTIONS ----- */
.section{padding:64px 0}
.section h2{font-size:28px;margin-bottom:12px}
.section .lead{color:var(--muted);margin-bottom:20px}
/* grid helpers */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:22px}
@media (max-width:980px){ .hero-inner-apple{grid-template-columns:1fr} .grid-3{grid-template-columns:repeat(2,1fr)} .grid-2{grid-template-columns:1fr} }
/* features */
.feature{background:var(--card);padding:20px;border-radius:12px;box-shadow:var(--shadow)}
.feature h3{margin-bottom:8px}
/* dark section */
.section.dark{background:linear-gradient(180deg,var(--dark-bg) 0%, #08101a 100%);color:var(--dark-text);border-radius:12px;padding:48px}
.section.dark .lead{color:rgba(255,255,255,0.8)}
/* FAQ & Story */
.section.dark details,
.section.dark details summary,
.section.dark details p,
.section.dark .story,
.section.dark .story h3,
.section.dark .story p {
color: var(--dark-text);
}
.section.dark details {
background: rgba(255,255,255,0.05);
padding:4px 8px;
border-radius:8px;
margin-bottom:10px;
}
.section.dark details summary {
cursor: pointer;
font-weight:600;
padding:8px 12px;
border-radius:8px;
}
.section.dark details p { padding:6px 12px 10px; }
/* pricing */
.pricing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:18px}
.price-card{background:linear-gradient(180deg,#fff,#fbfdff);padding:22px;border-radius:12px;box-shadow:0 10px 30px rgba(2,6,23,0.05);text-align:center;transition: transform 0.2s}
.price-card.featured{transform:scale(1.02);border:1px solid rgba(14,165,233,0.08)}
.price{font-size:28px;font-weight:800;margin:12px 0;color:var(--text)}
@media (max-width:980px){ .pricing-grid{grid-template-columns:1fr} }
/* testimonials */
.testimonials{
display:grid;
grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));
gap:24px;
margin-top:20px;
}
.testimonials blockquote{
background: rgba(14,165,233,0.05);
border-left: 4px solid var(--accent);
padding:20px;
border-radius:12px;
box-shadow:0 10px 30px rgba(2,6,23,0.06);
font-style: italic;
color:#0b1220;
}
.testimonials blockquote cite{
display:block;
margin-top:10px;
font-style: normal;
font-weight:600;
color: var(--muted);
}
/* team */
.team-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:12px}
.member{background:var(--card);padding:14px;border-radius:12px;text-align:center}
.member img{width:100%;height:200px;object-fit:cover;border-radius:8px;margin-bottom:10px}
.cv-link{display:inline-block;margin-top:8px;color:var(--accent)}
@media (max-width:980px){ .team-grid{grid-template-columns:repeat(2,1fr)} }
@media (max-width:600px){ .team-grid{grid-template-columns:1fr} }
/* contact */
.contact-form input, .contact-form textarea, .contact-form select{width:100%;padding:12px;border-radius:10px;border:1px solid #e6eef6;margin-bottom:10px}
.form-actions{display:flex;gap:10px}
.contact-card{background:var(--card);padding:14px;border-radius:12px;margin-bottom:14px}
.newsletter input{width:100%;padding:10px;border-radius:8px;border:1px solid #e6eef6;margin-top:8px}
/* footer */
.site-footer{background:#071026;padding:28px;color:#cfe7ff;margin-top:28px;border-radius:8px}
.footer-inner{display:flex;justify-content:space-between;align-items:center;gap:12px}
.f-logo{width:36px}
/* to top */
#toTop{position:fixed;right:18px;bottom:18px;background:var(--accent);color:#fff;border:0;padding:10px 12px;border-radius:10px;display:none;cursor:pointer;z-index:80}
/* modal (video) */
.modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;z-index:200}
.modal.open{display:flex}
.modal-backdrop{position:absolute;inset:0;background:rgba(3,6,23,0.6)}
.modal-content{position:relative;max-width:980px;width:94%;z-index:210;outline:none;}
.modal-video-wrap{background:transparent;padding:0;border-radius:12px}
.modal-content video{width:100%;height:auto;border-radius:12px;box-shadow:0 40px 120px rgba(2,6,23,0.6)}
.modal-close{position:absolute;right:-10px;top:-10px;background:#fff;border-radius:50%;border:0;padding:8px 10px;box-shadow:0 8px 20px rgba(0,0,0,0.1);cursor:pointer;}
/* focus */
.modal-close:focus,
.btn:focus,
.nav a:focus,
.burger:focus {outline:2px solid var(--accent);outline-offset:2px}
/* responsive */
@media (max-width:720px){
.nav{display:none}
.burger{display:block}
.apple-title{font-size:28px}
.apple-video{height:90px}
.apple-main-image img{height:220px}
.grid-3{grid-template-columns:1fr}
}