bryanmubarak-joint/films/the-geometry-of-trust/index.html

128 lines
6.2 KiB
HTML
Raw Permalink Normal View History

2026-07-19 22:46:46 +02:00
<!doctype html>
<html><head><meta charset="UTF-8"/>
<title>The Geometry of Trust</title>
<meta property="og:type" content="website">
<meta property="og:title" content="The Geometry of Trust">
<meta property="og:description" content="THE HOST STAND THE FIRST VECTOR THE FLOOR ROUTING INTENT THE PASS REJECT THE FLAWED TRUST THE EXIT MEMORY ENCODED">
<meta property="og:url" content="https://bryan-mubarak.4ort.net/">
<meta name="twitter:card" content="summary">
<meta name="description" content="THE HOST STAND THE FIRST VECTOR THE FLOOR ROUTING INTENT THE PASS REJECT THE FLAWED TRUST THE EXIT MEMORY ENCODED">
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
:root { --void: #05080a; --steel: #8c9bb5; --fire: #ff4d00; --ghost: rgba(255,255,255,0.1); }
body{margin:0;background:var(--void);color:var(--steel);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}
/* ACT 1: HOST STAND */
#s1 .line{height:2px;background:linear-gradient(90deg,transparent,var(--steel));width:0;transition:width 2s ease-out}
#s1 .node{width:40px;height:40px;border:2px solid var(--steel);border-radius:50%;box-shadow:0 0 30px var(--steel)}
/* ACT 2: FLOOR */
#s2 .grid{display:grid;grid-template-columns:repeat(12,1fr);gap:20px;opacity:0}
#s2 .cell{border:1px solid var(--ghost);padding:20px;transition:border-color 0.5s}
/* ACT 3: PASS */
#s3 .plate{width:300px;height:300px;border-radius:50%;border:4px dashed var(--steel);animation:spin 20s linear infinite}
#s3 .knife{width:600px;height:4px;background:var(--fire);position:absolute;transform-origin:left;transform:rotate(-15deg)}
/* ACT 4: EXIT */
#s4 .echo{font-size:20vw;font-weight:bold;letter-spacing:10vw;opacity:0}
@keyframes spin { to { transform: rotate(360deg); } }
</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="60">
<!-- 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="voice-s4" src="audio/s4.wav" data-start="45"></audio>
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
<!-- SCENE 1: THE HOST STAND (0-15s) -->
<section id="s1" class="clip" data-start="0" data-duration="15" data-track-index="1">
<div style="position:relative;top:-10%">
<div class="line" id="s1-line"></div>
<div class="node" id="s1-node" style="margin-top:-20px;left:calc(50% - 20px)"></div>
</div>
<h1 id="s1-title" style="margin-top:100px;font-size:6vw;">THE HOST STAND</h1>
<p id="s1-sub" style="font-size:2vw;margin-top:20px;opacity:0">THE FIRST VECTOR</p>
</section>
<!-- SCENE 2: THE FLOOR (15-30s) -->
<section id="s2" class="clip" data-start="15" data-duration="15" data-track-index="1">
<div class="grid" id="s2-grid" style="width:80vw;height:60vh;margin:auto">
<!-- 12 cells generated by GSAP -->
</div>
<h1 id="s2-title" style="z-index:10;font-size:6vw;">THE FLOOR</h1>
<p id="s2-sub" style="z-index:10;font-size:2vw;margin-top:20px;opacity:0">ROUTING INTENT</p>
</section>
<!-- SCENE 3: THE PASS (30-45s) -->
<section id="s3" class="clip" data-start="30" data-duration="15" data-track-index="1">
<div style="position:relative">
<div class="plate" id="s3-plate"></div>
<div class="knife" id="s3-knife" style="left:50%;top:50%"></div>
</div>
<h1 id="s3-title" style="margin-top:150px;font-size:6vw;">THE PASS</h1>
<p id="s3-sub" style="font-size:2vw;margin-top:20px;opacity:0">REJECT THE FLAWED</p>
</section>
<!-- SCENE 4: THE EXIT (45-60s) -->
<section id="s4" class="clip" data-start="45" data-duration="15" data-track-index="1">
<div class="echo" id="s4-echo">TRUST</div>
<h1 id="s4-title" style="font-size:6vw;margin-top:100px;">THE EXIT</h1>
<p id="s4-sub" style="font-size:2vw;margin-top:20px;opacity:0">MEMORY ENCODED</p>
</section>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
// SCENE 1: HOST STAND
tl.to("#s1-title", { opacity: 1, duration: 1, ease: "power2.inOut" }, 0.5);
tl.to("#s1-line", { width: "80%", duration: 3, ease: "expo.out" }, 1);
tl.to("#s1-node", { boxShadow: "0 0 60px var(--steel)", borderColor: "#fff", duration: 1 }, 2);
tl.to("#s1-sub", { opacity: 1, y: 0, duration: 1 }, 4);
// SCENE 2: FLOOR
tl.to("#s2-title", { opacity: 1, duration: 1 }, 15.5);
tl.to("#s2-grid", { opacity: 1, duration: 2 }, 16);
// Populate grid
let cells = [];
for(let i=0;i<12;i++) {
let cell = document.createElement('div');
cell.className='cell';
cell.id='s2-cell-'+i;
document.getElementById('s2-grid').appendChild(cell);
cells.push(cell);
}
tl.to(cells, {
stagger: 0.2,
borderColor: "#fff",
backgroundColor: "rgba(255,255,255,0.05)",
padding: "30px",
duration: 0.5
}, 17);
tl.to("#s2-sub", { opacity: 1, duration: 1 }, 20);
// SCENE 3: PASS
tl.to("#s3-title", { opacity: 1, duration: 1 }, 30.5);
tl.to("#s3-plate", { rotation: 360, duration: 15, ease: "none" }, 31);
tl.to("#s3-knife", { x: 0, scaleX: 1.5, duration: 0.2, ease: "power4.inOut" }, 35); // The cut
tl.to("#s3-plate", { borderStyle: "solid", borderColor: "var(--fire)", duration: 0.1 }, 35.2); // Rejection
tl.to("#s3-sub", { opacity: 1, duration: 1 }, 36);
// SCENE 4: EXIT
tl.to("#s4-title", { opacity: 1, duration: 1 }, 45.5);
tl.to("#s4-echo", { opacity: 1, letterSpacing: "15vw", scale: 1.2, duration: 4, ease: "expo.out" }, 47);
tl.to("#s4-sub", { opacity: 1, duration: 1 }, 50);
tl.to("#s4-echo", { opacity: 0, duration: 1 }, 58); // Fade out
window.__timelines["main"] = tl;
</script>
</body></html>