101 lines
38 KiB
JavaScript
101 lines
38 KiB
JavaScript
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41626,e=>{"use strict";var t,r,n,i,s,o,a,l,c,u,d,p,f,m,h,g,v,y,x,w,b,_,j,M,S,R=e.i(43476),N=e.i(71645),k=e.i(75056),V=e.i(25234),A=e.i(43257),P=e.i(8560),C=e.i(28600);function T(e,t,r){t.traverse(t=>{t.material&&(e.properties.remove(t.material),null==t.material.dispose||t.material.dispose())}),e.info.programs.length=0,e.compile(t,r)}function I({focus:e=0,samples:t=10,size:r=25}){let n=(0,C.useThree)(e=>e.gl),i=(0,C.useThree)(e=>e.scene),s=(0,C.useThree)(e=>e.camera);return N.useEffect(()=>{let o=P.ShaderChunk.shadowmap_pars_fragment;return P.ShaderChunk.shadowmap_pars_fragment=P.ShaderChunk.shadowmap_pars_fragment.replace("#ifdef USE_SHADOWMAP","#ifdef USE_SHADOWMAP\n"+(({focus:e=0,size:t=25,samples:r=10}={})=>`
|
|
#define PENUMBRA_FILTER_SIZE float(${t})
|
|
#define RGB_NOISE_FUNCTION(uv) (randRGB(uv))
|
|
vec3 randRGB(vec2 uv) {
|
|
return vec3(
|
|
fract(sin(dot(uv, vec2(12.75613, 38.12123))) * 13234.76575),
|
|
fract(sin(dot(uv, vec2(19.45531, 58.46547))) * 43678.23431),
|
|
fract(sin(dot(uv, vec2(23.67817, 78.23121))) * 93567.23423)
|
|
);
|
|
}
|
|
|
|
vec3 lowPassRandRGB(vec2 uv) {
|
|
// 3x3 convolution (average)
|
|
// can be implemented as separable with an extra buffer for a total of 6 samples instead of 9
|
|
vec3 result = vec3(0);
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, -1.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, 0.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, +1.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, -1.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, 0.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, +1.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, -1.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, 0.0));
|
|
result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, +1.0));
|
|
result *= 0.111111111; // 1.0 / 9.0
|
|
return result;
|
|
}
|
|
vec3 highPassRandRGB(vec2 uv) {
|
|
// by subtracting the low-pass signal from the original signal, we're being left with the high-pass signal
|
|
// hp(x) = x - lp(x)
|
|
return RGB_NOISE_FUNCTION(uv) - lowPassRandRGB(uv) + 0.5;
|
|
}
|
|
|
|
|
|
vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) {
|
|
const float goldenAngle = 2.399963f; // radians
|
|
float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount));
|
|
float theta = float(sampleIndex) * goldenAngle + angle;
|
|
float sine = sin(theta);
|
|
float cosine = cos(theta);
|
|
return vec2(cosine, sine) * r;
|
|
}
|
|
float penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation
|
|
return (zReceiver - zBlocker) / zBlocker;
|
|
}
|
|
float findBlocker(sampler2D shadowMap, vec2 uv, float compare, float angle) {
|
|
float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);
|
|
float blockerDepthSum = float(${e});
|
|
float blockers = 0.0;
|
|
|
|
int j = 0;
|
|
vec2 offset = vec2(0.);
|
|
float depth = 0.;
|
|
|
|
#pragma unroll_loop_start
|
|
for(int i = 0; i < ${r}; i ++) {
|
|
offset = (vogelDiskSample(j, ${r}, angle) * texelSize) * 2.0 * PENUMBRA_FILTER_SIZE;
|
|
depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset));
|
|
if (depth < compare) {
|
|
blockerDepthSum += depth;
|
|
blockers++;
|
|
}
|
|
j++;
|
|
}
|
|
#pragma unroll_loop_end
|
|
|
|
if (blockers > 0.0) {
|
|
return blockerDepthSum / blockers;
|
|
}
|
|
return -1.0;
|
|
}
|
|
|
|
|
|
float vogelFilter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius, float angle) {
|
|
float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);
|
|
float shadow = 0.0f;
|
|
int j = 0;
|
|
vec2 vogelSample = vec2(0.0);
|
|
vec2 offset = vec2(0.0);
|
|
#pragma unroll_loop_start
|
|
for (int i = 0; i < ${r}; i++) {
|
|
vogelSample = vogelDiskSample(j, ${r}, angle) * texelSize;
|
|
offset = vogelSample * (1.0 + filterRadius * float(${t}));
|
|
shadow += step( zReceiver, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) );
|
|
j++;
|
|
}
|
|
#pragma unroll_loop_end
|
|
return shadow * 1.0 / ${r}.0;
|
|
}
|
|
|
|
float PCSS (sampler2D shadowMap, vec4 coords) {
|
|
vec2 uv = coords.xy;
|
|
float zReceiver = coords.z; // Assumed to be eye-space z in this code
|
|
float angle = highPassRandRGB(gl_FragCoord.xy).r * PI2;
|
|
float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver, angle);
|
|
if (avgBlockerDepth == -1.0) {
|
|
return 1.0;
|
|
}
|
|
float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);
|
|
return vogelFilter(shadowMap, uv, zReceiver, 1.25 * penumbraRatio, angle);
|
|
}`)({size:r,samples:t,focus:e})).replace("#if defined( SHADOWMAP_TYPE_PCF )","\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )"),T(n,i,s),()=>{P.ShaderChunk.shadowmap_pars_fragment=o,T(n,i,s)}},[e,r,t]),null}var F=e.i(90072);e.i(47167);var z=e.i(78140);let E="/models/3d_scene_final.glb",O="/draco/",B=[/WheelStock_FR_RB1c_Tire_1k_0$/i,/WheelStock_FR_RB1c_Tire_1k_0\.001$/i,/WheelStock_RL_RB1c_Tire/i,/WheelStock_RR_RB1c_Tire/i],L=/^LCT300007/i,D=/road|floor|slab|driveway|apron|grass|ground|pad|curb/i,W=/asphalt|concrete|lane|apron|curb|pavement|tarmac|grass/i,G=/tree|foliage|atlas|bush|hedge|shrub/i,q=/tree|leaf|leaves|bark|foliage|shrub|grass/i,U=/carton|cube|crate|package_box|barrel|pallet|bench/i,$=/cardboard|pallet/i,H=/street_light|streetlight|lamp/i,Z=/street_light/i,Q=/atlas|background_tree/i,Y=/background_tree_atlas/i;function K({truckRef:e,wheelRefs:t,tier:r="desktop",...n}){let{scene:i}=(0,z.useGLTF)(E,O);return(0,N.useLayoutEffect)(()=>{let n=[null,null,null,null],s=null;if(i.traverse(e=>{if(!e.isMesh)return;let t=e.name||"";/WheelStock_(FR|RL|RR)_RB1c_Tire/i.test(t)&&(s=e,B.forEach((r,i)=>{!n[i]&&r.test(t)&&(n[i]=e)}))}),n.forEach((e,r)=>{let n=e?.parent?.parent??null;n&&t?.[r]&&(t[r].current=n)}),e){let t=s;for(;t&&t.parent&&t.parent!==i;)t=t.parent;e.current=t??null}i.traverse(e=>{if(!e.isMesh)return;let t=e.name||"",n=(Array.isArray(e.material)?e.material[0]?.name:e.material?.name)||"",i=L.test(t),s=D.test(t)||W.test(n);e.castShadow=i,e.receiveShadow=i||s,i&&(e.frustumCulled=!1);let o=!1;"mobile"===r?o=G.test(t)||q.test(n)||U.test(t)||$.test(n)||H.test(t)||Z.test(n):"tablet"===r&&(o=Q.test(t)||Y.test(n)),e.visible=!o})},[i,e,t,r]),(0,R.jsx)("primitive",{object:i,...n,dispose:null})}z.useGLTF.preload(E,O);let J=(0,e.i(68834).create)(e=>({scrollProgress:0,activeSection:0,truckProgress:0,cameraTarget:[19.727,4.397,-31.08],lenis:null,setScrollProgress:t=>e({scrollProgress:t}),setActiveSection:t=>e({activeSection:t}),setTruckProgress:t=>e({truckProgress:t}),setCameraTarget:t=>e({cameraTarget:t}),setLenis:t=>e({lenis:t})})),X=[new F.Vector3(15.5,.45,-26.5),new F.Vector3(13.399,.324,-24.742),new F.Vector3(11.211,.178,-22.973),new F.Vector3(8.823,.111,-20.949),new F.Vector3(6.447,.059,-19.06),new F.Vector3(3.786,.072,-17.002),new F.Vector3(.732,.124,-14.955),new F.Vector3(-2.156,.124,-12.903),new F.Vector3(-4.417,.124,-10.929),new F.Vector3(-5.896,.124,-8.052),new F.Vector3(-5.985,.124,-5.497),new F.Vector3(-4.362,.124,-3.25),new F.Vector3(-1.448,.124,-1.234),new F.Vector3(2.539,.124,.986),new F.Vector3(6.686,.124,3.379),new F.Vector3(8.213,.124,6.14),new F.Vector3(7.976,.124,9.176),new F.Vector3(6.424,.124,12.428),new F.Vector3(3.883,.124,15.769),new F.Vector3(1.241,.124,19.056)],ee=new F.CatmullRomCurve3(X);function et(e){return e<.14?0:e<.38?.5*(e-.14)/.24:e<.5?.5:e<.76?.5+.5*(e-.5)/.26:1}let er={firstMileWhole:{position:new F.Vector3(38,15,-10),target:new F.Vector3(24.377,4,-39.303)},firstMileFront:{position:new F.Vector3(7,3,-19),target:new F.Vector3(15.5,1.5,-26.5)},midMile:{position:new F.Vector3(-7,7.5,8),target:new F.Vector3(-19.146,2.5,-9)},lastMileClose:{position:new F.Vector3(-3.5,4,15),target:new F.Vector3(8,2,20)},lastMileZoomedOut:{position:new F.Vector3(-10.4,5.2,12),target:new F.Vector3(8,2,20)},analytics:{position:new F.Vector3(-13.5,5,31),target:new F.Vector3(-7.7,3.5,25.4)}},en=new F.Vector3,ei=new F.Vector3,es=new F.Vector3(0,1,0),eo=new F.Vector3,ea=new F.Vector3,el=new F.Vector3,ec=e=>e*e*(3-2*e);function eu(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ed(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ep(e,t){if(e){if("string"==typeof e)return ed(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ed(e,t)}}function ef(e){return function(e){if(Array.isArray(e))return ed(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ep(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}new F.Vector2,new F.Vector2;function em(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}var eh=function e(t,r,n){var i=this;em(this,e),eu(this,"dot2",function(e,t){return i.x*e+i.y*t}),eu(this,"dot3",function(e,t,r){return i.x*e+i.y*t+i.z*r}),this.x=t,this.y=r,this.z=n},eg=[new eh(1,1,0),new eh(-1,1,0),new eh(1,-1,0),new eh(-1,-1,0),new eh(1,0,1),new eh(-1,0,1),new eh(1,0,-1),new eh(-1,0,-1),new eh(0,1,1),new eh(0,-1,1),new eh(0,1,-1),new eh(0,-1,-1)],ev=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],ey=Array(512),ex=Array(512),ew=0;(ew=Math.floor(ew))<256&&(ew|=ew<<8);for(var eb,e_=0;e_<256;e_++)eb=1&e_?ev[e_]^255&ew:ev[e_]^ew>>8&255,ey[e_]=ey[e_+256]=eb,ex[e_]=ex[e_+256]=eg[eb%12];function ej(e){var t=function(e){if("number"==typeof e)e=Math.abs(e);else if("string"==typeof e){var t=e;e=0;for(var r=0;r<t.length;r++)e=(e+(r+1)*(t.charCodeAt(r)%96))%0x7fffffff}return 0===e&&(e=311),e}(e);return function(){var e=48271*t%0x7fffffff;return t=e,e/0x7fffffff}}new function e(t){var r=this;em(this,e),eu(this,"seed",0),eu(this,"init",function(e){r.seed=e,r.value=ej(e)}),eu(this,"value",ej(this.seed)),this.init(t)}(Math.random());var eM=function(e){return 1/(1+e+.48*e*e+.235*e*e*e)};function eS(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.25,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.01,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1/0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:eM,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:.001,l="velocity_"+t;if(void 0===e.__damp&&(e.__damp={}),void 0===e.__damp[l]&&(e.__damp[l]=0),Math.abs(e[t]-r)<=a)return e[t]=r,!1;var c=2/(n=Math.max(1e-4,n)),u=o(c*i),d=e[t]-r,p=r,f=s*n;d=Math.min(Math.max(d,-f),f),r=e[t]-d;var m=(e.__damp[l]+c*d)*i;e.__damp[l]=(e.__damp[l]-c*m)*u;var h=r+(d+m)*u;return p-e[t]>0==h>p&&(h=p,e.__damp[l]=(h-p)/i),e[t]=h,!0}var eR=new F.Vector3,eN=new F.Quaternion,ek=new F.Quaternion,eV=new F.Matrix4,eA=new F.Vector3;function eP(e,t,r,n,i,s,o,a){var l,c,u,d;return eS(e,t,e[t]+(u=(l=r-e[t])-Math.floor(l/(c=2*Math.PI))*c,(d=Math.max(0,Math.min(c,u)))>Math.PI&&(d-=2*Math.PI),d),n,i,s,o,a)}var eC=new F.Vector2,eT=new F.Vector3;function eI(e,t,r,o,a,l,c){return"number"==typeof t?eT.setScalar(t):Array.isArray(t)?eT.set(t[0],t[1],t[2]):eT.copy(t),n=eS(e,"x",eT.x,r,o,a,l,c),i=eS(e,"y",eT.y,r,o,a,l,c),s=eS(e,"z",eT.z,r,o,a,l,c),n||i||s}var eF=new F.Vector4,ez=new F.Euler,eE=new F.Color,eO=new F.Quaternion,eB=new F.Vector4,eL=new F.Vector4,eD=new F.Vector4;function eW(e,t,r,n,i,s,o){Array.isArray(t)?eO.set(t[0],t[1],t[2],t[3]):eO.copy(t);var a=e.dot(eO)>0?1:-1;return eO.x*=a,eO.y*=a,eO.z*=a,eO.w*=a,g=eS(e,"x",eO.x,r,n,i,s,o),v=eS(e,"y",eO.y,r,n,i,s,o),y=eS(e,"z",eO.z,r,n,i,s,o),x=eS(e,"w",eO.w,r,n,i,s,o),eB.set(e.x,e.y,e.z,e.w).normalize(),eL.set(e.__damp.velocity_x,e.__damp.velocity_y,e.__damp.velocity_z,e.__damp.velocity_w),eD.copy(eB).multiplyScalar(eL.dot(eB)/eB.dot(eB)),e.__damp.velocity_x-=eD.x,e.__damp.velocity_y-=eD.y,e.__damp.velocity_z-=eD.z,e.__damp.velocity_w-=eD.w,e.set(eB.x,eB.y,eB.z,eB.w),g||v||y||x}var eG=new F.Spherical,eq=new F.Matrix4,eU=new F.Vector3,e$=new F.Quaternion,eH=new F.Vector3,eZ=Object.freeze({__proto__:null,rsqw:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.01,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/(2*Math.PI);return r/Math.atan(1/t)*Math.atan(Math.sin(2*Math.PI*e*n)/t)},exp:eM,linear:function(e){return e},sine:{in:function(e){return 1-Math.cos(e*Math.PI/2)},out:function(e){return Math.sin(e*Math.PI/2)},inOut:function(e){return-(Math.cos(Math.PI*e)-1)/2}},cubic:{in:function(e){return e*e*e},out:function(e){return 1-Math.pow(1-e,3)},inOut:function(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}},quint:{in:function(e){return e*e*e*e*e},out:function(e){return 1-Math.pow(1-e,5)},inOut:function(e){return e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2}},circ:{in:function(e){return 1-Math.sqrt(1-Math.pow(e,2))},out:function(e){return Math.sqrt(1-Math.pow(e-1,2))},inOut:function(e){return e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2}},quart:{in:function(e){return e*e*e*e},out:function(e){return 1- --e*e*e*e},inOut:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e}},expo:{in:function(e){return 0===e?0:Math.pow(2,10*e-10)},out:function(e){return 1===e?1:1-Math.pow(2,-10*e)},inOut:function(e){return 0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2}},damp:eS,dampLookAt:function(e,t,r,n,i,s,o){"number"==typeof t?eR.setScalar(t):Array.isArray(t)?eR.set(t[0],t[1],t[2]):eR.copy(t);var a=e.parent;(e.updateWorldMatrix(!0,!1),eA.setFromMatrixPosition(e.matrixWorld),e&&e.isCamera||e&&e.isLight)?eV.lookAt(eA,eR,e.up):eV.lookAt(eR,eA,e.up),eW(e.quaternion,ek.setFromRotationMatrix(eV),r,n,i,s,o),a&&(eV.extractRotation(a.matrixWorld),eN.setFromRotationMatrix(eV),eW(e.quaternion,ek.copy(e.quaternion).premultiply(eN.invert()),r,n,i,s,o))},dampAngle:eP,damp2:function(e,n,i,s,o,a,l){return"number"==typeof n?eC.setScalar(n):Array.isArray(n)?eC.set(n[0],n[1]):eC.copy(n),t=eS(e,"x",eC.x,i,s,o,a,l),r=eS(e,"y",eC.y,i,s,o,a,l),t||r},damp3:eI,damp4:function(e,t,r,n,i,s,u){return"number"==typeof t?eF.setScalar(t):Array.isArray(t)?eF.set(t[0],t[1],t[2],t[3]):eF.copy(t),o=eS(e,"x",eF.x,r,n,i,s,u),a=eS(e,"y",eF.y,r,n,i,s,u),l=eS(e,"z",eF.z,r,n,i,s,u),c=eS(e,"w",eF.w,r,n,i,s,u),o||a||l||c},dampE:function(e,t,r,n,i,s,o){return Array.isArray(t)?ez.set(t[0],t[1],t[2],t[3]):ez.copy(t),u=eP(e,"x",ez.x,r,n,i,s,o),d=eP(e,"y",ez.y,r,n,i,s,o),p=eP(e,"z",ez.z,r,n,i,s,o),u||d||p},dampC:function(e,t,r,n,i,s,o){return t instanceof F.Color?eE.copy(t):Array.isArray(t)?eE.setRGB(t[0],t[1],t[2]):eE.set(t),f=eS(e,"r",eE.r,r,n,i,s,o),m=eS(e,"g",eE.g,r,n,i,s,o),h=eS(e,"b",eE.b,r,n,i,s,o),f||m||h},dampQ:eW,dampS:function(e,t,r,n,i,s,o){return Array.isArray(t)?eG.set(t[0],t[1],t[2]):eG.copy(t),w=eS(e,"radius",eG.radius,r,n,i,s,o),b=eP(e,"phi",eG.phi,r,n,i,s,o),_=eP(e,"theta",eG.theta,r,n,i,s,o),w||b||_},dampM:function(e,t,r,n,i,s,o){return void 0===e.__damp&&(e.__damp={position:new F.Vector3,rotation:new F.Quaternion,scale:new F.Vector3},e.decompose(e.__damp.position,e.__damp.rotation,e.__damp.scale)),Array.isArray(t)?eq.set.apply(eq,ef(t)):eq.copy(t),eq.decompose(eU,e$,eH),j=eI(e.__damp.position,eU,r,n,i,s,o),M=eW(e.__damp.rotation,e$,r,n,i,s,o),S=eI(e.__damp.scale,eH,r,n,i,s,o),e.compose(e.__damp.position,e.__damp.rotation,e.__damp.scale),j||M||S}});function eQ(){let e=(0,N.useRef)(new F.Vector3(19.7,4.4,-31.08)),t=(0,N.useRef)(new F.Vector3).current,r=(0,N.useRef)(new F.Vector3).current;return(0,V.useFrame)((n,i)=>{let{camera:s}=n;!function(e,t,r){let n=et(e);if(ee.getPoint(n,en),ee.getTangent(n,ei).normalize(),eo.crossVectors(ei,es).normalize(),ea.copy(en).addScaledVector(ei,7.2).addScaledVector(es,3.2).addScaledVector(eo,-3),el.copy(en).addScaledVector(ei,7.2).addScaledVector(es,3.2).addScaledVector(eo,3),e<.04)t.copy(er.firstMileWhole.position),r.copy(er.firstMileWhole.target);else if(e<.14){let n=ec((e-.04)/.1);t.lerpVectors(er.firstMileWhole.position,er.firstMileFront.position,n),r.lerpVectors(er.firstMileWhole.target,er.firstMileFront.target,n)}else if(e<.18){let n=ec((e-.14)/.04);t.lerpVectors(er.firstMileFront.position,ea,n),r.lerpVectors(er.firstMileFront.target,en,n)}else if(e<.34)t.copy(ea),r.copy(en);else if(e<.38){let n=ec((e-.34)/.04);t.lerpVectors(ea,er.midMile.position,n),r.lerpVectors(en,er.midMile.target,n)}else if(e<.5)t.copy(er.midMile.position),r.copy(er.midMile.target);else if(e<.54){let n=ec((e-.5)/.04);t.lerpVectors(er.midMile.position,el,n),r.lerpVectors(er.midMile.target,en,n)}else if(e<.72)t.copy(el),r.copy(en);else if(e<.76){let n=ec((e-.72)/.04);t.lerpVectors(el,er.lastMileClose.position,n),r.lerpVectors(en,er.lastMileClose.target,n)}else if(e<.92)if(e<.8)t.copy(er.lastMileClose.position),r.copy(er.lastMileClose.target);else if(e<.84){let n=ec((e-.8)/.04);t.lerpVectors(er.lastMileClose.position,er.lastMileZoomedOut.position,n),r.lerpVectors(er.lastMileClose.target,er.lastMileZoomedOut.target,n)}else t.copy(er.lastMileZoomedOut.position),r.copy(er.lastMileZoomedOut.target);else if(e<.96){let n=ec((e-.92)/.04);t.lerpVectors(er.lastMileZoomedOut.position,er.analytics.position,n),r.lerpVectors(er.lastMileZoomedOut.target,er.analytics.target,n)}else t.copy(er.analytics.position),r.copy(er.analytics.target)}(J.getState().scrollProgress,t,r);let o=Number.isFinite(i)&&i>0?Math.min(i,.1):1/60;eZ.damp3(s.position,t,.35,o),eZ.damp3(e.current,r,.25,o),Number.isFinite(s.position.x)||s.position.copy(t),Number.isFinite(e.current.x)||e.current.copy(r),s.lookAt(e.current);let a=n.size.width/n.size.height,l=a<1?Math.min(75,45/Math.sqrt(a)):45;s.fov!==l&&(s.fov=l,s.updateProjectionMatrix())}),null}function eY({truckRef:e,wheelRefs:t}){let r=(0,N.useRef)(!1),n=(0,N.useRef)(0),i=(0,N.useRef)(0),s=(0,N.useRef)(!1),o=(0,N.useRef)(0),a=(0,N.useRef)(0),l=(0,N.useRef)(0);return(0,V.useFrame)((c,u)=>{var d;let p;if(!e.current)return;let f=Number.isFinite(u)&&u>0?Math.min(u,.1):1/60,m=J.getState().scrollProgress,h=et(m),g=m-i.current;g<-1e-4?s.current=!0:g>1e-4&&(s.current=!1),i.current=m;let v=e.current.children[0];if(v&&e.current.children.length>1&&([...e.current.children].slice(1).forEach(e=>{v.attach(e)}),v.rotation.set(0,-Math.PI/2,0),e.current.traverse(e=>{e.isMesh&&(e.frustumCulled=!1,e.castShadow=!0,e.receiveShadow=!0)})),!r.current){let t;n.current=h,n.current_velocity=0,l.current=h,i.current=m,s.current=!1,o.current=0,o.current_velocity=0;let a=ee.getPoint(n.current);if(n.current>=.99){let e=ee.getTangent(1),r=ee.getPoint(1);t=new F.Vector3().copy(r).addScaledVector(e,1)}else{let e=Math.min(n.current+.01,1);t=ee.getPoint(e)}e.current.position.copy(a),e.current.position.distanceToSquared(t)>1e-4&&e.current.lookAt(t),r.current=!0}eZ.damp(n,"current",h,.3,f),!Number.isFinite(n.current)&&(n.current=h,n.__damp&&(n.__damp={})),n.current=F.MathUtils.clamp(n.current,0,1);let y=ee.getPoint(n.current);if(n.current>=.99){let e=ee.getTangent(1),t=ee.getPoint(1);p=new F.Vector3().copy(t).addScaledVector(e,1)}else{let e=Math.min(n.current+.01,1);p=ee.getPoint(e)}e.current.position.copy(y),e.current.position.distanceToSquared(p)>1e-4&&e.current.lookAt(p);let x=0;n.current>.05&&n.current<.95&&s.current&&(x=Math.PI),eZ.damp(o,"current",x,.2,f),!Number.isFinite(o.current)&&(o.current=x,o.current_velocity=0,o.__damp&&(o.__damp={})),e.current.rotateY(o.current);let w=Math.abs(n.current-l.current);l.current=n.current,n.current>.001&&n.current<.999&&(a.current+=250*w),d=a.current,t&&0!==t.length&&t.forEach((e,t)=>{e.current&&(e.current.rotation.y=d*(t%2==0?1:-1))}),e.current.children&&e.current.children[0]&&(e.current.children[0].position.y=.003*Math.sin(45*c.clock.getElapsedTime()))}),null}let eK=[{pos:[0,4.2,-4.56],target:[0,0,-4.56]},{pos:[9.113,4.2,.944],target:[9.113,0,.944]},{pos:[-10.158,4.2,-9.874],target:[-10.158,0,-9.874]},{pos:[3.513,4.2,9.195],target:[3.513,0,9.195]},{pos:[3.96,4.2,-21.17],target:[3.96,0,-21.17]},{pos:[12.25,4.2,-16.7],target:[12.25,0,-16.7]},{pos:[3.052,4.2,-12.335],target:[3.052,0,-12.335]},{pos:[-2.03,4.2,-16.89],target:[-2.03,0,-16.89]},{pos:[-27.151,3.98,-9],target:[-27.151,0,-9]}],eJ=new F.Color("#333333"),eX=new F.Color("#ffdf6d"),e0=new F.Color("#000000"),e1=new F.Color("#ffdf6d");function e2({pos:e,targetPos:t}){let r=(0,N.useRef)(),n=(0,N.useRef)(),i=(0,N.useRef)();return(0,N.useEffect)(()=>{r.current&&n.current&&(r.current.target=n.current,r.current.target.updateMatrixWorld())},[]),(0,V.useFrame)(()=>{r.current&&(r.current.intensity=0),i.current&&(i.current.material.color.lerpColors(eJ,eX,0),i.current.material.emissive.lerpColors(e0,e1,0))}),(0,R.jsxs)("group",{children:[(0,R.jsx)("spotLight",{ref:r,position:e,intensity:0,distance:12,angle:Math.PI/4.5,penumbra:.6,decay:1.2,color:"#ffdf6d",castShadow:!1}),(0,R.jsxs)("mesh",{ref:i,position:e,children:[(0,R.jsx)("sphereGeometry",{args:[.16,16,16]}),(0,R.jsx)("meshStandardMaterial",{color:"#333333",emissive:"#000000",emissiveIntensity:3.5,roughness:.1})]}),(0,R.jsx)("object3D",{ref:n,position:t})]})}let e3=N.default.memo(function(){return(0,R.jsx)("group",{children:eK.map((e,t)=>(0,R.jsx)(e2,{pos:e.pos,targetPos:e.target},t))})}),e5=new F.Color("#f5f5f7"),e4=new F.Color,e9=new F.Vector3,e6={desktop:{shadows:!0,softShadows:!0,environment:!0,streetLights:!0,dpr:[1,1.5],antialias:!0,shadowMap:2048},tablet:{shadows:!0,softShadows:!1,environment:!0,streetLights:!1,dpr:[1,1.5],antialias:!1,shadowMap:1024},mobile:{shadows:!1,softShadows:!1,environment:!1,streetLights:!1,dpr:[1,1],antialias:!1,shadowMap:512}},e7=N.default.memo(function({truckRef:e,shadows:t,shadowMap:r}){let n=(0,N.useRef)(),i=(0,N.useRef)();return(0,N.useEffect)(()=>{n.current&&i.current&&(n.current.target=i.current)},[]),(0,V.useFrame)(t=>{n.current&&i.current&&e.current&&(e.current.getWorldPosition(e9),i.current.position.copy(e9),i.current.updateMatrixWorld(),n.current.position.set(e9.x+10,e9.y+20,e9.z+10)),t.scene&&(t.scene.background=e4.copy(e5),t.scene.environmentIntensity=1)}),(0,R.jsxs)("group",{children:[(0,R.jsx)("ambientLight",{intensity:.45}),(0,R.jsx)("directionalLight",{ref:n,castShadow:t,position:[10,20,10],intensity:1.5,"shadow-mapSize-width":r,"shadow-mapSize-height":r,"shadow-camera-far":100,"shadow-camera-left":-35,"shadow-camera-right":35,"shadow-camera-top":35,"shadow-camera-bottom":-35,"shadow-bias":-1e-4}),(0,R.jsx)("object3D",{ref:i})]})});function e8({onReady:e}){return(0,N.useEffect)(()=>{let t=0,r=0;return t=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>e?.())}),()=>{cancelAnimationFrame(t),cancelAnimationFrame(r)}},[e]),null}let te=N.default.memo(function({dashboardRefs:e,wheelRefs:t,truckRef:r,tier:n="desktop",onReady:i}){let s=e6[n]??e6.desktop;return(0,R.jsx)("div",{style:{width:"100%",height:"100%",position:"absolute",top:0,left:0},children:(0,R.jsxs)(k.Canvas,{shadows:s.shadows,dpr:s.dpr,camera:{position:[32,12,-18],fov:45},gl:{antialias:s.antialias,powerPreference:"high-performance"},children:[(0,R.jsx)("color",{attach:"background",args:["#f5f5f7"]}),s.softShadows&&(0,R.jsx)(I,{size:10,samples:12,focus:1}),(0,R.jsx)(e7,{truckRef:r,shadows:s.shadows,shadowMap:s.shadowMap}),s.streetLights&&(0,R.jsx)(e3,{}),s.environment?(0,R.jsx)(N.Suspense,{fallback:null,children:(0,R.jsx)(A.Environment,{preset:"city"})}):(0,R.jsx)("hemisphereLight",{args:["#ffffff","#9aa0a6",.9]}),(0,R.jsxs)(N.Suspense,{fallback:null,children:[(0,R.jsx)(K,{dashboardRefs:e,truckRef:r,wheelRefs:t,tier:n}),(0,R.jsx)(e8,{onReady:i})]}),(0,R.jsx)(eY,{truckRef:r,wheelRefs:t}),(0,R.jsx)(eQ,{})]})})});var tt=e.i(89970),tr=e.i(83495);let tn=(e,t,r)=>Math.min(Math.max(e,t),r),ti=e=>{if("u"<typeof document)return 0;let t=document.getElementById("scroll-trigger-trigger");if(!t)return 0;let r=t.getBoundingClientRect().top+window.scrollY,n=t.offsetHeight-window.innerHeight;return r+tn(e,0,1)*n},ts=(e,t)=>{e?e.scrollTo(t,{duration:1.5}):window.scrollTo({top:t,behavior:"smooth"})};tt.default.registerPlugin(tr.ScrollTrigger);let to={desktop:600,tablet:550,mobile:500};function ta({dashboardRefs:e,onPinState:t,tier:r="desktop",ready:n=!1}){let i=J(e=>e.setScrollProgress),s=J(e=>e.setActiveSection),o=(0,N.useRef)(null),a=(0,N.useRef)(0),l=(0,N.useRef)("before"),c=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let r=o.current;if(!r)return;let n=r=>{i(r);let n=r<=2e-4?"before":r>=.9998?"after":"pinned";n!==l.current&&(l.current=n,t?.(n));let o=0;if(r>=.92?o=3:r>=.5?o=2:r>=.12&&(o=1),o!==a.current&&(a.current=o,s(o)),e){var c,u,d;c=e.bars||[],u=e.pieQuarters||[],d=r>=.92?(r-.92)/.08:0,c.forEach((e,t)=>{if(e.current){let r=tn((d-.08*t)/.5,0,1);e.current.scale.y=r}}),u.forEach((e,t)=>{e.current&&(e.current.rotation.y=-.709+d*Math.PI*2*(2+.5*t))})}},u=tr.ScrollTrigger.create({trigger:r,start:"top top",end:"bottom bottom",scrub:2.5,invalidateOnRefresh:!0,onUpdate:e=>n(e.progress),onRefresh:e=>n(e.progress)});c.current=u;let d=requestAnimationFrame(()=>tr.ScrollTrigger.refresh()),p=0,f=new ResizeObserver(()=>{cancelAnimationFrame(p),p=requestAnimationFrame(()=>tr.ScrollTrigger.refresh())});f.observe(document.documentElement);let m=!1;return document.fonts?.ready&&document.fonts.ready.then(()=>{m||tr.ScrollTrigger.refresh()}),()=>{cancelAnimationFrame(d),cancelAnimationFrame(p),f.disconnect(),m=!0,u.kill(),c.current=null}},[i,s,e,t]),(0,N.useEffect)(()=>{n&&tr.ScrollTrigger.refresh()},[n]),(0,R.jsx)("div",{ref:o,id:"scroll-trigger-trigger",style:{position:"relative",width:"100%",height:`${to[r]??600}vh`,pointerEvents:"none",zIndex:0}})}function tl(){let e=J(e=>e.activeSection),t=J(e=>e.lenis);return(0,R.jsx)("div",{className:"side-navigation",id:"main-navbar",children:[{label:"First Mile",index:0},{label:"Mid Mile",index:1},{label:"Last Mile",index:2},{label:"Analytics",index:3}].map(r=>(0,R.jsxs)("button",{onClick:()=>{ts(t,ti([0,.38,.76,.92][r.index]))},className:`side-nav-item ${e===r.index?"active":""}`,children:[(0,R.jsx)("span",{className:"side-nav-label",children:r.label}),(0,R.jsx)("span",{className:"side-nav-dot"})]},r.index))})}let tc=[{id:"first-mile",title:"First Mile Warehouse",subtitle:"Consolidation & Prep",description:"Incoming shipments are securely loaded, checked, and queued for transfer in our high-capacity fulfillment centers.",progressStart:0,progressEnd:.25},{id:"mid-mile",title:"Mid Mile Hub",subtitle:"Sorting & Direct Dispatch",description:"Consolidated goods travel between primary distribution nodes. Heavy logistics lanes sorting thousands of parcels per hour.",progressStart:.25,progressEnd:.5},{id:"last-mile",title:"Last Mile Delivery",subtitle:"Doorstep Courier Services",description:"Local courier fleets take over for the final leg — MileTruth™ AI sequences the fastest doorstep routes and keeps every package tracked through to a confirmed delivery.",progressStart:.5,progressEnd:.75},{id:"analytics",title:"Fulfillment Analytics",subtitle:"Real-Time Operational Insights",description:"A fully centralized dashboard monitoring transit times, fleet coordinates, carbon footprint, and delivery success rates.",progressStart:.75,progressEnd:1}];function tu({children:e,active:t,id:r,className:n=""}){let i=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let e=i.current;if(!e)return;let n=e.querySelectorAll(".section-badge, .section-title, .section-subtitle, .section-description, .section-metrics, .section-supporting, .section-close-btn"),s="promise-section"===r;t?(tt.default.killTweensOf([e,n]),tt.default.to(e,{xPercent:s?-50:0,yPercent:s?-50:0,y:0,scale:1,opacity:1,duration:.85,ease:"power4.out"}),tt.default.fromTo(n,{y:15,opacity:0},{y:0,opacity:1,duration:.6,stagger:.08,ease:"power3.out",delay:.1})):(tt.default.killTweensOf([e,n]),tt.default.to(e,{xPercent:s?-50:0,yPercent:s?-50:0,y:s?18:20,scale:.96,opacity:0,duration:.5,ease:"power3.inOut"}),tt.default.to(n,{y:10,opacity:0,duration:.35,ease:"power2.in"}))},[t,r]),(0,R.jsx)("div",{ref:i,id:r,className:`section-panel ${t?"active":""} ${n}`,style:{opacity:0,transform:"promise-section"===r?"translate(-50%, -50%) translateY(18px) scale(0.96)":"translateY(20px) scale(0.96)"},children:e})}function td({active:e}){let t=tc[0];return(0,R.jsxs)(tu,{active:e,id:"first-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 01"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics",children:[(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"14,250"}),(0,R.jsx)("span",{className:"metric-label",children:"Parcels Processed"})]}),(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"99.98%"}),(0,R.jsx)("span",{className:"metric-label",children:"Sorting Accuracy"})]})]})]})}function tp({active:e}){let t=tc[1],r=J(e=>e.lenis);return(0,R.jsxs)(tu,{active:e,id:"mid-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 02"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics mm-info-strip",children:[(0,R.jsxs)("div",{className:"mm-info-row",children:[(0,R.jsx)("span",{className:"mm-info-icon","aria-hidden":"true",children:(0,R.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,R.jsx)("rect",{x:"1",y:"3",width:"15",height:"13"}),(0,R.jsx)("polygon",{points:"16 8 20 8 23 11 23 16 16 16 16 8"}),(0,R.jsx)("circle",{cx:"5.5",cy:"18.5",r:"2.5"}),(0,R.jsx)("circle",{cx:"18.5",cy:"18.5",r:"2.5"})]})}),(0,R.jsxs)("div",{className:"mm-info-content",children:[(0,R.jsx)("h4",{className:"mm-info-title",children:"Vehicles In Transit"}),(0,R.jsx)("p",{className:"mm-info-text",children:"A live view of active vehicles moving shipments between regional distribution hubs."})]})]}),(0,R.jsxs)("div",{className:"mm-info-row",children:[(0,R.jsx)("span",{className:"mm-info-icon","aria-hidden":"true",children:(0,R.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,R.jsx)("line",{x1:"16.5",y1:"9.4",x2:"7.5",y2:"4.21"}),(0,R.jsx)("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),(0,R.jsx)("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),(0,R.jsx)("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})}),(0,R.jsxs)("div",{className:"mm-info-content",children:[(0,R.jsx)("h4",{className:"mm-info-title",children:"Packages In Transit"}),(0,R.jsx)("p",{className:"mm-info-text",children:"Real-time visibility into parcels currently moving through the mid-mile network."})]})]})]}),(0,R.jsxs)("button",{className:"section-close-btn",onClick:()=>{ts(r,ti(.575))},children:["Continue Journey",(0,R.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{marginLeft:"6px"},children:[(0,R.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),(0,R.jsx)("polyline",{points:"12 5 19 12 12 19"})]})]})]})}function tf({active:e}){let t=tc[2],r=J(e=>e.lenis);return(0,R.jsxs)(tu,{active:e,id:"last-mile-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"Stage 03"}),(0,R.jsx)("h2",{className:"section-title",children:t.title}),(0,R.jsx)("h3",{className:"section-subtitle",children:t.subtitle}),(0,R.jsx)("p",{className:"section-description",children:t.description}),(0,R.jsxs)("div",{className:"section-metrics",children:[(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"99.4%"}),(0,R.jsx)("span",{className:"metric-label",children:"On-Time Delivery"})]}),(0,R.jsxs)("div",{className:"metric-item",children:[(0,R.jsx)("span",{className:"metric-value",children:"12.5 min"}),(0,R.jsx)("span",{className:"metric-label",children:"Avg. Doorstep Time"})]})]}),(0,R.jsxs)("div",{className:"section-supporting",children:[(0,R.jsx)("span",{className:"supporting-dot"}),(0,R.jsxs)("div",{className:"supporting-text",children:[(0,R.jsx)("span",{className:"supporting-value",children:"Real-Time visibility"}),(0,R.jsx)("span",{className:"supporting-label",children:"Live GPS · Active now"})]})]}),(0,R.jsxs)("button",{className:"section-close-btn",onClick:()=>{ts(r,ti(.92))},children:["Continue",(0,R.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{marginLeft:"6px"},children:[(0,R.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),(0,R.jsx)("polyline",{points:"12 5 19 12 12 19"})]})]})]})}function tm({active:e}){return(0,R.jsxs)(tu,{active:e,id:"promise-section",children:[(0,R.jsx)("div",{className:"section-badge",children:"The Doormile Promise"}),(0,R.jsxs)("h2",{className:"section-title promise-title",children:["One Connected System.",(0,R.jsx)("br",{}),"One Promise Kept."]}),(0,R.jsx)("span",{className:"promise-divider","aria-hidden":!0}),(0,R.jsx)("p",{className:"section-description promise-desc",children:"Stop managing three separate logistics services. Doormile unifies first, mid and last mile into a single intelligent delivery system powered by MileTruth™ AI."})]})}var th=e.i(92599);function tg(){let e=J(e=>e.scrollProgress<.14),t=J(e=>e.scrollProgress>=.38&&e.scrollProgress<.5),r=J(e=>e.scrollProgress>=.78&&e.scrollProgress<.875),n=J(e=>e.scrollProgress>=.9);return(0,R.jsxs)("div",{className:"sections-overlay-container",children:[(0,R.jsx)(td,{active:e}),(0,R.jsx)(tp,{active:t}),(0,R.jsx)(tf,{active:r}),(0,R.jsx)(tm,{active:n})]})}function tv({hidden:e}){return(0,R.jsxs)("div",{className:"dm-hiw-3d-loader","aria-hidden":e,style:{position:"absolute",inset:0,zIndex:50,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"18px",background:"linear-gradient(180deg, #f5f5f7 0%, #e9edf2 100%)",opacity:+!e,pointerEvents:e?"none":"auto",transition:"opacity 0.6s ease"},children:[(0,R.jsx)("span",{style:{width:30,height:30,borderRadius:"50%",border:"3px solid rgba(192,18,39,0.18)",borderTopColor:"#c01227",animation:"dm-hiw-spin 0.8s linear infinite"}}),(0,R.jsx)("span",{style:{fontWeight:600,letterSpacing:"0.01em",color:"#1f1f1f",fontSize:"0.95rem"},children:"Loading Doormile Experience…"}),(0,R.jsx)("style",{children:"@keyframes dm-hiw-spin{to{transform:rotate(360deg)}}"})]})}function ty(){return(0,R.jsxs)("section",{className:"dm-hiw-3d-fallback",style:{position:"relative",minHeight:"70vh",display:"flex",alignItems:"flex-end",background:"linear-gradient(180deg, #eef1f5 0%, #dfe5ec 55%, #cfd7e0 100%)",overflow:"hidden"},children:[(0,R.jsx)("img",{src:"/images/home2-banner-1.webp",alt:"Doormile delivery journey — first mile to last mile",loading:"lazy",decoding:"async",onError:e=>{e.currentTarget.style.display="none"},style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover"}}),(0,R.jsx)("div",{style:{position:"relative",padding:"2rem clamp(1rem, 5vw, 4rem)",maxWidth:720},children:(0,R.jsx)("p",{style:{fontWeight:700,fontSize:"clamp(1.25rem, 3vw, 2rem)",lineHeight:1.2,margin:0},children:"From first mile to last mile, every delivery tracked."})})]})}tt.default.registerPlugin(tr.ScrollTrigger),e.s(["default",0,function(){let e=J(e=>e.setLenis),t=function(){let[e,t]=(0,N.useState)(null);return(0,N.useEffect)(()=>{let e,r,n,i,s,o,a;t((r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,n=window.matchMedia("(pointer: coarse)").matches||navigator.maxTouchPoints>0,i=window.innerWidth,s="number"==typeof navigator.deviceMemory?navigator.deviceMemory:8,o=navigator.hardwareConcurrency||8,a=function(){if("u"<typeof document)return!0;try{let e=document.createElement("canvas");return!!(window.WebGLRenderingContext&&(e.getContext("webgl")||e.getContext("experimental-webgl")))}catch{return!1}}(),e=!n&&i>=1024?"desktop":i>=768&&i<=1366?"tablet":n&&i<768||i<768?"mobile":"tablet",(s<=2||o<=2)&&"mobile"!==e&&(e="mobile"),{tier:e,isTouch:n,reducedMotion:r,fallback:r||!a||s<=1,lowMemory:s<=4}))},[]),e}(),r=(0,N.useRef)(null),n=(0,N.useRef)(null),[i,s]=(0,N.useState)("before"),[o,a]=(0,N.useState)(!1),[l,c]=(0,N.useState)(!1),u=(0,N.useCallback)(()=>c(!0),[]),d=t?.tier??"desktop",p=t?.fallback??!1,f=t?.isTouch??!1,m=null!=t&&!p;(0,N.useEffect)(()=>{if(!m)return;let e=r.current;if(!e)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(a(!0),t.disconnect())},{rootMargin:"200% 0px"});return t.observe(e),()=>t.disconnect()},[m]),(0,N.useEffect)(()=>{let t;if(!m||f)return;let r=new th.default({duration:1.2,lerp:.08,syncTouch:!1});e(r),r.on("scroll",tr.ScrollTrigger.update);let n=e=>{r.raf(e),t=requestAnimationFrame(n)};return t=requestAnimationFrame(n),tr.ScrollTrigger.refresh(),()=>{cancelAnimationFrame(t),r.destroy(),e(null)}},[m,f,e]),(0,N.useEffect)(()=>{if(!o)return;let e=n.current;if(!e)return;let t=null,r=r=>{let n=r>=.92;n!==t&&(t=n,e.style.opacity=n?"0.85":"1")};return r(J.getState().scrollProgress),J.subscribe(e=>r(e.scrollProgress))},[o]);let h=(0,N.useRef)(null),g=N.default.useMemo(()=>[{current:null},{current:null},{current:null},{current:null}],[]),v=N.default.useMemo(()=>({bars:[],floorBars:[],pieQuarters:[]}),[]);return null==t?(0,R.jsx)("div",{ref:r,className:"dm-hiw-3d",style:{minHeight:"100vh"},"aria-hidden":!0}):p?(0,R.jsx)(ty,{}):(0,R.jsxs)("div",{ref:r,className:`dm-hiw-3d is-${i}`,children:[(0,R.jsxs)("div",{className:"dm-hiw-3d-stage",children:[(0,R.jsx)("div",{ref:n,className:"canvas-wrapper",style:{transition:"opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1)"},children:o&&(0,R.jsx)(te,{truckRef:h,wheelRefs:g,dashboardRefs:v,tier:d,onReady:u})}),o&&(0,R.jsx)(tv,{hidden:l}),(0,R.jsx)(tl,{}),(0,R.jsx)(tg,{})]}),(0,R.jsx)(ta,{dashboardRefs:v,onPinState:s,tier:d,ready:l})]})}],41626)},88493,e=>{e.n(e.i(41626))}]); |