/* TowerSystem promo — timeline composition */ const DUR = 31; function TimecodeTagger() { const t = useTime(); React.useEffect(() => { const root = document.getElementById('video-root'); if (root) root.setAttribute('data-screen-label', `t=${t.toFixed(0)}s`); }, [Math.floor(t)]); return null; } // persistent small brand mark, appears after the intro function Watermark() { const t = useTime(); if (t < 4.6 || t > 27.4) return null; const op = clamp((t - 4.6) / 0.5, 0, 1) * (1 - clamp((t - 27.0) / 0.4, 0, 1)); return ( ); } // thin chapter progress ticks at the very bottom of the canvas function ProgressTicks() { const t = useTime(); const marks = [0, 4.5, 9, 14, 19, 24, 27.5, DUR]; return (
{marks.slice(0,-1).map((m,i)=>{ const seg = marks[i+1]-m; const fill = clamp((t-m)/seg,0,1); return
; })}
); } function App() { return ( ); } ReactDOM.createRoot(document.getElementById('root')).render();