tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: [‘Inter’, ‘sans-serif’],
display: [‘Space Grotesk’, ‘sans-serif’],
serif: [‘Newsreader’, ‘serif’],
},
colors: {
brand: {
black: ‘#0f172a’,
dark: ‘#1e293b’,
gray: ‘#334155’,
light: ‘#f8fafc’,
paper: ‘#ffffff’,
gold: ‘#d97706’,
teal: ‘#0e7490’,
tealDark: ‘#155e75′,
}
}
}
}
}
body::before {
content: « »;
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background-image: url(« data:image/svg+xml,%3Csvg viewBox=’0 0 200 200′ xmlns=’http://www.w3.org/2000/svg’%3E%3Cfilter id=’noiseFilter’%3E%3CfeTurbulence type=’fractalNoise’ baseFrequency=’0.8′ numOctaves=’3′ stitchTiles=’stitch’/%3E%3C/filter%3E%3Crect width=’100%25′ height=’100%25′ filter=’url(%23noiseFilter)’ opacity=’0.04’/%3E%3C/svg%3E »);
pointer-events: none; z-index: 50; mix-blend-mode: multiply;
}
#progress-bar {
position: fixed; top: 0; left: 0; height: 3px; background: #d97706; z-index: 100; width: 0%;
transition: width 0.1s ease-out;
}
.reveal {
opacity: 0; transform: translateY(30px);
transition: opacity 0.8s cubic-bezier(0.2, 0.8, 0.2, 1), transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1);
}
.reveal.active { opacity: 1; transform: translateY(0); }
Laine de verre, polystyrène ou biosourcés. Découvrez comment choisir le bon panneau pour votre isolation intérieure ou de combles.
Si la mousse projetée est reine pour les sols, le panneau reste une solution de choix pour les murs (ITI) et les combles aménagés. Sa polyvalence permet de répondre à des budgets variés tout en assurant une excellente isolation thermique et acoustique.
Les laines minérales et biosourcées offrent une absorption sonore supérieure, idéale pour les chambres et les zones bruyantes.
Une solution éprouvée qui permet de moduler l’investissement selon l’épaisseur et le type de matériau choisi.
Ne choisissez pas votre isolant au hasard. Gary analyse votre bâti (humidité, support, espace disponible) pour recommander le bon système.
window.addEventListener(‘scroll’, () => {
const winScroll = document.body.scrollTop || document.documentElement.scrollTop;
const height = document.documentElement.scrollHeight – document.documentElement.clientHeight;
const scrolled = (winScroll / height) * 100;
document.getElementById(« progress-bar »).style.width = scrolled + « % »;
});
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) entry.target.classList.add(‘active’);
});
}, { threshold: 0.1 });
document.querySelectorAll(‘.reveal’).forEach((el) => observer.observe(el));