<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<style>
*{box-sizing:border-box;margin:0;padding:0}
html,body{width:100%;height:100%;overflow:hidden;background:#000}
#stage{position:absolute;left:50%;top:50%;width:1920px;height:1080px;overflow:hidden;transform-origin:center;font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
:where(#stage *){position:absolute}
:where(#stage pre *){position:static}
#stage{background:#f6f5f2;color:#16181d}
.ui{left:260px;top:150px;width:1400px;height:780px;border-radius:16px;background:#fff;box-shadow:0 30px 80px -30px #0004;overflow:hidden;transform-origin:0 50%}
.chrome{left:0;top:0;right:0;height:48px;background:#f0efec}.chrome i{top:18px;width:12px;height:12px;border-radius:50%;background:#d8d6d0}
.side{left:0;top:48px;width:260px;bottom:0;background:#faf9f7;border-right:1px solid #eee}
.side b{left:28px;height:18px;border-radius:9px;background:#e6e4df}
.btn{left:1150px;top:84px;padding:16px 28px;border-radius:12px;background:#2f6fed;color:#fff;font-size:22px;font-weight:700;overflow:hidden}
.rip{left:50%;top:50%;width:20px;height:20px;margin:-10px;border-radius:50%;background:#fff8}
.row{left:300px;width:540px;height:76px;border-radius:12px;border:1px solid #eee;background:#fff;padding:18px 22px;font-size:22px;font-weight:600}
.row s{left:auto;right:22px;top:24px;text-decoration:none;font-size:16px;padding:4px 10px;border-radius:8px;background:#eef3fe;color:#2f6fed;font-weight:700}
.pan{left:880px;top:150px;width:480px;height:0;border-radius:14px;border:1px solid #dfe7fb;background:#f7f9ff;overflow:hidden}
.pan h4{left:24px;top:20px;font-size:24px}
.rule{left:24px;width:432px;height:64px;border-radius:10px;background:#fff;border:1px solid #e3e9f8;padding:18px;font-size:19px}
.cur{left:0;top:0;width:38px;height:54px}
.hl{left:1130px;width:720px;font-size:84px;font-weight:800;letter-spacing:-.03em;line-height:1.05;overflow:hidden;height:92px}
.hl span{left:0;top:0;white-space:nowrap}
.brand{right:70px;bottom:56px;left:auto;top:auto;font-size:30px;font-weight:800}
</style></head><body><div id="stage"><div class="ui" id="ui"><div class="chrome"><i style="left:20px"></i><i style="left:40px"></i><i style="left:60px"></i></div>
<div class="side"><b style="top:40px;width:150px"></b><b style="top:84px;width:136px"></b><b style="top:128px;width:122px"></b><b style="top:172px;width:108px"></b><b style="top:216px;width:94px"></b></div>
<div class="btn" id="btn">Create rule<div class="rip" id="rip"></div></div>
<div class="row" id="r0" style="top:150px">Invoice from Stripe<s>Finance</s></div><div class="row" id="r1" style="top:242px">Team standup notes<s>Team</s></div><div class="row" id="r2" style="top:334px">Newsletter: Weekly<s>Later</s></div><div class="row" id="r3" style="top:426px">Customer: refund?<s>Support</s></div><div class="row" id="r4" style="top:518px">Calendar invite<s>Calendar</s></div>
<div class="pan" id="pan"><h4>Smart Rules</h4><div class="rule" style="top:70px">If sender is Stripe → Finance</div><div class="rule" style="top:146px">If subject has “refund” → Support</div><div class="rule" style="top:222px">Newsletters → Later</div></div>
</div>
<svg class="cur" id="cur" viewBox="0 0 24 34"><path d="M2 2 L2 28 L9 21 L14 32 L18 30 L13 19.5 L22 19.5 Z" fill="#111" stroke="#fff" stroke-width="2"/></svg>
<div class="hl" id="h0" style="top:430px"><span>Your inbox sorts</span></div><div class="hl" id="h1" style="top:525px"><span>itself now.</span></div>
<div class="brand" id="brand">Ledgerly</div></div>
<script>
var W=1920,H=1080,D=10;
var E={
o3:function(t){return 1-Math.pow(1-t,3)},
o4:function(t){return 1-Math.pow(1-t,4)},
oe:function(t){return t>=1?1:1-Math.pow(2,-10*t)},
io3:function(t){return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2},
io5:function(t){return t<.5?16*Math.pow(t,5):1-Math.pow(-2*t+2,5)/2},
ob:function(t){var c=1.2,d=c+1;return 1+d*Math.pow(t-1,3)+c*Math.pow(t-1,2)},
sp:function(t){return t>=1?1:1-Math.exp(-6*t)*Math.cos(9*t)}
};
function P(t,a,b){return Math.max(0,Math.min(1,(t-a)/(b-a)))}
function L(a,b,p){return a+(b-a)*p}
function $(s){return document.querySelector(s)}
function $$(s){return [].slice.call(document.querySelectorAll(s))}
function S(el,x,y,s,o,r){el.style.transform='translate('+(x||0)+'px,'+(y||0)+'px) scale('+(s==null?1:s)+')'+(r?' rotate('+r+'deg)':'');if(o!=null)el.style.opacity=o}
function rnd(i){var x=Math.sin(i*127.1+311.7)*43758.5453;return x-Math.floor(x)}
function fit(){var k=Math.min(innerWidth/W,innerHeight/H);$('#stage').style.transform='translate(-50%,-50%) scale('+k+')'}
addEventListener('resize',fit);fit();
var order=[0,1,2,3,4], target=[3,0,4,1,2];
function bez(a,b,c,d,p){var q=1-p;return q*q*q*a+3*q*q*p*b+3*q*p*p*c+p*p*p*d}
function render(t){
var u=E.o3(P(t,0,.8)), cam=E.io3(P(t,6.5,7.3));
$('#ui').style.opacity=u;$('#ui').style.transform='translate('+(-200*cam)+'px,'+(24*(1-u))+'px) scale('+L(1,.8,cam)+')';
var p=E.io3(P(t,1.5,3.2)); var bx=260+1150+90, by=150+84+30;
var x=bez(1880,1700,1600,bx,p), y=bez(1080,700,200,by,p);
if(t>=6.5){x+=L(0,-200,cam)-(bx-260)*(1-L(1,.8,cam));y+=0}
var click=t>=3.2&&t<3.28?.9:1;
var cur=$('#cur');cur.style.transform='translate('+x+'px,'+y+'px) scale('+click+')';cur.style.opacity=P(t,1.4,1.6)*(1-P(t,6.4,6.6));
var r=P(t,3.2,3.6);$('#rip').style.transform='scale('+(r*12)+')';$('#rip').style.opacity=r>0&&r<1?1-r:0;
$('#btn').style.filter=t>=3.2&&t<3.4?'brightness(.92)':'none';
var ex=E.oe(P(t,3.6,4.2));$('#pan').style.height=(330*ex)+'px';
$$('.rule').forEach(function(rl,i){var q=E.o3(P(t,3.9+i*.12,4.3+i*.12));rl.style.opacity=q;rl.style.transform='translateY('+(10*(1-q))+'px)'});
var m=E.io3(P(t,4.6,5.05));
for(var i=0;i<5;i++){$('#r'+i).style.transform='translateY('+((target[i]-i)*92*m)+'px)'}
$$('#ui .row,#ui .side,#ui .btn').forEach(function(e){e.style.opacity=t>6.5?L(1,.5,cam):1});
[0,1].forEach(function(i){var q=E.oe(P(t,7+i*.1,7.6+i*.1));$('#h'+i+' span').style.transform='translateY('+(100*(1-q))+'%)'});
$('#brand').style.opacity=P(t,7.6,8);
}
var live=true;
window.__addmotion={width:W,height:H,fps:30,duration:D,seek:function(t){live=false;render(Math.min(t,D))}};
var t0=performance.now();
(function f(n){if(!live)return;var c=((n-t0)/1000)%(D+0.6);render(Math.min(c,D));requestAnimationFrame(f)})(t0);
</script></body></html>