cellar-protocol/films/thermal-shock/index.html
2026-07-21 10:36:26 +00:00

125 lines
5.2 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><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>