alan-destin-site/films/reading-the-iron/index.html
2026-08-21 23:00:01 +00:00

114 lines
6.9 KiB
HTML

<!doctype html>
<html><head>
<meta name="description" content="Field notes · Comstock, NY Reading the Iron Judging forge heat by eye, hand, and wind — not the dial. I / IV The heat, in colors Every shade of steel is a…"><meta charset="UTF-8"/>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
body{margin:0;background:#0a0a08;color:#e8dcc3;font-family:Georgia,'Times New Roman',serif}
#root{position:relative;width:1920px;height:1080px;overflow:hidden;background:#0a0a08}
.clip{position:absolute;inset:0;display:grid;place-items:center}
.kicker{font-family:monospace;letter-spacing:.35em;text-transform:uppercase;font-size:22px;color:#c9a227}
.title{font-size:120px;font-weight:bold;line-height:1.05;text-align:center;text-shadow:0 0 60px rgba(201,162,39,.35)}
.sub{font-size:34px;color:#b8a888;text-align:center;max-width:1200px;line-height:1.4}
.gauge{width:1500px;height:120px;border:2px solid #444;border-radius:6px;overflow:hidden;position:relative}
.band{position:absolute;inset:0}
.gauge-label{position:absolute;font-family:monospace;font-size:22px;color:#efe6cf}
.temp{font-size:44px;color:#c9a227;font-family:monospace}
.footnote{font-size:24px;color:#8a7f68;max-width:1100px;text-align:center;line-height:1.5}
.scene-num{position:absolute;bottom:40px;right:60px;font-family:monospace;font-size:20px;color:#5a5444}
</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="92">
<!-- S1 — intro card -->
<section id="s1" class="clip" data-start="0" data-duration="20" data-track-index="1">
<div style="text-align:center;padding:0 160px">
<div class="kicker" id="s1-kick">Field notes · Comstock, NY</div>
<div class="title" id="s1-title">Reading the Iron</div>
<div class="sub" id="s1-sub">Judging forge heat by eye, hand, and wind — not the dial.</div>
</div>
<div class="scene-num">I / IV</div>
</section>
<!-- S2 — the color gauge -->
<section id="s2" class="clip" data-start="20" data-duration="30" data-track-index="1">
<div style="width:1700px;text-align:center">
<div class="temp" id="s2-head">The heat, in colors</div>
<div class="sub" id="s2-sub" style="margin-bottom:40px">Every shade of steel is a temperature, if you know how to read it.</div>
<div class="gauge" id="s2-gauge">
<div class="band" style="background:linear-gradient(90deg,#3a0505 0%,#7a1a10 14%,#a93a18 32%,#d06a1f 48%,#e8a020 62%,#f3d06a 80%,#fdf6d0 100%);"></div>
<div class="gauge-label" style="left:0;top:130px" id="gl1">blood red</div>
<div class="gauge-label" style="left:30%;top:130px" id="gl2">cherry</div>
<div class="gauge-label" style="left:55%;top:130px" id="gl3">salmon</div>
<div class="gauge-label" style="left:74%;top:130px" id="gl4">orange</div>
<div class="gauge-label" style="right:0;top:130px" id="gl5">white</div>
</div>
<div class="footnote" id="s2-note" style="margin-top:90px">Blood red: too cold to move. Cherry: it bends. Salmon: tool steel. Orange: shaping hot. White: carbon's leaving — you're about to ruin a good piece.</div>
</div>
<div class="scene-num">II / IV</div>
</section>
<!-- S3 — why eyes beat the dial -->
<section id="s3" class="clip" data-start="50" data-duration="22" data-track-index="1">
<div style="text-align:center;padding:0 180px">
<div class="kicker" id="s3-kick">Why the dial lies</div>
<div class="title" id="s3-title" style="font-size:72px">The dial reads the air. The iron lives in the fire.</div>
<div class="sub" id="s3-sub" style="margin-top:30px">A draft shifts the wind; a cold anvil drinks your heat. Your eyes see what the work is doing right now — the dial only guesses.</div>
</div>
<div class="scene-num">III / IV</div>
</section>
<!-- S4 — close -->
<section id="s4" class="clip" data-start="72" data-duration="20" data-track-index="1">
<div style="text-align:center;padding:0 200px">
<div class="title" id="s4-title" style="font-size:84px">Learn the steel's language.</div>
<div class="sub" id="s4-sub" style="margin-top:26px">The thermometer can break. Your eyes won't. — Alan Destin, handyman, Comstock NY</div>
<div class="kicker" id="s4-kick" style="margin-top:40px">reading-the-iron · alan-destin.4ort.net</div>
</div>
<div class="scene-num">IV / IV</div>
</section>
<!-- narration audio, direct children of root, timed to scene starts -->
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
<audio id="voice-s2" src="audio/s2.wav" data-start="20"></audio>
<audio id="voice-s3" src="audio/s3.wav" data-start="50"></audio>
<audio id="voice-s4" src="audio/s4.wav" data-start="72"></audio>
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.15"></audio>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
// S1
tl.to("#s1-kick", { opacity: 0, y: 30, duration: 0.001 }, 0);
tl.to("#s1-kick", { opacity: 1, y: 0, duration: 0.7, ease: "power3.out" }, 0.4);
tl.fromTo("#s1-title", { opacity: 0, scale: 1.08 }, { opacity: 1, scale: 1, duration: 1.2, ease: "power3.out" }, 1.0);
tl.to("#s1-sub", { opacity: 0, y: 20, duration: 0.001 }, 0);
tl.to("#s1-sub", { opacity: 1, y: 0, duration: 0.8, ease: "power3.out" }, 2.2);
tl.to("#s1-title", { opacity: 0, y: -20, duration: 0.6 }, 18.5);
// S2 — draw the gauge bands in as narration reads
tl.fromTo("#s2-head", { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.6 }, 20.6);
tl.to("#s2-sub", { opacity: 0, y: 16, duration: 0.001 }, 20);
tl.to("#s2-sub", { opacity: 1, y: 0, duration: 0.7 }, 21.2);
["#gl1","#gl2","#gl3","#gl4","#gl5"].forEach((el,i) => {
tl.fromTo(el, { opacity: 0 }, { opacity: 1, duration: 0.3, ease: "power2.out" }, 23.5 + i*1.0);
});
tl.fromTo("#s2-gauge", { scaleX: 0.4, opacity: 0 }, { scaleX: 1, opacity: 1, transformOrigin: "50% 50%", duration: 0.9, ease: "power3.out" }, 22.6);
tl.to("#s2-note", { opacity: 0, y: 18, duration: 0.001 }, 20);
tl.to("#s2-note", { opacity: 1, y: 0, duration: 0.8, ease: "power3.out" }, 44.0);
// S3
tl.fromTo("#s3-kick", { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.6 }, 50.6);
tl.fromTo("#s3-title", { opacity: 0, x: -40 }, { opacity: 1, x: 0, duration: 0.9, ease: "power3.out" }, 51.4);
tl.fromTo("#s3-sub", { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.8 }, 54.0);
// S4
tl.fromTo("#s4-title", { opacity: 0, scale: 1.06 }, { opacity: 1, scale: 1, duration: 0.9, ease: "power3.out" }, 72.6);
tl.fromTo("#s4-sub", { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.8 }, 75.0);
tl.fromTo("#s4-kick", { opacity: 0 }, { opacity: 1, duration: 0.5 }, 86.0);
window.__timelines["main"] = tl;
</script>
</body></html>