diff --git a/public/themes/dist_static/js/lib/three-128-orbitControls.js b/public/themes/dist_static/js/lib/three-128-orbitControls.js new file mode 100644 index 0000000..787dafc --- /dev/null +++ b/public/themes/dist_static/js/lib/three-128-orbitControls.js @@ -0,0 +1,1045 @@ +( function () { + + // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). + // + // Orbit - left mouse / touch: one-finger move + // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish + // Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move + + const _changeEvent = { + type: 'change' + }; + const _startEvent = { + type: 'start' + }; + const _endEvent = { + type: 'end' + }; + + class OrbitControls extends THREE.EventDispatcher { + + constructor( object, domElement ) { + + super(); + if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' ); + if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); + this.object = object; + this.domElement = domElement; // Set to false to disable this control + + this.enabled = true; // "target" sets the location of focus, where the object orbits around + + this.target = new THREE.Vector3(); // How far you can dolly in and out ( PerspectiveCamera only ) + + this.minDistance = 0; + this.maxDistance = Infinity; // How far you can zoom in and out ( OrthographicCamera only ) + + this.minZoom = 0; + this.maxZoom = Infinity; // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + + this.minPolarAngle = 0; // radians + + this.maxPolarAngle = Math.PI; // radians + // How far you can orbit horizontally, upper and lower limits. + // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) + + this.minAzimuthAngle = - Infinity; // radians + + this.maxAzimuthAngle = Infinity; // radians + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + + this.enableDamping = false; + this.dampingFactor = 0.05; // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + + this.enableZoom = true; + this.zoomSpeed = 1.0; // Set to false to disable rotating + + this.enableRotate = true; + this.rotateSpeed = 1.0; // Set to false to disable panning + + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up + + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60 + // The four arrow keys + + this.keys = { + LEFT: 'ArrowLeft', + UP: 'ArrowUp', + RIGHT: 'ArrowRight', + BOTTOM: 'ArrowDown' + }; // Mouse buttons + + this.mouseButtons = { + LEFT: THREE.MOUSE.ROTATE, + MIDDLE: THREE.MOUSE.DOLLY, + RIGHT: THREE.MOUSE.PAN + }; // Touch fingers + + this.touches = { + ONE: THREE.TOUCH.ROTATE, + TWO: THREE.TOUCH.DOLLY_PAN + }; // for reset + + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; // the target DOM element for key events + + this._domElementKeyEvents = null; // + // public methods + // + + this.getPolarAngle = function () { + + return spherical.phi; + + }; + + this.getAzimuthalAngle = function () { + + return spherical.theta; + + }; + + this.listenToKeyEvents = function ( domElement ) { + + domElement.addEventListener( 'keydown', onKeyDown ); + this._domElementKeyEvents = domElement; + + }; + + this.saveState = function () { + + scope.target0.copy( scope.target ); + scope.position0.copy( scope.object.position ); + scope.zoom0 = scope.object.zoom; + + }; + + this.reset = function () { + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent( _changeEvent ); + scope.update(); + state = STATE.NONE; + + }; // this method is exposed, but perhaps it would be better if we can make it private... + + + this.update = function () { + + const offset = new THREE.Vector3(); // so camera.up is the orbit axis + + const quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) ); + const quatInverse = quat.clone().invert(); + const lastPosition = new THREE.Vector3(); + const lastQuaternion = new THREE.Quaternion(); + const twoPI = 2 * Math.PI; + return function update() { + + const position = scope.object.position; + offset.copy( position ).sub( scope.target ); // rotate offset to "y-axis-is-up" space + + offset.applyQuaternion( quat ); // angle from z-axis around y-axis + + spherical.setFromVector3( offset ); + + if ( scope.autoRotate && state === STATE.NONE ) { + + rotateLeft( getAutoRotationAngle() ); + + } + + if ( scope.enableDamping ) { + + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + + } else { + + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + + } // restrict theta to be between desired limits + + + let min = scope.minAzimuthAngle; + let max = scope.maxAzimuthAngle; + + if ( isFinite( min ) && isFinite( max ) ) { + + if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI; + if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI; + + if ( min <= max ) { + + spherical.theta = Math.max( min, Math.min( max, spherical.theta ) ); + + } else { + + spherical.theta = spherical.theta > ( min + max ) / 2 ? Math.max( min, spherical.theta ) : Math.min( max, spherical.theta ); + + } + + } // restrict phi to be between desired limits + + + spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); + spherical.makeSafe(); + spherical.radius *= scale; // restrict radius to be between desired limits + + spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); // move target to panned location + + if ( scope.enableDamping === true ) { + + scope.target.addScaledVector( panOffset, scope.dampingFactor ); + + } else { + + scope.target.add( panOffset ); + + } + + offset.setFromSpherical( spherical ); // rotate offset back to "camera-up-vector-is-up" space + + offset.applyQuaternion( quatInverse ); + position.copy( scope.target ).add( offset ); + scope.object.lookAt( scope.target ); + + if ( scope.enableDamping === true ) { + + sphericalDelta.theta *= 1 - scope.dampingFactor; + sphericalDelta.phi *= 1 - scope.dampingFactor; + panOffset.multiplyScalar( 1 - scope.dampingFactor ); + + } else { + + sphericalDelta.set( 0, 0, 0 ); + panOffset.set( 0, 0, 0 ); + + } + + scale = 1; // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + + if ( zoomChanged || lastPosition.distanceToSquared( scope.object.position ) > EPS || 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { + + scope.dispatchEvent( _changeEvent ); + lastPosition.copy( scope.object.position ); + lastQuaternion.copy( scope.object.quaternion ); + zoomChanged = false; + return true; + + } + + return false; + + }; + + }(); + + this.dispose = function () { + + scope.domElement.removeEventListener( 'contextmenu', onContextMenu ); + scope.domElement.removeEventListener( 'pointerdown', onPointerDown ); + scope.domElement.removeEventListener( 'wheel', onMouseWheel ); + scope.domElement.removeEventListener( 'touchstart', onTouchStart ); + scope.domElement.removeEventListener( 'touchend', onTouchEnd ); + scope.domElement.removeEventListener( 'touchmove', onTouchMove ); + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp ); + + if ( scope._domElementKeyEvents !== null ) { + + scope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown ); + + } //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + + }; // + // internals + // + + + const scope = this; + const STATE = { + NONE: - 1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + let state = STATE.NONE; + const EPS = 0.000001; // current position in spherical coordinates + + const spherical = new THREE.Spherical(); + const sphericalDelta = new THREE.Spherical(); + let scale = 1; + const panOffset = new THREE.Vector3(); + let zoomChanged = false; + const rotateStart = new THREE.Vector2(); + const rotateEnd = new THREE.Vector2(); + const rotateDelta = new THREE.Vector2(); + const panStart = new THREE.Vector2(); + const panEnd = new THREE.Vector2(); + const panDelta = new THREE.Vector2(); + const dollyStart = new THREE.Vector2(); + const dollyEnd = new THREE.Vector2(); + const dollyDelta = new THREE.Vector2(); + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function rotateLeft( angle ) { + + sphericalDelta.theta -= angle; + + } + + function rotateUp( angle ) { + + sphericalDelta.phi -= angle; + + } + + const panLeft = function () { + + const v = new THREE.Vector3(); + return function panLeft( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix + + v.multiplyScalar( - distance ); + panOffset.add( v ); + + }; + + }(); + + const panUp = function () { + + const v = new THREE.Vector3(); + return function panUp( distance, objectMatrix ) { + + if ( scope.screenSpacePanning === true ) { + + v.setFromMatrixColumn( objectMatrix, 1 ); + + } else { + + v.setFromMatrixColumn( objectMatrix, 0 ); + v.crossVectors( scope.object.up, v ); + + } + + v.multiplyScalar( distance ); + panOffset.add( v ); + + }; + + }(); // deltaX and deltaY are in pixels; right and down are positive + + + const pan = function () { + + const offset = new THREE.Vector3(); + return function pan( deltaX, deltaY ) { + + const element = scope.domElement; + + if ( scope.object.isPerspectiveCamera ) { + + // perspective + const position = scope.object.position; + offset.copy( position ).sub( scope.target ); + let targetDistance = offset.length(); // half of the fov is center to top of screen + + targetDistance *= Math.tan( scope.object.fov / 2 * Math.PI / 180.0 ); // we use only clientHeight here so aspect ratio does not distort speed + + panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); + panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); + + } else if ( scope.object.isOrthographicCamera ) { + + // orthographic + panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); + panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); + + } else { + + // camera neither orthographic nor perspective + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + scope.enablePan = false; + + } + + }; + + }(); + + function dollyOut( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale /= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + function dollyIn( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale *= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } // + // event callbacks - update the object state + // + + + function handleMouseDownRotate( event ) { + + rotateStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownDolly( event ) { + + dollyStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownPan( event ) { + + panStart.set( event.clientX, event.clientY ); + + } + + function handleMouseMoveRotate( event ) { + + rotateEnd.set( event.clientX, event.clientY ); + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + const element = scope.domElement; + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + rotateStart.copy( rotateEnd ); + scope.update(); + + } + + function handleMouseMoveDolly( event ) { + + dollyEnd.set( event.clientX, event.clientY ); + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyIn( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + scope.update(); + + } + + function handleMouseMovePan( event ) { + + panEnd.set( event.clientX, event.clientY ); + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + pan( panDelta.x, panDelta.y ); + panStart.copy( panEnd ); + scope.update(); + + } + + function handleMouseUp( ) { // no-op + } + + function handleMouseWheel( event ) { + + if ( event.deltaY < 0 ) { + + dollyIn( getZoomScale() ); + + } else if ( event.deltaY > 0 ) { + + dollyOut( getZoomScale() ); + + } + + scope.update(); + + } + + function handleKeyDown( event ) { + + let needsUpdate = false; + + switch ( event.code ) { + + case scope.keys.UP: + pan( 0, scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.BOTTOM: + pan( 0, - scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.LEFT: + pan( scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + case scope.keys.RIGHT: + pan( - scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + } + + if ( needsUpdate ) { + + // prevent the browser from scrolling on cursor keys + event.preventDefault(); + scope.update(); + + } + + } + + function handleTouchStartRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + const x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + const y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + rotateStart.set( x, y ); + + } + + } + + function handleTouchStartPan( event ) { + + if ( event.touches.length == 1 ) { + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + const x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + const y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + panStart.set( x, y ); + + } + + } + + function handleTouchStartDolly( event ) { + + const dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + const dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + const distance = Math.sqrt( dx * dx + dy * dy ); + dollyStart.set( 0, distance ); + + } + + function handleTouchStartDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + if ( scope.enablePan ) handleTouchStartPan( event ); + + } + + function handleTouchStartDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + if ( scope.enableRotate ) handleTouchStartRotate( event ); + + } + + function handleTouchMoveRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + const x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + const y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + rotateEnd.set( x, y ); + + } + + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + const element = scope.domElement; + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + rotateStart.copy( rotateEnd ); + + } + + function handleTouchMovePan( event ) { + + if ( event.touches.length == 1 ) { + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + const x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + const y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + panEnd.set( x, y ); + + } + + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + pan( panDelta.x, panDelta.y ); + panStart.copy( panEnd ); + + } + + function handleTouchMoveDolly( event ) { + + const dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + const dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + const distance = Math.sqrt( dx * dx + dy * dy ); + dollyEnd.set( 0, distance ); + dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) ); + dollyOut( dollyDelta.y ); + dollyStart.copy( dollyEnd ); + + } + + function handleTouchMoveDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + if ( scope.enablePan ) handleTouchMovePan( event ); + + } + + function handleTouchMoveDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + if ( scope.enableRotate ) handleTouchMoveRotate( event ); + + } + + function handleTouchEnd( ) { // no-op + } // + // event handlers - FSM: listen for events and reset state + // + + + function onPointerDown( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseDown( event ); + break; + // TODO touch + + } + + } + + function onPointerMove( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseMove( event ); + break; + // TODO touch + + } + + } + + function onPointerUp( event ) { + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseUp( event ); + break; + // TODO touch + + } + + } + + function onMouseDown( event ) { + + // Prevent the browser from scrolling. + event.preventDefault(); // Manually set the focus since calling preventDefault above + // prevents the browser from setting it automatically. + + scope.domElement.focus ? scope.domElement.focus() : window.focus(); + let mouseAction; + + switch ( event.button ) { + + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + + default: + mouseAction = - 1; + + } + + switch ( mouseAction ) { + + case THREE.MOUSE.DOLLY: + if ( scope.enableZoom === false ) return; + handleMouseDownDolly( event ); + state = STATE.DOLLY; + break; + + case THREE.MOUSE.ROTATE: + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enablePan === false ) return; + handleMouseDownPan( event ); + state = STATE.PAN; + + } else { + + if ( scope.enableRotate === false ) return; + handleMouseDownRotate( event ); + state = STATE.ROTATE; + + } + + break; + + case THREE.MOUSE.PAN: + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enableRotate === false ) return; + handleMouseDownRotate( event ); + state = STATE.ROTATE; + + } else { + + if ( scope.enablePan === false ) return; + handleMouseDownPan( event ); + state = STATE.PAN; + + } + + break; + + default: + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove ); + scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp ); + scope.dispatchEvent( _startEvent ); + + } + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + event.preventDefault(); + + switch ( state ) { + + case STATE.ROTATE: + if ( scope.enableRotate === false ) return; + handleMouseMoveRotate( event ); + break; + + case STATE.DOLLY: + if ( scope.enableZoom === false ) return; + handleMouseMoveDolly( event ); + break; + + case STATE.PAN: + if ( scope.enablePan === false ) return; + handleMouseMovePan( event ); + break; + + } + + } + + function onMouseUp( event ) { + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp ); + if ( scope.enabled === false ) return; + handleMouseUp( event ); + scope.dispatchEvent( _endEvent ); + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + + if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE ) return; + event.preventDefault(); + scope.dispatchEvent( _startEvent ); + handleMouseWheel( event ); + scope.dispatchEvent( _endEvent ); + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false || scope.enablePan === false ) return; + handleKeyDown( event ); + + } + + function onTouchStart( event ) { + + if ( scope.enabled === false ) return; + event.preventDefault(); // prevent scrolling + + switch ( event.touches.length ) { + + case 1: + switch ( scope.touches.ONE ) { + + case THREE.TOUCH.ROTATE: + if ( scope.enableRotate === false ) return; + handleTouchStartRotate( event ); + state = STATE.TOUCH_ROTATE; + break; + + case THREE.TOUCH.PAN: + if ( scope.enablePan === false ) return; + handleTouchStartPan( event ); + state = STATE.TOUCH_PAN; + break; + + default: + state = STATE.NONE; + + } + + break; + + case 2: + switch ( scope.touches.TWO ) { + + case THREE.TOUCH.DOLLY_PAN: + if ( scope.enableZoom === false && scope.enablePan === false ) return; + handleTouchStartDollyPan( event ); + state = STATE.TOUCH_DOLLY_PAN; + break; + + case THREE.TOUCH.DOLLY_ROTATE: + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + handleTouchStartDollyRotate( event ); + state = STATE.TOUCH_DOLLY_ROTATE; + break; + + default: + state = STATE.NONE; + + } + + break; + + default: + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.dispatchEvent( _startEvent ); + + } + + } + + function onTouchMove( event ) { + + if ( scope.enabled === false ) return; + event.preventDefault(); // prevent scrolling + + switch ( state ) { + + case STATE.TOUCH_ROTATE: + if ( scope.enableRotate === false ) return; + handleTouchMoveRotate( event ); + scope.update(); + break; + + case STATE.TOUCH_PAN: + if ( scope.enablePan === false ) return; + handleTouchMovePan( event ); + scope.update(); + break; + + case STATE.TOUCH_DOLLY_PAN: + if ( scope.enableZoom === false && scope.enablePan === false ) return; + handleTouchMoveDollyPan( event ); + scope.update(); + break; + + case STATE.TOUCH_DOLLY_ROTATE: + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + handleTouchMoveDollyRotate( event ); + scope.update(); + break; + + default: + state = STATE.NONE; + + } + + } + + function onTouchEnd( event ) { + + if ( scope.enabled === false ) return; + handleTouchEnd( event ); + scope.dispatchEvent( _endEvent ); + state = STATE.NONE; + + } + + function onContextMenu( event ) { + + if ( scope.enabled === false ) return; + event.preventDefault(); + + } // + + + scope.domElement.addEventListener( 'contextmenu', onContextMenu ); + scope.domElement.addEventListener( 'pointerdown', onPointerDown ); + scope.domElement.addEventListener( 'wheel', onMouseWheel, { + passive: false + } ); + scope.domElement.addEventListener( 'touchstart', onTouchStart, { + passive: false + } ); + scope.domElement.addEventListener( 'touchend', onTouchEnd ); + scope.domElement.addEventListener( 'touchmove', onTouchMove, { + passive: false + } ); // force an update at start + + this.update(); + + } + + } // This set of controls performs orbiting, dollying (zooming), and panning. + // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). + // This is very similar to OrbitControls, another set of touch behavior + // + // Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate + // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish + // Pan - left mouse, or arrow keys / touch: one-finger move + + + class MapControls extends OrbitControls { + + constructor( object, domElement ) { + + super( object, domElement ); + this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up + + this.mouseButtons.LEFT = THREE.MOUSE.PAN; + this.mouseButtons.RIGHT = THREE.MOUSE.ROTATE; + this.touches.ONE = THREE.TOUCH.PAN; + this.touches.TWO = THREE.TOUCH.DOLLY_ROTATE; + + } + + } + + THREE.MapControls = MapControls; + THREE.OrbitControls = OrbitControls; + +} )(); \ No newline at end of file diff --git a/public/themes/dist_static/js/lib/three-r128.min.js b/public/themes/dist_static/js/lib/three-r128.min.js new file mode 100644 index 0000000..8b1a6ab --- /dev/null +++ b/public/themes/dist_static/js/lib/three-r128.min.js @@ -0,0 +1,6 @@ +/** + * @license + * Copyright 2010-2021 Three.js Authors + * SPDX-License-Identifier: MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).THREE={})}(this,(function(t){"use strict";const e="128",n=100,i=300,r=301,s=302,a=303,o=304,l=306,c=307,h=1e3,u=1001,d=1002,p=1003,m=1004,f=1005,g=1006,v=1007,y=1008,x=1009,_=1012,w=1014,b=1015,M=1016,S=1020,T=1022,E=1023,A=1026,L=1027,R=33776,C=33777,P=33778,D=33779,I=35840,N=35841,B=35842,z=35843,F=37492,O=37496,H=2300,G=2301,U=2302,k=2400,V=2401,W=2402,j=2500,q=2501,X=3e3,Y=3001,Z=3007,J=3002,Q=3004,K=3005,$=3006,tt=7680,et=35044,nt=35048,it="300 es";class rt{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+st[t>>16&255]+st[t>>24&255]+"-"+st[255&e]+st[e>>8&255]+"-"+st[e>>16&15|64]+st[e>>24&255]+"-"+st[63&n|128]+st[n>>8&255]+"-"+st[n>>16&255]+st[n>>24&255]+st[255&i]+st[i>>8&255]+st[i>>16&255]+st[i>>24&255]).toUpperCase()}function ht(t,e,n){return Math.max(e,Math.min(n,t))}function ut(t,e){return(t%e+e)%e}function dt(t,e,n){return(1-n)*t+n*e}function pt(t){return 0==(t&t-1)&&0!==t}function mt(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function ft(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var gt=Object.freeze({__proto__:null,DEG2RAD:ot,RAD2DEG:lt,generateUUID:ct,clamp:ht,euclideanModulo:ut,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:dt,damp:function(t,e,n,i){return dt(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(ut(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(at=t%2147483647),at=16807*at%2147483647,(at-1)/2147483646},degToRad:function(t){return t*ot},radToDeg:function(t){return t*lt},isPowerOfTwo:pt,ceilPowerOfTwo:mt,floorPowerOfTwo:ft,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),h=a((e+i)/2),u=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}});class vt{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}vt.prototype.isVector2=!0;class yt{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],w=i[5],b=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*w,r[6]=s*g+a*x+o*b,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*w,r[7]=l*g+c*x+h*b,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*w,r[8]=u*g+d*x+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let xt;yt.prototype.isMatrix3=!0;class _t{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===xt&&(xt=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),xt.width=t.width,xt.height=t.height;const n=xt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=xt}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}}let wt=0;class bt extends rt{constructor(t=bt.DEFAULT_IMAGE,e=bt.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:wt++}),this.uuid=ct(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=o,this.offset=new vt(0,0),this.repeat=new vt(1,1),this.center=new vt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new yt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=ct()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case h:t.x=t.x-Math.floor(t.x);break;case u:t.x=t.x<0?0:1;break;case d:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case h:t.y=t.y-Math.floor(t.y);break;case u:t.y=t.y<0?0:1;break;case d:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function Mt(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?_t.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}bt.DEFAULT_IMAGE=void 0,bt.DEFAULT_MAPPING=i,bt.prototype.isTexture=!0;class St{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(ht(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}At.prototype.isQuaternion=!0;class Lt{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(Ct.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Ct.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Rt.copy(this).projectOnVector(t),this.sub(Rt)}reflect(t){return this.sub(Rt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(ht(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}Lt.prototype.isVector3=!0;const Rt=new Lt,Ct=new At;class Pt{constructor(t=new Lt(1/0,1/0,1/0),e=new Lt(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new Lt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,It),It.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ut),kt.subVectors(this.max,Ut),Bt.subVectors(t.a,Ut),zt.subVectors(t.b,Ut),Ft.subVectors(t.c,Ut),Ot.subVectors(zt,Bt),Ht.subVectors(Ft,zt),Gt.subVectors(Bt,Ft);let e=[0,-Ot.z,Ot.y,0,-Ht.z,Ht.y,0,-Gt.z,Gt.y,Ot.z,0,-Ot.x,Ht.z,0,-Ht.x,Gt.z,0,-Gt.x,-Ot.y,Ot.x,0,-Ht.y,Ht.x,0,-Gt.y,Gt.x,0];return!!jt(e,Bt,zt,Ft,kt)&&(e=[1,0,0,0,1,0,0,0,1],!!jt(e,Bt,zt,Ft,kt)&&(Vt.crossVectors(Ot,Ht),e=[Vt.x,Vt.y,Vt.z],jt(e,Bt,zt,Ft,kt)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new Lt),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return It.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(It).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Dt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Dt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Dt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Dt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Dt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Dt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Dt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Dt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Dt)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Pt.prototype.isBox3=!0;const Dt=[new Lt,new Lt,new Lt,new Lt,new Lt,new Lt,new Lt,new Lt],It=new Lt,Nt=new Pt,Bt=new Lt,zt=new Lt,Ft=new Lt,Ot=new Lt,Ht=new Lt,Gt=new Lt,Ut=new Lt,kt=new Lt,Vt=new Lt,Wt=new Lt;function jt(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){Wt.fromArray(t,s);const a=r.x*Math.abs(Wt.x)+r.y*Math.abs(Wt.y)+r.z*Math.abs(Wt.z),o=e.dot(Wt),l=n.dot(Wt),c=i.dot(Wt);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const qt=new Pt,Xt=new Lt,Yt=new Lt,Zt=new Lt;class Jt{constructor(t=new Lt,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):qt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new Pt),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Zt.subVectors(t,this.center);const e=Zt.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Zt.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Yt.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Xt.copy(t.center).add(Yt)),this.expandByPoint(Xt.copy(t.center).sub(Yt)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Qt=new Lt,Kt=new Lt,$t=new Lt,te=new Lt,ee=new Lt,ne=new Lt,ie=new Lt;class re{constructor(t=new Lt,e=new Lt(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new Lt),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Qt)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new Lt),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Qt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Qt.copy(this.direction).multiplyScalar(e).add(this.origin),Qt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Kt.copy(t).add(e).multiplyScalar(.5),$t.copy(e).sub(t).normalize(),te.copy(this.origin).sub(Kt);const r=.5*t.distanceTo(e),s=-this.direction.dot($t),a=te.dot(this.direction),o=-te.dot($t),l=te.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy($t).multiplyScalar(u).add(Kt),d}intersectSphere(t,e){Qt.subVectors(t.center,this.origin);const n=Qt.dot(this.direction),i=Qt.dot(Qt)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a<0&&o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Qt)}intersectTriangle(t,e,n,i,r){ee.subVectors(e,t),ne.subVectors(n,t),ie.crossVectors(ee,ne);let s,a=this.direction.dot(ie);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}te.subVectors(this.origin,t);const o=s*this.direction.dot(ne.crossVectors(te,ne));if(o<0)return null;const l=s*this.direction.dot(ee.cross(te));if(l<0)return null;if(o+l>a)return null;const c=-s*te.dot(ie);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class se{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new se).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/ae.setFromMatrixColumn(t,0).length(),r=1/ae.setFromMatrixColumn(t,1).length(),s=1/ae.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(le,t,ce)}lookAt(t,e,n){const i=this.elements;return de.subVectors(t,e),0===de.lengthSq()&&(de.z=1),de.normalize(),he.crossVectors(n,de),0===he.lengthSq()&&(1===Math.abs(n.z)?de.x+=1e-4:de.z+=1e-4,de.normalize(),he.crossVectors(n,de)),he.normalize(),ue.crossVectors(de,he),i[0]=he.x,i[4]=ue.x,i[8]=de.x,i[1]=he.y,i[5]=ue.y,i[9]=de.y,i[2]=he.z,i[6]=ue.z,i[10]=de.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],w=i[0],b=i[4],M=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],N=i[7],B=i[11],z=i[15];return r[0]=s*w+a*T+o*R+l*I,r[4]=s*b+a*E+o*C+l*N,r[8]=s*M+a*A+o*P+l*B,r[12]=s*S+a*L+o*D+l*z,r[1]=c*w+h*T+u*R+d*I,r[5]=c*b+h*E+u*C+d*N,r[9]=c*M+h*A+u*P+d*B,r[13]=c*S+h*L+u*D+d*z,r[2]=p*w+m*T+f*R+g*I,r[6]=p*b+m*E+f*C+g*N,r[10]=p*M+m*A+f*P+g*B,r[14]=p*S+m*L+f*D+g*z,r[3]=v*w+y*T+x*R+_*I,r[7]=v*b+y*E+x*C+_*N,r[11]=v*M+y*A+x*P+_*B,r[15]=v*S+y*L+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,y=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,_=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,w=e*v+n*y+i*x+r*_;if(0===w)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/w;return t[0]=v*b,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*b,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*b,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*b,t[4]=y*b,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*b,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*b,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*b,t[8]=x*b,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*b,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*b,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*b,t[12]=_*b,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*b,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*b,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,y=o*c,x=o*h,_=n.x,w=n.y,b=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*w,i[5]=(1-(u+g))*w,i[6]=(f+v)*w,i[7]=0,i[8]=(p+y)*b,i[9]=(f-v)*b,i[10]=(1-(u+m))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=ae.set(i[0],i[1],i[2]).length();const s=ae.set(i[4],i[5],i[6]).length(),a=ae.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],oe.copy(this);const o=1/r,l=1/s,c=1/a;return oe.elements[0]*=o,oe.elements[1]*=o,oe.elements[2]*=o,oe.elements[4]*=l,oe.elements[5]*=l,oe.elements[6]*=l,oe.elements[8]*=c,oe.elements[9]*=c,oe.elements[10]*=c,e.setFromRotationMatrix(oe),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}se.prototype.isMatrix4=!0;const ae=new Lt,oe=new se,le=new Lt(0,0,0),ce=new Lt(1,1,1),he=new Lt,ue=new Lt,de=new Lt,pe=new se,me=new At;class fe{constructor(t=0,e=0,n=0,i=fe.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(ht(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-ht(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(ht(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-ht(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(ht(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-ht(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return pe.makeRotationFromQuaternion(t),this.setFromRotationMatrix(pe,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return me.setFromEuler(this),this.setFromQuaternion(me,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new Lt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}fe.prototype.isEuler=!0,fe.DefaultOrder="XYZ",fe.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class ge{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new Lt),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Ie.getNormalMatrix(t),i=this.coplanarPoint(Pe).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}Ne.prototype.isPlane=!0;const Be=new Lt,ze=new Lt,Fe=new Lt,Oe=new Lt,He=new Lt,Ge=new Lt,Ue=new Lt,ke=new Lt,Ve=new Lt,We=new Lt;class je{constructor(t=new Lt,e=new Lt,n=new Lt){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new Lt),i.subVectors(n,e),Be.subVectors(t,e),i.cross(Be);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Be.subVectors(i,e),ze.subVectors(n,e),Fe.subVectors(t,e);const s=Be.dot(Be),a=Be.dot(ze),o=Be.dot(Fe),l=ze.dot(ze),c=ze.dot(Fe),h=s*l-a*a;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new Lt),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Oe),Oe.x>=0&&Oe.y>=0&&Oe.x+Oe.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,Oe),o.set(0,0),o.addScaledVector(r,Oe.x),o.addScaledVector(s,Oe.y),o.addScaledVector(a,Oe.z),o}static isFrontFacing(t,e,n,i){return Be.subVectors(n,e),ze.subVectors(t,e),Be.cross(ze).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Be.subVectors(this.c,this.b),ze.subVectors(this.a,this.b),.5*Be.cross(ze).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new Lt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return je.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ne),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return je.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return je.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return je.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return je.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new Lt);const n=this.a,i=this.b,r=this.c;let s,a;He.subVectors(i,n),Ge.subVectors(r,n),ke.subVectors(t,n);const o=He.dot(ke),l=Ge.dot(ke);if(o<=0&&l<=0)return e.copy(n);Ve.subVectors(t,i);const c=He.dot(Ve),h=Ge.dot(Ve);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(He,s);We.subVectors(t,r);const d=He.dot(We),p=Ge.dot(We);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector(Ge,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return Ue.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ue,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(He,s).addScaledVector(Ge,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let qe=0;function Xe(){Object.defineProperty(this,"id",{value:qe++}),this.uuid=ct(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=n,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=tt,this.stencilZFail=tt,this.stencilZPass=tt,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}Xe.prototype=Object.assign(Object.create(rt.prototype),{constructor:Xe,isMaterial:!0,onBuild:function(){},onBeforeCompile:function(){},customProgramCacheKey:function(){return this.onBeforeCompile.toString()},setValues:function(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}},toJSON:function(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(n.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Xe.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});const Ye={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ze={h:0,s:0,l:0},Je={h:0,s:0,l:0};function Qe(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Ke(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function $e(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class tn{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=ut(t,1),e=ht(e,0,1),n=ht(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Qe(r,i,t+1/3),this.g=Qe(r,i,t),this.b=Qe(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Ye[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Ke(t.r),this.g=Ke(t.g),this.b=Ke(t.b),this}copyLinearToSRGB(t){return this.r=$e(t.r),this.g=$e(t.g),this.b=$e(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let a,o;const l=(s+r)/2;if(s===r)a=0,o=0;else{const t=r-s;switch(o=l<=.5?t/(r+s):t/(2-r-s),r){case e:a=(n-i)/t+(ne&&(e=t[n]);return e}const vn={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function yn(t,e){return new vn[t](e)}let xn=0;const _n=new se,wn=new Ce,bn=new Lt,Mn=new Pt,Sn=new Pt,Tn=new Lt;class En extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:xn++}),this.uuid=ct(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(gn(t)>65535?dn:hn)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new yt).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}rotateX(t){return _n.makeRotationX(t),this.applyMatrix4(_n),this}rotateY(t){return _n.makeRotationY(t),this.applyMatrix4(_n),this}rotateZ(t){return _n.makeRotationZ(t),this.applyMatrix4(_n),this}translate(t,e,n){return _n.makeTranslation(t,e,n),this.applyMatrix4(_n),this}scale(t,e,n){return _n.makeScale(t,e,n),this.applyMatrix4(_n),this}lookAt(t){return wn.lookAt(t),wn.updateMatrix(),this.applyMatrix4(wn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(bn).negate(),this.translate(bn.x,bn.y,bn.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new En).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Rn.copy(n.boundingSphere),Rn.applyMatrix4(r),!1===t.ray.intersectsSphere(Rn))return;if(An.copy(r).invert(),Ln.copy(t.ray).applyMatrix4(An),null!==n.boundingBox&&!1===Ln.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:Vn.clone(),object:t}}(t,e,n,i,Cn,Pn,Dn,kn);if(p){o&&(Hn.fromBufferAttribute(o,c),Gn.fromBufferAttribute(o,h),Un.fromBufferAttribute(o,u),p.uv=je.getUV(kn,Cn,Pn,Dn,Hn,Gn,Un,new vt)),l&&(Hn.fromBufferAttribute(l,c),Gn.fromBufferAttribute(l,h),Un.fromBufferAttribute(l,u),p.uv2=je.getUV(kn,Cn,Pn,Dn,Hn,Gn,Un,new vt));const t={a:c,b:h,c:u,normal:new Lt,materialIndex:0};je.getNormal(Cn,Pn,Dn,t.normal),p.face=t}return p}Wn.prototype.isMesh=!0;class qn extends En{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,v){const y=s/f,x=p/g,_=s/2,w=p/2,b=m/2,M=f+1,S=g+1;let T=0,E=0;const A=new Lt;for(let s=0;s0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}Jn.prototype.isShaderMaterial=!0;class Qn extends Ce{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new se,this.projectionMatrix=new se,this.projectionMatrixInverse=new se}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new Lt),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Qn.prototype.isCamera=!0;class Kn extends Qn{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*lt*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*ot*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*lt*Math.atan(Math.tan(.5*ot*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*ot*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Kn.prototype.isPerspectiveCamera=!0;const $n=90;class ti extends Ce{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Kn($n,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new Lt(1,0,0)),this.add(i);const r=new Kn($n,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new Lt(-1,0,0)),this.add(r);const s=new Kn($n,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new Lt(0,1,0)),this.add(s);const a=new Kn($n,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new Lt(0,-1,0)),this.add(a);const o=new Kn($n,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new Lt(0,0,1)),this.add(o);const l=new Kn($n,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new Lt(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class ei extends bt{constructor(t,e,n,i,s,a,o,l,c,h){super(t=void 0!==t?t:[],e=void 0!==e?e:r,n,i,s,a,o=void 0!==o?o:T,l,c,h),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}ei.prototype.isCubeTexture=!0;class ni extends Tt{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),e=e||{},this.texture=new ei(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:g,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=E,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new qn(5,5,5),r=new Jn({name:"CubemapFromEquirect",uniforms:Xn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new Wn(i,r),a=e.minFilter;e.minFilter===y&&(e.minFilter=g);return new ti(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}ni.prototype.isWebGLCubeRenderTarget=!0;class ii extends bt{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:p,this.minFilter=void 0!==c?c:p,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}ii.prototype.isDataTexture=!0;const ri=new Jt,si=new Lt;class ai{constructor(t=new Ne,e=new Ne,n=new Ne,i=new Ne,r=new Ne,s=new Ne){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],m=n[11],f=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-o,m-u,y-f).normalize(),e[1].setComponents(a+i,h+o,m+u,y+f).normalize(),e[2].setComponents(a+r,h+l,m+d,y+g).normalize(),e[3].setComponents(a-r,h-l,m-d,y-g).normalize(),e[4].setComponents(a-s,h-c,m-p,y-v).normalize(),e[5].setComponents(a+s,h+c,m+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),ri.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(ri)}intersectsSprite(t){return ri.center.set(0,0,0),ri.radius=.7071067811865476,ri.applyMatrix4(t.matrixWorld),this.intersectsSphere(ri)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,si.y=i.normal.y>0?t.max.y:t.min.y,si.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(si)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function oi(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function li(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},ui={common:{diffuse:{value:new tn(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new yt},uv2Transform:{value:new yt},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new vt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new tn(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new tn(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new yt}},sprite:{diffuse:{value:new tn(15658734)},opacity:{value:1},center:{value:new vt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new yt}}},di={basic:{uniforms:Yn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:Yn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.fog,ui.lights,{emissive:{value:new tn(0)}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:Yn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.fog,ui.lights,{emissive:{value:new tn(0)},specular:{value:new tn(1118481)},shininess:{value:30}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:Yn([ui.common,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.roughnessmap,ui.metalnessmap,ui.fog,ui.lights,{emissive:{value:new tn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},toon:{uniforms:Yn([ui.common,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.gradientmap,ui.fog,ui.lights,{emissive:{value:new tn(0)}}]),vertexShader:hi.meshtoon_vert,fragmentShader:hi.meshtoon_frag},matcap:{uniforms:Yn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:Yn([ui.points,ui.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:Yn([ui.common,ui.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:Yn([ui.common,ui.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:Yn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,{opacity:{value:1}}]),vertexShader:hi.normal_vert,fragmentShader:hi.normal_frag},sprite:{uniforms:Yn([ui.sprite,ui.fog]),vertexShader:hi.sprite_vert,fragmentShader:hi.sprite_frag},background:{uniforms:{uvTransform:{value:new yt},t2D:{value:null}},vertexShader:hi.background_vert,fragmentShader:hi.background_frag},cube:{uniforms:Yn([ui.envmap,{opacity:{value:1}}]),vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distanceRGBA:{uniforms:Yn([ui.common,ui.displacementmap,{referencePosition:{value:new Lt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distanceRGBA_vert,fragmentShader:hi.distanceRGBA_frag},shadow:{uniforms:Yn([ui.lights,ui.fog,{color:{value:new tn(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};function pi(t,e,n,i,r){const s=new tn(0);let a,o,c=0,h=null,u=0,d=null;function p(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),c=e,p(s,c)},getClearAlpha:function(){return c},setClearAlpha:function(t){c=t,p(s,c)},render:function(n,r,m,f){let g=!0===r.isScene?r.background:null;g&&g.isTexture&&(g=e.get(g));const v=t.xr,y=v.getSession&&v.getSession();y&&"additive"===y.environmentBlendMode&&(g=null),null===g?p(s,c):g&&g.isColor&&(p(g,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),g&&(g.isCubeTexture||g.mapping===l)?(void 0===o&&(o=new Wn(new qn(1,1,1),new Jn({name:"BackgroundCubeMaterial",uniforms:Xn(di.cube.uniforms),vertexShader:di.cube.vertexShader,fragmentShader:di.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=g,o.material.uniforms.flipEnvMap.value=g.isCubeTexture&&g._needsFlipEnvMap?-1:1,h===g&&u===g.version&&d===t.toneMapping||(o.material.needsUpdate=!0,h=g,u=g.version,d=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):g&&g.isTexture&&(void 0===a&&(a=new Wn(new ci(2,2),new Jn({name:"BackgroundMaterial",uniforms:Xn(di.background.uniforms),vertexShader:di.background.vertexShader,fragmentShader:di.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=g,!0===g.matrixAutoUpdate&&g.updateMatrix(),a.material.uniforms.uvTransform.value.copy(g.matrix),h===g&&u===g.version&&d===t.toneMapping||(a.material.needsUpdate=!0,h=g,u=g.version,d=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function mi(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==s,o={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const s=l[e];if(void 0!==s){const e=s.normalized,r=s.itemSize,a=n.get(s);if(void 0===a)continue;const l=a.buffer,c=a.type,h=a.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,a=n.stride,u=s.offset;n&&n.isInstancedInterleavedBuffer?(f(i,n.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=n.meshPerAttribute*n.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,a*h,u*h)}else s.isInstancedBufferAttribute?(f(i,s.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=s.meshPerAttribute*s.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i+0,1),f(i+1,1),f(i+2,1),f(i+3,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==x&&t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:m,disableUnusedAttributes:g}}function fi(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](s,i,a,o),n.update(a,s,o)}}function gi(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),m=t.getParameter(36347),f=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=s||e.has("OES_texture_float");return{isWebGL2:s,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:s?t.getParameter(36183):0}}function vi(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new Ne,o=new yt,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const a=t.getRenderTarget(),o=new ni(s.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(a),r.addEventListener("dispose",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function xi(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function _i(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index&&e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener("dispose",a),delete r[o.id];const l=s.get(o);l&&(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e65535?dn:hn)(n,1);o.version=a;const l=s.get(t);l&&e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let s=Ii[r];if(void 0===s&&(s=new Float32Array(r),Ii[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function Hi(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function kr(t){return t.replace(Ur,Vr)}function Vr(t,e){const n=hi[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return kr(n)}const Wr=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,jr=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function qr(t){return t.replace(jr,Yr).replace(Wr,Xr)}function Xr(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Yr(t,e,n,i)}function Yr(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,v=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Or).join("\n")}(n),y=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),x=a.createProgram();let _,w,b=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(_=[y].filter(Or).join("\n"),_.length>0&&(_+="\n"),w=[v,y].filter(Or).join("\n"),w.length>0&&(w+="\n")):(_=[Zr(n),"#define SHADER_NAME "+n.shaderName,y,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+g,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+m:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+d:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Or).join("\n"),w=[v,Zr(n),"#define SHADER_NAME "+n.shaderName,y,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+g,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+p:"",n.envMap?"#define "+m:"",n.envMap?"#define "+f:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+d:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?hi.tonemapping_pars_fragment:"",0!==n.toneMapping?Fr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",hi.encodings_pars_fragment,n.map?Br("mapTexelToLinear",n.mapEncoding):"",n.matcap?Br("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Br("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Br("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Br("lightMapTexelToLinear",n.lightMapEncoding):"",zr("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Or).join("\n")),h=kr(h),h=Hr(h,n),h=Gr(h,n),u=kr(u),u=Hr(u,n),u=Gr(u,n),h=qr(h),u=qr(u),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(b="#version 300 es\n",_=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,w=["#define varying in",n.glslVersion===it?"":"out highp vec4 pc_fragColor;",n.glslVersion===it?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+w);const M=b+w+u,S=Pr(a,35633,b+_+h),T=Pr(a,35632,M);if(a.attachShader(x,S),a.attachShader(x,T),void 0!==n.index0AttributeName?a.bindAttribLocation(x,0,n.index0AttributeName):!0===n.morphTargets&&a.bindAttribLocation(x,0,"position"),a.linkProgram(x),t.debug.checkShaderErrors){const t=a.getProgramInfoLog(x).trim(),e=a.getShaderInfoLog(S).trim(),n=a.getShaderInfoLog(T).trim();let i=!0,r=!0;if(!1===a.getProgramParameter(x,35714)){i=!1;const e=Nr(a,S,"vertex"),n=Nr(a,T,"fragment");console.error("THREE.WebGLProgram: shader error: ",a.getError(),"35715",a.getProgramParameter(x,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:_},fragmentShader:{log:n,prefix:w}})}let E,A;return a.deleteShader(S),a.deleteShader(T),this.getUniforms=function(){return void 0===E&&(E=new Cr(a,x)),E},this.getAttributes=function(){return void 0===A&&(A=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:S,useVertexTexture:u,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&g.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:o||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:o||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||$r),r.length>1&&r.sort(e||ts)}}}function ns(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new es(t),e.set(n,[r])):i>=e.get(n).length?(r=new es(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function is(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new Lt,color:new tn};break;case"SpotLight":n={position:new Lt,direction:new Lt,color:new tn,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new Lt,color:new tn,distance:0,decay:0};break;case"HemisphereLight":n={direction:new Lt,skyColor:new tn,groundColor:new tn};break;case"RectAreaLight":n={color:new tn,position:new Lt,halfWidth:new Lt,halfHeight:new Lt}}return t[e.id]=n,n}}}let rs=0;function ss(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function as(t,e){const n=new is,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new vt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new vt,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new Lt);const s=new Lt,a=new se,o=new se;return{setup:function(s){let a=0,o=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,m=0,f=0,g=0;s.sort(ss);for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=ui.LTC_FLOAT_1,r.rectAreaLTC2=ui.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=ui.LTC_HALF_1,r.rectAreaLTC2=ui.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===m&&v.numPointShadows===f&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=f,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=m,v.numPointShadows=f,v.numSpotShadows=g,r.version=rs++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(s=new os(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class cs extends Xe{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}cs.prototype.isMeshDepthMaterial=!0;class hs extends Xe{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new Lt,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}hs.prototype.isMeshDistanceMaterial=!0;function us(t,e,n){let i=new ai;const r=new vt,s=new vt,a=new St,o=[],l=[],c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new Jn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new vt},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),m=d.clone();m.defines.HORIZONTAL_PASS=1;const f=new En;f.setAttribute("position",new sn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new Wn(f,d),y=this;function x(n,i){const r=e.update(v);d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,v,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,m,v,null)}function _(t,e,n){const i=t<<0|e<<1|n<<2;let r=o[i];return void 0===r&&(r=new cs({depthPacking:3201,morphTargets:t,skinning:e}),o[i]=r),r}function w(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new hs({morphTargets:t,skinning:e}),l[i]=r),r}function b(e,n,i,r,s,a,o){let l=null,h=_,d=e.customDepthMaterial;if(!0===r.isPointLight&&(h=w,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=h(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=s,l.farDistance=a),l}function M(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(s.x=Math.floor(h/m.x),r.x=s.x*m.x,u.mapSize.x=s.x),r.y>h&&(s.y=Math.floor(h/m.y),r.y=s.y*m.y,u.mapSize.y=s.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:g,magFilter:g,format:E};u.map=new Tt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Tt(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:p,magFilter:p,format:E};u.map=new Tt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==R.indexOf("OpenGL ES")&&(L=parseFloat(/^OpenGL ES (\d)/.exec(R)[1]),A=L>=2);let C=null,P={};const D=new St(0,0,t.canvas.width,t.canvas.height),I=new St(0,0,t.canvas.width,t.canvas.height);function N(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?ft:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===P&&(P=I(s,a));const o=n?I(s,a):P;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function B(t){return pt(t.width)&&pt(t.height)}function z(t,e){return t.generateMipmaps&&e&&t.minFilter!==p&&t.minFilter!==g}function F(e,n,r,s){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s))}function O(n,i,r){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let s=i;return 6403===i&&(5126===r&&(s=33326),5131===r&&(s=33325),5121===r&&(s=33321)),6407===i&&(5126===r&&(s=34837),5131===r&&(s=34843),5121===r&&(s=32849)),6408===i&&(5126===r&&(s=34836),5131===r&&(s=34842),5121===r&&(s=32856)),33325!==s&&33326!==s&&34842!==s&&34836!==s||e.get("EXT_color_buffer_float"),s}function H(t){return t===p||t===m||t===f?9728:9729}function G(e){const n=e.target;n.removeEventListener("dispose",G),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&C.delete(n),a.memory.textures--}function U(e){const n=e.target;n.removeEventListener("dispose",U),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture&&t.deleteTexture(s.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);i.remove(n),i.remove(e)}(n),a.memory.textures--}let k=0;function V(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=a.render.frame;C.get(t)!==e&&(C.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void Z(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function W(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;Y(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const a=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=a||l?l?i.image[t].image:i.image[t]:N(i.image[t],!1,!0,c);const u=h[0],d=B(u)||o,p=s.convert(i.format),m=s.convert(i.type),f=O(i.internalFormat,p,m);let g;if(X(34067,i,d),a){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function Y(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",G),e.__webglTexture=t.createTexture(),a.memory.textures++)}function Z(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),Y(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o&&(t.wrapS!==u||t.wrapT!==u||t.minFilter!==p&&t.minFilter!==g)}(i)&&!1===B(i.image),c=N(i.image,l,!1,x),h=B(c)||o,d=s.convert(i.format);let m,f=s.convert(i.type),v=O(i.internalFormat,d,f);X(a,i,h);const y=i.mipmaps;if(i.isDepthTexture)v=6402,o?v=i.type===b?36012:i.type===w?33190:i.type===S?35056:33189:i.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===A&&6402===v&&i.type!==_&&i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=_,f=s.convert(i.type)),i.format===L&&6402===v&&(v=34041,i.type!==S&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=S,f=s.convert(i.type))),n.texImage2D(3553,0,v,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(y.length>0&&h){for(let t=0,e=y.length;t0&&h){for(let t=0,e=y.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),k+=1,t},this.resetTextureUnits=function(){k=0},this.setTexture2D=V,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Z(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Z(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=W,this.setupRenderTarget=function(e){const r=e.texture,l=i.get(e),c=i.get(r);e.addEventListener("dispose",U),c.__webglTexture=t.createTexture(),c.__version=r.version,a.memory.textures++;const h=!0===e.isWebGLCubeRenderTarget,u=!0===e.isWebGLMultisampleRenderTarget,d=r.isDataTexture3D||r.isDataTexture2DArray,p=B(e)||o;if(!o||r.format!==T||r.type!==b&&r.type!==M||(r.format=E,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),h){l.__webglFramebuffer=[];for(let e=0;e<6;e++)l.__webglFramebuffer[e]=t.createFramebuffer()}else if(l.__webglFramebuffer=t.createFramebuffer(),u)if(o){l.__webglMultisampledFramebuffer=t.createFramebuffer(),l.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,l.__webglColorRenderbuffer);const i=s.convert(r.format),a=s.convert(r.type),o=O(r.internalFormat,i,a),c=$(e);t.renderbufferStorageMultisample(36161,c,o,e.width,e.height),n.bindFramebuffer(36160,l.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,l.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(l.__webglDepthRenderbuffer=t.createRenderbuffer(),Q(l.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(h){n.bindTexture(34067,c.__webglTexture),X(34067,r,p);for(let t=0;t<6;t++)J(l.__webglFramebuffer[t],e,36064,34069+t);z(r,p)&&F(34067,r,e.width,e.height),n.bindTexture(34067,null)}else{let t=3553;if(d)if(o){t=r.isDataTexture3D?32879:35866}else console.warn("THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.");n.bindTexture(t,c.__webglTexture),X(t,r,p),J(l.__webglFramebuffer,e,36064,t),z(r,p)&&F(3553,r,e.width,e.height),n.bindTexture(3553,null)}e.depthBuffer&&K(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(z(e,B(t)||o)){const r=t.isWebGLCubeRenderTarget?34067:3553,s=i.get(e).__webglTexture;n.bindTexture(r,s),F(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(o){const r=e.width,s=e.height;let a=16384;e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024);const o=i.get(e);n.bindFramebuffer(36008,o.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,o.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,o.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===tt&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),tt=!0),t=t.texture),V(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===et&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),et=!0),t=t.texture),W(t,e)}}function ms(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===x)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===_)return 5123;if(1013===t)return 5124;if(t===w)return 5125;if(t===b)return 5126;if(t===M)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===T)return 6407;if(t===E)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===A)return 6402;if(t===L)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(t===R||t===C||t===P||t===D){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(t===R)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===C)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===P)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===D)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(t===I||t===N||t===B||t===z){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(t===I)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===N)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===B)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===z)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((t===F||t===O)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(t===F)return n.COMPRESSED_RGB8_ETC2;if(t===O)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):t===S?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class fs extends Kn{constructor(t=[]){super(),this.cameras=t}}fs.prototype.isArrayCamera=!0;class gs extends Ce{constructor(){super(),this.type="Group"}}gs.prototype.isGroup=!0;const vs={type:"move"};class ys{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new gs,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new gs,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Lt,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Lt),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new gs,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Lt,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Lt),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(vs))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new gs;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching&&a>o+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class xs extends rt{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,a=null,o="local-floor",l=null;const c=[],h=new Map,u=new Kn;u.layers.enable(1),u.viewport=new St;const d=new Kn;d.layers.enable(2),d.viewport=new St;const p=[u,d],m=new fs;m.layers.enable(1),m.layers.enable(2);let f=null,g=null;function v(t){const e=h.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function y(){h.forEach((function(t,e){t.disconnect(e)})),h.clear(),f=null,g=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function x(t){const e=r.inputSources;for(let t=0;t0&&Rt(s,t,e),a.length>0&&Rt(a,t,e),null!==_&&(J.updateRenderTargetMipmap(_),J.updateMultisampleRenderTarget(_)),!0===t.isScene&&t.onAfterRender(f,t,e),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),dt.resetDefaultState(),w=-1,S=null,m.pop(),d=m.length>0?m[m.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return v},this.getActiveMipmapLevel=function(){return y},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,v=e,y=n,t&&void 0===Z.get(t).__webglFramebuffer&&J.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(s=!0);const a=Z.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=a[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Z.get(t).__webglMultisampledFramebuffer:a,T.copy(t.viewport),A.copy(t.scissor),L=t.scissorTest}else T.copy(N).multiplyScalar(P).floor(),A.copy(B).multiplyScalar(P).floor(),L=z;if(q.bindFramebuffer(36160,i),q.viewport(T),q.scissor(A),q.setScissorTest(L),r){const i=Z.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(s){const i=Z.get(t.texture),r=e||0;pt.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=Z.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){q.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==E&&ut.convert(o)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===M&&(W.has("EXT_color_buffer_half_float")||j.isWebGL2&&W.has("EXT_color_buffer_float"));if(!(l===x||ut.convert(l)===pt.getParameter(35738)||l===b&&(j.isWebGL2||W.has("OES_texture_float")||W.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(o),ut.convert(l),s):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const t=null!==_?Z.get(_).__webglFramebuffer:null;q.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i),a=ut.convert(e.format);J.setTexture2D(e,0),pt.copyTexImage2D(3553,n,a,t.x,t.y,r,s,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=ut.convert(n.format),o=ut.convert(n.type);J.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(f.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const{width:s,height:a,data:o}=n.image,l=ut.convert(i.format),c=ut.convert(i.type);let h;if(i.isDataTexture3D)J.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");J.setTexture2DArray(i,0),h=35866}pt.pixelStorei(37440,i.flipY),pt.pixelStorei(37441,i.premultiplyAlpha),pt.pixelStorei(3317,i.unpackAlignment);const u=pt.getParameter(3314),d=pt.getParameter(32878),p=pt.getParameter(3316),m=pt.getParameter(3315),g=pt.getParameter(32877);pt.pixelStorei(3314,s),pt.pixelStorei(32878,a),pt.pixelStorei(3316,t.min.x),pt.pixelStorei(3315,t.min.y),pt.pixelStorei(32877,t.min.z),pt.texSubImage3D(h,r,e.x,e.y,e.z,t.max.x-t.min.x+1,t.max.y-t.min.y+1,t.max.z-t.min.z+1,l,c,o),pt.pixelStorei(3314,u),pt.pixelStorei(32878,d),pt.pixelStorei(3316,p),pt.pixelStorei(3315,m),pt.pixelStorei(32877,g),0===r&&i.generateMipmaps&&pt.generateMipmap(h),q.unbindTexture()},this.initTexture=function(t){J.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){v=0,y=0,_=null,q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}class bs extends ws{}bs.prototype.isWebGL1Renderer=!0;class Ms{constructor(t,e=25e-5){this.name="",this.color=new tn(t),this.density=e}clone(){return new Ms(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}Ms.prototype.isFogExp2=!0;class Ss{constructor(t,e=1,n=1e3){this.name="",this.color=new tn(t),this.near=e,this.far=n}clone(){return new Ss(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}Ss.prototype.isFog=!0;class Ts extends Ce{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}Ts.prototype.isScene=!0;class Es{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=et,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=ct(),this.onUploadCallback=function(){}}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:Ps.clone(),uv:je.getUV(Ps,Fs,Os,Hs,Gs,Us,ks,new vt),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Ws(t,e,n,i,r,s){Ns.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(Bs.x=s*Ns.x-r*Ns.y,Bs.y=r*Ns.x+s*Ns.y):Bs.copy(Ns),t.copy(e),t.x+=Bs.x,t.y+=Bs.y,t.applyMatrix4(zs)}Vs.prototype.isSprite=!0;const js=new Lt,qs=new Lt;class Xs extends Ce{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){js.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(js);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){js.setFromMatrixPosition(t.matrixWorld),qs.setFromMatrixPosition(this.matrixWorld);const n=js.distanceTo(qs)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;io)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}fa.prototype.isLine=!0;const ga=new Lt,va=new Lt;class ya extends fa{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function Ea(t,e,n,i,r,s,a){const o=ba.distanceSqToPoint(t);if(or.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}Ta.prototype.isPoints=!0;class Aa extends bt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.format=void 0!==a?a:T,this.minFilter=void 0!==s?s:g,this.magFilter=void 0!==r?r:g,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}Aa.prototype.isVideoTexture=!0;class La extends bt{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}La.prototype.isCompressedTexture=!0;class Ra extends bt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}Ra.prototype.isCanvasTexture=!0;class Ca extends bt{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:A)!==A&&c!==L)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===A&&(n=_),void 0===n&&c===L&&(n=S),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:p,this.minFilter=void 0!==o?o:p,this.flipY=!1,this.generateMipmaps=!1}}Ca.prototype.isDepthTexture=!0;class Pa extends En{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const r=[],s=[],a=[],o=[],l=new Lt,c=new vt;s.push(0,0,0),a.push(0,0,1),o.push(.5,.5);for(let r=0,h=3;r<=e;r++,h+=3){const u=n+r/e*i;l.x=t*Math.cos(u),l.y=t*Math.sin(u),s.push(l.x,l.y,l.z),a.push(0,0,1),c.x=(s[h]/t+1)/2,c.y=(s[h+1]/t+1)/2,o.push(c.x,c.y)}for(let t=1;t<=e;t++)r.push(t,t+1,0);this.setIndex(r),this.setAttribute("position",new mn(s,3)),this.setAttribute("normal",new mn(a,3)),this.setAttribute("uv",new mn(o,2))}}class Da extends En{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,a=0,o=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],h=[],u=[],d=[];let p=0;const m=[],f=n/2;let g=0;function v(n){const r=p,s=new vt,m=new Lt;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t<=i;t++)h.push(0,f*x,0),u.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t<=i;t++){const e=t/i*o+a,n=Math.cos(e),r=Math.sin(e);m.x=y*r,m.y=f*x,m.z=y*n,h.push(m.x,m.y,m.z),u.push(0,x,0),s.x=.5*n+.5,s.y=.5*r*x+.5,d.push(s.x,s.y),p++}for(let t=0;t0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new mn(h,3)),this.setAttribute("normal",new mn(u,3)),this.setAttribute("uv",new mn(d,2))}}class Ia extends Da{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}}class Na extends En{constructor(t,e,n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new mn(r,3)),this.setAttribute("normal",new mn(r.slice(),3)),this.setAttribute("uv",new mn(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}}class Ba extends Na{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}}const za=new Lt,Fa=new Lt,Oa=new Lt,Ha=new je;class Ga extends En{constructor(t,e){if(super(),this.type="EdgesGeometry",this.parameters={thresholdAngle:e},e=void 0!==e?e:1,!0===t.isGeometry)return void console.error("THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");const n=Math.pow(10,4),i=Math.cos(ot*e),r=t.getIndex(),s=t.getAttribute("position"),a=r?r.count:s.count,o=[0,0,0],l=["a","b","c"],c=new Array(3),h={},u=[];for(let t=0;t80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return Wa(s,a,n,o,l,p),a};function ka(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s0)for(s=e;s=e;s-=i)a=co(s,t[s],t[s+1],a);return a&&io(a,a.next)&&(ho(a),a=a.next),a}function Va(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!io(i,i.next)&&0!==no(i.prev,i,i.next))i=i.next;else{if(ho(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function Wa(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ka(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?qa(t,i,r,s):ja(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),ho(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?Wa(t=Xa(Va(t),e,n),e,n,i,r,s,2):2===a&&Ya(t,e,n,i,r,s):Wa(Va(t),e,n,i,r,s,1);break}}function ja(t){const e=t.prev,n=t,i=t.next;if(no(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(to(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&no(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function qa(t,e,n,i){const r=t.prev,s=t,a=t.next;if(no(r,s,a)>=0)return!1;const o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,h=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=Ka(o,l,e,n,i),d=Ka(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&to(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&no(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&to(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&no(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&to(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&no(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&to(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&no(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function Xa(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!io(r,s)&&ro(r,i,i.next,s)&&oo(r,s)&&oo(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),ho(i),ho(i.next),i=t=s),i=i.next}while(i!==t);return Va(i)}function Ya(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&eo(a,t)){let o=lo(a,t);return a=Va(a,a.next),o=Va(o,o.next),Wa(a,e,n,i,r,s),void Wa(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function Za(t,e){return t.x-e.x}function Ja(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x=n.x&&n.x>=l&&i!==n.x&&to(rs.x||n.x===s.x&&Qa(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e)){const n=lo(e,t);Va(e,e.next),Va(n,n.next)}}function Qa(t,e){return no(t.prev,t,e.prev)<0&&no(e.next,t,t.next)<0}function Ka(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function $a(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-o)-(n-a)*(e-o)>=0&&(n-a)*(s-o)-(r-a)*(i-o)>=0}function eo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&ro(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(oo(t,e)&&oo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(no(t.prev,t,e.prev)||no(t,e.prev,e))||io(t,e)&&no(t.prev,t,t.next)>0&&no(e.prev,e,e.next)>0)}function no(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function io(t,e){return t.x===e.x&&t.y===e.y}function ro(t,e,n,i){const r=ao(no(t,e,n)),s=ao(no(t,e,i)),a=ao(no(n,i,t)),o=ao(no(n,i,e));return r!==s&&a!==o||(!(0!==r||!so(t,n,e))||(!(0!==s||!so(t,i,e))||(!(0!==a||!so(n,t,i))||!(0!==o||!so(n,e,i)))))}function so(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function ao(t){return t>0?1:t<0?-1:0}function oo(t,e){return no(t.prev,t,t.next)<0?no(t,e,t.next)>=0&&no(t,t.prev,e)>=0:no(t,e,t.prev)<0||no(t,t.next,e)<0}function lo(t,e){const n=new uo(t.i,t.x,t.y),i=new uo(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function co(t,e,n,i){const r=new uo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function ho(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function uo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class po{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function fo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new vt(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new vt(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t=0?(t(i-o,p,h),u.subVectors(c,h)):(t(i+o,p,h),u.subVectors(h,c)),p-o>=0?(t(i,p-o,h),d.subVectors(c,h)):(t(i,p+o,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),s.push(l.x,l.y,l.z),a.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||o=i)){l.push(e.times[t]);for(let n=0;ns.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=Vo.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=Vo.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new At).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=n,n=0}}for(;n>>1;te;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=Vo.arraySlice(n,r,s),this.values=Vo.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==s&&s>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&Vo.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=Vo.arraySlice(this.times),e=Vo.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===U,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=Vo.arraySlice(t,0,s),this.values=Vo.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=Vo.arraySlice(this.times,0),e=Vo.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Yo.prototype.TimeBufferType=Float32Array,Yo.prototype.ValueBufferType=Float32Array,Yo.prototype.DefaultInterpolation=G;class Zo extends Yo{}Zo.prototype.ValueTypeName="bool",Zo.prototype.ValueBufferType=Array,Zo.prototype.DefaultInterpolation=H,Zo.prototype.InterpolantFactoryMethodLinear=void 0,Zo.prototype.InterpolantFactoryMethodSmooth=void 0;class Jo extends Yo{}Jo.prototype.ValueTypeName="color";class Qo extends Yo{}Qo.prototype.ValueTypeName="number";class Ko extends Wo{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)At.slerpFlat(r,0,s,l-a,s,l,o);return r}}class $o extends Yo{InterpolantFactoryMethodLinear(t){return new Ko(this.times,this.values,this.getValueSize(),t)}}$o.prototype.ValueTypeName="quaternion",$o.prototype.DefaultInterpolation=G,$o.prototype.InterpolantFactoryMethodSmooth=void 0;class tl extends Yo{}tl.prototype.ValueTypeName="string",tl.prototype.ValueBufferType=Array,tl.prototype.DefaultInterpolation=H,tl.prototype.InterpolantFactoryMethodLinear=void 0,tl.prototype.InterpolantFactoryMethodSmooth=void 0;class el extends Yo{}el.prototype.ValueTypeName="vector";class nl{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=ct(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(il(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Yo.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];Vo.flattenJSON(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?T:E,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}class ml{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a<0)o=i+1;else{if(!(a>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new vt:new Lt);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new Lt,i=[],r=[],s=[],a=new Lt,o=new se;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new Lt),i[e].normalize()}r[0]=new Lt,s[0]=new Lt;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(ht(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(ht(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class fl extends ml{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new vt,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(yl.subVectors(i[0],i[1]).add(i[0]),a=yl);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(Ml(a,o.x,l.x,c.x,h.x),Ml(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],s=r.getLength(),a=0===s?0:1-t/s;return r.getPointAt(a)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class zl extends Bl{constructor(t){super(t),this.uuid=ct(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new tn).setHex(r.value);break;case"v2":i.uniforms[e].value=(new vt).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new Lt).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new St).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new yt).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new se).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new vt).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new vt).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i}setTextures(t){return this.textures=t,this}}class rc{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let n=0,i=t.length;nNumber.EPSILON){if(l<0&&(n=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=po.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new zl,l.curves=o.curves,c.push(l),c;let h=!r(s[0].getPoints());h=t?!h:h;const u=[],d=[];let p,m,f=[],g=0;d[g]=void 0,f[g]=[];for(let e=0,n=s.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(f=u))}for(let t=0,e=d.length;t0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){At.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;At.multiplyQuaternionsFlat(t,s,t,e,t,n),At.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const Bc="\\[\\]\\.:\\/",zc=new RegExp("[\\[\\]\\.:\\/]","g"),Fc="[^\\[\\]\\.:\\/]",Oc="[^"+Bc.replace("\\.","")+"]",Hc=/((?:WC+[\/:])*)/.source.replace("WC",Fc),Gc=/(WCOD+)?/.source.replace("WCOD",Oc),Uc=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Fc),kc=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Fc),Vc=new RegExp("^"+Hc+Gc+Uc+kc+"$"),Wc=["material","materials","bones"];class jc{constructor(t,e,n){this.path=e,this.parsedPath=n||jc.parseTrackName(e),this.node=jc.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new jc.Composite(t,e,n):new jc(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(zc,"")}static parseTrackName(t){const e=Vc.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Wc.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new jc(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}qc.prototype.isAnimationObjectGroup=!0;class Xc{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:k,endingEnd:k};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case q:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case j:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=V,i.endingEnd=V):(i.endingStart=t?this.zeroSlopeAtStart?V:k:W,i.endingEnd=e?this.zeroSlopeAtEnd?V:k:W)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Yc extends rt{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Nc(jc.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new vt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new vt),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return th.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}eh.prototype.isBox2=!0;const nh=new Lt,ih=new Lt;class rh{constructor(t=new Lt,e=new Lt){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new Lt),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new Lt),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new Lt),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){nh.subVectors(t,this.start),ih.subVectors(this.end,this.start);const n=ih.dot(ih);let i=ih.dot(nh)/n;return e&&(i=ht(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new Lt),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}class sh extends Ce{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}sh.prototype.isImmediateRenderObject=!0;const ah=new Lt;const oh=new Lt,lh=new se,ch=new se;class hh extends ya{constructor(t){const e=uh(t),n=new En,i=[],r=[],s=new tn(0,0,1),a=new tn(0,1,0);for(let t=0;t4?a=Ph[r-8+4-1]:0==r&&(a=0),n.push(a);const o=1/(s-1),l=-o/2,c=1+o/2,h=[l,l,c,l,c,c,l,l,c,c,l,c],u=6,d=6,p=3,m=2,f=1,g=new Float32Array(p*d*u),v=new Float32Array(m*d*u),y=new Float32Array(f*d*u);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];g.set(i,p*d*t),v.set(h,m*d*t);const r=[t,t,t,t,t,t];y.set(r,f*d*t)}const x=new En;x.setAttribute("position",new sn(g,p)),x.setAttribute("uv",new sn(v,m)),x.setAttribute("faceIndex",new sn(y,f)),t.push(x),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Zh(t){const e=new Tt(3*Ch,3*Ch,t);return e.texture.mapping=l,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function Jh(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Qh(){const t=new vt(1,1);return new Io({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:Nh[3e3]},outputEncoding:{value:Nh[3e3]}},vertexShader:$h(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${tu()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function Kh(){return new Io({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:Nh[3e3]},outputEncoding:{value:Nh[3e3]}},vertexShader:$h(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${tu()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function $h(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function tu(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"}ml.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(ml.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Bl.prototype.fromPoints=function(t){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)},fh.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},hh.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")},ol.prototype.extractUrlBase=function(t){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),rc.extractUrlBase(t)},ol.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}},eh.prototype.center=function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},eh.prototype.empty=function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},eh.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},eh.prototype.size=function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)},Pt.prototype.center=function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Pt.prototype.empty=function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Pt.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Pt.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},Pt.prototype.size=function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)},Jt.prototype.empty=function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()},ai.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},rh.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},yt.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},yt.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},yt.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},yt.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},yt.prototype.applyToVector3Array=function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},yt.prototype.getInverse=function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},se.prototype.extractPosition=function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},se.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},se.prototype.getPosition=function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new Lt).setFromMatrixColumn(this,3)},se.prototype.setRotationFromQuaternion=function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},se.prototype.multiplyToArray=function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},se.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},se.prototype.multiplyVector4=function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},se.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},se.prototype.rotateAxis=function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},se.prototype.crossVector=function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},se.prototype.translate=function(){console.error("THREE.Matrix4: .translate() has been removed.")},se.prototype.rotateX=function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},se.prototype.rotateY=function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},se.prototype.rotateZ=function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},se.prototype.rotateByAxis=function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},se.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},se.prototype.applyToVector3Array=function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},se.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,s)},se.prototype.getInverse=function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},Ne.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},At.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},At.prototype.inverse=function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()},re.prototype.isIntersectionBox=function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},re.prototype.isIntersectionPlane=function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},re.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},je.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},je.prototype.barycoordFromPoint=function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},je.prototype.midpoint=function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},je.prototypenormal=function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},je.prototype.plane=function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)},je.barycoordFromPoint=function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),je.getBarycoord(t,e,n,i,r)},je.normal=function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),je.getNormal(t,e,n,i)},zl.prototype.extractAllPoints=function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},zl.prototype.extrude=function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new go(this,t)},zl.prototype.makeGeometry=function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Mo(this,t)},vt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},vt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},vt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Lt.prototype.setEulerFromRotationMatrix=function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},Lt.prototype.setEulerFromQuaternion=function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},Lt.prototype.getPositionFromMatrix=function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},Lt.prototype.getScaleFromMatrix=function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},Lt.prototype.getColumnFromMatrix=function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},Lt.prototype.applyProjection=function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},Lt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Lt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},Lt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},St.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},St.prototype.lengthManhattan=function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Ce.prototype.getChildByName=function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},Ce.prototype.renderDepth=function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},Ce.prototype.translate=function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},Ce.prototype.getWorldRotation=function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},Ce.prototype.applyMatrix=function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(Ce.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Wn.prototype.setDrawMode=function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")},Object.defineProperties(Wn.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),$s.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Kn.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Fl.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(sn.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===nt},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(nt)}}}),sn.prototype.setDynamic=function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?nt:et),this},sn.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},sn.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},En.prototype.addIndex=function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},En.prototype.addAttribute=function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new sn(arguments[1],arguments[2])))},En.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},En.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},En.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},En.prototype.removeAttribute=function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},En.prototype.applyMatrix=function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(En.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Es.prototype.setDynamic=function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?nt:et),this},Es.prototype.setArray=function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},go.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},go.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},go.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},Ts.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Zc.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(Xe.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new tn}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(Jn.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),ws.prototype.clearTarget=function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},ws.prototype.animate=function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},ws.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},ws.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},ws.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},ws.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},ws.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},ws.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},ws.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},ws.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},ws.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},ws.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},ws.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},ws.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},ws.prototype.enableScissorTest=function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},ws.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},ws.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},ws.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},ws.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},ws.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},ws.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},ws.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},ws.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},ws.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},ws.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(ws.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?Y:X}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(us.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(Tt.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Lc.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");const e=this;return(new vc).load(t,(function(t){e.setBuffer(t)})),this},Ic.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},ti.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)},ti.prototype.clear=function(t,e,n,i){return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),this.renderTarget.clear(t,e,n,i)},_t.crossOrigin=void 0,_t.loadTexture=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");const r=new pl;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},_t.loadTextureCube=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");const r=new ul;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},_t.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},_t.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};const eu={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=4,t.AddEquation=n,t.AddOperation=2,t.AdditiveAnimationBlendMode=q,t.AdditiveBlending=2,t.AlphaFormat=1021,t.AlwaysDepth=1,t.AlwaysStencilFunc=519,t.AmbientLight=$l,t.AmbientLightProbe=xc,t.AnimationClip=nl,t.AnimationLoader=class extends ol{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new cl(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{Sh.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(Sh,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}},t.Audio=Lc,t.AudioAnalyser=Ic,t.AudioContext=gc,t.AudioListener=class extends Ce{constructor(){super(),this.type="AudioListener",this.context=gc.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new bc}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Sc,Tc,Ec),Ac.set(0,0,-1).applyQuaternion(Tc),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(Sc.x,t),e.positionY.linearRampToValueAtTime(Sc.y,t),e.positionZ.linearRampToValueAtTime(Sc.z,t),e.forwardX.linearRampToValueAtTime(Ac.x,t),e.forwardY.linearRampToValueAtTime(Ac.y,t),e.forwardZ.linearRampToValueAtTime(Ac.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(Sc.x,Sc.y,Sc.z),e.setOrientation(Ac.x,Ac.y,Ac.z,n.x,n.y,n.z)}},t.AudioLoader=vc,t.AxesHelper=Ah,t.AxisHelper=function(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new Ah(t)},t.BackSide=1,t.BasicDepthPacking=3200,t.BasicShadowMap=0,t.BinaryTextureLoader=function(t){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new dl(t)},t.Bone=ta,t.BooleanKeyframeTrack=Zo,t.BoundingBoxHelper=function(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new Mh(t,e)},t.Box2=eh,t.Box3=Pt,t.Box3Helper=class extends ya{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new En;i.setIndex(new sn(n,1)),i.setAttribute("position",new mn([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new ca({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}},t.BoxBufferGeometry=qn,t.BoxGeometry=qn,t.BoxHelper=Mh,t.BufferAttribute=sn,t.BufferGeometry=En,t.BufferGeometryLoader=oc,t.ByteType=1010,t.Cache=rl,t.Camera=Qn,t.CameraHelper=class extends ya{constructor(t){const e=new En,n=new ca({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new tn(16755200),o=new tn(16711680),l=new tn(43775),c=new tn(16777215),h=new tn(3355443);function u(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}u("n1","n2",a),u("n2","n4",a),u("n4","n3",a),u("n3","n1",a),u("f1","f2",a),u("f2","f4",a),u("f4","f3",a),u("f3","f1",a),u("n1","f1",a),u("n2","f2",a),u("n3","f3",a),u("n4","f4",a),u("p","n1",o),u("p","n2",o),u("p","n3",o),u("p","n4",o),u("u1","u2",l),u("u2","u3",l),u("u3","u1",l),u("c","t",c),u("p","c",h),u("cn1","cn2",h),u("cn3","cn4",h),u("cf1","cf2",h),u("cf3","cf4",h),e.setAttribute("position",new mn(i,3)),e.setAttribute("color",new mn(r,3)),super(e,n),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;_h.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),wh("c",e,t,_h,0,0,-1),wh("t",e,t,_h,0,0,1),wh("n1",e,t,_h,-1,-1,-1),wh("n2",e,t,_h,1,-1,-1),wh("n3",e,t,_h,-1,1,-1),wh("n4",e,t,_h,1,1,-1),wh("f1",e,t,_h,-1,-1,1),wh("f2",e,t,_h,1,-1,1),wh("f3",e,t,_h,-1,1,1),wh("f4",e,t,_h,1,1,1),wh("u1",e,t,_h,.7,1.1,-1),wh("u2",e,t,_h,-.7,1.1,-1),wh("u3",e,t,_h,0,2,-1),wh("cf1",e,t,_h,-1,0,1),wh("cf2",e,t,_h,1,0,1),wh("cf3",e,t,_h,0,-1,1),wh("cf4",e,t,_h,0,1,1),wh("cn1",e,t,_h,-1,0,-1),wh("cn2",e,t,_h,1,0,-1),wh("cn3",e,t,_h,0,-1,-1),wh("cn4",e,t,_h,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been removed")},t.CanvasTexture=Ra,t.CatmullRomCurve3=bl,t.CineonToneMapping=3,t.CircleBufferGeometry=Pa,t.CircleGeometry=Pa,t.ClampToEdgeWrapping=u,t.Clock=bc,t.Color=tn,t.ColorKeyframeTrack=Jo,t.CompressedTexture=La,t.CompressedTextureLoader=class extends ol{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new La,o=new cl(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l&&(1===n.mipmapCount&&(a.minFilter=g),a.image=s,a.format=n.format,a.needsUpdate=!0,e&&e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e>16&32768,i=e>>12&2047;const r=e>>23&255;return r<103?n:r>142?(n|=31744,n|=(255==r?0:1)&&8388607&e,n):r<113?(i|=2048,n|=(i>>114-r)+(i>>113-r&1),n):(n|=r-112<<10|i>>1,n+=1&i,n)}},t.DecrementStencilOp=7683,t.DecrementWrapStencilOp=34056,t.DefaultLoadingManager=al,t.DepthFormat=A,t.DepthStencilFormat=L,t.DepthTexture=Ca,t.DirectionalLight=Kl,t.DirectionalLightHelper=class extends Ce{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e&&(e=1);let i=new En;i.setAttribute("position",new mn([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new ca({fog:!1,toneMapped:!1});this.lightPlane=new fa(i,r),this.add(this.lightPlane),i=new En,i.setAttribute("position",new mn([0,0,0,0,0,1],3)),this.targetLine=new fa(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){gh.setFromMatrixPosition(this.light.matrixWorld),vh.setFromMatrixPosition(this.light.target.matrixWorld),yh.subVectors(vh,gh),this.lightPlane.lookAt(vh),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(vh),this.targetLine.scale.z=yh.length()}},t.DiscreteInterpolant=Xo,t.DodecahedronBufferGeometry=Ba,t.DodecahedronGeometry=Ba,t.DoubleSide=2,t.DstAlphaFactor=206,t.DstColorFactor=208,t.DynamicBufferAttribute=function(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),new sn(t,e).setUsage(nt)},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=nt,t.DynamicReadUsage=35049,t.EdgesGeometry=Ga,t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new ya(new Ga(t.geometry),new ca({color:void 0!==e?e:16777215}))},t.EllipseCurve=fl,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=fe,t.EventDispatcher=rt,t.ExtrudeBufferGeometry=go,t.ExtrudeGeometry=go,t.FaceColors=1,t.FileLoader=cl,t.FlatShading=1,t.Float16BufferAttribute=pn,t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new mn(t,e)},t.Float32BufferAttribute=mn,t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new fn(t,e)},t.Float64BufferAttribute=fn,t.FloatType=b,t.Fog=Ss,t.FogExp2=Ms,t.Font=pc,t.FontLoader=class extends ol{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new cl(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),n=JSON.parse(t.substring(65,t.length-2))}const i=r.parse(n);e&&e(i)}),n,i)}parse(t){return new pc(t)}},t.FrontSide=0,t.Frustum=ai,t.GLBufferAttribute=Qc,t.GLSL1="100",t.GLSL3=it,t.GammaEncoding=Z,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=fh,t.Group=gs,t.HalfFloatType=M,t.HemisphereLight=Ol,t.HemisphereLightHelper=class extends Ce{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new _o(e);i.rotateY(.5*Math.PI),this.material=new en({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color&&(this.material.vertexColors=!0);const r=i.getAttribute("position"),s=new Float32Array(3*r.count);i.setAttribute("color",new sn(s,3)),this.add(new Wn(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute("color");ph.copy(this.light.color),mh.copy(this.light.groundColor);for(let t=0,n=e.count;t0){const n=new sl(e);r=new hl(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}(Ih),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){kh=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=Kh(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=Qh(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t2?Ch:0,Ch,Ch),o.setRenderTarget(i),u&&o.render(zh,r),o.render(t,r)}o.toneMapping=h,o.outputEncoding=c,o.autoClear=l}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=Kh()):null==this._equirectShader&&(this._equirectShader=Qh());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new Wn(Oh[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),s.inputEncoding.value=Nh[t.encoding],s.outputEncoding.value=Nh[e.texture.encoding],Jh(e,0,0,3*Ch,2*Ch),n.setRenderTarget(e),n.render(r,Fh)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eIh&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let t=0;t4?i-8+4:0),3*v,2*v),o.setRenderTarget(e),o.render(c,Fh)}},t.ParametricBufferGeometry=wo,t.ParametricGeometry=wo,t.Particle=function(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Vs(t)},t.ParticleBasicMaterial=function(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new _a(t)},t.ParticleSystem=function(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new Ta(t,e)},t.ParticleSystemMaterial=function(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new _a(t)},t.Path=Bl,t.PerspectiveCamera=Kn,t.Plane=Ne,t.PlaneBufferGeometry=ci,t.PlaneGeometry=ci,t.PlaneHelper=class extends fa{constructor(t,e=1,n=16776960){const i=n,r=new En;r.setAttribute("position",new mn([1,-1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,0,0,1,0,0,0],3)),r.computeBoundingSphere(),super(r,new ca({color:i,toneMapped:!1})),this.type="PlaneHelper",this.plane=t,this.size=e;const s=new En;s.setAttribute("position",new mn([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),s.computeBoundingSphere(),this.add(new Wn(s,new en({color:i,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(t){let e=-this.plane.constant;Math.abs(e)<1e-8&&(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.children[0].material.side=e<0?1:0,this.lookAt(this.plane.normal),super.updateMatrixWorld(t)}},t.PointCloud=function(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new Ta(t,e)},t.PointCloudMaterial=function(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new _a(t)},t.PointLight=Zl,t.PointLightHelper=class extends Wn{constructor(t,e,n){super(new So(e,4,2),new en({wireframe:!0,fog:!1,toneMapped:!1})),this.light=t,this.light.updateMatrixWorld(),this.color=n,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},t.Points=Ta,t.PointsMaterial=_a,t.PolarGridHelper=class extends ya{constructor(t=10,e=16,n=8,i=64,r=4473924,s=8947848){r=new tn(r),s=new tn(s);const a=[],o=[];for(let n=0;n<=e;n++){const i=n/e*(2*Math.PI),l=Math.sin(i)*t,c=Math.cos(i)*t;a.push(0,0,0),a.push(l,0,c);const h=1&n?r:s;o.push(h.r,h.g,h.b),o.push(h.r,h.g,h.b)}for(let e=0;e<=n;e++){const l=1&e?r:s,c=t-t/n*e;for(let t=0;tli>span{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.ab-history{background:var(--color-white);background-image:url(../images/section-3-bg-D4Y_d9o-.png);background-position:50%;background-repeat:no-repeat;background-size:cover;min-height:60.3125rem;padding-top:7.5rem;padding-bottom:6.25rem;position:relative}.ab-history__head{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:4rem;display:flex}.ab-history__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.ab-history__swiper{--history-year-h:3.5rem;--history-year-gap:1.6875rem;--history-dot-size:1.25rem;clip-path:inset(0 0 0 var(--p-x));position:relative;overflow:hidden}.ab-history__swiper:before{content:"";left:var(--p-x);right:0;top:calc(var(--history-year-h) + var(--history-year-gap) + var(--history-dot-size) / 2);pointer-events:none;background:#dfe0e2;height:1px;position:absolute;transform:translateY(-50%)}.ab-history__slide{width:25rem;transition:opacity var(--duration-normal) var(--easing);position:relative}.ab-history__slide.is-far{opacity:.3}.ab-history__year{margin-bottom:var(--history-year-gap,27px);color:var(--color-text);font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-56);font-weight:500;line-height:var(--history-year-h,56px);display:block}.ab-history__year span{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);line-height:var(--font-32)}.ab-history__dot{z-index:1;width:var(--history-dot-size,20px);height:var(--history-dot-size,20px);background:var(--color-white);border:1px solid #afb5b9;border-radius:50%;margin-bottom:2.625rem;position:relative}.ab-history__dot:after{content:"";background:#afb5b9;border-radius:50%;position:absolute;inset:.3125rem}.swiper-slide-active .ab-history__dot{border-color:var(--color-primary)}.swiper-slide-active .ab-history__dot:after{background:var(--color-primary)}.swiper-slide-active .ab-history__dot:before{opacity:1}.ab-history__slide-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:500;line-height:var(--font-32);-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:4rem;margin-bottom:1.5rem;display:-webkit-box;overflow:hidden}.ab-history__slide-desc{min-height:3rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:48px;margin-bottom:2rem;display:-webkit-box;overflow:hidden}.ab-history__media{aspect-ratio:400/260;background:#afb5b926;border-radius:.75rem;overflow:hidden}.ab-history__media img{object-fit:cover;width:100%;height:100%;display:block}.ab-culture{min-height:56.25rem;color:var(--color-white);position:relative;overflow:hidden}.ab-culture__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.ab-culture__bg img{object-fit:cover;width:100%;height:100%;display:block}.ab-culture:after{content:"";right:var(--p-x);z-index:1;aspect-ratio:1121/187;pointer-events:none;background:url(../images/bg-CYdmuh0E.png) 100% 100%/contain no-repeat;width:min(70.0625rem,70%);position:absolute;bottom:0}.ab-culture__inner{z-index:2;grid-template-columns:minmax(0,1fr) minmax(0,45rem);gap:2.5rem;padding-top:7.5rem;padding-bottom:7.5rem;display:grid;position:relative}.ab-culture__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.ab-culture__list{flex-direction:column;display:flex}.ab-culture__item{border-bottom:1px solid #ffffff26;justify-content:space-between;align-items:flex-start;padding:2.5rem 0;display:flex}.ab-culture__label{flex-direction:column;flex-shrink:0;gap:.5rem;width:9.1875rem;display:flex}.ab-culture__label-zh{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:500;line-height:var(--font-32)}.ab-culture__label-en{font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-18);font-weight:500;line-height:var(--font-18)}.ab-culture__text{max-width:25rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-27);flex:1;margin:0}.ab-global{padding-top:7.5rem;padding-bottom:7.5rem;position:relative}.ab-global__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 6.25rem}.ab-global__layout{grid-template-columns:minmax(0,30rem) minmax(0,50rem) minmax(0,25rem);gap:1.5rem;display:grid}.ab-global__visual{aspect-ratio:1;justify-content:center;align-items:center;width:100%;max-width:50rem;margin:0 auto;display:flex;position:relative}.ab-global__earth{width:100%;height:100%;display:block}.ab-global__side{flex-direction:column;gap:3rem;margin-top:3.75rem;padding:0;list-style:none;display:flex}.ab-global__side li{border-left:1px solid #dfe0e2;padding-left:2.5rem;position:relative}.ab-global__side li:before{content:"";background:var(--color-primary);width:1px;height:3.0625rem;position:absolute;top:0;left:-1px}.ab-global__side strong{color:var(--color-primary);font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-56);font-weight:400;line-height:var(--font-56);margin-bottom:1rem;display:block}.ab-global__side strong .counter{color:inherit;font:inherit}.ab-global__side strong span:not(.counter){font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-32)}.ab-global__side__side-desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.ab-global__side--right{justify-self:end}.ab-members{min-height:56.25rem;color:var(--color-white);position:relative}.ab-members__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.ab-members__bg img{object-fit:cover;width:100%;height:100%;display:block}.ab-members__bg:after{content:"";background:#0003;position:absolute;inset:0}.ab-members__inner{z-index:1;grid-template-columns:minmax(0,1fr) minmax(0,60rem);gap:2.5rem;padding-top:7.5rem;padding-bottom:7.5rem;display:grid;position:relative}.ab-members__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.ab-members__card{-webkit-backdrop-filter:blur(.75rem);backdrop-filter:blur(.75rem);background:#fff3;border:1px solid #ffffff75;border-radius:1.875rem;flex-direction:column;justify-content:space-between;gap:4.25rem;min-height:35rem;padding:3rem;display:flex;overflow:hidden}.ab-members__content{flex-direction:column;align-items:flex-start;gap:2.5rem;display:flex}.ab-members__content>div{flex-direction:column;gap:2rem;display:flex}.ab-members__name{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-42);margin:0}.ab-members__desc{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.ab-members__more{min-width:12.5rem}.ab-members__logos{grid-template-columns:repeat(5,minmax(0,1fr));gap:1rem;display:grid}.ab-members__logo{cursor:pointer;width:10rem;height:6.25rem;transition:background var(--duration-fast) var(--easing);background:#ffffff80;border:0;border-radius:1rem;justify-content:center;align-items:center;display:flex}.ab-members__logo img{object-fit:cover;width:auto;max-width:70%;height:auto;display:block}.ab-members__logo.is-active,.ab-members__logo:hover{background:#fff}.ab-honors{grid-template-columns:minmax(0,1fr) minmax(0,60rem);gap:2.5rem;padding-top:7.5rem;padding-bottom:7.5rem;display:grid}.ab-honors__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 1rem}.ab-honors__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.ab-honors__list{margin:0;padding:0;list-style:none}.ab-honors__item{transition:border-color var(--duration-fast) var(--easing);border-bottom:1px solid #dfe0e2;justify-content:space-between;align-items:center;padding:2.5rem 0;display:flex;position:relative}.ab-honors__item:hover{border-bottom-color:var(--color-primary)}.ab-honors__item:hover .ab-honors__name{color:var(--color-primary)}.ab-honors__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);transition:color var(--duration-fast) var(--easing)}.ab-honors__view{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;text-decoration:none;display:inline-flex;position:relative}.ab-honors__view img,.ab-honors__view svg{flex-shrink:0;width:1.5rem;height:1.5rem;display:block}.ab-honors__view:hover{color:var(--color-primary)}.ab-honors__pop{z-index:10;background-color:var(--color-white);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .25s,visibility .25s;position:absolute;top:50%;right:calc(100% + .5rem);transform:translateY(-50%)}.ab-honors__view:hover .ab-honors__pop{opacity:1;visibility:visible}.ab-honors__cert-img{border-radius:.5rem;display:block;box-shadow:0 1rem 2.5rem #2e353a33;width:15rem!important;height:auto!important}.ab-honors__more{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;align-items:center;gap:1rem;margin-top:2.5rem;padding:0;display:inline-flex}.ab-honors__more img{width:.75rem;height:auto;display:block}.ab-honors__more:hover{color:var(--color-primary)}.ab-csr{min-height:45rem;color:var(--color-white);position:relative}.ab-csr__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.ab-csr__bg img{object-fit:cover;width:100%;height:100%;display:block}.ab-csr__bg:after{content:"";background:#00000003;position:absolute;inset:0}.ab-csr__inner{z-index:1;grid-template-columns:minmax(0,1fr) minmax(0,60rem);gap:2.5rem;padding-top:7.5rem;padding-bottom:7.5rem;display:grid;position:relative}.ab-csr__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.ab-csr__content{flex-direction:column;align-items:flex-start;gap:2.5rem;display:flex}.ab-csr__desc{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-38);margin:0}.ab-csr .s-btn{min-width:12.5rem;min-height:3.625rem}@media (width<=1439px){.ab-hero__title h1{font-size:40px;line-height:54px}.ab-hero__media{height:520px}.ab-intro__body{margin-top:0}.ab-intro,.ab-honors,.ab-culture__inner,.ab-members__inner,.ab-csr__inner{grid-template-columns:1fr;gap:32px}.ab-intro,.ab-history,.ab-global,.ab-honors{padding-top:80px;padding-bottom:80px}.ab-global__layout{grid-template-columns:1fr}.ab-global__side{margin-top:0}.ab-global__side--right{justify-self:start}.ab-global__visual{order:-1;max-width:560px}}@media (width<=992px){.ab-intro__stats{grid-template-columns:1fr;gap:0}.ab-history__slide{width:300px}.ab-members__logos{grid-template-columns:repeat(3,minmax(0,1fr))}.ab-culture__item{flex-direction:column;gap:16px}.ab-honors__item{align-items:flex-start}}@media (width<=576px){.ab-hero__title{padding-top:calc(var(--header-h) + 5rem);padding-bottom:24px}.ab-hero__title h1{font-size:28px;line-height:40px}.ab-hero__media{height:280px}.ab-intro__title,.ab-history__title,.ab-culture__title,.ab-global__title,.ab-members__title,.ab-honors__title,.ab-csr__title{font-size:32px;line-height:44px}.ab-members__card{min-height:0;padding:24px}.ab-members__logos{grid-template-columns:repeat(2,minmax(0,1fr))}.ab-members__name{font-size:24px;line-height:32px}} diff --git a/public/themes/dist_static/static/css/about.css b/public/themes/dist_static/static/css/about.css new file mode 100644 index 0000000..a8ff389 --- /dev/null +++ b/public/themes/dist_static/static/css/about.css @@ -0,0 +1,834 @@ +.main-about { + background: var(--color-white); + overflow: hidden; +} + +.ab-hero__title { + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 2.5rem; +} +.ab-hero__title h1 { + display: flex; + flex-direction: column; + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-hero__media { + width: 100%; + height: 45rem; + overflow: hidden; +} +.ab-hero__media img, +.ab-hero__media video { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.ab-intro { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 60rem); + gap: 2.5rem; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-intro__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-intro__body { + display: flex; + flex-direction: column; + gap: 3.375rem; + margin-top: 4rem; +} +.ab-intro__texts { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.ab-intro__texts p { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-32); +} +.ab-intro__stats { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 2.5rem 5rem; + margin: 0; + padding: 0; + list-style: none; +} +.ab-intro__stats li { + display: flex; + flex-direction: column; + gap: 1rem; + padding: 2.5rem 0; + border-top: 1px solid rgb(223, 224, 226); +} +.ab-intro__stats strong { + color: var(--color-primary); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-56); + font-weight: 500; + line-height: 1; +} +.ab-intro__stats strong .counter { + color: inherit; + font: inherit; +} +.ab-intro__stats strong .ab-intro__stats-unit { + color: var(--color-primary); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.ab-intro__stats > li > span { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.ab-history { + position: relative; + padding-top: 7.5rem; + padding-bottom: 6.25rem; + min-height: 60.3125rem; + background: var(--color-white); + background-image: url("../images/section-3-bg-D4Y_d9o-.png"); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} +.ab-history__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 4rem; +} +.ab-history__head .s-arrows { + display: flex; +} +.ab-history__arrows-mobile { + display: none; +} +.ab-history__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-history__swiper { + --history-year-h: 3.5rem; + --history-year-gap: 1.6875rem; + --history-dot-size: 1.25rem; + position: relative; + overflow: hidden; + clip-path: inset(0 0 0 var(--p-x)); +} +.ab-history__swiper::before { + content: ""; + position: absolute; + left: var(--p-x); + right: 0; + top: calc(var(--history-year-h) + var(--history-year-gap) + var(--history-dot-size) / 2); + height: 1px; + background: rgb(223, 224, 226); + pointer-events: none; + transform: translateY(-50%); +} +.ab-history__slide { + position: relative; + width: 25rem; + transition: opacity var(--duration-normal) var(--easing); +} +.ab-history__slide.is-far { + opacity: 0.3; +} +.ab-history__year { + display: block; + margin-bottom: var(--history-year-gap, 27px); + color: var(--color-text); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-56); + font-weight: 500; + line-height: var(--history-year-h, 56px); +} +.ab-history__year span { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + line-height: var(--font-32); +} +.ab-history__dot { + position: relative; + z-index: 1; + width: var(--history-dot-size, 20px); + height: var(--history-dot-size, 20px); + margin-bottom: 2.625rem; + border: 1px solid rgb(175, 181, 185); + border-radius: 50%; + background: var(--color-white); +} +.ab-history__dot::after { + content: ""; + position: absolute; + inset: 0.3125rem; + border-radius: 50%; + background: rgb(175, 181, 185); +} +.swiper-slide-active .ab-history__dot { + border-color: var(--color-primary); +} +.swiper-slide-active .ab-history__dot::after { + background: var(--color-primary); +} +.swiper-slide-active .ab-history__dot::before { + opacity: 1; +} +.ab-history__slide-title { + margin-bottom: 1.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 500; + line-height: var(--font-32); + min-height: 4rem; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} +.ab-history__slide-desc { + margin-bottom: 2rem; + min-height: 3rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + min-height: 48px; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} +.ab-history__media { + overflow: hidden; + border-radius: 0.75rem; + aspect-ratio: 400/260; + background: rgba(175, 181, 185, 0.15); +} +.ab-history__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.ab-culture { + position: relative; + min-height: 56.25rem; + overflow: hidden; + color: var(--color-white); +} +.ab-culture__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.ab-culture__bg img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} +.ab-culture::after { + content: ""; + position: absolute; + right: var(--p-x); + bottom: 0; + z-index: 1; + width: min(70.0625rem, 70%); + aspect-ratio: 1121/187; + background: url("../images/bg-CYdmuh0E.png") no-repeat right bottom/contain; + pointer-events: none; +} +.ab-culture__inner { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 45rem); + gap: 2.5rem; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-culture__title { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-culture__list { + display: flex; + flex-direction: column; +} +.ab-culture__item { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 2.5rem 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.15); +} +.ab-culture__label { + display: flex; + flex-direction: column; + gap: 0.5rem; + flex-shrink: 0; + width: 9.1875rem; +} +.ab-culture__label-zh { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 500; + line-height: var(--font-32); +} +.ab-culture__label-en { + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-18); +} +.ab-culture__text { + flex: 1; + max-width: 25rem; + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-27); +} + +.ab-global { + position: relative; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-global__title { + margin: 0 0 6.25rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-global__layout { + display: grid; + grid-template-columns: minmax(0, 30rem) minmax(0, 50rem) minmax(0, 25rem); + gap: 1.5rem; +} +.ab-global__visual { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + aspect-ratio: 1; + max-width: 50rem; + margin: 0 auto; +} +.ab-global__earth { + display: block; + width: 100%; + height: 100%; +} +.ab-global__side { + margin-top: 3.75rem; + display: flex; + flex-direction: column; + gap: 3rem; + padding: 0; + list-style: none; +} +.ab-global__side li { + position: relative; + padding-left: 2.5rem; + border-left: 1px solid rgb(223, 224, 226); +} +.ab-global__side li::before { + content: ""; + position: absolute; + top: 0; + left: -1px; + width: 1px; + height: 3.0625rem; + background: var(--color-primary); +} +.ab-global__side strong { + display: block; + margin-bottom: 1rem; + color: var(--color-primary); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-56); + font-weight: 400; + line-height: var(--font-56); +} +.ab-global__side strong .counter { + color: inherit; + font: inherit; +} +.ab-global__side strong span:not(.counter) { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-32); +} +.ab-global__side__side-desc { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.ab-global__side--right { + justify-self: end; +} + +.ab-members { + position: relative; + min-height: 56.25rem; + color: var(--color-white); +} +.ab-members__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.ab-members__bg img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} +.ab-members__bg::after { + content: ""; + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.2); +} +.ab-members__inner { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 60rem); + gap: 2.5rem; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-members__title { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-members__card { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 4.25rem; + min-height: 35rem; + padding: 3rem; + border: 1px solid rgba(255, 255, 255, 0.46); + border-radius: 1.875rem; + backdrop-filter: blur(0.75rem); + background: rgba(255, 255, 255, 0.2); + overflow: hidden; +} +.ab-members__content { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2.5rem; +} +.ab-members__content > div { + display: flex; + flex-direction: column; + gap: 2rem; +} +.ab-members__name { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-42); +} +.ab-members__desc { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.ab-members__more { + min-width: 12.5rem; +} +.ab-members__logos { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 1rem; +} +.ab-members__logo { + display: flex; + align-items: center; + justify-content: center; + width: 10rem; + height: 6.25rem; + border: 0; + border-radius: 1rem; + background: rgba(255, 255, 255, 0.5); + cursor: pointer; + transition: background var(--duration-fast) var(--easing); +} +.ab-members__logo img { + display: block; + max-width: 70%; + width: auto; + height: auto; + object-fit: cover; +} +.ab-members__logo.is-active, .ab-members__logo:hover { + background: rgb(255, 255, 255); +} + +.ab-honors { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 60rem); + gap: 2.5rem; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-honors__title { + margin: 0 0 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-honors__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.ab-honors__list { + margin: 0; + padding: 0; + list-style: none; +} +.ab-honors__item { + position: relative; + display: flex; + align-items: center; + justify-content: space-between; + padding: 2.5rem 0; + border-bottom: 1px solid rgb(223, 224, 226); + transition: border-color var(--duration-fast) var(--easing); +} +.ab-honors__item:hover { + border-bottom-color: var(--color-primary); +} +.ab-honors__item:hover .ab-honors__name { + color: var(--color-primary); +} +.ab-honors__name { + flex: 1; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); + transition: color var(--duration-fast) var(--easing); +} +.ab-honors__view { + position: relative; + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-text-muted); + text-decoration: none; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + transition: color var(--duration-fast) var(--easing); +} +.ab-honors__view img, +.ab-honors__view svg { + display: block; + width: 1.5rem; + height: 1.5rem; + flex-shrink: 0; +} +.ab-honors__view:hover { + color: var(--color-primary); +} +.ab-honors__pop { + position: absolute; + top: 50%; + right: calc(100% + 0.5rem); + z-index: 10; + transform: translateY(-50%); + background-color: var(--color-white); + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: opacity 0.25s ease, visibility 0.25s ease; +} +.ab-honors__view:hover .ab-honors__pop { + opacity: 1; + visibility: visible; +} +.ab-honors__cert-img { + display: block; + width: 15rem !important; + height: auto !important; + border-radius: 0.5rem; + box-shadow: 0 1rem 2.5rem rgba(46, 53, 58, 0.2); +} +.ab-honors__more { + display: inline-flex; + align-items: center; + gap: 1rem; + margin-top: 2.5rem; + padding: 0; + border: 0; + background: transparent; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +} +.ab-honors__more img { + display: block; + width: 0.75rem; + height: auto; +} +.ab-honors__more:hover { + color: var(--color-primary); +} + +.ab-csr { + position: relative; + min-height: 45rem; + color: var(--color-white); +} +.ab-csr__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.ab-csr__bg img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} +.ab-csr__bg::after { + content: ""; + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.01); +} +.ab-csr__inner { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 60rem); + gap: 2.5rem; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.ab-csr__title { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.ab-csr__content { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2.5rem; +} +.ab-csr__desc { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-38); +} +.ab-csr .s-btn { + min-width: 12.5rem; + min-height: 3.625rem; +} + +@media (max-width: 1439px) { + .ab-hero__title h1 { + font-size: 40Px; + line-height: 54Px; + } + .ab-hero__media { + height: 520Px; + } + .ab-intro__body { + margin-top: 0; + } + .ab-intro, + .ab-honors, + .ab-culture__inner, + .ab-members__inner, + .ab-csr__inner { + grid-template-columns: 1fr; + gap: 32Px; + } + .ab-intro, + .ab-history, + .ab-global, + .ab-honors { + padding-top: 80Px; + padding-bottom: 80Px; + } + .ab-global__layout { + grid-template-columns: 1fr; + } + .ab-global__side { + margin-top: 0; + } + .ab-global__side--right { + justify-self: start; + } + .ab-global__visual { + order: -1; + max-width: 560Px; + } +} +@media (max-width: 992px) { + .ab-intro__stats { + grid-template-columns: 1fr; + gap: 0; + } + .ab-history__slide { + width: 300Px; + } + .ab-members__logos { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + .ab-culture__item { + flex-direction: column; + gap: 16Px; + } + .ab-honors__item { + align-items: flex-start; + } +} +@media (max-width: 576px) { + .ab-hero__title { + padding-top: calc(var(--header-h) + 5rem); + padding-bottom: 24Px; + } + .ab-hero__title h1 { + font-size: 28Px; + line-height: 40Px; + } + .ab-hero__media { + height: 280Px; + } + .ab-intro__title, + .ab-history__title, + .ab-culture__title, + .ab-global__title, + .ab-members__title, + .ab-honors__title, + .ab-csr__title { + font-size: 32Px; + line-height: 44Px; + } + .ab-members__card { + padding: 24Px; + min-height: 0; + } + .ab-members__logos { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .ab-members__name { + font-size: 24Px; + line-height: 32Px; + } + .ab-history { + min-height: 54rem; + } + .ab-intro, + .ab-history, + .ab-global, + .ab-honors, + .ab-csr { + padding-top: 4rem; + } + .ab-intro, + .ab-history, + .ab-csr { + padding-bottom: 0; + } + .ab-members { + padding-bottom: 4rem; + } + .ab-culture__inner, + .ab-members__inner, + .ab-csr__inner { + padding-top: 4rem; + padding-bottom: 0; + } + .ab-history__head .s-arrows { + display: none; + } + .ab-history__arrows-mobile { + display: flex; + justify-content: flex-start; + margin-top: 24Px; + padding-left: var(--p-x); + } + .ab-history__arrows-mobile .s-arrows { + display: flex; + gap: 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/announce-CVbH_dRv.css b/public/themes/dist_static/static/css/announce-CVbH_dRv.css new file mode 100644 index 0000000..2f547b4 --- /dev/null +++ b/public/themes/dist_static/static/css/announce-CVbH_dRv.css @@ -0,0 +1 @@ +.main-announce{background:var(--color-white)}.a-page{padding-top:calc(var(--header-h) + 2.75rem + 2.5rem);padding-bottom:6.25rem}.a-head{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1rem;padding-bottom:2.5rem;display:flex}.a-head__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.a-head__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.a-toolbar{justify-content:space-between;align-items:center;gap:1.5rem;margin-top:2.75rem;margin-bottom:2.75rem;display:flex}.a-filter__group{position:relative}.a-filter{min-height:3rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;background:0 0;border:1px solid #dfe0e2;border-radius:6.25rem;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;transition:border-color .25s,color .25s;display:inline-flex}.a-filter:hover,.a-filter.is-open,.a-filter.is-selected{border-color:var(--color-primary);color:var(--color-primary)}.a-filter.is-open .a-filter__chevron{transform:rotate(180deg)}.a-filter__chevron{width:.6875rem;height:auto;transition:transform var(--duration-fast) var(--easing);display:block}.a-filter__dropdown{z-index:30;background:var(--color-white);border-radius:1rem;flex-direction:column;gap:.5rem;min-width:12.5rem;padding:1rem;display:flex;position:absolute;top:calc(100% + .5rem);left:0;box-shadow:0 .5rem 1.5rem #2e353a24}.a-filter__dropdown[hidden]{display:none}.a-filter__dropdown-item{width:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6.25rem;padding:.625rem 1.25rem;transition:background .25s,color .25s;display:block}.a-filter__dropdown-item:hover{background:#afb5b91f}.a-filter__dropdown-item.is-active{background:var(--color-primary);color:var(--color-white)}.a-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:2.5rem;display:grid}.a-card{background:var(--color-white);border:1px solid #dfe0e2;border-radius:1.5rem;flex-direction:column;gap:1.5rem;min-height:15rem;padding:2rem;text-decoration:none;transition:border-color .25s,box-shadow .25s;display:flex}.a-card:hover{cursor:pointer;box-shadow:0 .75rem 2rem #2e353a0f}.a-card:hover .a-card__title,.a-card:hover .a-card__link{color:var(--color-primary)}.a-card__date{color:var(--color-text-muted);font-family:D-DIN-PRO,MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.a-card__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-34);transition:color var(--duration-fast) var(--easing);flex:1;margin:0}.a-card__link{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.625rem;margin-top:auto;text-decoration:none;display:inline-flex}.a-card__link svg{width:1rem;height:auto;transition:filter var(--duration-fast) var(--easing)}.a-card__link path{fill:currentColor}@media (width<=1439px){.a-page{padding-top:calc(var(--header-h) + 40px);padding-bottom:72px}.a-head{gap:12px;padding-bottom:28px}.a-head__title{font-size:36px;line-height:48px}.a-head__desc{font-size:16px}.a-toolbar{flex-wrap:wrap;gap:16px;margin-top:32px;margin-bottom:32px}.a-filter{min-height:44px;padding:10px 24px;font-size:16px}.a-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.a-card{gap:20px;min-height:200px;padding:24px}.a-card__title{font-size:20px;line-height:30px}}@media (width<=992px){.a-toolbar{flex-direction:column;align-items:stretch}.a-filter{width:fit-content}}@media (width<=576px){.a-page{padding-top:calc(var(--header-h) + 24px);padding-bottom:48px}.a-head{gap:10px;padding-bottom:20px}.a-head__title{font-size:28px;line-height:38px}.a-head__desc{font-size:14px;line-height:22px}.a-toolbar{margin-top:24px;margin-bottom:24px}.a-filter{min-height:40px;padding:8px 16px;font-size:14px}.a-grid{grid-template-columns:1fr;gap:12px}.a-card{border-radius:16px;gap:16px;min-height:0;padding:20px}.a-card__date{font-size:14px}.a-card__title{font-size:18px;line-height:26px}.a-card__link{font-size:14px}} diff --git a/public/themes/dist_static/static/css/announce.css b/public/themes/dist_static/static/css/announce.css new file mode 100644 index 0000000..a0279de --- /dev/null +++ b/public/themes/dist_static/static/css/announce.css @@ -0,0 +1,285 @@ +.main-announce { + background: var(--color-white); +} + +.a-page { + padding-top: calc(var(--header-h) + 2.75rem + 2.5rem); + padding-bottom: 6.25rem; +} + +.a-head { + display: flex; + flex-direction: column; + gap: 1rem; + padding-bottom: 2.5rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.a-head__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.a-head__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.a-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-top: 2.75rem; + margin-bottom: 2.75rem; +} + +.a-filter__group { + position: relative; +} + +.a-filter { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + min-height: 3rem; + padding: 0.75rem 2rem; + border: 1px solid rgb(223, 224, 226); + border-radius: 6.25rem; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: border-color 0.25s ease, color 0.25s ease; +} +.a-filter:hover, .a-filter.is-open, .a-filter.is-selected { + border-color: var(--color-primary); + color: var(--color-primary); +} +.a-filter.is-open .a-filter__chevron { + transform: rotate(180deg); +} + +.a-filter__chevron { + display: block; + width: 0.6875rem; + height: auto; + transition: transform var(--duration-fast) var(--easing); +} + +.a-filter__dropdown { + position: absolute; + top: calc(100% + 0.5rem); + left: 0; + z-index: 30; + display: flex; + flex-direction: column; + gap: 0.5rem; + min-width: 12.5rem; + padding: 1rem; + border-radius: 1rem; + background: var(--color-white); + box-shadow: 0 0.5rem 1.5rem rgba(46, 53, 58, 0.14); +} +.a-filter__dropdown[hidden] { + display: none; +} + +.a-filter__dropdown-item { + display: block; + width: 100%; + padding: 0.625rem 1.25rem; + border: 0; + border-radius: 6.25rem; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + text-align: left; + cursor: pointer; + transition: background 0.25s ease, color 0.25s ease; +} +.a-filter__dropdown-item:hover { + background: rgba(175, 181, 185, 0.12); +} +.a-filter__dropdown-item.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.a-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 2.5rem; +} + +.a-card { + display: flex; + flex-direction: column; + gap: 1.5rem; + min-height: 15rem; + padding: 2rem; + border: 1px solid rgb(223, 224, 226); + border-radius: 1.5rem; + background: var(--color-white); + text-decoration: none; + transition: border-color 0.25s ease, box-shadow 0.25s ease; +} +.a-card:hover { + cursor: pointer; + box-shadow: 0 0.75rem 2rem rgba(46, 53, 58, 0.06); +} +.a-card:hover .a-card__title { + color: var(--color-primary); +} +.a-card:hover .a-card__link { + color: var(--color-primary); +} +.a-card__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.a-card__title { + margin: 0; + flex: 1; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-34); + transition: color var(--duration-fast) var(--easing); +} +.a-card__link { + display: inline-flex; + align-items: center; + gap: 0.625rem; + margin-top: auto; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.a-card__link svg { + width: 1rem; + height: auto; + transition: filter var(--duration-fast) var(--easing); +} +.a-card__link path { + fill: currentColor; +} + +@media (max-width: 1439px) { + .a-page { + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 72Px; + } + .a-head { + gap: 12Px; + padding-bottom: 28Px; + } + .a-head__title { + font-size: 36Px; + line-height: 48Px; + } + .a-head__desc { + font-size: 16Px; + } + .a-toolbar { + flex-wrap: wrap; + gap: 16Px; + margin-top: 32Px; + margin-bottom: 32Px; + } + .a-filter { + min-height: 44Px; + padding: 10Px 24Px; + font-size: 16Px; + } + .a-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16Px; + } + .a-card { + min-height: 200Px; + gap: 20Px; + padding: 24Px; + } + .a-card__title { + font-size: 20Px; + line-height: 30Px; + } +} +@media (max-width: 992px) { + .a-toolbar { + flex-direction: column; + align-items: stretch; + } + .a-filter { + width: fit-content; + } +} +@media (max-width: 576px) { + .a-page { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 48Px; + } + .a-head { + gap: 10Px; + padding-bottom: 20Px; + } + .a-head__title { + font-size: 28Px; + line-height: 38Px; + } + .a-head__desc { + font-size: 14Px; + line-height: 22Px; + } + .a-toolbar { + margin-top: 24Px; + margin-bottom: 24Px; + } + .a-filter { + min-height: 40Px; + padding: 8Px 16Px; + font-size: 14Px; + } + .a-grid { + grid-template-columns: 1fr; + gap: 12Px; + } + .a-card { + min-height: 0; + gap: 16Px; + padding: 20Px; + border-radius: 16Px; + } + .a-card__date { + font-size: 14Px; + } + .a-card__title { + font-size: 18Px; + line-height: 26Px; + } + .a-card__link { + font-size: 14Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/category-CYv_FoNd.css b/public/themes/dist_static/static/css/category-CYv_FoNd.css new file mode 100644 index 0000000..27fdd39 --- /dev/null +++ b/public/themes/dist_static/static/css/category-CYv_FoNd.css @@ -0,0 +1 @@ +.main-category{background:var(--color-white)}.c-page{--c-breadcrumb-h:6.375rem;padding-top:calc(var(--header-h) + 2.75rem);padding-bottom:6.25rem}.c-breadcrumb{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);line-height:var(--font-22);flex-wrap:wrap;align-items:center;gap:.75rem;padding-top:2.5rem;padding-bottom:2.5rem;display:flex}.c-breadcrumb__link{color:var(--color-text-link);transition:color var(--duration-fast) var(--easing)}.c-breadcrumb__link:hover{color:var(--color-primary)}.c-breadcrumb__sep{color:#afb5b9;flex-shrink:0;align-items:center;display:inline-flex}.c-breadcrumb__sep svg{width:.4375rem;height:auto;display:block}.c-breadcrumb__current{color:var(--color-text);font-weight:500}.c-layout{grid-template-columns:minmax(15rem,23.3125rem) minmax(0,1fr);align-items:start;gap:3.5625rem;display:grid}.c-sidebar{align-self:start}.c-sidebar__list{margin:0;padding:0 .25rem 0 0;list-style:none}.c-sidebar__item.is-active .c-sidebar__trigger{color:var(--color-primary);padding:2rem 0}.c-sidebar__item.is-active .c-sidebar__subs{flex-direction:column;gap:2rem;display:flex}.c-sidebar__item:not(.is-active) .c-sidebar__trigger{border-bottom:1px solid #2e353a1a}.c-sidebar__item:first-child:not(.is-active) .c-sidebar__trigger,.c-sidebar__item.is-active+.c-sidebar__item .c-sidebar__trigger{border-top:1px solid #2e353a1a}.c-sidebar__trigger{width:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);text-align:left;cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;justify-content:space-between;align-items:center;gap:1rem;padding:1.6rem 0;display:flex}.c-sidebar__trigger>span:first-child{flex:1;min-width:0}.c-sidebar__chevron{color:#afb5b9;transform-origin:50%;flex-shrink:0;justify-content:center;align-items:center;width:.75rem;height:.75rem;transition:transform .35s cubic-bezier(.4,0,.2,1),color .35s cubic-bezier(.4,0,.2,1);display:inline-flex;overflow:visible;transform:rotate(90deg)}.c-sidebar__chevron svg{width:.5rem;height:auto;display:block;overflow:visible}.c-sidebar__item.is-active .c-sidebar__chevron{color:var(--color-primary);transform:rotate(-90deg)}.c-sidebar__subs{margin:0;padding:0 2.5rem 2.5rem;list-style:none;display:none}.c-sidebar__sub{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;padding:0}.c-sidebar__sub.is-active,.c-sidebar__sub:hover{color:var(--color-primary)}.c-main{min-width:0}.c-panel[hidden]{display:none}.c-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;display:grid}.c-grid[hidden],.s-product-card[hidden]{display:none}.c-empty{background:#afb5b914;border-radius:1.25rem;justify-content:center;align-items:center;min-height:26.25rem;display:flex}.c-empty[hidden]{display:none}.c-empty__text{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);line-height:var(--font-26);margin:0}@media (width>=1440px){.c-page{--c-sticky-top:calc(var(--header-h) + 44px)}.site-header.is-scrolled~.main-category .c-page{--c-sticky-top:var(--header-h)}.c-sidebar{top:var(--c-sticky-top);max-height:calc(100svh - var(--c-sticky-top));overscroll-behavior:contain;transition:top var(--duration-normal) var(--easing);scrollbar-width:thin;position:sticky;overflow-y:auto}}@media (width<=1439px){.c-page{--c-breadcrumb-h:84px;--c-sticky-top:var(--header-h);padding-top:var(--header-h);padding-bottom:72px}.c-breadcrumb{gap:10px;padding-top:24px;padding-bottom:24px;font-size:15px;line-height:21px}.c-layout{grid-template-columns:minmax(200px,260px) minmax(0,1fr);gap:24px}.c-sidebar{top:var(--header-h);max-height:calc(100svh - var(--header-h));overscroll-behavior:contain;scrollbar-width:thin;position:sticky;overflow-y:auto}.c-sidebar__item.is-active .c-sidebar__subs{gap:28px}.c-sidebar__trigger{padding:28px 0;font-size:18px;line-height:26px}.c-sidebar__subs{padding:0 0 0 16px}.c-sidebar__subs li+li{margin-top:0}.c-sidebar__sub{font-size:17px;line-height:24px}.c-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.c-empty{border-radius:16px;min-height:320px}.c-empty__text{font-size:17px;line-height:24px}}@media (width<=576px){.c-page{--c-breadcrumb-h:68px;padding-top:var(--header-h);padding-bottom:48px}.c-breadcrumb{gap:8px;padding-top:16px;padding-bottom:16px;font-size:14px;line-height:20px;position:static}.c-breadcrumb__sep svg{width:6px}.c-layout{grid-template-columns:minmax(108px,128px) minmax(0,1fr);gap:12px}.c-sidebar{top:var(--header-h);max-height:calc(100svh - var(--header-h));overscroll-behavior:contain;scrollbar-width:thin;position:sticky;overflow-y:auto}.c-sidebar__item.is-active .c-sidebar__trigger{padding:16px 0}.c-sidebar__item.is-active .c-sidebar__subs{gap:16px}.c-sidebar__trigger{gap:8px;padding:16px 0;font-size:14px;line-height:20px}.c-sidebar__chevron{width:10px;height:10px}.c-sidebar__chevron svg{width:7px}.c-sidebar__subs{padding:0 12px 12px}.c-sidebar__subs li+li{margin-top:0}.c-sidebar__sub{text-align:left;font-size:12px;line-height:18px}.c-grid{grid-template-columns:1fr;gap:16px}.s-product-card__link{border-radius:12px;gap:12px;padding:16px}.s-product-card__foot{gap:8px;padding-top:12px}.s-product-card__name{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;font-size:14px;line-height:20px;display:-webkit-box;overflow:hidden}.s-product-card__arrow{width:32px;height:32px}.s-product-card__arrow img{width:10px}.c-empty{border-radius:12px;min-height:200px}.c-empty__text{font-size:14px;line-height:20px}} diff --git a/public/themes/dist_static/static/css/category.css b/public/themes/dist_static/static/css/category.css new file mode 100644 index 0000000..c251b10 --- /dev/null +++ b/public/themes/dist_static/static/css/category.css @@ -0,0 +1,382 @@ +.main-category { + background: var(--color-white); +} + +.c-page { + --c-breadcrumb-h: 6.375rem; + padding-top: calc(var(--header-h) + 2.75rem); + padding-bottom: 6.25rem; +} + +.c-breadcrumb { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 0.75rem; + padding-top: 2.5rem; + padding-bottom: 2.5rem; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + line-height: var(--font-22); +} +.c-breadcrumb__link { + color: var(--color-text-link); + transition: color var(--duration-fast) var(--easing); +} +.c-breadcrumb__link:hover { + color: var(--color-primary); +} +.c-breadcrumb__sep { + display: inline-flex; + align-items: center; + flex-shrink: 0; + color: rgb(175, 181, 185); +} +.c-breadcrumb__sep svg { + display: block; + width: 0.4375rem; + height: auto; +} +.c-breadcrumb__current { + color: var(--color-text); + font-weight: 500; +} + +.c-layout { + display: grid; + grid-template-columns: minmax(15rem, 23.3125rem) minmax(0, 1fr); + gap: 3.5625rem; + align-items: start; +} + +.c-sidebar { + align-self: start; +} +.c-sidebar__list { + margin: 0; + padding: 0; + padding-right: 0.25rem; + list-style: none; +} +.c-sidebar__item.is-active .c-sidebar__trigger { + padding: 2rem 0; + color: var(--color-primary); +} +.c-sidebar__item.is-active .c-sidebar__subs { + display: flex; + flex-direction: column; + gap: 2rem; +} +.c-sidebar__item:not(.is-active) .c-sidebar__trigger { + border-bottom: 1px solid rgba(46, 53, 58, 0.1); +} +.c-sidebar__item:first-child:not(.is-active) .c-sidebar__trigger, .c-sidebar__item.is-active + .c-sidebar__item .c-sidebar__trigger { + border-top: 1px solid rgba(46, 53, 58, 0.1); +} +.c-sidebar__trigger { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 1.6rem 0; + border: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); + text-align: left; + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +} +.c-sidebar__trigger > span:first-child { + flex: 1; + min-width: 0; +} +.c-sidebar__chevron { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 0.75rem; + height: 0.75rem; + overflow: visible; + color: rgb(175, 181, 185); + transform: rotate(90deg); + transform-origin: center; + transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), color 0.35s cubic-bezier(0.4, 0, 0.2, 1); +} +.c-sidebar__chevron svg { + display: block; + width: 0.5rem; + height: auto; + overflow: visible; +} +.c-sidebar__item.is-active .c-sidebar__chevron { + transform: rotate(-90deg); + color: var(--color-primary); +} +.c-sidebar__subs { + display: none; + margin: 0; + padding: 2.5rem; + padding-top: 0; + list-style: none; +} +.c-sidebar__sub { + padding: 0; + border: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +} +.c-sidebar__sub.is-active, .c-sidebar__sub:hover { + color: var(--color-primary); +} + +.c-main { + min-width: 0; +} + +.c-panel[hidden] { + display: none; +} + +.c-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2.5rem; +} +.c-grid[hidden] { + display: none; +} + +.s-product-card[hidden] { + display: none; +} + +.c-empty { + display: flex; + align-items: center; + justify-content: center; + min-height: 26.25rem; + border-radius: 1.25rem; + background: rgba(175, 181, 185, 0.08); +} +.c-empty[hidden] { + display: none; +} +.c-empty__text { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + line-height: var(--font-26); +} + +@media (min-width: 1440px) { + .c-page { + --c-sticky-top: calc(var(--header-h) + 44Px); + } + .site-header.is-scrolled ~ .main-category .c-page { + --c-sticky-top: var(--header-h); + } + .c-sidebar { + position: sticky; + top: var(--c-sticky-top); + max-height: calc(100svh - var(--c-sticky-top)); + overflow-y: auto; + overscroll-behavior: contain; + transition: top var(--duration-normal) var(--easing); + scrollbar-width: thin; + } +} +@media (max-width: 1439px) { + .c-page { + --c-breadcrumb-h: 84Px; + --c-sticky-top: var(--header-h); + padding-top: var(--header-h); + padding-bottom: 72Px; + } + .c-breadcrumb { + padding-top: 24Px; + padding-bottom: 24Px; + gap: 10Px; + font-size: 15Px; + line-height: 21Px; + } + .c-layout { + grid-template-columns: minmax(200Px, 260Px) minmax(0, 1fr); + gap: 24Px; + } + .c-sidebar { + position: sticky; + top: var(--header-h); + max-height: calc(100svh - var(--header-h)); + overflow-y: auto; + overscroll-behavior: contain; + scrollbar-width: thin; + } + .c-sidebar__item.is-active .c-sidebar__subs { + gap: 28Px; + } + .c-sidebar__trigger { + padding: 28Px 0; + font-size: 18Px; + line-height: 26Px; + } + .c-sidebar__subs { + padding: 16Px; + padding-top: 0; + } + .c-sidebar__subs li + li { + margin-top: 0; + } + .c-sidebar__sub { + font-size: 17Px; + line-height: 24Px; + } + .c-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 24Px; + } + .c-empty { + min-height: 320Px; + border-radius: 16Px; + } + .c-empty__text { + font-size: 17Px; + line-height: 24Px; + } +} +@media (max-width: 576px) { + .c-page { + --c-breadcrumb-h: 68Px; + padding-top: var(--header-h); + padding-bottom: 48Px; + } + .c-breadcrumb { + display: none; + } + .c-layout { + grid-template-columns: 1fr; + gap: 0; + } + .c-sidebar { + max-height: unset; + overflow: auto; + } + .c-sidebar__list { + background-color: var(--color-white); + } + .c-sidebar__item:not(.is-active) { + display: none; + } + .c-sidebar__item.is-active .c-sidebar__trigger { + padding: 16Px 0; + font-size: 16Px; + line-height: 22Px; + pointer-events: none; + color: var(--color-text); + } + .c-sidebar__item.is-active .c-sidebar__subs { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + gap: 0; + padding: 0; + border-bottom: 1Px solid rgb(223, 224, 226); + } + .c-sidebar__item.is-active .c-sidebar__subs::-webkit-scrollbar { + display: none; + } + .c-sidebar__item.is-active .c-sidebar__subs li { + position: relative; + flex-shrink: 0; + } + .c-sidebar__trigger { + gap: 8Px; + padding: 16Px 0; + font-size: 16Px; + line-height: 22Px; + } + .c-sidebar__chevron { + display: none; + } + .c-sidebar__subs { + padding: 0; + } + .c-sidebar__subs li + li { + margin-top: 0; + } + .c-sidebar__sub { + padding: 8Px 12Px; + font-size: 13Px; + line-height: 20Px; + text-align: center; + white-space: nowrap; + } + .c-sidebar__sub.is-active { + color: var(--color-primary); + font-weight: 500; + } + .c-sidebar__sub.is-active::after { + content: ""; + position: absolute; + left: 12Px; + right: 12Px; + bottom: 0Px; + height: 2Px; + background: var(--color-primary); + } + .c-main { + padding-top: 16Px; + } + .c-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16Px; + } + .s-product-card__link { + padding: 16Px; + gap: 12Px; + border-radius: 12Px; + } + .s-product-card__foot { + padding-top: 12Px; + gap: 8Px; + } + .s-product-card__name { + font-size: 14Px; + line-height: 20Px; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + .s-product-card__arrow { + width: 32Px; + height: 32Px; + } + .s-product-card__arrow img { + width: 10Px; + } + .c-empty { + min-height: 200Px; + border-radius: 12Px; + } + .c-empty__text { + font-size: 14Px; + line-height: 20Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/common-DaLMnkkl.css b/public/themes/dist_static/static/css/common-DaLMnkkl.css new file mode 100644 index 0000000..00fd131 --- /dev/null +++ b/public/themes/dist_static/static/css/common-DaLMnkkl.css @@ -0,0 +1 @@ +:root{--p-x:9.0625rem;--color-white:#fff;--color-text:#2e353a;--color-text-muted:#666;--color-text-link:#afb5b9;--color-text-light:#666;--color-primary:#ef4335;--color-primary-hover:#d93b2e;--color-orange:var(--color-primary);--color-orange-hover:var(--color-primary-hover);--color-orange-10:#ef433514;--color-bg-module:#f7f8fe;--color-footer-bg:#2e353a;--color-blue-80:var(--color-text);--color-blue-30:#2e353a1a;--color-secondary-hover:var(--color-primary-hover);--color-gold:var(--color-primary);--header-m-h:4rem;--header-m-py:.75rem;--header-m-btn:1.5rem;--header-m-btn-svg:1.5rem;--header-h:5.5rem;--header-t-h:2.75rem;--duration-fast:.25s;--duration-normal:.3s;--duration-slow:.4s;--easing:ease}@media (width<=1919px){:root{--p-x:100px}}@media (width<=1679px){:root{--p-x:80px}}@media (width<=1439px){:root{--p-x:40px;--header-h:var(--header-m-h)}}@media (width<=576px){:root{--p-x:20px}}:root{--font-12:1rem;--font-13:1rem;--font-14:1rem;--font-15:1rem;--font-16:1rem;--font-17:1.0625rem;--font-18:1.125rem;--font-19:1.1875rem;--font-20:1.25rem;--font-21:1.3125rem;--font-22:1.375rem;--font-23:1.4375rem;--font-24:1.5rem;--font-25:1.5625rem;--font-26:1.625rem;--font-27:1.6875rem;--font-28:1.75rem;--font-29:1.8125rem;--font-30:1.875rem;--font-31:1.9375rem;--font-32:2rem;--font-33:2.0625rem;--font-34:2.125rem;--font-35:2.1875rem;--font-36:2.25rem;--font-37:2.3125rem;--font-38:2.375rem;--font-39:2.4375rem;--font-40:2.5rem;--font-41:2.5625rem;--font-42:2.625rem;--font-43:2.6875rem;--font-44:2.75rem;--font-45:2.8125rem;--font-46:2.875rem;--font-47:2.9375rem;--font-48:3rem;--font-49:3.0625rem;--font-50:3.125rem;--font-51:3.1875rem;--font-52:3.25rem;--font-53:3.3125rem;--font-54:3.375rem;--font-55:3.4375rem;--font-56:3.5rem;--font-57:3.5625rem;--font-58:3.625rem;--font-59:3.6875rem;--font-60:3.75rem;--font-61:3.8125rem;--font-62:3.875rem;--font-63:3.9375rem;--font-64:4rem;--font-65:4.0625rem;--font-66:4.125rem;--font-67:4.1875rem;--font-68:4.25rem;--font-69:4.3125rem;--font-70:4.375rem;--font-71:4.4375rem;--font-72:4.5rem;--font-73:4.5625rem;--font-74:4.625rem;--font-75:4.6875rem;--font-76:4.75rem;--font-77:4.8125rem;--font-78:4.875rem;--font-79:4.9375rem;--font-80:5rem}@media (width<=576px){:root{--font-10:14px;--font-11:14px;--font-12:14px;--font-13:14px;--font-14:14px;--font-15:14px;--font-16:14px;--font-17:16px;--font-18:16px;--font-19:16px;--font-20:16px;--font-21:18px;--font-22:18px;--font-23:18px;--font-24:18px;--font-25:20px;--font-26:20px;--font-27:20px;--font-28:20px;--font-29:22px;--font-30:22px;--font-31:22px;--font-32:22px;--font-33:24px;--font-34:24px;--font-35:24px;--font-36:24px;--font-37:26px;--font-38:26px;--font-39:26px;--font-40:26px;--font-41:26px;--font-42:26px;--font-43:28px;--font-44:28px;--font-45:30px;--font-46:30px;--font-47:30px;--font-48:30px;--font-49:32px;--font-50:32px;--font-51:32px;--font-52:32px;--font-53:34px;--font-54:34px;--font-55:34px;--font-56:34px;--font-57:36px;--font-58:36px;--font-59:36px;--font-60:36px;--font-61:38px;--font-62:38px;--font-63:38px;--font-64:38px;--font-65:40px;--font-66:40px;--font-67:40px;--font-68:40px;--font-69:42px;--font-70:42px;--font-71:42px;--font-72:42px;--font-73:44px;--font-74:44px;--font-75:44px;--font-76:44px;--font-77:46px;--font-78:46px;--font-79:46px;--font-80:46px}}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-400-Regular-CbJSDVu2.otf)format("opentype");font-weight:400;font-display:swap}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-500-Medium-DPN-gY68.otf)format("opentype");font-weight:500;font-display:swap}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-600-SemiBold-DXnDJEQd.otf)format("opentype");font-weight:600;font-display:swap}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-700-Bold-WWlV1fXR.otf)format("opentype");font-weight:700;font-display:swap}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-800-ExtraBold-Dzo8XGHI.otf)format("opentype");font-weight:800;font-display:swap}@font-face{font-family:D-DIN-PRO;src:url(../fonts/D-DIN-PRO-900-Heavy-CcGOV6O3.otf)format("opentype");font-weight:900;font-display:swap}@font-face{font-family:PingFang SC;src:url(../fonts/PFDinTextPro-Medium-BcfGjLHx.ttf)format("truetype");font-weight:400;font-display:swap}@font-face{font-family:PingFang SC;src:url(../fonts/PFDinTextPro-Medium-BcfGjLHx.ttf)format("truetype");font-weight:500;font-display:swap}@font-face{font-family:PingFang SC;src:url(../fonts/PFDinTextPro-Bold-F7OVdohK.ttf)format("truetype");font-weight:600;font-display:swap}@font-face{font-family:PingFang SC;src:url(../fonts/PFDinTextPro-Bold-F7OVdohK.ttf)format("truetype");font-weight:700;font-display:swap}@font-face{font-family:MiSans VF;src:url(../fonts/MiSans-VF-DESbBZLB.ttf)format("truetype");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Aldrich;src:url(../fonts/Aldrich-Regular-CZNgUhqU.ttf)format("truetype");font-weight:400;font-style:normal;font-display:swap}*{box-sizing:border-box;margin:0;padding:0}html,body{width:100%;height:100%}html{font-size:16px}body{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;overflow-x:hidden}button{cursor:pointer;background:0 0;border:none;outline:none}a{text-decoration:none}i{font-style:normal}ul,p,h1,h2,h3,h4,h5,h6{margin:0;padding:0}li{list-style:none}@property --btn-fill{syntax:"";inherits:false;initial-value:#ea5520}.arrow-right{width:.9375rem;height:.75rem}.s-btn{min-width:12.5rem;min-height:3.75rem;color:var(--color-white);font-family:"OPPO Sans 4.0";font-style:Regular;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);text-transform:capitalize;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:color var(--duration-normal) var(--easing), opacity var(--duration-normal) var(--easing), transform var(--duration-normal) var(--easing), box-shadow var(--duration-normal) var(--easing);border:1px solid #0000;border-radius:.5rem;justify-content:center;align-items:center;gap:1.875rem;display:inline-flex}.s-btn.large{border-radius:1.25rem;width:12.875rem;height:3.5rem;padding:0}.s-btn.disabled{cursor:not-allowed;background:#cdcdcd}.s-btn__actions{align-items:center;gap:1rem;display:flex}.s-btn--primary{background:var(--color-primary)}.s-btn--primary:hover{opacity:.9}.s-btn--secondary{background-color:var(--color-blue-30)}.s-btn--outline{border:1px solid var(--color-white);color:var(--color-white);transition:color var(--duration-normal) var(--easing), background var(--duration-normal) var(--easing), border-color var(--duration-normal) var(--easing);background:0 0}.s-btn--outline:hover{background:var(--color-white);color:var(--color-orange)}.s-btn--light{background:var(--color-white);color:var(--color-primary)}.s-btn--light:hover{opacity:.9}.s-btn--pill{border-radius:1.875rem;height:3.5rem;min-height:3.5rem}.s-btn svg{width:13px;height:10px}.s-btn .btn__dot{background:var(--color-white);border-radius:50%;width:.5rem;height:.5rem}.hover_underline:after{content:"";background:var(--color-orange);transform-origin:50%;will-change:transform;width:100%;height:.125rem;transition:transform var(--duration-normal) var(--easing);position:absolute;bottom:-.375rem;left:0;right:0;transform:scaleX(0)}.hover_underline.is-active:after,.hover_underline:hover:after{transform:scale(1)}.marquee{white-space:nowrap;width:100%;overflow:hidden}.marquee .track{white-space:nowrap;animation:20s linear infinite scroll;display:inline-block}.marquee .track span{margin-right:3.125rem}@keyframes scroll{0%{transform:translate(0)}to{transform:translate(-50%)}}.glass-card{--c-glass:#c4c4c433;--c-light:#fff;--saturation:100%;--left:.125rem;--right:-.1125rem;background-color:color-mix(in srgb, var(--c-glass) 20%, transparent);-webkit-backdrop-filter:blur(.3125rem) saturate(var(--saturation));backdrop-filter:blur(.3125rem) saturate(var(--saturation));box-shadow:inset 0 0 0 .125rem color-mix(in srgb, var(--c-light) 10%, transparent), inset var(--left) var(--left) .125rem -.125rem color-mix(in srgb, var(--c-light) 90%, transparent), inset var(--right) var(--right) .125rem -.125rem color-mix(in srgb, var(--c-light) 80%, transparent);border:none}.glass-card2{background:linear-gradient(135deg,#e6e6e6 0%,#f6f6f6 100%);display:block;box-shadow:-.25rem -.25rem .625rem -.5rem #fff,.25rem .25rem .625rem -.5rem #0000004d}.slide-btn{cursor:pointer;border:none;width:3rem;height:3rem}.slide-btn img{object-fit:cover;width:100%;height:100%}.slide-btn:hover img{filter:invert()}.section__wrap{padding-left:var(--p-x);padding-right:var(--p-x)}.s-search{background:0 0;border:1px solid #dfe0e2;border-radius:6.25rem;flex-shrink:0;align-items:center;gap:.75rem;width:min(30rem,100%);min-height:3.5rem;padding:.5rem .5rem .5rem 1.25rem;display:flex}.s-search__icon{flex-shrink:0;width:1.5rem;height:1.5rem;display:block}.s-search__input{min-width:0;height:2.5rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);background:0 0;border:0;outline:none;flex:1;padding:0}.s-search__input::placeholder{color:#afb5b9}.s-search__btn{background:var(--color-primary);min-width:4.5rem;height:2.5rem;color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);cursor:pointer;transition:background var(--duration-fast) var(--easing);border:0;border-radius:3.125rem;flex-shrink:0;padding:0 1.25rem;font-weight:400;line-height:1}.s-search__btn:hover{background:var(--color-primary-hover)}.s-arrows{align-items:center;gap:1rem;display:flex}.s-arrows__prev,.s-arrows__next{background:var(--color-white);color:#afb5b9;cursor:pointer;width:3.5rem;height:3.5rem;transition:color var(--duration-fast) var(--easing), border-color var(--duration-fast) var(--easing), opacity var(--duration-fast) var(--easing);border:1px solid #dfe0e2;border-radius:.75rem;justify-content:center;align-items:center;padding:0;display:inline-flex}.s-arrows__prev svg,.s-arrows__next svg{width:1rem;height:.875rem;display:block}.s-arrows__prev path,.s-arrows__next path{fill:currentColor}.s-arrows__prev:hover,.s-arrows__next:hover{color:var(--color-primary);border-color:var(--color-primary)}.s-arrows__prev.swiper-button-disabled,.s-arrows__next.swiper-button-disabled{opacity:.35;cursor:not-allowed}.s-arrows__prev{transform:scaleX(-1)}.s-arrows__next{color:var(--color-primary);border-color:var(--color-primary)}@media (width<=1439px){.s-search{width:min(360px,100%)}}@media (width<=992px){.s-search{width:100%}}@media (width<=576px){.s-search{min-height:44px;padding:4px 4px 4px 14px}.s-search__input{font-size:14px}.s-search__btn{min-width:64px;height:36px;padding:0 16px;font-size:14px}br{display:none}}.section-inner{width:100%;margin:0 auto}.section__banner{background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:flex;position:relative}.section__banner .section__banner__inner{flex-direction:column;flex:1;justify-content:center;display:flex}.section__banner .section__banner__header{flex-direction:column;margin-bottom:3.125rem;display:flex}.section__banner .section__banner__title{color:var(--color-white);font-family:Douyin Sans;font-style:Bold;font-size:var(--font-56);font-weight:700;line-height:var(--font-66);letter-spacing:0;margin-bottom:1rem}.section__banner .section__banner__sub{color:var(--color-white);font-family:Douyin Sans;font-style:Medium;font-size:var(--font-36);font-weight:500;line-height:var(--font-43);letter-spacing:0}.section__banner__desc{color:#fff;font-family:"OPPO Sans 4.0";font-style:Medium;font-size:var(--font-24);font-weight:500;line-height:var(--font-36);letter-spacing:0;text-align:left;text-transform:uppercase}.banner__header2{margin-bottom:3.125rem}.banner__title2{color:var(--color-white);font-family:Douyin Sans;font-style:Bold;font-size:var(--font-64);font-weight:700;line-height:var(--font-77);letter-spacing:0;text-align:left;margin-bottom:.875rem}.banner__sub2{color:var(--color-white);font-family:D-DIN-PRO;font-style:Medium;font-size:var(--font-18);font-weight:500;line-height:var(--font-24);letter-spacing:0;text-align:left}.section__header{flex-direction:column;align-items:center;margin-bottom:3.125rem;display:flex}.section__eyebrow{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin-bottom:.5rem}.section__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);text-align:left;text-transform:none}.section__title--hero{font-size:var(--font-60);font-weight:500;line-height:var(--font-80);margin-bottom:1.125rem}.section__title__sub{color:#333;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-24);letter-spacing:0;text-align:center;text-transform:uppercase}.section__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28)}.section__img_text{padding:8.125rem 16.25rem 6.25rem}.section__img_text .section__inner{align-items:center;gap:6.25rem;display:flex}.section__img_text .section__inner .section__left{border-radius:2.5rem;width:50%;height:31.25rem;overflow:hidden}.section__img_text .section__inner .section__left img{object-fit:cover;width:100%;height:100%}.section__img_text .section__inner .section__right{flex:1}.section__img_text .section__inner .section__right .section__desc:last-child{margin-bottom:0}.timeline__tabs{align-items:center;gap:0;display:flex}.timeline__tabs .timeline__tab{-webkit-user-select:none;user-select:none;cursor:pointer;flex-direction:column;flex:1 0;display:flex}.timeline__tabs .timeline__tab.active .dot{background-color:var(--color-primary)}.timeline__tabs .line-dot{align-items:center;width:100%;margin-top:1rem;display:flex}.timeline__tabs .line-dot:after,.timeline__tabs .line-dot:before{content:"";background-color:#b5b5b5;flex:1;height:.0625rem;display:block}.timeline__tabs .line-dot .dot{background-color:#b5b5b5;border:.25rem solid #f4f3f3;border-radius:50%;width:1.25rem;height:1.25rem}.s-product-card{min-width:0;height:auto}.s-product-card__link{height:100%;color:inherit;transition:background var(--duration-normal) var(--easing);background:#afb5b926;border-radius:1.25rem;flex-direction:column;gap:1.5rem;padding:2.5rem;text-decoration:none;display:flex}.s-product-card__link:hover{background:#afb5b938}.s-product-card__media{aspect-ratio:1;justify-content:center;align-items:center;width:100%;display:flex;overflow:hidden}.s-product-card__media img{object-fit:contain;width:auto;max-width:100%;max-height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.s-product-card__link:hover .s-product-card__media img{transform:scale(1.1)}.s-product-card__foot{transition:border-color var(--duration-fast) var(--easing);border-top:1px solid #2e353a1a;justify-content:space-between;align-items:center;gap:.75rem;padding-top:1.5rem;display:flex}.s-product-card__link:hover .s-product-card__foot{border-top-color:var(--color-primary)}.s-product-card__name{min-width:0;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-27);transition:color var(--duration-fast) var(--easing);flex:1;margin:0}.s-product-card__link:hover .s-product-card__name{color:var(--color-primary)}.s-product-card__arrow{width:2.5rem;height:2.5rem;color:var(--color-text-muted);transition:color var(--duration-fast) var(--easing);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.s-product-card__link:hover .s-product-card__arrow{color:var(--color-primary)}.s-product-card__arrow img,.s-product-card__arrow svg{width:.75rem;height:auto;display:block}.s-product-card__arrow path{fill:currentColor}@media (width<=1439px){.s-product-card__link{border-radius:16px;padding:28px}.s-product-card__foot{padding-top:20px}.s-product-card__name{font-size:18px;line-height:24px}}.s-card{background:var(--color-white);border-radius:1.5rem;padding:1.25rem 1.25rem 2.1875rem;overflow:hidden}.s-card .s-card__img{border-radius:1rem;width:100%;height:12.875rem;margin-bottom:1.125rem}.s-card .s-card__title{color:#000;font-family:"OPPO Sans 4.0";font-style:Medium;font-size:var(--font-22);font-weight:500;line-height:var(--font-26);letter-spacing:0;text-align:justify;-webkit-line-clamp:2;text-overflow:ellipsis;-webkit-box-orient:vertical;margin-bottom:1.125rem;display:-webkit-box;overflow:hidden}.s-card .s-card__sub-title{color:#838383;font-family:"OPPO Sans 4.0";font-style:Light;font-size:var(--font-16);font-weight:300;line-height:var(--font-18);letter-spacing:0;text-align:justify;margin-bottom:1.25rem}.s-card .s-card__desc{color:#666;font-family:"OPPO Sans 4.0";font-style:Regular;font-size:var(--font-18);font-weight:400;line-height:var(--font-26);letter-spacing:0;text-align:justify;min-height:calc(var(--font-26) * 3);-webkit-line-clamp:3;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}@media (width<=1439px){.section__title{font-size:36px;line-height:48px}.section__title--hero{font-size:40px;line-height:52px}}@media (width<=576px){.section__header .section__title{font-size:28px;line-height:34px}.section__header .section__title__sub{font-size:16px;line-height:24px}.section__eyebrow{font-size:16px;line-height:22px}.section__title{font-size:28px;line-height:38px}.section__title--hero{margin-bottom:12px;font-size:32px;line-height:42px}.section__desc{max-width:100%;font-size:16px;line-height:24px}.section__desc:last-child{margin-bottom:0}.s-btn{min-width:160px;min-height:48px}.section__banner{height:50vh}.section__banner .section__banner__title{margin-bottom:16px;font-size:32px;line-height:40px}.section__banner .section__banner__sub,.section__banner .section__banner__desc{font-size:16px;line-height:24px}}.pc-none{display:none!important}@media (width<=1439px){.pc-none{display:flex!important}.m-none{display:none}}.site-header{z-index:100;width:100%;color:var(--color-white);transition:background-color var(--duration-normal) var(--easing), color var(--duration-fast) var(--easing), box-shadow var(--duration-normal) var(--easing), backdrop-filter var(--duration-normal) var(--easing), transform var(--duration-normal) var(--easing);background:0 0;flex-direction:column;display:flex;position:fixed;top:0;left:0;right:0;overflow:visible}.site-header__top{height:var(--header-t-h);max-height:var(--header-t-h);z-index:2;transition:max-height var(--duration-normal) var(--easing), height var(--duration-normal) var(--easing), padding var(--duration-normal) var(--easing), opacity var(--duration-fast) var(--easing);justify-content:flex-end;align-items:center;gap:2.5rem;padding:0 3.125rem;display:flex;position:relative;overflow:hidden}.site-header__main{height:var(--header-h);z-index:2;border-top:1px solid #ffffff1a;grid-template-columns:1fr auto 1fr;align-items:center;gap:1.5rem;padding:0 3.125rem;display:grid;position:relative}.site-header .header-logo{color:inherit;flex-shrink:0;justify-self:start;text-decoration:none}.site-header .header-logo img{width:15.75rem;height:1.625rem;display:block}.site-header .header-logo .header-logo__img--dark{display:none}.site-header__nav{justify-self:center;height:100%}.site-header__nav>ul{align-items:center;gap:2rem;height:100%;margin:0;padding:0;list-style:none;display:flex}.site-header__nav>ul li{height:100%}.site-header__nav>ul>li>a{height:100%;color:inherit;font-family:PingFang SC,MiSans VF,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-22);white-space:nowrap;align-items:center;gap:.375rem;display:inline-flex}.site-header__extras{display:none}.site-header__extra-btn{width:var(--header-m-btn);height:var(--header-m-btn);color:inherit;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex}.site-header__extra-btn svg{width:var(--header-m-btn-svg);height:var(--header-m-btn-svg);fill:currentColor}.site-header__extra-btn.lang svg,.site-header__extra-btn.search svg{fill:currentColor;width:1.125rem;height:1.125rem}.site-header__actions{justify-self:end;align-items:center;gap:.625rem;min-width:0;display:flex}.site-header__icon{color:inherit;flex-shrink:0;display:flex}.site-header__icon svg{width:1rem;height:1rem;display:block}.site-header__icon--24 svg{width:1.5rem;height:1.5rem}.site-header__chevron{width:.75rem;height:.375rem;color:inherit;transition:transform var(--duration-fast) var(--easing);flex-shrink:0;display:flex}.site-header__chevron svg{width:100%;height:100%;display:block}.site-header__phone{color:inherit;white-space:nowrap;font-family:D-DIN-PRO,Aldrich,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-16);align-items:center;gap:.5rem;text-decoration:none;display:flex}.site-header__socials{align-items:center;gap:1.25rem;display:flex}.site-header__social{width:1rem;height:1rem;color:inherit;flex-shrink:0;display:flex}.site-header__lang{color:inherit;cursor:pointer;font-family:D-DIN-PRO,Aldrich,sans-serif;font-size:var(--font-15);white-space:nowrap;background:0 0;border:none;align-items:center;gap:.375rem;padding:0;font-weight:400;line-height:1;display:flex}.site-header__lang-active{color:#afb5b9}.site-header__search{background:#f9f9f9;border-radius:1.25rem;flex-shrink:0;align-items:center;width:13.6875rem;height:2.5rem;padding:0 1rem 0 1.25rem;display:flex}.site-header__search-input{min-width:0;height:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:330;line-height:var(--font-22);background:0 0;border:none;outline:none;flex:1}.site-header__search-input::placeholder{color:var(--color-text-muted)}.site-header__search-btn{cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;padding:0;display:flex}.site-header__search-btn img{width:1.5rem;height:1.5rem;display:block}.site-header .s-btn.site-header__cta{width:8.75rem;min-width:8.75rem;height:2.5rem;min-height:2.5rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);border-radius:1.25rem;padding:0}.site-header__btn{width:3rem;height:3rem;color:inherit;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex}.site-header__btn svg{width:var(--header-m-btn-svg);height:var(--header-m-btn-svg);fill:currentColor}.site-header__btn .nav-toggle-icon__bar{fill:currentColor}.site-header.is-scrolled{-webkit-backdrop-filter:blur(.75rem);backdrop-filter:blur(.75rem);background:#ffffff29}.site-header.is-scrolled .site-header__top{opacity:0;pointer-events:none;height:0;max-height:0;padding-top:0;padding-bottom:0}.site-header.is-scrolled .site-header__main{border-top-color:#0000}.site-header.dark{color:var(--color-text);background:#ffffffeb}.site-header.dark .site-header__main{border-top-color:#2e353a1a}.site-header.dark .header-logo .header-logo__img--default{display:none}.site-header.dark .header-logo .header-logo__img--dark{display:block}.site-header.dark.is-scrolled{-webkit-backdrop-filter:blur(1.25rem);background:#ffffffb8}.site-header.dark.is-scrolled .site-header__main{border-top-color:#0000}.site-header.is-mega-open,.site-header.is-mega-open.is-scrolled,.site-header.dark.is-mega-open,.site-header.dark.is-scrolled.is-mega-open{background:var(--color-white);-webkit-backdrop-filter:none;color:var(--color-text);box-shadow:none}.site-header.is-mega-open .site-header__main{border-top-color:#2e353a1a}.site-header.is-mega-open .header-logo .header-logo__img--default{display:none}.site-header.is-mega-open .header-logo .header-logo__img--dark{display:block}.site-header.is-mega-open .site-header__nav-link[aria-expanded=true]{color:var(--color-primary)}.site-header.is-mega-open .site-header__nav-link[aria-expanded=true] .site-header__chevron{color:var(--color-primary);transform:rotate(180deg)}.nav-mega{z-index:2;visibility:hidden;background:var(--color-white);transition:grid-template-rows .5s var(--easing);border-top:1px solid #dfe0e2;grid-template-rows:0fr;display:grid;position:absolute;top:100%;left:0;right:0;box-shadow:0 1.5rem 3rem #2e353a14}.nav-mega__inner{min-height:0;overflow:hidden}.nav-mega__dropdown-content.product{grid-template-columns:23.375rem minmax(0,1fr);align-items:stretch;min-height:45rem;margin:0 auto;display:grid}.nav-mega__dropdown-content.solution,.nav-mega__dropdown-content.support,.nav-mega__dropdown-content.news,.nav-mega__dropdown-content.invest,.nav-mega__dropdown-content.about{width:fit-content;margin:0 auto;padding:2.5rem 0}.nav-mega__row{flex-wrap:wrap;justify-content:center;align-items:center;gap:5rem;margin:0;padding:0;list-style:none;display:flex}.nav-mega__row a{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);white-space:nowrap;transition:color var(--duration-fast) var(--easing);text-decoration:none}.nav-mega__row a:hover{color:var(--color-primary)}.nav-mega__cats{border-right:1px solid #2e353a1a;flex-direction:column;gap:.5rem;padding:5rem;display:flex}.nav-mega__cat{width:100%;min-height:3rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);text-align:left;cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;justify-content:space-between;align-items:center;gap:.75rem;padding:.75rem 0;display:flex}.nav-mega__cat.is-active,.nav-mega__cat:hover{color:var(--color-primary)}.nav-mega__cat.is-active .nav-mega__cat-arrow,.nav-mega__cat:hover .nav-mega__cat-arrow{opacity:1;color:var(--color-primary)}.nav-mega__cat-arrow{color:#afb5b9;opacity:.7;flex-shrink:0;width:.5rem;height:.75rem;transition:color .2s,opacity .2s;display:flex}.nav-mega__cat-arrow svg{width:100%;height:100%;display:block}.nav-mega__main{grid-template-columns:minmax(0,1fr) 20rem;gap:3.5625rem;min-width:0;padding:5rem 3.5625rem 5rem 5rem;display:grid}.nav-mega__panels{min-width:0}.nav-mega__promo-side{flex-shrink:0;padding-top:6.875rem}.nav-mega__heading{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:500;line-height:var(--font-32);transition:color var(--duration-fast) var(--easing);align-items:center;gap:1rem;margin-bottom:5rem;text-decoration:none;display:inline-flex}.nav-mega__heading:hover{color:var(--color-primary)}.nav-mega__heading-arrow{color:currentColor;width:.625rem;height:.875rem;display:flex}.nav-mega__heading-arrow svg{width:100%;height:100%;display:block}.nav-mega__body{align-items:flex-start;gap:3.5625rem;min-width:0;display:flex}.nav-mega__cols{flex:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:5rem 2rem;min-width:0;display:grid}.nav-mega__cols--solution{flex:none;grid-template-columns:repeat(7,max-content);justify-content:start;gap:6.25rem}.nav-mega__col{flex-direction:column;gap:2rem;min-width:0;display:flex}.nav-mega__group{flex-direction:column;gap:2.125rem;display:flex}.nav-mega__group-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.nav-mega__group-title:after{content:"";opacity:0;width:.5rem;height:.75rem;transition:opacity var(--duration-normal) var(--easing);background:currentColor;flex-shrink:0;display:block;-webkit-mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat}.nav-mega__group-title:hover{cursor:pointer;color:var(--color-primary)}.nav-mega__group-title:hover:after{opacity:1}.nav-mega__subgroup{flex-direction:column;gap:1rem;display:flex}.nav-mega__subgroup-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.nav-mega__subgroup-title:after{content:"";opacity:0;width:.5rem;height:.75rem;transition:opacity var(--duration-normal) var(--easing);background:currentColor;flex-shrink:0;display:block;-webkit-mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat}.nav-mega__subgroup-title:hover{color:var(--color-primary)}.nav-mega__subgroup-title:hover:after{opacity:1}.nav-mega__links{flex-direction:column;gap:1.5rem;margin:0;padding:0;list-style:none;display:flex}.nav-mega__links a{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:300;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.nav-mega__links a:after{content:"";opacity:0;width:.5rem;height:.75rem;transition:opacity var(--duration-normal) var(--easing);background:currentColor;flex-shrink:0;display:block;-webkit-mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") 50%/contain no-repeat}.nav-mega__links a:hover{color:var(--color-primary)}.nav-mega__links a:hover:after{opacity:1}.nav-mega__empty{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);line-height:var(--font-24);margin:0}.nav-mega__promo{width:20rem;max-width:100%;color:inherit;flex-shrink:0;text-decoration:none;display:block}.nav-mega__promo-media{aspect-ratio:320/200;background:#afb5b933;border-radius:1.5rem;overflow:hidden}.nav-mega__promo-media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.nav-mega__promo:hover .nav-mega__promo-media img{transform:scale(1.04)}.nav-mega__promo-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;margin-top:1.625rem;display:inline-flex}.nav-mega__promo-arrow{color:currentColor;width:.5rem;height:.75rem;display:flex}.nav-mega__promo-arrow svg{width:100%;height:100%;display:block}.nav-mega__promo:hover .nav-mega__promo-title{color:var(--color-primary)}.nav-mega__promo-desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-14);font-weight:400;line-height:var(--font-20);margin:.5rem 0 0}.site-header__nav-item:hover .nav-mega{visibility:visible;grid-template-rows:1fr}.site-header__nav-item:hover .site-header__nav-link{color:var(--color-primary)}.site-header__nav-item:hover .site-header__chevron{color:var(--color-primary);transform:rotate(180deg)}.site-header:has(.site-header__nav-item--mega:hover){background:var(--color-white);-webkit-backdrop-filter:none;color:var(--color-text);box-shadow:none}.site-header:has(.site-header__nav-item--mega:hover) .site-header__main{border-top-color:#2e353a1a}.site-header:has(.site-header__nav-item--mega:hover) .header-logo .header-logo__img--default{display:none}.site-header:has(.site-header__nav-item--mega:hover) .header-logo .header-logo__img--dark{display:block}@media (width<=1600px){.nav-mega__inner--solution{padding:56px 50px}.nav-mega__cols--solution{gap:32px 24px}}@media (width<=1439px){.site-header__top,.site-header__nav,.site-header__search,.site-header__cta{display:none}.site-header__main{height:var(--header-m-h);padding:var(--header-m-py) var(--p-x);border-top:none;justify-content:space-between;align-items:center;gap:16px;display:flex}.site-header .header-logo img{width:180px;height:auto}.site-header__extras{align-items:center;gap:8px;display:flex}.nav-mega{display:none!important}}@media (width<=576px){.site-header .header-logo img{width:148px}}section[id]{scroll-margin-top:var(--header-h)}.site-footer{background-color:#afb5b91a;width:100%;padding-top:6.875rem;position:relative;overflow:hidden}.site-footer:before{content:"";z-index:0;filter:blur(1.25rem);pointer-events:none;background:url(../images/footer-bg-DIAbg8Ab.png) bottom/contain no-repeat;width:100%;height:12.1875rem;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.site-footer__inner{z-index:1;position:relative}.site-footer__main{justify-content:space-between;gap:20rem;padding-bottom:4rem;display:flex}.site-footer__brand{flex-shrink:0;width:17.5rem}.site-footer__logo{margin-bottom:1.5rem;display:block}.site-footer__logo img{width:auto;height:1.625rem;display:block}.site-footer__stock{color:var(--color-text);font-family:MiSans VF,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);border-bottom:1px solid #2e353a1a;margin-bottom:1.5rem;padding:.5rem 0}.site-footer__quote{color:var(--color-primary);align-items:baseline;gap:.5rem;margin-bottom:2.5rem;display:flex}.site-footer__quote-price{font-family:D-DIN-PRO,Aldrich,sans-serif;font-size:var(--font-36);font-weight:500;line-height:1}.site-footer__quote-unit{font-family:PingFang SC,MiSans VF,sans-serif;font-size:var(--font-18);font-weight:400;line-height:1}.site-footer__quote-change{font-family:D-DIN-PRO,Aldrich,sans-serif;font-size:var(--font-18);font-weight:500;line-height:1}.site-footer__follow{color:var(--color-text);font-family:MiSans VF,sans-serif;font-size:var(--font-18);font-weight:500;line-height:var(--font-24);margin-bottom:1.25rem}.site-footer__qrs{gap:1.25rem;display:flex}.site-footer__qr{flex-direction:column;align-items:center;gap:1rem;display:flex}.site-footer__qr img{object-fit:contain;width:7.5rem;height:7.5rem}.site-footer__qr span{color:var(--color-text-muted);font-family:MiSans VF,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);text-align:center}.site-footer__cols{flex:1;justify-content:space-between;gap:1.5rem;display:flex}.site-footer__col{min-width:0}.site-footer__colTitle{color:var(--color-text);font-family:MiSans VF,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-27);margin-bottom:1.25rem}.site-footer__links a{color:var(--color-text-muted);font-family:MiSans VF,sans-serif;font-size:var(--font-16);font-weight:300;line-height:var(--font-30);transition:color var(--duration-fast) var(--easing);margin-bottom:.5rem;display:block}.site-footer__links a:hover{color:var(--color-primary)}.site-footer__bottom{border-top:1px solid #2e353a1a;justify-content:space-between;align-items:center;padding:1.75rem 0;display:flex}.site-footer__copyright{color:var(--color-text-muted);font-family:MiSans VF,sans-serif;font-size:var(--font-16);font-weight:300;line-height:var(--font-21);gap:.25rem;display:flex}.site-footer__gongan{width:1.125rem;height:1.125rem;display:inline-block}.site-footer__legal{flex-shrink:0;align-items:center;gap:1.5rem;display:flex}.site-footer__legal a{color:var(--color-text-muted);font-family:MiSans VF,sans-serif;font-size:var(--font-16);font-weight:300;line-height:var(--font-21);transition:color var(--duration-fast) var(--easing)}.site-footer__legal a:hover{color:var(--color-primary)}@media (width<=1439px){.site-footer{padding-top:72px}.site-footer__main{flex-direction:column;gap:48px}.site-footer__cols{flex-wrap:wrap;justify-content:flex-start;gap:32px 48px}.site-footer__col{min-width:128px}}@media (width<=576px){.site-footer{padding-top:48px}.site-footer:before{width:80%;height:80px}.site-footer__logo img{height:1.5rem}.site-footer__main{gap:32px;padding-bottom:40px}.site-footer__brand{width:100%}.site-footer__cols{gap:24px 20px;display:none}.site-footer__col{flex:calc(50% - 20px);min-width:0}.site-footer__bottom{flex-direction:column;align-items:flex-start;gap:16px;padding:24px 0}.site-footer__copyright{flex-wrap:wrap}.site-footer__legal{flex-wrap:wrap;gap:16px}}.mask{z-index:101;opacity:0;visibility:hidden;pointer-events:none;width:100vw;height:100vh;transition:opacity var(--duration-normal) var(--easing), visibility var(--duration-normal) var(--easing);background:#fff;flex-direction:column;display:flex;position:fixed;top:0;left:0}.mask.show{opacity:1;visibility:visible;pointer-events:auto}.mask-header{height:var(--header-m-h);padding:var(--header-m-py) var(--p-x);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.mask-header__logo img{width:148px;height:auto}.mask-header__brand{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);color:var(--color-text);font-weight:600;line-height:1.2}.mask-header__actions{align-items:center;gap:.5rem;display:flex}.mask-header__icon-btn{width:var(--header-m-btn);height:var(--header-m-btn);color:var(--color-text);cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;padding:0;display:flex}.mask-header__icon-btn:hover{color:var(--color-primary)}.mask-header__icon-btn.lang svg,.mask-header__icon-btn.search svg{fill:currentColor;width:1.125rem;height:1.125rem}.mask-header__icon-btn.close svg{width:var(--header-m-btn-svg);height:var(--header-m-btn-svg);fill:currentColor}.mask-content{-webkit-overflow-scrolling:touch;flex:1;padding:1rem;overflow-y:auto}.mask-nav__list{margin:0;padding:0;list-style:none}.mask-nav__item{border-bottom:1px solid #dfe0e2}.mask-nav__link{width:100%;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-21);color:var(--color-text);cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:none;justify-content:space-between;align-items:center;padding:1rem 0;text-decoration:none;display:flex}.mask-nav__link:hover{color:var(--color-primary)}.mask-nav__icon{width:1rem;height:1rem;transition:transform var(--duration-normal) var(--easing);flex-shrink:0}.mask-nav__item--expandable[data-expanded=true] .mask-nav__icon{transform:rotate(45deg)}.mask-nav__sublist-wrapper{grid-template-rows:0fr;transition:grid-template-rows .3s ease-out;display:grid}.mask-nav__sublist{min-height:0;overflow:hidden}.mask-nav__item[data-expanded=true] .mask-nav__sublist-wrapper{grid-template-rows:1fr}.mask-nav__subitem{border-bottom:1px solid #dfe0e2}.mask-nav__subitem:last-child{border-bottom:none}.mask-nav__sublink{font-family:MiSans VF,PingFang SC,sans-serif;font-size:14px;font-weight:400;line-height:var(--font-18);color:var(--color-text-muted);transition:color var(--duration-fast) var(--easing);justify-content:space-between;align-items:center;padding:16px 0;text-decoration:none;display:flex}.mask-nav__sublink:hover{color:var(--color-primary)}.mask-nav__arrow{flex-shrink:0;width:1rem;height:1rem}.nav-toggle-icon__bar{transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .25s}.nav-toggle-icon__bar--top{transform-origin:12px 7px}.nav-toggle-icon__bar--mid{transform-origin:12px 12px}.nav-toggle-icon__bar--bot{transform-origin:12px 17px}body.is-mask-open .nav-toggle-icon__bar--top{transform:translateY(5px)rotate(45deg)}body.is-mask-open .nav-toggle-icon__bar--mid{transform:scaleX(0)}body.is-mask-open .nav-toggle-icon__bar--bot{transform:translateY(-5px)rotate(-45deg)}.mask.mask--nav-motion .mask-nav a{transition:none} diff --git a/public/themes/dist_static/static/css/common.css b/public/themes/dist_static/static/css/common.css new file mode 100644 index 0000000..34b01ad --- /dev/null +++ b/public/themes/dist_static/static/css/common.css @@ -0,0 +1,2006 @@ +@charset "UTF-8";:root { + --p-x:9.0625rem; + --color-white: #ffffff; + --color-text: #2e353a; + --color-text-muted: rgba(102, 102, 102, 1); + --color-text-link: #AFB5B9; + --color-text-light: rgba(102, 102, 102, 1); + /* 主题红 */ + --color-primary: #ef4335; + --color-primary-hover: #d93b2e; + /* 兼容旧组件变量名 */ + --color-orange: var(--color-primary); + --color-orange-hover: var(--color-primary-hover); + --color-orange-10: rgba(239, 67, 53, 0.08); + --color-bg-module: #f7f8fe; + --color-footer-bg: #2e353a; + --color-blue-80: var(--color-text); + --color-blue-30: rgba(46, 53, 58, 0.1); + --color-secondary-hover: var(--color-primary-hover); + --color-gold: var(--color-primary); + --header-m-h: 4rem; + --header-m-py: 0.75rem; + --header-m-btn: 1.5rem; + --header-m-btn-svg: 1.5rem; + /* 头部高度 */ + --header-h: 5.5rem; + /* 头部顶部高度 */ + --header-t-h: 2.75rem; + + /* 过渡动画时长 */ + --duration-fast: 0.25s; /* 颜色/背景/边框 */ + --duration-normal: 0.3s; /* 变换/位移/透明度/展开收起 */ + --duration-slow: 0.4s; /* 轮播/大幅位移 */ + --easing: ease; /* 缓动函数 */ +}/* max-width 从大到小写 *//* 1680–1919:比 1920 稿略窄,边距收到 100 */@media (max-width: 1919px) { + :root { + --p-x: 100Px; + } +}/* 1440–1679:PC 最小档,边距 80 */@media (max-width: 1679px) { + :root { + --p-x: 80Px; + } +}/* 平板 / 低于 PC 最小宽度 1440 */@media (max-width: 1439px) { + :root { + --p-x: 40Px; + --header-h: var(--header-m-h); + } +}/* <= 576px 手机 */@media (max-width: 576px) { + :root { + --p-x: 20Px; + } +}:root { + --font-12: 1rem; + --font-13: 1rem; + --font-14: 1rem; + --font-15: 1rem; + --font-16: 1rem; + --font-17: 1.0625rem; + --font-18: 1.125rem; + --font-19: 1.1875rem; + --font-20: 1.25rem; + --font-21: 1.3125rem; + --font-22: 1.375rem; + --font-23: 1.4375rem; + --font-24: 1.5rem; + --font-25: 1.5625rem; + --font-26: 1.625rem; + --font-27: 1.6875rem; + --font-28: 1.75rem; + --font-29: 1.8125rem; + --font-30: 1.875rem; + --font-31: 1.9375rem; + --font-32: 2rem; + --font-33: 2.0625rem; + --font-34: 2.125rem; + --font-35: 2.1875rem; + --font-36: 2.25rem; + --font-37: 2.3125rem; + --font-38: 2.375rem; + --font-39: 2.4375rem; + --font-40: 2.5rem; + --font-41: 2.5625rem; + --font-42: 2.625rem; + --font-43: 2.6875rem; + --font-44: 2.75rem; + --font-45: 2.8125rem; + --font-46: 2.875rem; + --font-47: 2.9375rem; + --font-48: 3rem; + --font-49: 3.0625rem; + --font-50: 3.125rem; + --font-51: 3.1875rem; + --font-52: 3.25rem; + --font-53: 3.3125rem; + --font-54: 3.375rem; + --font-55: 3.4375rem; + --font-56: 3.5rem; + --font-57: 3.5625rem; + --font-58: 3.625rem; + --font-59: 3.6875rem; + --font-60: 3.75rem; + --font-61: 3.8125rem; + --font-62: 3.875rem; + --font-63: 3.9375rem; + --font-64: 4rem; + --font-65: 4.0625rem; + --font-66: 4.125rem; + --font-67: 4.1875rem; + --font-68: 4.25rem; + --font-69: 4.3125rem; + --font-70: 4.375rem; + --font-71: 4.4375rem; + --font-72: 4.5rem; + --font-73: 4.5625rem; + --font-74: 4.625rem; + --font-75: 4.6875rem; + --font-76: 4.75rem; + --font-77: 4.8125rem; + --font-78: 4.875rem; + --font-79: 4.9375rem; + --font-80: 5rem; +}/* 手机: + 14及以下==> 12px + 16及以下==> 14px + 20及以下==> 16Px + 24及以下==> 18px + 28及以下==> 20px + 32及以下==> 22px + 36及以下==> 24px + 40及以下==> 26px + 44及以下==> 28px + 48及以下==> 30px + 52及以下==> 32px + 56及以下==> 34px + 60及以下==> 36px + 64及以下==> 38px + 68及以下==> 40px + 72及以下==> 42px + 76及以下==> 44px + 80及以下==> 46px + */@media (max-width: 576px) { + :root { + /* 12px */ + --font-10: 14Px; + --font-11: 14Px; + --font-12: 14Px; + --font-13: 14Px; + --font-14: 14Px; + /* 14px */ + --font-15: 14Px; + --font-16: 14Px; + /* 16Px */ + --font-17: 16Px; + --font-18: 16Px; + --font-19: 16Px; + --font-20: 16Px; + /* 18px */ + --font-21: 18Px; + --font-22: 18Px; + --font-23: 18Px; + --font-24: 18Px; + /* 20px */ + --font-25: 20Px; + --font-26: 20Px; + --font-27: 20Px; + --font-28: 20Px; + /* 22px */ + --font-29: 22Px; + --font-30: 22Px; + --font-31: 22Px; + --font-32: 22Px; + /* 24px */ + --font-33: 24Px; + --font-34: 24Px; + --font-35: 24Px; + --font-36: 24Px; + /* 26px */ + --font-37: 26Px; + --font-38: 26Px; + --font-39: 26Px; + --font-40: 26Px; + /* 28px */ + --font-41: 26Px; + --font-42: 26Px; + --font-43: 28Px; + --font-44: 28Px; + /* 30px */ + --font-45: 30Px; + --font-46: 30Px; + --font-47: 30Px; + --font-48: 30Px; + /* 32px */ + --font-49: 32Px; + --font-50: 32Px; + --font-51: 32Px; + --font-52: 32Px; + /* 34px */ + --font-53: 34Px; + --font-54: 34Px; + --font-55: 34Px; + --font-56: 34Px; + /* 36px */ + --font-57: 36Px; + --font-58: 36Px; + --font-59: 36Px; + --font-60: 36Px; + /* 38px */ + --font-61: 38Px; + --font-62: 38Px; + --font-63: 38Px; + --font-64: 38Px; + /* 40px */ + --font-65: 40Px; + --font-66: 40Px; + --font-67: 40Px; + --font-68: 40Px; + /* 42px */ + --font-69: 42Px; + --font-70: 42Px; + --font-71: 42Px; + --font-72: 42Px; + /* 44px */ + --font-73: 44Px; + --font-74: 44Px; + --font-75: 44Px; + --font-76: 44Px; + /* 46px */ + --font-77: 46Px; + --font-78: 46Px; + --font-79: 46Px; + --font-80: 46Px; + } + }@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-400-Regular-CbJSDVu2.otf') format("opentype"); + font-weight: 400; + font-display: swap; +}@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-500-Medium-DPN-gY68.otf') format("opentype"); + font-weight: 500; + font-display: swap; +}@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-600-SemiBold-DXnDJEQd.otf') format("opentype"); + font-weight: 600; + font-display: swap; +}@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-700-Bold-WWlV1fXR.otf') format("opentype"); + font-weight: 700; + font-display: swap; +}@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-800-ExtraBold-Dzo8XGHI.otf') format("opentype"); + font-weight: 800; + font-display: swap; +}@font-face { + font-family: 'D-DIN-PRO'; + src: url('../fonts/D-DIN-PRO-900-Heavy-CcGOV6O3.otf') format("opentype"); + font-weight: 900; + font-display: swap; +}@font-face { + font-family: "PingFang SC"; + src: url("../fonts/PFDinTextPro-Medium-BcfGjLHx.ttf") format("truetype"); + font-weight: 400; + font-display: swap; +}@font-face { + font-family: "PingFang SC"; + src: url("../fonts/PFDinTextPro-Medium-BcfGjLHx.ttf") format("truetype"); + font-weight: 500; + font-display: swap; +}@font-face { + font-family: "PingFang SC"; + src: url("../fonts/PFDinTextPro-Bold-F7OVdohK.ttf") format("truetype"); + font-weight: 600; + font-display: swap; +}@font-face { + font-family: "PingFang SC"; + src: url("../fonts/PFDinTextPro-Bold-F7OVdohK.ttf") format("truetype"); + font-weight: 700; + font-display: swap; +}/* @font-face { + font-family: "MiSans VF"; + src: url("../assets/fonts/MiSans-VF.woff2") format("truetype"); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} */@font-face { + font-family: "MiSans VF"; + src: url("../fonts/MiSans-VF-DESbBZLB.ttf") format("truetype"); + font-weight: 100 900; + font-style: normal; + font-display: swap; +}@font-face { + font-family: "Aldrich"; + src: url("../fonts/Aldrich-Regular-CZNgUhqU.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +}* { + margin: 0; + padding: 0; + box-sizing: border-box; +}html, +body { + width: 100%; + height: 100%; +}html { + font-size: 16Px; +}body { + overflow-x: hidden; + font-family: "MiSans VF", "PingFang SC", sans-serif; + color: var(--color-text); +}button{ + border: none; + outline: none; + background: none; + cursor: pointer; +}a { + text-decoration: none; +}i{ + font-style: normal; +}ul,p,h1,h2,h3,h4,h5,h6{ + margin: 0; + padding: 0; +}li { + list-style: none; +}/* 双层渐变边框不变;--btn-fill + @property 使填充色可 transition */@property --btn-fill { + syntax: ""; + inherits: false; + initial-value: rgba(234, 85, 32, 1); +}.arrow-right { + width: 0.9375rem; + height: 0.75rem; +}.s-btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 12.5rem; + min-height: 3.75rem; + gap: 1.875rem; + border-radius: 0.5rem; + color: var(--color-white); + font-family: "OPPO Sans 4.0"; + font-style: Regular; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + text-transform: capitalize; + border: 1px solid transparent; + white-space: nowrap; + user-select: none; + transition: + color var(--duration-normal) var(--easing), + opacity var(--duration-normal) var(--easing), + transform var(--duration-normal) var(--easing), + box-shadow var(--duration-normal) var(--easing); + + &.large { + width: 12.875rem; + height: 3.5rem; + border-radius: 1.25rem; + padding: 0; + } + &.disabled { + background: #cdcdcd; + cursor: not-allowed; + } +}.s-btn__actions { + display: flex; + align-items: center; + gap: 1rem; +}/* 渐变边框+hover背景变色 */.s-btn--primary { + background:var(--color-primary); +}.s-btn--primary:hover { + opacity: 0.9; +}.s-btn--secondary { + background-color:var(--color-blue-30); +}.s-btn--outline { + background: transparent; + border: 1px solid var(--color-white); + color: var(--color-white); + transition: + color var(--duration-normal) var(--easing), + background var(--duration-normal) var(--easing), + border-color var(--duration-normal) var(--easing); +}.s-btn--outline:hover { + background: var(--color-white); + color: var(--color-orange); +}/* 白底红字,深色背景上使用 */.s-btn--light { + background: var(--color-white); + color: var(--color-primary); +}.s-btn--light:hover { + opacity: 0.9; +}.s-btn--pill { + border-radius: 1.875rem; + min-height: 3.5rem; + height: 3.5rem; +}/* 按钮箭头 */.s-btn svg { + width: 13Px; + height: 10Px; +}/* 按钮小圆点 */.s-btn .btn__dot { + width: 0.5rem; + height: 0.5rem; + border-radius: 50%; + background: var(--color-white); +}/* 下划线 start */.hover_underline::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: -0.375rem; + width: 100%; + height: 0.125rem; + background: var(--color-orange); + /* 用 3D 缩放固定 Y=1,避免收起时抗锯齿看起来“变细” */ + transform: scale3d(0, 1, 1); + transform-origin: center; + will-change: transform; + transition: transform var(--duration-normal) var(--easing); +}.hover_underline.is-active::after { + transform: scale3d(1, 1, 1); +}.hover_underline:hover::after { + transform: scale3d(1, 1, 1); +}/* 下划线 end *//* 文字跑马灯 */.marquee { + width: 100%; + overflow: hidden; + white-space: nowrap; + + .track { + display: inline-block; + white-space: nowrap; + animation: scroll 20s linear infinite; + } + + .track span { + margin-right: 3.125rem; + } +}@keyframes scroll { + 0% { + transform: translateX(0); + } + + 100% { + transform: translateX(-50%); + } +}/* 文字跑马灯 *//* 毛玻璃卡片 */.glass-card { + --c-glass: rgba(196, 196, 196, 0.2); + --c-light: #fff; + --saturation: 100%; + --left: 0.125rem; + --right: -0.1125rem; + border: none; + background-color: color-mix(in srgb, var(--c-glass) 20%, transparent); + backdrop-filter: blur(0.3125rem) saturate(var(--saturation)); + box-shadow: + inset 0 0 0 0.125rem color-mix(in srgb, var(--c-light) 10%, transparent), + inset var(--left) var(--left) 0.125rem -0.125rem color-mix(in srgb, var(--c-light) 90%, transparent), + inset var(--right) var(--right) 0.125rem -0.125rem color-mix(in srgb, var(--c-light) 80%, transparent); +}.glass-card2 { + display: block; + background: linear-gradient(135deg, + rgba(230, 230, 230, 1) 0%, + rgba(246, 246, 246, 1) 100%); + box-shadow: + -0.25rem -0.25rem 0.625rem -0.5rem rgba(255, 255, 255, 1), + 0.25rem 0.25rem 0.625rem -0.5rem rgba(0, 0, 0, 0.3); +}/* slide-btn */.slide-btn { + width: 3rem; + height: 3rem; + border: none; + cursor: pointer; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } +}.slide-btn:hover img { + filter: invert(1); +}/* 所有的内页的公共样式 */.section__wrap { + padding-left: var(--p-x); + padding-right: var(--p-x); +}/* 内页搜索框(下载中心样式) */.s-search { + display: flex; + align-items: center; + gap: 0.75rem; + flex-shrink: 0; + width: min(30rem, 100%); + min-height: 3.5rem; + padding: 0.5rem 0.5rem 0.5rem 1.25rem; + border-radius: 6.25rem; + border: 1px solid rgba(223, 224, 226, 1); + background: transparent; +}.s-search__icon { + display: block; + width: 1.5rem; + height: 1.5rem; + flex-shrink: 0; +}.s-search__input { + flex: 1; + min-width: 0; + height: 2.5rem; + padding: 0; + border: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + outline: none; +}.s-search__input::placeholder { + color: rgba(175, 181, 185, 1); +}.s-search__btn { + flex-shrink: 0; + min-width: 4.5rem; + height: 2.5rem; + padding: 0 1.25rem; + border: 0; + border-radius: 3.125rem; + background: var(--color-primary); + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: 1; + cursor: pointer; + transition: background var(--duration-fast) var(--easing); +}.s-search__btn:hover { + background: var(--color-primary-hover); +}/* 轮播左右箭头(产品相关 / 发展历程等) */.s-arrows { + display: flex; + align-items: center; + gap: 1rem; +}.s-arrows__prev, +.s-arrows__next { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3.5rem; + height: 3.5rem; + padding: 0; + border: 1px solid rgba(223, 224, 226, 1); + border-radius: 0.75rem; + background: var(--color-white); + color: rgba(175, 181, 185, 1); + cursor: pointer; + transition: + color var(--duration-fast) var(--easing), + border-color var(--duration-fast) var(--easing), + opacity var(--duration-fast) var(--easing); +}.s-arrows__prev svg, +.s-arrows__next svg { + width: 1rem; + height: 0.875rem; + display: block; +}.s-arrows__prev path, +.s-arrows__next path { + fill: currentColor; +}.s-arrows__prev:hover, +.s-arrows__next:hover { + color: var(--color-primary); + border-color: var(--color-primary); +}.s-arrows__prev.swiper-button-disabled, +.s-arrows__next.swiper-button-disabled { + opacity: 0.35; + cursor: not-allowed; +}.s-arrows__prev { + transform: scaleX(-1); +}.s-arrows__next { + color: var(--color-primary); + border-color: var(--color-primary); +}@media (max-width: 1439px) { + .s-search { + width: min(360Px, 100%); + } +}@media (max-width: 992px) { + .s-search { + width: 100%; + } +}@media (max-width: 576px) { + .s-search { + min-height: 44Px; + padding: 4Px 4Px 4Px 14Px; + } + + .s-search__input { + font-size: 14Px; + } + + .s-search__btn { + min-width: 64Px; + height: 36Px; + padding: 0 16Px; + font-size: 14Px; + } + + .s-arrows__prev, + .s-arrows__next { + width: 3rem; + height: 3rem; + } + + br { + display: none; + } +}.section-inner { + width: 100%; + margin: 0 auto; +}.section__banner { + height: 100vh; + display: flex; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + position: relative; + + + .section__banner__inner { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + } + + .section__banner__header { + display: flex; + flex-direction: column; + margin-bottom: 3.125rem; + } + + /* banner 标题 */ + .section__banner__title { + color: var(--color-white); + font-family: "Douyin Sans"; + font-style: Bold; + font-size: var(--font-56); + font-weight: 700; + line-height: var(--font-66); + letter-spacing: 0rem; + margin-bottom: 1rem; + } + + .section__banner__sub { + color: var(--color-white); + font-family: "Douyin Sans"; + font-style: Medium; + font-size: var(--font-36); + font-weight: 500; + line-height: var(--font-43); + letter-spacing: 0rem; + } +}.section__banner__desc { + color: rgba(255, 255, 255, 1); + font-family: "OPPO Sans 4.0"; + font-style: Medium; + font-size: var(--font-24); + font-weight: 500; + line-height: var(--font-36); + letter-spacing: 0px; + text-align: left; + text-transform: uppercase; +}/* banner 标题2 */.banner__header2 { + margin-bottom: 3.125rem; +}.banner__title2 { + color: var(--color-white); + font-family: "Douyin Sans"; + font-style: Bold; + font-size: var(--font-64); + font-weight: 700; + line-height: var(--font-77); + letter-spacing: 0px; + text-align: left; + margin-bottom: 0.875rem; +}.banner__sub2 { + color: var(--color-white); + font-family: "D-DIN-PRO"; + font-style: Medium; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-24); + letter-spacing: 0px; + text-align: left; +}.section__header { + display: flex; + flex-direction: column; + margin-bottom: 3.125rem; + align-items: center; +}/* 模块眉题 / 主标题 / 描述 */.section__eyebrow { + margin-bottom: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +}.section__title { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); + text-align: left; + text-transform: none; +}.section__title--hero { + margin-bottom: 1.125rem; + font-size: var(--font-60); + font-weight: 500; + line-height: var(--font-80); +}.section__title__sub { + color: #333; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-24); + letter-spacing: 0px; + text-align: center; + text-transform: uppercase; +}.section__desc { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +}/* 左图右文,间距100 */.section__img_text { + padding: 8.125rem 16.25rem 6.25rem; + + .section__inner { + display: flex; + align-items: center; + gap: 6.25rem; + + .section__left { + width: 50%; + height: 31.25rem; + border-radius: 2.5rem; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .section__right { + flex: 1; + + .section__desc:last-child { + margin-bottom: 0; + } + } + } +}/* 时间轴组件 tab切换*/.timeline__tabs { + display: flex; + align-items: center; + gap: 0; + + .timeline__tab { + flex: 1; + display: flex; + flex-direction: column; + user-select: none; + cursor: pointer; + flex-shrink: 0; + + &.active { + .dot { + background-color: var(--color-primary); + } + } + } + + .line-dot { + width: 100%; + display: flex; + align-items: center; + margin-top: 1rem; + + &::after, + &::before { + content: ""; + display: block; + flex: 1; + height: 0.0625rem; + background-color: #b5b5b5; + } + + .dot { + width: 1.25rem; + height: 1.25rem; + border-radius: 50%; + border: 0.25rem solid #f4f3f3; + background-color: #b5b5b5; + } + } +}/* 产品卡片:图 + 标题 + 箭头(分类 / 相关产品 / 解决方案等) */.s-product-card { + min-width: 0; + height: auto; +}.s-product-card__link { + display: flex; + flex-direction: column; + gap: 1.5rem; + height: 100%; + padding: 2.5rem; + border-radius: 1.25rem; + background: rgba(175, 181, 185, 0.15); + text-decoration: none; + color: inherit; + transition: background var(--duration-normal) var(--easing); +}.s-product-card__link:hover { + background: rgba(175, 181, 185, 0.22); +}.s-product-card__media { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + aspect-ratio: 1; + overflow: hidden; +}.s-product-card__media img { + display: block; + width: auto; + max-width: 100%; + max-height: 100%; + object-fit: contain; + transition: transform var(--duration-normal) var(--easing); +}.s-product-card__link:hover .s-product-card__media img { + transform: scale(1.1); +}.s-product-card__foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + padding-top: 1.5rem; + border-top: 1px solid rgba(46, 53, 58, 0.1); + transition: border-color var(--duration-fast) var(--easing); +}.s-product-card__link:hover .s-product-card__foot { + border-top-color: var(--color-primary); +}.s-product-card__name { + margin: 0; + flex: 1; + min-width: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-27); + transition: color var(--duration-fast) var(--easing); +}.s-product-card__link:hover .s-product-card__name { + color: var(--color-primary); +}.s-product-card__arrow { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + flex-shrink: 0; + border-radius: 50%; + color: var(--color-text-muted); + transition: color var(--duration-fast) var(--easing); +}.s-product-card__link:hover .s-product-card__arrow { + color: var(--color-primary); +}.s-product-card__arrow img, +.s-product-card__arrow svg { + display: block; + width: 0.75rem; + height: auto; +}.s-product-card__arrow path { + fill: currentColor; +}@media (max-width: 1439px) { + .s-product-card__link { + padding: 28Px; + border-radius: 16Px; + } + + .s-product-card__foot { + padding-top: 20Px; + } + + .s-product-card__name { + font-size: 18Px; + line-height: 24Px; + } +}/* card卡片 img+title+desc*/.s-card { + border-radius: 1.5rem; + background: var(--color-white); + padding: 1.25rem; + overflow: hidden; + padding-bottom: 2.1875rem; + + .s-card__img { + border-radius: 1rem; + width: 100%; + height: 12.875rem; + margin-bottom: 1.125rem; + } + + .s-card__title { + color: rgba(0, 0, 0, 1); + font-family: "OPPO Sans 4.0"; + font-style: Medium; + font-size: var(--font-22); + font-weight: 500; + line-height: var(--font-26); + letter-spacing: 0rem; + text-align: justify; + margin-bottom: 1.125rem; + + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + text-overflow: ellipsis; + } + + .s-card__sub-title { + color: rgba(131, 131, 131, 1); + font-family: "OPPO Sans 4.0"; + font-style: Light; + font-size: var(--font-16); + font-weight: 300; + line-height: var(--font-18); + letter-spacing: 0rem; + text-align: justify; + margin-bottom: 1.25rem; + } + + .s-card__desc { + color: rgba(102, 102, 102, 1); + font-family: "OPPO Sans 4.0"; + font-style: Regular; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-26); + letter-spacing: 0rem; + text-align: justify; + + min-height: calc(var(--font-26) * 3); + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: hidden; + text-overflow: ellipsis; + } +}@media (max-width: 1439px) { + .section__title { + font-size: 36Px; + line-height: 48Px; + } + + .section__title--hero { + font-size: 40Px; + line-height: 52Px; + } +}@media (max-width: 576px) { + .section__header { + .section__title { + font-size: 28Px; + line-height: 34Px; + } + + .section__title__sub { + font-size: 16Px; + line-height: 24Px; + } + } + + .section__eyebrow { + font-size: 16Px; + line-height: 22Px; + } + + .section__title { + font-size: 28Px; + line-height: 38Px; + } + + .section__title--hero { + margin-bottom: 12Px; + font-size: 32Px; + line-height: 42Px; + } + + .section__desc { + max-width: 100%; + font-size: 16Px; + line-height: 24Px; + + &:last-child { + margin-bottom: 0; + } + } + + .s-btn { + min-width: 160Px; + min-height: 48Px; + } + + .section__banner { + height: 50vh; + .section__banner__title { + font-size: 32Px; + line-height: 40Px; + margin-bottom: 16Px; + } + + .section__banner__sub, .section__banner__desc { + font-size: 16Px; + line-height: 24Px; + } + } +}.pc-none{ + display: none!important; +}@media (max-width: 1439px) { + .pc-none{ + display: flex!important; + } + .m-none{ + display: none; + } +}.site-header { + width: 100%; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 100; + display: flex; + flex-direction: column; + overflow: visible; + color: var(--color-white); + background: transparent; + transition: background-color var(--duration-normal) var(--easing), color var(--duration-fast) var(--easing), box-shadow var(--duration-normal) var(--easing), backdrop-filter var(--duration-normal) var(--easing), transform var(--duration-normal) var(--easing); +}.site-header__top { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 2.5rem; + height: var(--header-t-h); + max-height: var(--header-t-h); + padding: 0 3.125rem; + overflow: hidden; + position: relative; + z-index: 2; + transition: max-height var(--duration-normal) var(--easing), height var(--duration-normal) var(--easing), padding var(--duration-normal) var(--easing), opacity var(--duration-fast) var(--easing); +}.site-header__main { + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + gap: 1.5rem; + height: var(--header-h); + padding: 0 3.125rem; + border-top: 1px solid rgba(255, 255, 255, 0.1); + position: relative; + z-index: 2; +}.site-header .header-logo { + justify-self: start; + flex-shrink: 0; + color: inherit; + text-decoration: none; +}.site-header .header-logo img { + display: block; + width: 15.75rem; + height: 1.625rem; +}.site-header .header-logo .header-logo__img--dark { + display: none; +}.site-header__nav { + justify-self: center; + height: 100%; +}.site-header__nav > ul { + display: flex; + align-items: center; + height: 100%; + gap: 2rem; + margin: 0; + padding: 0; + list-style: none; +}.site-header__nav > ul li { + height: 100%; +}.site-header__nav > ul > li > a { + display: inline-flex; + align-items: center; + height: 100%; + gap: 0.375rem; + color: inherit; + font-family: "PingFang SC", "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-22); + white-space: nowrap; +}.site-header__extras { + display: none; +}.site-header__extra-btn { + display: flex; + align-items: center; + justify-content: center; + width: var(--header-m-btn); + height: var(--header-m-btn); + padding: 0; + border: none; + background: transparent; + color: inherit; + cursor: pointer; +}.site-header__extra-btn svg { + width: var(--header-m-btn-svg); + height: var(--header-m-btn-svg); + fill: currentColor; +}.site-header__extra-btn.lang svg, .site-header__extra-btn.search svg { + width: 1.125rem; + height: 1.125rem; + fill: currentColor; +}.site-header__actions { + justify-self: end; + display: flex; + align-items: center; + gap: 0.625rem; + min-width: 0; +}.site-header__icon { + display: flex; + flex-shrink: 0; + color: inherit; +}.site-header__icon svg { + display: block; + width: 1rem; + height: 1rem; +}.site-header__icon--24 svg { + width: 1.5rem; + height: 1.5rem; +}.site-header__chevron { + display: flex; + width: 0.75rem; + height: 0.375rem; + flex-shrink: 0; + color: inherit; + transition: transform var(--duration-fast) var(--easing); +}.site-header__chevron svg { + display: block; + width: 100%; + height: 100%; +}.site-header__phone { + display: flex; + align-items: center; + gap: 0.5rem; + color: inherit; + text-decoration: none; + white-space: nowrap; + font-family: "D-DIN-PRO", "Aldrich", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-16); +}.site-header__socials { + display: flex; + align-items: center; + gap: 1.25rem; +}.site-header__social { + display: flex; + width: 1rem; + height: 1rem; + flex-shrink: 0; + color: inherit; +}.site-header__lang { + display: flex; + align-items: center; + gap: 0.375rem; + padding: 0; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: "D-DIN-PRO", "Aldrich", sans-serif; + font-size: var(--font-15); + font-weight: 400; + line-height: 1; + white-space: nowrap; +}.site-header__lang-active { + color: rgb(175, 181, 185); +}.site-header__search { + display: flex; + align-items: center; + width: 13.6875rem; + height: 2.5rem; + padding: 0 1rem 0 1.25rem; + border-radius: 1.25rem; + background: #f9f9f9; + flex-shrink: 0; +}.site-header__search-input { + flex: 1; + min-width: 0; + height: 100%; + border: none; + outline: none; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 330; + line-height: var(--font-22); +}.site-header__search-input::placeholder { + color: var(--color-text-muted); +}.site-header__search-btn { + display: flex; + align-items: center; + justify-content: center; + width: 1.5rem; + height: 1.5rem; + padding: 0; + border: none; + background: transparent; + cursor: pointer; + flex-shrink: 0; +}.site-header__search-btn img { + display: block; + width: 1.5rem; + height: 1.5rem; +}.site-header .s-btn.site-header__cta { + min-width: 8.75rem; + width: 8.75rem; + min-height: 2.5rem; + height: 2.5rem; + padding: 0; + border-radius: 1.25rem; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); +}.site-header__btn { + width: 3rem; + height: 3rem; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + border: none; + background: transparent; + color: inherit; + cursor: pointer; +}.site-header__btn svg { + width: var(--header-m-btn-svg); + height: var(--header-m-btn-svg); + fill: currentColor; +}.site-header__btn .nav-toggle-icon__bar { + fill: currentColor; +}.site-header.is-scrolled { + background: rgba(255, 255, 255, 0.16); + backdrop-filter: blur(0.75rem); +}.site-header.is-scrolled .site-header__top { + height: 0; + max-height: 0; + padding-top: 0; + padding-bottom: 0; + opacity: 0; + pointer-events: none; +}.site-header.is-scrolled .site-header__main { + border-top-color: transparent; +}.site-header.dark { + background: rgba(255, 255, 255, 0.92); + color: var(--color-text); +}.site-header.dark .site-header__main { + border-top-color: rgba(46, 53, 58, 0.1); +}.site-header.dark .header-logo .header-logo__img--default { + display: none; +}.site-header.dark .header-logo .header-logo__img--dark { + display: block; +}.site-header.dark.is-scrolled { + background: rgba(255, 255, 255, 0.72); + backdrop-filter: blur(1.25rem); + -webkit-backdrop-filter: blur(1.25rem); +}.site-header.dark.is-scrolled .site-header__main { + border-top-color: transparent; +}.site-header.is-mega-open, .site-header.is-mega-open.is-scrolled, .site-header.dark.is-mega-open, .site-header.dark.is-scrolled.is-mega-open { + background: var(--color-white); + backdrop-filter: none; + -webkit-backdrop-filter: none; + color: var(--color-text); + box-shadow: none; +}.site-header.is-mega-open .site-header__main { + border-top-color: rgba(46, 53, 58, 0.1); +}.site-header.is-mega-open .header-logo .header-logo__img--default { + display: none; +}.site-header.is-mega-open .header-logo .header-logo__img--dark { + display: block; +}.site-header.is-mega-open .site-header__nav-link[aria-expanded=true] { + color: var(--color-primary); +}.site-header.is-mega-open .site-header__nav-link[aria-expanded=true] .site-header__chevron { + transform: rotate(180deg); + color: var(--color-primary); +}.nav-mega { + position: absolute; + left: 0; + right: 0; + top: 100%; + z-index: 2; + display: grid; + grid-template-rows: 0fr; + visibility: hidden; + background: var(--color-white); + border-top: 1px solid rgb(223, 224, 226); + box-shadow: 0 1.5rem 3rem rgba(46, 53, 58, 0.08); + transition: grid-template-rows 0.5s var(--easing); +}.nav-mega__inner { + overflow: hidden; + min-height: 0; +}.nav-mega__dropdown-content.product { + display: grid; + min-height: 45rem; + grid-template-columns: 23.375rem minmax(0, 1fr); + align-items: stretch; + margin: 0 auto; +}.nav-mega__dropdown-content.solution, .nav-mega__dropdown-content.support, .nav-mega__dropdown-content.news, .nav-mega__dropdown-content.invest, .nav-mega__dropdown-content.about { + width: fit-content; + margin: 0 auto; + padding: 2.5rem 0; +}.nav-mega__row { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 5rem; + margin: 0; + padding: 0; + list-style: none; +}.nav-mega__row a { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + text-decoration: none; + white-space: nowrap; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__row a:hover { + color: var(--color-primary); +}.nav-mega__cats { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 5rem; + border-right: 1px solid rgba(46, 53, 58, 0.1); +}.nav-mega__cat { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + width: 100%; + min-height: 3rem; + padding: 0.75rem 0; + border: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + text-align: left; + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__cat.is-active, .nav-mega__cat:hover { + color: var(--color-primary); +}.nav-mega__cat.is-active .nav-mega__cat-arrow, .nav-mega__cat:hover .nav-mega__cat-arrow { + opacity: 1; + color: var(--color-primary); +}.nav-mega__cat-arrow { + display: flex; + width: 0.5rem; + height: 0.75rem; + flex-shrink: 0; + color: rgb(175, 181, 185); + opacity: 0.7; + transition: color 0.2s ease, opacity 0.2s ease; +}.nav-mega__cat-arrow svg { + display: block; + width: 100%; + height: 100%; +}.nav-mega__main { + display: grid; + grid-template-columns: minmax(0, 1fr) 20rem; + gap: 3.5625rem; + padding: 5rem; + padding-right: 3.5625rem; + min-width: 0; +}.nav-mega__panels { + min-width: 0; +}.nav-mega__promo-side { + padding-top: 6.875rem; + flex-shrink: 0; +}.nav-mega__heading { + display: inline-flex; + align-items: center; + gap: 1rem; + margin-bottom: 5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 500; + line-height: var(--font-32); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__heading:hover { + color: var(--color-primary); +}.nav-mega__heading-arrow { + display: flex; + width: 0.625rem; + height: 0.875rem; + color: currentColor; +}.nav-mega__heading-arrow svg { + display: block; + width: 100%; + height: 100%; +}.nav-mega__body { + display: flex; + align-items: flex-start; + gap: 3.5625rem; + min-width: 0; +}.nav-mega__cols { + flex: 1; + min-width: 0; + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 5rem 2rem; +}.nav-mega__cols--solution { + flex: none; + grid-template-columns: repeat(7, max-content); + justify-content: start; + gap: 6.25rem; +}.nav-mega__col { + display: flex; + flex-direction: column; + gap: 2rem; + min-width: 0; +}.nav-mega__group { + display: flex; + flex-direction: column; + gap: 2.125rem; +}.nav-mega__group-title { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-22); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__group-title::after { + content: ""; + display: block; + flex-shrink: 0; + width: 0.5rem; + height: 0.75rem; + background: currentColor; + opacity: 0; + transition: opacity var(--duration-normal) var(--easing); + mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; + -webkit-mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; +}.nav-mega__group-title:hover { + cursor: pointer; + color: var(--color-primary); +}.nav-mega__group-title:hover::after { + opacity: 1; +}.nav-mega__subgroup { + display: flex; + flex-direction: column; + gap: 1rem; +}.nav-mega__subgroup-title { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-22); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__subgroup-title::after { + content: ""; + display: block; + flex-shrink: 0; + width: 0.5rem; + height: 0.75rem; + background: currentColor; + opacity: 0; + transition: opacity var(--duration-normal) var(--easing); + mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; + -webkit-mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; +}.nav-mega__subgroup-title:hover { + color: var(--color-primary); +}.nav-mega__subgroup-title:hover::after { + opacity: 1; +}.nav-mega__links { + display: flex; + flex-direction: column; + gap: 1.5rem; + margin: 0; + padding: 0; + list-style: none; +}.nav-mega__links a { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 300; + line-height: var(--font-22); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +}.nav-mega__links a::after { + content: ""; + display: block; + flex-shrink: 0; + width: 0.5rem; + height: 0.75rem; + background: currentColor; + opacity: 0; + transition: opacity var(--duration-normal) var(--easing); + mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; + -webkit-mask: url("data:image/svg+xml,%3csvg%20viewBox='-1%20-1%208.59082%2013.0605'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20d='M0%204.12464e-05L5%205.00004L10%200'%20stroke='currentColor'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20transform='matrix(0,-1,1,0,0.530273,10.5303)'%20/%3e%3c/svg%3e") center/contain no-repeat; +}.nav-mega__links a:hover { + color: var(--color-primary); +}.nav-mega__links a:hover::after { + opacity: 1; +}.nav-mega__empty { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + line-height: var(--font-24); +}.nav-mega__promo { + display: block; + flex-shrink: 0; + width: 20rem; + max-width: 100%; + text-decoration: none; + color: inherit; +}.nav-mega__promo-media { + overflow: hidden; + border-radius: 1.5rem; + background: rgba(175, 181, 185, 0.2); + aspect-ratio: 320/200; +}.nav-mega__promo-media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +}.nav-mega__promo:hover .nav-mega__promo-media img { + transform: scale(1.04); +}.nav-mega__promo-title { + display: inline-flex; + align-items: center; + gap: 0.5rem; + margin-top: 1.625rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-22); + transition: color var(--duration-fast) var(--easing); +}.nav-mega__promo-arrow { + display: flex; + width: 0.5rem; + height: 0.75rem; + color: currentColor; +}.nav-mega__promo-arrow svg { + display: block; + width: 100%; + height: 100%; +}.nav-mega__promo:hover .nav-mega__promo-title { + color: var(--color-primary); +}.nav-mega__promo-desc { + margin: 0.5rem 0 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-14); + font-weight: 400; + line-height: var(--font-20); +}.site-header__nav-item:hover .nav-mega { + grid-template-rows: 1fr; + visibility: visible; +}.site-header__nav-item:hover .site-header__nav-link { + color: var(--color-primary); +}.site-header__nav-item:hover .site-header__chevron { + transform: rotate(180deg); + color: var(--color-primary); +}.site-header:has(.site-header__nav-item--mega:hover) { + background: var(--color-white); + backdrop-filter: none; + -webkit-backdrop-filter: none; + color: var(--color-text); + box-shadow: none; +}.site-header:has(.site-header__nav-item--mega:hover) .site-header__main { + border-top-color: rgba(46, 53, 58, 0.1); +}.site-header:has(.site-header__nav-item--mega:hover) .header-logo .header-logo__img--default { + display: none; +}.site-header:has(.site-header__nav-item--mega:hover) .header-logo .header-logo__img--dark { + display: block; +}@media (max-width: 1600px) { + .nav-mega__inner--solution { + padding: 56Px 50Px; + } + .nav-mega__cols--solution { + gap: 32Px 24Px; + } +}@media (max-width: 1439px) { + .site-header__top, .site-header__nav, .site-header__search, .site-header__cta { + display: none; + } + .site-header__main { + display: flex; + justify-content: space-between; + align-items: center; + gap: 16Px; + border-top: none; + height: var(--header-m-h); + padding: var(--header-m-py) var(--p-x); + } + .site-header .header-logo img { + width: 180Px; + height: auto; + } + .site-header__extras { + display: flex; + align-items: center; + gap: 8Px; + } + .nav-mega { + display: none !important; + } +}@media (max-width: 576px) { + .site-header .header-logo img { + width: 148Px; + } +}/* 固定头部下锚点定位偏移(滚动后仅保留 main 88px) */section[id] { + scroll-margin-top: var(--header-h); +}.site-footer { + position: relative; + overflow: hidden; + width: 100%; + background-color: rgba(175, 181, 185, 0.1); + padding-top: 6.875rem; +}.site-footer::before { + content: ""; + position: absolute; + left: 50%; + bottom: 0; + z-index: 0; + width: 100%; + height: 12.1875rem; + background: url("../images/footer-bg-DIAbg8Ab.png") no-repeat center bottom/contain; + transform: translateX(-50%); + filter: blur(1.25rem); + pointer-events: none; +}.site-footer__inner { + position: relative; + z-index: 1; +}.site-footer__main { + display: flex; + justify-content: space-between; + gap: 20rem; + padding-bottom: 4rem; +}.site-footer__brand { + flex-shrink: 0; + width: 17.5rem; +}.site-footer__logo { + display: block; + margin-bottom: 1.5rem; +}.site-footer__logo img { + display: block; + width: auto; + height: 1.625rem; +}.site-footer__stock { + margin-bottom: 1.5rem; + color: var(--color-text); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + padding: 0.5rem 0; + border-bottom: 1px solid rgba(46, 53, 58, 0.1); +}.site-footer__quote { + display: flex; + align-items: baseline; + gap: 0.5rem; + margin-bottom: 2.5rem; + color: var(--color-primary); +}.site-footer__quote-price { + font-family: "D-DIN-PRO", "Aldrich", sans-serif; + font-size: var(--font-36); + font-weight: 500; + line-height: 1; +}.site-footer__quote-unit { + font-family: "PingFang SC", "MiSans VF", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: 1; +}.site-footer__quote-change { + font-family: "D-DIN-PRO", "Aldrich", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: 1; +}.site-footer__follow { + margin-bottom: 1.25rem; + color: var(--color-text); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-24); +}.site-footer__qrs { + display: flex; + gap: 1.25rem; +}.site-footer__qr { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; +}.site-footer__qr img { + width: 7.5rem; + height: 7.5rem; + object-fit: contain; +}.site-footer__qr span { + color: var(--color-text-muted); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + text-align: center; +}.site-footer__cols { + display: flex; + flex: 1; + justify-content: space-between; + gap: 1.5rem; +}.site-footer__col { + min-width: 0; +}.site-footer__colTitle { + margin-bottom: 1.25rem; + color: var(--color-text); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-27); +}.site-footer__links a { + display: block; + margin-bottom: 0.5rem; + color: var(--color-text-muted); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 300; + line-height: var(--font-30); + transition: color var(--duration-fast) var(--easing); +}.site-footer__links a:hover { + color: var(--color-primary); +}.site-footer__bottom { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1.75rem 0; + border-top: 1px solid rgba(46, 53, 58, 0.1); +}.site-footer__copyright { + display: flex; + gap: 0.25rem; + color: var(--color-text-muted); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 300; + line-height: var(--font-21); +}.site-footer__gongan { + display: inline-block; + width: 1.125rem; + height: 1.125rem; +}.site-footer__legal { + display: flex; + align-items: center; + flex-shrink: 0; + gap: 1.5rem; +}.site-footer__legal a { + color: var(--color-text-muted); + font-family: "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 300; + line-height: var(--font-21); + transition: color var(--duration-fast) var(--easing); +}.site-footer__legal a:hover { + color: var(--color-primary); +}@media (max-width: 1439px) { + .site-footer { + padding-top: 72Px; + } + .site-footer__main { + flex-direction: column; + gap: 48Px; + } + .site-footer__cols { + flex-wrap: wrap; + justify-content: flex-start; + gap: 32Px 48Px; + } + .site-footer__col { + min-width: 128Px; + } +}@media (max-width: 576px) { + .site-footer { + padding-top: 48Px; + } + .site-footer::before { + width: 80%; + height: 80Px; + } + .site-footer__logo img { + height: 1.5rem; + } + .site-footer__main { + gap: 32Px; + padding-bottom: 40Px; + } + .site-footer__brand { + width: 100%; + } + .site-footer__cols { + display: none; + gap: 24Px 20Px; + } + .site-footer__col { + flex: 1 1 calc(50% - 20Px); + min-width: 0; + } + .site-footer__bottom { + flex-direction: column; + align-items: flex-start; + gap: 16Px; + padding: 24Px 0; + } + .site-footer__copyright { + flex-wrap: wrap; + } + .site-footer__legal { + flex-wrap: wrap; + gap: 16Px; + } +}/* ── Mask 全屏导航 ── */.mask { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 101; + background: #fff; + display: flex; + flex-direction: column; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: + opacity var(--duration-normal) var(--easing), + visibility var(--duration-normal) var(--easing); + + &.show { + opacity: 1; + visibility: visible; + pointer-events: auto; + } +}/* ── 头部 ── */.mask-header { + display: flex; + align-items: center; + justify-content: space-between; + height: var(--header-m-h); + padding: var(--header-m-py) var(--p-x); + flex-shrink: 0; +}.mask-header__logo { + img { + width: 148Px; + height: auto; + } +}.mask-header__brand { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 600; + line-height: 1.2; + color: var(--color-text); +}.mask-header__actions { + display: flex; + align-items: center; + gap: 0.5rem; +}.mask-header__icon-btn { + width: var(--header-m-btn); + height: var(--header-m-btn); + padding: 0; + border: none; + border-radius: 0; + background: transparent; + color: var(--color-text); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: color var(--duration-fast) var(--easing); + + &:hover { + color: var(--color-primary); + } + + &.lang svg, + &.search svg { + width: 1.125rem; + height: 1.125rem; + fill: currentColor; + } + + &.close svg { + width: var(--header-m-btn-svg); + height: var(--header-m-btn-svg); + fill: currentColor; + } +}/* ── 内容区域 ── */.mask-content { + flex: 1; + overflow-y: auto; + padding: 1rem; + -webkit-overflow-scrolling: touch; +}/* ── 导航列表 ── */.mask-nav__list { + margin: 0; + padding: 0; + list-style: none; +}.mask-nav__item { + border-bottom: 1px solid rgba(223, 224, 226, 1); +}.mask-nav__link { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 1rem 0; + border: none; + background: transparent; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-21); + color: var(--color-text); + text-decoration: none; + cursor: pointer; + transition: color var(--duration-fast) var(--easing); + + &:hover { + color: var(--color-primary); + } +}/* ── 展开/收起图标(+/-) ── */.mask-nav__icon { + width: 1rem; + height: 1rem; + flex-shrink: 0; + transition: transform var(--duration-normal) var(--easing); +}.mask-nav__item--expandable[data-expanded="true"] .mask-nav__icon { + transform: rotate(45deg); +}/* ── 子菜单列表(grid 展开动画) ── */.mask-nav__sublist-wrapper { + display: grid; + grid-template-rows: 0fr; + /* 默认高度为 0 */ + transition: grid-template-rows 0.3s ease-out; +}.mask-nav__sublist { + overflow: hidden; + min-height: 0; +}.mask-nav__item[data-expanded="true"] .mask-nav__sublist-wrapper { + grid-template-rows: 1fr; +}.mask-nav__subitem { + border-bottom: 1px solid rgba(223, 224, 226, 1); +}.mask-nav__subitem:last-child { + border-bottom: none; +}.mask-nav__sublink { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16Px 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: 14Px; + font-weight: 400; + line-height: var(--font-18); + color: var(--color-text-muted); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); + + &:hover { + color: var(--color-primary); + } +}/* ── 子菜单箭头 > ── */.mask-nav__arrow { + width: 1rem; + height: 1rem; + flex-shrink: 0; +}/* ── 菜单切换动画(三条线 → X) ── */.nav-toggle-icon__bar { + transition: + transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.25s ease; +}.nav-toggle-icon__bar--top { + transform-origin: 12Px 7Px; +}.nav-toggle-icon__bar--mid { + transform-origin: 12Px 12Px; +}.nav-toggle-icon__bar--bot { + transform-origin: 12Px 17Px; +}body.is-mask-open .nav-toggle-icon__bar--top { + transform: translateY(5Px) rotate(45deg); +}body.is-mask-open .nav-toggle-icon__bar--mid { + transform: scaleX(0); +}body.is-mask-open .nav-toggle-icon__bar--bot { + transform: translateY(-5Px) rotate(-45deg); +}.mask.mask--nav-motion .mask-nav a { + transition: none; +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/contact-D8E-azEI.css b/public/themes/dist_static/static/css/contact-D8E-azEI.css new file mode 100644 index 0000000..3f73f19 --- /dev/null +++ b/public/themes/dist_static/static/css/contact-D8E-azEI.css @@ -0,0 +1 @@ +.main-contact{background:var(--color-white)}.c-intro{padding-top:calc(var(--header-h) + 7.5rem);justify-content:space-between;gap:2.5rem;padding-bottom:3rem;display:flex}.c-intro__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);flex-direction:column;margin:0;display:flex}.c-intro__hotline{flex-direction:column;flex-shrink:0;gap:1rem;max-width:25rem;display:flex}.c-intro__hotline-label{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);align-items:center;gap:.5rem;display:inline-flex}.c-intro__hotline-label img{width:2rem;height:auto;display:block}.c-intro__phone{color:var(--color-text);font-family:D-DIN-PRO,MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);transition:color var(--duration-fast) var(--easing);font-weight:600;line-height:1;text-decoration:none}.c-intro__phone:hover{color:var(--color-primary)}.c-intro__hours{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.c-banner{height:45rem;position:relative;overflow:hidden}.c-banner__media{position:absolute;inset:0}.c-banner__media img{object-fit:cover;object-position:center 0;width:100%;height:100%;display:block}.c-banner__cards{z-index:1;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.5rem;display:grid;position:absolute;bottom:3.125rem;left:0;right:0}.c-card{-webkit-backdrop-filter:blur(1.25rem);min-height:12rem;color:var(--color-text);background:#fffc;border-radius:1.5rem;flex-direction:column;gap:2.5rem;padding:2.5rem;text-decoration:none;transition:transform .3s,background .3s,box-shadow .3s;display:flex}.c-card:hover{background:#ffffffeb;transform:translateY(-.25rem);box-shadow:0 .75rem 2rem #2e353a14}.c-card__head{justify-content:space-between;align-items:center;gap:1rem;display:flex}.c-card__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-40)}.c-card__icon{flex-shrink:0;width:3rem;height:3rem;display:block}.c-card__desc{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.c-form-section{grid-template-columns:minmax(17.5rem,34.8125rem) minmax(0,67.5rem);justify-content:space-between;align-items:start;gap:2.5rem;padding-top:7.5rem;padding-bottom:7.5rem;display:grid}.c-form-section__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);flex-direction:column;margin:0;display:flex}.c-form{justify-self:end;width:100%;max-width:67.5rem;margin-top:8rem}.c-form__grid{grid-template-columns:1fr 1fr;gap:2rem 2.5rem;display:grid}.c-form__agree{color:var(--color-text-link);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;margin-top:2rem;display:inline-flex}.c-form__agree input{width:1rem;height:1rem;accent-color:var(--color-primary);cursor:pointer;margin:0}.c-form__submit{background:var(--color-primary);min-width:7.375rem;height:2.625rem;color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;border:0;border-radius:1.875rem;justify-content:center;align-items:center;margin-top:2.5rem;padding:.5625rem .625rem;transition:background .25s,opacity .25s;display:flex}.c-form__submit:hover{background:var(--color-primary-hover)}.c-field{flex-direction:column;gap:.5rem;min-width:0;display:flex}.c-field--full{grid-column:1/-1}.c-field__label{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32)}.c-field__input{width:100%;height:4.875rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);transition:border-color var(--duration-fast) var(--easing);background:0 0;border:0;border-bottom:1px solid #dfe0e2;border-radius:0;outline:none;padding:0}.c-field__input::placeholder{color:#afb5b9}.c-field__input:focus{border-bottom-color:var(--color-primary)}.c-field__select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23AFB5B9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 0 center;background-repeat:no-repeat;background-size:.75rem .5rem;padding-right:1.5rem}.c-field__select:invalid{color:#afb5b9}.c-field__select option{color:var(--color-text)}.c-custom-select{width:100%;position:relative}.c-custom-select__native{opacity:0;pointer-events:none;appearance:none;position:absolute;inset:0}.c-custom-select__trigger{width:100%;height:4.875rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);cursor:pointer;transition:border-color var(--duration-fast) var(--easing);text-align:left;background:0 0;border:0;border-bottom:1px solid #dfe0e2;border-radius:0;outline:none;justify-content:space-between;align-items:center;padding:0 1.5rem 0 0;display:flex}.c-custom-select__trigger:after{content:"";width:.75rem;height:.5rem;transition:transform var(--duration-fast) var(--easing);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23AFB5B9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/100% 100% no-repeat;flex-shrink:0}.c-custom-select__trigger.is-placeholder{color:#afb5b9}.c-custom-select__trigger.is-open{border-bottom-color:var(--color-primary)}.c-custom-select__trigger.is-open:after{transform:rotate(180deg)}.c-custom-select__dropdown{z-index:20;overscroll-behavior:contain;background:var(--color-white);opacity:0;visibility:hidden;max-height:15rem;transition:all .2s var(--easing);border-radius:.75rem;padding:.5rem 0;position:absolute;top:calc(100% + .25rem);left:0;right:0;overflow-y:auto;transform:translateY(-.5rem);box-shadow:0 .5rem 2rem #2e353a1f}.c-custom-select__dropdown.is-visible{opacity:1;visibility:visible;transform:translateY(0)}.c-custom-select__option{width:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);text-align:left;cursor:pointer;transition:background var(--duration-fast) var(--easing), color var(--duration-fast) var(--easing);background:0 0;border:0;border-radius:0;padding:.75rem 1.5rem;display:block}.c-custom-select__option:hover{background:var(--color-primary);color:var(--color-white)!important}.c-custom-select__option.is-active{color:var(--color-primary);font-weight:500}@media (width<=1439px){.c-intro{padding-top:calc(var(--header-h) + 40px);flex-direction:column;align-items:flex-start;padding-bottom:32px}.c-intro__title{font-size:36px;line-height:48px}.c-intro__phone{font-size:36px}.c-intro__hours{font-size:16px}.c-banner{height:560px}.c-banner__cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;bottom:32px}.c-card{gap:24px;min-height:0;padding:28px}.c-card__title{font-size:24px;line-height:32px}.c-card__icon{width:40px;height:40px}.c-card__desc{font-size:16px}.c-form-section{grid-template-columns:1fr;gap:40px;padding-top:72px;padding-bottom:80px}.c-form-section__title{font-size:36px;line-height:48px}.c-form{justify-self:stretch;max-width:none;margin-top:0}.c-form__grid{gap:24px 32px}.c-field__label{font-size:20px;line-height:28px}.c-field__input,.c-custom-select__trigger{height:64px;font-size:18px}.c-custom-select__option{font-size:16px}}@media (width<=576px){.c-intro{padding-top:calc(var(--header-h) + 24px);gap:24px;padding-bottom:24px}.c-intro__title{font-size:28px;line-height:38px}.c-intro__hotline-label{font-size:16px}.c-intro__phone{font-size:28px}.c-intro__hours{font-size:14px;line-height:22px}.c-banner{height:auto;min-height:0;overflow:visible}.c-banner__media{height:280px;position:relative;inset:auto}.c-banner__cards{grid-template-columns:1fr;gap:12px;margin-top:-48px;padding-bottom:24px;position:relative;bottom:auto}.c-card{border-radius:16px;gap:16px;padding:20px}.c-card__title{font-size:20px;line-height:28px}.c-card__icon{width:32px;height:32px}.c-card__desc{font-size:14px;line-height:20px}.c-form-section{gap:28px;padding-top:48px;padding-bottom:56px}.c-form-section__title{font-size:28px;line-height:38px}.c-form{margin-top:0}.c-form__grid{grid-template-columns:1fr;gap:20px}.c-form__agree{margin-top:28px;font-size:14px}.c-form__submit{min-width:100px;height:40px;margin-top:20px;font-size:16px}.c-field__label{font-size:18px;line-height:24px}.c-field__input,.c-custom-select__trigger{height:56px;font-size:16px}.c-custom-select__option{padding:10px 16px;font-size:14px}.c-custom-select__dropdown{max-height:200px}} diff --git a/public/themes/dist_static/static/css/contact.css b/public/themes/dist_static/static/css/contact.css new file mode 100644 index 0000000..2f018d2 --- /dev/null +++ b/public/themes/dist_static/static/css/contact.css @@ -0,0 +1,546 @@ +@charset "UTF-8"; +.main-contact { + background: var(--color-white); +} + +.c-intro { + display: flex; + justify-content: space-between; + gap: 2.5rem; + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 3rem; +} +.c-intro__title { + margin: 0; + display: flex; + flex-direction: column; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.c-intro__hotline { + display: flex; + flex-direction: column; + gap: 1rem; + flex-shrink: 0; + max-width: 25rem; +} +.c-intro__hotline-label { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.c-intro__hotline-label img { + display: block; + width: 2rem; + height: auto; +} +.c-intro__phone { + color: var(--color-text); + font-family: "D-DIN-PRO", "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 600; + line-height: 1; + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.c-intro__phone:hover { + color: var(--color-primary); +} +.c-intro__hours { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.c-banner { + position: relative; + height: 45rem; + overflow: hidden; +} +.c-banner__media { + position: absolute; + inset: 0; +} +.c-banner__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + object-position: center 0; +} +.c-banner__cards { + position: absolute; + left: 0; + right: 0; + bottom: 3.125rem; + z-index: 1; + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 1.5rem; +} + +.c-card { + display: flex; + flex-direction: column; + gap: 2.5rem; + min-height: 12rem; + padding: 2.5rem; + border-radius: 1.5rem; + background: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(1.25rem); + -webkit-backdrop-filter: blur(1.25rem); + text-decoration: none; + color: var(--color-text); + transition: transform 0.3s ease, background 0.3s ease, box-shadow 0.3s ease; +} +.c-card:hover { + transform: translateY(-0.25rem); + background: rgba(255, 255, 255, 0.92); + box-shadow: 0 0.75rem 2rem rgba(46, 53, 58, 0.08); +} +.c-card__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; +} +.c-card__title { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-40); +} +.c-card__icon { + display: block; + width: 3rem; + height: 3rem; + flex-shrink: 0; +} +.c-card__desc { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.c-form-section { + display: grid; + grid-template-columns: minmax(17.5rem, 34.8125rem) minmax(0, 67.5rem); + gap: 2.5rem; + align-items: start; + justify-content: space-between; + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.c-form-section__title { + margin: 0; + display: flex; + flex-direction: column; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} + +.c-form { + margin-top: 8rem; + width: 100%; + max-width: 67.5rem; + justify-self: end; +} +.c-form__grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem 2.5rem; +} +.c-form__agree { + display: inline-flex; + align-items: center; + gap: 0.5rem; + margin-top: 2rem; + color: var(--color-text-link); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + user-select: none; +} +.c-form__agree input { + width: 1rem; + height: 1rem; + margin: 0; + accent-color: var(--color-primary); + cursor: pointer; +} +.c-form__submit { + display: flex; + align-items: center; + justify-content: center; + min-width: 7.375rem; + height: 2.625rem; + margin-top: 2.5rem; + padding: 0.5625rem 0.625rem 0.5625rem 0.625rem; + border: 0; + border-radius: 1.875rem; + background: var(--color-primary); + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: background 0.25s ease, opacity 0.25s ease; +} +.c-form__submit:hover { + background: var(--color-primary-hover); +} + +.c-field { + display: flex; + flex-direction: column; + gap: 0.5rem; + min-width: 0; +} +.c-field--full { + grid-column: 1/-1; +} +.c-field__label { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.c-field__input { + width: 100%; + height: 4.875rem; + padding: 0; + border: 0; + border-bottom: 1px solid rgb(223, 224, 226); + border-radius: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); + outline: none; + transition: border-color var(--duration-fast) var(--easing); +} +.c-field__input::placeholder { + color: rgb(175, 181, 185); +} +.c-field__input:focus { + border-bottom-color: var(--color-primary); +} +.c-field__select { + appearance: none; + -webkit-appearance: none; + cursor: pointer; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23AFB5B9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 0 center; + background-size: 0.75rem 0.5rem; + padding-right: 1.5rem; +} +.c-field__select:invalid { + color: rgb(175, 181, 185); +} +.c-field__select option { + color: var(--color-text); +} + +/* 自定义下拉 */ +.c-custom-select { + position: relative; + width: 100%; +} +.c-custom-select__native { + position: absolute; + inset: 0; + opacity: 0; + pointer-events: none; + appearance: none; + -webkit-appearance: none; +} +.c-custom-select__trigger { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + height: 4.875rem; + padding: 0 1.5rem 0 0; + border: 0; + border-bottom: 1px solid rgb(223, 224, 226); + border-radius: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); + cursor: pointer; + outline: none; + transition: border-color var(--duration-fast) var(--easing); + text-align: left; +} +.c-custom-select__trigger::after { + content: ""; + flex-shrink: 0; + width: 0.75rem; + height: 0.5rem; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23AFB5B9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/100% 100% no-repeat; + transition: transform var(--duration-fast) var(--easing); +} +.c-custom-select__trigger.is-placeholder { + color: rgb(175, 181, 185); +} +.c-custom-select__trigger.is-open { + border-bottom-color: var(--color-primary); +} +.c-custom-select__trigger.is-open::after { + transform: rotate(180deg); +} +.c-custom-select__dropdown { + position: absolute; + left: 0; + right: 0; + top: calc(100% + 0.25rem); + z-index: 20; + max-height: 15rem; + overflow-y: auto; + overscroll-behavior: contain; + padding: 0.5rem 0; + border-radius: 0.75rem; + background: var(--color-white); + box-shadow: 0 0.5rem 2rem rgba(46, 53, 58, 0.12); + opacity: 0; + visibility: hidden; + transform: translateY(-0.5rem); + transition: all 0.2s var(--easing); +} +.c-custom-select__dropdown.is-visible { + opacity: 1; + visibility: visible; + transform: translateY(0); +} +.c-custom-select__option { + display: block; + width: 100%; + padding: 0.75rem 1.5rem; + border: 0; + border-radius: 0; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + text-align: left; + cursor: pointer; + transition: background var(--duration-fast) var(--easing), color var(--duration-fast) var(--easing); +} +.c-custom-select__option:hover { + color: var(--color-white) !important; + background: var(--color-primary); +} +.c-custom-select__option.is-active { + color: var(--color-primary); + font-weight: 500; +} + +@media (max-width: 1439px) { + .c-intro { + flex-direction: column; + align-items: flex-start; + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 32Px; + } + .c-intro__title { + font-size: 36Px; + line-height: 48Px; + } + .c-intro__phone { + font-size: 36Px; + } + .c-intro__hours { + font-size: 16Px; + } + .c-banner { + height: 560Px; + } + .c-banner__cards { + bottom: 32Px; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16Px; + } + .c-card { + min-height: 0; + gap: 24Px; + padding: 28Px; + } + .c-card__title { + font-size: 24Px; + line-height: 32Px; + } + .c-card__icon { + width: 40Px; + height: 40Px; + } + .c-card__desc { + font-size: 16Px; + } + .c-form-section { + grid-template-columns: 1fr; + gap: 40Px; + padding-top: 72Px; + padding-bottom: 80Px; + } + .c-form-section__title { + font-size: 36Px; + line-height: 48Px; + } + .c-form { + justify-self: stretch; + max-width: none; + margin-top: 0; + } + .c-form__grid { + gap: 24Px 32Px; + } + .c-field__label { + font-size: 20Px; + line-height: 28Px; + } + .c-field__input { + height: 64Px; + font-size: 18Px; + } + .c-custom-select__trigger { + height: 64Px; + font-size: 18Px; + } + .c-custom-select__option { + font-size: 16Px; + } +} +@media (max-width: 576px) { + .c-intro { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 24Px; + gap: 24Px; + } + .c-intro__title { + font-size: 28Px; + line-height: 38Px; + } + .c-intro__hotline-label { + font-size: 16Px; + } + .c-intro__phone { + font-size: 28Px; + } + .c-intro__hours { + font-size: 14Px; + line-height: 22Px; + } + .c-banner { + height: auto; + min-height: 0; + overflow: visible; + } + .c-banner__media { + position: relative; + inset: auto; + height: 280Px; + } + .c-banner__cards { + position: relative; + bottom: auto; + margin-top: 40Px; + padding-bottom: 24Px; + grid-template-columns: repeat(2, 1fr); + gap: 12Px; + padding: 0 16Px; + } + .c-card { + gap: 20Px; + padding: 20Px 16Px; + border-radius: 16Px; + border-radius: 24Px; + backdrop-filter: blur(20Px); + background: rgba(255, 255, 255, 0.8); + border: 1Px solid rgb(223, 224, 226); + } + .c-card__title { + font-size: 16Px; + line-height: 21Px; + } + .c-card__icon { + width: 24Px; + height: 24Px; + } + .c-card__desc { + font-size: 12Px; + line-height: 16Px; + } + .c-form-section { + padding-top: 48Px; + padding-bottom: 56Px; + gap: 28Px; + } + .c-form-section__title { + font-size: 28Px; + line-height: 38Px; + } + .c-form { + margin-top: 0; + } + .c-form__grid { + grid-template-columns: 1fr; + gap: 20Px; + } + .c-form__agree { + margin-top: 28Px; + font-size: 14Px; + } + .c-form__submit { + margin-top: 20Px; + min-width: 100Px; + height: 40Px; + font-size: 16Px; + } + .c-field__label { + font-size: 18Px; + line-height: 24Px; + } + .c-field__input { + height: 56Px; + font-size: 16Px; + } + .c-custom-select__trigger { + height: 56Px; + font-size: 16Px; + } + .c-custom-select__option { + font-size: 14Px; + padding: 10Px 16Px; + } + .c-custom-select__dropdown { + max-height: 200Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/download-ZPXm-jdc.css b/public/themes/dist_static/static/css/download-ZPXm-jdc.css new file mode 100644 index 0000000..d42690e --- /dev/null +++ b/public/themes/dist_static/static/css/download-ZPXm-jdc.css @@ -0,0 +1 @@ +.main-download{background:var(--color-white)}.d-page{padding-top:calc(var(--header-h) + 2.75rem + 2.5rem);padding-bottom:6.25rem}.d-head{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1rem;padding-bottom:2.5rem;display:flex}.d-head__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.d-head__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.d-toolbar{justify-content:space-between;align-items:center;gap:1.5rem;margin-top:2.75rem;margin-bottom:2.75rem;display:flex}.d-tabs{flex-wrap:wrap;align-items:center;gap:1rem;min-width:0;display:flex}.d-tabs__group{position:relative}.d-tabs__item{min-height:3rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;border:0;border-radius:6.25rem;justify-content:center;align-items:center;gap:1rem;padding:.75rem 2rem;transition:background .25s,color .25s;display:inline-flex}.d-tabs__item.is-active{background:var(--color-primary);color:var(--color-white)}.d-tabs__item.is-open{color:var(--color-primary);background:#ef43351a}.d-tabs__item.is-open .d-tabs__chevron{transform:rotate(180deg)}.d-tabs__chevron{width:.6875rem;height:auto;transition:transform var(--duration-fast) var(--easing);display:block}.d-tabs__dropdown{z-index:30;background:var(--color-white);border-radius:1rem;flex-direction:column;gap:.5rem;min-width:12.5rem;padding:1rem;display:flex;position:absolute;top:calc(100% + .5rem);left:0;box-shadow:0 .5rem 1.5rem #2e353a24}.d-tabs__dropdown[hidden]{display:none}.d-tabs__dropdown-item{width:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6.25rem;padding:.625rem 1.25rem;transition:background .25s,color .25s;display:block}.d-tabs__dropdown-item:hover{background:#afb5b91f}.d-tabs__dropdown-item.is-active{background:var(--color-primary);color:var(--color-white)}.d-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem;margin-bottom:3.5rem;display:grid}.d-item{min-height:6.25rem;color:var(--color-text);background:#afb5b926;border-radius:1rem;justify-content:space-between;align-items:center;gap:1.5rem;padding:1.5rem 2rem;text-decoration:none;transition:background .25s,transform .25s;display:flex}.d-item:hover{background:#afb5b938}.d-item:hover .d-item__action{color:var(--color-primary)}.d-item__main{align-items:center;gap:1rem;min-width:0;display:flex}.d-item__pdf{flex-shrink:0;width:2rem;height:2rem;display:block}.d-item__name{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28)}.d-item__action{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);color:var(--color-text);transition:color var(--duration-fast) var(--easing);flex-shrink:0;align-items:center;gap:.5rem;display:inline-flex}.d-item__action img{width:1.5rem;height:1.5rem;display:block}.d-pagination{justify-content:center;align-items:center;gap:.75rem;display:flex}.d-pagination__btn,.d-pagination__page{color:#2e353a99;width:3rem;height:3rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-24);cursor:default;background:#afb5b926;border:0;border-radius:.5rem;justify-content:center;align-items:center;padding:0;display:inline-flex}.d-pagination__btn img{filter:grayscale()opacity(.45);width:1.0625rem;height:auto;display:block;transform:scaleX(-1)}.d-pagination__btn--next img{filter:none;transform:none}.d-pagination__btn:disabled{opacity:.55;cursor:not-allowed}.d-pagination__page.is-active{background:var(--color-primary);color:var(--color-white)}@media (width<=1439px){.d-page{padding-top:calc(var(--header-h) + 40px);padding-bottom:72px}.d-head{gap:12px;margin-bottom:32px}.d-head__title{font-size:36px;line-height:48px}.d-head__desc{font-size:16px}.d-toolbar{flex-wrap:wrap;gap:16px;margin-bottom:32px}.d-tabs{gap:12px}.d-tabs__item{min-height:44px;padding:10px 24px;font-size:16px}.d-list{gap:12px;margin-bottom:40px}.d-item{gap:16px;min-height:72px;padding:20px 24px}.d-item__name{font-size:18px;line-height:26px}.d-item__action{font-size:16px}}@media (width<=992px){.d-toolbar{flex-direction:column;align-items:stretch}.d-list{grid-template-columns:1fr}}@media (width<=576px){.d-page{padding-top:calc(var(--header-h) + 24px);padding-bottom:48px}.d-head{gap:10px;margin-bottom:24px}.d-head__title{font-size:28px;line-height:38px}.d-head__desc{font-size:14px;line-height:22px}.d-toolbar{margin-bottom:24px}.d-tabs{gap:8px}.d-tabs__item{min-height:40px;padding:8px 16px;font-size:14px}.d-item{flex-direction:column;align-items:flex-start;gap:14px;padding:16px 18px}.d-item__name{font-size:16px;line-height:24px}.d-item__action{font-size:14px}.d-item__action img{width:20px;height:20px}.d-pagination{gap:8px}.d-pagination__btn,.d-pagination__page{width:40px;height:40px;font-size:16px}} diff --git a/public/themes/dist_static/static/css/download.css b/public/themes/dist_static/static/css/download.css new file mode 100644 index 0000000..666498f --- /dev/null +++ b/public/themes/dist_static/static/css/download.css @@ -0,0 +1,341 @@ +.main-download { + background: var(--color-white); +} + +.d-page { + padding-top: calc(var(--header-h) + 2.75rem + 2.5rem); + padding-bottom: 6.25rem; +} + +.d-head { + display: flex; + flex-direction: column; + gap: 1rem; + padding-bottom: 2.5rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.d-head__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.d-head__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.d-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-top: 2.75rem; + margin-bottom: 2.75rem; +} + +.d-tabs { + display: flex; + flex-wrap: wrap; + gap: 1rem; + align-items: center; + min-width: 0; +} +.d-tabs__group { + position: relative; +} +.d-tabs__item { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 1rem; + min-height: 3rem; + padding: 0.75rem 2rem; + border: 0; + border-radius: 6.25rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: background 0.25s ease, color 0.25s ease; +} +.d-tabs__item.is-active { + background: var(--color-primary); + color: var(--color-white); +} +.d-tabs__item.is-open { + background: rgba(239, 67, 53, 0.1); + color: var(--color-primary); +} +.d-tabs__item.is-open .d-tabs__chevron { + transform: rotate(180deg); +} +.d-tabs__chevron { + display: block; + width: 0.6875rem; + height: auto; + transition: transform var(--duration-fast) var(--easing); +} +.d-tabs__dropdown { + position: absolute; + top: calc(100% + 0.5rem); + left: 0; + z-index: 30; + display: flex; + flex-direction: column; + gap: 0.5rem; + min-width: 12.5rem; + padding: 1rem; + border-radius: 1rem; + background: var(--color-white); + box-shadow: 0 0.5rem 1.5rem rgba(46, 53, 58, 0.14); +} +.d-tabs__dropdown[hidden] { + display: none; +} +.d-tabs__dropdown-item { + display: block; + width: 100%; + padding: 0.625rem 1.25rem; + border: 0; + border-radius: 6.25rem; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + text-align: left; + cursor: pointer; + transition: background 0.25s ease, color 0.25s ease; +} +.d-tabs__dropdown-item:hover { + background: rgba(175, 181, 185, 0.12); +} +.d-tabs__dropdown-item.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.d-list { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 2rem; + margin-bottom: 3.5rem; +} + +.d-item { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + min-height: 6.25rem; + padding: 1.5rem 2rem; + border-radius: 1rem; + background: rgba(175, 181, 185, 0.15); + text-decoration: none; + color: var(--color-text); + transition: background 0.25s ease, transform 0.25s ease; +} +.d-item:hover { + background: rgba(175, 181, 185, 0.22); +} +.d-item:hover .d-item__action { + color: var(--color-primary); +} +.d-item__main { + display: flex; + align-items: center; + gap: 1rem; + min-width: 0; +} +.d-item__pdf { + display: block; + width: 2rem; + height: 2rem; + flex-shrink: 0; +} +.d-item__name { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.d-item__action { + display: inline-flex; + align-items: center; + gap: 0.5rem; + flex-shrink: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + color: var(--color-text); + transition: color var(--duration-fast) var(--easing); +} +.d-item__action img { + display: block; + width: 1.5rem; + height: 1.5rem; +} + +.d-pagination { + display: flex; + align-items: center; + justify-content: center; + gap: 0.75rem; +} +.d-pagination__btn, .d-pagination__page { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + padding: 0; + border: 0; + border-radius: 0.5rem; + background: rgba(175, 181, 185, 0.15); + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-24); + cursor: default; +} +.d-pagination__btn img { + display: block; + width: 1.0625rem; + height: auto; + transform: scaleX(-1); + filter: grayscale(1) opacity(0.45); +} +.d-pagination__btn--next img { + transform: none; + filter: none; +} +.d-pagination__btn:disabled { + opacity: 0.55; + cursor: not-allowed; +} +.d-pagination__page.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +@media (max-width: 1439px) { + .d-page { + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 72Px; + } + .d-head { + gap: 12Px; + margin-bottom: 32Px; + } + .d-head__title { + font-size: 36Px; + line-height: 48Px; + } + .d-head__desc { + font-size: 16Px; + } + .d-toolbar { + flex-wrap: wrap; + gap: 16Px; + margin-bottom: 32Px; + } + .d-tabs { + gap: 12Px; + } + .d-tabs__item { + min-height: 44Px; + padding: 10Px 24Px; + font-size: 16Px; + } + .d-list { + gap: 12Px; + margin-bottom: 40Px; + } + .d-item { + min-height: 72Px; + padding: 20Px 24Px; + gap: 16Px; + } + .d-item__name { + font-size: 18Px; + line-height: 26Px; + } + .d-item__action { + font-size: 16Px; + } +} +@media (max-width: 992px) { + .d-toolbar { + flex-direction: column; + align-items: stretch; + } + .d-list { + grid-template-columns: 1fr; + } +} +@media (max-width: 576px) { + .d-page { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 48Px; + } + .d-head { + gap: 10Px; + margin-bottom: 24Px; + } + .d-head__title { + font-size: 28Px; + line-height: 38Px; + } + .d-head__desc { + font-size: 14Px; + line-height: 22Px; + } + .d-toolbar { + margin-bottom: 24Px; + } + .d-tabs { + gap: 8Px; + } + .d-tabs__item { + min-height: 40Px; + padding: 8Px 16Px; + font-size: 14Px; + } + .d-item { + flex-direction: column; + align-items: flex-start; + padding: 16Px 18Px; + gap: 14Px; + } + .d-item__name { + font-size: 16Px; + line-height: 24Px; + } + .d-item__action { + font-size: 14Px; + } + .d-item__action img { + width: 20Px; + height: 20Px; + } + .d-pagination { + gap: 8Px; + } + .d-pagination__btn, .d-pagination__page { + width: 40Px; + height: 40Px; + font-size: 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/faq-BHZcdOFr.css b/public/themes/dist_static/static/css/faq-BHZcdOFr.css new file mode 100644 index 0000000..d22bdc8 --- /dev/null +++ b/public/themes/dist_static/static/css/faq-BHZcdOFr.css @@ -0,0 +1 @@ +.main-faq{background:var(--color-white)}.f-page{padding-top:calc(var(--header-h) + 2.75rem + 2.5rem);padding-bottom:6.25rem}.f-head{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1.5rem;padding-bottom:2.5rem;display:flex}.f-head__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.f-head__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.f-toolbar{justify-content:space-between;align-items:center;gap:1.5rem;margin-top:2.75rem;margin-bottom:2.75rem;display:flex}.f-tabs{flex-wrap:wrap;align-items:center;gap:1rem;min-width:0;display:flex}.f-tabs__item{color:#2e353a99;min-height:3rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;border:0;border-radius:6.25rem;justify-content:center;align-items:center;padding:.75rem 2rem;transition:background .25s,color .25s;display:inline-flex}.f-tabs__item.is-active{background:var(--color-primary);color:var(--color-white)}.f-list{flex-direction:column;display:flex}.f-item{transition:border-color var(--duration-fast) var(--easing);border-top:1px solid #dfe0e2}.f-item__trigger{text-align:left;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;gap:1.5rem;width:100%;padding:2rem 0;display:flex}.f-item__q{align-items:center;gap:1rem;min-width:0;display:flex}.f-item__dot{background:#afb5b9;border-radius:50%;flex-shrink:0;width:.5rem;height:.5rem}.f-item__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:450;line-height:var(--font-32)}.f-item__icon{flex-shrink:0;width:1.5rem;height:1.5rem;position:relative}.f-item__icon:before,.f-item__icon:after{content:"";background:#afb5b9;transition:transform .25s,background .25s,opacity .25s;position:absolute;top:50%;left:50%}.f-item__icon:before{width:1rem;height:.125rem;transform:translate(-50%,-50%)}.f-item__icon:after{width:.125rem;height:1rem;transform:translate(-50%,-50%)}.f-item__panel{transition:grid-template-rows var(--duration-normal) var(--easing);grid-template-rows:0fr;display:grid}.f-item__a{opacity:0;color:#2e353a99;max-height:0;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-32);background:#afb5b926;border-radius:1.5rem;margin:0;padding:0 2rem;transition:max-height .3s,opacity .25s,padding .3s,margin .3s;overflow:hidden}.f-item.is-open{border-top-color:var(--color-primary)}.f-item.is-open .f-item__icon:before,.f-item.is-open .f-item__icon:after{background:var(--color-primary)}.f-item.is-open .f-item__icon:after{opacity:0;transform:translate(-50%,-50%)scaleY(0)}.f-item.is-open .f-item__panel{grid-template-rows:1fr}.f-item.is-open .f-item__a{opacity:1;max-height:30rem;margin-bottom:2rem;padding:2.5rem 2rem}@media (width<=1439px){.f-page{padding-top:calc(var(--header-h) + 40px);padding-bottom:72px}.f-head{gap:12px;padding-bottom:28px}.f-head__title{font-size:36px;line-height:48px}.f-head__desc{font-size:16px}.f-toolbar{flex-wrap:wrap;gap:16px;margin-top:32px;margin-bottom:32px}.f-tabs{gap:12px}.f-tabs__item{min-height:44px;padding:10px 24px;font-size:16px}.f-item__trigger{padding:24px 0}.f-item__title{font-size:20px;line-height:28px}.f-item__a{font-size:16px;line-height:28px}.f-item.is-open .f-item__a{margin-bottom:24px;padding:20px 24px}}@media (width<=992px){.f-toolbar{flex-direction:column;align-items:stretch}}@media (width<=576px){.f-page{padding-top:calc(var(--header-h) + 24px);padding-bottom:48px}.f-head{gap:10px;padding-bottom:20px}.f-head__title{font-size:28px;line-height:38px}.f-head__desc{font-size:14px;line-height:22px}.f-toolbar{margin-top:24px;margin-bottom:24px}.f-tabs{gap:8px}.f-tabs__item{min-height:40px;padding:8px 16px;font-size:14px}.f-item__trigger{gap:16px;padding:20px 0}.f-item__q{gap:12px}.f-item__dot{width:6px;height:6px}.f-item__title{font-size:16px;line-height:24px}.f-item__a{border-radius:16px;font-size:14px;line-height:24px}.f-item.is-open .f-item__a{margin-bottom:20px;padding:16px 18px}} diff --git a/public/themes/dist_static/static/css/faq.css b/public/themes/dist_static/static/css/faq.css new file mode 100644 index 0000000..05d174c --- /dev/null +++ b/public/themes/dist_static/static/css/faq.css @@ -0,0 +1,281 @@ +.main-faq { + background: var(--color-white); +} + +.f-page { + padding-top: calc(var(--header-h) + 2.75rem + 2.5rem); + padding-bottom: 6.25rem; +} + +.f-head { + display: flex; + flex-direction: column; + gap: 1.5rem; + padding-bottom: 2.5rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.f-head__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.f-head__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.f-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-top: 2.75rem; + margin-bottom: 2.75rem; +} + +.f-tabs { + display: flex; + flex-wrap: wrap; + gap: 1rem; + align-items: center; + min-width: 0; +} +.f-tabs__item { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 3rem; + padding: 0.75rem 2rem; + border: 0; + border-radius: 6.25rem; + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: background 0.25s ease, color 0.25s ease; +} +.f-tabs__item.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.f-list { + display: flex; + flex-direction: column; +} + +.f-item { + border-top: 1px solid rgb(223, 224, 226); + transition: border-color var(--duration-fast) var(--easing); +} +.f-item__trigger { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + width: 100%; + padding: 2rem 0; + border: 0; + background: transparent; + text-align: left; + cursor: pointer; +} +.f-item__q { + display: flex; + align-items: center; + gap: 1rem; + min-width: 0; +} +.f-item__dot { + width: 0.5rem; + height: 0.5rem; + flex-shrink: 0; + border-radius: 50%; + background: rgb(175, 181, 185); +} +.f-item__title { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 450; + line-height: var(--font-32); +} +.f-item__icon { + position: relative; + width: 1.5rem; + height: 1.5rem; + flex-shrink: 0; +} +.f-item__icon::before, .f-item__icon::after { + content: ""; + position: absolute; + top: 50%; + left: 50%; + background: rgb(175, 181, 185); + transition: transform 0.25s ease, background 0.25s ease, opacity 0.25s ease; +} +.f-item__icon::before { + width: 1rem; + height: 0.125rem; + transform: translate(-50%, -50%); +} +.f-item__icon::after { + width: 0.125rem; + height: 1rem; + transform: translate(-50%, -50%); +} +.f-item__panel { + display: grid; + grid-template-rows: 0fr; + transition: grid-template-rows var(--duration-normal) var(--easing); +} +.f-item__a { + overflow: hidden; + margin: 0; + padding: 0 2rem; + max-height: 0; + opacity: 0; + border-radius: 1.5rem; + background: rgba(175, 181, 185, 0.15); + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-32); + transition: max-height 0.3s ease, opacity 0.25s ease, padding 0.3s ease, margin 0.3s ease; +} +.f-item.is-open { + border-top-color: var(--color-primary); +} +.f-item.is-open .f-item__icon::before, .f-item.is-open .f-item__icon::after { + background: var(--color-primary); +} +.f-item.is-open .f-item__icon::after { + opacity: 0; + transform: translate(-50%, -50%) scaleY(0); +} +.f-item.is-open .f-item__panel { + grid-template-rows: 1fr; +} +.f-item.is-open .f-item__a { + max-height: 30rem; + margin-bottom: 2rem; + padding: 2.5rem 2rem; + opacity: 1; +} + +@media (max-width: 1439px) { + .f-page { + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 72Px; + } + .f-head { + gap: 12Px; + padding-bottom: 28Px; + } + .f-head__title { + font-size: 36Px; + line-height: 48Px; + } + .f-head__desc { + font-size: 16Px; + } + .f-toolbar { + flex-wrap: wrap; + gap: 16Px; + margin-top: 32Px; + margin-bottom: 32Px; + } + .f-tabs { + gap: 12Px; + } + .f-tabs__item { + min-height: 44Px; + padding: 10Px 24Px; + font-size: 16Px; + } + .f-item__trigger { + padding: 24Px 0; + } + .f-item__title { + font-size: 20Px; + line-height: 28Px; + } + .f-item__a { + font-size: 16Px; + line-height: 28Px; + } + .f-item.is-open .f-item__a { + padding: 20Px 24Px; + margin-bottom: 24Px; + } +} +@media (max-width: 992px) { + .f-toolbar { + flex-direction: column; + align-items: stretch; + } +} +@media (max-width: 576px) { + .f-page { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 48Px; + } + .f-head { + gap: 10Px; + padding-bottom: 20Px; + } + .f-head__title { + font-size: 28Px; + line-height: 38Px; + } + .f-head__desc { + font-size: 14Px; + line-height: 22Px; + } + .f-toolbar { + margin-top: 24Px; + margin-bottom: 24Px; + } + .f-tabs { + gap: 8Px; + } + .f-tabs__item { + min-height: 40Px; + padding: 8Px 16Px; + font-size: 14Px; + } + .f-item__trigger { + gap: 16Px; + padding: 20Px 0; + } + .f-item__q { + gap: 12Px; + } + .f-item__dot { + width: 6Px; + height: 6Px; + } + .f-item__title { + font-size: 16Px; + line-height: 24Px; + } + .f-item__a { + font-size: 14Px; + line-height: 24Px; + border-radius: 16Px; + } + .f-item.is-open .f-item__a { + padding: 16Px 18Px; + margin-bottom: 20Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/index-hIdCH-Ul.css b/public/themes/dist_static/static/css/index-hIdCH-Ul.css new file mode 100644 index 0000000..a00cefe --- /dev/null +++ b/public/themes/dist_static/static/css/index-hIdCH-Ul.css @@ -0,0 +1 @@ +.main-home .s-btn{min-width:12.5rem;min-height:3.625rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);padding:0 2rem;font-weight:400;line-height:1}.section-banner{height:100vh;position:relative;overflow:hidden}.section-banner__swiper{width:100%;height:100%}.section-banner__swiper .swiper-wrapper,.section-banner__swiper .swiper-slide{height:100%}.section-banner__slide{align-items:center;display:flex;position:relative}.section-banner__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.section-banner__bg video{object-fit:cover;width:100%;height:100%;display:block}.section-banner__bg:after{content:"";background:linear-gradient(90deg,#141c2473 0%,#141c241f 48%,#141c2414 100%);position:absolute;inset:0}.section-banner__content{z-index:1;position:relative}.section-banner .section__eyebrow,.section-banner .section__title{color:var(--color-white)}.section-banner .section__desc{color:var(--color-white);font-size:var(--font-24);line-height:var(--font-32);margin-bottom:3rem}.section-banner__award{z-index:2;align-items:stretch;max-width:36.875rem;height:13.125rem;display:flex;position:absolute;bottom:6.25rem;right:4.375rem}.section-banner__award-card{-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem);min-width:0;color:var(--color-white);background-color:#ffffff29;flex-direction:column;flex:1;justify-content:space-between;padding:1.75rem;display:flex}.section-banner__award-text{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);line-height:var(--font-27);margin-bottom:0}.section-banner__award-link{color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.5rem;display:inline-flex}.section-banner__award-link svg,.section-banner__award-link path{fill:currentColor}.section-banner__award-link:hover{color:var(--color-primary)}.section-banner__award-img{object-fit:cover;object-position:center;flex-shrink:0;width:9.375rem;height:13.125rem}.section-1{background:url(../images/section-1-bg-D1TW0yZ1.png) 100% 100% no-repeat;padding-top:6.875rem;padding-bottom:12.5rem;position:relative;overflow:hidden}.section-1 .section__inner{z-index:1;position:relative}.section-1__header{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:5rem;display:flex}.section-1__header .section__title{margin-bottom:0}.section-1__swiper{margin-bottom:5rem}.section-1__item{cursor:default;flex-direction:column;min-width:0;display:flex}.section-1__head{align-items:flex-start;gap:1rem;margin-bottom:2rem;display:flex}.section-1__icon{width:2.75rem;height:2.75rem;color:var(--color-text);transition:color var(--duration-fast) var(--easing);flex-shrink:0}.section-1__icon svg{width:100%;height:100%;display:block}.section-1__icon [stroke]{stroke:currentColor}.section-1__icon [fill]:not([fill=none]){fill:currentColor}.section-1__item.is-active .section-1__icon,.section-1__item:hover .section-1__icon{color:var(--color-primary)}.section-1__copy{flex:1;min-width:0}.section-1__item-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-22);font-weight:500;line-height:var(--font-29);margin-bottom:.5rem}.section-1__item-desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);-webkit-line-clamp:2;text-overflow:ellipsis;-webkit-box-orient:vertical;min-height:2.625rem;margin-bottom:0;display:-webkit-box;overflow:hidden}.section-1__line{background:#2e353a1a;width:100%;height:1px;margin-bottom:1.75rem;position:relative}.section-1__line:after{content:"";background:var(--color-primary);transform-origin:0;transition:transform var(--duration-slow) var(--easing);position:absolute;inset:0;transform:scaleX(0)}.section-1__item.is-active .section-1__line:after,.section-1__item:hover .section-1__line:after{transform:scaleX(1)}.section-1__img{border-radius:.75rem;width:100%;height:16.25rem;overflow:hidden}.section-1__img img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-slow) var(--easing);display:block}.section-1__item:hover .section-1__img img{transform:scale(1.1)}.section-1__more{justify-content:center;display:flex}.section-1__more.mobile{display:none}.section-2{height:100vh;min-height:50rem;color:var(--color-white);flex-direction:column;justify-content:flex-end;padding-bottom:3rem;display:flex;position:relative;overflow:hidden}.section-2__swiper{z-index:0;width:100%;height:100%;position:absolute;inset:0}.section-2__swiper .swiper-wrapper,.section-2__swiper .swiper-slide{height:100%}.section-2__slide{position:relative}.section-2__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.section-2__bg video{object-fit:cover;width:100%;height:100%;display:block}.section-2__bg:after{content:"";background:linear-gradient(#00000038 0%,#0000001f 42%,#00000094 100%);position:absolute;inset:0}.section-2__mask{z-index:1;pointer-events:none;background:linear-gradient(#0000 0%,#0009 100%);position:absolute;inset:0}.section-2__content{z-index:2;padding-top:13.75rem;position:relative}.section-2 .section__eyebrow,.section-2 .section__title,.section-2 .section__desc{color:var(--color-white)}.section-2 .section__desc{max-width:36.25rem;margin-bottom:2.0625rem}.section-2__tags{flex-wrap:wrap;gap:.75rem;max-width:36.25rem;margin-bottom:3.5rem;display:flex}.section-2__tags li{color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);white-space:nowrap;border-radius:1.875rem;padding:.3125rem 1.125rem}.section-2__nav{z-index:2;align-items:flex-end;gap:0;display:flex;position:relative}.section-2__nav>button:not(.section-2__nav-arrow){color:#ffffff8c;min-width:0;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-15);font-weight:400;line-height:var(--font-22);text-align:left;cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;flex:1;padding:0 .75rem .75rem 0;position:relative}.section-2__nav>button:not(.section-2__nav-arrow):after{content:"";height:.125rem;transition:background var(--duration-fast) var(--easing);background:#ffffff47;position:absolute;bottom:0;left:0;right:.5rem}.section-2__nav>button:not(.section-2__nav-arrow):hover,.section-2__nav>button:not(.section-2__nav-arrow).is-active{color:var(--color-white)}.section-2__nav>button:not(.section-2__nav-arrow).is-active:after,.section-2__nav>button:not(.section-2__nav-arrow):hover:after{background:var(--color-white)}.section-2__nav-index{margin-right:.5rem}.section-2__nav-arrow{cursor:pointer;background:0 0;border:0;flex-shrink:0;width:4.625rem;height:2.5rem;margin-bottom:.125rem;margin-left:1rem;padding:0}.section-2__nav-arrow img{object-fit:contain;width:100%;height:100%;display:block}.section-3{background:var(--color-white);z-index:1;padding-top:6.875rem;padding-bottom:7.5rem;position:relative}.section-3__header{margin-bottom:1.5rem;display:flex}.section-3 .section__desc{max-width:40.0625rem}.section-3__grid{border-left:1px solid #2e353a1a;border-right:1px solid #2e353a1a;grid-template-columns:repeat(3,1fr);margin-top:7.5rem;display:grid}.section-3__card{min-width:0;min-height:13.75rem;transition:transform var(--duration-normal) var(--easing);border-right:1px solid #2e353a1a;align-items:flex-start;gap:1rem;padding:0 2.9375rem;display:flex}.section-3__card:last-child{border-right:0}.section-3__icon{object-fit:contain;flex-shrink:0;width:4.5rem;height:4.5rem}.section-3__card-body{flex-direction:column;flex:1;min-width:0;display:flex}.section-3__card-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);margin-bottom:.5rem}.section-3__card-desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);flex:1;margin-bottom:3rem}.section-3__link{width:fit-content;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.625rem;display:inline-flex}.section-3__link svg{width:1.0625rem;height:.4375rem}.section-3__link path{fill:currentColor}.section-3__link:hover{color:var(--color-primary)}.section-4{background:var(--color-white);padding-top:6.875rem;padding-bottom:8.75rem;position:relative}.section-4__bg{z-index:0;pointer-events:none;background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%;position:absolute;inset:-20% -10%;transform:translate(10%,10%)}.section-4__inner{z-index:1;justify-content:space-between;align-items:flex-start;gap:2.5rem;display:flex;position:relative}.section-4__visual{flex-shrink:0;justify-content:center;align-items:center;width:42.1875rem;height:42.1875rem;display:flex;position:relative}.section-4__earth{width:100%;height:100%;display:block}.section-4__content{flex:1;max-width:45rem;margin-top:4.25rem}.section-4 .section__eyebrow{margin-bottom:1.125rem;font-weight:500}.section-4 .section__title{margin-bottom:1.5rem}.section-4 .section__desc{line-height:var(--font-30);margin-bottom:3rem}.section-4__stats{border-top:1px solid #2e353a1a;flex-direction:column;display:flex}.section-4__stat{border-bottom:1px solid #2e353a1a;justify-content:space-between;align-items:center;padding:3rem 0;display:flex}.section-4__stat-num{flex-shrink:0;font-family:Aldrich,MiSans VF,sans-serif;font-size:5.25rem;font-weight:400;line-height:6.25rem}.section-4__stat-label{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-23);text-align:left}@media (width>=1440px){.section-4__visual{top:calc(110px + var(--header-h));position:sticky}}.section-5{background:var(--color-white);z-index:1;padding-top:8.125rem;padding-bottom:7.5rem;position:relative}.section-5__header{justify-content:space-between;align-items:center;margin-bottom:3.125rem;display:flex}.section-5__body{gap:5.4375rem;display:flex}.section-5__line{background:#2e353a1a;flex-shrink:0;align-self:stretch;width:1px}.section-5__featured{cursor:pointer;flex-direction:column;width:48.125rem;display:flex}.section-5__featured-media{border-radius:1.5rem;width:100%;height:32.5rem;margin-bottom:1.5rem;display:block;overflow:hidden}.section-5__featured-media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.section-5__featured:hover .section-5__featured-media img{transform:scale(1.1)}.section-5__featured-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-28);font-weight:400;line-height:var(--font-37);transition:color var(--duration-fast) var(--easing);margin-bottom:1rem}.section-5__featured:hover .section-5__featured-title{color:var(--color-primary)}.section-5__date{color:var(--color-text-muted);font-family:D-DIN-PRO,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.section-5__list{flex-direction:column;flex:1;min-width:0;display:flex}.section-5__item{cursor:pointer;border-bottom:1px solid #2e353a1a;flex:1;justify-content:space-between;align-items:center;gap:1.875rem;min-height:0;padding:2.5rem 0;display:flex}.section-5__item:first-child{padding-top:0}.section-5__item:last-child{border-bottom:0;padding-bottom:0}.section-5__item:hover .section-5__item-title{color:var(--color-primary)}.section-5__item:hover .section-5__item-media img{transform:scale(1.1)}.section-5__item-body{flex-direction:column;flex:1;justify-content:space-between;align-self:stretch;min-width:0;display:flex}.section-5__item-title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-30);transition:color var(--duration-fast) var(--easing);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.section-5__item-media{border-radius:.75rem;flex-shrink:0;width:14.625rem;height:9.375rem;overflow:hidden}.section-5__item-media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}@media (width<=1439px){.main-home .s-btn{min-width:160px;min-height:48px;font-size:16px}.section-banner{height:100svh}.section-banner .section__desc{margin-bottom:32px;font-size:18px;line-height:26px}.section-banner__award{right:var(--p-x);left:var(--p-x);max-width:none;height:140px;bottom:40px}.section-banner__award-card{padding:16px 20px}.section-banner__award-text{font-size:16px;line-height:22px}.section-banner__award-img{width:100px;height:140px}.section-1{padding-top:80px;padding-bottom:80px}.section-1__header{margin-bottom:40px}.section-1__header .s-arrows{display:none}.section-1__swiper{margin-bottom:48px}.section-1__more{display:none}.section-1__more.mobile{display:flex}.section-2{height:auto;min-height:100dvh;padding-bottom:32px}.section-2__content{padding-top:120px}.section-2__nav{flex-wrap:wrap;gap:16px}.section-2__nav>button:not(.section-2__nav-arrow){flex:30%;font-size:13px}.section-2__nav-arrow{width:48px;height:28px}.section-3{padding-top:72px;padding-bottom:72px}.section-3__header{flex-direction:column;gap:12px;margin-bottom:16px}.section-3 .section__desc{max-width:none}.section-3__grid{border:0;grid-template-columns:1fr;margin-top:48px}.section-3__card{border-bottom:1px solid #2e353a1a;border-right:0;min-height:0;padding:28px 0}.section-3__card:last-child{border-bottom:0}.section-4{padding-top:72px;padding-bottom:80px}.section-4__inner{flex-direction:column-reverse;gap:40px}.section-4__visual{width:100%;max-width:420px;height:420px;margin:0 auto}.section-4__content{max-width:none;margin-top:0}.section-4__stat{padding:28px 0}.section-4__stat-num{font-size:56px;line-height:68px}.section-5{padding-top:72px;padding-bottom:72px}.section-5__header{margin-bottom:32px}.section-5__body{flex-direction:column;gap:32px}.section-5__line{display:none}.section-5__featured{border-bottom:1px solid #2e353a1a;width:100%;padding-bottom:20px}.section-5__featured-media{height:320px}.section-5__item-media{width:160px;height:104px}}@media (width<=576px){.section-banner{height:100svh;min-height:100dvh}.section-banner__slide{padding-top:var(--header-m-h);align-items:center;padding-bottom:160px}.section-banner__content{width:100%}.section-banner .section__title--hero br{display:none}.section-banner .section__desc{margin-bottom:24px;font-size:16px;line-height:24px}.section-banner__award{flex-direction:row;align-items:stretch;height:auto;min-height:0;bottom:20px}.section-banner__award-card{padding:12px 16px}.section-banner__award-text{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:14px;line-height:20px;display:-webkit-box;overflow:hidden}.section-banner__award-img{width:72px;height:100%;min-height:96px}.section-1{background-size:80%;padding-top:56px;padding-bottom:56px}.section-1__header{margin-bottom:28px}.section-1__swiper{margin-bottom:32px}.section-1__head{margin-bottom:16px}.section-1__img{height:200px}.section-2{min-height:100dvh;padding-bottom:24px}.section-2__content{padding-top:64px}.section-2 .section__desc{margin-bottom:20px}.section-2__tags{max-width:none;margin-bottom:28px}.section-2__tags li{padding:4px 12px;font-size:14px}.section-2__nav>button:not(.section-2__nav-arrow){flex:45%;padding-bottom:8px;font-size:16px;line-height:18px}.section-2__nav-arrow{display:none}.section-3{padding-top:48px;padding-bottom:48px}.section-3__grid{margin-top:32px}.section-3__icon{width:48px;height:48px}.section-3__card-title{font-size:20px;line-height:28px}.section-3__card-desc{margin-bottom:20px;font-size:16px;line-height:24px}.section-3__link{font-size:16px}.section-4{padding-top:48px;padding-bottom:56px}.section-4__visual{max-width:280px;height:280px}.section-4 .section__desc{margin-bottom:28px}.section-4__stat{gap:12px;padding:20px 0}.section-4__stat-num{font-size:40px;line-height:48px}.section-4__stat-label{font-size:14px;line-height:20px}.section-5{padding-top:48px;padding-bottom:48px}.section-5__header{flex-direction:row;justify-content:space-between;align-items:center;gap:12px;margin-bottom:24px}.section-5__featured-media{border-radius:12px;height:200px;margin-bottom:16px}.section-5__featured-title{font-size:20px;line-height:28px}.section-5__item{gap:16px;padding:20px 0}.section-5__item-title{font-size:16px;line-height:24px}.section-5__item-media{width:108px;height:72px}.section-5__date{font-size:14px}} diff --git a/public/themes/dist_static/static/css/index.css b/public/themes/dist_static/static/css/index.css new file mode 100644 index 0000000..80924ba --- /dev/null +++ b/public/themes/dist_static/static/css/index.css @@ -0,0 +1,1008 @@ +.main-home .s-btn { + min-width: 12.5rem; + min-height: 3.625rem; + padding: 0 2rem; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: 1; +} + +.section-banner { + position: relative; + height: 100vh; + overflow: hidden; +} +.section-banner__swiper { + width: 100%; + height: 100%; +} +.section-banner__swiper .swiper-wrapper, +.section-banner__swiper .swiper-slide { + height: 100%; +} +.section-banner__slide { + display: flex; + align-items: center; + position: relative; +} +.section-banner__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.section-banner__bg video { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} +.section-banner__bg::after { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(90deg, rgba(20, 28, 36, 0.45) 0%, rgba(20, 28, 36, 0.12) 48%, rgba(20, 28, 36, 0.08) 100%); +} +.section-banner__content { + position: relative; + z-index: 1; +} +.section-banner .section__eyebrow, +.section-banner .section__title { + color: var(--color-white); +} +.section-banner .section__desc { + margin-bottom: 3rem; + color: var(--color-white); + font-size: var(--font-24); + line-height: var(--font-32); +} +.section-banner__award { + position: absolute; + right: 4.375rem; + bottom: 6.25rem; + z-index: 2; + display: flex; + align-items: stretch; + height: 13.125rem; + max-width: 36.875rem; +} +.section-banner__award-card { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 1.75rem; + background-color: rgba(255, 255, 255, 0.16); + backdrop-filter: blur(1rem); + color: var(--color-white); +} +.section-banner__award-text { + margin-bottom: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + line-height: var(--font-27); +} +.section-banner__award-link { + display: inline-flex; + align-items: center; + gap: 0.5rem; + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + transition: color var(--duration-fast) var(--easing); +} +.section-banner__award-link svg, +.section-banner__award-link path { + fill: currentColor; +} +.section-banner__award-link:hover { + color: var(--color-primary); +} +.section-banner__award-img { + width: 9.375rem; + height: 13.125rem; + flex-shrink: 0; + object-fit: cover; + object-position: center; +} + +.section-1 { + position: relative; + padding-top: 6.875rem; + padding-bottom: 12.5rem; + overflow: hidden; + background: url("../images/section-1-bg-D1TW0yZ1.png") no-repeat right bottom; +} +.section-1 .section__inner { + position: relative; + z-index: 1; +} +.section-1__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 5rem; +} +.section-1__header .section__title { + margin-bottom: 0; +} +.section-1__swiper { + margin-bottom: 5rem; +} +.section-1__item { + display: flex; + flex-direction: column; + min-width: 0; + cursor: default; +} +.section-1__head { + display: flex; + align-items: flex-start; + gap: 1rem; + margin-bottom: 2rem; +} +.section-1__icon { + width: 2.75rem; + height: 2.75rem; + flex-shrink: 0; + color: var(--color-text); + transition: color var(--duration-fast) var(--easing); +} +.section-1__icon svg { + display: block; + width: 100%; + height: 100%; +} +.section-1__icon [stroke] { + stroke: currentColor; +} +.section-1__icon [fill]:not([fill=none]) { + fill: currentColor; +} +.section-1__item.is-active .section-1__icon, .section-1__item:hover .section-1__icon { + color: var(--color-primary); +} +.section-1__copy { + flex: 1; + min-width: 0; +} +.section-1__item-title { + margin-bottom: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-22); + font-weight: 500; + line-height: var(--font-29); +} +.section-1__item-desc { + margin-bottom: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + min-height: 2.625rem; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} +.section-1__line { + position: relative; + width: 100%; + height: 1px; + margin-bottom: 1.75rem; + background: rgba(46, 53, 58, 0.1); +} +.section-1__line::after { + content: ""; + position: absolute; + inset: 0; + background: var(--color-primary); + transform: scaleX(0); + transform-origin: left; + transition: transform var(--duration-slow) var(--easing); +} +.section-1__item.is-active .section-1__line::after, .section-1__item:hover .section-1__line::after { + transform: scaleX(1); +} +.section-1__img { + width: 100%; + height: 16.25rem; + border-radius: 0.75rem; + overflow: hidden; +} +.section-1__img img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + transition: transform var(--duration-slow) var(--easing); +} +.section-1__item:hover .section-1__img img { + transform: scale(1.1); +} +.section-1__more { + display: flex; + justify-content: center; +} +.section-1__more.mobile { + display: none; +} + +.section-2 { + position: relative; + height: 100vh; + min-height: 50rem; + display: flex; + flex-direction: column; + justify-content: flex-end; + padding-bottom: 3rem; + overflow: hidden; + color: var(--color-white); +} +.section-2__swiper { + position: absolute; + inset: 0; + z-index: 0; + width: 100%; + height: 100%; +} +.section-2__swiper .swiper-wrapper, +.section-2__swiper .swiper-slide { + height: 100%; +} +.section-2__slide { + position: relative; +} +.section-2__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.section-2__bg video { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} +.section-2__bg::after { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(180deg, rgba(0, 0, 0, 0.22) 0%, rgba(0, 0, 0, 0.12) 42%, rgba(0, 0, 0, 0.58) 100%); +} +.section-2__mask { + position: absolute; + inset: 0; + z-index: 1; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%); + pointer-events: none; +} +.section-2__content { + position: relative; + z-index: 2; + padding-top: 13.75rem; +} +.section-2 .section__eyebrow, +.section-2 .section__title, +.section-2 .section__desc { + color: var(--color-white); +} +.section-2 .section__desc { + max-width: 36.25rem; + margin-bottom: 2.0625rem; +} +.section-2__tags { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + max-width: 36.25rem; + margin-bottom: 3.5rem; +} +.section-2__tags li { + padding: 0.3125rem 1.125rem; + border-radius: 1.875rem; + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + white-space: nowrap; +} +.section-2__nav { + position: relative; + z-index: 2; + display: flex; + align-items: flex-end; + gap: 0; +} +.section-2__nav > button:not(.section-2__nav-arrow) { + flex: 1; + min-width: 0; + padding: 0 0.75rem 0.75rem 0; + border: 0; + background: transparent; + color: rgba(255, 255, 255, 0.55); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-15); + font-weight: 400; + line-height: var(--font-22); + text-align: left; + cursor: pointer; + position: relative; + transition: color var(--duration-fast) var(--easing); +} +.section-2__nav > button:not(.section-2__nav-arrow)::after { + content: ""; + position: absolute; + left: 0; + right: 0.5rem; + bottom: 0; + height: 0.125rem; + background: rgba(255, 255, 255, 0.28); + transition: background var(--duration-fast) var(--easing); +} +.section-2__nav > button:not(.section-2__nav-arrow):hover, .section-2__nav > button:not(.section-2__nav-arrow).is-active { + color: var(--color-white); +} +.section-2__nav > button:not(.section-2__nav-arrow).is-active::after, .section-2__nav > button:not(.section-2__nav-arrow):hover::after { + background: var(--color-white); +} +.section-2__nav-index { + margin-right: 0.5rem; +} +.section-2__nav-arrow { + width: 4.625rem; + height: 2.5rem; + flex-shrink: 0; + margin-left: 1rem; + margin-bottom: 0.125rem; + padding: 0; + border: 0; + background: transparent; + cursor: pointer; +} +.section-2__nav-arrow img { + display: block; + width: 100%; + height: 100%; + object-fit: contain; +} + +.section-3 { + padding-top: 6.875rem; + padding-bottom: 7.5rem; + background: var(--color-white); + position: relative; + z-index: 1; +} +.section-3__header { + display: flex; + margin-bottom: 1.5rem; +} +.section-3 .section__desc { + max-width: 40.0625rem; +} +.section-3__grid { + margin-top: 7.5rem; + display: grid; + grid-template-columns: repeat(3, 1fr); + border-left: 1px solid rgba(46, 53, 58, 0.1); + border-right: 1px solid rgba(46, 53, 58, 0.1); +} +.section-3__card { + display: flex; + align-items: flex-start; + gap: 1rem; + min-width: 0; + min-height: 13.75rem; + padding: 0 2.9375rem; + border-right: 1px solid rgba(46, 53, 58, 0.1); + transition: transform var(--duration-normal) var(--easing); +} +.section-3__card:last-child { + border-right: 0; +} +.section-3__icon { + width: 4.5rem; + height: 4.5rem; + flex-shrink: 0; + object-fit: contain; +} +.section-3__card-body { + display: flex; + flex-direction: column; + min-width: 0; + flex: 1; +} +.section-3__card-title { + margin-bottom: 0.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.section-3__card-desc { + flex: 1; + margin-bottom: 3rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.section-3__link { + display: inline-flex; + align-items: center; + gap: 0.625rem; + width: fit-content; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + transition: color var(--duration-fast) var(--easing); +} +.section-3__link svg { + width: 1.0625rem; + height: 0.4375rem; +} +.section-3__link path { + fill: currentColor; +} +.section-3__link:hover { + color: var(--color-primary); +} + +.section-4 { + position: relative; + padding-top: 6.875rem; + padding-bottom: 8.75rem; + background: var(--color-white); +} +.section-4__bg { + position: absolute; + inset: -20% -10%; + z-index: 0; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + transform: translate(10%, 10%); + pointer-events: none; + width: 100%; +} +.section-4__inner { + position: relative; + z-index: 1; + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 2.5rem; +} +.section-4__visual { + position: relative; + width: 42.1875rem; + height: 42.1875rem; + flex-shrink: 0; + display: flex; + justify-content: center; + align-items: center; +} +.section-4__earth { + width: 100%; + height: 100%; + display: block; +} +.section-4__content { + flex: 1; + max-width: 45rem; + margin-top: 4.25rem; +} +.section-4 .section__eyebrow { + margin-bottom: 1.125rem; + font-weight: 500; +} +.section-4 .section__title { + margin-bottom: 1.5rem; +} +.section-4 .section__desc { + margin-bottom: 3rem; + line-height: var(--font-30); +} +.section-4__stats { + display: flex; + flex-direction: column; + border-top: 1px solid rgba(46, 53, 58, 0.1); +} +.section-4__stat { + display: flex; + align-items: center; + justify-content: space-between; + padding: 3rem 0; + border-bottom: 1px solid rgba(46, 53, 58, 0.1); +} +.section-4__stat-num { + flex-shrink: 0; + font-family: "Aldrich", "MiSans VF", sans-serif; + font-size: 5.25rem; + font-weight: 400; + line-height: 6.25rem; +} +.section-4__stat-label { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-23); + text-align: left; +} + +@media (min-width: 1440px) { + .section-4__visual { + position: sticky; + top: calc(110Px + var(--header-h)); + } +} +.section-5 { + padding-top: 8.125rem; + padding-bottom: 7.5rem; + background: var(--color-white); + position: relative; + z-index: 1; +} +.section-5__header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 3.125rem; +} +.section-5__body { + display: flex; + gap: 5.4375rem; +} +.section-5__line { + width: 1px; + flex-shrink: 0; + align-self: stretch; + background: rgba(46, 53, 58, 0.1); +} +.section-5__featured { + width: 48.125rem; + display: flex; + flex-direction: column; + cursor: pointer; +} +.section-5__featured-media { + display: block; + width: 100%; + height: 32.5rem; + margin-bottom: 1.5rem; + border-radius: 1.5rem; + overflow: hidden; +} +.section-5__featured-media img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + transition: transform var(--duration-normal) var(--easing); +} +.section-5__featured:hover .section-5__featured-media img { + transform: scale(1.1); +} +.section-5__featured-title { + margin-bottom: 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-28); + font-weight: 400; + line-height: var(--font-37); + transition: color var(--duration-fast) var(--easing); +} +.section-5__featured:hover .section-5__featured-title { + color: var(--color-primary); +} +.section-5__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.section-5__list { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} +.section-5__item { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.875rem; + flex: 1; + min-height: 0; + padding: 2.5rem 0; + border-bottom: 1px solid rgba(46, 53, 58, 0.1); + cursor: pointer; +} +.section-5__item:first-child { + padding-top: 0; +} +.section-5__item:last-child { + border-bottom: 0; + padding-bottom: 0; +} +.section-5__item:hover .section-5__item-title { + color: var(--color-primary); +} +.section-5__item:hover .section-5__item-media img { + transform: scale(1.1); +} +.section-5__item-body { + flex: 1; + min-width: 0; + align-self: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; +} +.section-5__item-title { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-30); + transition: color var(--duration-fast) var(--easing); + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} +.section-5__item-media { + flex-shrink: 0; + width: 14.625rem; + height: 9.375rem; + border-radius: 0.75rem; + overflow: hidden; +} +.section-5__item-media img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + transition: transform var(--duration-normal) var(--easing); +} + +@media (max-width: 1439px) { + .main-home .s-btn { + min-width: 160Px; + min-height: 48Px; + font-size: 16Px; + } + .section-banner { + height: 100svh; + } + .section-banner .section__desc { + margin-bottom: 32Px; + font-size: 18Px; + line-height: 26Px; + } + .section-banner__award { + right: var(--p-x); + left: var(--p-x); + bottom: 40Px; + max-width: none; + height: 140Px; + } + .section-banner__award-card { + padding: 16Px 20Px; + } + .section-banner__award-text { + font-size: 16Px; + line-height: 22Px; + } + .section-banner__award-img { + width: 100Px; + height: 140Px; + } + .section-1 { + padding-top: 80Px; + padding-bottom: 80Px; + } + .section-1__header { + margin-bottom: 40Px; + } + .section-1__header .s-arrows { + display: none; + } + .section-1__swiper { + margin-bottom: 48Px; + } + .section-1__more { + display: none; + } + .section-1__more.mobile { + display: flex; + } + .section-2 { + height: auto; + min-height: 100svh; + min-height: 100dvh; + padding-bottom: 32Px; + } + .section-2__content { + padding-top: 120Px; + } + .section-2__nav { + flex-wrap: wrap; + gap: 16Px; + } + .section-2__nav > button:not(.section-2__nav-arrow) { + flex: 1 1 30%; + font-size: 13Px; + } + .section-2__nav-arrow { + width: 48Px; + height: 28Px; + } + .section-3 { + padding-top: 72Px; + padding-bottom: 72Px; + } + .section-3__header { + flex-direction: column; + gap: 12Px; + margin-bottom: 16Px; + } + .section-3 .section__desc { + max-width: none; + } + .section-3__grid { + margin-top: 48Px; + grid-template-columns: 1fr; + border: 0; + } + .section-3__card { + min-height: 0; + padding: 28Px 0; + border-right: 0; + border-bottom: 1Px solid rgba(46, 53, 58, 0.1); + } + .section-3__card:last-child { + border-bottom: 0; + } + .section-4 { + padding-top: 72Px; + padding-bottom: 80Px; + } + .section-4__inner { + flex-direction: column-reverse; + gap: 40Px; + } + .section-4__visual { + width: 100%; + max-width: 420Px; + height: 420Px; + margin: 0 auto; + } + .section-4__content { + max-width: none; + margin-top: 0; + } + .section-4__stat { + padding: 28Px 0; + } + .section-4__stat-num { + font-size: 56Px; + line-height: 68Px; + } + .section-5 { + padding-top: 72Px; + padding-bottom: 72Px; + } + .section-5__header { + margin-bottom: 32Px; + } + .section-5__body { + flex-direction: column; + gap: 32Px; + } + .section-5__line { + display: none; + } + .section-5__featured { + width: 100%; + padding-bottom: 20Px; + border-bottom: 1Px solid rgba(46, 53, 58, 0.1); + } + .section-5__featured-media { + height: 320Px; + } + .section-5__item-media { + width: 160Px; + height: 104Px; + } +} +@media (max-width: 576px) { + .section-banner { + height: 100svh; + min-height: 100svh; + min-height: 100dvh; + } + .section-banner__slide { + padding-top: var(--header-m-h); + padding-bottom: 160Px; + align-items: center; + } + .section-banner__content { + width: 100%; + } + .section-banner .section__title--hero br { + display: none; + } + .section-banner .section__desc { + margin-bottom: 24Px; + font-size: 16Px; + line-height: 24Px; + } + .section-banner__award { + height: auto; + min-height: 0; + bottom: 20Px; + flex-direction: row; + align-items: stretch; + } + .section-banner__award-card { + padding: 12Px 16Px; + } + .section-banner__award-text { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + font-size: 14Px; + line-height: 20Px; + } + .section-banner__award-img { + width: 72Px; + height: 100%; + min-height: 96Px; + } + .section-1 { + padding-top: 56Px; + padding-bottom: 56Px; + background-size: 80% auto; + } + .section-1__header { + margin-bottom: 28Px; + } + .section-1__swiper { + margin-bottom: 32Px; + } + .section-1__head { + margin-bottom: 16Px; + } + .section-1__img { + height: 200Px; + } + .section-2 { + min-height: 100svh; + min-height: 100dvh; + padding-bottom: 24Px; + } + .section-2__content { + padding-top: 64Px; + } + .section-2 .section__desc { + margin-bottom: 20Px; + } + .section-2__tags { + max-width: none; + margin-bottom: 28Px; + } + .section-2__tags li { + font-size: 14Px; + padding: 4Px 12Px; + } + .section-2__nav > button:not(.section-2__nav-arrow) { + flex: 1 1 45%; + padding-bottom: 8Px; + font-size: 16Px; + line-height: 18Px; + } + .section-2__nav-arrow { + display: none; + } + .section-3 { + padding-top: 48Px; + padding-bottom: 48Px; + } + .section-3__grid { + margin-top: 32Px; + } + .section-3__icon { + width: 48Px; + height: 48Px; + } + .section-3__card-title { + font-size: 20Px; + line-height: 28Px; + } + .section-3__card-desc { + margin-bottom: 20Px; + font-size: 16Px; + line-height: 24Px; + } + .section-3__link { + font-size: 16Px; + } + .section-4 { + padding-top: 48Px; + padding-bottom: 56Px; + } + .section-4__visual { + max-width: 280Px; + height: 280Px; + } + .section-4 .section__desc { + margin-bottom: 28Px; + } + .section-4__stat { + padding: 20Px 0; + gap: 12Px; + } + .section-4__stat-num { + font-size: 40Px; + line-height: 48Px; + } + .section-4__stat-label { + font-size: 14Px; + line-height: 20Px; + } + .section-5 { + padding-top: 48Px; + padding-bottom: 48Px; + } + .section-5__header { + flex-direction: row; + align-items: center; + justify-content: space-between; + gap: 12Px; + margin-bottom: 24Px; + } + .section-5__featured-media { + height: 200Px; + border-radius: 12Px; + margin-bottom: 16Px; + } + .section-5__featured-title { + font-size: 20Px; + line-height: 28Px; + } + .section-5__item { + padding: 20Px 0; + gap: 16Px; + } + .section-5__item-title { + font-size: 16Px; + line-height: 24Px; + } + .section-5__item-media { + width: 108Px; + height: 72Px; + } + .section-5__date { + font-size: 14Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/investment-pb4FAeRx.css b/public/themes/dist_static/static/css/investment-pb4FAeRx.css new file mode 100644 index 0000000..d99e476 --- /dev/null +++ b/public/themes/dist_static/static/css/investment-pb4FAeRx.css @@ -0,0 +1 @@ +.main-investment{background:var(--color-white);overflow:hidden}.iv-hero__title{padding-top:calc(var(--header-h) + 7.5rem);padding-bottom:2.5rem}.iv-hero__title h1{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);flex-direction:column;margin:0;display:flex}.iv-hero__media{width:100%;height:45rem;overflow:hidden}.iv-hero__media img{object-fit:cover;width:100%;height:100%;display:block}.iv-info{grid-template-columns:minmax(0,1fr) minmax(0,67.5rem);gap:2.5rem;padding-top:6.25rem;padding-bottom:0;display:grid}.iv-info__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.iv-info__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 2.5rem;display:grid}.iv-info__item{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1rem;padding:2rem 0;display:flex}.iv-info__item--full{grid-column:1/-1}.iv-info__label{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.iv-info__value{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);margin:0}.iv-announce{padding-top:6.25rem;padding-bottom:0}.iv-announce__head{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:3.125rem;display:flex}.iv-announce__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.iv-announce__swiper{overflow:hidden}.iv-announce__card{width:auto;height:auto;min-height:20rem;color:var(--color-text);box-sizing:border-box;background:#f1f1f1;border-radius:1.5rem;flex-direction:column;justify-content:space-between;gap:1.5rem;padding:2.5rem;transition:background .3s,color .3s;display:flex}.iv-announce__card:hover{background:var(--color-primary);color:var(--color-white)}.iv-announce__card:hover .iv-announce__date{color:var(--color-white)}.iv-announce__card:hover .iv-announce__link{color:var(--color-white);border-color:#ffffff26}.iv-announce__card:hover .iv-announce__link path{fill:currentColor}.iv-announce__date{color:var(--color-text-muted);font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-16);opacity:.8;display:block}.iv-announce__name{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);flex:1;margin:0}.iv-announce__link{width:100%;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);transition:color var(--duration-fast) var(--easing), border-color var(--duration-fast) var(--easing);border-top:1px solid #dfe0e2;justify-content:space-between;align-items:center;gap:.625rem;margin-top:auto;padding-top:1.5rem;text-decoration:none;display:inline-flex}.iv-announce__link svg{flex-shrink:0;width:1rem;height:.875rem;display:block}.iv-announce__link path{fill:currentColor}.iv-stock{padding-top:6.25rem;padding-bottom:0}.iv-stock__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 6rem}.iv-stock__body{grid-template-columns:minmax(0,50rem) minmax(0,45rem);align-items:start;gap:6.875rem;display:grid}.iv-stock__code{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:500;line-height:var(--font-24);margin:0 0 1.125rem}.iv-stock__quote{color:var(--color-primary);align-items:baseline;margin-bottom:5rem;display:flex}.iv-stock__price{font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-60);font-weight:500;line-height:var(--font-60)}.iv-stock__unit{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:500;line-height:var(--font-30)}.iv-stock__change{font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-18);font-weight:500;line-height:var(--font-18);margin-left:1.75rem}.iv-stock__metrics{grid-template-columns:repeat(4,minmax(0,1fr));gap:1.5rem 4rem;margin:0 0 5.625rem;padding:0;list-style:none;display:grid}.iv-stock__metric-label{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-26);margin-bottom:1rem;display:block}.iv-stock__metric-value{color:var(--color-text);font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-32);font-weight:500;line-height:var(--font-38);display:block}.iv-stock__note{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-26);margin:0}.iv-stock__chart{border:1px solid #dfe0e2;border-radius:1.875rem;padding:1.75rem;overflow:hidden}.iv-stock__chart img{width:100%;height:auto;display:block}.iv-learn{grid-template-columns:minmax(0,1fr) minmax(0,67.5rem);gap:2.5rem;padding-top:6.25rem;padding-bottom:0;display:grid}.iv-learn__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.iv-learn__list{margin:0;padding:0;list-style:none}.iv-learn__item{cursor:pointer;min-height:6.25rem;transition:border-color var(--duration-fast) var(--easing);border-bottom:1px solid #dfe0e2;grid-template-columns:8.75rem minmax(0,1fr) auto;align-items:center;padding:2.125rem 0;text-decoration:none;display:grid}.iv-learn__item:hover{border-bottom-color:var(--color-primary)}.iv-learn__item:hover .iv-learn__name,.iv-learn__item:hover .iv-learn__link{color:var(--color-primary)}.iv-learn__date{color:var(--color-text-muted);font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-16)}.iv-learn__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);transition:color var(--duration-fast) var(--easing);margin:0}.iv-learn__link{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);white-space:nowrap;transition:color var(--duration-fast) var(--easing);align-items:center;gap:.625rem;text-decoration:none;display:inline-flex}.iv-learn__link svg{width:1rem;height:.875rem;display:block}.iv-learn__link path{fill:currentColor}.iv-learn__more{color:#2e353a99;cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:.25rem;margin-top:2rem;padding:0;display:inline-flex}.iv-learn__more:hover{color:var(--color-primary)}.iv-learn__more-icon{line-height:0;display:block}.iv-learn__more-icon svg{width:.75rem;height:auto;display:block}.iv-learn__more-icon--up{opacity:.35;transform:scaleY(-1)}.iv-learn__more-icon--down{opacity:1}.iv-hotline{min-height:50rem;color:var(--color-white);position:relative}.iv-hotline__bg{z-index:0;position:absolute;inset:0;overflow:hidden}.iv-hotline__bg img{object-fit:cover;width:100%;height:100%;display:block}.iv-hotline__bg:after{content:"";background:#2e353a4d;position:absolute;inset:0}.iv-hotline__inner{z-index:1;grid-template-columns:minmax(0,1fr) minmax(0,34.25rem);gap:2.5rem;padding-top:6.25rem;padding-bottom:7.5rem;display:grid;position:relative}.iv-hotline__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.iv-hotline__list{margin:0;padding:0;list-style:none}.iv-hotline__item{border-bottom:1px solid #ffffff26;padding:2rem 0}.iv-hotline__row{align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.iv-hotline__icon{flex-shrink:0;width:1.5rem;height:1.5rem;display:block}.iv-hotline__label{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24)}.iv-hotline__value{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-27);margin:0;padding-left:2.5rem}.iv-hotline__value a{color:inherit;text-decoration:none}.iv-hotline__value a:hover{text-decoration:underline}@media (width<=1439px){.iv-hero__title h1{font-size:40px;line-height:54px}.iv-hero__media{height:520px}.iv-info,.iv-learn,.iv-hotline__inner{grid-template-columns:1fr;gap:32px}.iv-info,.iv-announce,.iv-stock,.iv-learn{padding-top:80px;padding-bottom:80px}.iv-stock__body{grid-template-columns:1fr;gap:40px}.iv-stock__title{margin-bottom:48px}.iv-stock__metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 40px}}@media (width<=992px){.iv-info__grid{grid-template-columns:1fr}.iv-announce__card{min-height:280px;padding:28px}.iv-learn__item{grid-template-columns:1fr;align-items:flex-start;gap:12px}}@media (width<=576px){.iv-hero__title{padding-top:calc(var(--header-h) + 5rem);padding-bottom:24px}.iv-hero__title h1{font-size:28px;line-height:40px}.iv-hero__media{height:280px}.iv-info__title,.iv-announce__title,.iv-stock__title,.iv-learn__title,.iv-hotline__title{font-size:32px;line-height:44px}.iv-info__value,.iv-announce__name,.iv-learn__name,.iv-hotline__value{font-size:18px;line-height:26px}.iv-stock__price{font-size:44px;line-height:44px}.iv-stock__metrics{grid-template-columns:1fr 1fr}} diff --git a/public/themes/dist_static/static/css/investment.css b/public/themes/dist_static/static/css/investment.css new file mode 100644 index 0000000..917327f --- /dev/null +++ b/public/themes/dist_static/static/css/investment.css @@ -0,0 +1,579 @@ +.main-investment { + background: var(--color-white); + overflow: hidden; +} + +.iv-hero__title { + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 2.5rem; +} +.iv-hero__title h1 { + display: flex; + flex-direction: column; + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-hero__media { + width: 100%; + height: 45rem; + overflow: hidden; +} +.iv-hero__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.iv-info { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 67.5rem); + gap: 2.5rem; + padding-top: 6.25rem; + padding-bottom: 0; +} +.iv-info__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-info__grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0 2.5rem; +} +.iv-info__item { + display: flex; + flex-direction: column; + gap: 1rem; + padding: 2rem 0; + border-bottom: 1px solid rgb(223, 224, 226); +} +.iv-info__item--full { + grid-column: 1/-1; +} +.iv-info__label { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.iv-info__value { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} + +.iv-announce { + padding-top: 6.25rem; + padding-bottom: 0; +} +.iv-announce__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 3.125rem; +} +.iv-announce__head .s-arrows { + display: flex; +} +.iv-announce__arrows-mobile { + display: none; +} +.iv-announce__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-announce__swiper { + overflow: hidden; +} +.iv-announce__card { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 1.5rem; + width: auto; + height: auto; + min-height: 20rem; + padding: 2.5rem; + border-radius: 1.5rem; + background: rgb(241, 241, 241); + color: var(--color-text); + box-sizing: border-box; + transition: background 0.3s ease, color 0.3s ease; +} +.iv-announce__card:hover { + background: var(--color-primary); + color: var(--color-white); +} +.iv-announce__card:hover .iv-announce__date { + color: var(--color-white); +} +.iv-announce__card:hover .iv-announce__link { + color: var(--color-white); + border-color: rgba(255, 255, 255, 0.15); +} +.iv-announce__card:hover .iv-announce__link path { + fill: currentColor; +} +.iv-announce__date { + display: block; + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-16); + opacity: 0.8; +} +.iv-announce__name { + margin: 0; + flex: 1; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.iv-announce__link { + display: inline-flex; + align-items: center; + justify-content: space-between; + gap: 0.625rem; + width: 100%; + margin-top: auto; + padding-top: 1.5rem; + border-top: 1px solid rgb(223, 224, 226); + color: var(--color-text-muted); + text-decoration: none; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + transition: color var(--duration-fast) var(--easing), border-color var(--duration-fast) var(--easing); +} +.iv-announce__link svg { + width: 1rem; + height: 0.875rem; + display: block; + flex-shrink: 0; +} +.iv-announce__link path { + fill: currentColor; +} + +.iv-stock { + padding-top: 6.25rem; + padding-bottom: 0; +} +.iv-stock__title { + margin: 0 0 6rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-stock__body { + display: grid; + grid-template-columns: minmax(0, 50rem) minmax(0, 45rem); + gap: 6.875rem; + align-items: start; +} +.iv-stock__code { + margin: 0 0 1.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-24); +} +.iv-stock__quote { + display: flex; + align-items: baseline; + margin-bottom: 5rem; + color: var(--color-primary); +} +.iv-stock__price { + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-60); + font-weight: 500; + line-height: var(--font-60); +} +.iv-stock__unit { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-30); +} +.iv-stock__change { + margin-left: 1.75rem; + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-18); + font-weight: 500; + line-height: var(--font-18); +} +.iv-stock__metrics { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 1.5rem 4rem; + margin: 0 0 5.625rem; + padding: 0; + list-style: none; +} +.iv-stock__metric-label { + display: block; + margin-bottom: 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-26); +} +.iv-stock__metric-value { + display: block; + color: var(--color-text); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-32); + font-weight: 500; + line-height: var(--font-38); +} +.iv-stock__note { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-26); +} +.iv-stock__chart { + overflow: hidden; + border-radius: 1.875rem; + padding: 1.75rem; + border: 1px solid rgb(223, 224, 226); +} +.iv-stock__chart img { + display: block; + width: 100%; + height: auto; +} + +.iv-learn { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 67.5rem); + gap: 2.5rem; + padding-top: 6.25rem; + padding-bottom: 0; +} +.iv-learn__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-learn__list { + margin: 0; + padding: 0; + list-style: none; +} +.iv-learn__item { + display: grid; + grid-template-columns: 8.75rem minmax(0, 1fr) auto; + align-items: center; + min-height: 6.25rem; + padding: 2.125rem 0; + border-bottom: 1px solid rgb(223, 224, 226); + cursor: pointer; + text-decoration: none; + transition: border-color var(--duration-fast) var(--easing); +} +.iv-learn__item:hover { + border-bottom-color: var(--color-primary); +} +.iv-learn__item:hover .iv-learn__name { + color: var(--color-primary); +} +.iv-learn__item:hover .iv-learn__link { + color: var(--color-primary); +} +.iv-learn__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-16); +} +.iv-learn__name { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); + transition: color var(--duration-fast) var(--easing); +} +.iv-learn__link { + display: inline-flex; + align-items: center; + gap: 0.625rem; + color: var(--color-text-muted); + text-decoration: none; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + white-space: nowrap; + transition: color var(--duration-fast) var(--easing); +} +.iv-learn__link svg { + width: 1rem; + height: 0.875rem; + display: block; +} +.iv-learn__link path { + fill: currentColor; +} +.iv-learn__more { + display: inline-flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0.25rem; + margin-top: 2rem; + padding: 0; + border: 0; + background: transparent; + color: rgba(46, 53, 58, 0.6); + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +} +.iv-learn__more:hover { + color: var(--color-primary); +} +.iv-learn__more-icon { + display: block; + line-height: 0; +} +.iv-learn__more-icon svg { + display: block; + width: 0.75rem; + height: auto; +} +.iv-learn__more-icon--up { + opacity: 0.35; + transform: scaleY(-1); +} +.iv-learn__more-icon--down { + opacity: 1; +} + +.iv-hotline { + position: relative; + min-height: 50rem; + color: var(--color-white); +} +.iv-hotline__bg { + position: absolute; + inset: 0; + z-index: 0; + overflow: hidden; +} +.iv-hotline__bg img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} +.iv-hotline__bg::after { + content: ""; + position: absolute; + inset: 0; + background: rgba(46, 53, 58, 0.3); +} +.iv-hotline__inner { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 34.25rem); + gap: 2.5rem; + padding-top: 6.25rem; + padding-bottom: 7.5rem; +} +.iv-hotline__title { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.iv-hotline__list { + margin: 0; + padding: 0; + list-style: none; +} +.iv-hotline__item { + padding: 2rem 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.15); +} +.iv-hotline__row { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 1rem; +} +.iv-hotline__icon { + display: block; + width: 1.5rem; + height: 1.5rem; + flex-shrink: 0; +} +.iv-hotline__label { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} +.iv-hotline__value { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-27); + padding-left: 2.5rem; +} +.iv-hotline__value a { + color: inherit; + text-decoration: none; +} +.iv-hotline__value a:hover { + text-decoration: underline; +} + +@media (max-width: 1439px) { + .iv-hero__title h1 { + font-size: 40Px; + line-height: 54Px; + } + .iv-hero__media { + height: 520Px; + } + .iv-info, + .iv-learn, + .iv-hotline__inner { + grid-template-columns: 1fr; + gap: 32Px; + } + .iv-info, + .iv-announce, + .iv-stock, + .iv-learn { + padding-top: 80Px; + padding-bottom: 80Px; + } + .iv-stock__body { + grid-template-columns: 1fr; + gap: 40Px; + } + .iv-stock__title { + margin-bottom: 48Px; + } + .iv-stock__metrics { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 24Px 40Px; + } +} +@media (max-width: 992px) { + .iv-info__grid { + grid-template-columns: 1fr; + } + .iv-announce__card { + min-height: 280Px; + padding: 28Px; + } + .iv-learn__item { + grid-template-columns: 1fr; + gap: 12Px; + align-items: flex-start; + } +} +@media (max-width: 576px) { + .iv-hero__title { + padding-top: calc(var(--header-h) + 5rem); + padding-bottom: 24Px; + } + .iv-hero__title h1 { + font-size: 28Px; + line-height: 40Px; + } + .iv-hero__media { + height: 280Px; + } + .iv-info__title, + .iv-announce__title, + .iv-stock__title, + .iv-learn__title, + .iv-hotline__title { + font-size: 32Px; + line-height: 44Px; + } + .iv-info__value, + .iv-announce__name, + .iv-learn__name, + .iv-hotline__value { + font-size: 18Px; + line-height: 26Px; + } + .iv-stock__price { + font-size: 44Px; + line-height: 44Px; + } + .iv-stock__metrics { + grid-template-columns: 1fr 1fr; + } + .iv-info, + .iv-announce, + .iv-stock, + .iv-learn { + padding-top: 4rem; + } + .iv-info, + .iv-announce, + .iv-stock, + .iv-hotline { + padding-bottom: 0; + } + .iv-learn { + padding-bottom: 4rem; + } + .iv-hotline { + padding-bottom: 0; + } + .iv-announce__head .s-arrows { + display: none; + } + .iv-announce__arrows-mobile { + display: flex; + justify-content: flex-start; + margin-top: 24Px; + } + .iv-announce__arrows-mobile .s-arrows { + display: flex; + gap: 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/news-3CtpieBF.css b/public/themes/dist_static/static/css/news-3CtpieBF.css new file mode 100644 index 0000000..06fc35a --- /dev/null +++ b/public/themes/dist_static/static/css/news-3CtpieBF.css @@ -0,0 +1 @@ +.main-news{background:var(--color-white)}.n-page{padding-top:calc(var(--header-h) + 7.5rem);padding-bottom:6.25rem}.n-head{justify-content:space-between;align-items:flex-end;gap:2.5rem;margin-bottom:3.5rem;display:flex}.n-head__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);flex-direction:column;margin:0;display:flex}.n-tabs{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:1rem;display:flex}.n-tabs__item{color:#2e353a99;min-height:3rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:default;background:#afb5b926;border:0;border-radius:6.25rem;padding:.75rem 2rem}.n-tabs__item.is-active{background:var(--color-primary);color:var(--color-white)}.n-link{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);transition:color var(--duration-fast) var(--easing);align-items:center;gap:.625rem;text-decoration:none;display:inline-flex}.n-link img{width:1rem;height:auto;transition:filter var(--duration-fast) var(--easing);display:block}.n-link:hover{color:var(--color-primary)}.n-link:hover img{filter:brightness(0)saturate()invert(36%)sepia(74%)saturate(2148%)hue-rotate(339deg)brightness(97%)contrast(92%)}.n-link--sm{font-size:var(--font-16);line-height:var(--font-22);gap:.625rem}.n-featured{background:#afb5b926;border-radius:2.5rem;grid-template-columns:minmax(0,45rem) minmax(0,1fr);align-items:center;gap:3rem;margin-bottom:5rem;padding:3rem;display:grid}.n-featured__media{background:var(--color-white);border-radius:2rem;min-width:0;overflow:hidden}.n-featured__media img{aspect-ratio:720/480;object-fit:cover;width:100%;height:auto;transition:transform var(--duration-normal) var(--easing);display:block}.n-featured__body{flex-direction:column;justify-content:space-between;align-self:stretch;min-width:0;padding:2.5rem 0;display:flex}.n-featured__content{flex-direction:column;gap:2.5rem;display:flex}.n-featured__date{color:var(--color-text-muted);font-family:D-DIN-PRO,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-18)}.n-featured__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-28);font-weight:500;line-height:var(--font-37);transition:color var(--duration-fast) var(--easing);margin:0}.n-featured__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-28);margin:0}.n-featured__foot{transition:border-color var(--duration-fast) var(--easing);border-top:1px solid #dfe0e2;justify-content:space-between;align-items:center;gap:1.5rem;margin-top:auto;padding-top:2rem;display:flex}.n-featured__nav{align-items:center;gap:1rem;display:flex}.n-featured:hover{cursor:pointer}.n-featured:hover .n-featured__title{color:var(--color-primary)}.n-featured:hover .n-featured__media img{transform:scale(1.1)}.n-featured:hover .n-featured__foot{border-top-color:var(--color-primary)}.n-nav-btn{cursor:default;background:0 0;border:1px solid #2e353a1a;border-radius:1rem;justify-content:center;align-items:center;width:3rem;height:3rem;padding:0;display:inline-flex}.n-nav-btn img{filter:grayscale()opacity(.45);width:.875rem;height:auto;display:block;transform:scaleX(-1)}.n-nav-btn--active{border-color:var(--color-primary)}.n-nav-btn--active img{filter:none;transform:none}.n-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;margin-bottom:5rem;display:grid}.n-card{background:#afb5b926;border-radius:1.5rem;flex-direction:column;gap:2.5rem;min-width:0;padding:2.5rem;display:flex}.n-card__top{flex-direction:column;gap:1.5rem;min-width:0;display:flex}.n-card__date{color:#2e353a99;font-family:D-DIN-PRO,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-18)}.n-card__title{min-height:4rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-32);-webkit-line-clamp:2;line-clamp:2;transition:color var(--duration-fast) var(--easing);-webkit-box-orient:vertical;margin:0;display:-webkit-box;overflow:hidden}.n-card__media{aspect-ratio:437/260;border-radius:1rem;margin-top:auto;overflow:hidden}.n-card__media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.n-card .n-link{transition:border-color var(--duration-fast) var(--easing);border-top:1px solid #dfe0e2;padding-top:1.5rem}.n-card:hover{cursor:pointer}.n-card:hover .n-card__title{color:var(--color-primary)}.n-card:hover .n-card__media img{transform:scale(1.1)}.n-card:hover .n-link{border-top-color:var(--color-primary)}.n-pagination{justify-content:center;align-items:center;gap:.5rem;display:flex}.n-pagination__btn,.n-pagination__page{width:3rem;height:3rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:default;background-color:#afb5b926;border-radius:1rem;justify-content:center;align-items:center;padding:0;display:inline-flex}.n-pagination__btn img{filter:grayscale()opacity(.45);width:.875rem;height:auto;display:block;transform:scaleX(-1)}.n-pagination__btn--next img{filter:none;transform:none}.n-pagination__page.is-active{background:var(--color-primary);color:var(--color-white)}@media (width<=1439px){.n-page{padding-top:calc(var(--header-h) + 48px);padding-bottom:72px}.n-head{flex-direction:column;align-items:flex-start;gap:32px;margin-bottom:40px}.n-head__title{font-size:36px;line-height:48px}.n-tabs__item{min-height:44px;padding:10px 24px;font-size:16px}.n-featured{border-radius:24px;grid-template-columns:1fr;gap:32px;margin-bottom:56px;padding:32px}.n-featured__media{border-radius:20px}.n-featured__body{padding:0}.n-featured__content{gap:24px}.n-featured__title{font-size:24px;line-height:34px}.n-featured__desc{font-size:16px;line-height:26px}.n-featured__foot{margin-top:24px;padding-top:24px}.n-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-bottom:56px}.n-card{border-radius:20px;gap:28px;padding:28px}.n-card__title{min-height:56px;font-size:18px;line-height:28px}}@media (width<=576px){.n-page{padding-top:calc(var(--header-h) + 5rem);padding-bottom:48px}.n-head{gap:24px;margin-bottom:28px}.n-head__title{font-size:28px;line-height:38px}.n-tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;width:100%;overflow-x:auto}.n-tabs::-webkit-scrollbar{display:none}.n-tabs__item{flex-shrink:0;min-height:40px;padding:8px 20px;font-size:14px}.n-featured{border-radius:16px;gap:20px;margin-bottom:40px;padding:20px}.n-featured__media{border-radius:12px}.n-featured__content{gap:16px}.n-featured__date{font-size:14px}.n-featured__title{font-size:20px;line-height:28px}.n-featured__desc{-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical;font-size:14px;line-height:22px;display:-webkit-box;overflow:hidden}.n-featured__foot{margin-top:16px;padding-top:16px}.n-featured__nav{gap:12px}.n-nav-btn{border-radius:12px;width:40px;height:40px}.n-grid{grid-template-columns:1fr;gap:16px;margin-bottom:40px}.n-card{border-radius:16px;gap:20px;padding:20px}.n-card__top{gap:16px}.n-card__date{font-size:14px}.n-card__title{min-height:0;font-size:16px;line-height:24px}.n-card .n-link{padding-top:16px}.n-pagination{gap:10px}.n-pagination__btn,.n-pagination__page{border-radius:12px;width:40px;height:40px;font-size:16px}} diff --git a/public/themes/dist_static/static/css/news-detail-CxSgbORN.css b/public/themes/dist_static/static/css/news-detail-CxSgbORN.css new file mode 100644 index 0000000..f0f6de1 --- /dev/null +++ b/public/themes/dist_static/static/css/news-detail-CxSgbORN.css @@ -0,0 +1 @@ +.main-news-detail{background:var(--color-white)}.nd-page{padding-top:calc(var(--header-h) + 2.75rem + 5rem);padding-bottom:6.25rem}.nd-breadcrumb{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);line-height:var(--font-22);flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:2.5rem;display:flex}.nd-breadcrumb__link{color:var(--color-text-link);transition:color var(--duration-fast) var(--easing)}.nd-breadcrumb__link:hover{color:var(--color-primary)}.nd-breadcrumb__sep{color:#afb5b9;align-items:center;display:inline-flex}.nd-breadcrumb__sep svg{width:.4375rem;height:auto;display:block}.nd-breadcrumb__current{color:var(--color-text);font-weight:500}.nd-layout{width:100%;padding:0 max(var(--p-x), min(30rem, (100vw - 60rem) / 2))}.nd-back{top:30%;left:max(var(--p-x), min(30rem, (100vw - 60rem) / 2) - 16.5rem);z-index:20;width:3rem;color:var(--color-text-muted);flex-direction:column;align-items:center;gap:.625rem;text-decoration:none;transition:color .25s,opacity .3s,visibility .3s;display:flex;position:fixed;transform:translateY(-50%)}.nd-back.is-hidden{opacity:0;visibility:hidden;pointer-events:none}.nd-back:hover{color:var(--color-primary)}.nd-back__icon{background:var(--color-primary);border-radius:1rem;justify-content:center;align-items:center;width:3rem;height:3rem;display:inline-flex}.nd-back__icon img{filter:brightness(0)invert();width:.875rem;height:auto;display:block;transform:scaleX(-1)}.nd-back__text{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-18)}@media (width>=1440px){.nd-layout{grid-template-columns:minmax(0,960px);justify-content:center;display:grid}.nd-article{width:100%;margin:0}}.nd-article{width:min(60rem,100%);margin:0 auto}.nd-article__header{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1.5rem;padding-bottom:2.5rem;display:flex}.nd-article__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.nd-article__date{color:var(--color-text-muted);font-family:D-DIN-PRO,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-18)}.nd-richtext{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-32);flex-direction:column;align-items:center;gap:2rem;padding:2.5rem 0 3rem;display:flex}.nd-richtext>*{width:100%;margin:0}.nd-richtext h2,.nd-richtext h3{color:var(--color-text);font-size:var(--font-20);font-weight:400;line-height:var(--font-32)}.nd-richtext p{text-align:left}.nd-richtext ul{margin:0}.nd-richtext li+li{margin-top:.75rem}.nd-richtext a{color:var(--color-primary);text-decoration:underline}.nd-richtext__figure{justify-content:center;margin:0;display:flex}.nd-richtext__figure img{border-radius:.5rem;width:min(31.25rem,100%);height:auto;display:block}.nd-pager{border-top:1px solid #dfe0e2;grid-template-columns:1fr 1fr;gap:1rem;padding-top:3rem;display:grid}.nd-pager__item{height:3.5rem;color:var(--color-text-muted);background:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-32);border:1px solid #dfe0e2;border-radius:1rem;justify-content:center;align-items:center;text-decoration:none;transition:color .25s,background-color .25s,border-color .25s;display:flex;position:relative;overflow:hidden}.nd-pager__item:before{content:"";opacity:0;transition:opacity var(--duration-fast) var(--easing);pointer-events:none;background:url(../images/btn-bg-BBiuFyqy.png) 50%/cover no-repeat;position:absolute;inset:0}.nd-pager__item:hover{color:var(--color-white);border-color:var(--color-primary);background-color:var(--color-primary)}.nd-pager__item:hover:before{opacity:1}.nd-pager__label{z-index:1;position:relative}@media (width<=1439px){.nd-layout{padding:0 var(--p-x)}.nd-back{left:var(--p-x)}.nd-page{padding-top:calc(var(--header-h) + 40px);padding-bottom:72px}.nd-breadcrumb{margin-bottom:32px}.nd-article__title{font-size:36px;line-height:48px}.nd-article__header{gap:16px;padding-bottom:28px}.nd-richtext{gap:24px;padding:28px 0 40px;font-size:16px;line-height:28px}.nd-richtext h2,.nd-richtext h3{font-size:18px;line-height:28px}}@media (width<=576px){.nd-page{padding-top:calc(var(--header-h) + 24px);padding-bottom:48px}.nd-breadcrumb{gap:8px;margin-bottom:20px;font-size:14px;line-height:20px}.nd-breadcrumb__sep svg{width:6px}.nd-back__icon{width:40px;height:40px}.nd-article__title{font-size:24px;line-height:34px}.nd-article__date{font-size:14px}.nd-richtext{gap:20px;padding:24px 0 32px;font-size:15px;line-height:26px}.nd-richtext h2,.nd-richtext h3{font-size:17px;line-height:26px}.nd-pager{grid-template-columns:1fr;gap:12px;padding-top:32px}.nd-pager__item{height:48px}} diff --git a/public/themes/dist_static/static/css/news-detail.css b/public/themes/dist_static/static/css/news-detail.css new file mode 100644 index 0000000..dc037b6 --- /dev/null +++ b/public/themes/dist_static/static/css/news-detail.css @@ -0,0 +1,323 @@ +@charset "UTF-8"; +.main-news-detail { + background: var(--color-white); +} + +.nd-page { + padding-top: calc(var(--header-h) + 2.75rem + 5rem); + padding-bottom: 6.25rem; +} + +.nd-breadcrumb { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 0.75rem; + margin-bottom: 2.5rem; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + line-height: var(--font-22); +} +.nd-breadcrumb__link { + color: var(--color-text-link); + transition: color var(--duration-fast) var(--easing); +} +.nd-breadcrumb__link:hover { + color: var(--color-primary); +} +.nd-breadcrumb__sep { + display: inline-flex; + align-items: center; + color: rgb(175, 181, 185); +} +.nd-breadcrumb__sep svg { + display: block; + width: 0.4375rem; + height: auto; +} +.nd-breadcrumb__current { + color: var(--color-text); + font-weight: 500; +} + +.nd-layout { + width: 100%; + /* 设计稿左右边距 480;窄于 1920 时按内容宽 960 居中收缩 */ + padding: 0 max(var(--p-x), min(30rem, (100vw - 60rem) / 2)); +} + +.nd-back { + position: fixed; + top: 30%; + left: max(var(--p-x), min(30rem, (100vw - 60rem) / 2) - 16.5rem); + z-index: 20; + display: flex; + flex-direction: column; + align-items: center; + gap: 0.625rem; + width: 3rem; + transform: translateY(-50%); + text-decoration: none; + color: var(--color-text-muted); + transition: color 0.25s ease, opacity 0.3s ease, visibility 0.3s ease; +} +.nd-back.is-hidden { + opacity: 0; + visibility: hidden; + pointer-events: none; +} +.nd-back:hover { + color: var(--color-primary); +} +.nd-back__icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 1rem; + background: var(--color-primary); +} +.nd-back__icon img { + display: block; + width: 0.875rem; + height: auto; + transform: scaleX(-1); + filter: brightness(0) invert(1); +} +.nd-back__text { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-18); +} + +@media (min-width: 1440px) { + .nd-layout { + display: grid; + grid-template-columns: minmax(0, 960Px); + justify-content: center; + } + .nd-article { + width: 100%; + margin: 0; + } +} +.nd-article { + width: min(60rem, 100%); + margin: 0 auto; +} +.nd-article__header { + display: flex; + flex-direction: column; + gap: 1.5rem; + padding-bottom: 2.5rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.nd-article__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.nd-article__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-18); +} + +.nd-richtext { + display: flex; + flex-direction: column; + align-items: center; + gap: 2rem; + padding: 2.5rem 0 3rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-32); +} +.nd-richtext > * { + width: 100%; + margin: 0; +} +.nd-richtext h2, +.nd-richtext h3 { + color: var(--color-text); + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-32); +} +.nd-richtext p { + text-align: left; +} +.nd-richtext ul { + margin: 0; +} +.nd-richtext li + li { + margin-top: 0.75rem; +} +.nd-richtext a { + color: var(--color-primary); + text-decoration: underline; +} +.nd-richtext__figure { + display: flex; + justify-content: center; + margin: 0; +} +.nd-richtext__figure img { + display: block; + width: min(31.25rem, 100%); + height: auto; + border-radius: 0.5rem; +} + +.nd-pager { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + padding-top: 3rem; + border-top: 1px solid rgb(223, 224, 226); +} +.nd-pager__item { + position: relative; + display: flex; + align-items: center; + justify-content: center; + height: 3.5rem; + overflow: hidden; + border-radius: 1rem; + text-decoration: none; + color: var(--color-text-muted); + border: 1px solid rgb(223, 224, 226); + background: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-32); + transition: color 0.25s ease, background-color 0.25s ease, border-color 0.25s ease; +} +.nd-pager__item::before { + content: ""; + position: absolute; + inset: 0; + background: url("../images/btn-bg-BBiuFyqy.png") center/cover no-repeat; + opacity: 0; + transition: opacity var(--duration-fast) var(--easing); + pointer-events: none; +} +.nd-pager__item:hover { + color: var(--color-white); + border-color: var(--color-primary); + background-color: var(--color-primary); +} +.nd-pager__item:hover::before { + opacity: 1; +} +.nd-pager__label { + position: relative; + z-index: 1; +} + +@media (max-width: 1439px) { + .nd-layout { + padding: 0 var(--p-x); + } + .nd-back { + left: var(--p-x); + } + .nd-page { + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 72Px; + } + .nd-breadcrumb { + margin-bottom: 32Px; + } + .nd-article__title { + font-size: 36Px; + line-height: 48Px; + } + .nd-article__header { + gap: 16Px; + padding-bottom: 28Px; + } + .nd-richtext { + gap: 24Px; + padding: 28Px 0 40Px; + font-size: 16Px; + line-height: 28Px; + } + .nd-richtext h2, + .nd-richtext h3 { + font-size: 18Px; + line-height: 28Px; + } +} +@media (max-width: 576px) { + .nd-layout { + display: flex; + flex-direction: column; + } + .nd-page { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 48Px; + } + .nd-breadcrumb { + gap: 8Px; + margin-bottom: 20Px; + font-size: 14Px; + line-height: 20Px; + } + .nd-breadcrumb__sep svg { + width: 6Px; + } + .nd-back__icon { + width: 40Px; + height: 40Px; + } + .nd-article { + order: 1; + } + .nd-article__title { + font-size: 24Px; + line-height: 34Px; + } + .nd-article__date { + font-size: 14Px; + } + .nd-richtext { + gap: 20Px; + padding: 24Px 0 32Px; + font-size: 15Px; + line-height: 26Px; + } + .nd-richtext h2, + .nd-richtext h3 { + font-size: 17Px; + line-height: 26Px; + } + .nd-pager { + grid-template-columns: 1fr 1fr; + gap: 12Px; + padding-top: 32Px; + } + .nd-pager__item { + height: 40Px; + } + .nd-back { + order: 2; + position: relative; + top: auto; + left: auto; + transform: none; + width: 100%; + margin-top: 24Px; + justify-content: center; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/news.css b/public/themes/dist_static/static/css/news.css new file mode 100644 index 0000000..f351102 --- /dev/null +++ b/public/themes/dist_static/static/css/news.css @@ -0,0 +1,478 @@ +.main-news { + background: var(--color-white); +} + +.n-page { + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 6.25rem; +} + +.n-head { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 2.5rem; + margin-bottom: 3.5rem; +} +.n-head__title { + margin: 0; + display: flex; + flex-direction: column; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} + +.n-tabs { + display: flex; + flex-wrap: wrap; + gap: 1rem; + align-items: center; + flex-shrink: 0; +} +.n-tabs__item { + min-height: 3rem; + padding: 0.75rem 2rem; + border: 0; + border-radius: 6.25rem; + background: rgba(175, 181, 185, 0.15); + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: default; +} +.n-tabs__item.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.n-link { + display: inline-flex; + align-items: center; + gap: 0.625rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.n-link img { + display: block; + width: 1rem; + height: auto; + transition: filter var(--duration-fast) var(--easing); +} +.n-link:hover { + color: var(--color-primary); +} +.n-link:hover img { + filter: brightness(0) saturate(100%) invert(36%) sepia(74%) saturate(2148%) hue-rotate(339deg) brightness(97%) contrast(92%); +} +.n-link--sm { + gap: 0.625rem; + font-size: var(--font-16); + line-height: var(--font-22); +} + +.n-featured { + display: grid; + grid-template-columns: minmax(0, 45rem) minmax(0, 1fr); + gap: 3rem; + align-items: center; + padding: 3rem; + margin-bottom: 5rem; + border-radius: 2.5rem; + background: rgba(175, 181, 185, 0.15); +} +.n-featured__media { + min-width: 0; + border-radius: 2rem; + overflow: hidden; + background: var(--color-white); +} +.n-featured__media img { + display: block; + width: 100%; + height: auto; + aspect-ratio: 720/480; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +} +.n-featured__body { + display: flex; + flex-direction: column; + justify-content: space-between; + align-self: stretch; + min-width: 0; + padding: 2.5rem 0; +} +.n-featured__content { + display: flex; + flex-direction: column; + gap: 2.5rem; +} +.n-featured__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-18); +} +.n-featured__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-28); + font-weight: 500; + line-height: var(--font-37); + transition: color var(--duration-fast) var(--easing); +} +.n-featured__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-28); +} +.n-featured__foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-top: auto; + padding-top: 2rem; + border-top: 1px solid rgb(223, 224, 226); + transition: border-color var(--duration-fast) var(--easing); +} +.n-featured__nav { + display: flex; + align-items: center; + gap: 1rem; +} +.n-featured:hover { + cursor: pointer; +} +.n-featured:hover .n-featured__title { + color: var(--color-primary); +} +.n-featured:hover .n-featured__media img { + transform: scale(1.1); +} +.n-featured:hover .n-featured__foot { + border-top-color: var(--color-primary); +} + +.n-nav-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + padding: 0; + border: 1px solid rgba(46, 53, 58, 0.1); + border-radius: 1rem; + background: transparent; + cursor: default; +} +.n-nav-btn img { + display: block; + width: 0.875rem; + height: auto; + transform: scaleX(-1); + filter: grayscale(1) opacity(0.45); +} +.n-nav-btn--active { + border-color: var(--color-primary); +} +.n-nav-btn--active img { + transform: none; + filter: none; +} + +.n-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2.5rem; + margin-bottom: 5rem; +} + +.n-card { + display: flex; + flex-direction: column; + gap: 2.5rem; + min-width: 0; + padding: 2.5rem; + border-radius: 1.5rem; + background: rgba(175, 181, 185, 0.15); +} +.n-card__top { + display: flex; + flex-direction: column; + gap: 1.5rem; + min-width: 0; +} +.n-card__date { + color: rgba(46, 53, 58, 0.6); + font-family: "D-DIN-PRO", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-18); +} +.n-card__title { + margin: 0; + min-height: 4rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-32); + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + transition: color var(--duration-fast) var(--easing); +} +.n-card__media { + margin-top: auto; + border-radius: 1rem; + overflow: hidden; + aspect-ratio: 437/260; +} +.n-card__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +} +.n-card .n-link { + padding-top: 1.5rem; + border-top: 1px solid rgb(223, 224, 226); + transition: border-color var(--duration-fast) var(--easing); +} +.n-card:hover { + cursor: pointer; +} +.n-card:hover .n-card__title { + color: var(--color-primary); +} +.n-card:hover .n-card__media img { + transform: scale(1.1); +} +.n-card:hover .n-link { + border-top-color: var(--color-primary); +} + +.n-pagination { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; +} +.n-pagination__btn, .n-pagination__page { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + padding: 0; + background-color: rgba(175, 181, 185, 0.15); + border-radius: 1rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: default; +} +.n-pagination__btn img { + display: block; + width: 0.875rem; + height: auto; + transform: scaleX(-1); + filter: grayscale(1) opacity(0.45); +} +.n-pagination__btn--next img { + transform: none; + filter: none; +} +.n-pagination__page.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +@media (max-width: 1439px) { + .n-page { + padding-top: calc(var(--header-h) + 48Px); + padding-bottom: 72Px; + } + .n-head { + flex-direction: column; + align-items: flex-start; + gap: 32Px; + margin-bottom: 40Px; + } + .n-head__title { + font-size: 36Px; + line-height: 48Px; + } + .n-tabs__item { + min-height: 44Px; + padding: 10Px 24Px; + font-size: 16Px; + } + .n-featured { + grid-template-columns: 1fr; + gap: 32Px; + padding: 32Px; + margin-bottom: 56Px; + border-radius: 24Px; + } + .n-featured__media { + border-radius: 20Px; + } + .n-featured__body { + padding: 0; + } + .n-featured__content { + gap: 24Px; + } + .n-featured__title { + font-size: 24Px; + line-height: 34Px; + } + .n-featured__desc { + font-size: 16Px; + line-height: 26Px; + } + .n-featured__foot { + margin-top: 24Px; + padding-top: 24Px; + } + .n-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 24Px; + margin-bottom: 56Px; + } + .n-card { + gap: 28Px; + padding: 28Px; + border-radius: 20Px; + } + .n-card__title { + min-height: 56Px; + font-size: 18Px; + line-height: 28Px; + } +} +@media (max-width: 576px) { + .n-page { + padding-top: calc(var(--header-h) + 5rem); + padding-bottom: 48Px; + } + .n-head { + gap: 24Px; + margin-bottom: 28Px; + } + .n-head__title { + font-size: 28Px; + line-height: 38Px; + } + .n-tabs { + width: 100%; + overflow-x: auto; + flex-wrap: nowrap; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + } + .n-tabs::-webkit-scrollbar { + display: none; + } + .n-tabs__item { + flex-shrink: 0; + min-height: 40Px; + padding: 8Px 20Px; + font-size: 14Px; + } + .n-featured { + gap: 20Px; + padding: 20Px; + margin-bottom: 40Px; + border-radius: 16Px; + } + .n-featured__media { + border-radius: 12Px; + } + .n-featured__content { + gap: 16Px; + } + .n-featured__date { + font-size: 14Px; + } + .n-featured__title { + font-size: 20Px; + line-height: 28Px; + } + .n-featured__desc { + font-size: 14Px; + line-height: 22Px; + display: -webkit-box; + -webkit-line-clamp: 4; + line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; + } + .n-featured__foot { + margin-top: 16Px; + padding-top: 16Px; + } + .n-featured__nav { + gap: 12Px; + } + .n-nav-btn { + width: 40Px; + height: 40Px; + border-radius: 12Px; + } + .n-grid { + grid-template-columns: 1fr; + gap: 16Px; + margin-bottom: 40Px; + } + .n-card { + gap: 20Px; + padding: 20Px; + border-radius: 16Px; + } + .n-card__top { + gap: 16Px; + } + .n-card__date { + font-size: 14Px; + } + .n-card__title { + min-height: 0; + font-size: 16Px; + line-height: 24Px; + } + .n-card .n-link { + padding-top: 16Px; + } + .n-pagination { + gap: 10Px; + } + .n-pagination__btn, .n-pagination__page { + width: 40Px; + height: 40Px; + border-radius: 12Px; + font-size: 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/product-DDHaIT_9.css b/public/themes/dist_static/static/css/product-DDHaIT_9.css new file mode 100644 index 0000000..634ed4b --- /dev/null +++ b/public/themes/dist_static/static/css/product-DDHaIT_9.css @@ -0,0 +1 @@ +@property --ring-angle{syntax:"";inherits:false;initial-value:0deg}@keyframes progressRing{0%{--ring-angle:0deg}to{--ring-angle:360deg}}.main-product .s-btn{min-width:12.5rem;min-height:3.625rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);padding:0 2rem;font-weight:400;line-height:1}.main-product .s-btn--light{color:var(--color-primary);box-shadow:0 .5rem 1.5rem #2e353a0f}.main-product #p-intro,.main-product #p-spec,.main-product #p-download,.main-product #p-related{scroll-margin-top:6rem}.p-subnav{z-index:110;-webkit-backdrop-filter:blur(.9375rem);backdrop-filter:blur(.9375rem);opacity:0;pointer-events:none;visibility:hidden;background:#fffc;border-bottom:1px solid #2e353a1a;height:5rem;transition:transform .35s,opacity .35s,visibility .35s;position:fixed;top:0;left:0;right:0;transform:translateY(-100%)}.p-subnav.is-visible{opacity:1;pointer-events:auto;visibility:visible;transform:translateY(0)}.p-subnav__inner{justify-content:space-between;align-items:center;gap:2.5rem;height:100%;display:flex}.p-subnav__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);white-space:nowrap;flex-shrink:0;margin:0}.p-subnav__links{flex:1;justify-content:flex-end;align-items:center;gap:5rem;min-width:0;margin-left:auto;margin-right:0;display:flex}.p-subnav__link{color:#2e353a99;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-27);white-space:nowrap;transition:color var(--duration-fast) var(--easing);flex-shrink:0;padding:1.625rem 0;text-decoration:none;position:relative}.p-subnav__link:after{content:"";background:var(--color-primary);transform-origin:50%;height:.1875rem;transition:transform var(--duration-fast) var(--easing);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.p-subnav__link:hover,.p-subnav__link.is-active{color:var(--color-primary)}.p-subnav__link.is-active:after{transform:scaleX(1)}.p-subnav__cta{border:1px solid var(--color-primary);min-width:10rem;height:3rem;color:var(--color-primary);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);white-space:nowrap;background:0 0;border-radius:1.875rem;flex-shrink:0;justify-content:center;align-items:center;padding:0 1.5rem;font-weight:400;line-height:1;text-decoration:none;transition:color .25s,background .25s;display:inline-flex}.p-subnav__cta:hover{background:var(--color-primary);color:var(--color-white)}body.is-p-subnav .site-header{pointer-events:none;transform:translateY(-100%)}.p-hero{background:linear-gradient(#afb5b94d 0%,#afb5b900 100%);min-height:100vh;padding-top:13.25rem;padding-bottom:4.8125rem;position:relative;overflow:hidden}.p-hero__mark{z-index:0;color:#afb5b926;letter-spacing:0;text-align:center;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap;font-family:MiSans VF;font-size:25rem;font-weight:630;line-height:33.125rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.p-hero__inner{z-index:1;text-align:center;flex-direction:column;align-items:center;gap:1.5rem;display:flex;position:relative}.p-hero .section__title{text-align:center}.p-hero__media{width:min(27.125rem,72vw);margin-top:1.5rem;position:relative}.p-hero__media img{z-index:1;width:100%;height:auto;display:block;position:relative}.p-intro{padding-top:6.25rem}.p-intro__inner{border-bottom:1px solid #dfe0e2;grid-template-columns:minmax(17.5rem,40rem) minmax(0,60rem);align-items:start;gap:1.875rem;padding-bottom:6.25rem;display:grid}.p-intro__visual{top:calc(var(--header-h) + 6.25rem);flex-direction:column;align-items:center;gap:2rem;width:100%;min-width:0;display:flex;position:sticky}.p-intro__gallery{aspect-ratio:1;background:var(--color-white);align-self:stretch;width:100%;min-width:0;max-width:40rem;overflow:hidden}.p-intro__gallery .swiper-wrapper,.p-intro__gallery .swiper-slide{width:100%;height:100%}.p-intro__gallery .swiper-slide{justify-content:center;align-items:center;display:flex}.p-intro__gallery img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:100%}.p-intro__gallery-nav{justify-content:center;align-self:center;align-items:center;gap:1rem;display:flex}.p-intro__gallery-pagination{align-items:center;gap:1rem;display:flex}.p-intro__gallery-pagination .swiper-pagination-bullet{opacity:1;background:0 0;border-radius:50%;width:2rem;height:2rem;margin:0;position:relative}.p-intro__gallery-pagination .swiper-pagination-bullet:before{content:"";background:conic-gradient(transparent var(--ring-angle), transparent var(--ring-angle));border-radius:50%;position:absolute;inset:0;-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - .1875rem - .5px),#000 calc(100% - .1875rem + .5px));mask:radial-gradient(farthest-side,#0000 calc(100% - .1875rem - .5px),#000 calc(100% - .1875rem + .5px))}.p-intro__gallery-pagination .swiper-pagination-bullet:after{content:"";width:.375rem;height:.375rem;transition:background var(--duration-normal) var(--easing);background:#afb5b9;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.p-intro__gallery-pagination .swiper-pagination-bullet-active:before{background:conic-gradient(var(--color-primary) var(--ring-angle), transparent var(--ring-angle));animation:3s linear forwards progressRing}.p-intro__gallery-pagination .swiper-pagination-bullet-active:after{background:var(--color-primary)}.p-intro__content{flex-direction:column;gap:5rem;min-width:0;display:flex}.p-intro__block{flex-direction:column;gap:2.5rem;display:flex}.p-advantage{flex-direction:column;gap:1.5rem;display:flex}.p-advantage__card{background:#afb5b926;border-radius:1.875rem;padding:2.5rem}.p-advantage__head{align-items:center;gap:1rem;margin-bottom:1.25rem;display:flex}.p-advantage__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-28);font-weight:400;line-height:var(--font-37);flex:1;margin:0}.p-advantage__icon{width:2.8125rem;height:2.8125rem;color:var(--color-text);flex-shrink:0}.p-advantage__icon svg{width:100%;height:100%;display:block}.p-advantage__desc{max-width:45rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin:0}.p-feature__grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:0 2.5rem;display:grid}.p-feature__item{border-top:1px solid #dfe0e2;padding:2.5rem 0}.p-feature__value{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-64);margin:0 0 1rem}.p-feature__value span,.p-feature__value--text{font-size:var(--font-48)}.p-feature__label{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin:0}.p-spec{padding-top:6.25rem}.p-spec__inner{flex-direction:column;gap:2.5rem;display:flex}.p-spec__models{z-index:5;background:var(--color-white);border-bottom:.125rem solid #dfe0e2;align-items:center;padding:2rem 0;display:flex;position:sticky;top:5rem}.p-spec__models-label{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);flex-shrink:0}.p-spec__tabs{border:0;flex-wrap:nowrap;flex:1;justify-content:center;gap:5rem;min-width:0;display:flex}.p-spec__tab{color:var(--color-text-muted);opacity:.5;cursor:pointer;background:0 0;border:0;border-radius:0;flex-direction:column;align-items:center;gap:1.25rem;padding:0;transition:opacity .25s,color .25s;display:flex}.p-spec__tab.active{opacity:1;color:var(--color-text);background:0 0}.p-spec__tab:focus,.p-spec__tab:focus-visible,.p-spec__tab:hover{color:inherit;box-shadow:none;background:0 0;border-color:#0000}.p-spec__tab-media{background:var(--color-white);justify-content:center;align-items:center;width:7.5rem;height:7.5rem;display:flex}.p-spec__tab-media img{width:auto;max-width:5rem;display:block}.p-spec__tab-name{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32)}.p-spec__body{flex-direction:column;display:flex}.p-spec__subtitle{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-27);padding-top:2rem;padding-bottom:2rem}.p-spec__panels{width:100%}.p-spec__table-wrap{width:100%;overflow-x:auto}.p-spec__col-label{width:20rem}.p-spec__col-sub{width:10rem}.p-spec__table{border-collapse:collapse;table-layout:fixed;width:100%}.p-spec__table th,.p-spec__table td{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);text-align:left;vertical-align:middle;border:1px solid #dfe0e2;padding:1.25rem 1.5rem}.p-download{padding-top:6.25rem;padding-bottom:6.25rem}.p-download__inner{grid-template-columns:minmax(15rem,40rem) minmax(0,60rem);align-items:start;gap:1.875rem;display:grid}.p-download__visual{top:calc(var(--header-h) + 6.25rem);z-index:5;justify-content:center;align-self:start;align-items:center;width:100%;max-width:40rem;height:fit-content;display:flex;position:sticky}.p-download__visual img{width:min(22.125rem,70%);height:auto;display:block}.p-download__content{flex-direction:column;gap:2.5rem;min-width:0;display:flex}.p-download__list{flex-direction:column;gap:1.5rem;display:flex}.p-download__item{background:#afb5b926;border-radius:1.25rem;justify-content:space-between;align-items:center;gap:1.5rem;padding:2.5rem;display:flex}.p-download__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);margin-bottom:1rem}.p-download__meta{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);line-height:var(--font-21);flex-wrap:wrap;align-items:center;gap:1rem;margin:0;display:flex}.p-download__meta-divider{background:#afb5b9;flex-shrink:0;width:1px;height:.875rem}.p-download__link{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);line-height:var(--font-24);transition:color var(--duration-fast) var(--easing);flex-shrink:0;align-items:center;gap:.5rem;display:inline-flex}.p-download__link svg{width:1.5rem;height:1.5rem;display:block}.p-download__link:hover{color:var(--color-primary)}.p-download__link:hover path,.p-download__link:hover stroke{stroke:currentColor}.p-related{border-top:1px solid #dfe0e2;padding-top:6.25rem;padding-bottom:5.5rem}.p-related__inner{flex-direction:column;gap:2.5rem;display:flex}.p-related__header{justify-content:space-between;align-items:center;gap:1.5rem;display:flex}.p-related__swiper{width:100%;overflow:hidden}.p-related__card{height:auto}.p-related__link{height:100%;transition:background var(--duration-normal) var(--easing);background:#afb5b926;border-radius:1.25rem;flex-direction:column;gap:1.5rem;padding:2.5rem;display:flex}.p-related__link:hover{background:#afb5b938}.p-related__media{aspect-ratio:1;background:0 0;justify-content:center;align-items:center;width:100%;display:flex}.p-related__media img{width:auto;max-width:6.25rem;max-height:12.875rem;display:block}.p-related__foot{border-top:1px solid #2e353a1a;justify-content:space-between;align-items:center;gap:.75rem;padding-top:1.5rem;display:flex}.p-related__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-27);margin:0}.p-related__arrow{width:1rem;height:.875rem;color:var(--color-primary);flex-shrink:0}.p-related__arrow svg{width:100%;height:100%;display:block}.p-related__arrow path{fill:currentColor}.p-related__pagination{justify-content:center;align-items:center;gap:1rem;margin-top:2.5rem;display:flex;position:static}.p-related__pagination .swiper-pagination-bullet{opacity:1;background:0 0;border-radius:50%;width:2rem;height:2rem;margin:0;position:relative}.p-related__pagination .swiper-pagination-bullet:before{content:"";opacity:0;transition:opacity var(--duration-normal) var(--easing);background:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMi4wMDAwMDAiIGhlaWdodD0iMzIuMDAwMDAwIiBmaWxsPSJub25lIiBjdXN0b21GcmFtZT0iIzAwMDAwMCI+Cgk8ZGVmcz4KCQk8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50X2N1c3RvbV9ncmFkaWVudF84Ij4KCQkJPHN0b3Agc3RvcC1jb2xvcj0icmdiKDIzOSw2Nyw1MykiIG9mZnNldD0iMCIgc3RvcC1vcGFjaXR5PSIxIiAvPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSJyZ2IoMjU1LDI1NSwyNTUpIiBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIgLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxtYXNrIGlkPSJvdXRsaW5lX21hc2tfOCI+CgkJCTxwYXRoIGQ9Ik0xNiAzMkM3LjE2MzQ0IDMyIDAgMjQuODM2NiAwIDE2QzAgNy4xNjM0NCA3LjE2MzQ0IDAgMTYgMEMyNC44MzY2IDAgMzIgNy4xNjM0NCAzMiAxNkMzMiAyNC44MzY2IDI0LjgzNjYgMzIgMTYgMzJaTTMwIDE2QzMwIDguMjY4MDEgMjMuNzMyIDIgMTYgMkM4LjI2ODAxIDIgMiA4LjI2ODAxIDIgMTZDMiAyMy43MzIgOC4yNjgwMSAzMCAxNiAzMEMyMy43MzIgMzAgMzAgMjMuNzMyIDMwIDE2WiIgZmlsbD0icmdiKDI1NSwyNTUsMjU1KSIgZmlsbC1ydWxlPSJldmVub2RkIiAvPgoJCTwvbWFzaz4KCTwvZGVmcz4KCTxjaXJjbGUgaWQ9IuakreWchiAxNjYiIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0icmdiKDE5NiwxOTYsMTk2KSIgZmlsbC1vcGFjaXR5PSIwIiAvPgoJPGNpcmNsZSBpZD0i5qSt5ZyGIDE2NiIgY3g9IjE2IiBjeT0iMTYiIHI9IjE1IiBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIwIiBzdHJva2Utd2lkdGg9IjIuMDAwMDAwIiBjdXN0b21HcmFkaWVudD0idXJsKCNjdXN0b21fZ3JhZGllbnRfOCkiIC8+Cgk8ZyBpZD0iY3VzdG9tX2dyYWRpZW50XzgiIGFuZ3VsYXJHcmFkaWVudD0idXJsKCNwYWludF9jdXN0b21fZ3JhZGllbnRfOCk7IDMxLjAwMDAwMCAxNS4wMDAwMDAgMTUuMDAwMDAwIDE1LjAwMDAwMCAxNS4wMDAwMDAgLTEuMDAwMDAwIiBtYXNrPSJ1cmwoI291dGxpbmVfbWFza184KSI+CgkJPGc+CgkJCTxmb3JlaWduT2JqZWN0IHdpZHRoPSIzMi4wMDAwMDAiIGhlaWdodD0iMzIuMDAwMDAwIiB4PSIwLjAwMDAwMCIgeT0iMC4wMDAwMDAiPgoJCQkJPGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImJhY2tncm91bmQ6Y29uaWMtZ3JhZGllbnQoZnJvbSAwLjAwMDAwMGRlZywgcmdiKDIzOSw2Nyw1MykgMCUsIHJnYigyNTUsMjU1LDI1NSkgMTAwJSwgcmdiKDIzOSw2Nyw1MykgMTAwJSk7bWFzazpjb25pYy1ncmFkaWVudChmcm9tIDAuMDAwMDAwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDEpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiIC8+CgkJCTwvZm9yZWlnbk9iamVjdD4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPgo=) 50%/100% 100% no-repeat;position:absolute;inset:0}.p-related__pagination .swiper-pagination-bullet:after{content:"";width:.5rem;height:.5rem;transition:background var(--duration-normal) var(--easing);background:#afb5b9;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.p-related__pagination .swiper-pagination-bullet-active:before{opacity:1}.p-related__pagination .swiper-pagination-bullet-active:after{background:var(--color-primary)}@media (width<=1439px){.main-product #p-intro,.main-product #p-spec,.main-product #p-download,.main-product #p-related{scroll-margin-top:72px}.main-product .s-btn{min-width:180px;min-height:52px;font-size:18px}.p-subnav{height:64px}.p-subnav__inner{gap:24px}.p-subnav__title{font-size:18px;line-height:26px}.p-subnav__links{-webkit-overflow-scrolling:touch;scrollbar-width:none;justify-content:flex-end;gap:40px;overflow-x:auto}.p-subnav__links::-webkit-scrollbar{display:none}.p-subnav__link{padding:18px 0;font-size:16px;line-height:22px}.p-subnav__cta{min-width:132px;height:40px;padding:0 16px;font-size:15px}.p-hero{padding-top:120px;padding-bottom:56px}.p-hero__mark{font-size:220px;line-height:1}.p-hero__media{width:min(360px,68vw)}.p-intro{padding-top:72px}.p-intro__inner{grid-template-columns:1fr;gap:40px;padding-bottom:72px}.p-intro__visual{align-items:stretch;width:100%;position:static}.p-intro__gallery{align-self:stretch;width:100%;max-width:none}.p-intro__content{gap:48px}.p-intro__block{gap:32px}.p-feature__grid{grid-template-columns:repeat(2,minmax(0,1fr))}.p-feature__item:nth-child(n){padding-left:0;padding-right:24px}.p-feature__value{font-size:28px;line-height:48px}.p-feature__value span{font-size:40px}.p-feature__value--text{font-size:40px;line-height:48px}.p-feature__label{font-size:18px;line-height:26px}.p-spec{padding-top:72px}.p-spec__models{flex-direction:column;align-items:stretch;gap:16px;padding:24px 0}.p-spec__models-label{font-size:18px;line-height:26px}.p-spec__tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex:none;justify-content:flex-start;gap:40px;overflow-x:auto}.p-spec__tabs::-webkit-scrollbar{display:none}.p-spec__tab{flex-shrink:0;gap:12px}.p-spec__tab-name{font-size:20px;line-height:28px}.p-spec__subtitle{padding-top:24px;padding-bottom:24px;font-size:18px}.p-spec__col-label{width:160px}.p-spec__col-sub{width:120px}.p-spec__table{min-width:560px}.p-spec__table th,.p-spec__table td{padding:14px 16px;font-size:14px;line-height:20px}.p-download{padding-top:72px;padding-bottom:72px}.p-download__inner{grid-template-columns:1fr;gap:40px}.p-download__visual{order:-1;max-width:100%;min-height:0;padding:16px 0;position:static}.p-download__visual img{width:min(280px,55%)}.p-related{padding-top:56px;padding-bottom:80px}.p-related__header{flex-direction:column;align-items:flex-start;gap:16px}.p-related .s-arrows{display:none}.p-related__link{padding:28px}.p-related__pagination{margin-top:32px}}@media (width<=576px){.main-product #p-intro,.main-product #p-spec,.main-product #p-download,.main-product #p-related{scroll-margin-top:64px}.main-product .s-btn{min-width:160px;min-height:48px;font-size:16px}.p-subnav{height:56px}.p-subnav__title{display:none}.p-subnav__inner{gap:16px}.p-subnav__links{gap:20px}.p-subnav__link{padding:16px 0;font-size:14px;line-height:20px}.p-subnav__link:after{height:2px}.p-subnav__cta{min-width:0;height:36px;padding:0 12px;font-size:13px}.p-hero{min-height:unset;padding-top:88px;padding-bottom:40px}.p-hero__mark{font-size:96px}.p-hero__media{width:min(260px,82vw);margin-top:16px;display:none}.p-intro{padding-top:0}.p-intro__inner{gap:36px;padding-bottom:0}.p-intro__content{gap:32px}.p-intro__block{gap:24px}.p-intro__gallery-pagination{gap:12px}.p-intro__gallery-pagination .swiper-pagination-bullet{width:28px;height:28px}.p-advantage__card{border-radius:20px;padding:24px}.p-advantage__head{margin-bottom:16px}.p-advantage__title{font-size:22px;line-height:30px}.p-advantage__icon{width:36px;height:36px}.p-advantage__desc{font-size:16px;line-height:24px}.p-feature__grid{grid-template-columns:1fr}.p-feature__item{padding:24px 0}.p-feature__value,.p-feature__value--text{margin-bottom:12px;font-size:28px;line-height:40px}.p-feature__value span,.p-feature__value--text span{font-size:36px}.p-feature__label{font-size:16px;line-height:24px}.p-spec{padding-top:48px}.p-spec__inner{gap:28px}.p-spec__models{gap:12px;padding:16px 0;top:56px}.p-spec__tabs{justify-content:center;gap:24px}.p-spec__tab-media{width:72px;height:72px}.p-spec__tab-media img{max-width:52px;height:auto}.p-spec__tab-name{font-size:16px;line-height:22px}.p-spec__subtitle{padding-top:20px;padding-bottom:16px;font-size:16px;line-height:22px}.p-spec__table{min-width:480px}.p-spec__table th,.p-spec__table td{padding:10px 12px;font-size:13px;line-height:18px}.p-download{padding-top:48px;padding-bottom:48px}.p-download__content{gap:28px}.p-download__list{gap:16px}.p-download__item{flex-direction:column;align-items:flex-start;gap:16px;padding:24px}.p-download__name{margin-bottom:12px;font-size:20px;line-height:28px}.p-download__meta{gap:12px;font-size:14px;line-height:20px}.p-download__link{font-size:16px;line-height:22px}.p-related{padding-top:40px;padding-bottom:56px}.p-related__inner{gap:28px}.p-related__link{gap:16px;padding:24px}.p-related__media img{max-width:80px;max-height:160px}.p-related__foot{padding-top:16px}.p-related__name{font-size:18px;line-height:24px}.p-related__pagination{gap:12px;margin-top:24px}.p-related__pagination .swiper-pagination-bullet{width:28px;height:28px}}.p-selection-modal{z-index:200;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.p-selection-modal[hidden]{display:none}.p-selection-modal__overlay{background:#2e353a80;position:absolute;inset:0}.p-selection-modal__dialog{z-index:1;width:87.5rem;max-width:calc(100vw - 2 * var(--p-x));background:var(--color-white);border-radius:1.875rem;flex-direction:column;max-height:calc(100vh - 7.5rem);display:flex;position:relative;overflow:hidden}.p-selection-modal__head{flex-shrink:0;justify-content:space-between;align-items:center;gap:1rem;padding:1.5rem 2.5rem;display:flex}.p-selection-modal__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);margin:0}.p-selection-modal__close{width:2.5rem;height:2.5rem;color:var(--color-text);cursor:pointer;transition:background var(--duration-fast) var(--easing), color var(--duration-fast) var(--easing);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex}.p-selection-modal__close:hover{color:var(--color-primary);background:#afb5b926}.p-selection-modal__close svg{width:1.5rem;height:1.5rem;display:block}.p-selection-modal__body{min-height:0;padding-bottom:3.125rem}.p-selection-modal__table-wrap{overscroll-behavior:contain;max-height:37.5rem;overflow:auto}.p-selection-table{border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%;min-width:82.5rem}.p-selection-table th,.p-selection-table td{min-height:3.75rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-21);text-align:center;vertical-align:middle;white-space:nowrap;padding:1.25rem 1rem}.p-selection-table th{z-index:1;background:var(--color-white);border-bottom:.125rem solid #dfe0e2;font-weight:500;position:sticky;top:0}.p-selection-table td{border-bottom:1px solid #dfe0e2;border-right:1px solid #dfe0e2}.p-selection-table td:first-child{border-left:1px solid #dfe0e2}.p-selection-table tbody tr:hover td{background:#afb5b91f}@media (width<=1439px){.p-selection-modal__dialog{border-radius:20px}.p-selection-modal__head{padding:20px 24px}.p-selection-modal__title{font-size:20px;line-height:28px}.p-selection-table th,.p-selection-table td{padding:16px 12px;font-size:15px;line-height:20px}} diff --git a/public/themes/dist_static/static/css/product.css b/public/themes/dist_static/static/css/product.css new file mode 100644 index 0000000..36ba0b4 --- /dev/null +++ b/public/themes/dist_static/static/css/product.css @@ -0,0 +1,1288 @@ +@charset "UTF-8"; +@property --ring-angle { + syntax: ""; + inherits: false; + initial-value: 0deg; +} +@keyframes progressRing { + from { + --ring-angle: 0deg; + } + to { + --ring-angle: 360deg; + } +} +.main-product .s-btn { + min-width: 12.5rem; + min-height: 3.625rem; + padding: 0 2rem; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: 1; +} +.main-product .s-btn--light { + color: var(--color-primary); + box-shadow: 0 0.5rem 1.5rem rgba(46, 53, 58, 0.06); +} +.main-product #p-intro, +.main-product #p-spec, +.main-product #p-download, +.main-product #p-related { + scroll-margin-top: 6rem; +} + +.p-subnav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 110; + height: 5rem; + background: rgba(255, 255, 255, 0.8); + border-bottom: 1px solid rgba(46, 53, 58, 0.1); + backdrop-filter: blur(0.9375rem); + transform: translateY(-100%); + opacity: 0; + pointer-events: none; + visibility: hidden; + transition: transform 0.35s ease, opacity 0.35s ease, visibility 0.35s ease; +} +.p-subnav.is-visible { + transform: translateY(0); + opacity: 1; + pointer-events: auto; + visibility: visible; +} +.p-subnav__inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 2.5rem; + height: 100%; +} +.p-subnav__title { + margin: 0; + flex-shrink: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); + white-space: nowrap; +} +.p-subnav__links { + display: flex; + align-items: center; + justify-content: flex-end; + flex: 1; + gap: 5rem; + min-width: 0; + margin-left: auto; + margin-right: 0; +} +.p-subnav__link { + position: relative; + flex-shrink: 0; + padding: 1.625rem 0; + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-27); + text-decoration: none; + white-space: nowrap; + transition: color var(--duration-fast) var(--easing); +} +.p-subnav__link::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 0.1875rem; + background: var(--color-primary); + transform: scaleX(0); + transform-origin: center; + transition: transform var(--duration-fast) var(--easing); +} +.p-subnav__link:hover { + color: var(--color-primary); +} +.p-subnav__link.is-active { + color: var(--color-primary); +} +.p-subnav__link.is-active::after { + transform: scaleX(1); +} +.p-subnav__cta { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + min-width: 10rem; + height: 3rem; + padding: 0 1.5rem; + border: 1px solid var(--color-primary); + border-radius: 1.875rem; + background: transparent; + color: var(--color-primary); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: 1; + text-decoration: none; + white-space: nowrap; + transition: color 0.25s ease, background 0.25s ease; +} +.p-subnav__cta:hover { + background: var(--color-primary); + color: var(--color-white); +} + +body.is-p-subnav .site-header { + transform: translateY(-100%); + pointer-events: none; +} + +.p-hero { + position: relative; + min-height: 100vh; + padding-top: 13.25rem; + padding-bottom: 4.8125rem; + overflow: hidden; + background: linear-gradient(180deg, rgba(175, 181, 185, 0.3) 0%, rgba(175, 181, 185, 0) 100%); +} +.p-hero__mark { + position: absolute; + left: 50%; + top: 50%; + z-index: 0; + transform: translate(-50%, -50%); + color: rgba(175, 181, 185, 0.15); + font-family: "MiSans VF"; + font-size: 25rem; + font-weight: 630; + line-height: 33.125rem; + letter-spacing: 0px; + text-align: center; + pointer-events: none; + user-select: none; + white-space: nowrap; +} +.p-hero__inner { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + gap: 1.5rem; + text-align: center; +} +.p-hero .section__title { + text-align: center; +} +.p-hero__media { + position: relative; + width: min(27.125rem, 72vw); + margin-top: 1.5rem; +} +.p-hero__media img { + position: relative; + z-index: 1; + width: 100%; + height: auto; + display: block; +} + +.p-intro { + padding-top: 6.25rem; +} +.p-intro__inner { + display: grid; + grid-template-columns: minmax(17.5rem, 40rem) minmax(0, 60rem); + gap: 1.875rem; + align-items: start; + padding-bottom: 6.25rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.p-intro__visual { + position: sticky; + top: calc(var(--header-h) + 6.25rem); + width: 100%; + min-width: 0; + display: flex; + flex-direction: column; + align-items: center; + gap: 2rem; +} +.p-intro__gallery { + width: 100%; + max-width: 40rem; + align-self: stretch; + min-width: 0; + aspect-ratio: 1; + background: var(--color-white); + overflow: hidden; +} +.p-intro__gallery .swiper-wrapper, +.p-intro__gallery .swiper-slide { + width: 100%; + height: 100%; +} +.p-intro__gallery .swiper-slide { + display: flex; + align-items: center; + justify-content: center; +} +.p-intro__gallery img { + width: auto; + max-width: 100%; + max-height: 100%; + height: auto; + object-fit: contain; +} +.p-intro__gallery-nav { + align-self: center; + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; +} +.p-intro__gallery-pagination { + display: flex; + align-items: center; + gap: 1rem; +} +.p-intro__gallery-pagination .swiper-pagination-bullet { + position: relative; + width: 2rem; + height: 2rem; + margin: 0; + opacity: 1; + border-radius: 50%; + background: transparent; +} +.p-intro__gallery-pagination .swiper-pagination-bullet::before { + content: ""; + position: absolute; + inset: 0; + border-radius: 50%; + background: conic-gradient(transparent var(--ring-angle), transparent var(--ring-angle)); + mask: radial-gradient(farthest-side, transparent calc(100% - 0.1875rem - 0.5px), #000 calc(100% - 0.1875rem + 0.5px)); + -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 0.1875rem - 0.5px), #000 calc(100% - 0.1875rem + 0.5px)); +} +.p-intro__gallery-pagination .swiper-pagination-bullet::after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 0.375rem; + height: 0.375rem; + border-radius: 50%; + background: rgb(175, 181, 185); + transform: translate(-50%, -50%); + transition: background var(--duration-normal) var(--easing); +} +.p-intro__gallery-pagination .swiper-pagination-bullet-active::before { + background: conic-gradient(var(--color-primary) var(--ring-angle), transparent var(--ring-angle)); + animation: progressRing 3s linear forwards; +} +.p-intro__gallery-pagination .swiper-pagination-bullet-active::after { + background: var(--color-primary); +} +.p-intro__content { + display: flex; + flex-direction: column; + gap: 5rem; + min-width: 0; +} +.p-intro__block { + display: flex; + flex-direction: column; + gap: 2.5rem; +} + +.p-advantage { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.p-advantage__card { + padding: 2.5rem; + border-radius: 1.875rem; + background: rgba(175, 181, 185, 0.15); +} +.p-advantage__head { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 1.25rem; +} +.p-advantage__title { + flex: 1; + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-28); + font-weight: 400; + line-height: var(--font-37); +} +.p-advantage__icon { + width: 2.8125rem; + height: 2.8125rem; + flex-shrink: 0; + color: var(--color-text); +} +.p-advantage__icon svg { + width: 100%; + height: 100%; + display: block; +} +.p-advantage__desc { + margin: 0; + max-width: 45rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} + +.p-feature__grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0 2.5rem; +} +.p-feature__item { + padding: 2.5rem 0; + border-top: 1px solid rgb(223, 224, 226); +} +.p-feature__value { + margin: 0 0 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-64); +} +.p-feature__value span { + font-size: var(--font-48); +} +.p-feature__value--text { + font-size: var(--font-48); +} +.p-feature__label { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} + +.p-spec { + padding-top: 6.25rem; +} +.p-spec__inner { + display: flex; + flex-direction: column; + gap: 2.5rem; +} +.p-spec__models { + position: sticky; + top: 5rem; + z-index: 5; + display: flex; + align-items: center; + padding: 2rem 0; + background: var(--color-white); + border-bottom: 0.125rem solid rgb(223, 224, 226); +} +.p-spec__models-label { + min-width: 20rem; + flex-shrink: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.p-spec__label-wrapper { + display: flex; + flex-wrap: nowrap; + gap: 1rem; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +.p-spec__label { + text-align: center; + flex-shrink: 0; + min-width: 20rem; + padding: 1.125rem 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); + white-space: nowrap; +} +.p-spec__tabs { + flex: 1; + min-width: 0; + display: flex; + flex-wrap: nowrap; + justify-content: center; + gap: 5rem; + border: 0; +} +.p-spec__tab { + display: flex; + flex-direction: column; + align-items: center; + gap: 1.25rem; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--color-text-muted); + opacity: 0.5; + cursor: pointer; + transition: opacity 0.25s ease, color 0.25s ease; +} +.p-spec__tab.active { + opacity: 1; + color: var(--color-text); + background: transparent; +} +.p-spec__tab:focus, .p-spec__tab:focus-visible, .p-spec__tab:hover { + color: inherit; + background: transparent; + border-color: transparent; + box-shadow: none; +} +.p-spec__tab-media { + width: 7.5rem; + height: 7.5rem; + display: flex; + align-items: center; + justify-content: center; + background: var(--color-white); +} +.p-spec__tab-media img { + width: auto; + max-width: 5rem; + display: block; +} +.p-spec__tab-name { + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.p-spec__body { + display: flex; + flex-direction: column; +} +.p-spec__subtitle { + padding-top: 2rem; + padding-bottom: 2rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-27); +} +.p-spec__panels { + width: 100%; +} +.p-spec__table-wrap { + width: 100%; + overflow-x: auto; +} +.p-spec__col-label { + width: 20rem; +} +.p-spec__col-sub { + width: 10rem; +} +.p-spec__table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; +} +.p-spec__table th, +.p-spec__table td { + padding: 1.25rem 1.5rem; + border: 1px solid rgb(223, 224, 226); + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + text-align: left; + vertical-align: middle; +} + +.p-download { + padding-top: 6.25rem; + padding-bottom: 6.25rem; +} +.p-download__inner { + display: grid; + grid-template-columns: minmax(15rem, 40rem) minmax(0, 60rem); + gap: 1.875rem; + align-items: start; +} +.p-download__visual { + position: sticky; + top: calc(var(--header-h) + 6.25rem); + z-index: 5; + align-self: start; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + max-width: 40rem; + height: fit-content; +} +.p-download__visual img { + width: min(22.125rem, 70%); + height: auto; + display: block; +} +.p-download__content { + display: flex; + flex-direction: column; + gap: 2.5rem; + min-width: 0; +} +.p-download__list { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.p-download__item { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + padding: 2.5rem; + border-radius: 1.25rem; + background: rgba(175, 181, 185, 0.15); +} +.p-download__name { + margin-bottom: 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.p-download__meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 1rem; + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + line-height: var(--font-21); +} +.p-download__meta-divider { + width: 1px; + height: 0.875rem; + flex-shrink: 0; + background: rgb(175, 181, 185); +} +.p-download__link { + display: inline-flex; + align-items: center; + gap: 0.5rem; + flex-shrink: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + line-height: var(--font-24); + transition: color var(--duration-fast) var(--easing); +} +.p-download__link svg { + width: 1.5rem; + height: 1.5rem; + display: block; +} +.p-download__link:hover { + color: var(--color-primary); +} +.p-download__link:hover path, +.p-download__link:hover stroke { + stroke: currentColor; +} + +.p-related { + padding-top: 6.25rem; + padding-bottom: 5.5rem; + border-top: 1px solid rgb(223, 224, 226); +} +.p-related__inner { + display: flex; + flex-direction: column; + gap: 2.5rem; +} +.p-related__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; +} +.p-related__swiper { + width: 100%; + overflow: hidden; +} +.p-related__card { + height: auto; +} +.p-related__link { + display: flex; + flex-direction: column; + gap: 1.5rem; + height: 100%; + padding: 2.5rem; + border-radius: 1.25rem; + background: rgba(175, 181, 185, 0.15); + transition: background var(--duration-normal) var(--easing); +} +.p-related__link:hover { + background: rgba(175, 181, 185, 0.22); +} +.p-related__media { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + aspect-ratio: 1; + background: transparent; +} +.p-related__media img { + width: auto; + max-width: 6.25rem; + max-height: 12.875rem; + display: block; +} +.p-related__foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + padding-top: 1.5rem; + border-top: 1px solid rgba(46, 53, 58, 0.1); +} +.p-related__name { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-27); +} +.p-related__arrow { + width: 1rem; + height: 0.875rem; + flex-shrink: 0; + color: var(--color-primary); +} +.p-related__arrow svg { + width: 100%; + height: 100%; + display: block; +} +.p-related__arrow path { + fill: currentColor; +} +.p-related__pagination { + position: static; + margin-top: 2.5rem; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; +} +.p-related__pagination .swiper-pagination-bullet { + position: relative; + width: 2rem; + height: 2rem; + margin: 0; + opacity: 1; + border-radius: 50%; + background: transparent; +} +.p-related__pagination .swiper-pagination-bullet::before { + content: ""; + position: absolute; + inset: 0; + background: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMi4wMDAwMDAiIGhlaWdodD0iMzIuMDAwMDAwIiBmaWxsPSJub25lIiBjdXN0b21GcmFtZT0iIzAwMDAwMCI+Cgk8ZGVmcz4KCQk8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50X2N1c3RvbV9ncmFkaWVudF84Ij4KCQkJPHN0b3Agc3RvcC1jb2xvcj0icmdiKDIzOSw2Nyw1MykiIG9mZnNldD0iMCIgc3RvcC1vcGFjaXR5PSIxIiAvPgoJCQk8c3RvcCBzdG9wLWNvbG9yPSJyZ2IoMjU1LDI1NSwyNTUpIiBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIgLz4KCQk8L2xpbmVhckdyYWRpZW50PgoJCTxtYXNrIGlkPSJvdXRsaW5lX21hc2tfOCI+CgkJCTxwYXRoIGQ9Ik0xNiAzMkM3LjE2MzQ0IDMyIDAgMjQuODM2NiAwIDE2QzAgNy4xNjM0NCA3LjE2MzQ0IDAgMTYgMEMyNC44MzY2IDAgMzIgNy4xNjM0NCAzMiAxNkMzMiAyNC44MzY2IDI0LjgzNjYgMzIgMTYgMzJaTTMwIDE2QzMwIDguMjY4MDEgMjMuNzMyIDIgMTYgMkM4LjI2ODAxIDIgMiA4LjI2ODAxIDIgMTZDMiAyMy43MzIgOC4yNjgwMSAzMCAxNiAzMEMyMy43MzIgMzAgMzAgMjMuNzMyIDMwIDE2WiIgZmlsbD0icmdiKDI1NSwyNTUsMjU1KSIgZmlsbC1ydWxlPSJldmVub2RkIiAvPgoJCTwvbWFzaz4KCTwvZGVmcz4KCTxjaXJjbGUgaWQ9IuakreWchiAxNjYiIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0icmdiKDE5NiwxOTYsMTk2KSIgZmlsbC1vcGFjaXR5PSIwIiAvPgoJPGNpcmNsZSBpZD0i5qSt5ZyGIDE2NiIgY3g9IjE2IiBjeT0iMTYiIHI9IjE1IiBzdHJva2U9InJnYigwLDAsMCkiIHN0cm9rZS1vcGFjaXR5PSIwIiBzdHJva2Utd2lkdGg9IjIuMDAwMDAwIiBjdXN0b21HcmFkaWVudD0idXJsKCNjdXN0b21fZ3JhZGllbnRfOCkiIC8+Cgk8ZyBpZD0iY3VzdG9tX2dyYWRpZW50XzgiIGFuZ3VsYXJHcmFkaWVudD0idXJsKCNwYWludF9jdXN0b21fZ3JhZGllbnRfOCk7IDMxLjAwMDAwMCAxNS4wMDAwMDAgMTUuMDAwMDAwIDE1LjAwMDAwMCAxNS4wMDAwMDAgLTEuMDAwMDAwIiBtYXNrPSJ1cmwoI291dGxpbmVfbWFza184KSI+CgkJPGc+CgkJCTxmb3JlaWduT2JqZWN0IHdpZHRoPSIzMi4wMDAwMDAiIGhlaWdodD0iMzIuMDAwMDAwIiB4PSIwLjAwMDAwMCIgeT0iMC4wMDAwMDAiPgoJCQkJPGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9ImJhY2tncm91bmQ6Y29uaWMtZ3JhZGllbnQoZnJvbSAwLjAwMDAwMGRlZywgcmdiKDIzOSw2Nyw1MykgMCUsIHJnYigyNTUsMjU1LDI1NSkgMTAwJSwgcmdiKDIzOSw2Nyw1MykgMTAwJSk7bWFzazpjb25pYy1ncmFkaWVudChmcm9tIDAuMDAwMDAwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDEpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiIC8+CgkJCTwvZm9yZWlnbk9iamVjdD4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPgo=") center/100% 100% no-repeat; + opacity: 0; + transition: opacity var(--duration-normal) var(--easing); +} +.p-related__pagination .swiper-pagination-bullet::after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 0.5rem; + height: 0.5rem; + border-radius: 50%; + background: rgb(175, 181, 185); + transform: translate(-50%, -50%); + transition: background var(--duration-normal) var(--easing); +} +.p-related__pagination .swiper-pagination-bullet-active::before { + opacity: 1; +} +.p-related__pagination .swiper-pagination-bullet-active::after { + background: var(--color-primary); +} + +@media (max-width: 1439px) { + .main-product #p-intro, + .main-product #p-spec, + .main-product #p-download, + .main-product #p-related { + scroll-margin-top: 72Px; + } + .main-product .s-btn { + min-width: 180Px; + min-height: 52Px; + font-size: 18Px; + } + .p-subnav { + height: 64Px; + } + .p-subnav__inner { + gap: 24Px; + } + .p-subnav__title { + font-size: 18Px; + line-height: 26Px; + } + .p-subnav__links { + gap: 24Px; + justify-content: flex-start; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + } + .p-subnav__links::-webkit-scrollbar { + display: none; + } + .p-subnav__link { + padding: 18Px 0; + font-size: 16Px; + line-height: 22Px; + } + .p-subnav__cta { + min-width: 132Px; + height: 40Px; + padding: 0 16Px; + font-size: 15Px; + } + .p-hero { + padding-top: 120Px; + padding-bottom: 56Px; + } + .p-hero__mark { + font-size: 220Px; + line-height: 1; + } + .p-hero__media { + width: min(360Px, 68vw); + } + .p-intro { + padding-top: 72Px; + } + .p-intro__inner { + grid-template-columns: 1fr; + gap: 40Px; + padding-bottom: 72Px; + } + .p-intro__visual { + position: static; + width: 100%; + align-items: stretch; + } + .p-intro__gallery { + width: 100%; + max-width: none; + align-self: stretch; + } + .p-intro__content { + gap: 48Px; + } + .p-intro__block { + gap: 32Px; + } + .p-feature__grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .p-feature__item:nth-child(n) { + padding-left: 0; + padding-right: 24Px; + } + .p-feature__value { + font-size: 28Px; + line-height: 48Px; + } + .p-feature__value span { + font-size: 40Px; + } + .p-feature__value--text { + font-size: 40Px; + line-height: 48Px; + } + .p-feature__label { + font-size: 18Px; + line-height: 26Px; + } + .p-spec { + padding-top: 72Px; + } + .p-spec__models { + flex-direction: column; + align-items: stretch; + gap: 16Px; + padding: 24Px 0; + } + .p-spec__models-label { + font-size: 18Px; + line-height: 26Px; + } + .p-spec__tabs { + flex: none; + justify-content: flex-start; + gap: 40Px; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + } + .p-spec__tabs::-webkit-scrollbar { + display: none; + } + .p-spec__tab { + flex-shrink: 0; + gap: 12Px; + } + .p-spec__tab-name { + font-size: 20Px; + line-height: 28Px; + } + .p-spec__subtitle { + padding-top: 24Px; + padding-bottom: 24Px; + font-size: 18Px; + } + .p-spec__col-label { + width: 160Px; + } + .p-spec__col-sub { + width: 120Px; + } + .p-spec__table { + min-width: 560Px; + } + .p-spec__table th, + .p-spec__table td { + padding: 14Px 16Px; + font-size: 14Px; + line-height: 20Px; + } + .p-download { + padding-top: 72Px; + padding-bottom: 72Px; + } + .p-download__inner { + grid-template-columns: 1fr; + gap: 40Px; + } + .p-download__visual { + position: static; + min-height: 0; + order: -1; + padding: 16Px 0; + max-width: 100%; + } + .p-download__visual img { + width: min(280Px, 55%); + } + .p-related { + padding-top: 56Px; + padding-bottom: 80Px; + } + .p-related__header { + flex-direction: column; + align-items: flex-start; + gap: 16Px; + } + .p-related .s-arrows { + display: none; + } + .p-related__link { + padding: 28Px; + } + .p-related__pagination { + margin-top: 32Px; + } +} +@media (max-width: 576px) { + .main-product #p-intro, + .main-product #p-spec, + .main-product #p-download, + .main-product #p-related { + scroll-margin-top: 64Px; + } + .main-product .s-btn { + min-width: 160Px; + min-height: 48Px; + font-size: 16Px; + } + .p-subnav { + height: 56Px; + } + .p-subnav__title { + display: none; + } + .p-subnav__inner { + gap: 16Px; + } + .p-subnav__links { + gap: 20Px; + } + .p-subnav__link { + padding: 16Px 0; + font-size: 14Px; + line-height: 20Px; + } + .p-subnav__link::after { + height: 2Px; + } + .p-subnav__cta { + min-width: 0; + height: 36Px; + padding: 0 12Px; + font-size: 13Px; + } + .p-hero { + padding-top: 88Px; + padding-bottom: 40Px; + min-height: unset; + } + .p-hero__mark { + font-size: 96Px; + } + .p-hero__media { + display: none; + width: min(260Px, 82vw); + margin-top: 16Px; + } + .p-intro { + padding-top: 0; + } + .p-intro__inner { + gap: 36Px; + padding-bottom: 0; + } + .p-intro__content { + gap: 32Px; + } + .p-intro__block { + gap: 24Px; + } + .p-intro__gallery-pagination { + gap: 12Px; + } + .p-intro__gallery-pagination .swiper-pagination-bullet { + width: 28Px; + height: 28Px; + } + .p-advantage__card { + padding: 24Px; + border-radius: 20Px; + } + .p-advantage__head { + margin-bottom: 16Px; + } + .p-advantage__title { + font-size: 22Px; + line-height: 30Px; + } + .p-advantage__icon { + width: 36Px; + height: 36Px; + } + .p-advantage__desc { + font-size: 16Px; + line-height: 24Px; + } + .p-feature__grid { + grid-template-columns: 1fr; + } + .p-feature__item { + padding: 24Px 0; + } + .p-feature__value, .p-feature__value--text { + font-size: 28Px; + line-height: 40Px; + margin-bottom: 12Px; + } + .p-feature__value span, .p-feature__value--text span { + font-size: 36Px; + } + .p-feature__label { + font-size: 16Px; + line-height: 24Px; + } + .p-spec { + padding-top: 48Px; + } + .p-spec__inner { + gap: 28Px; + } + .p-spec__models { + top: 56Px; + gap: 12Px; + padding: 16Px 0; + } + .p-spec__label-wrapper { + gap: 8Px; + } + .p-spec__label { + padding: 10Px 8Px; + min-width: unset; + } + .p-spec__tabs { + gap: 24Px; + justify-content: center; + } + .p-spec__tab-media { + width: 72Px; + height: 72Px; + } + .p-spec__tab-media img { + max-width: 52Px; + height: auto; + } + .p-spec__tab-name { + font-size: 16Px; + line-height: 22Px; + } + .p-spec__subtitle { + padding-top: 20Px; + padding-bottom: 16Px; + font-size: 16Px; + line-height: 22Px; + } + .p-spec__table { + min-width: 480Px; + } + .p-spec__table th, + .p-spec__table td { + padding: 10Px 12Px; + font-size: 13Px; + line-height: 18Px; + } + .p-download { + padding-top: 48Px; + padding-bottom: 48Px; + } + .p-download__content { + gap: 28Px; + } + .p-download__list { + gap: 16Px; + } + .p-download__item { + flex-direction: column; + align-items: flex-start; + gap: 16Px; + padding: 24Px; + } + .p-download__name { + margin-bottom: 12Px; + font-size: 20Px; + line-height: 28Px; + } + .p-download__meta { + gap: 12Px; + font-size: 14Px; + line-height: 20Px; + } + .p-download__link { + font-size: 16Px; + line-height: 22Px; + } + .p-related { + padding-top: 40Px; + padding-bottom: 56Px; + } + .p-related__inner { + gap: 28Px; + } + .p-related__link { + padding: 24Px; + gap: 16Px; + } + .p-related__media img { + max-width: 80Px; + max-height: 160Px; + } + .p-related__foot { + padding-top: 16Px; + } + .p-related__name { + font-size: 18Px; + line-height: 24Px; + } + .p-related__pagination { + margin-top: 24Px; + gap: 12Px; + } + .p-related__pagination .swiper-pagination-bullet { + width: 28Px; + height: 28Px; + } +} +/* 选型表弹窗 */ +.p-selection-modal { + position: fixed; + inset: 0; + z-index: 200; + display: flex; + align-items: center; + justify-content: center; +} +.p-selection-modal[hidden] { + display: none; +} +.p-selection-modal__overlay { + position: absolute; + inset: 0; + background: rgba(46, 53, 58, 0.5); +} +.p-selection-modal__dialog { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + width: 87.5rem; + max-width: calc(100vw - 2 * var(--p-x)); + max-height: calc(100vh - 7.5rem); + border-radius: 1.875rem; + background: var(--color-white); + overflow: hidden; +} +.p-selection-modal__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + flex-shrink: 0; + padding: 1.5rem 2.5rem; +} +.p-selection-modal__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); +} +.p-selection-modal__close { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + padding: 0; + border: none; + border-radius: 50%; + background: transparent; + color: var(--color-text); + cursor: pointer; + transition: background var(--duration-fast) var(--easing), color var(--duration-fast) var(--easing); +} +.p-selection-modal__close:hover { + background: rgba(175, 181, 185, 0.15); + color: var(--color-primary); +} +.p-selection-modal__close svg { + display: block; + width: 1.5rem; + height: 1.5rem; +} +.p-selection-modal__body { + min-height: 0; + padding-bottom: 3.125rem; +} +.p-selection-modal__table-wrap { + max-height: 37.5rem; + overflow: auto; + overscroll-behavior: contain; +} + +.p-selection-table { + width: 100%; + min-width: 82.5rem; + border-collapse: separate; + border-spacing: 0; + table-layout: fixed; +} +.p-selection-table th, +.p-selection-table td { + min-height: 3.75rem; + padding: 1.25rem 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-21); + text-align: center; + vertical-align: middle; + white-space: nowrap; +} +.p-selection-table th { + position: sticky; + top: 0; + z-index: 1; + font-weight: 500; + background: var(--color-white); + border-bottom: 0.125rem solid rgb(223, 224, 226); +} +.p-selection-table td { + border-right: 1px solid rgb(223, 224, 226); + border-bottom: 1px solid rgb(223, 224, 226); +} +.p-selection-table td:first-child { + border-left: 1px solid rgb(223, 224, 226); +} +.p-selection-table tbody tr:hover td { + background: rgba(175, 181, 185, 0.12); +} + +@media (max-width: 1439px) { + .p-selection-modal__dialog { + border-radius: 20Px; + } + .p-selection-modal__head { + padding: 20Px 24Px; + } + .p-selection-modal__title { + font-size: 20Px; + line-height: 28Px; + } + .p-selection-table th, + .p-selection-table td { + padding: 16Px 12Px; + font-size: 15Px; + line-height: 20Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/search-CCchQF0u.css b/public/themes/dist_static/static/css/search-CCchQF0u.css new file mode 100644 index 0000000..fd7854b --- /dev/null +++ b/public/themes/dist_static/static/css/search-CCchQF0u.css @@ -0,0 +1 @@ +.main-search{background:var(--color-white)}.sr-page{padding-top:calc(var(--header-h) + 9rem);padding-bottom:7.5rem}.sr-hero{flex-direction:column;align-items:center;gap:1.5rem;margin-bottom:5rem;display:flex}.sr-hero__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);text-align:center;margin:0}.sr-search.s-search{width:min(50rem,100%);padding-left:2rem}.sr-hot{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem 1rem;display:flex}.sr-hot__label{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22)}.sr-hot__list{flex-wrap:wrap;gap:1rem;display:flex}.sr-hot__tag{min-height:2.25rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);cursor:pointer;background:#afb5b926;border:0;border-radius:6.25rem;justify-content:center;align-items:center;padding:.5rem 1.5rem;transition:color .25s,background .25s;display:inline-flex}.sr-hot__tag:hover{color:var(--color-primary);background:#ef43351a}.sr-tabs{border-bottom:1px solid #dfe0e2;flex-wrap:wrap;align-items:stretch;gap:1.5rem;display:flex}.sr-tabs__item{min-height:4rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;transition:color var(--duration-fast) var(--easing);background:0 0;border:0;border-bottom:.125rem solid #0000;justify-content:center;align-items:center;margin-bottom:-1px;padding:1rem 0;display:inline-flex;position:relative}.sr-tabs__item.is-active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.sr-tabs__item:hover:not(.is-active){color:var(--color-text)}.sr-list{flex-direction:column;display:flex}.sr-item{border-bottom:1px solid #dfe0e2;align-items:stretch;gap:2rem;padding:2.5rem 0;display:flex}.sr-item[hidden]{display:none}.sr-item__media{aspect-ratio:300/200;background:#afb5b926;border-radius:1rem;flex-shrink:0;width:18.75rem;display:block;overflow:hidden}.sr-item__media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.sr-item__media:hover img{transform:scale(1.04)}.sr-item__body{flex-direction:column;flex:1;justify-content:space-between;gap:1.5rem;min-width:0;display:flex}.sr-item__main{flex-direction:column;gap:1rem;display:flex}.sr-item__meta{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.sr-item__type,.sr-item__date{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22)}.sr-item__type{font-weight:500}.sr-item__sep{background:#dfe0e2;width:1px;height:.875rem;display:block}.sr-item__title{font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:500;line-height:var(--font-28);margin:0}.sr-item__title a{color:var(--color-text);transition:color var(--duration-fast) var(--easing);text-decoration:none}.sr-item__title a:hover{color:var(--color-primary)}.sr-item__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-28);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;display:-webkit-box;overflow:hidden}.sr-item__more{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);transition:color var(--duration-fast) var(--easing);align-self:flex-start;align-items:center;gap:.625rem;text-decoration:none;display:inline-flex}.sr-item__more svg{flex-shrink:0;width:1rem;height:auto;display:block}.sr-item__more svg path{fill:currentColor;transition:fill var(--duration-fast) var(--easing)}.sr-item__more:hover{color:var(--color-primary)}.sr-empty{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);line-height:var(--font-24);text-align:center;margin:4rem 0 0}.sr-empty[hidden]{display:none}@media (width<=992px){.sr-page{padding-top:calc(var(--header-h) + 32px);padding-bottom:80px}.sr-hero{gap:20px;margin-bottom:48px}.sr-hero__title{font-size:36px;line-height:48px}.sr-search.s-search{padding-left:20px}.sr-tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;gap:16px;overflow-x:auto}.sr-tabs::-webkit-scrollbar{display:none}.sr-tabs__item{flex-shrink:0;min-height:52px;font-size:16px}.sr-item{gap:24px;padding:32px 0}.sr-item__media{width:220px}.sr-item__title{font-size:18px;line-height:26px}}@media (width<=576px){.sr-hero{align-items:stretch;margin-bottom:40px}.sr-hero__title{font-size:28px;line-height:36px}.sr-hot{justify-content:flex-start}.sr-hot__tag{min-height:32px;padding:4px 14px;font-size:14px}.sr-item{flex-direction:column;gap:16px;padding:24px 0}.sr-item__media{width:100%}.sr-item__body{gap:16px}.sr-item__main{gap:12px}.sr-item__title{font-size:16px;line-height:24px}.sr-item__desc{-webkit-line-clamp:4;font-size:14px;line-height:22px}} diff --git a/public/themes/dist_static/static/css/search.css b/public/themes/dist_static/static/css/search.css new file mode 100644 index 0000000..6eb3bbe --- /dev/null +++ b/public/themes/dist_static/static/css/search.css @@ -0,0 +1,325 @@ +.main-search { + background: var(--color-white); +} + +.sr-page { + padding-top: calc(var(--header-h) + 9rem); + padding-bottom: 7.5rem; +} + +.sr-hero { + display: flex; + flex-direction: column; + align-items: center; + gap: 1.5rem; + margin-bottom: 5rem; +} +.sr-hero__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); + text-align: center; +} + +.sr-search.s-search { + width: min(50rem, 100%); + padding-left: 2rem; +} + +.sr-hot { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 0.75rem 1rem; +} +.sr-hot__label { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); +} +.sr-hot__list { + display: flex; + flex-wrap: wrap; + gap: 1rem; +} +.sr-hot__tag { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2.25rem; + padding: 0.5rem 1.5rem; + border: 0; + border-radius: 6.25rem; + background: rgba(175, 181, 185, 0.15); + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + cursor: pointer; + transition: color 0.25s ease, background 0.25s ease; +} +.sr-hot__tag:hover { + color: var(--color-primary); + background: rgba(239, 67, 53, 0.1); +} + +.sr-tabs { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + align-items: stretch; + border-bottom: 1px solid rgb(223, 224, 226); +} +.sr-tabs__item { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 4rem; + padding: 1rem 0; + border: 0; + border-bottom: 0.125rem solid transparent; + margin-bottom: -1px; + background: transparent; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: color var(--duration-fast) var(--easing); +} +.sr-tabs__item.is-active { + color: var(--color-primary); + border-bottom-color: var(--color-primary); +} +.sr-tabs__item:hover:not(.is-active) { + color: var(--color-text); +} + +.sr-list { + display: flex; + flex-direction: column; +} + +.sr-item { + display: flex; + gap: 2rem; + align-items: stretch; + padding: 2.5rem 0; + border-bottom: 1px solid rgb(223, 224, 226); +} +.sr-item[hidden] { + display: none; +} +.sr-item__media { + display: block; + flex-shrink: 0; + width: 18.75rem; + aspect-ratio: 300/200; + overflow: hidden; + border-radius: 1rem; + background: rgba(175, 181, 185, 0.15); +} +.sr-item__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +} +.sr-item__media:hover img { + transform: scale(1.04); +} +.sr-item__body { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 1.5rem; +} +.sr-item__main { + display: flex; + flex-direction: column; + gap: 1rem; +} +.sr-item__meta { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.75rem; +} +.sr-item__type, .sr-item__date { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); +} +.sr-item__type { + font-weight: 500; +} +.sr-item__sep { + display: block; + width: 1px; + height: 0.875rem; + background: rgb(223, 224, 226); +} +.sr-item__title { + margin: 0; + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 500; + line-height: var(--font-28); +} +.sr-item__title a { + color: var(--color-text); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.sr-item__title a:hover { + color: var(--color-primary); +} +.sr-item__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-28); + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: hidden; +} +.sr-item__more { + display: inline-flex; + align-items: center; + gap: 0.625rem; + align-self: flex-start; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.sr-item__more svg { + display: block; + width: 1rem; + height: auto; + flex-shrink: 0; +} +.sr-item__more svg path { + fill: currentColor; + transition: fill var(--duration-fast) var(--easing); +} +.sr-item__more:hover { + color: var(--color-primary); +} + +.sr-empty { + margin: 4rem 0 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + line-height: var(--font-24); + text-align: center; +} +.sr-empty[hidden] { + display: none; +} + +@media (max-width: 992px) { + .sr-page { + padding-top: calc(var(--header-h) + 32Px); + padding-bottom: 80Px; + } + .sr-hero { + gap: 20Px; + margin-bottom: 48Px; + } + .sr-hero__title { + font-size: 36Px; + line-height: 48Px; + } + .sr-search.s-search { + padding-left: 20Px; + } + .sr-tabs { + gap: 16Px; + overflow-x: auto; + flex-wrap: nowrap; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + } + .sr-tabs::-webkit-scrollbar { + display: none; + } + .sr-tabs__item { + flex-shrink: 0; + min-height: 52Px; + font-size: 16Px; + } + .sr-item { + gap: 24Px; + padding: 32Px 0; + } + .sr-item__media { + width: 220Px; + } + .sr-item__title { + font-size: 18Px; + line-height: 26Px; + } +} +@media (max-width: 576px) { + .sr-hero { + align-items: stretch; + margin-bottom: 40Px; + } + .sr-hero__title { + font-size: 28Px; + line-height: 36Px; + } + .sr-hot { + justify-content: flex-start; + } + .sr-hot__tag { + min-height: 32Px; + padding: 4Px 14Px; + font-size: 14Px; + } + .sr-item { + flex-direction: column; + gap: 16Px; + padding: 24Px 0; + } + .sr-item__media { + width: 100%; + } + .sr-item__body { + gap: 16Px; + } + .sr-item__main { + gap: 12Px; + } + .sr-item__title { + font-size: 16Px; + line-height: 24Px; + } + .sr-item__desc { + font-size: 14Px; + line-height: 22Px; + -webkit-line-clamp: 4; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/solution-QRc3Wj_R.css b/public/themes/dist_static/static/css/solution-QRc3Wj_R.css new file mode 100644 index 0000000..9f109d4 --- /dev/null +++ b/public/themes/dist_static/static/css/solution-QRc3Wj_R.css @@ -0,0 +1 @@ +.main-solution{background:var(--color-white);overflow:hidden}.sl-hero__intro{padding-top:calc(var(--header-h) + 7.5rem);padding-bottom:2.5rem}.sl-hero__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64)}.sl-hero__desc{max-width:50rem;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-28);margin-left:auto}.sl-hero__media{width:100%;height:45rem;overflow:hidden}.sl-hero__media img{object-fit:cover;width:100%;height:100%;display:block}.sl-adv{padding-top:7.5rem;padding-bottom:0}.sl-adv__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 4.6875rem}.sl-adv__list{grid-template-columns:repeat(4,minmax(0,1fr));gap:0;display:grid}.sl-adv__item{border-left:1px solid #dfe0e2;min-height:15rem;padding:0 2.5rem}.sl-adv__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-42);margin:0 0 2rem}.sl-adv__text{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-28);margin:0}.sl-arch{padding-top:7.5rem;padding-bottom:0}.sl-arch__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl-arch__panel{background:var(--color-white);border:1px solid #dfe0e2;border-radius:1.875rem;overflow:hidden}.sl-arch__panel img{width:100%;height:auto;display:block}.sl-core{padding-top:7.5rem;padding-bottom:0}.sl-core__head{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:2.8125rem;display:flex}.sl-core__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.sl-core__swiper{overflow:hidden}.sl-core__arrows-mobile{display:none}.sl-core__card{min-width:0;height:auto}.sl-core__card-link{height:100%;color:inherit;transition:background var(--duration-normal) var(--easing);background:0 0;border-radius:1rem;flex-direction:column;gap:1.25rem;padding:0;text-decoration:none;display:flex}.sl-core__card-media{aspect-ratio:16/10;border-radius:1rem;overflow:hidden}.sl-core__card-media img{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.sl-core__card-link:hover .sl-core__card-media img{transform:scale(1.1)}.sl-core__card-foot{border-top:none;justify-content:space-between;align-items:center;gap:.75rem;padding-top:0;display:flex}.sl-core__card-name{min-width:0;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-27);transition:color var(--duration-fast) var(--easing);flex:1;margin:0}.sl-core__card-link:hover .sl-core__card-name{color:var(--color-primary)}.sl-core__card-arrow{color:var(--color-primary);transition:color var(--duration-fast) var(--easing);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.sl-core__card-arrow img,.sl-core__card-arrow svg{width:.75rem;height:auto;display:block}.sl-clients{padding-top:7.5rem;padding-bottom:0}.sl-clients__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl-clients__grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:1.5rem;display:grid}.sl-clients__item{background:var(--color-white);box-sizing:border-box;border:1px solid #dfe0e2;border-radius:.75rem;justify-content:center;align-items:center;height:10rem;padding:1rem;display:flex}.sl-clients__item img{object-fit:contain;width:auto;max-width:60%;height:auto;display:block}.sl-cases{padding-top:7.5rem;padding-bottom:7.5rem;position:relative;overflow:visible}.sl-cases__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl-cases__body{grid-template-columns:minmax(0,57.375rem) minmax(0,40.625rem);align-items:stretch;gap:0;display:grid}.sl-cases__copy{border-left:1px solid #dfe0e2;flex-direction:column;justify-content:space-between;min-width:0;min-height:31.6875rem;padding:0 5rem;display:flex}.sl-cases__content-swiper{flex:1;width:100%;min-width:0;max-width:100%;overflow:hidden}.sl-cases__content-swiper .swiper-wrapper{max-width:100%}.sl-cases__content-swiper .swiper-slide{box-sizing:border-box;max-width:100%;height:auto;width:100%!important}.sl-cases__panel{box-sizing:border-box;width:100%;min-width:0;max-width:100%}.sl-cases__logo{width:min(13.75rem,100%);height:auto;margin-bottom:2.5rem;display:block}.sl-cases__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-42);word-break:break-word;margin:0 0 1rem}.sl-cases__sub-name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-27);word-break:break-word;margin:0 0 1.5rem}.sl-cases__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-26);word-break:break-word;overflow-wrap:break-word;margin:0 0 2.5rem}.sl-cases__tags{flex-wrap:wrap;gap:.5rem;display:flex}.sl-cases__tags span{color:var(--color-primary);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:500;line-height:var(--font-22);background:#ef43351a;border-radius:6.25rem;align-items:center;padding:.5rem 1.5rem;display:inline-flex}.sl-cases__stage{align-self:center;min-width:0;margin-left:-2.5rem;position:relative;overflow:visible}.sl-cases__media-swiper.swiper{aspect-ratio:650/457;width:100%;position:relative;overflow:hidden}.sl-cases__media-swiper.swiper .swiper-slide{backface-visibility:hidden;background:#2e353a0f;border-radius:1.5rem;overflow:hidden}.sl-cases__media-swiper.swiper .swiper-slide img{object-fit:cover;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.sl-cases__card{margin:0}.sl-cases__nav{justify-content:space-between;align-items:flex-end;gap:1.5rem;margin-top:3.5rem;display:flex}.sl-cases__pager{font-family:D-DIN-PRO,MiSans VF,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-20);align-items:center;gap:.5rem;display:inline-flex}.sl-cases__pager-current{color:var(--color-text)}.sl-cases__pager-sep,.sl-cases__pager-total{color:#afb5b9}@media (width<=1439px){.sl-hero__intro{grid-template-columns:1fr;gap:24px}.sl-hero__desc{max-width:100%;margin-top:24px}.sl-hero__media{height:520px}.sl-hero__title{font-size:40px;line-height:54px}.sl-adv,.sl-arch,.sl-core,.sl-clients,.sl-cases{padding-top:4rem}.sl-adv__list{grid-template-columns:repeat(2,minmax(0,1fr));gap:40px 24px}.sl-adv__item{border-top:1px solid #dfe0e2;border-left:0;min-height:10rem;padding:24px 0 0}.sl-clients__grid{grid-template-columns:repeat(4,minmax(0,1fr))}.sl-cases__body{grid-template-columns:1fr;gap:40px}.sl-cases__copy{min-height:0;padding:0 0 0 24px}.sl-cases__stage{justify-self:center;width:100%;margin-left:0}.sl-cases__nav{margin-top:32px}}@media (width<=992px){.sl-adv__list{grid-template-columns:1fr}.sl-clients__grid{grid-template-columns:repeat(3,minmax(0,1fr))}.sl-cases__nav{margin-top:24px}}@media (width<=576px){.sl-hero__intro{padding-top:calc(var(--header-h) + 5rem)}.sl-hero__title,.sl-hero .sl-adv__title,.sl-hero .sl-arch__title,.sl-hero .sl-core__title,.sl-hero .sl-clients__title,.sl-hero .sl-cases__title{font-size:32px;line-height:44px}.sl-hero__media{height:280px}.sl-adv__name,.sl-cases__name{font-size:24px;line-height:32px}.sl-clients__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.sl-clients__item{height:100px}.sl-cases__copy{border-left:none;padding-left:0}.sl-cases__body{grid-template-columns:1fr}.sl-cases__stage{order:-1;margin-left:0}.sl-cases__logo{width:160px}.sl-core__head .s-arrows{display:none}.sl-core__arrows-mobile{justify-content:flex-start;margin-top:24px;display:flex}.sl-core__arrows-mobile .s-arrows{gap:16px;display:flex}.sl-core__swiper{margin:0 -16px;padding:0 16px;overflow:visible}} diff --git a/public/themes/dist_static/static/css/solution.css b/public/themes/dist_static/static/css/solution.css new file mode 100644 index 0000000..b49c0a0 --- /dev/null +++ b/public/themes/dist_static/static/css/solution.css @@ -0,0 +1,510 @@ +@charset "UTF-8"; +.main-solution { + background: var(--color-white); + overflow: hidden; +} + +.sl-hero__intro { + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 2.5rem; +} +.sl-hero__title { + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-hero__desc { + max-width: 50rem; + margin-left: auto; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-28); +} +.sl-hero__media { + width: 100%; + height: 45rem; + overflow: hidden; +} +.sl-hero__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.sl-adv { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl-adv__title { + margin: 0 0 4.6875rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-adv__list { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 0; +} +.sl-adv__item { + min-height: 15rem; + padding: 0 2.5rem; + border-left: 1px solid rgb(223, 224, 226); +} +.sl-adv__name { + margin: 0 0 2rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-42); +} +.sl-adv__text { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-28); +} + +.sl-arch { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl-arch__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-arch__panel { + overflow: hidden; + border: 1px solid rgb(223, 224, 226); + border-radius: 1.875rem; + background: var(--color-white); +} +.sl-arch__panel img { + display: block; + width: 100%; + height: auto; +} + +.sl-core { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl-core__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 2.8125rem; +} +.sl-core__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-core__swiper { + overflow: hidden; +} +.sl-core__arrows-mobile { + display: none; +} +.sl-core__card { + min-width: 0; + height: auto; +} +.sl-core__card-link { + display: flex; + flex-direction: column; + gap: 1.25rem; + height: 100%; + padding: 0; + border-radius: 1rem; + background: transparent; + text-decoration: none; + color: inherit; + transition: background var(--duration-normal) var(--easing); +} +.sl-core__card-media { + aspect-ratio: 16/10; + overflow: hidden; + border-radius: 1rem; +} +.sl-core__card-media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +} +.sl-core__card-link:hover .sl-core__card-media img { + transform: scale(1.1); +} +.sl-core__card-foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + padding-top: 0; + border-top: none; +} +.sl-core__card-name { + margin: 0; + flex: 1; + min-width: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-27); + transition: color var(--duration-fast) var(--easing); +} +.sl-core__card-link:hover .sl-core__card-name { + color: var(--color-primary); +} +.sl-core__card-arrow { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: var(--color-primary); + transition: color var(--duration-fast) var(--easing); +} +.sl-core__card-arrow img, .sl-core__card-arrow svg { + display: block; + width: 0.75rem; + height: auto; +} + +.sl-clients { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl-clients__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-clients__grid { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 1.5rem; +} +.sl-clients__item { + display: flex; + align-items: center; + justify-content: center; + height: 10rem; + padding: 1rem; + border: 1px solid rgb(223, 224, 226); + border-radius: 0.75rem; + background: var(--color-white); + box-sizing: border-box; +} +.sl-clients__item img { + display: block; + max-width: 60%; + width: auto; + height: auto; + object-fit: contain; +} + +.sl-cases { + position: relative; + padding-top: 7.5rem; + padding-bottom: 7.5rem; + overflow: visible; +} +.sl-cases__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl-cases__body { + display: grid; + grid-template-columns: minmax(0, 57.375rem) minmax(0, 40.625rem); + gap: 0; + align-items: stretch; +} +.sl-cases__copy { + display: flex; + flex-direction: column; + justify-content: space-between; + min-width: 0; + min-height: 31.6875rem; + padding: 0 5rem; + border-left: 1px solid rgb(223, 224, 226); +} +.sl-cases__content-swiper { + flex: 1; + width: 100%; + min-width: 0; + max-width: 100%; + overflow: hidden; +} +.sl-cases__content-swiper .swiper-wrapper { + max-width: 100%; +} +.sl-cases__content-swiper .swiper-slide { + width: 100% !important; + max-width: 100%; + height: auto; + box-sizing: border-box; +} +.sl-cases__panel { + width: 100%; + max-width: 100%; + min-width: 0; + box-sizing: border-box; +} +.sl-cases__logo { + display: block; + width: min(13.75rem, 100%); + height: auto; + margin-bottom: 2.5rem; +} +.sl-cases__name { + margin: 0 0 1rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-42); + word-break: break-word; +} +.sl-cases__sub-name { + margin: 0 0 1.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-27); + word-break: break-word; +} +.sl-cases__desc { + margin: 0 0 2.5rem; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-26); + word-break: break-word; + overflow-wrap: break-word; +} +.sl-cases__tags { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} +.sl-cases__tags span { + display: inline-flex; + align-items: center; + padding: 0.5rem 1.5rem; + border-radius: 6.25rem; + background: rgba(239, 67, 53, 0.1); + color: var(--color-primary); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 500; + line-height: var(--font-22); +} +.sl-cases__stage { + position: relative; + align-self: center; + margin-left: -2.5rem; + overflow: visible; + min-width: 0; +} +.sl-cases__media-swiper.swiper { + position: relative; + width: 100%; + aspect-ratio: 650/457; + overflow: hidden; +} +.sl-cases__media-swiper.swiper .swiper-slide { + overflow: hidden; + border-radius: 1.5rem; + background: rgba(46, 53, 58, 0.06); + backface-visibility: hidden; +} +.sl-cases__media-swiper.swiper .swiper-slide img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + pointer-events: none; + user-select: none; +} +.sl-cases__card { + margin: 0; +} +.sl-cases__nav { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 1.5rem; + margin-top: 3.5rem; +} +.sl-cases__pager { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-family: "D-DIN-PRO", "MiSans VF", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-20); +} +.sl-cases__pager-current { + color: var(--color-text); +} +.sl-cases__pager-sep, .sl-cases__pager-total { + color: rgb(175, 181, 185); +} + +@media (max-width: 1439px) { + .sl-hero__intro { + grid-template-columns: 1fr; + gap: 24Px; + } + .sl-hero__desc { + margin-top: 24Px; + max-width: 100%; + } + .sl-hero__media { + height: 520Px; + } + .sl-hero__title { + font-size: 40Px; + line-height: 54Px; + } + .sl-adv, + .sl-arch, + .sl-core, + .sl-clients, + .sl-cases { + padding-top: 4rem; + } + .sl-adv__list { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 40Px 24Px; + } + .sl-adv__item { + padding: 0; + border-left: 0; + border-top: 1Px solid rgb(223, 224, 226); + padding-top: 24Px; + min-height: 10rem; + } + .sl-clients__grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + .sl-cases__body { + grid-template-columns: 1fr; + gap: 40Px; + } + .sl-cases__copy { + min-height: 0; + padding: 0 0 0 24Px; + } + .sl-cases__stage { + margin-left: 0; + width: 100%; + justify-self: center; + } + .sl-cases__nav { + margin-top: 32Px; + } +} +@media (max-width: 992px) { + .sl-adv__list { + grid-template-columns: 1fr; + } + .sl-clients__grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + .sl-cases__nav { + margin-top: 24Px; + } +} +@media (max-width: 576px) { + .sl-hero__intro { + padding-top: calc(var(--header-h) + 5rem); + } + .sl-hero__title, + .sl-hero .sl-adv__title, + .sl-hero .sl-arch__title, + .sl-hero .sl-core__title, + .sl-hero .sl-clients__title, + .sl-hero .sl-cases__title { + font-size: 32Px; + line-height: 44Px; + } + .sl-hero__media { + height: 280Px; + } + .sl-adv__name, + .sl-cases__name { + font-size: 24Px; + line-height: 32Px; + } + .sl-clients__grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12Px; + } + .sl-clients__item { + height: 100Px; + } + .sl-cases__copy { + padding-left: 0; + border-left: none; + } + .sl-cases__body { + grid-template-columns: 1fr; + } + .sl-cases__stage { + order: -1; + margin-left: 0; + } + .sl-cases__logo { + width: 160Px; + } + /* 核心系统/产品模块 - 移动端布局调整 */ + .sl-core__head .s-arrows { + display: none; + } + .sl-core__arrows-mobile { + display: flex; + justify-content: flex-start; + margin-top: 24Px; + } + .sl-core__arrows-mobile .s-arrows { + display: flex; + gap: 16Px; + } + .sl-core__swiper { + overflow: visible; + margin: 0 -16Px; + padding: 0 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/solution2-BALfo6CE.css b/public/themes/dist_static/static/css/solution2-BALfo6CE.css new file mode 100644 index 0000000..5c2bbb8 --- /dev/null +++ b/public/themes/dist_static/static/css/solution2-BALfo6CE.css @@ -0,0 +1 @@ +@property --ring-angle{syntax:"";inherits:false;initial-value:0deg}@keyframes progressRing{0%{--ring-angle:0deg}to{--ring-angle:360deg}}.main-solution2{background:var(--color-white);overflow:hidden}.sl2-hero__intro{padding-top:calc(var(--header-h) + 7.5rem);grid-template-columns:minmax(0,34.8125rem) minmax(0,50rem);justify-content:space-between;align-items:start;gap:2.5rem;padding-bottom:3.75rem;display:grid}.sl2-hero__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.sl2-hero__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin:4rem 0 0}.sl2-hero__media{width:100%;height:45rem;overflow:hidden}.sl2-hero__media img{object-fit:cover;width:100%;height:100%;display:block}.sl2-adv{padding-top:7.5rem;padding-bottom:0}.sl2-adv__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl2-adv__list{grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;margin:0;padding:0;list-style:none;display:grid}.sl2-adv__item{-webkit-backdrop-filter:blur(1.25rem);backdrop-filter:blur(1.25rem);background:#afb5b926;border-radius:1.5rem;flex-direction:column;gap:1.5rem;min-height:21.875rem;padding:2.5rem;display:flex}.sl2-adv__icon{flex-shrink:0;width:3rem;height:3rem;display:block}.sl2-adv__icon svg{width:100%;height:100%;display:block}.sl2-adv__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-42);margin:0}.sl2-adv__text{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin:0}.sl2-arch{padding-top:7.5rem;padding-bottom:0}.sl2-arch__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl2-arch__panel{background:var(--color-white);border:1px solid #dfe0e2;border-radius:1.875rem;overflow:hidden}.sl2-arch__panel img{width:100%;height:auto;display:block}.sl2-core{padding-top:7.5rem;padding-bottom:0}.sl2-core__head{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:3.125rem;display:flex}.sl2-core__head .s-arrows{display:none}.sl2-core__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.sl2-core__swiper{overflow:hidden}.sl2-core__slide{box-sizing:border-box;opacity:.3;width:56.25rem;transition:opacity var(--duration-normal) var(--easing);grid-template-columns:minmax(0,29.6875rem) minmax(0,25rem);justify-content:start;align-items:start;gap:3.5rem;display:grid}.sl2-core__slide.swiper-slide-active{opacity:1}.sl2-core__content{flex-direction:column;gap:2.5rem;min-width:0;padding-top:1.5rem;display:flex}.sl2-core__content .s-btn{align-self:flex-start}.sl2-core__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:400;line-height:var(--font-42);margin:0}.sl2-core__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);margin:0}.sl2-core__media{background:#afb5b926;border-radius:1.5rem;justify-content:center;align-items:center;min-height:31.25rem;display:flex;overflow:hidden}.sl2-core__media img{object-fit:contain;width:auto;max-width:100%;max-height:25rem;display:block}.sl2-core__pagination{justify-content:flex-start;align-items:center;gap:1rem;margin-top:2.5rem;display:flex;position:static}.sl2-core__pagination .swiper-pagination-bullet{opacity:1;background:0 0;border-radius:50%;width:2.5rem;height:2.5rem;margin:0;position:relative}.sl2-core__pagination .swiper-pagination-bullet:before{content:"";background:conic-gradient(transparent var(--ring-angle), transparent var(--ring-angle));border-radius:50%;position:absolute;inset:0;-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - .1875rem - .5px),#000 calc(100% - .1875rem + .5px));mask:radial-gradient(farthest-side,#0000 calc(100% - .1875rem - .5px),#000 calc(100% - .1875rem + .5px))}.sl2-core__pagination .swiper-pagination-bullet:after{content:"";width:.375rem;height:.375rem;transition:background var(--duration-normal) var(--easing);background:#afb5b9;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.sl2-core__pagination .swiper-pagination-bullet-active:before{background:conic-gradient(var(--color-primary) var(--ring-angle), transparent var(--ring-angle));animation:3s linear forwards progressRing}.sl2-core__pagination .swiper-pagination-bullet-active:after{background:var(--color-primary)}.sl2-scene{padding-top:7.5rem;padding-bottom:0}.sl2-scene__head{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:3.125rem;display:flex}.sl2-scene__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.sl2-scene__swiper{overflow:visible}.sl2-scene__slide{background:var(--color-text);border-radius:1.5rem;width:40rem;height:30rem;position:relative;overflow:hidden}.sl2-scene__bg{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.sl2-scene__panel{z-index:1;-webkit-backdrop-filter:blur(1.25rem);box-sizing:border-box;opacity:0;visibility:hidden;pointer-events:none;background:#ffffffe6;border-radius:1.25rem;flex-direction:column;gap:1.5rem;padding:2.5rem 2rem;transition:opacity .3s,transform .3s,visibility .3s;display:flex;position:absolute;bottom:2rem;left:2rem;right:2rem;transform:translateY(.75rem)}.sl2-scene__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:500;line-height:var(--font-42);margin:0}.sl2-scene__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-28);margin:0}.sl2-scene__slide:after{content:"";pointer-events:none;background:linear-gradient(#2e353a00 0%,#2e353acc 100%);height:15rem;position:absolute;bottom:0;left:0;right:0}.sl2-scene__slide:hover .sl2-scene__panel{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}.sl2-scene__slide:hover .sl2-scene__label{opacity:0;visibility:hidden}.sl2-scene__label{z-index:1;color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-32);font-weight:500;line-height:var(--font-42);opacity:1;visibility:visible;margin:0;transition:opacity .3s,visibility .3s;position:absolute;bottom:2.625rem;left:2rem;right:2rem}.sl2-more{padding-top:7.5rem;padding-bottom:7.5rem}.sl2-more__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0 0 3.125rem}.sl2-more__grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;display:grid}.sl2-more__card{min-width:0;transition:color var(--duration-fast) var(--easing);flex-direction:column;gap:2.8125rem;text-decoration:none;display:flex}.sl2-more__card:hover .sl2-more__name{color:var(--color-primary)}.sl2-more__card:hover .sl2-more__link{border-top-color:var(--color-primary);color:var(--color-primary)}.sl2-more__card:hover .sl2-more__media img{transform:scale(1.1)}.sl2-more__media{background:#afb5b926;border-radius:1.25rem;justify-content:center;align-items:center;height:21.875rem;display:flex;overflow:hidden}.sl2-more__media img{object-fit:contain;width:100%;max-width:100%;transition:transform var(--duration-normal) var(--easing);display:block}.sl2-more__body{flex-direction:column;min-width:0;display:flex}.sl2-more__name{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-24);font-weight:400;line-height:var(--font-32);transition:color var(--duration-fast) var(--easing);margin:0 0 1.5rem}.sl2-more__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-28);margin-bottom:2rem}.sl2-more__link{box-sizing:border-box;width:100%;color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);align-items:center;gap:.625rem;transition:color .3s,border-color .3s;display:inline-flex}.sl2-more__link svg{width:1rem;height:auto;display:block}.sl2-more__link path{fill:currentColor}.sl2-more__link:hover{color:var(--color-primary)}@media (width<=1439px){.sl2-hero__intro{grid-template-columns:1fr;gap:24px}.sl2-hero__desc{max-width:100%;margin-top:0}.sl2-hero__title{font-size:40px;line-height:54px}.sl2-hero__media{height:520px}.sl2-adv,.sl2-arch,.sl2-core,.sl2-scene,.sl2-more{padding-top:4rem}.sl2-adv__list{grid-template-columns:1fr;gap:24px}.sl2-core__slide{grid-template-columns:1fr;gap:32px;width:520px}.sl2-core__media{min-height:360px}.sl2-scene__slide{width:520px;height:390px}.sl2-more__grid{grid-template-columns:1fr;gap:32px}}@media (width<=992px){.sl2-scene__slide{width:420px;height:320px}.sl2-core__slide{width:420px}.sl2-scene__panel{padding:24px 20px;bottom:20px;left:20px;right:20px}.sl2-scene__name,.sl2-scene__label{font-size:24px;line-height:32px}}@media (width<=576px){.sl2-hero__intro{padding-top:calc(var(--header-h) + 5rem)}.sl2-hero__title,.sl2-hero .sl2-adv__title,.sl2-hero .sl2-arch__title,.sl2-hero .sl2-core__title,.sl2-hero .sl2-scene__title,.sl2-hero .sl2-more__title{font-size:32px;line-height:44px}.sl2-hero__media{height:280px}.sl2-adv__name,.sl2-core__name{font-size:24px;line-height:32px}.sl2-adv__text,.sl2-core__desc{font-size:18px;line-height:26px}.sl2-scene__slide{width:300px;height:260px}.sl2-core__slide{width:300px}.sl2-scene__panel{gap:12px;padding:16px}.sl2-scene__desc{font-size:16px;line-height:24px}.sl2-more__media{height:240px}} diff --git a/public/themes/dist_static/static/css/solution2.css b/public/themes/dist_static/static/css/solution2.css new file mode 100644 index 0000000..b66784b --- /dev/null +++ b/public/themes/dist_static/static/css/solution2.css @@ -0,0 +1,599 @@ +@property --ring-angle { + syntax: ""; + inherits: false; + initial-value: 0deg; +} +@keyframes progressRing { + from { + --ring-angle: 0deg; + } + to { + --ring-angle: 360deg; + } +} +.main-solution2 { + background: var(--color-white); + overflow: hidden; +} + +.sl2-hero__intro { + display: grid; + grid-template-columns: minmax(0, 34.8125rem) minmax(0, 50rem); + justify-content: space-between; + align-items: start; + gap: 2.5rem; + padding-top: calc(var(--header-h) + 7.5rem); + padding-bottom: 3.75rem; +} +.sl2-hero__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-hero__desc { + margin: 4rem 0 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.sl2-hero__media { + width: 100%; + height: 45rem; + overflow: hidden; +} +.sl2-hero__media img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +.sl2-adv { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl2-adv__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-adv__list { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2.5rem; + margin: 0; + padding: 0; + list-style: none; +} +.sl2-adv__item { + display: flex; + flex-direction: column; + gap: 1.5rem; + min-height: 21.875rem; + padding: 2.5rem; + border-radius: 1.5rem; + background: rgba(175, 181, 185, 0.15); + backdrop-filter: blur(1.25rem); +} +.sl2-adv__icon { + display: block; + width: 3rem; + height: 3rem; + flex-shrink: 0; +} +.sl2-adv__icon svg { + display: block; + width: 100%; + height: 100%; +} +.sl2-adv__name { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-42); +} +.sl2-adv__text { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} + +.sl2-arch { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl2-arch__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-arch__panel { + overflow: hidden; + border-radius: 1.875rem; + background: var(--color-white); + border: 1px solid rgb(223, 224, 226); +} +.sl2-arch__panel img { + display: block; + width: 100%; + height: auto; +} + +.sl2-core { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl2-core__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 3.125rem; +} +.sl2-core__head .s-arrows { + display: none; +} +.sl2-core__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-core__swiper { + overflow: hidden; +} +.sl2-core__slide { + display: grid; + grid-template-columns: minmax(0, 29.6875rem) minmax(0, 25rem); + justify-content: start; + align-items: start; + gap: 3.5rem; + width: 56.25rem; + box-sizing: border-box; + opacity: 0.3; + transition: opacity var(--duration-normal) var(--easing); +} +.sl2-core__slide.swiper-slide-active { + opacity: 1; +} +.sl2-core__content { + display: flex; + flex-direction: column; + gap: 2.5rem; + padding-top: 1.5rem; + min-width: 0; +} +.sl2-core__content .s-btn { + align-self: flex-start; +} +.sl2-core__name { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 400; + line-height: var(--font-42); +} +.sl2-core__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); +} +.sl2-core__media { + display: flex; + align-items: center; + justify-content: center; + min-height: 31.25rem; + border-radius: 1.5rem; + background: rgba(175, 181, 185, 0.15); + overflow: hidden; +} +.sl2-core__media img { + display: block; + width: auto; + max-width: 100%; + max-height: 25rem; + object-fit: contain; +} +.sl2-core__pagination { + position: static; + margin-top: 2.5rem; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 1rem; +} +.sl2-core__pagination .swiper-pagination-bullet { + position: relative; + width: 2.5rem; + height: 2.5rem; + margin: 0; + opacity: 1; + border-radius: 50%; + background: transparent; +} +.sl2-core__pagination .swiper-pagination-bullet::before { + content: ""; + position: absolute; + inset: 0; + border-radius: 50%; + background: conic-gradient(transparent var(--ring-angle), transparent var(--ring-angle)); + mask: radial-gradient(farthest-side, transparent calc(100% - 0.1875rem - 0.5px), #000 calc(100% - 0.1875rem + 0.5px)); + -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 0.1875rem - 0.5px), #000 calc(100% - 0.1875rem + 0.5px)); +} +.sl2-core__pagination .swiper-pagination-bullet::after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 0.375rem; + height: 0.375rem; + border-radius: 50%; + background: rgb(175, 181, 185); + transform: translate(-50%, -50%); + transition: background var(--duration-normal) var(--easing); +} +.sl2-core__pagination .swiper-pagination-bullet-active::before { + background: conic-gradient(var(--color-primary) var(--ring-angle), transparent var(--ring-angle)); + animation: progressRing 3s linear forwards; +} +.sl2-core__pagination .swiper-pagination-bullet-active::after { + background: var(--color-primary); +} + +.sl2-scene { + padding-top: 7.5rem; + padding-bottom: 0; +} +.sl2-scene__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-bottom: 3.125rem; +} +.sl2-scene__head .s-arrows { + display: none; +} +.sl2-scene__arrows-mobile { + display: none; +} +.sl2-scene__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-scene__swiper { + overflow: visible; +} +.sl2-scene__slide { + position: relative; + width: 40rem; + height: 30rem; + border-radius: 1.5rem; + overflow: hidden; + background: var(--color-text); +} +.sl2-scene__bg { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} +.sl2-scene__panel { + position: absolute; + left: 2rem; + right: 2rem; + bottom: 2rem; + z-index: 1; + display: flex; + flex-direction: column; + gap: 1.5rem; + padding: 2.5rem 2rem; + border-radius: 1.25rem; + background: rgba(255, 255, 255, 0.9); + backdrop-filter: blur(1.25rem); + -webkit-backdrop-filter: blur(1.25rem); + box-sizing: border-box; + opacity: 0; + visibility: hidden; + transform: translateY(0.75rem); + transition: opacity 0.3s ease, transform 0.3s ease, visibility 0.3s ease; + pointer-events: none; +} +.sl2-scene__name { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 500; + line-height: var(--font-42); +} +.sl2-scene__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-28); +} +.sl2-scene__slide::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 15rem; + background: linear-gradient(180deg, rgba(46, 53, 58, 0) 0%, rgba(46, 53, 58, 0.8) 100%); + pointer-events: none; +} +.sl2-scene__slide:hover .sl2-scene__panel { + opacity: 1; + visibility: visible; + transform: translateY(0); + pointer-events: auto; +} +.sl2-scene__slide:hover .sl2-scene__label { + opacity: 0; + visibility: hidden; +} +.sl2-scene__label { + position: absolute; + left: 2rem; + right: 2rem; + bottom: 2.625rem; + z-index: 1; + margin: 0; + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-32); + font-weight: 500; + line-height: var(--font-42); + opacity: 1; + visibility: visible; + transition: opacity 0.3s ease, visibility 0.3s ease; +} + +.sl2-more { + padding-top: 7.5rem; + padding-bottom: 7.5rem; +} +.sl2-more__title { + margin: 0 0 3.125rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.sl2-more__grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2.5rem; +} +.sl2-more__card { + display: flex; + flex-direction: column; + gap: 2.8125rem; + min-width: 0; + text-decoration: none; + transition: color var(--duration-fast) var(--easing); +} +.sl2-more__card:hover .sl2-more__name { + color: var(--color-primary); +} +.sl2-more__card:hover .sl2-more__link { + border-top-color: var(--color-primary); + color: var(--color-primary); +} +.sl2-more__card:hover .sl2-more__media img { + transform: scale(1.1); +} +.sl2-more__media { + display: flex; + align-items: center; + justify-content: center; + height: 21.875rem; + border-radius: 1.25rem; + background: rgba(175, 181, 185, 0.15); + overflow: hidden; +} +.sl2-more__media img { + display: block; + width: 100%; + max-width: 100%; + object-fit: contain; + transition: transform var(--duration-normal) var(--easing); +} +.sl2-more__body { + display: flex; + flex-direction: column; + min-width: 0; +} +.sl2-more__name { + margin: 0 0 1.5rem; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-24); + font-weight: 400; + line-height: var(--font-32); + transition: color var(--duration-fast) var(--easing); +} +.sl2-more__desc { + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-28); + margin-bottom: 2rem; +} +.sl2-more__link { + display: inline-flex; + align-items: center; + gap: 0.625rem; + width: 100%; + box-sizing: border-box; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + transition: color 0.3s ease, border-color 0.3s ease; +} +.sl2-more__link svg { + width: 1rem; + height: auto; + display: block; +} +.sl2-more__link path { + fill: currentColor; +} +.sl2-more__link:hover { + color: var(--color-primary); +} + +@media (max-width: 1439px) { + .sl2-hero__intro { + grid-template-columns: 1fr; + gap: 24Px; + } + .sl2-hero__desc { + margin-top: 0; + max-width: 100%; + } + .sl2-hero__title { + font-size: 40Px; + line-height: 54Px; + } + .sl2-hero__media { + height: 520Px; + } + .sl2-adv, + .sl2-arch, + .sl2-core, + .sl2-scene, + .sl2-more { + padding-top: 4rem; + } + .sl2-adv__list { + grid-template-columns: 1fr; + gap: 24Px; + } + .sl2-core__slide { + grid-template-columns: 1fr; + gap: 32Px; + width: 520Px; + } + .sl2-core__media { + order: -1; + min-height: 360Px; + } + .sl2-scene__slide { + width: 520Px; + height: 390Px; + } + .sl2-more__grid { + grid-template-columns: 1fr; + gap: 32Px; + } +} +@media (max-width: 992px) { + .sl2-scene__slide { + width: 420Px; + height: 320Px; + } + .sl2-core__slide { + width: 420Px; + } + .sl2-scene__panel { + left: 20Px; + right: 20Px; + bottom: 20Px; + padding: 24Px 20Px; + } + .sl2-scene__name, + .sl2-scene__label { + font-size: 24Px; + line-height: 32Px; + } +} +@media (max-width: 576px) { + .sl2-hero__intro { + padding-top: calc(var(--header-h) + 5rem); + } + .sl2-hero__title, + .sl2-hero .sl2-adv__title, + .sl2-hero .sl2-arch__title, + .sl2-hero .sl2-core__title, + .sl2-hero .sl2-scene__title, + .sl2-hero .sl2-more__title { + font-size: 32Px; + line-height: 44Px; + } + .sl2-hero__media { + height: 280Px; + } + .sl2-adv__name, + .sl2-core__name { + font-size: 24Px; + line-height: 32Px; + } + .sl2-adv__text, + .sl2-core__desc { + font-size: 18Px; + line-height: 26Px; + } + .sl2-scene__slide { + width: 300Px; + height: 260Px; + } + .sl2-scene__arrows-mobile { + display: flex; + justify-content: flex-start; + margin-top: 24Px; + } + .sl2-scene__arrows-mobile .s-arrows { + display: flex; + gap: 16Px; + } + .sl2-core__slide { + width: 300Px; + } + .sl2-scene__panel { + gap: 12Px; + padding: 16Px; + } + .sl2-scene__desc { + font-size: 16Px; + line-height: 24Px; + } + .sl2-more__media { + height: 240Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/css/video-CivWKV8A.css b/public/themes/dist_static/static/css/video-CivWKV8A.css new file mode 100644 index 0000000..2bb8a61 --- /dev/null +++ b/public/themes/dist_static/static/css/video-CivWKV8A.css @@ -0,0 +1 @@ +.main-video{background:var(--color-white)}.v-page{padding-top:calc(var(--header-h) + 2.75rem + 2.5rem);padding-bottom:6.25rem}.v-head{border-bottom:1px solid #dfe0e2;flex-direction:column;gap:1rem;padding-bottom:2.5rem;display:flex}.v-head__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-48);font-weight:400;line-height:var(--font-64);margin:0}.v-head__desc{color:var(--color-text-muted);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);margin:0}.v-toolbar{justify-content:space-between;align-items:center;gap:1.5rem;margin-top:2.75rem;margin-bottom:2.75rem;display:flex}.v-filter__group{position:relative}.v-filter{min-height:3rem;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);cursor:pointer;background:0 0;border:1px solid #dfe0e2;border-radius:6.25rem;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;transition:border-color .25s,color .25s;display:inline-flex}.v-filter:hover,.v-filter.is-open,.v-filter.is-selected{border-color:var(--color-primary);color:var(--color-primary)}.v-filter.is-open .v-filter__chevron{transform:rotate(180deg)}.v-filter__chevron{width:.6875rem;height:auto;transition:transform var(--duration-fast) var(--easing);display:block}.v-filter__dropdown{z-index:30;background:var(--color-white);border-radius:1rem;flex-direction:column;gap:.5rem;min-width:12.5rem;padding:1rem;display:flex;position:absolute;top:calc(100% + .5rem);left:0;box-shadow:0 .5rem 1.5rem #2e353a24}.v-filter__dropdown[hidden]{display:none}.v-filter__dropdown-item{width:100%;color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6.25rem;padding:.625rem 1.25rem;transition:background .25s,color .25s;display:block}.v-filter__dropdown-item:hover{background:#afb5b91f}.v-filter__dropdown-item.is-active{background:var(--color-primary);color:var(--color-white)}.v-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:2.5rem;margin-bottom:5rem;display:grid}.v-card{text-align:left;width:100%;color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;flex-direction:column;gap:1.25rem;padding:0;text-decoration:none;display:flex}.v-card__media{aspect-ratio:16/9;background:#afb5b926;border-radius:1rem;position:relative;overflow:hidden}.v-card__cover{object-fit:cover;width:100%;height:100%;transition:transform var(--duration-normal) var(--easing);display:block}.v-card__duration{z-index:2;color:var(--color-white);font-family:D-DIN-PRO,MiSans VF,PingFang SC,sans-serif;font-size:var(--font-14);font-weight:400;line-height:var(--font-18);-webkit-backdrop-filter:blur(.25rem);backdrop-filter:blur(.25rem);background:#2e353a33;border-radius:.5rem;padding:.375rem .5rem;position:absolute;bottom:1.25rem;left:1.25rem}.v-card__play{z-index:2;-webkit-backdrop-filter:blur(.375rem);backdrop-filter:blur(.375rem);opacity:0;background:#fff3;border-radius:50%;justify-content:center;align-items:center;width:3rem;height:3rem;transition:opacity .25s,transform .25s;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.92)}.v-card__play img{width:1rem;height:auto;margin-left:.125rem;display:block}.v-card__title{color:var(--color-text);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-28);-webkit-line-clamp:2;min-height:3.5rem;transition:color var(--duration-fast) var(--easing);-webkit-box-orient:vertical;margin:0;display:-webkit-box;overflow:hidden}.v-card__date{color:var(--color-text-muted);font-family:D-DIN-PRO,MiSans VF,PingFang SC,sans-serif;font-size:var(--font-16);font-weight:400;line-height:var(--font-22)}.v-card:hover .v-card__cover{transform:scale(1.04)}.v-card:hover .v-card__play{opacity:1;transform:translate(-50%,-50%)scale(1)}.v-card:hover .v-card__title{color:var(--color-primary)}.v-pagination{justify-content:center;align-items:center;gap:.75rem;display:flex}.v-pagination__btn,.v-pagination__page{color:#2e353a99;width:3rem;height:3rem;font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-20);font-weight:400;line-height:var(--font-24);cursor:default;background:#afb5b926;border:0;border-radius:1rem;justify-content:center;align-items:center;padding:0;display:inline-flex}.v-pagination__btn img{filter:grayscale()opacity(.45);width:1.0625rem;height:auto;display:block;transform:scaleX(-1)}.v-pagination__btn--next img{filter:none;transform:none}.v-pagination__btn:disabled{opacity:.55;cursor:not-allowed}.v-pagination__page.is-active{background:var(--color-primary);color:var(--color-white)}.v-modal{z-index:2000;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.v-modal[hidden]{display:none}.v-modal__backdrop{background:#2e353ab8;position:absolute;inset:0}.v-modal__dialog{z-index:1;background:#000;border-radius:1rem;width:min(60rem,100%);position:relative;overflow:hidden;box-shadow:0 1.5rem 4rem #00000059}.v-modal__head{background:#000000e0;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.v-modal__title{min-width:0;color:var(--color-white);font-family:MiSans VF,PingFang SC,sans-serif;font-size:var(--font-18);font-weight:400;line-height:var(--font-24);white-space:nowrap;text-overflow:ellipsis;margin:0;overflow:hidden}.v-modal__close{cursor:pointer;width:2.25rem;height:2.25rem;transition:background var(--duration-fast) var(--easing);background:#ffffff1f;border:0;border-radius:.5rem;justify-content:center;align-items:center;padding:0;display:inline-flex}.v-modal__close img{width:1rem;height:1rem;display:block}.v-modal__close:hover{background:#ffffff38}.v-modal__body{aspect-ratio:16/9;background:#000}.v-modal__video{object-fit:contain;background:#000;width:100%;height:100%;display:block}@media (width<=1439px){.v-page{padding-top:calc(var(--header-h) + 40px);padding-bottom:72px}.v-head{gap:12px;padding-bottom:28px}.v-head__title{font-size:36px;line-height:48px}.v-head__desc{font-size:16px}.v-toolbar{flex-wrap:wrap;gap:16px;margin-top:32px;margin-bottom:32px}.v-filter{min-height:44px;padding:10px 24px;font-size:16px}.v-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:28px 16px;margin-bottom:40px}.v-card{gap:12px}.v-card__title{font-size:18px;line-height:26px}}@media (width<=992px){.v-toolbar{flex-direction:column;align-items:stretch}.v-filter{width:fit-content}.v-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=576px){.v-page{padding-top:calc(var(--header-h) + 24px);padding-bottom:48px}.v-head{gap:10px;padding-bottom:20px}.v-head__title{font-size:28px;line-height:38px}.v-head__desc{font-size:14px;line-height:22px}.v-toolbar{margin-top:24px;margin-bottom:24px}.v-filter{min-height:40px;padding:8px 16px;font-size:14px}.v-grid{grid-template-columns:1fr;gap:24px;margin-bottom:32px}.v-card__media{border-radius:12px}.v-card__play{width:48px;height:48px}.v-card__title{font-size:16px;line-height:24px}.v-card__date{font-size:14px}.v-pagination{gap:8px}.v-pagination__btn,.v-pagination__page{border-radius:12px;width:40px;height:40px;font-size:16px}} diff --git a/public/themes/dist_static/static/css/video.css b/public/themes/dist_static/static/css/video.css new file mode 100644 index 0000000..eff9a04 --- /dev/null +++ b/public/themes/dist_static/static/css/video.css @@ -0,0 +1,455 @@ +.main-video { + background: var(--color-white); +} + +.v-page { + padding-top: calc(var(--header-h) + 2.75rem + 2.5rem); + padding-bottom: 6.25rem; +} + +.v-head { + display: flex; + flex-direction: column; + gap: 1rem; + padding-bottom: 2.5rem; + border-bottom: 1px solid rgb(223, 224, 226); +} +.v-head__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-48); + font-weight: 400; + line-height: var(--font-64); +} +.v-head__desc { + margin: 0; + color: var(--color-text-muted); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); +} + +.v-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1.5rem; + margin-top: 2.75rem; + margin-bottom: 2.75rem; +} + +.v-filter__group { + position: relative; +} + +.v-filter { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + min-height: 3rem; + padding: 0.75rem 2rem; + border: 1px solid rgb(223, 224, 226); + border-radius: 6.25rem; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + cursor: pointer; + transition: border-color 0.25s ease, color 0.25s ease; +} +.v-filter:hover, .v-filter.is-open, .v-filter.is-selected { + border-color: var(--color-primary); + color: var(--color-primary); +} +.v-filter.is-open .v-filter__chevron { + transform: rotate(180deg); +} + +.v-filter__chevron { + display: block; + width: 0.6875rem; + height: auto; + transition: transform var(--duration-fast) var(--easing); +} + +.v-filter__dropdown { + position: absolute; + top: calc(100% + 0.5rem); + left: 0; + z-index: 30; + display: flex; + flex-direction: column; + gap: 0.5rem; + min-width: 12.5rem; + padding: 1rem; + border-radius: 1rem; + background: var(--color-white); + box-shadow: 0 0.5rem 1.5rem rgba(46, 53, 58, 0.14); +} +.v-filter__dropdown[hidden] { + display: none; +} + +.v-filter__dropdown-item { + display: block; + width: 100%; + padding: 0.625rem 1.25rem; + border: 0; + border-radius: 6.25rem; + background: transparent; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); + text-align: left; + cursor: pointer; + transition: background 0.25s ease, color 0.25s ease; +} +.v-filter__dropdown-item:hover { + background: rgba(175, 181, 185, 0.12); +} +.v-filter__dropdown-item.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.v-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 2.5rem; + margin-bottom: 5rem; +} + +.v-card { + display: flex; + flex-direction: column; + gap: 1.25rem; + width: 100%; + padding: 0; + border: 0; + background: transparent; + text-align: left; + text-decoration: none; + color: inherit; + cursor: pointer; + font: inherit; +} +.v-card__media { + position: relative; + overflow: hidden; + aspect-ratio: 16/9; + border-radius: 1rem; + background: rgba(175, 181, 185, 0.15); +} +.v-card__cover { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--duration-normal) var(--easing); +} +.v-card__duration { + position: absolute; + left: 1.25rem; + bottom: 1.25rem; + z-index: 2; + padding: 0.375rem 0.5rem 0.375rem 0.5rem; + border-radius: 0.5rem; + background: rgba(46, 53, 58, 0.2); + color: var(--color-white); + font-family: "D-DIN-PRO", "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-14); + font-weight: 400; + line-height: var(--font-18); + backdrop-filter: blur(0.25rem); +} +.v-card__play { + position: absolute; + top: 50%; + left: 50%; + z-index: 2; + display: flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 50%; + background: rgba(255, 255, 255, 0.2); + backdrop-filter: blur(0.375rem); + opacity: 0; + transform: translate(-50%, -50%) scale(0.92); + transition: opacity 0.25s ease, transform 0.25s ease; +} +.v-card__play img { + display: block; + width: 1rem; + height: auto; + margin-left: 0.125rem; +} +.v-card__title { + margin: 0; + color: var(--color-text); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-28); + min-height: 3.5rem; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + transition: color var(--duration-fast) var(--easing); +} +.v-card__date { + color: var(--color-text-muted); + font-family: "D-DIN-PRO", "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-16); + font-weight: 400; + line-height: var(--font-22); +} +.v-card:hover .v-card__cover { + transform: scale(1.04); +} +.v-card:hover .v-card__play { + opacity: 1; + transform: translate(-50%, -50%) scale(1); +} +.v-card:hover .v-card__title { + color: var(--color-primary); +} + +.v-pagination { + display: flex; + align-items: center; + justify-content: center; + gap: 0.75rem; +} +.v-pagination__btn, .v-pagination__page { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + padding: 0; + border: 0; + border-radius: 1rem; + background: rgba(175, 181, 185, 0.15); + color: rgba(46, 53, 58, 0.6); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-20); + font-weight: 400; + line-height: var(--font-24); + cursor: default; +} +.v-pagination__btn img { + display: block; + width: 1.0625rem; + height: auto; + transform: scaleX(-1); + filter: grayscale(1) opacity(0.45); +} +.v-pagination__btn--next img { + transform: none; + filter: none; +} +.v-pagination__btn:disabled { + opacity: 0.55; + cursor: not-allowed; +} +.v-pagination__page.is-active { + background: var(--color-primary); + color: var(--color-white); +} + +.v-modal { + position: fixed; + inset: 0; + z-index: 2000; + display: flex; + align-items: center; + justify-content: center; + padding: 1.5rem; +} +.v-modal[hidden] { + display: none; +} +.v-modal__backdrop { + position: absolute; + inset: 0; + background: rgba(46, 53, 58, 0.72); +} +.v-modal__dialog { + position: relative; + z-index: 1; + width: min(60rem, 100%); + overflow: hidden; + border-radius: 1rem; + background: #000; + box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.35); +} +.v-modal__head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 1rem 1.25rem; + background: rgba(0, 0, 0, 0.88); +} +.v-modal__title { + margin: 0; + min-width: 0; + color: var(--color-white); + font-family: "MiSans VF", "PingFang SC", sans-serif; + font-size: var(--font-18); + font-weight: 400; + line-height: var(--font-24); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.v-modal__close { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.25rem; + height: 2.25rem; + padding: 0; + border: 0; + border-radius: 0.5rem; + background: rgba(255, 255, 255, 0.12); + cursor: pointer; + transition: background var(--duration-fast) var(--easing); +} +.v-modal__close img { + display: block; + width: 1rem; + height: 1rem; +} +.v-modal__close:hover { + background: rgba(255, 255, 255, 0.22); +} +.v-modal__body { + aspect-ratio: 16/9; + background: #000; +} +.v-modal__video { + display: block; + width: 100%; + height: 100%; + object-fit: contain; + background: #000; +} + +@media (max-width: 1439px) { + .v-page { + padding-top: calc(var(--header-h) + 40Px); + padding-bottom: 72Px; + } + .v-head { + gap: 12Px; + padding-bottom: 28Px; + } + .v-head__title { + font-size: 36Px; + line-height: 48Px; + } + .v-head__desc { + font-size: 16Px; + } + .v-toolbar { + flex-wrap: wrap; + gap: 16Px; + margin-top: 32Px; + margin-bottom: 32Px; + } + .v-filter { + min-height: 44Px; + padding: 10Px 24Px; + font-size: 16Px; + } + .v-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 28Px 16Px; + margin-bottom: 40Px; + } + .v-card { + gap: 12Px; + } + .v-card__title { + font-size: 18Px; + line-height: 26Px; + } +} +@media (max-width: 992px) { + .v-toolbar { + flex-direction: column; + align-items: stretch; + } + .v-filter { + width: fit-content; + } + .v-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (max-width: 576px) { + .v-page { + padding-top: calc(var(--header-h) + 24Px); + padding-bottom: 48Px; + } + .v-head { + gap: 10Px; + padding-bottom: 20Px; + } + .v-head__title { + font-size: 28Px; + line-height: 38Px; + } + .v-head__desc { + font-size: 14Px; + line-height: 22Px; + } + .v-toolbar { + margin-top: 24Px; + margin-bottom: 24Px; + } + .v-filter { + min-height: 40Px; + padding: 8Px 16Px; + font-size: 14Px; + } + .v-grid { + grid-template-columns: 1fr; + gap: 24Px; + margin-bottom: 32Px; + } + .v-card__media { + border-radius: 12Px; + } + .v-card__play { + width: 48Px; + height: 48Px; + } + .v-card__title { + font-size: 16Px; + line-height: 24Px; + } + .v-card__date { + font-size: 14Px; + } + .v-pagination { + gap: 8Px; + } + .v-pagination__btn, .v-pagination__page { + width: 40Px; + height: 40Px; + border-radius: 12Px; + font-size: 16Px; + } +} \ No newline at end of file diff --git a/public/themes/dist_static/static/fonts/Aldrich-Regular-CZNgUhqU.ttf b/public/themes/dist_static/static/fonts/Aldrich-Regular-CZNgUhqU.ttf new file mode 100644 index 0000000..f958024 Binary files /dev/null and b/public/themes/dist_static/static/fonts/Aldrich-Regular-CZNgUhqU.ttf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-400-Regular-CbJSDVu2.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-400-Regular-CbJSDVu2.otf new file mode 100644 index 0000000..74dd61a Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-400-Regular-CbJSDVu2.otf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-500-Medium-DPN-gY68.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-500-Medium-DPN-gY68.otf new file mode 100644 index 0000000..d72d454 Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-500-Medium-DPN-gY68.otf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-600-SemiBold-DXnDJEQd.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-600-SemiBold-DXnDJEQd.otf new file mode 100644 index 0000000..5f94c23 Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-600-SemiBold-DXnDJEQd.otf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-700-Bold-WWlV1fXR.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-700-Bold-WWlV1fXR.otf new file mode 100644 index 0000000..7b33805 Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-700-Bold-WWlV1fXR.otf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-800-ExtraBold-Dzo8XGHI.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-800-ExtraBold-Dzo8XGHI.otf new file mode 100644 index 0000000..fb498b3 Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-800-ExtraBold-Dzo8XGHI.otf differ diff --git a/public/themes/dist_static/static/fonts/D-DIN-PRO-900-Heavy-CcGOV6O3.otf b/public/themes/dist_static/static/fonts/D-DIN-PRO-900-Heavy-CcGOV6O3.otf new file mode 100644 index 0000000..0ab8e13 Binary files /dev/null and b/public/themes/dist_static/static/fonts/D-DIN-PRO-900-Heavy-CcGOV6O3.otf differ diff --git a/public/themes/dist_static/static/fonts/MiSans-VF-DESbBZLB.ttf b/public/themes/dist_static/static/fonts/MiSans-VF-DESbBZLB.ttf new file mode 100644 index 0000000..17c3282 Binary files /dev/null and b/public/themes/dist_static/static/fonts/MiSans-VF-DESbBZLB.ttf differ diff --git a/public/themes/dist_static/static/fonts/PFDinTextPro-Bold-F7OVdohK.ttf b/public/themes/dist_static/static/fonts/PFDinTextPro-Bold-F7OVdohK.ttf new file mode 100644 index 0000000..dda3eaa Binary files /dev/null and b/public/themes/dist_static/static/fonts/PFDinTextPro-Bold-F7OVdohK.ttf differ diff --git a/public/themes/dist_static/static/fonts/PFDinTextPro-Medium-BcfGjLHx.ttf b/public/themes/dist_static/static/fonts/PFDinTextPro-Medium-BcfGjLHx.ttf new file mode 100644 index 0000000..f7c9bd7 Binary files /dev/null and b/public/themes/dist_static/static/fonts/PFDinTextPro-Medium-BcfGjLHx.ttf differ diff --git a/public/themes/dist_static/static/js/about-82YEDOWN.js b/public/themes/dist_static/static/js/about-82YEDOWN.js new file mode 100644 index 0000000..b9da5e1 --- /dev/null +++ b/public/themes/dist_static/static/js/about-82YEDOWN.js @@ -0,0 +1 @@ +import"./common-DqchIN4G.js";import"./earth-Bqwaht3f.js";function e(){if(!window.counterUp)return;let e=window.counterUp.default,t=new IntersectionObserver(t=>{t.forEach(t=>{let n=t.target;t.isIntersecting&&!n.classList.contains(`is-visible`)&&(e(n,{duration:1e3,delay:16}),n.classList.add(`is-visible`))})},{threshold:.5});document.querySelectorAll(`.counter`).forEach(e=>{t.observe(e)})}function t(){let e=document.querySelector(`[data-nav]`)?.getAttribute(`data-nav`);e&&document.querySelectorAll(`.site-header__nav a`).forEach(t=>{let n=t.textContent.trim().startsWith(e);t.classList.toggle(`is-active`,n)})}function n(){let e=document.querySelector(`.ab-history`),t=e?.querySelector(`.ab-history__swiper`);if(!e||!t||!window.Swiper)return;function n(e){let t=e.activeIndex;e.slides.forEach((e,n)=>{e.classList.toggle(`is-far`,n>t+2)})}n(new window.Swiper(t,{slidesPerView:`auto`,spaceBetween:100,navigation:{prevEl:e.querySelector(`.s-arrows__prev`),nextEl:e.querySelector(`.s-arrows__next`)},breakpoints:{0:{spaceBetween:32},993:{spaceBetween:100}},on:{slideChange:n}}))}function r(){let e=document.querySelector(`.ab-members`);if(!e)return;let t=e.querySelector(`#ab-members-name`),n=e.querySelector(`#ab-members-desc`),r=e.querySelector(`.ab-members__content > div`),i=e.querySelectorAll(`.ab-members__logo`);if(!t||!n||!i.length)return;let a=e=>{let i=e.getAttribute(`data-name`)||``,a=e.getAttribute(`data-desc`)||``;if(!i&&!a)return;let o=()=>{t.textContent=i,n.textContent=a};if(!r||!r.animate){o();return}r.animate([{opacity:1},{opacity:0}],{duration:160,fill:`forwards`,easing:`ease`}).finished.then(()=>{o(),r.animate([{opacity:0},{opacity:1}],{duration:220,fill:`forwards`,easing:`ease`})})};i.forEach(e=>{e.addEventListener(`click`,()=>{e.classList.contains(`is-active`)||(i.forEach(t=>{let n=t===e;t.classList.toggle(`is-active`,n),t.setAttribute(`aria-selected`,n?`true`:`false`)}),a(e))})})}$(function(){t(),n(),r(),e()}); \ No newline at end of file diff --git a/public/themes/dist_static/static/js/about.js b/public/themes/dist_static/static/js/about.js new file mode 100644 index 0000000..dcd1e45 --- /dev/null +++ b/public/themes/dist_static/static/js/about.js @@ -0,0 +1,113 @@ +import "./common.js"; +import "./earth.js"; +//#region js/about.js +function counterUpInit() { + if (!window.counterUp) return; + const counterUp = window.counterUp.default; + const callback = (entries) => { + entries.forEach((entry) => { + const el = entry.target; + if (entry.isIntersecting && !el.classList.contains("is-visible")) { + counterUp(el, { + duration: 1e3, + delay: 16 + }); + el.classList.add("is-visible"); + } + }); + }; + const IO = new IntersectionObserver(callback, { threshold: .5 }); + document.querySelectorAll(".counter").forEach((el) => { + IO.observe(el); + }); +} +function setActiveNav() { + const pageNav = document.querySelector("[data-nav]")?.getAttribute("data-nav"); + if (!pageNav) return; + document.querySelectorAll(".site-header__nav a").forEach((link) => { + const active = link.textContent.trim().startsWith(pageNav); + link.classList.toggle("is-active", active); + }); +} +function initHistorySwiper() { + const root = document.querySelector(".ab-history"); + const el = root?.querySelector(".ab-history__swiper"); + if (!root || !el || !window.Swiper) return; + function updateFarClass(swiper) { + const active = swiper.activeIndex; + swiper.slides.forEach((slide, i) => { + slide.classList.toggle("is-far", i > active + 2); + }); + } + updateFarClass(new window.Swiper(el, { + slidesPerView: "auto", + spaceBetween: 100, + navigation: { + prevEl: root.querySelector(".ab-history__head .s-arrows__prev"), + nextEl: root.querySelector(".ab-history__head .s-arrows__next") + }, + breakpoints: { + 0: { + spaceBetween: 32, + navigation: { + prevEl: root.querySelector(".ab-history__arrows-mobile .s-arrows__prev"), + nextEl: root.querySelector(".ab-history__arrows-mobile .s-arrows__next") + } + }, + 993: { spaceBetween: 100 } + }, + on: { slideChange: updateFarClass } + })); +} +function initMemberLogos() { + const root = document.querySelector(".ab-members"); + if (!root) return; + const nameEl = root.querySelector("#ab-members-name"); + const descEl = root.querySelector("#ab-members-desc"); + const contentEl = root.querySelector(".ab-members__content > div"); + const logos = root.querySelectorAll(".ab-members__logo"); + if (!nameEl || !descEl || !logos.length) return; + const applyMember = (btn) => { + const name = btn.getAttribute("data-name") || ""; + const desc = btn.getAttribute("data-desc") || ""; + if (!name && !desc) return; + const update = () => { + nameEl.textContent = name; + descEl.textContent = desc; + }; + if (!contentEl || !contentEl.animate) { + update(); + return; + } + contentEl.animate([{ opacity: 1 }, { opacity: 0 }], { + duration: 160, + fill: "forwards", + easing: "ease" + }).finished.then(() => { + update(); + contentEl.animate([{ opacity: 0 }, { opacity: 1 }], { + duration: 220, + fill: "forwards", + easing: "ease" + }); + }); + }; + logos.forEach((btn) => { + btn.addEventListener("click", () => { + if (btn.classList.contains("is-active")) return; + logos.forEach((item) => { + const active = item === btn; + item.classList.toggle("is-active", active); + item.setAttribute("aria-selected", active ? "true" : "false"); + }); + applyMember(btn); + }); + }); +} +$(function() { + setActiveNav(); + initHistorySwiper(); + initMemberLogos(); + counterUpInit(); +}); +//#endregion diff --git a/public/themes/dist_static/static/js/announce-Bj7rWtsO.js b/public/themes/dist_static/static/js/announce-Bj7rWtsO.js new file mode 100644 index 0000000..349bc46 --- /dev/null +++ b/public/themes/dist_static/static/js/announce-Bj7rWtsO.js @@ -0,0 +1 @@ +import"./common-DqchIN4G.js";function e(){let e=document.querySelector(`[data-nav]`)?.getAttribute(`data-nav`);e&&document.querySelectorAll(`.site-header__nav a`).forEach(t=>{let n=t.textContent.trim().startsWith(e);t.classList.toggle(`is-active`,n)})}function t(){let e=$(`[data-filter-trigger]`);if(!e.length)return;let t=()=>{$(`[data-filter-dropdown]`).prop(`hidden`,!0),$(`[data-filter-trigger]`).removeClass(`is-open`).attr(`aria-expanded`,`false`)};e.on(`click`,function(){let e=$(this),n=e.next(`[data-filter-dropdown]`);n.prop(`hidden`)?(t(),e.addClass(`is-open`).attr(`aria-expanded`,`true`),n.prop(`hidden`,!1)):t()}),$(`[data-filter-dropdown] button`).on(`click`,function(){let e=$(this),n=e.closest(`[data-filter-dropdown]`),r=n.prev(`[data-filter-trigger]`);e.is(`[data-filter-clear]`)?(r.find(`span`).text(`按产品筛选`),r.removeClass(`is-selected`),n.find(`.is-active`).removeClass(`is-active`),e.addClass(`is-active`)):(e.addClass(`is-active`).siblings().removeClass(`is-active`),r.find(`span`).text(e.text()),r.addClass(`is-selected`)),t()}),$(document).on(`click`,function(e){$(e.target).closest(`[data-filter-trigger], [data-filter-dropdown]`).length||t()})}$(function(){e(),t()}); \ No newline at end of file diff --git a/public/themes/dist_static/static/js/announce.js b/public/themes/dist_static/static/js/announce.js new file mode 100644 index 0000000..21499ab --- /dev/null +++ b/public/themes/dist_static/static/js/announce.js @@ -0,0 +1,52 @@ +import "./common.js"; +//#region js/announce.js +function setActiveNav() { + const pageNav = document.querySelector("[data-nav]")?.getAttribute("data-nav"); + if (!pageNav) return; + document.querySelectorAll(".site-header__nav a").forEach((link) => { + const active = link.textContent.trim().startsWith(pageNav); + link.classList.toggle("is-active", active); + }); +} +function initFilterDropdown() { + const $trigger = $("[data-filter-trigger]"); + if (!$trigger.length) return; + const closeDropdown = () => { + $("[data-filter-dropdown]").prop("hidden", true); + $("[data-filter-trigger]").removeClass("is-open").attr("aria-expanded", "false"); + }; + $trigger.on("click", function() { + const $btn = $(this); + const $dropdown = $btn.next("[data-filter-dropdown]"); + if (!$dropdown.prop("hidden")) closeDropdown(); + else { + closeDropdown(); + $btn.addClass("is-open").attr("aria-expanded", "true"); + $dropdown.prop("hidden", false); + } + }); + $("[data-filter-dropdown] button").on("click", function() { + const $item = $(this); + const $dropdown = $item.closest("[data-filter-dropdown]"); + const $btn = $dropdown.prev("[data-filter-trigger]"); + if ($item.is("[data-filter-clear]")) { + $btn.find("span").text("按产品筛选"); + $btn.removeClass("is-selected"); + $dropdown.find(".is-active").removeClass("is-active"); + $item.addClass("is-active"); + } else { + $item.addClass("is-active").siblings().removeClass("is-active"); + $btn.find("span").text($item.text()); + $btn.addClass("is-selected"); + } + closeDropdown(); + }); + $(document).on("click", function(event) { + if (!$(event.target).closest("[data-filter-trigger], [data-filter-dropdown]").length) closeDropdown(); + }); +} +$(function() { + setActiveNav(); + initFilterDropdown(); +}); +//#endregion diff --git a/public/themes/dist_static/static/js/category-D-gqzpG1.js b/public/themes/dist_static/static/js/category-D-gqzpG1.js new file mode 100644 index 0000000..3372a9a --- /dev/null +++ b/public/themes/dist_static/static/js/category-D-gqzpG1.js @@ -0,0 +1 @@ +import"./common-DqchIN4G.js";var e=`industrial-control`;function t(){let e=document.querySelector(`[data-nav]`)?.getAttribute(`data-nav`);e&&document.querySelectorAll(`.site-header__nav a`).forEach(t=>{let n=t.textContent.trim().startsWith(e);t.classList.toggle(`is-active`,n)})}function n(){let t=new URLSearchParams(window.location.search).get(`cat`);return document.querySelector(`[data-category-item="${t}"]`)?t:e}function r(e){return document.querySelector(`.c-sidebar__trigger[data-category-id="${e}"]`)?.dataset.categoryName||``}function i(e){document.querySelectorAll(`[data-category-item]`).forEach(t=>{let n=t.dataset.categoryItem===e.expandedId;t.classList.toggle(`is-active`,n),t.querySelector(`.c-sidebar__trigger`)?.setAttribute(`aria-expanded`,n?`true`:`false`)}),document.querySelectorAll(`.c-sidebar__sub`).forEach(t=>{let n=t.dataset.categoryId===e.categoryId&&t.dataset.subId===e.subId;t.classList.toggle(`is-active`,n)})}function a(e){document.querySelectorAll(`[data-category-panel]`).forEach(t=>{t.hidden=t.dataset.categoryPanel!==e.categoryId})}function o(e){let t=document.querySelector(`[data-category-panel="${e.categoryId}"]`);if(!t)return;let n=t.querySelector(`[data-product-grid]`),r=t.querySelector(`[data-product-empty]`);if(!n||!r)return;let i=[...n.querySelectorAll(`.s-product-card`)],a=0;i.forEach(t=>{let n=!e.subId||t.dataset.sub===e.subId;t.hidden=!n,n&&(a+=1)}),n.hidden=a===0,r.hidden=a>0}function s(e){let t=r(e.categoryId),n=document.querySelector(`[data-breadcrumb-current]`);n&&t&&(n.textContent=t),t&&(document.title=`${t} - 睿能科技`)}function c(e){i(e),a(e),o(e),s(e)}function l(e){let t=document.querySelector(`[data-category-nav]`);t&&t.addEventListener(`click`,t=>{let n=t.target.closest(`[data-category-id]`);if(n){if(n.classList.contains(`c-sidebar__sub`))e.categoryId=n.dataset.categoryId,e.subId=n.dataset.subId,e.expandedId=n.dataset.categoryId;else{let t=n.dataset.categoryId;if(e.expandedId===t)e.expandedId=``;else{e.expandedId=t,e.categoryId=t,e.subId=``;let n=new URL(window.location.href);n.searchParams.set(`cat`,t),window.history.replaceState(null,``,n)}}c(e)}})}$(function(){let e={categoryId:n(),expandedId:n(),subId:``};t(),c(e),l(e)}); \ No newline at end of file diff --git a/public/themes/dist_static/static/js/category.js b/public/themes/dist_static/static/js/category.js new file mode 100644 index 0000000..c7672e9 --- /dev/null +++ b/public/themes/dist_static/static/js/category.js @@ -0,0 +1,99 @@ +import "./common.js"; +//#region js/category.js +var DEFAULT_CATEGORY_ID = "industrial-control"; +function setActiveNav() { + const pageNav = document.querySelector("[data-nav]")?.getAttribute("data-nav"); + if (!pageNav) return; + document.querySelectorAll(".site-header__nav a").forEach((link) => { + const active = link.textContent.trim().startsWith(pageNav); + link.classList.toggle("is-active", active); + }); +} +function getCategoryIdFromQuery() { + const id = new URLSearchParams(window.location.search).get("cat"); + return document.querySelector(`[data-category-item="${id}"]`) ? id : DEFAULT_CATEGORY_ID; +} +function getCategoryName(categoryId) { + return document.querySelector(`.c-sidebar__trigger[data-category-id="${categoryId}"]`)?.dataset.categoryName || ""; +} +function updateSidebar(state) { + document.querySelectorAll("[data-category-item]").forEach((item) => { + const isActive = item.dataset.categoryItem === state.expandedId; + item.classList.toggle("is-active", isActive); + item.querySelector(".c-sidebar__trigger")?.setAttribute("aria-expanded", isActive ? "true" : "false"); + }); + document.querySelectorAll(".c-sidebar__sub").forEach((btn) => { + const isActiveSub = btn.dataset.categoryId === state.categoryId && btn.dataset.subId === state.subId; + btn.classList.toggle("is-active", isActiveSub); + }); +} +function updatePanels(state) { + document.querySelectorAll("[data-category-panel]").forEach((panel) => { + panel.hidden = panel.dataset.categoryPanel !== state.categoryId; + }); +} +function updateProductFilter(state) { + const panel = document.querySelector(`[data-category-panel="${state.categoryId}"]`); + if (!panel) return; + const grid = panel.querySelector("[data-product-grid]"); + const empty = panel.querySelector("[data-product-empty]"); + if (!grid || !empty) return; + const cards = [...grid.querySelectorAll(".s-product-card")]; + let visibleCount = 0; + cards.forEach((card) => { + const match = !state.subId || card.dataset.sub === state.subId; + card.hidden = !match; + if (match) visibleCount += 1; + }); + grid.hidden = visibleCount === 0; + empty.hidden = visibleCount > 0; +} +function updateBreadcrumb(state) { + const name = getCategoryName(state.categoryId); + const breadcrumb = document.querySelector("[data-breadcrumb-current]"); + if (breadcrumb && name) breadcrumb.textContent = name; + if (name) document.title = `${name} - 睿能科技`; +} +function updateView(state) { + updateSidebar(state); + updatePanels(state); + updateProductFilter(state); + updateBreadcrumb(state); +} +function bindEvents(state) { + const nav = document.querySelector("[data-category-nav]"); + if (!nav) return; + nav.addEventListener("click", (event) => { + const trigger = event.target.closest("[data-category-id]"); + if (!trigger) return; + if (trigger.classList.contains("c-sidebar__sub")) { + state.categoryId = trigger.dataset.categoryId; + state.subId = trigger.dataset.subId; + state.expandedId = trigger.dataset.categoryId; + } else { + const id = trigger.dataset.categoryId; + if (state.expandedId === id) state.expandedId = ""; + else { + state.expandedId = id; + state.categoryId = id; + state.subId = ""; + const url = new URL(window.location.href); + url.searchParams.set("cat", id); + window.history.replaceState(null, "", url); + } + } + updateView(state); + }); +} +$(function() { + const categoryId = getCategoryIdFromQuery(); + const state = { + categoryId, + expandedId: categoryId, + subId: document.querySelector(`.c-sidebar__sub[data-category-id="${categoryId}"]`)?.dataset.subId || "" + }; + setActiveNav(); + updateView(state); + bindEvents(state); +}); +//#endregion diff --git a/public/themes/dist_static/static/js/common-DqchIN4G.js b/public/themes/dist_static/static/js/common-DqchIN4G.js new file mode 100644 index 0000000..e8693b2 --- /dev/null +++ b/public/themes/dist_static/static/js/common-DqchIN4G.js @@ -0,0 +1 @@ +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),$(function(){AOS.init({duration:800});let e=new Lenis;window.lenis=e,gsap.registerPlugin(ScrollTrigger,Observer),e.on(`scroll`,ScrollTrigger.update),gsap.ticker.add(t=>{e.raf(t*1e3)}),gsap.ticker.lagSmoothing(0);let t=$(`.site-header`),n=$(`.mask`),r=$(`[data-header-dark]`),i=()=>{if(!t.length)return;let e=t[0].getBoundingClientRect(),i=!1,a=Math.max(0,Math.min(window.innerWidth-1,window.innerWidth/2)),o=Math.max(0,Math.min(window.innerHeight-1,e.bottom+2));document.elementFromPoint(a,o)?.closest(`[data-header-dark]`)?i=!0:r.each(function(){let t=this.getBoundingClientRect();if(t.top<=e.bottom&&t.bottom>e.top)return i=!0,!1}),t.toggleClass(`dark`,i||t.hasClass(`is-mega-open`));let s=window.scrollY>50;t.toggleClass(`is-scrolled`,s),n.toggleClass(`is-scrolled`,s)};e.on(`scroll`,i),ScrollTrigger.addEventListener(`refresh`,i),i();let a=document.querySelector(`.mask`),o=document.querySelector(`.mask-content`);function s(e){$(`body`).toggleClass(`is-mask-open`,e)}$(`.site-header__extra-btn.toggle`).on(`click`,function(){if(!a||!o)return;let e=o.querySelectorAll(`.mask-nav__link`);$(a).addClass(`show mask--nav-motion`),$(`body`).css(`overflow`,`hidden`),s(!0),gsap.killTweensOf(e),gsap.from(e,{opacity:0,y:10,stagger:.04,delay:.2,overwrite:`auto`,onComplete:function(){a.classList.remove(`mask--nav-motion`),gsap.set(e,{clearProps:`all`})}})}),$(`.mask-header__icon-btn--close`).on(`click`,function(){!a||!o||(gsap.killTweensOf(o.querySelectorAll(`ul li a`)),$(a).removeClass(`show mask--nav-motion`),$(`body`).css(`overflow`,`auto`),s(!1))}),$(`.mask-nav__toggle`).on(`click`,function(){let e=$(this).closest(`.mask-nav__item--expandable`),t=e.attr(`data-expanded`)===`true`;e.attr(`data-expanded`,!t),$(this).attr(`aria-expanded`,!t)}),$(`.section-contact-form`).on(`submit`,function(e){e.preventDefault();let t=$(this),n=t.find(`[name="name"]`),r=t.find(`[name="phone"]`),i=$.trim(n.val()),a=$.trim(r.val()),o=t.find(`[name="agree"]`).is(`:checked`);if(!i){alert(`请输入姓名`),n.focus();return}if(!a){alert(`请输入联系方式`),r.focus();return}if(!o){alert(`请阅读并同意隐私政策`);return}alert(`提交成功,我们将尽快与您联系`),t[0].reset()}),$(`#nav-mega-product`).on(`mouseenter`,`[data-mega-cat]`,function(){let e=$(`#nav-mega-product`),t=$(this).attr(`data-mega-cat`);e.find(`[data-mega-cat]`).removeClass(`is-active`),$(this).addClass(`is-active`),e.find(`[data-mega-panel]`).each(function(){let e=this.dataset.megaPanel===t;this.hidden=!e,this.classList.toggle(`is-active`,e)})})}); \ No newline at end of file diff --git a/public/themes/dist_static/static/js/common.js b/public/themes/dist_static/static/js/common.js new file mode 100644 index 0000000..1d9c82f --- /dev/null +++ b/public/themes/dist_static/static/js/common.js @@ -0,0 +1,142 @@ +//#region \0vite/modulepreload-polyfill.js +(function polyfill() { + const relList = document.createElement("link").relList; + if (relList && relList.supports && relList.supports("modulepreload")) return; + for (const link of document.querySelectorAll("link[rel=\"modulepreload\"]")) processPreload(link); + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== "childList") continue; + for (const node of mutation.addedNodes) if (node.tagName === "LINK" && node.rel === "modulepreload") processPreload(node); + } + }).observe(document, { + childList: true, + subtree: true + }); + function getFetchOpts(link) { + const fetchOpts = {}; + if (link.integrity) fetchOpts.integrity = link.integrity; + if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; + if (link.crossOrigin === "use-credentials") fetchOpts.credentials = "include"; + else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit"; + else fetchOpts.credentials = "same-origin"; + return fetchOpts; + } + function processPreload(link) { + if (link.ep) return; + link.ep = true; + const fetchOpts = getFetchOpts(link); + fetch(link.href, fetchOpts); + } +})(); +//#endregion +//#region js/common.js +$(function() { + AOS.init({ duration: 800 }); + const lenis = new Lenis(); + window.lenis = lenis; + gsap.registerPlugin(ScrollTrigger, Observer); + lenis.on("scroll", ScrollTrigger.update); + gsap.ticker.add((time) => { + lenis.raf(time * 1e3); + }); + gsap.ticker.lagSmoothing(0); + const $header = $(".site-header"); + const $mask = $(".mask"); + const $targets = $("[data-header-dark]"); + const updateHeader = () => { + if (!$header.length) return; + const headerRect = $header[0].getBoundingClientRect(); + let shouldDark = false; + const probeX = Math.max(0, Math.min(window.innerWidth - 1, window.innerWidth / 2)); + const probeY = Math.max(0, Math.min(window.innerHeight - 1, headerRect.bottom + 2)); + if (document.elementFromPoint(probeX, probeY)?.closest("[data-header-dark]")) shouldDark = true; + else $targets.each(function() { + const rect = this.getBoundingClientRect(); + if (rect.top <= headerRect.bottom && rect.bottom > headerRect.top) { + shouldDark = true; + return false; + } + }); + $header.toggleClass("dark", shouldDark || $header.hasClass("is-mega-open")); + const isScrolled = window.scrollY > 50; + $header.toggleClass("is-scrolled", isScrolled); + $mask.toggleClass("is-scrolled", isScrolled); + }; + lenis.on("scroll", updateHeader); + ScrollTrigger.addEventListener("refresh", updateHeader); + updateHeader(); + const maskEl = document.querySelector(".mask"); + const maskContentEl = document.querySelector(".mask-content"); + function setMaskOpenUi(isOpen) { + $("body").toggleClass("is-mask-open", isOpen); + } + $(".site-header__extra-btn.toggle").on("click", function() { + if (!maskEl || !maskContentEl) return; + const nodes = maskContentEl.querySelectorAll(".mask-nav__link"); + $(maskEl).addClass("show mask--nav-motion"); + $("body").css("overflow", "hidden"); + setMaskOpenUi(true); + gsap.killTweensOf(nodes); + gsap.from(nodes, { + opacity: 0, + y: 10, + stagger: .04, + delay: .2, + overwrite: "auto", + onComplete: function() { + maskEl.classList.remove("mask--nav-motion"); + gsap.set(nodes, { clearProps: "all" }); + } + }); + }); + $(".mask-header__icon-btn--close").on("click", function() { + if (!maskEl || !maskContentEl) return; + gsap.killTweensOf(maskContentEl.querySelectorAll("ul li a")); + $(maskEl).removeClass("show mask--nav-motion"); + $("body").css("overflow", "auto"); + setMaskOpenUi(false); + }); + $(".mask-nav__toggle").on("click", function() { + const $item = $(this).closest(".mask-nav__item--expandable"); + const isExpanded = $item.attr("data-expanded") === "true"; + $item.attr("data-expanded", !isExpanded); + $(this).attr("aria-expanded", !isExpanded); + }); + $(".section-contact-form").on("submit", function(e) { + e.preventDefault(); + const $form = $(this); + const $name = $form.find("[name=\"name\"]"); + const $phone = $form.find("[name=\"phone\"]"); + const name = $.trim($name.val()); + const phone = $.trim($phone.val()); + const agreed = $form.find("[name=\"agree\"]").is(":checked"); + if (!name) { + alert("请输入姓名"); + $name.focus(); + return; + } + if (!phone) { + alert("请输入联系方式"); + $phone.focus(); + return; + } + if (!agreed) { + alert("请阅读并同意隐私政策"); + return; + } + alert("提交成功,我们将尽快与您联系"); + $form[0].reset(); + }); + $("#nav-mega-product").on("mouseenter", "[data-mega-cat]", function() { + const $mega = $("#nav-mega-product"); + const cat = $(this).attr("data-mega-cat"); + $mega.find("[data-mega-cat]").removeClass("is-active"); + $(this).addClass("is-active"); + $mega.find("[data-mega-panel]").each(function() { + const match = this.dataset.megaPanel === cat; + this.hidden = !match; + this.classList.toggle("is-active", match); + }); + }); +}); +//#endregion diff --git a/public/themes/dist_static/static/js/contact-C_znckVD.js b/public/themes/dist_static/static/js/contact-C_znckVD.js new file mode 100644 index 0000000..c937f3b --- /dev/null +++ b/public/themes/dist_static/static/js/contact-C_znckVD.js @@ -0,0 +1 @@ +import"./common-DqchIN4G.js";function e(){document.querySelectorAll(`.c-field__select`).forEach(e=>{if(e.dataset.customized)return;e.dataset.customized=`true`,e.classList.add(`c-custom-select__native`),e.tabIndex=-1;let t=document.createElement(`div`);e.parentNode.insertBefore(t,e),t.appendChild(e),t.className=`c-custom-select`;let n=document.createElement(`button`);n.type=`button`,n.className=`c-custom-select__trigger`,n.setAttribute(`aria-haspopup`,`listbox`),n.setAttribute(`aria-expanded`,`false`),t.appendChild(n);let r=document.createElement(`div`);r.className=`c-custom-select__dropdown`,r.setAttribute(`role`,`listbox`),t.appendChild(r);function i(){r.innerHTML=``,Array.from(e.options).forEach((e,t)=>{if(e.disabled)return;let n=document.createElement(`button`);n.type=`button`,n.className=`c-custom-select__option`,n.setAttribute(`role`,`option`),n.dataset.value=e.value,n.textContent=e.textContent,e.selected&&e.value&&n.classList.add(`is-active`),n.addEventListener(`click`,()=>o(t)),r.appendChild(n)})}function a(){let t=e.selectedIndex,i=e.options[t];n.textContent=i?i.textContent:``,n.classList.toggle(`is-placeholder`,!i||i.disabled),r.querySelectorAll(`.c-custom-select__option`).forEach(t=>{t.classList.toggle(`is-active`,t.dataset.value===e.value)})}function o(t){e.selectedIndex=t,e.dispatchEvent(new Event(`change`,{bubbles:!0})),a(),c()}function s(){i(),r.classList.add(`is-visible`),n.classList.add(`is-open`),n.setAttribute(`aria-expanded`,`true`)}function c(){r.classList.remove(`is-visible`),n.classList.remove(`is-open`),n.setAttribute(`aria-expanded`,`false`)}function l(){r.classList.contains(`is-visible`)?c():s()}n.addEventListener(`click`,l),document.addEventListener(`click`,e=>{t.contains(e.target)||c()}),t.addEventListener(`keydown`,e=>{e.key===`Escape`&&(c(),n.focus()),(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),l())}),a()})}$(function(){e()}); \ No newline at end of file diff --git a/public/themes/dist_static/static/js/contact.js b/public/themes/dist_static/static/js/contact.js new file mode 100644 index 0000000..e0553d4 --- /dev/null +++ b/public/themes/dist_static/static/js/contact.js @@ -0,0 +1,91 @@ +import "./common.js"; +//#region js/contact.js +/** +* 自定义下拉组件 +* 将原生