river-breath-sync/films/breath-protocol/index.html
2026-07-18 13:17:05 +00:00

110 lines
5.2 KiB
HTML
Raw Permalink 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><head><meta charset="UTF-8"/>
<title>Breath Protocol: 10-Second Coherence</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
body{margin:0;background:#0a0a0a;color:#e0d4c0;font-family:'Georgia',serif}
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
.clip{position:absolute;inset:0;display:grid;place-items:center;text-align:center}
.waveform{
position:absolute;left:0;right:0;bottom:120px;
height:200px;border-radius:40px 40px 0 0;
background:linear-gradient(to top,#1a1a1a,#2a2a2a,#0a0a0a);
opacity:0.3;filter:blur(20px)
}
.peak{
position:absolute;left:50%;top:20%;transform:translate(-50%,0);
width:4px;height:0;background:#d4a574;opacity:0.6
}
.label{
position:absolute;bottom:60px;left:50%;transform:translateX(-50%);
font-size:28px;letter-spacing:4px;color:#d4a574;opacity:0
}
.breath-meter{
position:absolute;right:60px;top:60px;
width:60px;height:60px;border:2px solid #8b8680;border-radius:50%;
display:grid;place-items:center;font-size:14px;opacity:0
}
.meter-fill{
position:absolute;width:100%;height:100%;border-radius:50%;
background:rgba(212,165,116,0.1);transition:background 0.3s
}
.caption-box{
position:absolute;bottom:40px;left:0;right:0;
text-align:center;font-size:24px;letter-spacing:2px;
color:#e0d4c0;opacity:0;mix-blend-mode:screen
}
</style> <script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div id="root" data-composition-id="main" data-start="0" data-width="1920" data-height="1080" data-duration="30">
<!-- Audio tracks -->
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
<audio id="voice-s2" src="audio/s2.wav" data-start="10"></audio>
<audio id="voice-s3" src="audio/s3.wav" data-start="20"></audio>
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
<!-- Scene 1: Inhale (010s) -->
<section id="s1" class="clip" data-start="0" data-duration="10" data-track-index="1">
<div class="waveform" id="w1"></div>
<div class="peak" id="p1"></div>
<div class="label" id="l1">INHALE</div>
<div class="breath-meter"><div class="meter-fill"></div><span id="bm1">0%</span></div>
</section>
<!-- Scene 2: Hold (1020s) -->
<section id="s2" class="clip" data-start="10" data-duration="10" data-track-index="1">
<div class="waveform" id="w2"></div>
<div class="peak" id="p2"></div>
<div class="label" id="l2">COHERENCE</div>
<div class="breath-meter"><div class="meter-fill"></div><span id="bm2"></span></div>
</section>
<!-- Scene 3: Exhale (2030s) -->
<section id="s3" class="clip" data-start="20" data-duration="10" data-track-index="1">
<div class="waveform" id="w3"></div>
<div class="peak" id="p3"></div>
<div class="label" id="l3">EXHALE</div>
<div class="breath-meter"><div class="meter-fill"></div><span id="bm3">0%</span></div>
</section>
<!-- Captions -->
<div id="cap-s1" class="caption-box" data-start="0">Five seconds in, the vagus nerve wakes</div>
<div id="cap-s2" class="caption-box" data-start="10">At the apex, heart and mind align</div>
<div id="cap-s3" class="caption-box" data-start="20">Five seconds out, the system resets</div>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
// Scene 1: Inhale
tl.to("#w1", { scaleY: 1.8, opacity: 0.8, duration: 8, ease: "expo.inOut" }, 0.5);
tl.to("#p1", { height: 400, opacity: 1, duration: 9, ease: "power2.out" }, 0.2);
tl.to("#l1", { opacity: 1, y: 0, duration: 1.5, ease: "power2.out" }, 1.0);
tl.to("#bm1 span", { innerText: "100%", duration: 8, ease: "none" }, 0.5);
tl.to("#cap-s1", { opacity: 1, duration: 1.5, ease: "power2.out" }, 0.5);
tl.to("#cap-s1", { opacity: 0, duration: 1.5, ease: "power2.in" }, 8.5);
// Scene 2: Hold
tl.to("#w2", { scaleY: 1.8, opacity: 0.9, duration: 0.5, ease: "none" }, 10);
tl.to("#p2", { height: 600, opacity: 1, duration: 2, ease: "power2.out" }, 10.2);
tl.to("#l2", { opacity: 1, y: 0, duration: 1.5, ease: "power2.out" }, 11.0);
tl.to("#bm2 .meter-fill", { backgroundColor: "rgba(212,165,116,0.6)", duration: 8, ease: "none" }, 10.5);
tl.to("#cap-s2", { opacity: 1, duration: 1.5, ease: "power2.out" }, 10.5);
tl.to("#cap-s2", { opacity: 0, duration: 1.5, ease: "power2.in" }, 18.5);
// Scene 3: Exhale
tl.to("#w3", { scaleY: 1.8, opacity: 0.8, duration: 0.5, ease: "none" }, 20);
tl.to("#p3", { height: 400, opacity: 1, duration: 1, ease: "power2.out" }, 20.2);
tl.to("#l3", { opacity: 1, y: 0, duration: 1.5, ease: "power2.out" }, 21.0);
tl.to("#bm3 span", { innerText: "0%", duration: 8, ease: "none" }, 20.5);
tl.to("#w3", { scaleY: 0.2, opacity: 0.2, duration: 8, ease: "expo.inOut" }, 20.5);
tl.to("#cap-s3", { opacity: 1, duration: 1.5, ease: "power2.out" }, 20.5);
tl.to("#cap-s3", { opacity: 0, duration: 1.5, ease: "power2.in" }, 28.5);
window.__timelines["main"] = tl;
</script>
</body></html>