{"id":9,"date":"2026-10-26T01:01:57","date_gmt":"2026-10-26T01:01:57","guid":{"rendered":"https:\/\/adaptpro.ai\/?page_id=9"},"modified":"2026-11-07T22:08:09","modified_gmt":"2026-11-07T22:08:09","slug":"adaptpro-homepage-draft","status":"publish","type":"page","link":"https:\/\/adaptpro.ai\/","title":{"rendered":"AdaptPro.ai"},"content":{"rendered":"<div class=\"boldgrid-section\">\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"mod-reset\">\n<style>\nhtml,body{margin:0!important;background:#060810!important;color:#f4f5ff;scroll-behavior:smooth}body{overflow:hidden!important}#wpadminbar,body>header,body>footer,.site-header,.site-footer,.entry-header,.page-title,.site-title,.site-description,.navigation,.sidebar,#secondary,.skip-link{display:none!important}html{margin-top:0!important}#page,#content,.site-content,.content-area,main,article,.entry-content,.container,.row{margin:0!important;padding:0!important;max-width:none!important;width:100%!important;border:0!important;background:transparent!important}.entry-content>p:empty{display:none}#adapt-experience{position:relative;isolation:isolate;height:100vh;height:100svh;background:#060810;font-family:Arial,Helvetica,sans-serif}#adapt-stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;background:radial-gradient(ellipse at 70% 45%,#131327 0%,#060810 65%);touch-action:pan-y}#adapt-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}#adapt-brand{position:absolute;z-index:3;top:9%;left:8%;margin:0;color:#f2f2f8;font-size:clamp(30px,5vw,76px);font-weight:400;letter-spacing:-.065em;line-height:1;pointer-events:none}#adapt-brand::after{content:\"\";display:block;width:32px;height:2px;background:#9c91ff;margin-top:26px;box-shadow:0 0 18px #9c91ff}#adapt-orbit{position:absolute;left:8%;bottom:9%;width:42px;height:64px;border:1px solid #ffffff25;border-radius:30px;pointer-events:none}#adapt-orbit::after{content:\"\";position:absolute;top:12px;left:19px;width:3px;height:10px;border-radius:4px;background:#c8befc;animation:adapt-down 2.4s infinite}#adapt-progress{position:absolute;right:5%;top:38%;height:24%;width:1px;background:#ffffff19}#adapt-progress i{display:block;width:3px;margin-left:-1px;height:8%;background:#b8a9ff;box-shadow:0 0 15px #9780ff;transition:height .15s}#adapt-pause{position:absolute;right:calc(5% - 19px);bottom:9%;width:40px;height:40px;border:1px solid #ffffff28;border-radius:50%;background:#0c102080;cursor:pointer;display:grid;place-items:center;padding:0;color:#e0dcff}#adapt-pause:focus-visible{outline:2px solid #b6a5ff;outline-offset:5px}#adapt-pause span{width:9px;height:11px;border-left:2px solid currentColor;border-right:2px solid currentColor}#adapt-pause[aria-pressed=\"true\"] span{border:0;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:9px solid currentColor}@keyframes adapt-down{0%,100%{transform:translateY(0);opacity:.3}50%{transform:translateY(22px);opacity:1}}@media(max-width:600px){#adapt-brand{top:7%;left:8%;font-size:40px}#adapt-orbit{transform:scale(.8);transform-origin:left bottom}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}#adapt-orbit::after{animation:none}}<br \/><\/style>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"adapt-experience\">\n<div id=\"adapt-stage\">\n<h1 id=\"adapt-brand\">AdaptPro.ai<\/h1>\n<div id=\"adapt-orbit\" aria-hidden=\"true\"><\/div>\n<div id=\"adapt-progress\" aria-hidden=\"true\"><i><\/i><\/div>\n<\/div>\n<\/div>\n<div class=\"boldgrid-section\">\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p><script> (function(){ \"use strict\"; const root=document.getElementById(\"adapt-experience\"),host=document.getElementById(\"adapt-stage\");if(!root||!host)return; host.querySelectorAll(\"canvas,button\").forEach(e=>e.remove()); const canvas=document.createElement(\"canvas\");canvas.id=\"adapt-canvas\";canvas.setAttribute(\"aria-hidden\",\"true\");host.prepend(canvas); const button=document.createElement(\"button\");button.id=\"adapt-pause\";button.type=\"button\";button.innerHTML=\"<span aria-hidden='true'><\/span>\";host.appendChild(button); const style=document.createElement(\"style\");style.textContent=\".goup-container{display:none!important}.article-wrapper{padding:0!important}html,body{margin-top:0!important;padding:0!important}.entry-content>div.boldgrid-section{height:0!important;min-height:0!important;overflow:hidden!important}#adapt-stage>p{display:none!important}#adapt-brand{opacity:0!important}#adapt-experience{height:100vh;height:100svh}#adapt-orbit,#adapt-progress,#adapt-pause{display:none!important}\";document.head.appendChild(style); const ctx=canvas.getContext(\"2d\");if(!ctx)return; const reduced=matchMedia(\"(prefers-reduced-motion: reduce)\").matches; let paused=reduced,w=0,h=0,clock=8000,openingRemaining=6000,elapsed=0,swarmAngle=0,swarmSpeed=.00045,spinDirection=1,spinAxis=1,last=0,raf=0,active=-1,kind=0,previous=-1,targets=[],name=[],glyphData=null,nodes=[],pulse=0,angle=0; const particlePalette=Array.from({length:75*52},(_,i)=>\"hsl(\"+(215+Math.floor(i\/52))+\",85%,\"+(43+i%52)+\"%)\"); const particleAtlas=document.createElement(\"canvas\");particleAtlas.width=75*12;particleAtlas.height=52*12;const atlasContext=particleAtlas.getContext(\"2d\");particlePalette.forEach((color,index)=>{const x=Math.floor(index\/52)*12+6,y=index%52*12+6;atlasContext.fillStyle=color;atlasContext.beginPath();atlasContext.arc(x,y,2.1,0,Math.PI*2);atlasContext.fill();}); const N=3600,TAU=Math.PI*2,pointer={x:-9999,y:-9999,speed:0,last:0,fear:0,trust:0},press={down:false,x:0,y:0,started:0,impulse:0,moved:false,revealed:false,keepUntil:0,blend:0},contactTargets=[],aiStars=[],particles=Array.from({length:N},(_,i)=>({x:0,y:0,z:0,dz:0,dx:0,dy:0,a:i*2.399963,r:Math.sqrt((i+.5)\/N),j:Math.random(),bgx:Math.random(),bgy:Math.random(),bgAngle:Math.random()*Math.PI*2,bgSpeed:.002+Math.random()*.005,bgRate:.3+Math.random()*1.7,bgPhase:Math.random()*Math.PI*2})); const smooth=v=>{v=Math.max(0,Math.min(1,v));return v*v*(3-2*v);}; function makeNodes(){nodes=Array.from({length:32},(_,i)=>{const a=i*2.399963;return{x:Math.cos(a)*Math.sqrt((i+1)\/32)*.82,y:Math.sin(a)*Math.sqrt((i+1)\/32)*.65};});} const shapeSampleCache=new Map(); function assignShapeSamples(samples){const ordered=Array.from({length:N},(_,i)=>i).sort((a,b)=>(particles[b].participationGoal||0)-(particles[a].participationGoal||0));targets=new Array(N);ordered.forEach((particleIndex,rank)=>{targets[particleIndex]=samples[Math.floor(((rank*.618033988749895)%1)*samples.length)]||{x:w\/2,y:h\/2};});} function makeShape(){ if(kind===0){const letters=name.filter(q=>q.star<0),stars=name.filter(q=>q.star>=0);targets=Array.from({length:N},(_,i)=>{const pool=i>=N-200?stars:letters;return pool[Math.floor(((i*.618033988749895)%1)*pool.length)]||{x:w\/2,y:h\/2};});return;} const cached=shapeSampleCache.get(kind);if(cached){assignShapeSamples(cached);return;} const mask=document.createElement(\"canvas\");mask.width=w;mask.height=h;const g=mask.getContext(\"2d\"),s=Math.min(w*.38,h*.34);g.translate(w\/2,h\/2);g.scale(s,s);g.strokeStyle=\"#fff\";g.fillStyle=\"#fff\";g.lineWidth=.012;g.lineCap=\"round\";g.lineJoin=\"round\"; function line(points){g.beginPath();points.forEach((p,i)=>i?g.lineTo(p[0],p[1]):g.moveTo(p[0],p[1]));g.stroke();} function star(x,y,r){g.beginPath();g.moveTo(x,y-r);g.quadraticCurveTo(x+r*.17,y-r*.17,x+r,y);g.quadraticCurveTo(x+r*.17,y+r*.17,x,y+r);g.quadraticCurveTo(x-r*.17,y+r*.17,x-r,y);g.quadraticCurveTo(x-r*.17,y-r*.17,x,y-r);g.stroke();} if(kind===1){ g.lineWidth=.055;g.beginPath();g.moveTo(-.25,-.36);g.bezierCurveTo(-.23,-.86,.55,-.85,.43,-.27);g.bezierCurveTo(.38,-.04,.02,-.04,.02,.28);g.stroke();g.beginPath();g.arc(.02,.52,.045,0,Math.PI*2);g.fill(); g.lineWidth=.006;for(let i=0;i<16;i++){const a=i*Math.PI\/8;line([[Math.cos(a)*.77,Math.sin(a)*.77],[Math.cos(a)*.83,Math.sin(a)*.83]]);} } if(kind===2){\ng.lineWidth=.023;\n\/\/ Bold, simple open-book silhouette, clear spine, fewer page details.\ng.beginPath();g.moveTo(0,-.36);g.bezierCurveTo(-.24,-.62,-.57,-.65,-.88,-.53);g.lineTo(-.88,.46);g.bezierCurveTo(-.55,.35,-.24,.4,0,.64);g.bezierCurveTo(.24,.4,.55,.35,.88,.46);g.lineTo(.88,-.53);g.bezierCurveTo(.57,-.65,.24,-.62,0,-.36);g.closePath();g.stroke();\ng.lineWidth=.02;line([[0,-.36],[0,.64]]);\ng.lineWidth=.012;for(let j=0;j<4;j++){const y=-.31+j*.18;g.beginPath();g.moveTo(-.73,y);g.quadraticCurveTo(-.42,y-.055,-.17,y+.12);g.moveTo(.73,y);g.quadraticCurveTo(.42,y-.055,.17,y+.12);g.stroke();}\ng.lineWidth=.016;line([[-.96,-.43],[-.96,.57],[-.16,.75],[.16,.75],[.96,.57],[.96,-.43]]);\n} if(kind===3){ for(const side of [-1,1]){g.beginPath();g.moveTo(0,.12);g.bezierCurveTo(side*.2,-.98,side*1.15,-.98,side*.83,-.18);g.bezierCurveTo(side*1.03,.33,side*.63,.99,side*.22,.6);g.closePath();g.stroke(); for(let j=0;j<5;j++){const u=j\/5;g.beginPath();g.moveTo(side*.035,.1);g.quadraticCurveTo(side*(.3+u*.4),-.68+u*.3,side*(.4+u*.1),-.59+u*.8);g.stroke();} g.beginPath();g.moveTo(side*.03,-.22);g.quadraticCurveTo(side*.08,-.48,side*.22,-.5);g.stroke();} g.lineWidth=.025;line([[0,-.25],[0,.58]]); } if(kind===4){ star(0,0,.75);star(.67,-.65,.15);star(-.65,.47,.11); const pts=Array.from({length:18},(_,i)=>{const a=i*2.399963,r=.13+Math.sqrt(i\/18)*.24;return{x:Math.cos(a)*r,y:Math.sin(a)*r};}); g.lineWidth=.005;for(let i=0;i<pts.length;i++){const p=pts[i];for(let j=i+1;j<pts.length;j++){const q=pts[j];if(Math.hypot(p.x-q.x,p.y-q.y)<.28)line([[p.x,p.y],[q.x,q.y]]);}g.beginPath();g.arc(p.x,p.y,.016,0,Math.PI*2);g.fill();} } if(kind===5){\n\/\/ Broad crown, a substantial trunk and a few readable structural branches.\ng.lineWidth=.022;g.beginPath();g.moveTo(-.22,.13);g.bezierCurveTo(-.56,.26,-.98,.02,-.89,-.27);g.bezierCurveTo(-1.05,-.55,-.71,-.78,-.48,-.69);g.bezierCurveTo(-.48,-1.01,-.11,-1.1,.06,-.89);g.bezierCurveTo(.32,-1.08,.65,-.88,.63,-.64);g.bezierCurveTo(.98,-.68,1.08,-.3,.86,-.11);g.bezierCurveTo(.95,.18,.52,.33,.23,.13);g.stroke();\ng.lineWidth=.034;g.beginPath();g.moveTo(-.5,.83);g.bezierCurveTo(-.24,.71,-.12,.66,-.1,.34);g.lineTo(-.08,-.13);g.moveTo(.5,.83);g.bezierCurveTo(.25,.71,.12,.66,.1,.34);g.lineTo(.08,-.13);g.stroke();\nfunction limb(points,width){g.lineWidth=width;line(points);}\nlimb([[0,.57],[0,.12],[-.2,-.16],[-.48,-.35],[-.73,-.42]],.027);\nlimb([[0,.19],[.24,-.09],[.51,-.23],[.76,-.29]],.025);\nlimb([[0,.07],[.04,-.27],[-.09,-.51],[-.13,-.77]],.026);\nlimb([[-.29,-.23],[-.34,-.49],[-.48,-.6]],.016);\nlimb([[.33,-.14],[.37,-.43],[.5,-.57]],.016);\nlimb([[.02,-.31],[.23,-.53],[.28,-.76]],.016);\nlimb([[-.46,-.34],[-.64,-.18]],.012);\nlimb([[.5,-.23],[.65,-.07]],.012);\n} const data=g.getImageData(0,0,w,h).data,samples=[];for(let y=0;y<h;y++){for(let x=0;x<w;x++){if(data[(y*w+x)*4+3]>90)samples.push({x:x,y:y});}} shapeSampleCache.set(kind,samples);assignShapeSamples(samples); } function resize(){ const nextWidth=host.clientWidth,nextHeight=host.clientHeight;if(nextWidth===w){if(nextHeight===h)return;}shapeSampleCache.clear();const previousWidth=w,previousHeight=h;w=nextWidth;h=nextHeight;press.down=false;press.revealed=false;press.blend=0;contactTargets.length=0;const d=Math.min(devicePixelRatio||1,2);canvas.width=w*d;canvas.height=h*d;ctx.setTransform(d,0,0,d,0,0); const mask=document.createElement(\"canvas\");mask.width=w;mask.height=h;const m=mask.getContext(\"2d\");m.font=\"400 \"+Math.min(w*.125,150)+\"px Arial\";m.textAlign=\"center\";m.textBaseline=\"middle\";m.fillText(\"AdaptPro.ai\",w\/2,h\/2);const fontSize=Math.min(w*.125,150),wordWidth=m.measureText(\"AdaptPro.ai\").width;function sparkle(x,y,r){m.beginPath();m.moveTo(x,y-r);m.quadraticCurveTo(x+r*.18,y-r*.18,x+r,y);m.quadraticCurveTo(x+r*.18,y+r*.18,x,y+r);m.quadraticCurveTo(x-r*.18,y+r*.18,x-r,y);m.quadraticCurveTo(x-r*.18,y-r*.18,x,y-r);m.fill();}aiStars.length=0;aiStars.push({x:w\/2+wordWidth\/2+fontSize*.16,y:h\/2-fontSize*.42,r:fontSize*.16},{x:w\/2+wordWidth\/2+fontSize*.36,y:h\/2-fontSize*.65,r:fontSize*.055});aiStars.forEach(a=>sparkle(a.x,a.y,a.r));const data=m.getImageData(0,0,w,h).data;glyphData=data;name=[];for(let y=0;y<h;y+=2){for(let x=0;x<w;x+=2){if(data[(y*w+x)*4+3]>120)name.push({x:x,y:y,star:aiStars.findIndex(a=>Math.abs(x-a.x)<=a.r+2?Math.abs(y-a.y)<=a.r+2:false)});}} makeShape();if(previousWidth>0){if(previousHeight>0){const sx=w\/previousWidth,sy=h\/previousHeight;particles.forEach(p=>{p.x*=sx;p.y*=sy;if(Number.isFinite(p.shapeX)){p.shapeX*=sx;p.shapeY*=sy;}if(p.fromShape){p.fromShape.x*=sx;p.fromShape.y*=sy;}});draw(16);}}else if(paused){draw(16);} } function choose(index){kind=index%6;particles.forEach(p=>{p.fromShape=Number.isFinite(p.shapeX)?{x:p.shapeX,y:p.shapeY,z:p.shapeZ}:null;p.handoffDelay=Math.random()*(kind===0?400:1300);p.handoffDuration=kind===0?1000+Math.random()*800:2400+Math.random()*1900;if(!Number.isFinite(p.participation)){p.selected=Math.random()<.43;p.participationGoal=p.selected?1:.01+Math.pow(Math.random(),2)*.12;p.participation=p.participationGoal;p.releaseGoal=Math.random()<.13?0:.5;p.releaseFloor=p.releaseGoal;p.phaseOffset=(Math.random()-.5)*900;p.nextExchange=elapsed+5000+Math.random()*35000;p.exchangeTime=2200+Math.random()*2200;}});spinDirection=Math.random()<.5?-1:1;spinAxis=Math.random()<.5?-1:1;makeShape();canvas.dataset.pattern=String(kind);canvas.dataset.cycle=String(index);} function revealContact(){\nconst text=\"info@adaptpro.ai\",font=Math.max(15,Math.min(32,(w-40)\/9)),mask=document.createElement(\"canvas\"),g=mask.getContext(\"2d\");g.font=\"600 \"+font+\"px Arial\";const tw=Math.ceil(g.measureText(text).width)+4,th=Math.ceil(font*1.4);mask.width=tw;mask.height=th;g.font=\"600 \"+font+\"px Arial\";g.textBaseline=\"top\";g.fillStyle=\"#fff\";g.fillText(text,2,1);const ox=Math.max(16,Math.min(w-tw-16,press.x-tw\/2)),oy=Math.max(16,Math.min(h-th-16,press.y+th+44>h?press.y-th-30:press.y+30)),data=g.getImageData(0,0,tw,th).data,samples=[];\nfor(let y=0;y<th;y++)for(let x=0;x<tw;x++){if(data[(y*tw+x)*4+3]>150)samples.push({x:ox+x,y:oy+y});}\nconst nearby=particles.map((p,i)=>({i,d:Math.hypot(p.x-press.x,p.y-press.y)})).sort((a,b)=>a.d-b.d).slice(0,Math.min(1900,samples.length));particles.forEach(p=>p.contact=-1);contactTargets.length=0;nearby.forEach((n,j)=>{particles[n.i].contact=j;contactTargets.push(samples[Math.floor(j*samples.length\/nearby.length)]);});press.revealed=true;press.keepUntil=elapsed+6000;canvas.dataset.contactBounds=[ox,oy,tw,th].map(Math.round).join(\",\");}\nfunction draw(dt){\nconst held=press.down?elapsed-press.started:0;if(press.down?(!press.moved?held>1100:false):false){if(!press.revealed)revealContact();}\nconst contactGoal=press.revealed?(press.down?1:1-smooth((elapsed-press.keepUntil)\/3500)):0;press.blend+=(contactGoal-press.blend)*(1-Math.exp(-dt\/(contactGoal>.5?260:900)));if(press.revealed?(!press.down?elapsed>press.keepUntil+6000:false):false){press.revealed=false;press.blend=0;}\npress.impulse*=Math.exp(-dt\/850);const gather=press.down?Math.min(1,(held+600)\/1600):press.impulse;\ncanvas.dataset.contact=press.blend>.995?\"readable\":press.revealed?\"forming\":press.down?\"gathering\":\"idle\";\npointer.speed*=Math.exp(-dt\/140);pointer.fear*=Math.exp(-dt\/550);const calm=(pointer.x>-9000)*(pointer.speed<.32)*(pointer.fear<.15);pointer.trust+=(calm-pointer.trust)*(1-Math.exp(-dt\/(calm?1700:140)));canvas.dataset.cursor=pointer.fear>.2?\"cautious\":pointer.trust>.4?\"curious\":\"exploring\"; const index=Math.floor(clock\/14000),phase=clock%14000;if(index!==active){active=index;choose(index);} const form=reduced?1:phase<6000?smooth(phase\/6000):phase<8000?1:1-smooth((phase-8000)\/6000);canvas.dataset.phase=phase>=6000?(phase<8000?\"alive-in-shape\":\"expanding\"):\"gathering\"; swarmSpeed+=(spinDirection*.0005-swarmSpeed)*(1-Math.exp(-dt\/1800));swarmAngle+=swarmSpeed*dt;ctx.clearRect(0,0,w,h);const size=Math.min(w*.43,h*.43),cx=w\/2,cy=h\/2,motionClock=clock+Math.min(elapsed,6000),time=motionClock*.00015; const glow=ctx.createRadialGradient(cx,cy,0,cx,cy,size*1.5);glow.addColorStop(0,\"rgba(87,55,170,.17)\");glow.addColorStop(.65,\"rgba(32,55,130,.06)\");glow.addColorStop(1,\"rgba(0,0,0,0)\");ctx.fillStyle=glow;ctx.fillRect(0,0,w,h); const flowT=elapsed*.00028,flowScale=Math.min(w,h),frameHue=230+Math.sin(elapsed*.00004)*15,depthEase=1-Math.exp(-dt\/300),releaseEase=1-Math.exp(-dt\/2500),openingBlend=smooth((elapsed-6000)\/1000);const explore=1-smooth(phase\/5400);const flockSpin=spinDirection*(phase-8000+Math.max(0,Math.min(2000,phase-6000)))*TAU\/11200+explore*.25*Math.sin(phase*.0015); const thickness=kind===0?Math.min(w*.125,150)*.045:Math.min(w,h)*((kind===1?true:kind===2)?.028:.06);const yaw=kind===0?0:flockSpin,tilt=kind===0?0:spinAxis*((kind===1?true:kind===2)?.16:.36)*Math.sin(clock*.00035);const cosYaw=Math.cos(yaw),sinYaw=Math.sin(yaw),cosTilt=Math.cos(tilt),sinTilt=Math.sin(tilt); for(let i=0;i<N;i++){const p=particles[i];\/\/ Spatially coherent bounded murmuration: traveling folds, local peeling and rejoining, no global angular drift.\nconst flowU=p.flowU,flowV=p.flowV,flowFold=Math.sin(flowU*3.2+flowV*2.1-flowT*.93),flowPeel=.5+.5*Math.sin(flowT*.57+flowU*2.7-flowV*1.6),flowWave=Math.sin(flowV*4.1+flowT*.77+Math.sin(flowT*.31));\nlet tx=cx+flowScale*(flowU*.71+flowWave*.18+flowFold*flowPeel*.2+Math.sin(flowT*.41)*.14),ty=cy+flowScale*(flowV*.38+Math.sin(flowU*3.5-flowT*.68+flowWave*.65)*.17+Math.cos(flowT*.37+flowV*1.8)*flowPeel*.1);\nconst cloudZ=Math.sin(flowU*2.8+flowV*2.2+flowT*.7)*220; const q=targets[i];p.star=kind===0?q.star:-1;let qx=q.x,qy=q.y;if(kind===99){const aa=time*.15,xx=qx-cx,yy=qy-cy;qx=cx+xx*Math.cos(aa)-yy*Math.sin(aa);qy=cy+xx*Math.sin(aa)+yy*Math.cos(aa);}if(kind===7){qy+=Math.sin(i%40*.25+time*2)*size*.13;qx+=Math.sin(Math.floor(i\/40)*.2+time)*size*.04;} if(kind===0){const seconds=elapsed*.001,speed=.8+p.j*.9,amp=Math.max(.7,Math.min(1.8,w*.0014))*(p.star>=0?.25:1);qx+=Math.sin(seconds*speed+p.a)*amp+Math.sin(seconds*speed*.57+i)*amp*.25;qy+=Math.cos(seconds*speed*.87+p.a)*amp+Math.sin(seconds*speed*.63+i)*amp*.25;}let zTarget=((i%3===0)?-.5:(i%3===1)?.5:(p.j-.5))*thickness;if(p.star>=0)zTarget=0;if(kind===3)zTarget+=Math.abs(qx-cx)*.24*Math.sin(clock*.0006);const xx3=qx-cx,yy3=qy-cy;let rx=xx3*cosYaw+zTarget*sinYaw,rz=-xx3*sinYaw+zTarget*cosYaw,ry=yy3*cosTilt-rz*sinTilt;rz=yy3*sinTilt+rz*cosTilt;if(kind===0){rx+=zTarget*.32;ry+=zTarget*.22;}const perspective=kind===0?1:900\/(900+rz);qx=cx+rx*perspective;qy=cy+ry*perspective;if(p.fromShape){const handoff=smooth((phase-p.handoffDelay)\/p.handoffDuration);qx=p.fromShape.x*(1-handoff)+qx*handoff;qy=p.fromShape.y*(1-handoff)+qy*handoff;rz=p.fromShape.z*(1-handoff)+rz*handoff;}p.shapeX=qx;p.shapeY=qy;p.shapeZ=rz;const localPhase=Math.max(0,Math.min(14000,phase+(p.phaseOffset||0)));const envelope=reduced?1:localPhase<6000?smooth(localPhase\/6000):localPhase<8000?1:1-smooth((localPhase-8000)\/6000);if(elapsed>p.nextExchange){p.selected=Math.random()<.43;p.participationGoal=p.selected?1:.01+Math.pow(Math.random(),2)*.12;p.releaseGoal=Math.random()<.13?0:.5;p.nextExchange=elapsed+12000+Math.random()*28000;p.exchangeTime=2200+Math.random()*2200;}p.participation+=(p.participationGoal-p.participation)*(1-Math.exp(-dt\/p.exchangeTime));p.releaseFloor+=(p.releaseGoal-p.releaseFloor)*releaseEase;const releaseFloor=p.releaseFloor;const naturalPull=(p.participation||0)*(releaseFloor+(1-releaseFloor)*envelope);let pull=(p.selected?1:0)*(1-openingBlend)+naturalPull*openingBlend;if(kind===0){if(p.j<.62)pull+=(1-pull)*envelope;}if(kind===1?true:kind===2){if(p.j<.7)pull+=(1-pull)*envelope*.7;}if(kind===5){if(p.j<.74)pull+=(1-pull)*envelope*.8;}if(p.star>=0)pull+=(1-pull)*envelope*.99;p.pull=pull;const depthTarget=rz*pull+cloudZ*(1-pull);p.z+=(depthTarget-p.z)*depthEase;tx=tx*(1-pull)+(qx+Math.sin(motionClock*.003*(.8+p.j)+p.a)*(kind===0?.3:1.65))*pull;ty=ty*(1-pull)+(qy+Math.cos(motionClock*.0034*(.8+p.j)+p.a)*(kind===0?.3:1.65))*pull; if(!p.initialized){p.x=tx;p.y=ty;p.z=depthTarget;p.dx=0;p.dy=0;p.dz=0;p.initialized=true;}const dx=tx-pointer.x,dy=ty-pointer.y,d=Math.hypot(dx,dy);const reach=260;if(d<reach){const near=smooth(1-d\/reach),caution=42+p.j*58,curiosity=pointer.trust*near*(.65-.45*pull);const orbit=p.a+elapsed*.00012*(.7+p.j),ox=pointer.x+Math.cos(orbit)*caution,oy=pointer.y+Math.sin(orbit)*caution*.7;tx+=(ox-tx)*curiosity;ty+=(oy-ty)*curiosity;const flee=pointer.fear*near*150;tx+=dx\/(d||1)*flee;ty+=dy\/(d||1)*flee;}if(gather>0){const gx=press.x-tx,gy=press.y-ty,gd=Math.hypot(gx,gy),gr=smooth(1-gd\/420)*gather*.68*(1-press.blend);tx+=gx*gr;ty+=gy*gr;}\nif(p.contact>=0){const cp=contactTargets[p.contact];if(cp){tx+=(cp.x-tx)*press.blend;ty+=(cp.y-ty)*press.blend;}}\n if(reduced){p.x=tx;p.y=ty;}else{const response=1-Math.exp(-dt\/(gather>.1?Math.hypot(p.x-press.x,p.y-press.y)<420?.55:1:1)\/(p.contact>=0?press.blend>.8?130:700-480*p.participation:700-480*p.participation));p.x+=(tx-p.x)*response;p.y+=(ty-p.y)*response;} } if((kind===99)*(form>.2)){for(let i=0;i<nodes.length;i++){for(let j=i+1;j<nodes.length;j++){const n=nodes[i],v=nodes[j],dist=Math.hypot(n.x-v.x,n.y-v.y);if(dist<.45){ctx.beginPath();ctx.moveTo(cx+n.x*Math.min(w*.4,h*.36),cy+n.y*Math.min(w*.4,h*.36));ctx.lineTo(cx+v.x*Math.min(w*.4,h*.36),cy+v.y*Math.min(w*.4,h*.36));ctx.strokeStyle=\"rgba(147,167,255,\"+(.22*form*(1-dist\/.45))+\")\";ctx.lineWidth=.7;ctx.stroke();}}}} for(let i=0;i<N;i++){const p=particles[i];const bright=i%19===0,depthScale=Math.max(.55,Math.min(1.7,900\/(900+p.z)));if(!bright?(p.star<0?!(p.contact>=0?press.blend>.7:false):false):false){const hue=Math.round(frameHue+i%45),light=Math.round(Math.max(43,Math.min(94,73-p.z*.08))),side=6*depthScale;ctx.globalAlpha=.43+(p.pull||0)*(kind===0?.47:.31);ctx.drawImage(particleAtlas,(hue-215)*12,(light-43)*12,12,12,p.x-side\/2,p.y-side\/2,side,side);continue;}ctx.beginPath();ctx.arc(p.x,p.y,(p.contact>=0?press.blend>.7?.72:(p.star>=0?.75:(bright?1.7:1.05)*depthScale):(p.star>=0?.75:(bright?1.7:1.05)*depthScale)),0,TAU);\/\/ Cached one-degree hue \/ one-percent lightness palette; numeric opacity avoids per-dot color strings.\nif(p.contact>=0?press.blend>.7:false){ctx.fillStyle=\"#dbd6ff\";ctx.globalAlpha=.95;}\nelse if(p.star>=0){ctx.fillStyle=\"#ffd35e\";ctx.globalAlpha=(.42+.5*p.pull)*(.82+.18*Math.sin(elapsed*.0015+p.star*2.1+p.j));ctx.shadowColor=\"#ffd36a\";ctx.shadowBlur=2.4*p.pull;}\nelse{const hue=Math.round(frameHue+i%45),light=Math.round(Math.max(43,Math.min(94,(bright?87:73)-p.z*.08)));ctx.fillStyle=particlePalette[(hue-215)*52+light-43];ctx.globalAlpha=(bright?.72:.43)+(p.pull||0)*(bright?.23:(kind===0?.47:.31));if(bright){ctx.shadowColor=\"#ad9bff\";ctx.shadowBlur=10;}}ctx.fill();ctx.shadowBlur=0;}ctx.globalAlpha=1; pulse*=.95; } function frame(now){const dt=Math.min(now-last||16.67,40);last=now;if(!paused){elapsed+=dt;if(openingRemaining>0){openingRemaining=Math.max(0,openingRemaining-dt);}else{const cycleTime=clock%14000;const holding=(cycleTime>=6000)*(cycleTime<8000);clock+=dt*(holding?.5:2);}draw(dt);}raf=requestAnimationFrame(frame);} function control(){button.setAttribute(\"aria-pressed\",String(paused));button.setAttribute(\"aria-label\",paused?\"Play animation\":\"Pause animation\");} button.addEventListener(\"click\",()=>{paused=!paused;control();}); host.addEventListener(\"pointermove\",e=>{const r=host.getBoundingClientRect(),nx=e.clientX-r.left,ny=e.clientY-r.top,now=performance.now();if(pointer.last){const speed=Math.hypot(nx-pointer.x,ny-pointer.y)\/Math.max(8,now-pointer.last);pointer.speed=pointer.speed*.35+Math.min(3,speed)*.65;if(pointer.speed>.7){pointer.fear=Math.min(1,(pointer.speed-.5)\/1.2);pointer.trust=0;}}if(press.down?Math.hypot(nx-press.x,ny-press.y)>18:false){press.moved=true;}pointer.x=nx;pointer.y=ny;pointer.last=now;if(paused)draw(16);});host.addEventListener(\"pointerleave\",()=>{pointer.x=-9999;pointer.y=-9999;pointer.last=0;pointer.trust=0;if(paused)draw(16);});host.style.touchAction=\"none\";\nhost.addEventListener(\"pointerdown\",e=>{if(button.contains(e.target))return;if(e.isPrimary===false)return;if(e.button!==0)return;const r=host.getBoundingClientRect();pointer.x=e.clientX-r.left;pointer.y=e.clientY-r.top;press.down=true;press.x=pointer.x;press.y=pointer.y;press.started=elapsed;press.impulse=.95;press.moved=false;press.revealed=false;press.blend=0;pointer.fear=0;host.setPointerCapture(e.pointerId);});\nhost.addEventListener(\"pointerup\",e=>{press.down=false;if(press.revealed)press.keepUntil=elapsed;if(e.pointerType===\"touch\"){pointer.x=-9999;pointer.y=-9999;pointer.trust=0;}});\nhost.addEventListener(\"pointercancel\",()=>{press.down=false;press.moved=true;press.keepUntil=elapsed;pointer.x=-9999;pointer.y=-9999;});\nwindow.addEventListener(\"resize\",resize,{passive:true}); document.addEventListener(\"visibilitychange\",()=>{cancelAnimationFrame(raf);if(!document.hidden){last=0;raf=requestAnimationFrame(frame);}}); particles.forEach(p=>{p.flowU=Math.cos(p.a)*p.r;p.flowV=Math.sin(p.a)*p.r;});makeNodes();control();resize();draw(16);raf=requestAnimationFrame(frame); })(); <\/script><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>AdaptPro.ai<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"bgseo_title":"AdaptPro | Applied AI Projects & Prototypes \u2014 Ryan Gustafson","bgseo_description":"Explore Ryan Gustafson\u2019s applied-AI projects, working prototypes and practical experiments. Open to thoughtful projects and collaboration.","bgseo_robots_index":"index","bgseo_robots_follow":"follow","crio-premium-page-header-override":null,"crio-premium-page-header-select":"none","crio-premium-page-header-featured-image-background":"0","crio-premium-page-header-background":"","footnotes":""},"class_list":["post-9","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adaptpro.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":55,"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":67,"href":"https:\/\/adaptpro.ai\/index.php?rest_route=\/wp\/v2\/pages\/9\/revisions\/67"}],"wp:attachment":[{"href":"https:\/\/adaptpro.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}