carol-schroeder-site/films/hot-spots/index.html

91 lines
5.7 KiB
HTML
Raw Normal View History

2026-08-21 13:13:17 +02:00
<!doctype html>
<html><head>
<meta name="description" content="A Field Note from Carol Schroeder Hot Spots What the map tells you before the street does Kernel-density, repeat victimization, and the quiet arithmetic…"><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:#101418;color:#e8e2d4;font-family:Georgia,'Times New Roman',serif}
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
.clip{position:absolute;inset:0;display:grid;place-items:center;opacity:0}
.scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(16,20,24,.1) 0%,rgba(16,20,24,.72) 100%)}
h1{font-size:96px;font-weight:400;letter-spacing:.02em;text-align:center;max-width:1500px;margin:0;line-height:1.15}
.eyebrow{font-family:'Courier New',monospace;font-size:30px;letter-spacing:.35em;color:#c9a66b;text-transform:uppercase;margin-bottom:30px}
.sub{font-size:38px;font-style:italic;color:#b9b0a0;max-width:1300px;text-align:center;line-height:1.4}
.grid-lines{position:absolute;inset:0;background-image:linear-gradient(rgba(201,166,107,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(201,166,107,.07) 1px,transparent 1px);background-size:120px 120px}
.dot{position:absolute;width:14px;height:14px;border-radius:50%;background:#c9a66b;box-shadow:0 0 24px 6px rgba(201,166,107,.55)}
.vignette{position:absolute;inset:0;box-shadow:inset 0 0 300px rgba(0,0,0,.85)}
</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="47">
<section id="s1" class="clip" data-start="0" data-duration="7" data-track-index="1">
<div class="scrim"></div>
<div class="grid-lines"></div>
<div>
<div class="eyebrow">A Field Note from Carol Schroeder</div>
<h1 id="s1-title">Hot Spots</h1>
<div class="sub" style="margin-top:24px">What the map tells you before the street does</div>
</div>
<div class="vignette"></div>
</section>
<section id="s2" class="clip" data-start="7" data-duration="20" data-track-index="1">
<div class="grid-lines"></div>
<div style="position:relative;width:1920px;height:1080px">
<div id="kern-dot-1" class="dot" style="left:700px;top:420px;opacity:0"></div>
<div id="kern-dot-2" class="dot" style="left:760px;top:480px;opacity:0"></div>
<div id="kern-dot-3" class="dot" style="left:650px;top:500px;opacity:0"></div>
<div id="kern-dot-4" class="dot" style="left:810px;top:440px;opacity:0"></div>
<div id="kern-dot-5" class="dot" style="left:720px;top:560px;opacity:0"></div>
<div id="kern-dot-6" class="dot" style="left:900px;top:380px;opacity:0"></div>
<div id="kern-dot-7" class="dot" style="left:800px;top:520px;opacity:0"></div>
<div id="kern-halo" class="dot" style="width:200px;height:200px;background:rgba(201,166,107,.16);opacity:0"></div>
</div>
<div style="position:absolute;left:110px;bottom:110px;max-width:900px">
<h1 id="s2-title" style="font-size:50px;text-align:left;opacity:0">Kernel-density, repeat victimization, and the quiet arithmetic of where crime clusters.</h1>
</div>
<div class="vignette"></div>
</section>
<section id="s3" class="clip" data-start="27" data-duration="20" data-track-index="1">
<div class="scrim" style="background:linear-gradient(180deg,rgba(16,20,24,.55),rgba(16,20,24,.9))"></div>
<div class="grid-lines"></div>
<div>
<div class="eyebrow">The Discipline</div>
<h1 id="s3-title" style="font-size:64px;opacity:0">A lattice, not a crystal ball.</h1>
<div class="sub" style="margin-top:26px;opacity:0">The map forecasts patterns. It does not condemn people. The difference is everything.</div>
</div>
<div class="vignette"></div>
</section>
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
<audio id="voice-s2" src="audio/s2.wav" data-start="7"></audio>
<audio id="voice-s3" src="audio/s3.wav" data-start="27"></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 });
/* scene 1 */
tl.set("#s1", { opacity: 1 }, 0.05);
tl.from("#s1-title", { opacity: 0, y: 30, duration: 1, ease: "power3.out" }, 0.3);
tl.from(".eyebrow", { opacity: 0, letterSpacing: "0.6em", duration: 1.1, ease: "power2.out" }, 0.2);
tl.to("#s1", { opacity: 0, duration: 0.6 }, 6.0);
/* scene 2 */
tl.set("#s2", { opacity: 1 }, 6.9);
tl.to("#s2-title", { opacity: 1, x: 0, duration: 1, ease: "power3.out" }, 7.6);
tl.to("#kern-dot-1", { opacity: 1, scale: 1, duration: .4 }, 8.2);
tl.to("#kern-dot-2", { opacity: 1, scale: 1, duration: .4 }, 8.9);
tl.to("#kern-dot-3", { opacity: 1, scale: 1, duration: .4 }, 9.6);
tl.to("#kern-dot-4", { opacity: 1, scale: 1, duration: .4 }, 10.4);
tl.to("#kern-dot-5", { opacity: 1, scale: 1, duration: .4 }, 11.2);
tl.to("#kern-dot-6", { opacity: 1, scale: 1, duration: .4 }, 12.0);
tl.to("#kern-dot-7", { opacity: 1, scale: 1, duration: .4 }, 12.8);
tl.to("#kern-halo", { opacity: .9, scale: 4, duration: 7, ease: "power1.out" }, 13.5);
tl.to("#s2", { opacity: 0, duration: 0.6 }, 26.2);
/* scene 3 */
tl.set("#s3", { opacity: 1 }, 27.15);
tl.to("#s3-title", { opacity: 1, y: 0, duration: .9, ease: "power3.out" }, 27.6);
tl.to("#s3 .sub", { opacity: 1, y: 0, duration: .9 }, 28.6);
window.__timelines["main"] = tl;
</script>
</body></html>