PageSourceSearch

https://www.brexy.ai/products-animations.js?v=

js brexy.ai collected 2026-10-05 11:52:55 UTC 22,781 bytes, 478 lines download raw bytes

1(function() {
2  function run() {
3(function(){
4  // BOX 2: Doc → Memo animation
5  var s1=document.getElementById('htwS1');
6  var s2=document.getElementById('htwS2');
7  var fill=document.getElementById('htwFill2');
8  if(s1&&s2){
9    function show1(){
10      s2.style.display='none';
11      s1.style.display='flex';
12      if(fill){fill.style.transition='none';fill.style.width='0%';setTimeout(function(){fill.style.transition='width 2.5s ease';fill.style.width='100%';},50);}
13      setTimeout(show2,3500);
14    }
15    function show2(){
16      s1.style.display='none';
17      s2.style.display='flex';
18      setTimeout(show1,5000);
19    }
20    show1();
21  }
22
23  // BOX 1: Query → agent highlight (defined FIRST)
24  var agentMap={0:'ac-deal-screener',1:'ac-cim-analysis',2:'ac-financial-model',3:'ac-ic-memo'};
25  function highlightAgent(id){
26    var card=document.getElementById(id);
27    if(!card)return;
28    card.style.transition='all .3s ease';
29    card.style.background='#eff6ff';
30    card.style.borderColor='rgba(59,130,246,.5)';
31    card.style.transform='translateY(-2px)';
32    card.style.boxShadow='0 0 0 3px rgba(59,130,246,.2),0 4px 12px rgba(59,130,246,.2)';
33    setTimeout(function(){
34      card.style.background='#fff';
35      card.style.borderColor='rgba(0,0,0,.08)';
36      card.style.transform='';
37      card.style.boxShadow='';
38    },2800);
39  }
40
41  // BOX 1: Typing animation
42  var q=['Find PE targets in healthcare with £50M EBITDA...','Analyse Project Alpha CIM and flag risks...','Build LBO model at 6x entry...','Draft Deal memo for the board...'];
43  var qi=0,ci=0,del=false,el=document.getElementById('htwQuery');
44  if(el){
45    (function t(){
46      var s=q[qi];
47      if(!del){
48        el.textContent=s.slice(0,ci+1);ci++;
49        if(ci===1&&agentMap[qi])highlightAgent(agentMap[qi]);
50        if(ci>=s.length){setTimeout(function(){del=true;t();},2200);return;}
51        setTimeout(t,45+Math.random()*25);
52      } else {
53        el.textContent=s.slice(0,ci-1);ci--;
54        if(ci<=0){del=false;qi=(qi+1)%q.length;ci=0;setTimeout(t,400);return;}
55        setTimeout(t,18);
56      }
57    })();
58  }
59
60  // BOX 1: Random agent processing
61  var allAgents=['ac-deal-screener','ac-financial-model','ac-ic-memo','ac-legal-review','ac-cim-analysis','ac-valuation','ac-risk-assess','ac-credit-analysis','ac-esg-monitor'];
62  function randomProcess(){
63    var idx=Math.floor(Math.random()*allAgents.length);
64    var card=document.getElementById(allAgents[idx]);
65    if(!card)return;
66    var badge=card.querySelector('span');
67    if(!badge)return;
68    var origText=badge.textContent,origBg=badge.style.background,origColor=badge.style.color;
69    badge.textContent='Running';badge.style.background='rgba(251,191,36,.18)';badge.style.color='#fbbf24';badge.style.animation='acPulse 1s ease-in-out infinite';
70    card.style.transition='border-color .3s';card.style.borderColor='rgba(251,191,36,.35)';
71    setTimeout(function(){badge.textContent=origText;badge.style.background=origBg;badge.style.color=origColor;badge.style.animation='';card.style.borderColor='rgba(0,0,0,.08)';},2500);
72    setTimeout(randomProcess,3000+Math.random()*4000);
73  }
74  setTimeout(randomProcess,2000);
75
76  // BOX 1: Stagger entrance
77  allAgents.forEach(function(id,i){
78    var card=document.getElementById(id);
79    if(card){card.style.opacity='0';card.style.transform='translateY(8px)';setTimeout(function(){card.style.transition='opacity .4s ease,transform .4s ease';card.style.opacity='1';card.style.transform='translateY(0)';},300+i*80);}
80  });
81})();
82
83(function(){
84  var hub = document.getElementById('ic-hub');
85  var svg = document.getElementById('ic-svg');
86  if(!hub || !svg) return;
87
88  var container = hub.parentElement;
89  var W = container.offsetWidth || 363;
90  var H = container.offsetHeight || 270;
91  var hx = W/2, hy = H/2;
92
93  hub.style.left = (hx-36)+'px';
94  hub.style.top  = (hy-36)+'px';
95
96  var nodes = Array.from(container.querySelectorAll('.ic-node')).filter(function(n){ return n.offsetParent !== null; });
97  var count = nodes.length;
98  var r = Math.min(W,H)*0.36;
99  var rotAngle = 0;
100
101  // Disable heavy rotation animation on mobile to prevent page hangs
102  var isMobile = window.matchMedia && window.matchMedia('(max-width: 768px)').matches;
103  if(isMobile){
104    var positions=[];
105    for(var i=0;i<count;i++){
106      var a = (i/count)*2*Math.PI - Math.PI/2;
107      positions.push({ x: hx+r*Math.cos(a), y: hy+r*Math.sin(a) });
108    }
109    nodes.forEach(function(node,i){
110      var p = positions[i];
111      node.style.left=(p.x-32)+'px';
112      node.style.top=(p.y-32)+'px';
113      node.style.opacity='1';
114      node.style.transform='scale(1)';
115    });
116    return;
117  }
118
119  // Entrance fade
120  nodes.forEach(function(node,i){
121    node.style.opacity='0';
122    node.style.transform='scale(0.5)';
123    setTimeout(function(){
124      node.style.transition='opacity .4s ease,transform .4s ease';
125      node.style.opacity='1';
126      node.style.transform='scale(1)';
127    }, 300+i*80);
128    node.addEventListener('mouseenter',function(){this.style.transform='scale(1.15)';this.style.boxShadow='0 4px 16px rgba(0,0,0,.15)';});
129    node.addEventListener('mouseleave',function(){this.style.transform='scale(1)';this.style.boxShadow='';});
130  });
131
132  // Get positions at current rotation
133  function getPositions(angle){
134    return nodes.map(function(_,i){
135      var a = angle + (i/count)*2*Math.PI;
136      return { x: hx+r*Math.cos(a), y: hy+r*Math.sin(a) };
137    });
138  }
139
140  // Draw lines
141  var lines = nodes.map(function(){
142    var l = document.createElementNS('http://www.w3.org/2000/svg','line');
143    l.setAttribute('stroke','rgba(0,0,0,.1)');
144    l.setAttribute('stroke-width','1.5');
145    l.setAttribute('stroke-dasharray','4 4');
146    svg.appendChild(l);
147    return l;
148  });
149
150  // Travelling dots
151  var activeDots = [];
152  function spawnDot(p, node){
153    var dot = document.createElementNS('http://www.w3.org/2000/svg','circle');
154    dot.setAttribute('r','3.5');
155    dot.setAttribute('fill','#000');
156    svg.appendChild(dot);
157    var start=Date.now(), dur=800+Math.random()*400;
158    activeDots.push({dot:dot,start:start,dur:dur,px:p.x,py:p.y,node:node});
159  }
160
161  // Main loop: rotate + update lines + animate dots
162  function loop(){
163    rotAngle += 0.003; // rotation speed
164    var positions = getPositions(rotAngle - Math.PI/2);
165
166    // Update node positions + lines
167    nodes.forEach(function(node,i){
168      var p = positions[i];
169      node.style.left=(p.x-32)+'px';
170      node.style.top=(p.y-32)+'px';
171      lines[i].setAttribute('x1',hx); lines[i].setAttribute('y1',hy);
172      lines[i].setAttribute('x2',p.x); lines[i].setAttribute('y2',p.y);
173    });
174
175    // Update travelling dots
176    var now = Date.now();
177    activeDots = activeDots.filter(function(d){
178      var t = Math.min((now-d.start)/d.dur,1);
179      var e = t<.5?2*t*t:-1+(4-2*t)*t;
180      d.dot.setAttribute('cx', hx+(d.px-hx)*e);
181      d.dot.setAttribute('cy', hy+(d.py-hy)*e);
182      d.dot.setAttribute('opacity', t<0.1?t*10*0.8:t>0.85?(1-t)/0.15*0.8:0.8);
183      if(t>=1){
184        svg.removeChild(d.dot);
185        d.node.style.background='#f0fdf4';
186        d.node.style.borderColor='rgba(34,197,94,.5)';
187        setTimeout(function(){d.node.style.background='#fff';d.node.style.borderColor='rgba(0,0,0,.08)';},500);
188        return false;
189      }
190      return true;
191    });
192
193    requestAnimationFrame(loop);
194  }
195  loop();
196
197  // Spawn dots continuously
198  var dotIdx=0;
199  function nextDot(){
200    var positions=getPositions(rotAngle-Math.PI/2);
201    spawnDot(positions[dotIdx%count], nodes[dotIdx%count]);
202    dotIdx++;
203    setTimeout(nextDot, 350+Math.random()*500);
204  }
205  setTimeout(nextDot, 800);
206})();
207
208(function(){
209  var items = Array.from(document.querySelectorAll('.wf-item'));
210  if(!items.length) return;
211
212  // Stagger entrance slide up + fade
213  items.forEach(function(el,i){
214    el.style.opacity='0';
215    el.style.transform='translateY(12px)';
216    setTimeout(function(){
217      el.style.transition='opacity .45s ease,transform .45s ease';
218      el.style.opacity='1';
219      el.style.transform='translateY(0)';
220    }, 150 + i*70);
221  });
222
223  // Active sweep animation
224  var activeIdx = 0;
225  function runSweep(el){
226    var sweep = el.querySelector('.wf-sweep');
227    if(!sweep) return;
228    sweep.style.transition='transform .6s ease';
229    sweep.style.transform='translateX(200%)';
230    setTimeout(function(){ sweep.style.transition='none'; sweep.style.transform='translateX(-100%)'; },650);
231  }
232
233  function activate(idx){
234    items.forEach(function(el,i){
235      var icon = el.querySelector('div');
236      var title = el.querySelector('.wf-item > div > div');
237      if(i===idx){
238        el.style.background='#f0fdf4';
239        el.style.borderColor='rgba(22,163,74,.3)';
240        el.style.transform='translateX(4px)';
241        el.style.boxShadow='0 2px 10px rgba(22,163,74,.1)';
242        if(icon){ icon.style.background='rgba(22,163,74,.15)'; }
243        runSweep(el);
244      } else {
245        el.style.background='#fff';
246        el.style.borderColor='rgba(0,0,0,.07)';
247        el.style.transform='translateX(0)';
248        el.style.boxShadow='';
249        if(icon){ icon.style.background = i<5?'rgba(22,163,74,.1)':'rgba(0,0,0,.04)'; }
250      }
251    });
252    activeIdx = (idx+1)%items.length;
253    setTimeout(function(){ activate(activeIdx); }, 1600);
254  }
255
256  setTimeout(function(){ activate(0); }, 900);
257
258  // Hover
259  items.forEach(function(el){
260    el.addEventListener('mouseenter',function(){ this.style.borderColor='rgba(0,0,0,.15)'; this.style.boxShadow='0 2px 8px rgba(0,0,0,.07)'; });
261    el.addEventListener('mouseleave',function(){ this.style.borderColor='rgba(0,0,0,.07)'; this.style.boxShadow=''; });
262  });
263})();
264
265(function(){
266  var wfp4Colors=['#ef4444','#3b82f6','#10b981','#8b5cf6','#f59e0b','#14b8a6','#f43f5e','#60a5fa'];
267  var wfp4Data=[{name:'Deal Screening',tag:'Banking · PE/VC',time:'2 hrs saved',steps:'8 steps',firms:'340+ firms',desc:'Screen targets against your mandate financials, sector, size and growth filters applied instantly.',path:'M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2'},{name:'CIM Analysis',tag:'PE/VC · M&A',time:'4 hrs saved',steps:'12 steps',firms:'180+ firms',desc:'Deep-read CIMs end-to-end. Revenue quality, risks and red flags surfaced with full citations.',path:'M9 19v-6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2zm0 0V9a2 2 0 0 0 2-2h2a2 2 0 0 0 2 2v10'},{name:'Financial Model',tag:'All firms',time:'6 hrs saved',steps:'15 steps',firms:'290+ firms',desc:'Build LBO and DCF models from raw financials. Assumptions auto-populated from historical data.',path:'M12 8v4l3 3m6-3a9 9 0 1 1-18 0 9 9 0 0 1 18 0z'},{name:'Deal Memo Draft',tag:'PE/VC · Banking',time:'5 hrs saved',steps:'10 steps',firms:'210+ firms',desc:'Draft deal memos with every number traced back to source documents.',path:'M9 12h6m-6 4h6m2 5H7a2 2 0 0 0-2-2V5a2 2 0 0 0 2-2h5.586a1 1 0 0 1 .707.293l5.414 5.414a1 1 0 0 1 .293.707V19a2 2 0 0 0-2 2z'},{name:'Legal Review',tag:'All firms',time:'3 hrs saved',steps:'9 steps',firms:'160+ firms',desc:'Extract key terms, covenants and risks from agreements. Flag unusual clauses automatically.',path:'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0 1 12 2.944a11.955 11.955 0 0 1-8.618 3.04A12.02 12.02 0 0 0 3 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z'},{name:'LP Reporting',tag:'Family Office',time:'3 hrs saved',steps:'7 steps',firms:'120+ firms',desc:'Generate LP reports from portfolio data. Customise per investor and sync to your CRM.',path:'M17 9V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2m2 4h10a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2z'},{name:'Portfolio Monitor',tag:'Wealth · PE',time:'1 hr saved',steps:'5 steps',firms:'90+ firms',desc:'Track portfolio company performance against targets. Alert on covenant breaches and key events.',path:'M13 10V3L4 14h7v7l9-11h-7z'},{name:'DD Report',tag:'M&A · PE/VC',time:'8 hrs saved',steps:'18 steps',firms:'150+ firms',desc:'Full due diligence report from data room. Legal, financial and commercial diligence in one workflow.',path:'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2z'}];
268  var items = document.querySelectorAll('.wfp4-item');
269  var preview = document.getElementById('wfp4-preview');
270  if(!items.length || !preview) return;
271
272  function setActive(idx){
273    items.forEach(function(el,i){
274      if(i===idx){
275        var c=wfp4Colors[idx]||'#16a34a';
276        el.style.background=c+'18';
277        el.style.border='1px solid '+c+'44';
278      } else {
279        el.style.background='transparent';
280        el.style.border='1px solid transparent';
281      }
282    });
283    renderPreview(idx);
284  }
285
286  function renderPreview(idx){
287    var d=wfp4Data[idx];
288    preview.style.opacity='0';
289    preview.style.transform='translateX(6px)';
290    preview.style.transition='none';
291    setTimeout(function(){
292      preview.innerHTML=
293        '<div style="background:#f9f9f9;border-radius:10px;padding:12px;flex-shrink:0">'+
294          '<div style="display:flex;align-items:center;gap:8px;margin-bottom:10px">'+
295            '<div style="width:26px;height:26px;border-radius:7px;background:'+(wfp4Colors[idx]||'#16a34a')+'18;display:flex;align-items:center;justify-content:center">'+
296              '<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="'+(wfp4Colors[idx]||'#16a34a')+'" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="'+d.path+'"/></svg>'+
297            '</div>'+
298            '<div>'+
299              '<div style="font-size:12px;font-weight:600;color:#000">'+d.name+'</div>'+
300              '<div style="font-size:10px;color:rgba(0,0,0,.4)">'+d.tag+'</div>'+
301            '</div>'+
302          '</div>'+
303          '<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:6px">'+
304            '<div style="background:#fff;border-radius:7px;padding:7px;text-align:center;border:1px solid rgba(0,0,0,.07)"><div style="font-size:12px;font-weight:600;color:#16a34a">'+d.time+'</div><div style="font-size:9px;color:rgba(0,0,0,.4);margin-top:1px">per run</div></div>'+
305            '<div style="background:#fff;border-radius:7px;padding:7px;text-align:center;border:1px solid rgba(0,0,0,.07)"><div style="font-size:12px;font-weight:600;color:#000">'+d.steps+'</div><div style="font-size:9px;color:rgba(0,0,0,.4);margin-top:1px">automated</div></div>'+
306            '<div style="background:#fff;border-radius:7px;padding:7px;text-align:center;border:1px solid rgba(0,0,0,.07)"><div style="font-size:12px;font-weight:600;color:#000">'+d.firms+'</div><div style="font-size:9px;color:rgba(0,0,0,.4);margin-top:1px">using this</div></div>'+
307          '</div>'+
308        '</div>'+
309        '<div style="font-size:11px;color:rgba(0,0,0,.55);line-height:1.65;flex:1">'+d.desc+'</div>'+
310        '<div style="display:flex;align-items:center;justify-content:space-between;padding:9px 12px;background:#f5f5f5;border-radius:8px;flex-shrink:0;cursor:pointer">'+
311          '<span style="font-size:11px;font-weight:600;color:#000">
311Run workflow</span>'+
312          '<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>'+
313        '</div>';
314      preview.style.transition='opacity .3s ease,transform .3s ease';
315      preview.style.opacity='1';
316      preview.style.transform='translateX(0)';
317    },80);
318  }
319
320  items.forEach(function(el){
321    el.addEventListener('click',function(){ setActive(parseInt(this.dataset.idx)); });
322  });
323
324  setActive(0);
325  var autoIdx=0;
326  setInterval(function(){
327    autoIdx=(autoIdx+1)%5;
328    setActive(autoIdx);
329  },2200);
330})();
331
332(function(){
333  var kbItems=[
334    {label:'Deal Terms',  color:'#ef4444',icon:'M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2'},
335    {label:'KYC Policy',  color:'#3b82f6',icon:'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0 1 12 2.944a11.955 11.955 0 0 1-8.618 3.04A12.02 12.02 0 0 0 3 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z'},
336    {label:'Risk Models', color:'#8b5cf6',icon:'M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM12 9v4'},
337    {label:'Client Data', color:'#f59e0b',icon:'M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z'},
338    {label:'Market Data', color:'#10b981',icon:'M9 19v-6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2zm0 0V9a2 2 0 0 0 2-2h2a2 2 0 0 0 2 2v10'},
339    {label:'Compliance',  color:'#14b8a6',icon:'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10zM9 12l2 2 4-4'},
340  ];
341  var grid=document.getElementById('b5kb');
342  if(!grid)return;
343  var kbEls=[];
344  kbItems.forEach(function(k,i){
345    var el=document.createElement('div');
346    el.style.cssText='background:'+k.color+'12;border:1px solid '+k.color+'25;border-radius:9px;padding:10px 8px;display:flex;flex-direction:column;align-items:center;gap:5px;opacity:0;transform:translateY(8px);transition:opacity .35s ease,transform .35s ease,background .2s,box-shadow .2s;cursor:default';
347    el.innerHTML='<div style="width:28px;height:28px;border-radius:8px;background:'+k.color+'20;display:flex;align-items:center;justify-content:center"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="'+k.color+'" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="'+k.icon+'"/></svg></div><div style="font-size:9px;font-weight:600;color:'+k.color+';text-align:center;line-height:1.2">'+k.label+'</div>';
348    el.addEventListener('mouseenter',function(){this.style.background=k.color+'22';this.style.boxShadow='0 3px 10px '+k.color+'25';});
349    el.addEventListener('mouseleave',function(){this.style.background=k.color+'12';this.style.boxShadow='';});
350    grid.appendChild(el);kbEls.push(el);
351    setTimeout(function(){el.style.opacity='1';el.style.transform='translateY(0)';},300+i*100);
352  });
353
354  // Training bar
355  var tb=document.getElementById('b5tb'),pct=0,dir=1;
356  setInterval(function(){pct+=dir*1.4;if(pct>=100)dir=-1;if(pct<=0)dir=1;tb.style.width=Math.max(0,Math.min(100,pct))+'%';},30);
357
358  // Arrow dots
359  function animDot(id,delay){
360    var d=document.getElementById(id);if(!d)return;
361    function go(){d.style.transition='none';d.style.left='-7px';setTimeout(function(){d.style.transition='left .65s linear';d.style.left='30px';setTimeout(go,950+Math.random()*300);},60);}
362    setTimeout(go,delay);
363  }
364  animDot('b5ad1',400);animDot('b5ad2',900);
365
366  // Training pulse
367  var tr=document.getElementById('b5train');
368  setInterval(function(){if(tr){tr.style.boxShadow='0 0 0 3px rgba(0,0,0,.1)';setTimeout(function(){tr.style.boxShadow='';},600);}},2000);
369
370  // Agent glow
371  var ag=document.getElementById('b5agent');
372  setInterval(function(){if(ag){ag.style.borderColor='#8b5cf6';ag.style.boxShadow='0 0 0 3px rgba(139,92,246,.15)';setTimeout(function(){ag.style.borderColor='rgba(0,0,0,.08)';ag.style.boxShadow='';},700);}},2800);
373
374  // KB pulse
375  function pulseKb(){var i=Math.floor(Math.random()*kbEls.length);var c=kbItems[i].color;kbEls[i].style.background=c+'28';kbEls[i].style.boxShadow='0 3px 12px '+c+'30';setTimeout(function(){kbEls[i].style.background=c+'12';kbEls[i].style.boxShadow='';},800);setTimeout(pulseKb,1200+Math.random()*1000);}
376  setTimeout(pulseKb,1500);
377})();
378
379(function(){
380  function easeOut(t){return 1-Math.pow(1-t,3);}
381
382  var barDefs=[
383    {id:'b-DD-Report',      vid:'bv-DD-Report',      hrs:14,pct:100},
384    {id:'b-Financial-Model',vid:'bv-Financial-Model', hrs:10,pct:71},
385    {id:'b-CIM-Analysis',   vid:'bv-CIM-Analysis',   hrs:12,pct:86},
386    {id:'b-IC-Memo-Draft',  vid:'bv-IC-Memo-Draft',  hrs:8, pct:57},
387    {id:'b-Legal-Review',   vid:'bv-Legal-Review',   hrs:6, pct:43},
388  ];
389
390  function shine(bar){
391    var s=bar.querySelector('.b6shine');
392    if(!s)return;
393    s.style.transition='transform .5s ease';
394    s.style.transform='translateX(200%)';
395    setTimeout(function(){s.style.transition='none';s.style.transform='translateX(-100%)';},600);
396  }
397
398  function animateBars(delay){
399    barDefs.forEach(function(bd,i){
400      var bar=document.getElementById(bd.id);
401      var val=document.getElementById(bd.vid);
402      if(!bar||!val)return;
403      bar.style.width='0%'; val.textContent='0 hrs';
404      setTimeout(function(){
405        var start=Date.now(),dur=800+i*100;
406        var iv=setInterval(function(){
407          var t=Math.min((Date.now()-start)/dur,1),e=easeOut(t);
408          bar.style.width=(e*bd.pct)+'%';
409          val.textContent=Math.round(e*bd.hrs)+' hrs';
410          if(t>=1){clearInterval(iv);shine(bar);}
411        },16);
412      },delay+i*120);
413    });
414  }
415
416  function countUp(id,cardId,target,suffix,dur,delay){
417    var el=document.getElementById(id),card=document.getElementById(cardId);
418    if(!el)return;
419    setTimeout(function(){
420      if(card){card.style.background='rgba(0,0,0,.06)';card.style.transform='scale(1.04)';}
421      var start=Date.now();
422      var iv=setInterval(function(){
423        var t=Math.min((Date.now()-start)/dur,1),e=easeOut(t);
424        el.textContent=Math.round(e*target)+suffix;
425        if(t>=1){clearInterval(iv);setTimeout(function(){if(card){card.style.background='#f9f9f9';card.style.transform='scale(1)';}},400);}
426      },16);
427    },delay);
428  }
429
430  function animateCost(delay){
431    var el=document.getElementById('b6cost');if(!el)return;
432    setTimeout(function(){
433      var target=480000,start=Date.now(),dur=1200;
434      var iv=setInterval(function(){
435        var t=Math.min((Date.now()-start)/dur,1),e=easeOut(t);
436        el.textContent='$'+Math.round(e*target/1000)+'K';
437        if(t>=1)clearInterval(iv);
438      },16);
439    },delay);
440  }
441
442  function runAll(){
443    animateBars(0);
444    countUp('b6s1','b6sc1',50,'',1000,200);
445    countUp('b6s2','b6sc2',21,'x',800,400);
446    countUp('b6s3','b6sc3',73,'%',1100,600);
447    animateCost(300);
448  }
449
450  runAll();
451
452  // Random bar shine
453  setInterval(function(){
454    var i=Math.floor(Math.random()*barDefs.length);
455    var bar=document.getElementById(barDefs[i].id);
456    if(bar)shine(bar);
457  },2500);
458
459  // Stat card pulse rotation
460  var si=0;
461  setInterval(function(){
462    var cards=['b6sc1','b6sc2','b6sc3'];
463    var el=document.getElementById(cards[si]);
464    if(el){el.style.background='rgba(0,0,0,.06)';el.style.transform='translateY(-2px)';setTimeout(function(){el.style.background='#f9f9f9';el.style.transform='translateY(0)';},600);}
465    si=(si+1)%3;
466  },1800);
467
468  // Full re-run every 8s
469  setInterval(runAll,8000);
470})();
471  }
472  function tryRun(n) {
473    if (document.querySelector('.prod-hero')) {
474      requestAnimationFrame(function(){ requestAnimationFrame(function(){ run(); }); });
475    } else if (n > 0) { setTimeout(function(){ tryRun(n-1); }, 50); }
476  }
477  tryRun(60);
478})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.