CEE Révolution Inc. | Équipements Forestiers Québec
:root {
–forest-dark: #1a1e1a;
–forest-green: #2d4a2d;
–forest-light: #3d5c3d;
–bark-brown: #3d2914;
–rust-orange: #d35400;
–safety-orange: #ff6b35;
–cream: #f5f1e8;
–steel: #4a5568;
–wood-light: #ddd0bb;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: ‘Barlow’, sans-serif;
background: var(–forest-dark);
color: var(–cream);
overflow-x: hidden;
}
/* Noise Texture Overlay */
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.9′ numOctaves=’4′ stitchTiles=’stitch’/%3E%3C/filter%3E%3Crect width=’100%25′ height=’100%25′ filter=’url(%23noiseFilter)’/%3E%3C/svg%3E »);
opacity: 0.03;
pointer-events: none;
z-index: 1000;
}
/* Navigation */
nav {
position: fixed;
top: 0;
width: 100%;
padding: 1rem 3rem;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 100;
background: linear-gradient(180deg, rgba(26,30,26,0.95) 0%, rgba(26,30,26,0) 100%);
transition: all 0.4s ease;
}
nav.scrolled {
background: rgba(26,30,26,0.98);
box-shadow: 0 4px 30px rgba(0,0,0,0.4);
}
.logo {
height: 60px;
filter: brightness(1.1);
transition: transform 0.3s ease;
}
.logo:hover {
transform: scale(1.05);
}
.nav-links {
display: flex;
gap: 2.5rem;
list-style: none;
}
.nav-links a {
color: var(–cream);
text-decoration: none;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 600;
font-size: 1.1rem;
letter-spacing: 0.5px;
text-transform: uppercase;
position: relative;
transition: color 0.3s ease;
}
.nav-links a::after {
content: »;
position: absolute;
bottom: -5px;
left: 0;
width: 0;
height: 2px;
background: var(–safety-orange);
transition: width 0.3s ease;
}
.nav-links a:hover {
color: var(–safety-orange);
}
.nav-links a:hover::after {
width: 100%;
}
/* Hero Section */
.hero {
height: 100vh;
position: relative;
display: flex;
align-items: center;
overflow: hidden;
}
.hero-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
linear-gradient(135deg, rgba(26,30,26,0.9) 0%, rgba(45,74,45,0.7) 50%, rgba(26,30,26,0.85) 100%),
url(‘
https://www.ceerevolution.ca/wp-content/uploads/2025/01/banner_home-scaled.jpg’);
background-size: cover;
background-position: center;
filter: saturate(0.8);
}
.hero-content {
position: relative;
z-index: 2;
padding: 0 8%;
max-width: 900px;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
background: var(–rust-orange);
color: var(–cream);
padding: 0.5rem 1.2rem;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 700;
font-size: 0.85rem;
letter-spacing: 2px;
text-transform: uppercase;
margin-bottom: 1.5rem;
animation: slideInLeft 0.8s ease forwards;
opacity: 0;
}
.hero h1 {
font-family: ‘Bebas Neue’, sans-serif;
font-size: clamp(4rem, 10vw, 8rem);
line-height: 0.95;
letter-spacing: -2px;
margin-bottom: 1.5rem;
animation: slideUp 0.8s ease 0.2s forwards;
opacity: 0;
}
.hero h1 span {
display: block;
color: var(–safety-orange);
}
.hero-subtitle {
font-size: 1.4rem;
font-weight: 400;
color: rgba(245,241,232,0.85);
max-width: 550px;
line-height: 1.6;
margin-bottom: 2.5rem;
animation: slideUp 0.8s ease 0.4s forwards;
opacity: 0;
}
.hero-cta {
display: flex;
gap: 1.5rem;
animation: slideUp 0.8s ease 0.6s forwards;
opacity: 0;
}
.btn-primary {
display: inline-flex;
align-items: center;
gap: 0.8rem;
background: var(–safety-orange);
color: var(–forest-dark);
padding: 1rem 2rem;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 700;
font-size: 1.1rem;
letter-spacing: 1px;
text-transform: uppercase;
text-decoration: none;
border: none;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.btn-primary::before {
content: »;
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
transition: left 0.5s ease;
}
.btn-primary:hover {
background: #ff8c5a;
transform: translateY(-3px);
box-shadow: 0 10px 30px rgba(255,107,53,0.4);
}
.btn-primary:hover::before {
left: 100%;
}
.btn-secondary {
display: inline-flex;
align-items: center;
gap: 0.8rem;
background: transparent;
color: var(–cream);
padding: 1rem 2rem;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 700;
font-size: 1.1rem;
letter-spacing: 1px;
text-transform: uppercase;
text-decoration: none;
border: 2px solid var(–cream);
cursor: pointer;
transition: all 0.3s ease;
}
.btn-secondary:hover {
background: var(–cream);
color: var(–forest-dark);
}
/* Scroll Indicator */
.scroll-indicator {
position: absolute;
bottom: 3rem;
left: 50%;
transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
animation: bounce 2s infinite;
}
.scroll-indicator span {
font-size: 0.7rem;
letter-spacing: 2px;
text-transform: uppercase;
opacity: 0.6;
}
.scroll-indicator svg {
width: 24px;
height: 24px;
stroke: var(–cream);
opacity: 0.6;
}
/* Stats Bar */
.stats-bar {
background: var(–bark-brown);
padding: 3rem 8%;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
position: relative;
}
.stats-bar::before {
content: »;
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, var(–safety-orange), var(–rust-orange), var(–safety-orange));
}
.stat-item {
text-align: center;
}
.stat-number {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 3.5rem;
color: var(–safety-orange);
line-height: 1;
}
.stat-label {
font-family: ‘Barlow Condensed’, sans-serif;
font-size: 1rem;
letter-spacing: 1px;
text-transform: uppercase;
opacity: 0.8;
margin-top: 0.5rem;
}
/* Section Titles */
.section-title {
font-family: ‘Bebas Neue’, sans-serif;
font-size: clamp(3rem, 6vw, 5rem);
line-height: 1;
margin-bottom: 1rem;
}
.section-title span {
color: var(–safety-orange);
}
.section-subtitle {
font-size: 1.1rem;
opacity: 0.7;
max-width: 600px;
}
/* Products Section */
.products {
padding: 8rem 8%;
background: linear-gradient(180deg, var(–forest-dark) 0%, var(–forest-green) 50%, var(–forest-dark) 100%);
}
.products-header {
text-align: center;
margin-bottom: 5rem;
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2.5rem;
}
.product-card {
background: rgba(0,0,0,0.3);
border: 1px solid rgba(255,255,255,0.1);
overflow: hidden;
transition: all 0.4s ease;
position: relative;
}
.product-card::before {
content: »;
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 0;
background: var(–safety-orange);
transition: height 0.4s ease;
}
.product-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 60px rgba(0,0,0,0.5);
border-color: var(–safety-orange);
}
.product-card:hover::before {
height: 100%;
}
.product-image {
height: 280px;
overflow: hidden;
position: relative;
}
.product-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.6s ease;
}
.product-card:hover .product-image img {
transform: scale(1.1);
}
.product-badge {
position: absolute;
top: 1rem;
right: 1rem;
background: var(–safety-orange);
color: var(–forest-dark);
padding: 0.4rem 1rem;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 700;
font-size: 0.8rem;
letter-spacing: 1px;
text-transform: uppercase;
}
.product-content {
padding: 2rem;
}
.product-name {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 2rem;
margin-bottom: 0.5rem;
}
.product-desc {
font-size: 0.95rem;
opacity: 0.75;
line-height: 1.6;
margin-bottom: 1.5rem;
}
.product-specs {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1.5rem;
}
.spec-tag {
background: rgba(255,255,255,0.1);
padding: 0.3rem 0.8rem;
font-size: 0.75rem;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.product-footer {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 1.5rem;
border-top: 1px solid rgba(255,255,255,0.1);
}
.product-price {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 2.2rem;
color: var(–safety-orange);
}
.product-price small {
font-family: ‘Barlow’, sans-serif;
font-size: 0.8rem;
opacity: 0.6;
display: block;
}
/* Featured Product – La Forestière */
.featured {
padding: 8rem 8%;
background: var(–forest-dark);
position: relative;
overflow: hidden;
}
.featured::before {
content: ‘LA FORESTIÈRE’;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-family: ‘Bebas Neue’, sans-serif;
font-size: 20vw;
color: rgba(255,255,255,0.02);
white-space: nowrap;
pointer-events: none;
}
.featured-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5rem;
align-items: center;
}
.featured-image {
position: relative;
}
.featured-image img {
width: 100%;
border: 4px solid var(–bark-brown);
box-shadow: 20px 20px 0 var(–safety-orange);
}
.featured-image::before {
content: »;
position: absolute;
top: -20px;
left: -20px;
right: 40px;
bottom: 40px;
border: 2px solid var(–forest-light);
z-index: -1;
}
.featured-content {
position: relative;
z-index: 2;
}
.featured-label {
display: inline-block;
background: var(–safety-orange);
color: var(–forest-dark);
padding: 0.5rem 1.2rem;
font-family: ‘Barlow Condensed’, sans-serif;
font-weight: 700;
font-size: 0.85rem;
letter-spacing: 2px;
text-transform: uppercase;
margin-bottom: 1.5rem;
}
.featured h2 {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 4rem;
line-height: 1;
margin-bottom: 1.5rem;
}
.featured h2 span {
color: var(–safety-orange);
}
.featured-desc {
font-size: 1.15rem;
line-height: 1.8;
opacity: 0.85;
margin-bottom: 2rem;
}
.feature-list {
list-style: none;
margin-bottom: 2.5rem;
}
.feature-list li {
display: flex;
align-items: center;
gap: 1rem;
padding: 0.8rem 0;
border-bottom: 1px solid rgba(255,255,255,0.1);
font-size: 1.05rem;
}
.feature-list li svg {
width: 24px;
height: 24px;
stroke: var(–safety-orange);
flex-shrink: 0;
}
.price-box {
background: rgba(0,0,0,0.3);
padding: 2rem;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
.price-box .label {
font-size: 0.9rem;
opacity: 0.6;
text-transform: uppercase;
letter-spacing: 1px;
}
.price-box .price {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 3rem;
color: var(–safety-orange);
}
.price-box .financing {
text-align: right;
}
.price-box .financing span {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 1.8rem;
color: var(–cream);
}
/* Testimonials */
.testimonials {
padding: 8rem 8%;
background: linear-gradient(135deg, var(–bark-brown) 0%, var(–forest-dark) 100%);
}
.testimonials-header {
text-align: center;
margin-bottom: 5rem;
}
.testimonial-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 2rem;
}
.testimonial-card {
background: rgba(0,0,0,0.3);
padding: 2.5rem;
border-left: 4px solid var(–safety-orange);
position: relative;
}
.testimonial-card::before {
content: ‘ »‘;
position: absolute;
top: 1rem;
right: 2rem;
font-family: ‘Bebas Neue’, sans-serif;
font-size: 8rem;
color: var(–safety-orange);
opacity: 0.15;
line-height: 1;
}
.testimonial-text {
font-size: 1.1rem;
line-height: 1.8;
font-style: italic;
margin-bottom: 2rem;
position: relative;
z-index: 2;
}
.testimonial-author {
display: flex;
align-items: center;
gap: 1rem;
}
.testimonial-author img {
width: 60px;
height: 60px;
border-radius: 50%;
object-fit: cover;
border: 3px solid var(–safety-orange);
}
.author-info h4 {
font-family: ‘Barlow Condensed’, sans-serif;
font-size: 1.2rem;
font-weight: 700;
letter-spacing: 0.5px;
}
.author-info span {
font-size: 0.85rem;
opacity: 0.6;
}
.stars {
display: flex;
gap: 0.25rem;
margin-top: 0.5rem;
}
.stars svg {
width: 16px;
height: 16px;
fill: var(–safety-orange);
}
/* About / Team */
.about {
padding: 8rem 8%;
background: var(–forest-dark);
}
.about-grid {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 5rem;
align-items: center;
}
.about-content .section-title {
margin-bottom: 2rem;
}
.about-text {
font-size: 1.1rem;
line-height: 1.9;
opacity: 0.85;
margin-bottom: 2rem;
}
.values-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
margin-top: 3rem;
}
.value-item {
background: rgba(255,255,255,0.05);
padding: 1.5rem;
border-left: 3px solid var(–safety-orange);
}
.value-item h4 {
font-family: ‘Barlow Condensed’, sans-serif;
font-size: 1.2rem;
font-weight: 700;
letter-spacing: 0.5px;
margin-bottom: 0.5rem;
color: var(–safety-orange);
}
.value-item p {
font-size: 0.9rem;
opacity: 0.7;
line-height: 1.5;
}
.team-image {
position: relative;
}
.team-image img {
width: 100%;
filter: grayscale(20%);
}
.team-image::before {
content: »;
position: absolute;
bottom: -20px;
right: -20px;
width: 80%;
height: 80%;
background: var(–safety-orange);
z-index: -1;
}
.team-badge {
position: absolute;
bottom: 2rem;
left: 2rem;
background: var(–forest-dark);
padding: 1.5rem 2rem;
}
.team-badge h4 {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 1.5rem;
}
.team-badge span {
font-size: 0.85rem;
opacity: 0.7;
}
/* Distributors */
.distributors {
padding: 8rem 8%;
background: linear-gradient(180deg, var(–forest-green) 0%, var(–forest-dark) 100%);
}
.distributors-header {
text-align: center;
margin-bottom: 5rem;
}
.distributor-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.distributor-card {
background: rgba(0,0,0,0.4);
padding: 2rem;
border: 1px solid rgba(255,255,255,0.1);
transition: all 0.3s ease;
text-align: center;
}
.distributor-card:hover {
border-color: var(–safety-orange);
transform: translateY(-5px);
}
.distributor-card h4 {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 1.6rem;
margin-bottom: 0.5rem;
}
.distributor-card .location {
color: var(–safety-orange);
font-weight: 600;
margin-bottom: 1rem;
}
.distributor-card .products-list {
font-size: 0.85rem;
opacity: 0.7;
margin-bottom: 1.5rem;
}
.distributor-card .contact-info {
font-size: 0.9rem;
}
.distributor-card .contact-info a {
color: var(–cream);
text-decoration: none;
display: block;
padding: 0.3rem 0;
transition: color 0.3s ease;
}
.distributor-card .contact-info a:hover {
color: var(–safety-orange);
}
/* CTA Section */
.cta-section {
padding: 8rem 8%;
background:
linear-gradient(135deg, rgba(26,30,26,0.95) 0%, rgba(61,44,20,0.9) 100%),
url(‘
https://www.ceerevolution.ca/wp-content/uploads/2025/03/FORESTIERE-AU-TRAVAIL-2-scaled.jpg’);
background-size: cover;
background-position: center;
background-attachment: fixed;
text-align: center;
}
.cta-section h2 {
font-family: ‘Bebas Neue’, sans-serif;
font-size: clamp(3rem, 7vw, 5rem);
margin-bottom: 1.5rem;
}
.cta-section h2 span {
color: var(–safety-orange);
}
.cta-section p {
font-size: 1.2rem;
opacity: 0.8;
max-width: 600px;
margin: 0 auto 2.5rem;
}
.cta-buttons {
display: flex;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
}
/* Footer */
footer {
background: #0d0f0d;
padding: 5rem 8% 2rem;
}
.footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 4rem;
margin-bottom: 4rem;
}
.footer-brand img {
height: 70px;
margin-bottom: 1.5rem;
}
.footer-brand p {
font-size: 0.95rem;
opacity: 0.7;
line-height: 1.7;
margin-bottom: 1.5rem;
}
.social-links {
display: flex;
gap: 1rem;
}
.social-links a {
width: 45px;
height: 45px;
background: rgba(255,255,255,0.1);
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.social-links a:hover {
background: var(–safety-orange);
}
.social-links svg {
width: 22px;
height: 22px;
fill: var(–cream);
}
.footer-col h4 {
font-family: ‘Barlow Condensed’, sans-serif;
font-size: 1.1rem;
font-weight: 700;
letter-spacing: 1px;
text-transform: uppercase;
margin-bottom: 1.5rem;
color: var(–safety-orange);
}
.footer-col ul {
list-style: none;
}
.footer-col ul li {
margin-bottom: 0.8rem;
}
.footer-col ul a {
color: var(–cream);
opacity: 0.7;
text-decoration: none;
font-size: 0.95rem;
transition: all 0.3s ease;
}
.footer-col ul a:hover {
opacity: 1;
color: var(–safety-orange);
}
.footer-bottom {
padding-top: 2rem;
border-top: 1px solid rgba(255,255,255,0.1);
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
opacity: 0.6;
}
/* Animations */
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(40px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {
transform: translateX(-50%) translateY(0);
}
40% {
transform: translateX(-50%) translateY(-10px);
}
60% {
transform: translateX(-50%) translateY(-5px);
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-on-scroll {
opacity: 0;
transform: translateY(30px);
transition: all 0.8s ease;
}
.animate-on-scroll.visible {
opacity: 1;
transform: translateY(0);
}
/* Responsive */
@media (max-width: 1024px) {
.featured-grid,
.about-grid {
grid-template-columns: 1fr;
}
.footer-grid {
grid-template-columns: repeat(2, 1fr);
}
.stats-bar {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
nav {
padding: 1rem 1.5rem;
}
.nav-links {
display: none;
}
.hero-content {
padding: 0 5%;
}
.hero-cta {
flex-direction: column;
}
.product-grid,
.testimonial-grid,
.distributor-grid {
grid-template-columns: 1fr;
}
.footer-grid {
grid-template-columns: 1fr;
text-align: center;
}
.social-links {
justify-content: center;
}
.footer-bottom {
flex-direction: column;
gap: 1rem;
text-align: center;
}
}
Fabriqué en Beauce, Québec
ÉQUIPEMENTS
FORESTIERS
Débusqueuse, treuil, poulie et fendeuse. Des équipements robustes et performants conçus pour simplifier vos travaux en forêt.
Défiler
Produit vedette
LA FORESTIÈRE
Votre partenaire essentiel pour tous vos travaux en forêt. Que ce soit pour le transport de bois, le débusquage de troncs ou la production de bois de chauffage, La Forestière répond à toutes vos attentes avec sa conception modulaire et évolutive.
-
Système anti-recul «brake-grappin» pour stabilité maximale
-
Treuil puissant de 4500 lbs avec 125 pieds de câble
-
Pompe hydraulique 2 stages (treuil + fendeuse simultanés)
-
Compatible VTT, quad, côte à côte et tracteur
-
Option moteur Honda disponible
Financement disponible
dès 16$/sem
Voir tous les modèles
NOTRE ÉQUIPE
Fondée en 2024 par René Drouin et Sylvain Quirion, CEE RÉVOLUTION se spécialise dans le développement d’équipements polyvalents et modulaires adaptés aux besoins et aux budgets de chaque client.
Nous concevons tous nos équipements en interne, assurant ainsi une qualité optimale et une attention particulière à chaque détail. Nos produits sont fabriqués avec soin en Beauce, dans le respect des normes les plus strictes.
Qualité
Équipements durables et haute performance conçus pour durer
Innovation
Conception modulaire et évolutive selon vos besoins
Service
Équipe disponible pour vous accompagner à chaque étape
Local
Fièrement fabriqué au Québec, en Beauce
// Navbar scroll effect
const navbar = document.getElementById(‘navbar’);
window.addEventListener(‘scroll’, () => {
if (window.scrollY > 50) {
navbar.classList.add(‘scrolled’);
} else {
navbar.classList.remove(‘scrolled’);
}
});
// Scroll animation
const animateElements = document.querySelectorAll(‘.animate-on-scroll’);
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add(‘visible’);
}
});
}, {
threshold: 0.1,
rootMargin: ‘0px 0px -50px 0px’
});
animateElements.forEach(el => observer.observe(el));
// Smooth scroll for anchor links
document.querySelectorAll(‘a[href^= »# »]’).forEach(anchor => {
anchor.addEventListener(‘click’, function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute(‘href’));
if (target) {
target.scrollIntoView({
behavior: ‘smooth’,
block: ‘start’
});
}
});
});
// Counter animation for stats
const stats = document.querySelectorAll(‘.stat-number’);
const statsObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const target = entry.target;
const finalValue = parseInt(target.textContent);
let currentValue = 0;
const increment = finalValue / 50;
const timer = setInterval(() => {
currentValue += increment;
if (currentValue >= finalValue) {
target.textContent = finalValue.toLocaleString();
clearInterval(timer);
} else {
target.textContent = Math.floor(currentValue).toLocaleString();
}
}, 30);
statsObserver.unobserve(target);
}
});
}, { threshold: 0.5 });
stats.forEach(stat => statsObserver.observe(stat));