cellar-protocol/films/thermal-shock/index.html

125 lines
5.2 KiB
HTML
Raw Normal View History

2026-07-21 12:36:26 +02:00
<!doctype html>
<html><head><meta charset="UTF-8"/>
<title>Thermal Shock: The Moment Frost Takes</title>
<meta property="og:type" content="website">
<meta property="og:title" content="Thermal Shock: The Moment Frost Takes">
<meta property="og:description" content="The breath that steadies the hand when the frost arrives.">
<meta property="og:url" content="https://barbara-cintron.4ort.net/">
<meta name="twitter:card" content="summary">
<meta name="description" content="The breath that steadies the hand when the frost arrives.">
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
:root{--ink:#e8e4d9;--steel:#1a2b3c;--ice:#d4f1ff;--blood:#8b3a3a}
body{margin:0;background:var(--steel);color:var(--ink);font-family:"Courier New",monospace}
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
.clip{position:absolute;inset:0;display:grid;place-items:center;text-align:center}
/* SCENE 1: THE BREATH */
#s1::before{
content:'';position:absolute;inset:0;
background:radial-gradient(circle at center,#0b121a 0%,#1a2b3c 70%);
}
#s1-title{
font-size:clamp(48px,4vw,72px);line-height:1.2;
letter-spacing:0.04em;opacity:0;transform:translateY(40px);
text-shadow:0 0 40px rgba(212,241,255,0.3);
}
#s1-sub{
margin-top:2rem;font-size:clamp(24px,2.5vw,36px);
color:var(--ice);opacity:0;transform:scale(0.95);
}
/* SCENE 2: THE STRIKE */
#s2::before{
content:'';position:absolute;inset:0;
background:linear-gradient(180deg,#0b121a 0%,#2a4a6a 40%,#0b121a 100%);
}
#s2-crystal{
width:0;height:0;border-left:120px solid transparent;
border-right:120px solid transparent;border-bottom:240px solid var(--ice);
opacity:0;filter:drop-shadow(0 0 60px var(--ice));
}
#s2-title{
font-size:clamp(56px,6vw,96px);margin-top:320px;line-height:1;
color:var(--ice);opacity:0;transform:scale(1.1);
letter-spacing:0.12em;
}
/* SCENE 3: THE HOLD */
#s3::before{
content:'';position:absolute;inset:0;
background:conic-gradient(from 0deg,#1a2b3c,#0b121a,#1a2b3c);
}
#s3-ring{
width:480px;height:480px;border-radius:50%;
border:2px solid var(--ice);box-sizing:border-box;
opacity:0;transform:rotate(-15deg) scale(0.8);
box-shadow:0 0 120px var(--ice),inset 0 0 60px var(--ice);
}
#s3-title{
font-size:clamp(64px,7vw,108px);margin-top:280px;line-height:1;
color:var(--ink);opacity:0;transform:translateY(-40px);
text-transform:uppercase;letter-spacing:0.16em;
}
#s3-sub{
margin-top:1.5rem;font-size:clamp(28px,3vw,42px);
color:var(--ice);opacity:0;transform:scale(0.9);
}
</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="45">
<!-- AUDIO TRACKS -->
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
<audio id="voice-s2" src="audio/s2.wav" data-start="15"></audio>
<audio id="voice-s3" src="audio/s3.wav" data-start="30"></audio>
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
<!-- SCENE 1: THE BREATH (015s) -->
<section id="s1" class="clip" data-start="0" data-duration="15" data-track-index="1">
<h1 id="s1-title">THREE — FOUR — SEVEN</h1>
<p id="s1-sub">The breath that steadies the hand<br/>when the frost arrives.</p>
</section>
<!-- SCENE 2: THE STRIKE (1530s) -->
<section id="s2" class="clip" data-start="15" data-duration="15" data-track-index="1">
<div id="s2-crystal"></div>
<h1 id="s2-title">ZERO DEGREES</h1>
</section>
<!-- SCENE 3: THE HOLD (3045s) -->
<section id="s3" class="clip" data-start="30" data-duration="15" data-track-index="1">
<div id="s3-ring"></div>
<h1 id="s3-title">THE WALL HOLDS</h1>
<p id="s3-sub">Zone Five-B.<br/>Storm Lake.<br/>We bend. We do not break.</p>
</section>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
// SCENE 1: THE BREATH
tl.to("#s1-title",{opacity:1,y:0,duration:2.4,ease:"power3.out"},0.2);
tl.to("#s1-sub",{opacity:1,scale:1,duration:1.8,ease:"power2.out"},3.6);
tl.to("#s1-title",{opacity:0,y:-40,duration:1.2},13.2);
tl.to("#s1-sub",{opacity:0,scale:0.95,duration:1.2},13.8);
// SCENE 2: THE STRIKE
tl.to("#s2-crystal",{opacity:1,borderBottomWidth:240,duration:1.6,ease:"back.in(1.7)"},15.2);
tl.to("#s2-title",{opacity:1,scale:1,duration:2.4,ease:"power3.out"},17.4);
tl.to("#s2-crystal",{filter:"drop-shadow(0 0 120px #d4f1ff)",duration:3},20);
tl.to("#s2-crystal",{opacity:0,borderBottomWidth:0,duration:1.2},28.2);
tl.to("#s2-title",{opacity:0,scale:1.1,duration:1.2},28.8);
// SCENE 3: THE HOLD
tl.to("#s3-ring",{opacity:1,rotate:0,scale:1,duration:2.8,ease:"expo.out"},30.2);
tl.to("#s3-title",{opacity:1,y:0,duration:2.4,ease:"power3.out"},33.6);
tl.to("#s3-sub",{opacity:1,scale:1,duration:1.8,ease:"power2.out"},37.2);
tl.to("#s3-ring",{boxShadow:"0 0 240px #d4f1ff,inset 0 0 120px #d4f1ff",duration:4},39);
window.__timelines["main"] = tl;
</script>
</body></html>