Files
padel-website/innerbloom.html
T
Nova Coder f00e7a20ed Initial commit: website + innerbloom demo v24/05/2026
- Padel Planner SPA
- Innerbloom demo page
2026-05-24 20:39:43 +00:00

710 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Innerbloom — RÜFÜS DU SOL</title>
<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=Inter:wght@200;300;400;500;700&display=swap" rel="stylesheet">
<style>
/* ─── RESET ─── */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:#1A1F2C transparent}
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:#0B0E14;color:#e2e2e6;overflow-x:hidden;
-webkit-font-smoothing:antialiased}
/* ─── TOKENS ─── */
:root{
--bg:#0B0E14;
--surface:#11151F;
--surface-light:#1A1F2C;
--border:#1F2540;
--accent-from:#9B51E0;
--accent-to:#00F2FE;
--text:#f1f1f5;
--text-dim:#6B7185;
--text-muted:#464B5C;
--glow-violet:rgba(155,81,224,0.3);
--glow-cyan:rgba(0,242,254,0.2);
--transition-slow:all 0.8s cubic-bezier(0.22,1,0.36,1);
}
/* ─── SCROLL ANIMATIONS ─── */
.reveal{
opacity:0;
filter:blur(8px);
transform:translateY(30px);
transition:opacity 1s ease-out,transform 1s ease-out,filter 1.2s ease-out;
}
.reveal.visible{
opacity:1;
filter:blur(0);
transform:translateY(0);
}
.reveal-delay-1{transition-delay:0.15s}
.reveal-delay-2{transition-delay:0.3s}
.reveal-delay-3{transition-delay:0.5s}
.reveal-delay-4{transition-delay:0.7s}
/* ─── GRID BACKGROUND ─── */
.grid-bg{
position:fixed;inset:0;z-index:0;pointer-events:none;
background:
linear-gradient(to right,rgba(100,116,139,0.06) 1px,transparent 1px),
linear-gradient(to bottom,rgba(100,116,139,0.06) 1px,transparent 1px);
background-size:60px 60px;
}
/* ─── ORB GLOW ─── */
.orb{
position:fixed;border-radius:50%;pointer-events:none;z-index:0;
filter:blur(80px);
transition:transform 1.5s ease-out,opacity 2s ease-out;
}
.orb-violet{
width:500px;height:500px;
background:radial-gradient(circle,var(--glow-violet),transparent 70%);
top:-10%;left:-5%;
animation:orbPulse 8s ease-in-out infinite;
}
.orb-cyan{
width:400px;height:400px;
background:radial-gradient(circle,var(--glow-cyan),transparent 70%);
bottom:-8%;right:-8%;
animation:orbPulse 10s ease-in-out infinite 2s;
}
@keyframes orbPulse{
0%,100%{opacity:0.5;transform:scale(1) translate(0,0)}
50%{opacity:0.8;transform:scale(1.1) translate(20px,-20px)}
}
/* ─── HERO ─── */
.hero{
position:relative;z-index:1;min-height:100vh;
display:flex;flex-direction:column;justify-content:center;align-items:center;
text-align:center;padding:40px 24px 60px;
}
.hero-label{
display:inline-flex;align-items:center;gap:8px;
background:rgba(155,81,224,0.1);border:1px solid rgba(155,81,224,0.25);
border-radius:100px;padding:6px 16px 6px 12px;margin-bottom:32px;
font-size:12px;font-weight:400;letter-spacing:1px;
color:var(--accent-from);text-transform:uppercase;
}
.hero-label-dot{
width:6px;height:6px;border-radius:50%;
background:linear-gradient(135deg,var(--accent-from),var(--accent-to));
animation:dotPulse 2s ease-in-out infinite;
}
@keyframes dotPulse{0%,100%{opacity:1}50%{opacity:0.3}}
.hero-title{
font-size:clamp(3rem,10vw,8rem);font-weight:200;letter-spacing:-1.5px;
line-height:0.95;margin-bottom:8px;
background:linear-gradient(135deg,#f1f1f5 0%,#6B7185 50%,#f1f1f5 100%);
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
background-clip:text;
}
.hero-title span{
background:linear-gradient(135deg,var(--accent-from),var(--accent-to));
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
background-clip:text;
}
.hero-sub{
font-size:clamp(0.9rem,2vw,1.25rem);font-weight:300;color:var(--text-dim);
max-width:480px;margin:16px auto 40px;line-height:1.7;letter-spacing:0.3px;
}
.hero-bpm{
font-size:13px;font-weight:400;color:var(--text-muted);letter-spacing:3px;
text-transform:uppercase;margin-bottom:48px;
}
.hero-bpm span{color:var(--accent-to);}
/* ─── TIMELINE ─── */
.timeline-section{
position:relative;z-index:1;max-width:800px;margin:0 auto;padding:60px 24px 120px;
}
.timeline-label{
font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;
color:var(--text-muted);margin-bottom:40px;text-align:center;
}
.timeline{
display:flex;flex-direction:column;gap:16px;
}
.timeline-item{
display:grid;grid-template-columns:80px 1fr;gap:24px;
padding:20px 24px;
background:rgba(26,31,44,0.5);
border:1px solid var(--border);
border-radius:12px;
transition:var(--transition-slow);
cursor:default;
}
.timeline-item:hover{
border-color:rgba(155,81,224,0.3);
background:rgba(26,31,44,0.7);
transform:translateX(4px);
}
.timeline-time{
font-size:13px;font-weight:300;color:var(--text-dim);padding-top:2px;
font-variant-numeric:tabular-nums;
}
.timeline-time span{
display:block;font-size:10px;color:var(--text-muted);margin-top:2px;
}
.timeline-visual{
display:flex;flex-direction:column;gap:6px;
}
.timeline-bar{
height:3px;border-radius:3px;
background:linear-gradient(90deg,var(--accent-from),var(--accent-to));
transition:var(--transition-slow);
opacity:0.3;
}
.timeline-item:hover .timeline-bar{opacity:0.7;}
.timeline-bar-1{width:20%}
.timeline-bar-2{width:35%}
.timeline-bar-3{width:55%}
.timeline-bar-4{width:75%}
.timeline-bar-5{width:90%}
.timeline-bar-6{width:100%}
.timeline-desc{
font-size:14px;font-weight:300;color:var(--text-dim);line-height:1.6;
margin-top:4px;
}
.timeline-desc strong{color:var(--text);font-weight:400;}
/* ─── LISTEN SECTION ─── */
.listen-section{
position:relative;z-index:1;max-width:800px;margin:0 auto;
padding:80px 24px 120px;text-align:center;
}
.listen-title{
font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;
color:var(--text-muted);margin-bottom:32px;
}
.listen-grid{
display:flex;justify-content:center;gap:16px;flex-wrap:wrap;
}
.listen-btn{
display:inline-flex;align-items:center;gap:10px;
padding:14px 28px;border-radius:10px;
background:rgba(26,31,44,0.6);border:1px solid var(--border);
color:var(--text-dim);font-size:14px;font-weight:400;
text-decoration:none;transition:var(--transition-slow);
}
.listen-btn:hover{
background:rgba(26,31,44,0.9);
border-color:rgba(155,81,224,0.4);
color:var(--text);
transform:translateY(-2px);
}
.listen-btn svg{width:24px;height:24px;flex-shrink:0;}
/* ─── VISUALIZER ─── */
.visualizer{
position:relative;z-index:1;max-width:600px;margin:80px auto 0;
padding:0 24px;
}
.visualizer-bars{
display:flex;justify-content:center;align-items:flex-end;gap:4px;height:80px;
}
.visualizer-bar{
width:6px;border-radius:3px;background:var(--surface-light);
animation:barAnim 1.4s ease-in-out infinite;
}
.visualizer-bar:nth-child(1){height:20%;animation-delay:0s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(2){height:40%;animation-delay:0.1s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(3){height:60%;animation-delay:0.2s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(4){height:80%;animation-delay:0.3s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(5){height:100%;animation-delay:0.4s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(6){height:80%;animation-delay:0.5s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(7){height:60%;animation-delay:0.6s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(8){height:40%;animation-delay:0.7s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
.visualizer-bar:nth-child(9){height:20%;animation-delay:0.8s;background:linear-gradient(to top,var(--accent-from),var(--accent-to))}
@keyframes barAnim{
0%,100%{opacity:0.3;height:20%}
25%{opacity:0.6;height:60%}
50%{opacity:1;height:100%}
75%{opacity:0.6;height:60%}
}
.listen-count{
font-size:13px;color:var(--text-muted);margin-top:32px;letter-spacing:0.5px;
}
.listen-count span{color:var(--accent-to);}
/* ─── FOOTER ─── */
.footer{
position:relative;z-index:1;max-width:800px;margin:0 auto;
padding:60px 24px 40px;text-align:center;
border-top:1px solid var(--border);
}
.footer-text{
font-size:12px;color:var(--text-muted);letter-spacing:1px;
}
.footer-text a{
color:var(--accent-to);text-decoration:none;
transition:opacity 0.3s;
}
.footer-text a:hover{opacity:0.7}
/* ─── RESPONSIVE ─── */
@media(max-width:600px){
.timeline-item{grid-template-columns:1fr;gap:8px;padding:16px 18px}
.timeline-time{font-size:12px}
.timeline-desc{font-size:13px}
.listen-btn{width:100%;justify-content:center}
}
/* ─── SECTION 2: CORE CONTENT ─── */
.content-section{
position:relative;z-index:1;max-width:900px;margin:0 auto;
padding:80px 24px 100px;
}
.content-grid{
display:grid;grid-template-columns:1fr 1fr;gap:24px;
}
@media(max-width:600px){.content-grid{grid-template-columns:1fr}}
.content-card{
background:rgba(26,31,44,0.4);border:1px solid var(--border);
border-radius:14px;padding:32px;
transition:var(--transition-slow);
}
.content-card:hover{
border-color:rgba(155,81,224,0.25);
transform:translateY(-2px);
background:rgba(26,31,44,0.6);
}
.content-number{
font-size:11px;font-weight:500;letter-spacing:2px;color:var(--text-muted);
margin-bottom:12px;
}
.content-heading{
font-size:20px;font-weight:300;letter-spacing:-0.3px;margin-bottom:12px;
color:var(--text);
}
.content-text{
font-size:14px;font-weight:300;color:var(--text-dim);line-height:1.8;
}
/* ─── SECTION 3: OMSLAGPUNT ─── */
.turn-section{
position:relative;z-index:1;max-width:800px;margin:0 auto;
padding:120px 24px;text-align:center;
overflow:hidden;
}
.turn-section::before{
content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);
width:600px;height:600px;
background:radial-gradient(circle,rgba(155,81,224,0.08),transparent 70%);
pointer-events:none;
}
.turn-inner{position:relative;z-index:1}
.turn-label{
font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;
color:var(--accent-from);margin-bottom:20px;
display:inline-block;
background:rgba(155,81,224,0.1);border:1px solid rgba(155,81,224,0.2);
padding:6px 14px;border-radius:100px;
}
.turn-title{
font-size:clamp(2.2rem,6vw,4rem);font-weight:200;letter-spacing:-1px;
line-height:1.05;margin-bottom:20px;
}
.turn-title span{
background:linear-gradient(135deg,var(--accent-from),var(--accent-to));
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
background-clip:text;
}
.turn-text{
font-size:15px;font-weight:300;color:var(--text-dim);
max-width:500px;margin:0 auto;line-height:1.8;
}
/* ─── SCROLL INDICATOR ─── */
.scroll-indicator{
display:flex;flex-direction:column;align-items:center;gap:8px;
margin-top:20px;margin-bottom:0;
}
.scroll-dot{
width:4px;height:4px;border-radius:50%;
background:linear-gradient(135deg,var(--accent-from),var(--accent-to));
animation:scrollDotAnim 2s ease-in-out infinite;
}
@keyframes scrollDotAnim{
0%{opacity:1;transform:translateY(0)}
50%{opacity:0.3;transform:translateY(8px)}
100%{opacity:1;transform:translateY(0)}
}
.scroll-line{
width:1px;height:30px;
background:linear-gradient(to bottom,rgba(155,81,224,0.4),transparent);
}
.scroll-text{
font-size:9px;letter-spacing:3px;text-transform:uppercase;
color:var(--text-muted);
}
/* ─── SECTION 5: CLIMAX ─── */
.climax-section{
position:relative;z-index:1;max-width:800px;margin:0 auto;
padding:140px 24px;text-align:center;
overflow:hidden;
}
.climax-bg-glow{
position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
width:700px;height:700px;
background:radial-gradient(circle,rgba(0,242,254,0.1) 0%,rgba(155,81,224,0.08) 30%,transparent 70%);
pointer-events:none;
animation:climaxPulse 4s ease-in-out infinite;
}
@keyframes climaxPulse{
0%,100%{opacity:0.6;transform:translate(-50%,-50%) scale(1)}
50%{opacity:1;transform:translate(-50%,-50%) scale(1.08)}
}
.climax-inner{position:relative;z-index:1}
.climax-label{
font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;
color:var(--accent-to);margin-bottom:20px;
display:inline-block;
background:rgba(0,242,254,0.08);border:1px solid rgba(0,242,254,0.2);
padding:6px 14px;border-radius:100px;
}
.climax-title{
font-size:clamp(2.5rem,8vw,5rem);font-weight:200;letter-spacing:-1px;
line-height:1.0;margin-bottom:20px;
}
.climax-title span{
background:linear-gradient(135deg,var(--accent-to),var(--accent-from));
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
background-clip:text;
}
.climax-text{
font-size:15px;font-weight:300;color:var(--text-dim);
max-width:480px;margin:0 auto;line-height:1.8;
}
.climax-cta{
display:flex;gap:16px;justify-content:center;flex-wrap:wrap;
margin-top:48px;
}
.cta-btn{
display:inline-flex;align-items:center;gap:10px;
padding:16px 32px;border-radius:12px;font-size:15px;font-weight:400;
text-decoration:none;transition:var(--transition-slow);
}
.cta-primary{
background:linear-gradient(135deg,var(--accent-from),var(--accent-to));
color:#fff;
box-shadow:0 4px 30px rgba(155,81,224,0.3);
}
.cta-primary:hover{
box-shadow:0 8px 40px rgba(155,81,224,0.5);
transform:translateY(-2px);
}
.cta-secondary{
background:rgba(26,31,44,0.6);border:1px solid var(--border);
color:var(--text-dim);
}
.cta-secondary:hover{
border-color:rgba(155,81,224,0.3);
color:var(--text);
transform:translateY(-2px);
}
/* ─── TIMELINE ─── */
.timeline-section{
position:relative;z-index:1;max-width:800px;margin:0 auto;
padding:60px 24px 120px;
}
.timeline-label{
font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;
color:var(--text-muted);margin-bottom:40px;text-align:center;
}
.timeline{
display:flex;flex-direction:column;gap:16px;
}
.timeline-item{
display:grid;grid-template-columns:80px 1fr;gap:24px;
padding:20px 24px;
background:rgba(26,31,44,0.5);
border:1px solid var(--border);
border-radius:12px;
transition:var(--transition-slow);
cursor:default;
}
.timeline-item:hover{
border-color:rgba(155,81,224,0.3);
background:rgba(26,31,44,0.7);
transform:translateX(4px);
}
.timeline-time{
font-size:13px;font-weight:300;color:var(--text-dim);padding-top:2px;
font-variant-numeric:tabular-nums;
}
.timeline-time span{
display:block;font-size:10px;color:var(--text-muted);margin-top:2px;
}
.timeline-visual{
display:flex;flex-direction:column;gap:6px;
}
.timeline-bar{
height:3px;border-radius:3px;
background:linear-gradient(90deg,var(--accent-from),var(--accent-to));
transition:var(--transition-slow);
opacity:0.3;
}
.timeline-item:hover .timeline-bar{opacity:0.7;}
.timeline-bar-1{width:20%}
.timeline-bar-2{width:35%}
.timeline-bar-3{width:55%}
.timeline-bar-4{width:75%}
.timeline-bar-5{width:90%}
.timeline-bar-6{width:100%}
.timeline-desc{
font-size:14px;font-weight:300;color:var(--text-dim);line-height:1.6;
margin-top:4px;
}
.timeline-desc strong{color:var(--text);font-weight:400;}
</style>
</head>
<body>
<div class="grid-bg"></div>
<div class="orb orb-violet"></div>
<div class="orb orb-cyan"></div>
<!-- ─── SECTION 1: HERO / BOVEN DE VOUW (0:00 Ambient Intro) ─── -->
<section class="hero">
<div class="hero-label reveal visible">
<span class="hero-label-dot"></span>
RÜFÜS DU SOL · 2025
</div>
<h1 class="hero-title reveal visible reveal-delay-1">
Inner<br><span>bloom</span>
</h1>
<p class="hero-sub reveal visible reveal-delay-2">
Een meeslepende reis door 122 BPM van sonische melancholie.<br>
Negen minuten en 52 seconden van opbouw en emotie.
</p>
<div class="hero-bpm reveal visible reveal-delay-3">
122 <span></span> Am <span></span> Original Mix
</div>
<!-- Scroll indicator (de kickdrum) -->
<div class="scroll-indicator reveal visible reveal-delay-4">
<div class="scroll-dot"></div>
<div class="scroll-line"></div>
<span class="scroll-text">scroll</span>
</div>
</section>
<!-- ─── SECTION 2: CORE CONTENT (De Baslijn & Eerste Vocals) ─── -->
<section class="content-section">
<div class="content-grid">
<div class="content-card reveal">
<div class="content-number">01</div>
<h2 class="content-heading">De basis</h2>
<p class="content-text">Een diepe, lage puls. De kickdrum en baslijn vestigen de fundering. Hier komt de eerste, fragiele vocal van Tyrone Lindqvist binnen — ver weg, bedolven onder galm.</p>
</div>
<div class="content-card reveal reveal-delay-1">
<div class="content-number">02</div>
<h2 class="content-heading">Ritme</h2>
<p class="content-text">Hihats en percussie verschijnen geleidelijk. Het grid begint vorm te krijgen. Contentblokken schuiven op hun plek, ruim en mysterieus.</p>
</div>
</div>
<!-- Visualizer -->
<div class="visualizer reveal reveal-delay-2" style="margin-top:80px">
<div class="visualizer-bars">
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
<div class="visualizer-bar"></div>
</div>
</div>
</section>
<!-- ─── SECTION 3: HET OMSLAGPUNT (4:00 De Synth Lead) ─── -->
<section class="turn-section">
<div class="turn-inner">
<div class="turn-label reveal">⏺ 4:00 — The Filter Opens</div>
<h2 class="turn-title reveal reveal-delay-1">
De iconische<br>
<span>synth</span>
</h2>
<p class="turn-text reveal reveal-delay-2">
Het low-pass filter opent. De melancholische, filter-synth verschijnt —
een geluid dat je herkent nog voor de drums invallen. Dit is het DNA van Innerbloom.
</p>
<p class="turn-text reveal reveal-delay-3" style="color:var(--text-dim);font-size:14px;margin-top:12px">
Neon cyaan en violet verschijnen. De interface wordt helderder, scherper.
Parallax verschuift de achtergronden subtiel.
</p>
</div>
</section>
<!-- ─── SECTION 4: TIMELINE (Het Verloop) ─── -->
<section class="timeline-section">
<div class="timeline-label reveal">The Progressive Build</div>
<div class="timeline">
<div class="timeline-item reveal reveal-delay-1">
<div class="timeline-time">0:00 <span>intro</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-1"></div>
<div class="timeline-desc"><strong>Stilte en verwachting.</strong> Enkel een zachte puls. De interface ademt — achtergrondgloed pulseert.</div>
</div>
</div>
<div class="timeline-item reveal reveal-delay-2">
<div class="timeline-time">2:00 <span>foundation</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-2"></div>
<div class="timeline-desc"><strong>De basis legt zich.</strong> Kick en hihat verschijnen. Elementen worden zichtbaar, nog wazig, nog wachtend.</div>
</div>
</div>
<div class="timeline-item reveal reveal-delay-3">
<div class="timeline-time">4:00 <span>the filter opens</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-3"></div>
<div class="timeline-desc"><strong>De iconische synth.</strong> Het low-pass filter opent. Neon-violet verschijnt. De site wordt helderder, scherper. De blauwdruk van Innerbloom.</div>
</div>
</div>
<div class="timeline-item reveal reveal-delay-4">
<div class="timeline-time">5:30 <span>vocals</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-4"></div>
<div class="timeline-desc"><strong>Lindqvist' stem.</strong> Fragiel, ver weg in de galm. Typografie wordt leesbaar. De emotie doorsnijdt de duisternis.</div>
</div>
</div>
<div class="timeline-item reveal reveal-delay-5">
<div class="timeline-time">7:00 <span>climax</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-5"></div>
<div class="timeline-desc"><strong>Alles is open.</strong> De volle track. Neon-gloed, cyaan en violet dansen. De piek van de ervaring.</div>
</div>
</div>
<div class="timeline-item reveal reveal-delay-6">
<div class="timeline-time">9:52 <span>release</span></div>
<div class="timeline-visual">
<div class="timeline-bar timeline-bar-6"></div>
<div class="timeline-desc"><strong>Terug naar stilte.</strong> De reverb sterft uit. De gloed fades. Je blijft achter, alleen met de echo.</div>
</div>
</div>
</div>
</section>
<!-- ─── SECTION 5: DE CLIMAX (De Drop / "If you want me") ─── -->
<section class="climax-section">
<div class="climax-bg-glow"></div>
<div class="climax-inner">
<div class="climax-label reveal">⏺ 7:00 — The Climax</div>
<h2 class="climax-title reveal reveal-delay-1">
"If you want<br>
<span>me</span>"
</h2>
<p class="climax-text reveal reveal-delay-2">
De volledige track opent. De stem van Lindqvist doorsnijdt de duisternis.
Neon-gloed vult het scherm. Cyaan en violet dansen in een hypnotiserend verloop.
</p>
<p class="climax-text reveal reveal-delay-3" style="color:var(--text-dim);font-size:14px;margin-top:12px;max-width:500px">
Hier knalt het contrast eruit — felle glow-effecten, scherpe lijnen, maximale visuele impact.
Dit is het punt van conversie. De boodschap.
</p>
<div class="climax-cta reveal reveal-delay-4">
<a href="#listen" class="cta-btn cta-primary">
<span>Ervaar Innerbloom</span>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</a>
<a href="https://rufusdusol.com" target="_blank" rel="noopener" class="cta-btn cta-secondary">
RÜFÜS DU SOL
</a>
</div>
</div>
</section>
<!-- ─── LISTEN / AFTERGLOW ─── -->
<section class="listen-section" id="listen">
<div class="listen-title reveal">Luister nu</div>
<div class="listen-grid">
<a class="listen-btn reveal reveal-delay-1" href="https://open.spotify.com/track/6G6TzM6eE3vjYlqGkSd9qT" target="_blank" rel="noopener">
<svg viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M128 0C57.308 0 0 57.309 0 128c0 70.696 57.309 128 128 128 70.697 0 128-57.304 128-128C256 57.314 198.697.007 127.998.007l.001-.006Zm58.699 184.614c-2.293 3.76-7.215 4.952-10.975 2.644-30.053-18.357-67.885-22.515-112.44-12.335a7.981 7.981 0 0 1-9.552-6.007 7.968 7.968 0 0 1 6-9.553c48.76-11.14 90.583-6.344 124.323 14.276 3.76 2.308 4.952 7.215 2.644 10.975Zm15.667-34.853c-2.89 4.695-9.034 6.178-13.726 3.289-34.406-21.148-86.853-27.273-127.548-14.92-5.278 1.594-10.852-1.38-12.454-6.649-1.59-5.278 1.386-10.842 6.655-12.446 46.485-14.106 104.275-7.273 143.787 17.007 4.692 2.89 6.175 9.034 3.286 13.72v-.001Zm1.345-36.293C162.457 88.964 94.394 86.71 55.007 98.666c-6.325 1.918-13.014-1.653-14.93-7.978-1.917-6.328 1.65-13.012 7.98-14.935C93.27 62.027 168.434 64.68 215.929 92.876c5.702 3.376 7.566 10.724 4.188 16.405-3.362 5.69-10.73 7.565-16.4 4.187h-.006Z" fill="#1ED760"/></svg>
Spotify
</a>
<a class="listen-btn reveal reveal-delay-2" href="https://music.apple.com/nl/album/innerbloom/1440875158?i=1440875162" target="_blank" rel="noopener">
<svg viewBox="0 0 361 361" xmlns="http://www.w3.org/2000/svg"><path d="M360 112.61c0-4.3 0-8.6-.02-12.9-.02-3.62-.06-7.24-.16-10.86-.21-7.89-.68-15.84-2.08-23.64-1.42-7.92-3.75-15.29-7.41-22.49a75.633 75.633 0 0 0-33.06-33.05c-7.19-3.66-14.56-5.98-22.47-7.41C287 .86 279.04.39 271.15.18c-3.62-.1-7.24-.14-10.86-.16-4.3-.02-8.6-.02-12.9-.02H112.61c-4.3 0-8.6 0-12.9.02-3.62.02-7.24.06-10.86.16C80.96.4 73 .86 65.2 2.27c-7.92 1.42-15.28 3.75-22.47 7.41A75.633 75.633 0 0 0 9.67 42.73c-3.66 7.2-5.99 14.57-7.41 22.49C.86 73.02.39 80.98.18 88.86.08 92.48.04 96.1.02 99.72 0 104.01 0 108.31 0 112.61v134.77c0 4.3 0 8.6.02 12.9.02 3.62.06 7.24.16 10.86.21 7.89.68 15.84 2.08 23.64 1.42 7.92 3.75 15.29 7.41 22.49a75.633 75.633 0 0 0 33.06 33.05c7.19 3.66 14.56 5.98 22.47 7.41 7.8 1.4 15.76 1.87 23.65 2.08 3.62.1 7.24.14 10.86.16 4.3.03 8.6.02 12.9.02h134.77c4.3 0 8.6 0 12.9-.02 3.62-.02 7.24-.06 10.86-.16 7.89-.21 15.85-.68 23.65-2.08 7.92-1.42 15.28-3.75 22.47-7.41a75.633 75.633 0 0 0 33.06-33.05c3.66-7.2 5.99-14.57 7.41-22.49 1.4-7.8 1.87-15.76 2.08-23.64.1-3.62.14-7.24.16-10.86.03-4.3.02-8.6.02-12.9V112.61z" fill="#fa233b"/><path d="m254.5 55-.04.01-107 21.59h-.04c-2.79.59-4.98 1.58-6.67 3-2.04 1.71-3.17 4.13-3.6 6.95-.09.6-.24 1.82-.24 3.62v133.92c0 3.13-.25 6.17-2.37 8.76s-4.74 3.37-7.81 3.99l-6.99 1.41c-8.84 1.78-14.59 2.99-19.8 5.01-4.98 1.93-8.71 4.39-11.68 7.51-5.89 6.17-8.28 14.54-7.46 22.38.7 6.69 3.71 13.09 8.88 17.82 3.49 3.2 7.85 5.63 12.99 6.66 5.33 1.07 11.01.7 19.31-.98 4.42-.89 8.56-2.28 12.5-4.61 3.9-2.3 7.24-5.37 9.85-9.11 2.62-3.75 4.31-7.92 5.24-12.35.96-4.57 1.19-8.7 1.19-13.26V142.81c0-6.22 1.76-7.86 6.78-9.08l93.09-18.75c5.79-1.11 8.52.54 8.52 6.61v79.29c0 3.14-.03 6.32-2.17 8.92-2.12 2.59-4.74 3.37-7.81 3.99l-6.99 1.41c-8.84 1.78-14.59 2.99-19.8 5.01-4.98 1.93-8.71 4.39-11.68 7.51-5.89 6.17-8.49 14.54-7.67 22.38.7 6.69 3.92 13.09 9.09 17.82 3.49 3.2 7.85 5.56 12.99 6.6 5.33 1.07 11.01.69 19.31-.98 4.42-.89 8.56-2.22 12.5-4.55 3.9-2.3 7.24-5.37 9.85-9.11 2.62-3.75 4.31-7.92 5.24-12.35.96-4.57 1-8.7 1-13.26V64.46c.02-6.16-3.23-9.96-9.02-9.46z" fill="#fff"/></svg>
Apple Music
</a>
<a class="listen-btn reveal reveal-delay-3" href="https://www.youtube.com/watch?v=1m2MrC9G0W8" target="_blank" rel="noopener">
<svg viewBox="0 0 256 180" xmlns="http://www.w3.org/2000/svg"><path d="M250.346 28.075A32.18 32.18 0 0 0 227.69 5.418C207.824 0 127.87 0 127.87 0S47.912.164 28.046 5.582A32.18 32.18 0 0 0 5.39 28.24c-6.009 35.298-8.34 89.084.165 123.43a32.18 32.18 0 0 0 22.656 22.657c19.866 5.418 99.822 5.418 99.822 5.418s79.955 0 99.82-5.418a32.18 32.18 0 0 0 22.657-22.657c6.338-35.345 8.34-89.084-.165-123.595z" fill="#FF0000"/><path d="m102.421 128.06 66.328-38.418-66.328-38.418z" fill="#fff"/></svg>
YouTube
</a>
</div>
<div class="listen-count reveal">
<span>122</span> BPM · <span>A mineur</span> · 9:52
</div>
</section>
<!-- ─── FOOTER ─── -->
<footer class="footer">
<p class="footer-text">
Innerbloom · RÜFÜS DU SOL<br>
<a href="https://rufusdusol.com" target="_blank" rel="noopener">rufusdusol.com</a>
</p>
</footer>
<script>
// ─── SCROLL REVEAL ───
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, { threshold: 0.15 });
document.querySelectorAll('.reveal:not(.visible)').forEach(el => observer.observe(el));
// ─── PARALLAX ORBS ───
const orbs = document.querySelectorAll('.orb');
window.addEventListener('mousemove', (e) => {
const x = (e.clientX / window.innerWidth - 0.5) * 20;
const y = (e.clientY / window.innerHeight - 0.5) * 20;
orbs.forEach((orb, i) => {
const factor = i === 0 ? -1 : 1;
orb.style.transform = `translate(${x * factor}px, ${y * factor}px)`;
});
});
// ─── VISUALIZER DYNAMIC ───
const bars = document.querySelectorAll('.visualizer-bar');
function updateBars() {
const heights = [20, 40, 60, 80, 100, 80, 60, 40, 20];
bars.forEach((bar, i) => {
const h = heights[i] + (Math.random() - 0.5) * 30;
bar.style.height = h + '%';
});
}
setInterval(updateBars, 800);
console.log('🌊 Innerbloom · RÜFÜS DU SOL');
console.log('🎵 122 BPM · Am · 9:52');
console.log('✨ "If you want to know how I feel, just listen to Innerbloom."');
</script>
</body>
</html>