PageSourceSearch

https://www.professionalgaragedoorservices.com/assets/index-C7VtXKwT.js

js professionalgaragedoorservices.com collected 2026-10-06 18:10:28 UTC 1,156,155 bytes, 300 lines download raw bytes

vendor: 6,840 bytes, lines 1-9
1var Aj=Object.defineProperty;var ff=e=>{throw TypeError(e)};var Rj=(e,t,r)=>t in e?Aj(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var kr=(e,t,r)=>Rj(e,typeof t!="symbol"?t+"":t,r),vd=(e,t,r)=>t.has(e)||ff("Cannot "+r);var C=(e,t,r)=>(vd(e,t,"read from private field"),r?r.call(e):t.get(e)),se=(e,t,r)=>t.has(e)?ff("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),V=(e,t,r,n)=>(vd(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),Ve=(e,t,r)=>(vd(e,t,"access private method"),r);var Ei=(e,t,r,n)=>({set _(o){V(e,t,o,r)},get _(){return C(e,t,n)}});function Zy(e,t){for(var r=0;r<t.length;r++){const n=t[r];if(typeof n!="string"&&!Array.isArray(n)){for(const o in n)if(o!=="default"&&!(o in e)){const s=Object.getOwnPropertyDescriptor(n,o);s&&Object.defineProperty(e,o,s.get?s:{enumerable:!0,get:()=>n[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(o){if(o.ep)return;o.ep=!0;const s=r(o);fetch(o.href,s)}})();var _a=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function hi(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var r=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};r.prototype=t.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}),r}var ev={exports:{}},Cc={},tv={exports:{}},Z={};/**
2 * @license React
3 * react.production.min.js
4 *
5 * Copyright (c) Facebook, Inc. and its affiliates.
6 *
7 * This source code is licensed under the MIT license found in the
8 * LICENSE file in the root directory of this source tree.
9 */var mi=Symbol.for("react.element"),Pj=Symbol.for("react.portal"),Oj=Symbol.for("react.fragment"),Dj=Symbol.for("react.strict_mode"),Lj=Symbol.for("react.profiler"),Wj=Symbol.for("react.provider"),Mj=Symbol.for("react.context"),qj=Symbol.for("react.forward_ref"),zj=Symbol.for("react.suspense"),$j=Symbol.for("react.memo"),Gj=Symbol.for("react.lazy"),gf=Symbol.iterator;function Bj(e){return e===null||typeof e!="object"?null:(e=gf&&e[gf]||e["@@iterator"],typeof e=="function"?e:null)}var rv={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},nv=Object.assign,av={};function Uo(e,t,r){this.props=e,this.context=t,this.refs=av,this.updater=r||rv}Uo.prototype.isReactComponent={};Uo.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Uo.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function ov(){}ov.prototype=Uo.prototype;function om(e,t,r){this.props=e,this.context=t,this.refs=av,this.updater=r||rv}var sm=om.prototype=new ov;sm.constructor=om;nv(sm,Uo.prototype);sm.isPureReactComponent=!0;var yf=Array.isArray,sv=Object.prototype.hasOwnProperty,im={current:null},iv={key:!0,ref:!0,__self:!0,__source:!0};function lv(e,t,r){var n,o={},s=null,i=null;if(t!=null)for(n in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(s=""+t.key),t)sv.call(t,n)&&!iv.hasOwnProperty(n)&&(o[n]=t[n]);var l=arguments.length-2;if(l===1)o.children=r;else if(1<l){for(var c=Array(l),d=0;d<l;d++)c[d]=arguments[d+2];o.children=c}if(e&&e.defaultProps)for(n in l=e.defaultProps,l)o[n]===void 0&&(o[n]=l[n]);return{$$typeof:mi,type:e,key:s,ref:i,props:o,_owner:im.current}}function Hj(e,t){return{$$typeof:mi,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function lm(e){return typeof e=="object"&&e!==null&&e.$$typeof===mi}function Fj(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var vf=/\/+/g;function wd(e,t){return typeof e=="object"&&e!==null&&e.key!=null?Fj(""+e.key):t.toString(36)}function fl(e,t,r,n,o){var s=typeof e;(s==="undefined"||s==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(s){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case mi:case Pj:i=!0}}if(i)return i=e,o=o(i),e=n===""?"."+wd(i,0):n,yf(o)?(r="",e!=null&&(r=e.replace(vf,"$&/")+"/"),fl(o,t,r,"",function(d){return d})):o!=null&&(lm(o)&&(o=Hj(o,r+(!o.key||i&&i.key===o.key?"":(""+o.key).replace(vf,"$&/")+"/")+e)),t.push(o)),1;if(i=0,n=n===""?".":n+":",yf(e))for(var l=0;l<e.length;l++){s=e[l];var c=n+wd(s,l);i+=fl(s,t,r,c,o)}else if(c=Bj(e),typeof c=="function")for(e=c.call(e),l=0;!(s=e.next()).done;)s=s.value,c=n+wd(s,l++),i+=fl(s,t,r,c,o);else if(s==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return i}function Ii(e,t,r){if(e==null)return e;var n=[],o=0;return fl(e,n,"","",function(s){return t.call(r,s,o++)}),n}function Uj(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var it={current:null},gl={transition:null},Vj={ReactCurrentDispatcher:it,ReactCurrentBatchConfig:gl,ReactCurrentOwner:im};function cv(){throw Error("act(...) is not supported in production builds of React.")}Z.Children={map:Ii,forEach:function(e,t,r){Ii(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return Ii(e,function(){t++}),t},toArray:function(e){return Ii(e,function(t){return t})||[]},only:function(e){if(!lm(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};Z.Component=Uo;Z.Fragment=Oj;Z.Profiler=Lj;Z.PureComponent=om;Z.StrictMode=Dj;Z.Suspense=zj;
vendor: 5,248 bytes, lines 9-25
9Z.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Vj;Z.act=cv;Z.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=nv({},e.props),o=e.key,s=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(s=t.ref,i=im.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)sv.call(t,c)&&!iv.hasOwnProperty(c)&&(n[c]=t[c]===void 0&&l!==void 0?l[c]:t[c])}var c=arguments.length-2;if(c===1)n.children=r;else if(1<c){l=Array(c);for(var d=0;d<c;d++)l[d]=arguments[d+2];n.children=l}return{$$typeof:mi,type:e.type,key:o,ref:s,props:n,_owner:i}};Z.createContext=function(e){return e={$$typeof:Mj,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:Wj,_context:e},e.Consumer=e};Z.createElement=lv;Z.createFactory=function(e){var t=lv.bind(null,e);return t.type=e,t};Z.createRef=function(){return{current:null}};Z.forwardRef=function(e){return{$$typeof:qj,render:e}};Z.isValidElement=lm;Z.lazy=function(e){return{$$typeof:Gj,_payload:{_status:-1,_result:e},_init:Uj}};Z.memo=function(e,t){return{$$typeof:$j,type:e,compare:t===void 0?null:t}};Z.startTransition=function(e){var t=gl.transition;gl.transition={};try{e()}finally{gl.transition=t}};Z.unstable_act=cv;Z.useCallback=function(e,t){return it.current.useCallback(e,t)};Z.useContext=function(e){return it.current.useContext(e)};Z.useDebugValue=function(){};Z.useDeferredValue=function(e){return it.current.useDeferredValue(e)};Z.useEffect=function(e,t){return it.current.useEffect(e,t)};Z.useId=function(){return it.current.useId()};Z.useImperativeHandle=function(e,t,r){return it.current.useImperativeHandle(e,t,r)};Z.useInsertionEffect=function(e,t){return it.current.useInsertionEffect(e,t)};Z.useLayoutEffect=function(e,t){return it.current.useLayoutEffect(e,t)};Z.useMemo=function(e,t){return it.current.useMemo(e,t)};Z.useReducer=function(e,t,r){return it.current.useReducer(e,t,r)};Z.useRef=function(e){return it.current.useRef(e)};Z.useState=function(e){return it.current.useState(e)};Z.useSyncExternalStore=function(e,t,r){return it.current.useSyncExternalStore(e,t,r)};Z.useTransition=function(){return it.current.useTransition()};Z.version="18.3.1";tv.exports=Z;var b=tv.exports;const E=Fo(b),cm=Zy({__proto__:null,default:E},[b]);/**
10 * @license React
11 * react-jsx-runtime.production.min.js
12 *
13 * Copyright (c) Facebook, Inc. and its affiliates.
14 *
15 * This source code is licensed under the MIT license found in the
16 * LICENSE file in the root directory of this source tree.
17 */var Yj=b,Kj=Symbol.for("react.element"),Jj=Symbol.for("react.fragment"),Qj=Object.prototype.hasOwnProperty,Xj=Yj.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Zj={key:!0,ref:!0,__self:!0,__source:!0};function dv(e,t,r){var n,o={},s=null,i=null;r!==void 0&&(s=""+r),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(i=t.ref);for(n in t)Qj.call(t,n)&&!Zj.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:Kj,type:e,key:s,ref:i,props:o,_owner:Xj.current}}Cc.Fragment=Jj;Cc.jsx=dv;Cc.jsxs=dv;ev.exports=Cc;var a=ev.exports,uv={exports:{}},Et={},hv={exports:{}},mv={};/**
18 * @license React
19 * scheduler.production.min.js
20 *
21 * Copyright (c) Facebook, Inc. and its affiliates.
22 *
23 * This source code is licensed under the MIT license found in the
24 * LICENSE file in the root directory of this source tree.
25 */(function(e){function t(T,I){var W=T.length;T.push(I);e:for(;0<W;){var K=W-1>>>1,G=T[K];if(0<o(G,I))T[K]=I,T[W]=G,W=K;else break e}}function r(T){return T.length===0?null:T[0]}function n(T){if(T.length===0)return null;var I=T[0],W=T.pop();if(W!==I){T[0]=W;e:for(var K=0,G=T.length,X=G>>>1;K<X;){var te=2*(K+1)-1,Ae=T[te],Ue=te+1,le=T[Ue];if(0>o(Ae,W))Ue<G&&0>o(le,Ae)?(T[K]=le,T[Ue]=W,K=Ue):(T[K]=Ae,T[te]=W,K=te);else if(Ue<G&&0>o(le,W))T[K]=le,T[Ue]=W,K=Ue;else break e}}return I}function o(T,I){var W=T.sortIndex-I.sortIndex;return W!==0?W:T.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var i=Date,l=i.now();e.unstable_now=function(){return i.now()-l}}var c=[],d=[],u=1,h=null,p=3,m=!1,v=!1,y=!1,x=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(T){for(var I=r(d);I!==null;){if(I.callback===null)n(d);else if(I.startTime<=T)n(d),I.sortIndex=I.expirationTime,t(c,I);else break;I=r(d)}}function k(T){if(y=!1,w(T),!v)if(r(c)!==null)v=!0,F(j);else{var I=r(d);I!==null&&Y(k,I.startTime-T)}}function j(T,I){v=!1,y&&(y=!1,g(_),_=-1),m=!0;var W=p;try{for(w(I),h=r(c);h!==null&&(!(h.expirationTime>I)||T&&!H());){var K=h.callback;if(typeof K=="function"){h.callback=null,p=h.priorityLevel;var G=K(h.expirationTime<=I);I=e.unstable_now(),typeof G=="function"?h.callback=G:h===r(c)&&n(c),w(I)}else n(c);h=r(c)}if(h!==null)var X=!0;else{var te=r(d);
vendor: 8,941 bytes, lines 25-34
25te!==null&&Y(k,te.startTime-I),X=!1}return X}finally{h=null,p=W,m=!1}}var S=!1,N=null,_=-1,P=5,O=-1;function H(){return!(e.unstable_now()-O<P)}function z(){if(N!==null){var T=e.unstable_now();O=T;var I=!0;try{I=N(!0,T)}finally{I?Q():(S=!1,N=null)}}else S=!1}var Q;if(typeof f=="function")Q=function(){f(z)};else if(typeof MessageChannel<"u"){var D=new MessageChannel,ee=D.port2;D.port1.onmessage=z,Q=function(){ee.postMessage(null)}}else Q=function(){x(z,0)};function F(T){N=T,S||(S=!0,Q())}function Y(T,I){_=x(function(){T(e.unstable_now())},I)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(T){T.callback=null},e.unstable_continueExecution=function(){v||m||(v=!0,F(j))},e.unstable_forceFrameRate=function(T){0>T||125<T?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):P=0<T?Math.floor(1e3/T):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return r(c)},e.unstable_next=function(T){switch(p){case 1:case 2:case 3:var I=3;break;default:I=p}var W=p;p=I;try{return T()}finally{p=W}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(T,I){switch(T){case 1:case 2:case 3:case 4:case 5:break;default:T=3}var W=p;p=T;try{return I()}finally{p=W}},e.unstable_scheduleCallback=function(T,I,W){var K=e.unstable_now();switch(typeof W=="object"&&W!==null?(W=W.delay,W=typeof W=="number"&&0<W?K+W:K):W=K,T){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=W+G,T={id:u++,callback:I,priorityLevel:T,startTime:W,expirationTime:G,sortIndex:-1},W>K?(T.sortIndex=W,t(d,T),r(c)===null&&T===r(d)&&(y?(g(_),_=-1):y=!0,Y(k,W-K))):(T.sortIndex=G,t(c,T),v||m||(v=!0,F(j))),T},e.unstable_shouldYield=H,e.unstable_wrapCallback=function(T){var I=p;return function(){var W=p;p=I;try{return T.apply(this,arguments)}finally{p=W}}}})(mv);hv.exports=mv;var e1=hv.exports;/**
26 * @license React
27 * react-dom.production.min.js
28 *
29 * Copyright (c) Facebook, Inc. and its affiliates.
30 *
31 * This source code is licensed under the MIT license found in the
32 * LICENSE file in the root directory of this source tree.
33 */var t1=b,Tt=e1;function R(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var pv=new Set,qs={};function wa(e,t){Ro(e,t),Ro(e+"Capture",t)}function Ro(e,t){for(qs[e]=t,e=0;e<t.length;e++)pv.add(t[e])}var Or=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fu=Object.prototype.hasOwnProperty,r1=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wf={},xf={};function n1(e){return fu.call(xf,e)?!0:fu.call(wf,e)?!1:r1.test(e)?xf[e]=!0:(wf[e]=!0,!1)}function a1(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function o1(e,t,r,n){if(t===null||typeof t>"u"||a1(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function lt(e,t,r,n,o,s,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=s,this.removeEmptyString=i}var He={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){He[e]=new lt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];He[t]=new lt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){He[e]=new lt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){He[e]=new lt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){He[e]=new lt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){He[e]=new lt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){He[e]=new lt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){He[e]=new lt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){He[e]=new lt(e,5,!1,e.toLowerCase(),null,!1,!1)});var dm=/[\-:]([a-z])/g;function um(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(dm,um);He[t]=new lt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(dm,um);He[t]=new lt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(dm,um);He[t]=new lt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){He[e]=new lt(e,1,!1,e.toLowerCase(),null,!1,!1)});He.xlinkHref=new lt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){He[e]=new lt(e,1,!1,e.toLowerCase(),null,!0,!0)});function hm(e,t,r,n){var o=He.hasOwnProperty(t)?He[t]:null;(o!==null?o.type!==0:n||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(o1(t,r,o,n)&&(r=null),n||o===null?n1(t)&&(r===null?e.removeAttribute(t):e.setAttribute(t,""+r)):o.mustUseProperty?e[o.propertyName]=r===null?o.type===3?!1:"":r:(t=o.attributeName,n=o.attributeNamespace,r===null?e.removeAttribute(t):(o=o.type,r=o===3||o===4&&r===!0?"":""+r,n?e.setAttributeNS(n,t,r):e.setAttribute(t,r))))}var $r=t1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Ai=Symbol.for("react.element"),Xa=Symbol.for("react.portal"),Za=Symbol.for("react.fragment"),mm=Symbol.for("react.strict_mode"),gu=Symbol.for("react.profiler"),fv=Symbol.for("react.provider"),gv=Symbol.for("react.context"),pm=Symbol.for("react.forward_ref"),yu=Symbol.for("react.suspense"),vu=Symbol.for("react.suspense_list"),fm=Symbol.for("react.memo"),en=Symbol.for("react.lazy"),yv=Symbol.for("react.offscreen"),bf=Symbol.iterator;function ls(e){return e===null||typeof e!="object"?null:(e=bf&&e[bf]||e["@@iterator"],typeof e=="function"?e:null)}var Ne=Object.assign,xd;function ks(e){if(xd===void 0)try{throw Error()}catch(r){var t=r.stack.trim().match(/\n( *(at )?)/);xd=t&&t[1]||""}return`
34`+xd+e}var bd=!1;function kd(e,t){if(!e||bd)return"";bd=!0;var r=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(d){var n=d}Reflect.construct(e,[],t)}else{try{t.call()}catch(d){n=d}e.call(t.prototype)}else{try{throw Error()}catch(d){n=d}e()}}
vendor: 14,090 bytes, lines 34-37
34catch(d){if(d&&n&&typeof d.stack=="string"){for(var o=d.stack.split(`
35`),s=n.stack.split(`
36`),i=o.length-1,l=s.length-1;1<=i&&0<=l&&o[i]!==s[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==s[l]){if(i!==1||l!==1)do if(i--,l--,0>l||o[i]!==s[l]){var c=`
37`+o[i].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}while(1<=i&&0<=l);break}}}finally{bd=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?ks(e):""}function s1(e){switch(e.tag){case 5:return ks(e.type);case 16:return ks("Lazy");case 13:return ks("Suspense");case 19:return ks("SuspenseList");case 0:case 2:case 15:return e=kd(e.type,!1),e;case 11:return e=kd(e.type.render,!1),e;case 1:return e=kd(e.type,!0),e;default:return""}}function wu(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Za:return"Fragment";case Xa:return"Portal";case gu:return"Profiler";case mm:return"StrictMode";case yu:return"Suspense";case vu:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case gv:return(e.displayName||"Context")+".Consumer";case fv:return(e._context.displayName||"Context")+".Provider";case pm:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case fm:return t=e.displayName||null,t!==null?t:wu(e.type)||"Memo";case en:t=e._payload,e=e._init;try{return wu(e(t))}catch{}}return null}function i1(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return wu(t);case 8:return t===mm?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Cn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function vv(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function l1(e){var t=vv(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,s=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(i){n=""+i,s.call(this,i)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(i){n=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ri(e){e._valueTracker||(e._valueTracker=l1(e))}function wv(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=vv(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function Ll(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function xu(e,t){var r=t.checked;return Ne({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function kf(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Cn(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function xv(e,t){t=t.checked,t!=null&&hm(e,"checked",t,!1)}function bu(e,t){xv(e,t);var r=Cn(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ku(e,t.type,r):t.hasOwnProperty("defaultValue")&&ku(e,t.type,Cn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function jf(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function ku(e,t,r){(t!=="number"||Ll(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var js=Array.isArray;function ho(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o<r.length;o++)t["$"+r[o]]=!0;for(r=0;r<e.length;r++)o=t.hasOwnProperty("$"+e[r].value),e[r].selected!==o&&(e[r].selected=o),o&&n&&(e[r].defaultSelected=!0)}else{for(r=""+Cn(r),t=null,o=0;o<e.length;o++){if(e[o].value===r){e[o].selected=!0,n&&(e[o].defaultSelected=!0);return}t!==null||e[o].disabled||(t=e[o])}t!==null&&(t.selected=!0)}}function ju(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(R(91));return Ne({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Sf(e,t){var r=t.value;if(r==null){if(r=t.children,t=t.defaultValue,r!=null){if(t!=null)throw Error(R(92));if(js(r)){if(1<r.length)throw Error(R(93));r=r[0]}t=r}t==null&&(t=""),r=t}e._wrapperState={initialValue:Cn(r)}}function bv(e,t){var r=Cn(t.value),n=Cn(t.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),t.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),n!=null&&(e.defaultValue=""+n)}function Nf(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function kv(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Su(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?kv(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Pi,jv=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,r,n,o){MSApp.execUnsafeLocalFunction(function(){return e(t,r,n,o)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Pi=Pi||document.createElement("div"),Pi.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Pi.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function zs(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Es={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},c1=["Webkit","ms","Moz","O"];Object.keys(Es).forEach(function(e){c1.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Es[t]=Es[e]})});function Sv(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Es.hasOwnProperty(e)&&Es[e]?(""+t).trim():t+"px"}function Nv(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=Sv(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var d1=Ne({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Nu(e,t){if(t){if(d1[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(R(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(R(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(R(61))}if(t.style!=null&&typeof t.style!="object")throw Error(R(62))}}function Cu(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Tu=null;function gm(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var _u=null,mo=null,po=null;function Cf(e){if(e=gi(e)){if(typeof _u!="function")throw Error(R(280));var t=e.stateNode;t&&(t=Ac(t),_u(e.stateNode,e.type,t))}}function Cv(e){mo?po?po.push(e):po=[e]:mo=e}function Tv(){if(mo){var e=mo,t=po;if(po=mo=null,Cf(e),t)for(e=0;e<t.length;e++)Cf(t[e])}}function _v(e,t){return e(t)}function Ev(){}var jd=!1;function Iv(e,t,r){if(jd)return e(t,r);jd=!0;try{return _v(e,t,r)}finally{jd=!1,(mo!==null||po!==null)&&(Ev(),Tv())}}function $s(e,t){var r=e.stateNode;if(r===null)return null;var n=Ac(r);if(n===null)return null;r=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(e=e.type,n=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!n;break e;default:e=!1}if(e)return null;if(r&&typeof r!="function")throw Error(R(231,t,typeof r));return r}var Eu=!1;if(Or)try{var cs={};Object.defineProperty(cs,"passive",{get:function(){Eu=!0}}),window.addEventListener("test",cs,cs),window.removeEventListener("test",cs,cs)}catch{Eu=!1}function u1(e,t,r,n,o,s,i,l,c){var d=Array.prototype.slice.call(arguments,3);try{t.apply(r,d)}catch(u){this.onError(u)}}var Is=!1,Wl=null,Ml=!1,Iu=null,h1={onError:function(e){Is=!0,Wl=e}};function m1(e,t,r,n,o,s,i,l,c){Is=!1,Wl=null,u1.apply(h1,arguments)}function p1(e,t,r,n,o,s,i,l,c){if(m1.apply(this,arguments),Is){if(Is){var d=Wl;Is=!1,Wl=null}else throw Error(R(198));Ml||(Ml=!0,Iu=d)}}function xa(e){var t=e,r=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(r=t.return),e=t.return;while(e)}return t.tag===3?r:null}function Av(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Tf(e){if(xa(e)!==e)throw Error(R(188))}function f1(e){var t=e.alternate;if(!t){if(t=xa(e),t===null)throw Error(R(188));return t!==e?null:e}for(var r=e,n=t;;){var o=r.return;if(o===null)break;var s=o.alternate;if(s===null){if(n=o.return,n!==null){r=n;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===r)return Tf(o),e;if(s===n)return Tf(o),t;s=s.sibling}throw Error(R(188))}if(r.return!==n.return)r=o,n=s;else{for(var i=!1,l=o.child;l;){if(l===r){i=!0,r=o,n=s;break}if(l===n){i=!0,n=o,r=s;break}l=l.sibling}if(!i){for(l=s.child;l;){if(l===r){i=!0,r=s,n=o;break}if(l===n){i=!0,n=s,r=o;break}l=l.sibling}if(!i)throw Error(R(189))}}if(r.alternate!==n)throw Error(R(190))}if(r.tag!==3)throw Error(R(188));return r.stateNode.current===r?e:t}function Rv(e){return e=f1(e),e!==null?Pv(e):null}function Pv(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=Pv(e);if(t!==null)return t;e=e.sibling}return null}var Ov=Tt.unstable_scheduleCallback,_f=Tt.unstable_cancelCallback,g1=Tt.unstable_shouldYield,y1=Tt.unstable_requestPaint,Ee=Tt.unstable_now,v1=Tt.unstable_getCurrentPriorityLevel,ym=Tt.unstable_ImmediatePriority,Dv=Tt.unstable_UserBlockingPriority,ql=Tt.unstable_NormalPriority,w1=Tt.unstable_LowPriority,Lv=Tt.unstable_IdlePriority,Tc=null,gr=null;function x1(e){if(gr&&typeof gr.onCommitFiberRoot=="function")try{gr.onCommitFiberRoot(Tc,e,void 0,(e.current.flags&128)===128)}catch{}}var tr=Math.clz32?Math.clz32:j1,b1=Math.log,k1=Math.LN2;function j1(e){return e>>>=0,e===0?32:31-(b1(e)/k1|0)|0}var Oi=64,Di=4194304;function Ss(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function zl(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,o=e.suspendedLanes,s=e.pingedLanes,i=r&268435455;if(i!==0){var l=i&~o;l!==0?n=Ss(l):(s&=i,s!==0&&(n=Ss(s)))}else i=r&~o,i!==0?n=Ss(i):s!==0&&(n=Ss(s));if(n===0)return 0;if(t!==0&&t!==n&&!(t&o)&&(o=n&-n,s=t&-t,o>=s||o===16&&(s&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0<t;)r=31-tr(t),o=1<<r,n|=e[r],t&=~o;return n}function S1(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function N1(e,t){for(var r=e.suspendedLanes,n=e.pingedLanes,o=e.expirationTimes,s=e.pendingLanes;0<s;){var i=31-tr(s),l=1<<i,c=o[i];c===-1?(!(l&r)||l&n)&&(o[i]=S1(l,t)):c<=t&&(e.expiredLanes|=l),s&=~l}}function Au(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function Wv(){var e=Oi;return Oi<<=1,!(Oi&4194240)&&(Oi=64),e}function Sd(e){for(var t=[],r=0;31>r;r++)t.push(e);return t}
vendor: 4,087 bytes, line 37
37function pi(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-tr(t),e[t]=r}function C1(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<r;){var o=31-tr(r),s=1<<o;t[o]=0,n[o]=-1,e[o]=-1,r&=~s}}function vm(e,t){var r=e.entangledLanes|=t;for(e=e.entanglements;r;){var n=31-tr(r),o=1<<n;o&t|e[n]&t&&(e[n]|=t),r&=~o}}var ce=0;function Mv(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var qv,wm,zv,$v,Gv,Ru=!1,Li=[],gn=null,yn=null,vn=null,Gs=new Map,Bs=new Map,rn=[],T1="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ef(e,t){switch(e){case"focusin":case"focusout":gn=null;break;case"dragenter":case"dragleave":yn=null;break;case"mouseover":case"mouseout":vn=null;break;case"pointerover":case"pointerout":Gs.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Bs.delete(t.pointerId)}}function ds(e,t,r,n,o,s){return e===null||e.nativeEvent!==s?(e={blockedOn:t,domEventName:r,eventSystemFlags:n,nativeEvent:s,targetContainers:[o]},t!==null&&(t=gi(t),t!==null&&wm(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,o!==null&&t.indexOf(o)===-1&&t.push(o),e)}function _1(e,t,r,n,o){switch(t){case"focusin":return gn=ds(gn,e,t,r,n,o),!0;case"dragenter":return yn=ds(yn,e,t,r,n,o),!0;case"mouseover":return vn=ds(vn,e,t,r,n,o),!0;case"pointerover":var s=o.pointerId;return Gs.set(s,ds(Gs.get(s)||null,e,t,r,n,o)),!0;case"gotpointercapture":return s=o.pointerId,Bs.set(s,ds(Bs.get(s)||null,e,t,r,n,o)),!0}return!1}function Bv(e){var t=Kn(e.target);if(t!==null){var r=xa(t);if(r!==null){if(t=r.tag,t===13){if(t=Av(r),t!==null){e.blockedOn=t,Gv(e.priority,function(){zv(r)});return}}else if(t===3&&r.stateNode.current.memoizedState.isDehydrated){e.blockedOn=r.tag===3?r.stateNode.containerInfo:null;return}}}e.blockedOn=null}function yl(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var r=Pu(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(r===null){r=e.nativeEvent;var n=new r.constructor(r.type,r);Tu=n,r.target.dispatchEvent(n),Tu=null}else return t=gi(r),t!==null&&wm(t),e.blockedOn=r,!1;t.shift()}return!0}function If(e,t,r){yl(e)&&r.delete(t)}function E1(){Ru=!1,gn!==null&&yl(gn)&&(gn=null),yn!==null&&yl(yn)&&(yn=null),vn!==null&&yl(vn)&&(vn=null),Gs.forEach(If),Bs.forEach(If)}function us(e,t){e.blockedOn===t&&(e.blockedOn=null,Ru||(Ru=!0,Tt.unstable_scheduleCallback(Tt.unstable_NormalPriority,E1)))}function Hs(e){function t(o){return us(o,e)}if(0<Li.length){us(Li[0],e);for(var r=1;r<Li.length;r++){var n=Li[r];n.blockedOn===e&&(n.blockedOn=null)}}for(gn!==null&&us(gn,e),yn!==null&&us(yn,e),vn!==null&&us(vn,e),Gs.forEach(t),Bs.forEach(t),r=0;r<rn.length;r++)n=rn[r],n.blockedOn===e&&(n.blockedOn=null);for(;0<rn.length&&(r=rn[0],r.blockedOn===null);)Bv(r),r.blockedOn===null&&rn.shift()}var fo=$r.ReactCurrentBatchConfig,$l=!0;function I1(e,t,r,n){var o=ce,s=fo.transition;fo.transition=null;try{ce=1,xm(e,t,r,n)}finally{ce=o,fo.transition=s}}function A1(e,t,r,n){var o=ce,s=fo.transition;fo.transition=null;try{ce=4,xm(e,t,r,n)}finally{ce=o,fo.transition=s}}function xm(e,t,r,n){if($l){var o=Pu(e,t,r,n);if(o===null)Od(e,t,n,Gl,r),Ef(e,n);else if(_1(o,e,t,r,n))n.stopPropagation();else if(Ef(e,n),t&4&&-1<T1.indexOf(e)){for(;o!==null;){var s=gi(o);if(s!==null&&qv(s),s=Pu(e,t,r,n),s===null&&Od(e,t,n,Gl,r),s===o)break;o=s}o!==null&&n.stopPropagation()}else Od(e,t,n,null,r)}}var Gl=null;function Pu(e,t,r,n){if(Gl=null,e=gm(n),e=Kn(e),e!==null)if(t=xa(e),t===null)e=null;else if(r=t.tag,r===13){if(e=Av(t),e!==null)return e;e=null}else if(r===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gl=e,null}
vendor: 8,975 bytes, line 37
37function Hv(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(v1()){case ym:return 1;case Dv:return 4;case ql:case w1:return 16;case Lv:return 536870912;default:return 16}default:return 16}}var hn=null,bm=null,vl=null;function Fv(){if(vl)return vl;var e,t=bm,r=t.length,n,o="value"in hn?hn.value:hn.textContent,s=o.length;for(e=0;e<r&&t[e]===o[e];e++);var i=r-e;for(n=1;n<=i&&t[r-n]===o[s-n];n++);return vl=o.slice(e,1<n?1-n:void 0)}function wl(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Wi(){return!0}function Af(){return!1}function It(e){function t(r,n,o,s,i){this._reactName=r,this._targetInst=o,this.type=n,this.nativeEvent=s,this.target=i,this.currentTarget=null;for(var l in e)e.hasOwnProperty(l)&&(r=e[l],this[l]=r?r(s):s[l]);return this.isDefaultPrevented=(s.defaultPrevented!=null?s.defaultPrevented:s.returnValue===!1)?Wi:Af,this.isPropagationStopped=Af,this}return Ne(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var r=this.nativeEvent;r&&(r.preventDefault?r.preventDefault():typeof r.returnValue!="unknown"&&(r.returnValue=!1),this.isDefaultPrevented=Wi)},stopPropagation:function(){var r=this.nativeEvent;r&&(r.stopPropagation?r.stopPropagation():typeof r.cancelBubble!="unknown"&&(r.cancelBubble=!0),this.isPropagationStopped=Wi)},persist:function(){},isPersistent:Wi}),t}var Vo={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},km=It(Vo),fi=Ne({},Vo,{view:0,detail:0}),R1=It(fi),Nd,Cd,hs,_c=Ne({},fi,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:jm,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==hs&&(hs&&e.type==="mousemove"?(Nd=e.screenX-hs.screenX,Cd=e.screenY-hs.screenY):Cd=Nd=0,hs=e),Nd)},movementY:function(e){return"movementY"in e?e.movementY:Cd}}),Rf=It(_c),P1=Ne({},_c,{dataTransfer:0}),O1=It(P1),D1=Ne({},fi,{relatedTarget:0}),Td=It(D1),L1=Ne({},Vo,{animationName:0,elapsedTime:0,pseudoElement:0}),W1=It(L1),M1=Ne({},Vo,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),q1=It(M1),z1=Ne({},Vo,{data:0}),Pf=It(z1),$1={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},G1={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},B1={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function H1(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=B1[e])?!!t[e]:!1}function jm(){return H1}var F1=Ne({},fi,{key:function(e){if(e.key){var t=$1[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=wl(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?G1[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:jm,charCode:function(e){return e.type==="keypress"?wl(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?wl(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),U1=It(F1),V1=Ne({},_c,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Of=It(V1),Y1=Ne({},fi,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:jm}),K1=It(Y1),J1=Ne({},Vo,{propertyName:0,elapsedTime:0,pseudoElement:0}),Q1=It(J1),X1=Ne({},_c,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Z1=It(X1),eS=[9,13,27,32],Sm=Or&&"CompositionEvent"in window,As=null;Or&&"documentMode"in document&&(As=document.documentMode);var tS=Or&&"TextEvent"in window&&!As,Uv=Or&&(!Sm||As&&8<As&&11>=As),Df=" ",Lf=!1;function Vv(e,t){switch(e){case"keyup":return eS.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yv(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var eo=!1;function rS(e,t){switch(e){case"compositionend":return Yv(t);case"keypress":return t.which!==32?null:(Lf=!0,Df);case"textInput":return e=t.data,e===Df&&Lf?null:e;default:return null}}function nS(e,t){if(eo)return e==="compositionend"||!Sm&&Vv(e,t)?(e=Fv(),vl=bm=hn=null,eo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Uv&&t.locale!=="ko"?null:t.data;default:return null}}var aS={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wf(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!aS[e.type]:t==="textarea"}function Kv(e,t,r,n){Cv(n),t=Bl(t,"onChange"),0<t.length&&(r=new km("onChange","change",null,r,n),e.push({event:r,listeners:t}))}var Rs=null,Fs=null;function oS(e){sw(e,0)}function Ec(e){var t=no(e);if(wv(t))return e}function sS(e,t){if(e==="change")return t}var Jv=!1;if(Or){var _d;if(Or){var Ed="oninput"in document;if(!Ed){var Mf=document.createElement("div");Mf.setAttribute("oninput","return;"),Ed=typeof Mf.oninput=="function"}_d=Ed}else _d=!1;Jv=_d&&(!document.documentMode||9<document.documentMode)}function qf(){Rs&&(Rs.detachEvent("onpropertychange",Qv),Fs=Rs=null)}function Qv(e){if(e.propertyName==="value"&&Ec(Fs)){var t=[];Kv(t,Fs,e,gm(e)),Iv(oS,t)}}function iS(e,t,r){e==="focusin"?(qf(),Rs=t,Fs=r,Rs.attachEvent("onpropertychange",Qv)):e==="focusout"&&qf()}function lS(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Ec(Fs)}function cS(e,t){if(e==="click")return Ec(t)}function dS(e,t){if(e==="input"||e==="change")return Ec(t)}function uS(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var nr=typeof Object.is=="function"?Object.is:uS;function Us(e,t){if(nr(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(n=0;n<r.length;n++){var o=r[n];if(!fu.call(t,o)||!nr(e[o],t[o]))return!1}return!0}function zf(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function $f(e,t){var r=zf(e);e=0;for(var n;r;){if(r.nodeType===3){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=zf(r)}}function Xv(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Xv(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Zv(){for(var e=window,t=Ll();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Ll(e.document)}return t}function Nm(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}
vendor: 5,809 bytes, line 37
37function hS(e){var t=Zv(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Xv(r.ownerDocument.documentElement,r)){if(n!==null&&Nm(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=r.textContent.length,s=Math.min(n.start,o);n=n.end===void 0?s:Math.min(n.end,o),!e.extend&&s>n&&(o=n,n=s,s=o),o=$f(r,s);var i=$f(r,n);o&&i&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),s>n?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r<t.length;r++)e=t[r],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mS=Or&&"documentMode"in document&&11>=document.documentMode,to=null,Ou=null,Ps=null,Du=!1;function Gf(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Du||to==null||to!==Ll(n)||(n=to,"selectionStart"in n&&Nm(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ps&&Us(Ps,n)||(Ps=n,n=Bl(Ou,"onSelect"),0<n.length&&(t=new km("onSelect","select",null,t,r),e.push({event:t,listeners:n}),t.target=to)))}function Mi(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r["Webkit"+e]="webkit"+t,r["Moz"+e]="moz"+t,r}var ro={animationend:Mi("Animation","AnimationEnd"),animationiteration:Mi("Animation","AnimationIteration"),animationstart:Mi("Animation","AnimationStart"),transitionend:Mi("Transition","TransitionEnd")},Id={},ew={};Or&&(ew=document.createElement("div").style,"AnimationEvent"in window||(delete ro.animationend.animation,delete ro.animationiteration.animation,delete ro.animationstart.animation),"TransitionEvent"in window||delete ro.transitionend.transition);function Ic(e){if(Id[e])return Id[e];if(!ro[e])return e;var t=ro[e],r;for(r in t)if(t.hasOwnProperty(r)&&r in ew)return Id[e]=t[r];return e}var tw=Ic("animationend"),rw=Ic("animationiteration"),nw=Ic("animationstart"),aw=Ic("transitionend"),ow=new Map,Bf="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function An(e,t){ow.set(e,t),wa(t,[e])}for(var Ad=0;Ad<Bf.length;Ad++){var Rd=Bf[Ad],pS=Rd.toLowerCase(),fS=Rd[0].toUpperCase()+Rd.slice(1);An(pS,"on"+fS)}An(tw,"onAnimationEnd");An(rw,"onAnimationIteration");An(nw,"onAnimationStart");An("dblclick","onDoubleClick");An("focusin","onFocus");An("focusout","onBlur");An(aw,"onTransitionEnd");Ro("onMouseEnter",["mouseout","mouseover"]);Ro("onMouseLeave",["mouseout","mouseover"]);Ro("onPointerEnter",["pointerout","pointerover"]);Ro("onPointerLeave",["pointerout","pointerover"]);wa("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));wa("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));wa("onBeforeInput",["compositionend","keypress","textInput","paste"]);wa("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));wa("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));wa("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ns="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),gS=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ns));function Hf(e,t,r){var n=e.type||"unknown-event";e.currentTarget=r,p1(n,t,void 0,e),e.currentTarget=null}function sw(e,t){t=(t&4)!==0;for(var r=0;r<e.length;r++){var n=e[r],o=n.event;n=n.listeners;e:{var s=void 0;if(t)for(var i=n.length-1;0<=i;i--){var l=n[i],c=l.instance,d=l.currentTarget;if(l=l.listener,c!==s&&o.isPropagationStopped())break e;Hf(o,l,d),s=c}else for(i=0;i<n.length;i++){if(l=n[i],c=l.instance,d=l.currentTarget,l=l.listener,c!==s&&o.isPropagationStopped())break e;Hf(o,l,d),s=c}}}if(Ml)throw e=Iu,Ml=!1,Iu=null,e}function ye(e,t){var r=t[zu];r===void 0&&(r=t[zu]=new Set);var n=e+"__bubble";r.has(n)||(iw(t,e,2,!1),r.add(n))}function Pd(e,t,r){var n=0;t&&(n|=4),iw(r,e,n,t)}var qi="_reactListening"+Math.random().toString(36).slice(2);function Vs(e){if(!e[qi]){e[qi]=!0,pv.forEach(function(r){r!=="selectionchange"&&(gS.has(r)||Pd(r,!1,e),Pd(r,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[qi]||(t[qi]=!0,Pd("selectionchange",!1,t))}}function iw(e,t,r,n){switch(Hv(t)){case 1:var o=I1;break;case 4:o=A1;break;default:o=xm}r=o.bind(null,t,r,e),o=void 0,!Eu||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(o=!0),n?o!==void 0?e.addEventListener(t,r,{capture:!0,passive:o}):e.addEventListener(t,r,!0):o!==void 0?e.addEventListener(t,r,{passive:o}):e.addEventListener(t,r,!1)}function Od(e,t,r,n,o){var s=n;
vendor: 22,735 bytes, lines 37-38
37if(!(t&1)&&!(t&2)&&n!==null)e:for(;;){if(n===null)return;var i=n.tag;if(i===3||i===4){var l=n.stateNode.containerInfo;if(l===o||l.nodeType===8&&l.parentNode===o)break;if(i===4)for(i=n.return;i!==null;){var c=i.tag;if((c===3||c===4)&&(c=i.stateNode.containerInfo,c===o||c.nodeType===8&&c.parentNode===o))return;i=i.return}for(;l!==null;){if(i=Kn(l),i===null)return;if(c=i.tag,c===5||c===6){n=s=i;continue e}l=l.parentNode}}n=n.return}Iv(function(){var d=s,u=gm(r),h=[];e:{var p=ow.get(e);if(p!==void 0){var m=km,v=e;switch(e){case"keypress":if(wl(r)===0)break e;case"keydown":case"keyup":m=U1;break;case"focusin":v="focus",m=Td;break;case"focusout":v="blur",m=Td;break;case"beforeblur":case"afterblur":m=Td;break;case"click":if(r.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":m=Rf;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":m=O1;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":m=K1;break;case tw:case rw:case nw:m=W1;break;case aw:m=Q1;break;case"scroll":m=R1;break;case"wheel":m=Z1;break;case"copy":case"cut":case"paste":m=q1;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":m=Of}var y=(t&4)!==0,x=!y&&e==="scroll",g=y?p!==null?p+"Capture":null:p;y=[];for(var f=d,w;f!==null;){w=f;var k=w.stateNode;if(w.tag===5&&k!==null&&(w=k,g!==null&&(k=$s(f,g),k!=null&&y.push(Ys(f,k,w)))),x)break;f=f.return}0<y.length&&(p=new m(p,v,null,r,u),h.push({event:p,listeners:y}))}}if(!(t&7)){e:{if(p=e==="mouseover"||e==="pointerover",m=e==="mouseout"||e==="pointerout",p&&r!==Tu&&(v=r.relatedTarget||r.fromElement)&&(Kn(v)||v[Dr]))break e;if((m||p)&&(p=u.window===u?u:(p=u.ownerDocument)?p.defaultView||p.parentWindow:window,m?(v=r.relatedTarget||r.toElement,m=d,v=v?Kn(v):null,v!==null&&(x=xa(v),v!==x||v.tag!==5&&v.tag!==6)&&(v=null)):(m=null,v=d),m!==v)){if(y=Rf,k="onMouseLeave",g="onMouseEnter",f="mouse",(e==="pointerout"||e==="pointerover")&&(y=Of,k="onPointerLeave",g="onPointerEnter",f="pointer"),x=m==null?p:no(m),w=v==null?p:no(v),p=new y(k,f+"leave",m,r,u),p.target=x,p.relatedTarget=w,k=null,Kn(u)===d&&(y=new y(g,f+"enter",v,r,u),y.target=w,y.relatedTarget=x,k=y),x=k,m&&v)t:{for(y=m,g=v,f=0,w=y;w;w=Ea(w))f++;for(w=0,k=g;k;k=Ea(k))w++;for(;0<f-w;)y=Ea(y),f--;for(;0<w-f;)g=Ea(g),w--;for(;f--;){if(y===g||g!==null&&y===g.alternate)break t;y=Ea(y),g=Ea(g)}y=null}else y=null;m!==null&&Ff(h,p,m,y,!1),v!==null&&x!==null&&Ff(h,x,v,y,!0)}}e:{if(p=d?no(d):window,m=p.nodeName&&p.nodeName.toLowerCase(),m==="select"||m==="input"&&p.type==="file")var j=sS;else if(Wf(p))if(Jv)j=dS;else{j=lS;var S=iS}else(m=p.nodeName)&&m.toLowerCase()==="input"&&(p.type==="checkbox"||p.type==="radio")&&(j=cS);if(j&&(j=j(e,d))){Kv(h,j,r,u);break e}S&&S(e,p,d),e==="focusout"&&(S=p._wrapperState)&&S.controlled&&p.type==="number"&&ku(p,"number",p.value)}switch(S=d?no(d):window,e){case"focusin":(Wf(S)||S.contentEditable==="true")&&(to=S,Ou=d,Ps=null);break;case"focusout":Ps=Ou=to=null;break;case"mousedown":Du=!0;break;case"contextmenu":case"mouseup":case"dragend":Du=!1,Gf(h,r,u);break;case"selectionchange":if(mS)break;case"keydown":case"keyup":Gf(h,r,u)}var N;if(Sm)e:{switch(e){case"compositionstart":var _="onCompositionStart";break e;case"compositionend":_="onCompositionEnd";break e;case"compositionupdate":_="onCompositionUpdate";break e}_=void 0}else eo?Vv(e,r)&&(_="onCompositionEnd"):e==="keydown"&&r.keyCode===229&&(_="onCompositionStart");_&&(Uv&&r.locale!=="ko"&&(eo||_!=="onCompositionStart"?_==="onCompositionEnd"&&eo&&(N=Fv()):(hn=u,bm="value"in hn?hn.value:hn.textContent,eo=!0)),S=Bl(d,_),0<S.length&&(_=new Pf(_,e,null,r,u),h.push({event:_,listeners:S}),N?_.data=N:(N=Yv(r),N!==null&&(_.data=N)))),(N=tS?rS(e,r):nS(e,r))&&(d=Bl(d,"onBeforeInput"),0<d.length&&(u=new Pf("onBeforeInput","beforeinput",null,r,u),h.push({event:u,listeners:d}),u.data=N))}sw(h,t)})}function Ys(e,t,r){return{instance:e,listener:t,currentTarget:r}}function Bl(e,t){for(var r=t+"Capture",n=[];e!==null;){var o=e,s=o.stateNode;o.tag===5&&s!==null&&(o=s,s=$s(e,r),s!=null&&n.unshift(Ys(e,s,o)),s=$s(e,t),s!=null&&n.push(Ys(e,s,o))),e=e.return}return n}function Ea(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function Ff(e,t,r,n,o){for(var s=t._reactName,i=[];r!==null&&r!==n;){var l=r,c=l.alternate,d=l.stateNode;if(c!==null&&c===n)break;l.tag===5&&d!==null&&(l=d,o?(c=$s(r,s),c!=null&&i.unshift(Ys(r,c,l))):o||(c=$s(r,s),c!=null&&i.push(Ys(r,c,l)))),r=r.return}i.length!==0&&e.push({event:t,listeners:i})}var yS=/\r\n?/g,vS=/\u0000|\uFFFD/g;function Uf(e){return(typeof e=="string"?e:""+e).replace(yS,`
38`).replace(vS,"")}function zi(e,t,r){if(t=Uf(t),Uf(e)!==t&&r)throw Error(R(425))}function Hl(){}var Lu=null,Wu=null;function Mu(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var qu=typeof setTimeout=="function"?setTimeout:void 0,wS=typeof clearTimeout=="function"?clearTimeout:void 0,Vf=typeof Promise=="function"?Promise:void 0,xS=typeof queueMicrotask=="function"?queueMicrotask:typeof Vf<"u"?function(e){return Vf.resolve(null).then(e).catch(bS)}:qu;function bS(e){setTimeout(function(){throw e})}function Dd(e,t){var r=t,n=0;do{var o=r.nextSibling;if(e.removeChild(r),o&&o.nodeType===8)if(r=o.data,r==="/$"){if(n===0){e.removeChild(o),Hs(t);return}n--}else r!=="$"&&r!=="$?"&&r!=="$!"||n++;r=o}while(r);Hs(t)}function wn(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function Yf(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="$"||r==="$!"||r==="$?"){if(t===0)return e;t--}else r==="/$"&&t++}e=e.previousSibling}return null}var Yo=Math.random().toString(36).slice(2),pr="__reactFiber$"+Yo,Ks="__reactProps$"+Yo,Dr="__reactContainer$"+Yo,zu="__reactEvents$"+Yo,kS="__reactListeners$"+Yo,jS="__reactHandles$"+Yo;function Kn(e){var t=e[pr];if(t)return t;for(var r=e.parentNode;r;){if(t=r[Dr]||r[pr]){if(r=t.alternate,t.child!==null||r!==null&&r.child!==null)for(e=Yf(e);e!==null;){if(r=e[pr])return r;e=Yf(e)}return t}e=r,r=e.parentNode}return null}function gi(e){return e=e[pr]||e[Dr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function no(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(R(33))}function Ac(e){return e[Ks]||null}var $u=[],ao=-1;function Rn(e){return{current:e}}function ve(e){0>ao||(e.current=$u[ao],$u[ao]=null,ao--)}function pe(e,t){ao++,$u[ao]=e.current,e.current=t}var Tn={},Ze=Rn(Tn),yt=Rn(!1),da=Tn;function Po(e,t){var r=e.type.contextTypes;if(!r)return Tn;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},s;for(s in r)o[s]=t[s];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function vt(e){return e=e.childContextTypes,e!=null}function Fl(){ve(yt),ve(Ze)}function Kf(e,t,r){if(Ze.current!==Tn)throw Error(R(168));pe(Ze,t),pe(yt,r)}function lw(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in t))throw Error(R(108,i1(e)||"Unknown",o));return Ne({},r,n)}function Ul(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Tn,da=Ze.current,pe(Ze,e),pe(yt,yt.current),!0}function Jf(e,t,r){var n=e.stateNode;if(!n)throw Error(R(169));r?(e=lw(e,t,da),n.__reactInternalMemoizedMergedChildContext=e,ve(yt),ve(Ze),pe(Ze,e)):ve(yt),pe(yt,r)}var Er=null,Rc=!1,Ld=!1;function cw(e){Er===null?Er=[e]:Er.push(e)}function SS(e){Rc=!0,cw(e)}function Pn(){if(!Ld&&Er!==null){Ld=!0;var e=0,t=ce;try{var r=Er;for(ce=1;e<r.length;e++){var n=r[e];do n=n(!0);while(n!==null)}Er=null,Rc=!1}catch(o){throw Er!==null&&(Er=Er.slice(e+1)),Ov(ym,Pn),o}finally{ce=t,Ld=!1}}return null}var oo=[],so=0,Vl=null,Yl=0,Ot=[],Dt=0,ua=null,Ar=1,Rr="";function Gn(e,t){oo[so++]=Yl,oo[so++]=Vl,Vl=e,Yl=t}function dw(e,t,r){Ot[Dt++]=Ar,Ot[Dt++]=Rr,Ot[Dt++]=ua,ua=e;var n=Ar;e=Rr;var o=32-tr(n)-1;n&=~(1<<o),r+=1;var s=32-tr(t)+o;if(30<s){var i=o-o%5;s=(n&(1<<i)-1).toString(32),n>>=i,o-=i,Ar=1<<32-tr(t)+o|r<<o|n,Rr=s+e}else Ar=1<<s|r<<o|n,Rr=e}function Cm(e){e.return!==null&&(Gn(e,1),dw(e,1,0))}function Tm(e){for(;e===Vl;)Vl=oo[--so],oo[so]=null,Yl=oo[--so],oo[so]=null;for(;e===ua;)ua=Ot[--Dt],Ot[Dt]=null,Rr=Ot[--Dt],Ot[Dt]=null,Ar=Ot[--Dt],Ot[Dt]=null}var Nt=null,St=null,be=!1,Zt=null;function uw(e,t){var r=Lt(5,null,null,0);r.elementType="DELETED",r.stateNode=t,r.return=e,t=e.deletions,t===null?(e.deletions=[r],e.flags|=16):t.push(r)}function Qf(e,t){switch(e.tag){case 5:var r=e.type;return t=t.nodeType!==1||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Nt=e,St=wn(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Nt=e,St=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(r=ua!==null?{id:Ar,overflow:Rr}:null,e.memoizedState={dehydrated:t,treeContext:r,retryLane:1073741824},r=Lt(18,null,null,0),r.stateNode=t,r.return=e,e.child=r,Nt=e,St=null,!0):!1;default:return!1}}function Gu(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Bu(e){if(be){var t=St;if(t){var r=t;if(!Qf(e,t)){if(Gu(e))throw Error(R(418));t=wn(r.nextSibling);var n=Nt;t&&Qf(e,t)?uw(n,r):(e.flags=e.flags&-4097|2,be=!1,Nt=e)}}else{if(Gu(e))throw Error(R(418));e.flags=e.flags&-4097|2,be=!1,Nt=e}}}function Xf(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Nt=e}function $i(e){if(e!==Nt)return!1;if(!be)return Xf(e),be=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!Mu(e.type,e.memoizedProps)),t&&(t=St)){if(Gu(e))throw hw(),Error(R(418));for(;t;)uw(e,t),t=wn(t.nextSibling)}if(Xf(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(R(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(t===0){St=wn(e.nextSibling);break e}t--}else r!=="$"&&r!=="$!"&&r!=="$?"||t++}e=e.nextSibling}St=null}}else St=Nt?wn(e.stateNode.nextSibling):null;return!0}function hw(){for(var e=St;e;)e=wn(e.nextSibling)}function Oo(){St=Nt=null,be=!1}function _m(e){Zt===null?Zt=[e]:Zt.push(e)}var NS=$r.ReactCurrentBatchConfig;function ms(e,t,r){if(e=r.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(r._owner){if(r=r._owner,r){if(r.tag!==1)throw Error(R(309));var n=r.stateNode}if(!n)throw Error(R(147,e));var o=n,s=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===s?t.ref:(t=function(i){var l=o.refs;i===null?delete l[s]:l[s]=i},t._stringRef=s,t)}if(typeof e!="string")throw Error(R(284));if(!r._owner)throw Error(R(290,e))}return e}function Gi(e,t){throw e=Object.prototype.toString.call(t),Error(R(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Zf(e){var t=e._init;return t(e._payload)}function mw(e){function t(g,f){if(e){var w=g.deletions;w===null?(g.deletions=[f],g.flags|=16):w.push(f)}}function r(g,f){if(!e)return null;for(;f!==null;)t(g,f),f=f.sibling;return null}function n(g,f){for(g=new Map;f!==null;)f.key!==null?g.set(f.key,f):g.set(f.index,f),f=f.sibling;return g}function o(g,f){return g=jn(g,f),g.index=0,g.sibling=null,g}function s(g,f,w){return g.index=w,e?(w=g.alternate,w!==null?(w=w.index,w<f?(g.flags|=2,f):w):(g.flags|=2,f)):(g.flags|=1048576,f)}function i(g){return e&&g.alternate===null&&(g.flags|=2),g}function l(g,f,w,k){return f===null||f.tag!==6?(f=Bd(w,g.mode,k),f.return=g,f):(f=o(f,w),f.return=g,f)}function c(g,f,w,k){var j=w.type;return j===Za?u(g,f,w.props.children,k,w.key):f!==null&&(f.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===en&&Zf(j)===f.type)?(k=o(f,w.props),k.ref=ms(g,f,w),k.return=g,k):(k=Cl(w.type,w.key,w.props,null,g.mode,k),k.ref=ms(g,f,w),k.return=g,k)}function d(g,f,w,k){return f===null||f.tag!==4||f.stateNode.containerInfo!==w.containerInfo||f.stateNode.implementation!==w.implementation?(f=Hd(w,g.mode,k),f.return=g,f):(f=o(f,w.children||[]),f.return=g,f)}function u(g,f,w,k,j){return f===null||f.tag!==7?(f=ia(w,g.mode,k,j),f.return=g,f):(f=o(f,w),f.return=g,f)}function h(g,f,w){if(typeof f=="string"&&f!==""||typeof f=="number")return f=Bd(""+f,g.mode,w),f.return=g,f;if(typeof f=="object"&&f!==null){switch(f.$$typeof){case Ai:return w=Cl(f.type,f.key,f.props,null,g.mode,w),w.ref=ms(g,null,f),w.return=g,w;case Xa:return f=Hd(f,g.mode,w),f.return=g,f;case en:var k=f._init;return h(g,k(f._payload),w)}if(js(f)||ls(f))return f=ia(f,g.mode,w,null),f.return=g,f;Gi(g,f)}return null}function p(g,f,w,k){var j=f!==null?f.key:null;if(typeof w=="string"&&w!==""||typeof w=="number")return j!==null?null:l(g,f,""+w,k);if(typeof w=="object"&&w!==null){switch(w.$$typeof){case Ai:return w.key===j?c(g,f,w,k):null;case Xa:return w.key===j?d(g,f,w,k):null;case en:return j=w._init,p(g,f,j(w._payload),k)}if(js(w)||ls(w))return j!==null?null:u(g,f,w,k,null);Gi(g,w)}return null}function m(g,f,w,k,j){if(typeof k=="string"&&k!==""||typeof k=="number")return g=g.get(w)||null,l(f,g,""+k,j);if(typeof k=="object"&&k!==null){switch(k.$$typeof){case Ai:return g=g.get(k.key===null?w:k.key)||null,c(f,g,k,j);case Xa:return g=g.get(k.key===null?w:k.key)||null,d(f,g,k,j);case en:var S=k._init;return m(g,f,w,S(k._payload),j)}if(js(k)||ls(k))return g=g.get(w)||null,u(f,g,k,j,null);Gi(f,k)}return null}function v(g,f,w,k){for(var j=null,S=null,N=f,_=f=0,P=null;N!==null&&_<w.length;_++){N.index>_?(P=N,N=null):P=N.sibling;var O=p(g,N,w[_],k);if(O===null){N===null&&(N=P);break}e&&N&&O.alternate===null&&t(g,N),f=s(O,f,_),S===null?j=O:S.sibling=O,S=O,N=P}if(_===w.length)return r(g,N),be&&Gn(g,_),j;if(N===null){for(;_<w.length;_++)N=h(g,w[_],k),N!==null&&(f=s(N,f,_),S===null?j=N:S.sibling=N,S=N);return be&&Gn(g,_),j}for(N=n(g,N);_<w.length;_++)P=m(N,g,_,w[_],k),P!==null&&(e&&P.alternate!==null&&N.delete(P.key===null?_:P.key),f=s(P,f,_),S===null?j=P:S.sibling=P,S=P);return e&&N.forEach(function(H){return t(g,H)}),be&&Gn(g,_),j}function y(g,f,w,k){var j=ls(w);if(typeof j!="function")throw Error(R(150));if(w=j.call(w),w==null)throw Error(R(151));for(var S=j=null,N=f,_=f=0,P=null,O=w.next();N!==null&&!O.done;_++,O=w.next()){N.index>_?(P=N,N=null):P=N.sibling;var H=p(g,N,O.value,k);if(H===null){N===null&&(N=P);break}e&&N&&H.alternate===null&&t(g,N),f=s(H,f,_),S===null?j=H:S.sibling=H,S=H,N=P}if(O.done)return r(g,N),be&&Gn(g,_),j;if(N===null){for(;!O.done;_++,O=w.next())O=h(g,O.value,k),O!==null&&(f=s(O,f,_),S===null?j=O:S.sibling=O,S=O);return be&&Gn(g,_),j}for(N=n(g,N);!O.done;_++,O=w.next())O=m(N,g,_,O.value,k),O!==null&&(e&&O.alternate!==null&&N.delete(O.key===null?_:O.key),f=s(O,f,_),S===null?j=O:S.sibling=O,S=O);return e&&N.forEach(function(z){return t(g,z)}),be&&Gn(g,_),j}function x(g,f,w,k){if(typeof w=="object"&&w!==null&&w.type===Za&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Ai:e:{for(var j=w.key,S=f;S!==null;){if(S.key===j){if(j=w.type,j===Za){if(S.tag===7){r(g,S.sibling),f=o(S,w.props.children),f.return=g,g=f;break e}}else if(S.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===en&&Zf(j)===S.type){r(g,S.sibling),f=o(S,w.props),f.ref=ms(g,S,w),f.return=g,g=f;break e}r(g,S);break}else t(g,S);S=S.sibling}w.type===Za?(f=ia(w.props.children,g.mode,k,w.key),f.return=g,g=f):(k=Cl(w.type,w.key,w.props,null,g.mode,k),k.ref=ms(g,f,w),k.return=g,g=k)}return i(g);case Xa:e:{for(S=w.key;f!==null;){if(f.key===S)if(f.tag===4&&f.stateNode.containerInfo===w.containerInfo&&f.stateNode.implementation===w.implementation){r(g,f.sibling),f=o(f,w.children||[]),f.return=g,g=f;break e}else{r(g,f);break}else t(g,f);f=f.sibling}f=Hd(w,g.mode,k),f.return=g,g=f}return i(g);case en:return S=w._init,x(g,f,S(w._payload),k)}if(js(w))return v(g,f,w,k);if(ls(w))return y(g,f,w,k);Gi(g,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,f!==null&&f.tag===6?(r(g,f.sibling),f=o(f,w),f.return=g,g=f):(r(g,f),f=Bd(w,g.mode,k),f.return=g,g=f),i(g)):r(g,f)}return x}var Do=mw(!0),pw=mw(!1),Kl=Rn(null),Jl=null,io=null,Em=null;function Im(){Em=io=Jl=null}function Am(e){var t=Kl.current;ve(Kl),e._currentValue=t}function Hu(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function go(e,t){Jl=e,Em=io=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(gt=!0),e.firstContext=null)}function Mt(e){var t=e._currentValue;if(Em!==e)if(e={context:e,memoizedValue:t,next:null},io===null){if(Jl===null)throw Error(R(308));io=e,Jl.dependencies={lanes:0,firstContext:e}}else io=io.next=e;return t}var Jn=null;function Rm(e){Jn===null?Jn=[e]:Jn.push(e)}function fw(e,t,r,n){var o=t.interleaved;return o===null?(r.next=r,Rm(t)):(r.next=o.next,o.next=r),t.interleaved=r,Lr(e,n)}function Lr(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var tn=!1;function Pm(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function gw(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function xn(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,oe&2){var o=n.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),n.pending=t,Lr(e,r)}return o=n.interleaved,o===null?(t.next=t,Rm(n)):(t.next=o.next,o.next=t),n.interleaved=t,Lr(e,r)}function xl(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,vm(e,r)}}function eg(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var o=null,s=null;if(r=r.firstBaseUpdate,r!==null){do{var i={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};s===null?o=s=i:s=s.next=i,r=r.next}while(r!==null);s===null?o=s=t:s=s.next=t}else o=s=t;r={baseState:n.baseState,firstBaseUpdate:o,lastBaseUpdate:s,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Ql(e,t,r,n){var o=e.updateQueue;tn=!1;var s=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(l!==null){o.shared.pending=null;var c=l,d=c.next;c.next=null,i===null?s=d:i.next=d,i=c;var u=e.alternate;u!==null&&(u=u.updateQueue,l=u.lastBaseUpdate,l!==i&&(l===null?u.firstBaseUpdate=d:l.next=d,u.lastBaseUpdate=c))}if(s!==null){var h=o.baseState;i=0,u=d=c=null,l=s;do{var p=l.lane,m=l.eventTime;if((n&p)===p){u!==null&&(u=u.next={eventTime:m,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var v=e,y=l;switch(p=t,m=r,y.tag){case 1:if(v=y.payload,typeof v=="function"){h=v.call(m,h,p);break e}h=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=y.payload,p=typeof v=="function"?v.call(m,h,p):v,p==null)break e;h=Ne({},h,p);break e;case 2:tn=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=o.effects,p===null?o.effects=[l]:p.push(l))}else m={eventTime:m,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},u===null?(d=u=m,c=h):u=u.next=m,i|=p;if(l=l.next,l===null){if(l=o.shared.pending,l===null)break;p=l,l=p.next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}while(!0);if(u===null&&(c=h),o.baseState=c,o.firstBaseUpdate=d,o.lastBaseUpdate=u,t=o.shared.interleaved,t!==null){o=t;do i|=o.lane,o=o.next;while(o!==t)}else s===null&&(o.shared.lanes=0);ma|=i,e.lanes=i,e.memoizedState=h}}function tg(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var n=e[t],o=n.callback;if(o!==null){if(n.callback=null,n=r,typeof o!="function")throw Error(R(191,o));o.call(n)}}}var yi={},yr=Rn(yi),Js=Rn(yi),Qs=Rn(yi);function Qn(e){if(e===yi)throw Error(R(174));return e}function Om(e,t){switch(pe(Qs,t),pe(Js,e),pe(yr,yi),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Su(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Su(t,e)}ve(yr),pe(yr,t)}function Lo(){ve(yr),ve(Js),ve(Qs)}function yw(e){Qn(Qs.current);var t=Qn(yr.current),r=Su(t,e.type);t!==r&&(pe(Js,e),pe(yr,r))}function Dm(e){Js.current===e&&(ve(yr),ve(Js))}var ke=Rn(0);function Xl(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Wd=[];function Lm(){for(var e=0;e<Wd.length;e++)Wd[e]._workInProgressVersionPrimary=null;Wd.length=0}var bl=$r.ReactCurrentDispatcher,Md=$r.ReactCurrentBatchConfig,ha=0,Se=null,De=null,We=null,Zl=!1,Os=!1,Xs=0,CS=0;function Ye(){throw Error(R(321))}function Wm(e,t){if(t===null)return!1;for(var r=0;r<t.length&&r<e.length;r++)if(!nr(e[r],t[r]))return!1;return!0}function Mm(e,t,r,n,o,s){if(ha=s,Se=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,bl.current=e===null||e.memoizedState===null?IS:AS,e=r(n,o),Os){s=0;do{if(Os=!1,Xs=0,25<=s)throw Error(R(301));s+=1,We=De=null,t.updateQueue=null,bl.current=RS,e=r(n,o)}while(Os)}if(bl.current=ec,t=De!==null&&De.next!==null,ha=0,We=De=Se=null,Zl=!1,t)throw Error(R(300));return e}function qm(){var e=Xs!==0;return Xs=0,e}function cr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return We===null?Se.memoizedState=We=e:We=We.next=e,We}function qt(){if(De===null){var e=Se.alternate;e=e!==null?e.memoizedState:null}else e=De.next;var t=We===null?Se.memoizedState:We.next;if(t!==null)We=t,De=e;else{if(e===null)throw Error(R(310));De=e,e={memoizedState:De.memoizedState,baseState:De.baseState,baseQueue:De.baseQueue,queue:De.queue,next:null},We===null?Se.memoizedState=We=e:We=We.next=e}return We}function Zs(e,t){return typeof t=="function"?t(e):t}function qd(e){var t=qt(),r=t.queue;if(r===null)throw Error(R(311));r.lastRenderedReducer=e;
vendor: 5,688 bytes, line 38
38var n=De,o=n.baseQueue,s=r.pending;if(s!==null){if(o!==null){var i=o.next;o.next=s.next,s.next=i}n.baseQueue=o=s,r.pending=null}if(o!==null){s=o.next,n=n.baseState;var l=i=null,c=null,d=s;do{var u=d.lane;if((ha&u)===u)c!==null&&(c=c.next={lane:0,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null}),n=d.hasEagerState?d.eagerState:e(n,d.action);else{var h={lane:u,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null};c===null?(l=c=h,i=n):c=c.next=h,Se.lanes|=u,ma|=u}d=d.next}while(d!==null&&d!==s);c===null?i=n:c.next=l,nr(n,t.memoizedState)||(gt=!0),t.memoizedState=n,t.baseState=i,t.baseQueue=c,r.lastRenderedState=n}if(e=r.interleaved,e!==null){o=e;do s=o.lane,Se.lanes|=s,ma|=s,o=o.next;while(o!==e)}else o===null&&(r.lanes=0);return[t.memoizedState,r.dispatch]}function zd(e){var t=qt(),r=t.queue;if(r===null)throw Error(R(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,s=t.memoizedState;if(o!==null){r.pending=null;var i=o=o.next;do s=e(s,i.action),i=i.next;while(i!==o);nr(s,t.memoizedState)||(gt=!0),t.memoizedState=s,t.baseQueue===null&&(t.baseState=s),r.lastRenderedState=s}return[s,n]}function vw(){}function ww(e,t){var r=Se,n=qt(),o=t(),s=!nr(n.memoizedState,o);if(s&&(n.memoizedState=o,gt=!0),n=n.queue,zm(kw.bind(null,r,n,e),[e]),n.getSnapshot!==t||s||We!==null&&We.memoizedState.tag&1){if(r.flags|=2048,ei(9,bw.bind(null,r,n,o,t),void 0,null),Me===null)throw Error(R(349));ha&30||xw(r,t,o)}return o}function xw(e,t,r){e.flags|=16384,e={getSnapshot:t,value:r},t=Se.updateQueue,t===null?(t={lastEffect:null,stores:null},Se.updateQueue=t,t.stores=[e]):(r=t.stores,r===null?t.stores=[e]:r.push(e))}function bw(e,t,r,n){t.value=r,t.getSnapshot=n,jw(t)&&Sw(e)}function kw(e,t,r){return r(function(){jw(t)&&Sw(e)})}function jw(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!nr(e,r)}catch{return!0}}function Sw(e){var t=Lr(e,1);t!==null&&rr(t,e,1,-1)}function rg(e){var t=cr();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Zs,lastRenderedState:e},t.queue=e,e=e.dispatch=ES.bind(null,Se,e),[t.memoizedState,e]}function ei(e,t,r,n){return e={tag:e,create:t,destroy:r,deps:n,next:null},t=Se.updateQueue,t===null?(t={lastEffect:null,stores:null},Se.updateQueue=t,t.lastEffect=e.next=e):(r=t.lastEffect,r===null?t.lastEffect=e.next=e:(n=r.next,r.next=e,e.next=n,t.lastEffect=e)),e}function Nw(){return qt().memoizedState}function kl(e,t,r,n){var o=cr();Se.flags|=e,o.memoizedState=ei(1|t,r,void 0,n===void 0?null:n)}function Pc(e,t,r,n){var o=qt();n=n===void 0?null:n;var s=void 0;if(De!==null){var i=De.memoizedState;if(s=i.destroy,n!==null&&Wm(n,i.deps)){o.memoizedState=ei(t,r,s,n);return}}Se.flags|=e,o.memoizedState=ei(1|t,r,s,n)}function ng(e,t){return kl(8390656,8,e,t)}function zm(e,t){return Pc(2048,8,e,t)}function Cw(e,t){return Pc(4,2,e,t)}function Tw(e,t){return Pc(4,4,e,t)}function _w(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Ew(e,t,r){return r=r!=null?r.concat([e]):null,Pc(4,4,_w.bind(null,t,e),r)}function $m(){}function Iw(e,t){var r=qt();t=t===void 0?null:t;var n=r.memoizedState;return n!==null&&t!==null&&Wm(t,n[1])?n[0]:(r.memoizedState=[e,t],e)}function Aw(e,t){var r=qt();t=t===void 0?null:t;var n=r.memoizedState;return n!==null&&t!==null&&Wm(t,n[1])?n[0]:(e=e(),r.memoizedState=[e,t],e)}function Rw(e,t,r){return ha&21?(nr(r,t)||(r=Wv(),Se.lanes|=r,ma|=r,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,gt=!0),e.memoizedState=r)}function TS(e,t){var r=ce;ce=r!==0&&4>r?r:4,e(!0);var n=Md.transition;Md.transition={};try{e(!1),t()}finally{ce=r,Md.transition=n}}function Pw(){return qt().memoizedState}function _S(e,t,r){var n=kn(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},Ow(e))Dw(t,r);else if(r=fw(e,t,r,n),r!==null){var o=ot();rr(r,e,n,o),Lw(r,t,n)}}function ES(e,t,r){var n=kn(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(Ow(e))Dw(t,o);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var i=t.lastRenderedState,l=s(i,r);if(o.hasEagerState=!0,o.eagerState=l,nr(l,i)){var c=t.interleaved;c===null?(o.next=o,Rm(t)):(o.next=c.next,c.next=o),t.interleaved=o;return}}catch{}finally{}r=fw(e,t,o,n),r!==null&&(o=ot(),rr(r,e,n,o),Lw(r,t,n))}}function Ow(e){var t=e.alternate;return e===Se||t!==null&&t===Se}function Dw(e,t){Os=Zl=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Lw(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,vm(e,r)}}var ec={readContext:Mt,useCallback:Ye,useContext:Ye,useEffect:Ye,useImperativeHandle:Ye,useInsertionEffect:Ye,useLayoutEffect:Ye,useMemo:Ye,useReducer:Ye,useRef:Ye,useState:Ye,useDebugValue:Ye,useDeferredValue:Ye,useTransition:Ye,useMutableSource:Ye,useSyncExternalStore:Ye,useId:Ye,unstable_isNewReconciler:!1},IS={readContext:Mt,useCallback:function(e,t){return cr().memoizedState=[e,t===void 0?null:t],e},useContext:Mt,useEffect:ng,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,kl(4194308,4,_w.bind(null,t,e),r)},useLayoutEffect:function(e,t){return kl(4194308,4,e,t)},useInsertionEffect:function(e,t){return kl(4,2,e,t)},useMemo:function(e,t){var r=cr();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=cr();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=_S.bind(null,Se,e),[n.memoizedState,e]}
vendor: 7,431 bytes, lines 38-40
38,useRef:function(e){var t=cr();return e={current:e},t.memoizedState=e},useState:rg,useDebugValue:$m,useDeferredValue:function(e){return cr().memoizedState=e},useTransition:function(){var e=rg(!1),t=e[0];return e=TS.bind(null,e[1]),cr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=Se,o=cr();if(be){if(r===void 0)throw Error(R(407));r=r()}else{if(r=t(),Me===null)throw Error(R(349));ha&30||xw(n,t,r)}o.memoizedState=r;var s={value:r,getSnapshot:t};return o.queue=s,ng(kw.bind(null,n,s,e),[e]),n.flags|=2048,ei(9,bw.bind(null,n,s,r,t),void 0,null),r},useId:function(){var e=cr(),t=Me.identifierPrefix;if(be){var r=Rr,n=Ar;r=(n&~(1<<32-tr(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=Xs++,0<r&&(t+="H"+r.toString(32)),t+=":"}else r=CS++,t=":"+t+"r"+r.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},AS={readContext:Mt,useCallback:Iw,useContext:Mt,useEffect:zm,useImperativeHandle:Ew,useInsertionEffect:Cw,useLayoutEffect:Tw,useMemo:Aw,useReducer:qd,useRef:Nw,useState:function(){return qd(Zs)},useDebugValue:$m,useDeferredValue:function(e){var t=qt();return Rw(t,De.memoizedState,e)},useTransition:function(){var e=qd(Zs)[0],t=qt().memoizedState;return[e,t]},useMutableSource:vw,useSyncExternalStore:ww,useId:Pw,unstable_isNewReconciler:!1},RS={readContext:Mt,useCallback:Iw,useContext:Mt,useEffect:zm,useImperativeHandle:Ew,useInsertionEffect:Cw,useLayoutEffect:Tw,useMemo:Aw,useReducer:zd,useRef:Nw,useState:function(){return zd(Zs)},useDebugValue:$m,useDeferredValue:function(e){var t=qt();return De===null?t.memoizedState=e:Rw(t,De.memoizedState,e)},useTransition:function(){var e=zd(Zs)[0],t=qt().memoizedState;return[e,t]},useMutableSource:vw,useSyncExternalStore:ww,useId:Pw,unstable_isNewReconciler:!1};function Ut(e,t){if(e&&e.defaultProps){t=Ne({},t),e=e.defaultProps;for(var r in e)t[r]===void 0&&(t[r]=e[r]);return t}return t}function Fu(e,t,r,n){t=e.memoizedState,r=r(n,t),r=r==null?t:Ne({},t,r),e.memoizedState=r,e.lanes===0&&(e.updateQueue.baseState=r)}var Oc={isMounted:function(e){return(e=e._reactInternals)?xa(e)===e:!1},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=ot(),o=kn(e),s=Pr(n,o);s.payload=t,r!=null&&(s.callback=r),t=xn(e,s,o),t!==null&&(rr(t,e,o,n),xl(t,e,o))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=ot(),o=kn(e),s=Pr(n,o);s.tag=1,s.payload=t,r!=null&&(s.callback=r),t=xn(e,s,o),t!==null&&(rr(t,e,o,n),xl(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=ot(),n=kn(e),o=Pr(r,n);o.tag=2,t!=null&&(o.callback=t),t=xn(e,o,n),t!==null&&(rr(t,e,n,r),xl(t,e,n))}};function ag(e,t,r,n,o,s,i){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,s,i):t.prototype&&t.prototype.isPureReactComponent?!Us(r,n)||!Us(o,s):!0}function Ww(e,t,r){var n=!1,o=Tn,s=t.contextType;return typeof s=="object"&&s!==null?s=Mt(s):(o=vt(t)?da:Ze.current,n=t.contextTypes,s=(n=n!=null)?Po(e,o):Tn),t=new t(r,s),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Oc,e.stateNode=t,t._reactInternals=e,n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=s),t}function og(e,t,r,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(r,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&Oc.enqueueReplaceState(t,t.state,null)}function Uu(e,t,r,n){var o=e.stateNode;o.props=r,o.state=e.memoizedState,o.refs={},Pm(e);var s=t.contextType;typeof s=="object"&&s!==null?o.context=Mt(s):(s=vt(t)?da:Ze.current,o.context=Po(e,s)),o.state=e.memoizedState,s=t.getDerivedStateFromProps,typeof s=="function"&&(Fu(e,t,s,r),o.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof o.getSnapshotBeforeUpdate=="function"||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(t=o.state,typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount(),t!==o.state&&Oc.enqueueReplaceState(o,o.state,null),Ql(e,r,o,n),o.state=e.memoizedState),typeof o.componentDidMount=="function"&&(e.flags|=4194308)}function Wo(e,t){try{var r="",n=t;do r+=s1(n),n=n.return;while(n);var o=r}catch(s){o=`
39Error generating stack: `+s.message+`
40`+s.stack}return{value:e,source:t,stack:o,digest:null}}function $d(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function Vu(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var PS=typeof WeakMap=="function"?WeakMap:Map;function Mw(e,t,r){r=Pr(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){rc||(rc=!0,nh=n),Vu(e,t)},r}function qw(e,t,r){r=Pr(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var o=t.value;r.payload=function(){return n(o)},r.callback=function(){Vu(e,t)}}var s=e.stateNode;return s!==null&&typeof s.componentDidCatch=="function"&&(r.callback=function(){Vu(e,t),typeof n!="function"&&(bn===null?bn=new Set([this]):bn.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),r}function sg(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new PS;var o=new Set;n.set(t,o)}else o=n.get(t),o===void 0&&(o=new Set,n.set(t,o));o.has(r)||(o.add(r),e=VS.bind(null,e,t,r),t.then(e,e))}function ig(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function lg(e,t,r,n,o){return e.mode&1?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,r.tag===1&&(r.alternate===null?r.tag=17:(t=Pr(-1,1),t.tag=2,xn(r,t,1))),r.lanes|=1),e)}var OS=$r.ReactCurrentOwner,gt=!1;function rt(e,t,r,n){t.child=e===null?pw(t,null,r,n):Do(t,e.child,r,n)}function cg(e,t,r,n,o){r=r.render;var s=t.ref;return go(t,o),n=Mm(e,t,r,n,s,o),r=qm(),e!==null&&!gt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Wr(e,t,o)):(be&&r&&Cm(t),t.flags|=1,rt(e,t,n,o),t.child)}function dg(e,t,r,n,o){if(e===null){var s=r.type;return typeof s=="function"&&!Km(s)&&s.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=s,zw(e,t,s,n,o)):(e=Cl(r.type,null,n,t,t.mode,o),e.ref=t.ref,e.return=t,t.child=e)}if(s=e.child,!(e.lanes&o)){var i=s.memoizedProps;if(r=r.compare,r=r!==null?r:Us,r(i,n)&&e.ref===t.ref)return Wr(e,t,o)}return t.flags|=1,e=jn(s,n),e.ref=t.ref,e.return=t,t.child=e}function zw(e,t,r,n,o){if(e!==null){var s=e.memoizedProps;if(Us(s,n)&&e.ref===t.ref)if(gt=!1,t.pendingProps=n=s,(e.lanes&o)!==0)e.flags&131072&&(gt=!0);else return t.lanes=e.lanes,Wr(e,t,o)}return Yu(e,t,r,n,o)}function $w(e,t,r){var n=t.pendingProps,o=n.children,s=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},pe(co,bt),bt|=r;else{if(!(r&1073741824))return e=s!==null?s.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,pe(co,bt),bt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=s!==null?s.baseLanes:r,pe(co,bt),bt|=n}else s!==null?(n=s.baseLanes|r,t.memoizedState=null):n=r,pe(co,bt),bt|=n;return rt(e,t,o,r),t.child}function Gw(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}
vendor: 4,711 bytes, line 40
40function Yu(e,t,r,n,o){var s=vt(r)?da:Ze.current;return s=Po(t,s),go(t,o),r=Mm(e,t,r,n,s,o),n=qm(),e!==null&&!gt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Wr(e,t,o)):(be&&n&&Cm(t),t.flags|=1,rt(e,t,r,o),t.child)}function ug(e,t,r,n,o){if(vt(r)){var s=!0;Ul(t)}else s=!1;if(go(t,o),t.stateNode===null)jl(e,t),Ww(t,r,n),Uu(t,r,n,o),n=!0;else if(e===null){var i=t.stateNode,l=t.memoizedProps;i.props=l;var c=i.context,d=r.contextType;typeof d=="object"&&d!==null?d=Mt(d):(d=vt(r)?da:Ze.current,d=Po(t,d));var u=r.getDerivedStateFromProps,h=typeof u=="function"||typeof i.getSnapshotBeforeUpdate=="function";h||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(l!==n||c!==d)&&og(t,i,n,d),tn=!1;var p=t.memoizedState;i.state=p,Ql(t,n,i,o),c=t.memoizedState,l!==n||p!==c||yt.current||tn?(typeof u=="function"&&(Fu(t,r,u,n),c=t.memoizedState),(l=tn||ag(t,r,l,n,p,c,d))?(h||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=c),i.props=n,i.state=c,i.context=d,n=l):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{i=t.stateNode,gw(e,t),l=t.memoizedProps,d=t.type===t.elementType?l:Ut(t.type,l),i.props=d,h=t.pendingProps,p=i.context,c=r.contextType,typeof c=="object"&&c!==null?c=Mt(c):(c=vt(r)?da:Ze.current,c=Po(t,c));var m=r.getDerivedStateFromProps;(u=typeof m=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(l!==h||p!==c)&&og(t,i,n,c),tn=!1,p=t.memoizedState,i.state=p,Ql(t,n,i,o);var v=t.memoizedState;l!==h||p!==v||yt.current||tn?(typeof m=="function"&&(Fu(t,r,m,n),v=t.memoizedState),(d=tn||ag(t,r,d,n,p,v,c)||!1)?(u||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(n,v,c),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(n,v,c)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=v),i.props=n,i.state=v,i.context=c,n=d):(typeof i.componentDidUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),n=!1)}return Ku(e,t,r,n,s,o)}function Ku(e,t,r,n,o,s){Gw(e,t);var i=(t.flags&128)!==0;if(!n&&!i)return o&&Jf(t,r,!1),Wr(e,t,s);n=t.stateNode,OS.current=t;var l=i&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&i?(t.child=Do(t,e.child,null,s),t.child=Do(t,null,l,s)):rt(e,t,l,s),t.memoizedState=n.state,o&&Jf(t,r,!0),t.child}function Bw(e){var t=e.stateNode;t.pendingContext?Kf(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Kf(e,t.context,!1),Om(e,t.containerInfo)}function hg(e,t,r,n,o){return Oo(),_m(o),t.flags|=256,rt(e,t,r,n),t.child}var Ju={dehydrated:null,treeContext:null,retryLane:0};function Qu(e){return{baseLanes:e,cachePool:null,transitions:null}}function Hw(e,t,r){var n=t.pendingProps,o=ke.current,s=!1,i=(t.flags&128)!==0,l;if((l=i)||(l=e!==null&&e.memoizedState===null?!1:(o&2)!==0),l?(s=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(o|=1),pe(ke,o&1),e===null)return Bu(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=n.children,e=n.fallback,s?(n=t.mode,s=t.child,i={mode:"hidden",children:i},!(n&1)&&s!==null?(s.childLanes=0,s.pendingProps=i):s=Wc(i,n,0,null),e=ia(e,n,r,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Qu(r),t.memoizedState=Ju,e):Gm(t,i));if(o=e.memoizedState,o!==null&&(l=o.dehydrated,l!==null))return DS(e,t,i,n,l,o,r);if(s){s=n.fallback,i=t.mode,o=e.child,l=o.sibling;var c={mode:"hidden",children:n.children};return!(i&1)&&t.child!==o?(n=t.child,n.childLanes=0,n.pendingProps=c,t.deletions=null):(n=jn(o,c),n.subtreeFlags=o.subtreeFlags&14680064),l!==null?s=jn(l,s):(s=ia(s,i,r,null),s.flags|=2),s.return=t,n.return=t,n.sibling=s,t.child=n,n=s,s=t.child,i=e.child.memoizedState,i=i===null?Qu(r):{base
vendor: 7,716 bytes, line 40
40Lanes:i.baseLanes|r,cachePool:null,transitions:i.transitions},s.memoizedState=i,s.childLanes=e.childLanes&~r,t.memoizedState=Ju,n}return s=e.child,e=s.sibling,n=jn(s,{mode:"visible",children:n.children}),!(t.mode&1)&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function Gm(e,t){return t=Wc({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Bi(e,t,r,n){return n!==null&&_m(n),Do(t,e.child,null,r),e=Gm(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function DS(e,t,r,n,o,s,i){if(r)return t.flags&256?(t.flags&=-257,n=$d(Error(R(422))),Bi(e,t,i,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(s=n.fallback,o=t.mode,n=Wc({mode:"visible",children:n.children},o,0,null),s=ia(s,o,i,null),s.flags|=2,n.return=t,s.return=t,n.sibling=s,t.child=n,t.mode&1&&Do(t,e.child,null,i),t.child.memoizedState=Qu(i),t.memoizedState=Ju,s);if(!(t.mode&1))return Bi(e,t,i,null);if(o.data==="$!"){if(n=o.nextSibling&&o.nextSibling.dataset,n)var l=n.dgst;return n=l,s=Error(R(419)),n=$d(s,n,void 0),Bi(e,t,i,n)}if(l=(i&e.childLanes)!==0,gt||l){if(n=Me,n!==null){switch(i&-i){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}o=o&(n.suspendedLanes|i)?0:o,o!==0&&o!==s.retryLane&&(s.retryLane=o,Lr(e,o),rr(n,e,o,-1))}return Ym(),n=$d(Error(R(421))),Bi(e,t,i,n)}return o.data==="$?"?(t.flags|=128,t.child=e.child,t=YS.bind(null,e),o._reactRetry=t,null):(e=s.treeContext,St=wn(o.nextSibling),Nt=t,be=!0,Zt=null,e!==null&&(Ot[Dt++]=Ar,Ot[Dt++]=Rr,Ot[Dt++]=ua,Ar=e.id,Rr=e.overflow,ua=t),t=Gm(t,n.children),t.flags|=4096,t)}function mg(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),Hu(e.return,t,r)}function Gd(e,t,r,n,o){var s=e.memoizedState;s===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:o}:(s.isBackwards=t,s.rendering=null,s.renderingStartTime=0,s.last=n,s.tail=r,s.tailMode=o)}function Fw(e,t,r){var n=t.pendingProps,o=n.revealOrder,s=n.tail;if(rt(e,t,n.children,r),n=ke.current,n&2)n=n&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&mg(e,r,t);else if(e.tag===19)mg(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(pe(ke,n),!(t.mode&1))t.memoizedState=null;else switch(o){case"forwards":for(r=t.child,o=null;r!==null;)e=r.alternate,e!==null&&Xl(e)===null&&(o=r),r=r.sibling;r=o,r===null?(o=t.child,t.child=null):(o=r.sibling,r.sibling=null),Gd(t,!1,o,r,s);break;case"backwards":for(r=null,o=t.child,t.child=null;o!==null;){if(e=o.alternate,e!==null&&Xl(e)===null){t.child=o;break}e=o.sibling,o.sibling=r,r=o,o=e}Gd(t,!0,r,null,s);break;case"together":Gd(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function jl(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Wr(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),ma|=t.lanes,!(r&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(R(153));if(t.child!==null){for(e=t.child,r=jn(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=jn(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function LS(e,t,r){switch(t.tag){case 3:Bw(t),Oo();break;case 5:yw(t);break;case 1:vt(t.type)&&Ul(t);break;case 4:Om(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;pe(Kl,n._currentValue),n._currentValue=o;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(pe(ke,ke.current&1),t.flags|=128,null):r&t.child.childLanes?Hw(e,t,r):(pe(ke,ke.current&1),e=Wr(e,t,r),e!==null?e.sibling:null);pe(ke,ke.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&128){if(n)return Fw(e,t,r);t.flags|=128}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),pe(ke,ke.current),n)break;return null;case 22:case 23:return t.lanes=0,$w(e,t,r)}return Wr(e,t,r)}var Uw,Xu,Vw,Yw;Uw=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6)e.appendChild(r.stateNode);else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};Xu=function(){};Vw=function(e,t,r,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,Qn(yr.current);var s=null;switch(r){case"input":o=xu(e,o),n=xu(e,n),s=[];break;case"select":o=Ne({},o,{value:void 0}),n=Ne({},n,{value:void 0}),s=[];break;case"textarea":o=ju(e,o),n=ju(e,n),s=[];break;default:typeof o.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=Hl)}Nu(r,n);var i;r=null;for(d in o)if(!n.hasOwnProperty(d)&&o.hasOwnProperty(d)&&o[d]!=null)if(d==="style"){var l=o[d];for(i in l)l.hasOwnProperty(i)&&(r||(r={}),r[i]="")}else d!=="dangerouslySetInnerHTML"&&d!=="children"&&d!=="suppressContentEditableWarning"&&d!=="suppressHydrationWarning"&&d!=="autoFocus"&&(qs.hasOwnProperty(d)?s||(s=[]):(s=s||[]).push(d,null));for(d in n){var c=n[d];if(l=o!=null?o[d]:void 0,n.hasOwnProperty(d)&&c!==l&&(c!=null||l!=null))if(d==="style")if(l){for(i in l)!l.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(r||(r={}),r[i]="");for(i in c)c.hasOwnProperty(i)&&l[i]!==c[i]&&(r||(r={}),r[i]=c[i])}else r||(s||(s=[]),s.push(d,r)),r=c;else d==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,l=l?l.__html:void 0,c!=null&&l!==c&&(s=s||[]).push(d,c)):d==="children"?typeof c!="string"&&typeof c!="number"||(s=s||[]).push(d,""+c):d!=="suppressContentEditableWarning"&&d!=="suppressHydrationWarning"&&(qs.hasOwnProperty(d)?(c!=null&&d==="onScroll"&&ye("scroll",e),s||l===c||(s=[])):(s=s||[]).push(d,c))}r&&(s=s||[]).push("style",r);var d=s;(t.updateQueue=d)&&(t.flags|=4)}};Yw=function(e,t,r,n){r!==n&&(t.flags|=4)};function ps(e,t){if(!be)switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Ke(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags&14680064,n|=o.flags&14680064,o.return=e,o=o.sibling;else for(o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function WS(e,t,r){var n=t.pendingProps;switch(Tm(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ke(t),null;case 1:return vt(t.type)&&Fl(),Ke(t),null;case 3:return n=t.stateNode,Lo(),ve(yt),ve(Ze),Lm(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&($i(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Zt!==null&&(sh(Zt),Zt=null))),Xu(e,t),Ke(t),null;case 5:Dm(t);var o=Qn(Qs.current);if(r=t.type,e!==null&&t.stateNode!=null)Vw(e,t,r,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(R(166));return Ke(t),null}if(e=Qn(yr.current),$i(t)){n=t.stateNode,r=t.type;var s=t.memoizedProps;switch(n[pr]=t,n[Ks]=s,e=(t.mode&1)!==0,r){case"dialog":ye("cancel",n),ye("
40close",n);break;case"iframe":case"object":case"embed":ye("load",n);break;case"video":case"audio":for(o=0;o<Ns.length;o++)ye(Ns[o],n);break;case"source":ye("error",n);break;case"img":case"image":case"link":ye("error",n),ye("load",n);break;case"details":ye("toggle",n);break;case"input":kf(n,s),ye("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!s.multiple},ye("invalid",n);break;case"textarea":Sf(n,s),ye("invalid",n)}Nu(r,s),o=null;for(var i in s)if(s.hasOwnProperty(i)){var l=s[i];i==="children"?typeof l=="string"?n.textContent!==l&&(s.suppressHydrationWarning!==!0&&zi(n.textContent,l,e),o=["children",l]):typeof l=="number"&&n.textContent!==""+l&&(s.suppressHydrationWarning!==!0&&zi(n.textContent,l,e),o=["children",""+l]):qs.hasOwnProperty(i)&&l!=null&&i==="onScroll"&&ye("scroll",n)}switch(r){case"input":Ri(n),jf(n,s,!0);break;case"textarea":Ri(n),Nf(n);break;case"select":case"option":break;default:typeof s.onClick=="function"&&(n.onclick=Hl)}n=o,t.updateQueue=n,n!==null&&(t.flags|=4)}else{i=o.nodeType===9?o:o.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=kv(r)),e==="http://www.w3.org/1999/xhtml"?r==="script"?(e=i.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=i.createElement(r,{is:n.is}):(e=i.createElement(r),r==="select"&&(i=e,n.multiple?i.multiple=!0:n.size&&(i.size=n.size))):e=i.createElementNS(e,r),e[pr]=t,e[Ks]=n,Uw(e,t,!1,!1),t.stateNode=e;e:{switch(i=Cu(r,n),r){case"dialog":ye("cancel",e),ye("close",e),o=n;break;case"iframe":case"object":case"embed":ye("load",e),o=n;break;case"video":case"audio":for(o=0;o<Ns.length;o++)ye(Ns[o],e);o=n;break;case"source":ye("error",e),o=n;break;case"img":case"image":case"link":ye("error",e),ye("load",e),o=n;break;case"details":ye("toggle",e),o=n;break;case"input":kf(e,n),o=xu(e,n),ye("invalid",e);break;case"option":o=n;break;case"select":e._wrapperState={wasMultiple:!!n.multiple},o=Ne({},n,{value:void 0}),ye("invalid",e);break;case"textarea":Sf(e,n),o=ju(e,n),ye("invalid",e);break;default:o=n}Nu(r,o),l=o;for(s in l)if(l.hasOwnProperty(s)){var c=l[s];s==="style"?Nv(e,c):s==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,c!=null&&jv(e,c)):s==="children"?typeof c=="string"?(r!=="textarea"||c!=="")&&zs(e,c):typeof c=="number"&&zs(e,""+c):s!=="suppressContentEditableWarning"&&s!=="suppressHydrationWarning"&&s!=="autoFocus"&&(qs.hasOwnProperty(s)?c!=null&&s==="onScroll"&&ye("scroll",e):c!=null&&hm(e,s,c,i))}switch(r){case"input":Ri(e),jf(e,n,!1);break;case"textarea":Ri(e),Nf(e);break;case"option":n.value!=null&&e.setAttribute("value",""+Cn(n.value));break;case"select":e.multiple=!!n.multiple,s=n.value,s!=null?ho(e,!!n.multiple,s,!1):n.defaultValue!=null&&ho(e,!!n.multiple,n.defaultValue,!0);break;default:typeof o.onClick=="function"&&(e.onclick=Hl)}switch(r){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Ke(t),null;case 6:if(e&&t.stateNode!=null)Yw(e,t,e.memoizedProps,n);else{if(typeof n!="string"&&t.stateNode===null)throw Error(R(166));if(r=Qn(Qs.current),Qn(yr.current),$i(t)){if(n=t.stateNode,r=t.memoizedProps,n[pr]=t,(s=n.nodeValue!==r)&&(e=Nt,e!==null))switch(e.tag){case 3:zi(n.nodeValue,r,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&zi(n.nodeValue,r,(e.mode&1)!==0)}s&&(t.flags|=4)}else n=(r.nodeType===9?r:r.ownerDocument).createTextNode(n),n[pr]=t,t.stateNode=n}return Ke(t),null;case 13:if(ve(ke),n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(be&&St!==null&&t.mode&1&&!(t.flags&128))hw(),Oo(),t.flags|=98560,s=!1;else if(s=$i(t),n!==null&&n.dehydrated!==null){if(e===null){if(!s)throw Error(R(318));if(s=t.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(R(317));s[pr]=t}else Oo(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Ke(t),s=!1}else Zt!==null&&(sh(Zt),Zt=null),s=!0;if(!s)return t.flags&65536?t:null}return t.flags&128?(t.lanes=r,t):(n=n!==null,n!==(e!==null&&e.memoizedState!==null)&&n&&(t.child.flags|=8192,t.mode&1&&(e===null||ke.current&1?Le===0&&(Le=3):Ym())),t.updateQueue!==null&&(t.flags|=4),Ke(t),null);case 4:return Lo(),Xu(e,t),e===null&&Vs(t.stateNode.containerInfo),Ke(t),null;case 10:return Am(t.type._context),Ke(t),null;case 17:return vt(t.type)&&Fl(),Ke(t),null;case 19:if(ve(ke),s=t.memoizedState,s===null)return Ke(t),null;if(n=(t.flags&128)!==0,i=s.rendering,i===null)if(n)ps(s,!1);else{if(Le!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=Xl(e),i!==null){for(t.flags|=128,ps(s,!1),n=i.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=r,r=t.child;r!==null;)s=r,e=n,s.flags&=14680066,i=s.alternate,i===null?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,
vendor: 15,523 bytes, line 40
40s.stateNode=null):(s.childLanes=i.childLanes,s.lanes=i.lanes,s.child=i.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=i.memoizedProps,s.memoizedState=i.memoizedState,s.updateQueue=i.updateQueue,s.type=i.type,e=i.dependencies,s.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),r=r.sibling;return pe(ke,ke.current&1|2),t.child}e=e.sibling}s.tail!==null&&Ee()>Mo&&(t.flags|=128,n=!0,ps(s,!1),t.lanes=4194304)}else{if(!n)if(e=Xl(i),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),ps(s,!0),s.tail===null&&s.tailMode==="hidden"&&!i.alternate&&!be)return Ke(t),null}else 2*Ee()-s.renderingStartTime>Mo&&r!==1073741824&&(t.flags|=128,n=!0,ps(s,!1),t.lanes=4194304);s.isBackwards?(i.sibling=t.child,t.child=i):(r=s.last,r!==null?r.sibling=i:t.child=i,s.last=i)}return s.tail!==null?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=Ee(),t.sibling=null,r=ke.current,pe(ke,n?r&1|2:r&1),t):(Ke(t),null);case 22:case 23:return Vm(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?bt&1073741824&&(Ke(t),t.subtreeFlags&6&&(t.flags|=8192)):Ke(t),null;case 24:return null;case 25:return null}throw Error(R(156,t.tag))}function MS(e,t){switch(Tm(t),t.tag){case 1:return vt(t.type)&&Fl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Lo(),ve(yt),ve(Ze),Lm(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Dm(t),null;case 13:if(ve(ke),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(R(340));Oo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ve(ke),null;case 4:return Lo(),null;case 10:return Am(t.type._context),null;case 22:case 23:return Vm(),null;case 24:return null;default:return null}}var Hi=!1,Qe=!1,qS=typeof WeakSet=="function"?WeakSet:Set,M=null;function lo(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){Te(e,t,n)}else r.current=null}function Zu(e,t,r){try{r()}catch(n){Te(e,t,n)}}var pg=!1;function zS(e,t){if(Lu=$l,e=Zv(),Nm(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var o=n.anchorOffset,s=n.focusNode;n=n.focusOffset;try{r.nodeType,s.nodeType}catch{r=null;break e}var i=0,l=-1,c=-1,d=0,u=0,h=e,p=null;t:for(;;){for(var m;h!==r||o!==0&&h.nodeType!==3||(l=i+o),h!==s||n!==0&&h.nodeType!==3||(c=i+n),h.nodeType===3&&(i+=h.nodeValue.length),(m=h.firstChild)!==null;)p=h,h=m;for(;;){if(h===e)break t;if(p===r&&++d===o&&(l=i),p===s&&++u===n&&(c=i),(m=h.nextSibling)!==null)break;h=p,p=h.parentNode}h=m}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(Wu={focusedElem:e,selectionRange:r},$l=!1,M=t;M!==null;)if(t=M,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,M=e;else for(;M!==null;){t=M;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var y=v.memoizedProps,x=v.memoizedState,g=t.stateNode,f=g.getSnapshotBeforeUpdate(t.elementType===t.type?y:Ut(t.type,y),x);g.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var w=t.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(R(163))}}catch(k){Te(t,t.return,k)}if(e=t.sibling,e!==null){e.return=t.return,M=e;break}M=t.return}return v=pg,pg=!1,v}function Ds(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var s=o.destroy;o.destroy=void 0,s!==void 0&&Zu(t,r,s)}o=o.next}while(o!==n)}}function Dc(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function eh(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function Kw(e){var t=e.alternate;t!==null&&(e.alternate=null,Kw(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[pr],delete t[Ks],delete t[zu],delete t[kS],delete t[jS])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Jw(e){return e.tag===5||e.tag===3||e.tag===4}function fg(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Jw(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function th(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Hl));else if(n!==4&&(e=e.child,e!==null))for(th(e,t,r),e=e.sibling;e!==null;)th(e,t,r),e=e.sibling}function rh(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(rh(e,t,r),e=e.sibling;e!==null;)rh(e,t,r),e=e.sibling}var Ge=null,Qt=!1;function Jr(e,t,r){for(r=r.child;r!==null;)Qw(e,t,r),r=r.sibling}function Qw(e,t,r){if(gr&&typeof gr.onCommitFiberUnmount=="function")try{gr.onCommitFiberUnmount(Tc,r)}catch{}switch(r.tag){case 5:Qe||lo(r,t);case 6:var n=Ge,o=Qt;Ge=null,Jr(e,t,r),Ge=n,Qt=o,Ge!==null&&(Qt?(e=Ge,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):Ge.removeChild(r.stateNode));break;case 18:Ge!==null&&(Qt?(e=Ge,r=r.stateNode,e.nodeType===8?Dd(e.parentNode,r):e.nodeType===1&&Dd(e,r),Hs(e)):Dd(Ge,r.stateNode));break;case 4:n=Ge,o=Qt,Ge=r.stateNode.containerInfo,Qt=!0,Jr(e,t,r),Ge=n,Qt=o;break;case 0:case 11:case 14:case 15:if(!Qe&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){o=n=n.next;do{var s=o,i=s.destroy;s=s.tag,i!==void 0&&(s&2||s&4)&&Zu(r,t,i),o=o.next}while(o!==n)}Jr(e,t,r);break;case 1:if(!Qe&&(lo(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(l){Te(r,t,l)}Jr(e,t,r);break;case 21:Jr(e,t,r);break;case 22:r.mode&1?(Qe=(n=Qe)||r.memoizedState!==null,Jr(e,t,r),Qe=n):Jr(e,t,r);break;default:Jr(e,t,r)}}function gg(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new qS),t.forEach(function(n){var o=KS.bind(null,e,n);r.has(n)||(r.add(n),n.then(o,o))})}}function Bt(e,t){var r=t.deletions;if(r!==null)for(var n=0;n<r.length;n++){var o=r[n];try{var s=e,i=t,l=i;e:for(;l!==null;){switch(l.tag){case 5:Ge=l.stateNode,Qt=!1;break e;case 3:Ge=l.stateNode.containerInfo,Qt=!0;break e;case 4:Ge=l.stateNode.containerInfo,Qt=!0;break e}l=l.return}if(Ge===null)throw Error(R(160));Qw(s,i,o),Ge=null,Qt=!1;var c=o.alternate;c!==null&&(c.return=null),o.return=null}catch(d){Te(o,t,d)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Xw(t,e),t=t.sibling}function Xw(e,t){var r=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Bt(t,e),lr(e),n&4){try{Ds(3,e,e.return),Dc(3,e)}catch(y){Te(e,e.return,y)}try{Ds(5,e,e.return)}catch(y){Te(e,e.return,y)}}break;case 1:Bt(t,e),lr(e),n&512&&r!==null&&lo(r,r.return);break;case 5:if(Bt(t,e),lr(e),n&512&&r!==null&&lo(r,r.return),e.flags&32){var o=e.stateNode;try{zs(o,"")}catch(y){Te(e,e.return,y)}}if(n&4&&(o=e.stateNode,o!=null)){var s=e.memoizedProps,i=r!==null?r.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,c!==null)try{l==="input"&&s.type==="radio"&&s.name!=null&&xv(o,s),Cu(l,i);var d=Cu(l,s);for(i=0;i<c.length;i+=2){var u=c[i],h=c[i+1];u==="style"?Nv(o,h):u==="dangerouslySetInnerHTML"?jv(o,h):u==="children"?zs(o,h):hm(o,u,h,d)}switch(l){case"input":bu(o,s);break;case"textarea":bv(o,s);break;case"select":var p=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!s.multiple;var m=s.value;m!=null?ho(o,!!s.multiple,m,!1):p!==!!s.multiple&&(s.defaultValue!=null?ho(o,!!s.multiple,s.defaultValue,!0):ho(o,!!s.multiple,s.multiple?[]:"",!1))}o[Ks]=s}catch(y){Te(e,e.return,y)}}break;case 6:if(Bt(t,e),lr(e),n&4){if(e.stateNode===null)throw Error(R(162));o=e.stateNode,s=e.memoizedProps;try{o.nodeValue=s}catch(y){Te(e,e.return,y)}}break;case 3:if(Bt(t,e),lr(e),n&4&&r!==null&&r.memoizedState.isDehydrated)try{Hs(t.containerInfo)}catch(y){Te(e,e.return,y)}break;case 4:Bt(t,e),lr(e);break;case 13:Bt(t,e),lr(e),o=e.child,o.flags&8192&&(s=o.memoizedState!==null,o.stateNode.isHidden=s,!s||o.alternate!==null&&o.alternate.memoizedState!==null||(Fm=Ee())),n&4&&gg(e);break;case 22:if(u=r!==null&&r.memoizedState!==null,e.mode&1?(Qe=(d=Qe)||u,Bt(t,e),Qe=d):Bt(t,e),lr(e),n&8192){if(d=e.memoizedState!==null,(e.stateNode.isHidden=d)&&!u&&e.mode&1)for(M=e,u=e.child;u!==null;){for(h=M=u;M!==null;){switch(p=M,m=p.child,p.tag){case 0:case 11:case 14:case 15:Ds(4,p,p.return);break;case 1:lo(p,p.return);var v=p.stateNode;if(typeof v.componentWillUnmount=="function"){n=p,r=p.return;try{t=n,v.props=t.memoizedProps,v.state=t.memoizedState,v.componentWillUnmount()}catch(y){Te(n,r,y)}}break;case 5:lo(p,p.return);break;case 22:if(p.memoizedState!==null){vg(h);continue}}m!==null?(m.return=p,M=m):vg(h)}u=u.sibling}e:for(u=null,h=e;;){if(h.tag===5){if(u===null){u=h;try{o=h.stateNode,d?(s=o.style,typeof s.setProperty=="function"?s.setProperty("display","none","important"):s.display="none"):(l=h.stateNode,c=h.memoizedProps.style,i=c!=null&&c.hasOwnProperty("display")?c.display:null,l.style.display=Sv("display",i))}catch(y){Te(e,e.return,y)}}}else if(h.tag===6){if(u===null)try{h.stateNode.nodeValue=d?"":h.memoizedProps}catch(y){Te(e,e.return,y)}}else if((h.tag!==22&&h.tag!==23||h.memoizedState===null||h===e)&&h.child!==null){h.child.return=h,h=h.child;continue}if(h===e)break e;for(;h.sibling===null;){if(h.return===null||h.return===e)break e;u===h&&(u=null),h=h.return}u===h&&(u=null),h.sibling.return=h.return,h=h.sibling}}break;case 19:Bt(t,e),lr(e),n&4&&gg(e);break;case 21:break;default:Bt(t,e),lr(e)}}function lr(e){var t=e.flags;if(t&2){try{e:{for(var r=e.return;r!==null;){if(Jw(r)){var n=r;break e}r=r.return}throw Error(R(160))}switch(n.tag){case 5:var o=n.stateNode;n.flags&32&&(zs(o,""),n.flags&=-33);var s=fg(e);rh(e,s,o);break;case 3:case 4:var i=n.stateNode.containerInfo,l=fg(e);th(e,l,i);break;default:throw Error(R(161))}}catch(c){Te(e,e.return,c)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function $S(e,t,r){M=e,Zw(e)}function Zw(e,t,r){for(var n=(e.mode&1)!==0;M!==null;){var o=M,s=o.child;if(o.tag===22&&n){var i=o.memoizedState!==null||Hi;if(!i){var l=o.alternate,c=l!==null&&l.memoizedState!==null||Qe;l=Hi;var d=Qe;if(Hi=i,(Qe=c)&&!d)for(M=o;M!==null;)i=M,c=i.child,i.tag===22&&i.memoizedState!==null?wg(o):c!==null?(c.return=i,M=c):wg(o);for(;s!==null;)M=s,Zw(s),s=s.sibling;M=o,Hi=l,Qe=d}yg(e)}else o.subtreeFlags&8772&&s!==null?(s.return=o,M=s):yg(e)}}function yg(e){for(;M!==null;){var t=M;if(t.flags&8772){var r=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:Qe||Dc(5,t);break;case 1:var n=t.stateNode;if(t.flags&4&&!Qe)if(r===null)n.componentDidMount();else{var o=t.elementType===t.type?r.memoizedProps:Ut(t.type,r.memoizedProps);n.componentDidUpdate(o,r.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;s!==null&&tg(t,s,n);break;case 3:var i=t.updateQueue;if(i!==null){if(r=null,t.child!==null)switch(t.child.tag){case 5:r=t.child.stateNode;break;case 1:r=t.child.stateNode}tg(t,i,r)}break;case 5:var l=t.stateNode;if(r===null&&t.flags&4){r=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&r.focus();break;case"img":c.src&&(r.src=c.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var d=t.alternate;if(d!==null){var u=d.memoizedState;if(u!==null){var h=u.dehydrated;h!==null&&Hs(h)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(R(163))}Qe||t.flags&512&&eh(t)}catch(p){Te(t,t.return,p)}}if(t===e){M=null;break}if(r=t.sibling,r!==null){r.return=t.return,M=r;break}M=t.return}}function vg(e){for(;M!==null;){var t=M;if(t===e){M=null;break}var r=t.sibling;if(r!==null){r.return=t.return,M=r;break}M=t.return}}function wg(e){for(;M!==null;){var t=M;try{switch(t.tag){case 0:case 11:case 15:var r=t.return;try{Dc(4,t)}catch(c){Te(t,r,c)}break;case 1:var n=t.stateNode;if(typeof n.componentDidMount=="function"){var o=t.return;try{n.componentDidMount()}catch(c){Te(t,o,c)}}var s=t.return;try{eh(t)}catch(c){Te(t,s,c)}break;case 5:var i=t.return;try{eh(t)}catch(c){Te(t,i,c)}}}catch(c){Te(t,t.return,c)}if(t===e){M=null;break}var l=t.sibling;if(l!==null){l.return=t.return,M=l;break}M=t.return}}var GS=Math.ceil,tc=$r.ReactCurrentDispatcher,Bm=$r.ReactCurrentOwner,Wt=$r.ReactCurrentBatchConfig,oe=0,Me=null,Oe=null,Be=0,bt=0,co=Rn(0),Le=0,ti=null,ma=0,Lc=0,Hm=0,Ls=null,pt=null,Fm=0,Mo=1/0,_r=null,rc=!1,nh=null,bn=null,Fi=!1,mn=null,nc=0,Ws=0,ah=null,Sl=-1,Nl=0;function ot(){return oe&6?Ee():Sl!==-1?Sl:Sl=Ee()}function kn(e){return e.mode&1?oe&2&&Be!==0?Be&-Be:NS.transition!==null?(Nl===0&&(Nl=Wv()),Nl):(e=ce,e!==0||(e=window.event,e=e===void 0?16:Hv(e.type)),e):1}function rr(e,t,r,n){if(50<Ws)throw Ws=0,ah=null,Error(R(185));pi(e,r,n),(!(oe&2)||e!==Me)&&(e===Me&&(!(oe&2)&&(Lc|=r),Le===4&&nn(e,Be)),wt(e,n),r===1&&oe===0&&!(t.mode&1)&&(Mo=Ee()+500,Rc&&Pn()))}function wt(e,t){var r=e.callbackNode;N1(e,t);var n=zl(e,e===Me?Be:0);if(n===0)r!==null&&_f(r),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(r!=null&&_f(r),t===1)e.tag===0?SS(xg.bind(null,e)):cw(xg.bind(null,e)),xS(function(){!(oe&6)&&Pn()}),r=null;else{switch(Mv(n)){case 1:r=ym;break;case 4:r=Dv;break;case 16:r=ql;break;case 536870912:r=Lv;break;default:r=ql}r=ix(r,ex.bind(null,e))}e.callbackPriority=t,e.callbackNode=r}}function ex(e,t){if(Sl=-1,Nl=0,oe&6)throw Error(R(327));var r=e.callbackNode;if(yo()&&e.callbackNode!==r)return null;var n=zl(e,e===Me?Be:0);if(n===0)return null;if(n&30||n&e.expiredLanes||t)t=ac(e,n);else{t=n;var o=oe;oe|=2;var s=rx();(Me!==e||Be!==t)&&(_r=null,Mo=Ee()+500,sa(e,t));do try{FS();break}catch(l){tx(e,l)}while(!0);Im(),tc.current=s,oe=o,Oe!==null?t=0:(Me=null,Be=0,t=Le)}if(t!==0){if(t===2&&(o=Au(e),o!==0&&(n=o,t=oh(e,o))),t===1)throw r=ti,sa(e,0),nn(e,n),wt(e,Ee()),r;if(t===6)nn(e,n);else{if(o=e.current.alternate,!(n&30)&&!BS(o)&&(t=ac(e,n),t===2&&(s=Au(e),s!==0&&(n=s,t=oh(e,s))),t===1))throw r=ti,sa(e,0),nn(e,n),wt(e,Ee()),r;switch(e.finishedWork=o,e.finishedLanes=n,t){case 0:case 1:throw Error(R(345));case 2:Bn(e,pt,_r);break;case 3:if(nn(e,n),(n&130023424)===n&&(t=Fm+500-Ee(),10<t)){if(zl(e,0)!==0)break;if(o=e.suspendedLanes,(o&n)!==n){ot(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=qu(Bn.bind(null,e,pt,_r),t);break}Bn(e,pt,_r);break;case 4:if(nn(e,n),(n&4194240)===n)break;for(t=e.eventTimes,o=-1;0<n;){var i=31-tr(n);s=1<<i,i=t[i],i>o&&(o=i),n&=~s}if(n=o,n=Ee()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*GS(n/1960))-n,10<n){e.timeoutHandle=qu(Bn.bind(null,e,pt,_r),n);break}Bn(e,pt,_r);break;case 5:Bn(e,pt,_r);break;default:throw Error(R(329))}}}return wt(e,Ee()),e.callbackNode===r?ex.bind(null,e):null}function oh(e,t){var r=Ls;return e.current.memoizedState.isDehydrated&&(sa(e,t).flags|=256),e=ac(e,t),e!==2&&(t=pt,pt=r,t!==null&&sh(t)),e}
vendor: 1,828 bytes, line 40
40function sh(e){pt===null?pt=e:pt.push.apply(pt,e)}function BS(e){for(var t=e;;){if(t.flags&16384){var r=t.updateQueue;if(r!==null&&(r=r.stores,r!==null))for(var n=0;n<r.length;n++){var o=r[n],s=o.getSnapshot;o=o.value;try{if(!nr(s(),o))return!1}catch{return!1}}}if(r=t.child,t.subtreeFlags&16384&&r!==null)r.return=t,t=r;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function nn(e,t){for(t&=~Hm,t&=~Lc,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var r=31-tr(t),n=1<<r;e[r]=-1,t&=~n}}function xg(e){if(oe&6)throw Error(R(327));yo();var t=zl(e,0);if(!(t&1))return wt(e,Ee()),null;var r=ac(e,t);if(e.tag!==0&&r===2){var n=Au(e);n!==0&&(t=n,r=oh(e,n))}if(r===1)throw r=ti,sa(e,0),nn(e,t),wt(e,Ee()),r;if(r===6)throw Error(R(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Bn(e,pt,_r),wt(e,Ee()),null}function Um(e,t){var r=oe;oe|=1;try{return e(t)}finally{oe=r,oe===0&&(Mo=Ee()+500,Rc&&Pn())}}function pa(e){mn!==null&&mn.tag===0&&!(oe&6)&&yo();var t=oe;oe|=1;var r=Wt.transition,n=ce;try{if(Wt.transition=null,ce=1,e)return e()}finally{ce=n,Wt.transition=r,oe=t,!(oe&6)&&Pn()}}function Vm(){bt=co.current,ve(co)}function sa(e,t){e.finishedWork=null,e.finishedLanes=0;var r=e.timeoutHandle;if(r!==-1&&(e.timeoutHandle=-1,wS(r)),Oe!==null)for(r=Oe.return;r!==null;){var n=r;switch(Tm(n),n.tag){case 1:n=n.type.childContextTypes,n!=null&&Fl();break;case 3:Lo(),ve(yt),ve(Ze),Lm();break;case 5:Dm(n);break;case 4:Lo();break;case 13:ve(ke);break;case 19:ve(ke);break;case 10:Am(n.type._context);break;case 22:case 23:Vm()}r=r.return}if(Me=e,Oe=e=jn(e.current,null),Be=bt=t,Le=0,ti=null,Hm=Lc=ma=0,pt=Ls=null,Jn!==null){for(t=0;t<Jn.length;t++)if(r=Jn[t],n=r.interleaved,n!==null){r.interleaved=null;
vendor: 9,934 bytes, line 40
40var o=n.next,s=r.pending;if(s!==null){var i=s.next;s.next=o,n.next=i}r.pending=n}Jn=null}return e}function tx(e,t){do{var r=Oe;try{if(Im(),bl.current=ec,Zl){for(var n=Se.memoizedState;n!==null;){var o=n.queue;o!==null&&(o.pending=null),n=n.next}Zl=!1}if(ha=0,We=De=Se=null,Os=!1,Xs=0,Bm.current=null,r===null||r.return===null){Le=1,ti=t,Oe=null;break}e:{var s=e,i=r.return,l=r,c=t;if(t=Be,l.flags|=32768,c!==null&&typeof c=="object"&&typeof c.then=="function"){var d=c,u=l,h=u.tag;if(!(u.mode&1)&&(h===0||h===11||h===15)){var p=u.alternate;p?(u.updateQueue=p.updateQueue,u.memoizedState=p.memoizedState,u.lanes=p.lanes):(u.updateQueue=null,u.memoizedState=null)}var m=ig(i);if(m!==null){m.flags&=-257,lg(m,i,l,s,t),m.mode&1&&sg(s,d,t),t=m,c=d;var v=t.updateQueue;if(v===null){var y=new Set;y.add(c),t.updateQueue=y}else v.add(c);break e}else{if(!(t&1)){sg(s,d,t),Ym();break e}c=Error(R(426))}}else if(be&&l.mode&1){var x=ig(i);if(x!==null){!(x.flags&65536)&&(x.flags|=256),lg(x,i,l,s,t),_m(Wo(c,l));break e}}s=c=Wo(c,l),Le!==4&&(Le=2),Ls===null?Ls=[s]:Ls.push(s),s=i;do{switch(s.tag){case 3:s.flags|=65536,t&=-t,s.lanes|=t;var g=Mw(s,c,t);eg(s,g);break e;case 1:l=c;var f=s.type,w=s.stateNode;if(!(s.flags&128)&&(typeof f.getDerivedStateFromError=="function"||w!==null&&typeof w.componentDidCatch=="function"&&(bn===null||!bn.has(w)))){s.flags|=65536,t&=-t,s.lanes|=t;var k=qw(s,l,t);eg(s,k);break e}}s=s.return}while(s!==null)}ax(r)}catch(j){t=j,Oe===r&&r!==null&&(Oe=r=r.return);continue}break}while(!0)}function rx(){var e=tc.current;return tc.current=ec,e===null?ec:e}function Ym(){(Le===0||Le===3||Le===2)&&(Le=4),Me===null||!(ma&268435455)&&!(Lc&268435455)||nn(Me,Be)}function ac(e,t){var r=oe;oe|=2;var n=rx();(Me!==e||Be!==t)&&(_r=null,sa(e,t));do try{HS();break}catch(o){tx(e,o)}while(!0);if(Im(),oe=r,tc.current=n,Oe!==null)throw Error(R(261));return Me=null,Be=0,Le}function HS(){for(;Oe!==null;)nx(Oe)}function FS(){for(;Oe!==null&&!g1();)nx(Oe)}function nx(e){var t=sx(e.alternate,e,bt);e.memoizedProps=e.pendingProps,t===null?ax(e):Oe=t,Bm.current=null}function ax(e){var t=e;do{var r=t.alternate;if(e=t.return,t.flags&32768){if(r=MS(r,t),r!==null){r.flags&=32767,Oe=r;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{Le=6,Oe=null;return}}else if(r=WS(r,t,bt),r!==null){Oe=r;return}if(t=t.sibling,t!==null){Oe=t;return}Oe=t=e}while(t!==null);Le===0&&(Le=5)}function Bn(e,t,r){var n=ce,o=Wt.transition;try{Wt.transition=null,ce=1,US(e,t,r,n)}finally{Wt.transition=o,ce=n}return null}function US(e,t,r,n){do yo();while(mn!==null);if(oe&6)throw Error(R(327));r=e.finishedWork;var o=e.finishedLanes;if(r===null)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error(R(177));e.callbackNode=null,e.callbackPriority=0;var s=r.lanes|r.childLanes;if(C1(e,s),e===Me&&(Oe=Me=null,Be=0),!(r.subtreeFlags&2064)&&!(r.flags&2064)||Fi||(Fi=!0,ix(ql,function(){return yo(),null})),s=(r.flags&15990)!==0,r.subtreeFlags&15990||s){s=Wt.transition,Wt.transition=null;var i=ce;ce=1;var l=oe;oe|=4,Bm.current=null,zS(e,r),Xw(r,e),hS(Wu),$l=!!Lu,Wu=Lu=null,e.current=r,$S(r),y1(),oe=l,ce=i,Wt.transition=s}else e.current=r;if(Fi&&(Fi=!1,mn=e,nc=o),s=e.pendingLanes,s===0&&(bn=null),x1(r.stateNode),wt(e,Ee()),t!==null)for(n=e.onRecoverableError,r=0;r<t.length;r++)o=t[r],n(o.value,{componentStack:o.stack,digest:o.digest});if(rc)throw rc=!1,e=nh,nh=null,e;return nc&1&&e.tag!==0&&yo(),s=e.pendingLanes,s&1?e===ah?Ws++:(Ws=0,ah=e):Ws=0,Pn(),null}function yo(){if(mn!==null){var e=Mv(nc),t=Wt.transition,r=ce;try{if(Wt.transition=null,ce=16>e?16:e,mn===null)var n=!1;else{if(e=mn,mn=null,nc=0,oe&6)throw Error(R(331));var o=oe;for(oe|=4,M=e.current;M!==null;){var s=M,i=s.child;if(M.flags&16){var l=s.deletions;if(l!==null){for(var c=0;c<l.length;c++){var d=l[c];for(M=d;M!==null;){var u=M;switch(u.tag){case 0:case 11:case 15:Ds(8,u,s)}var h=u.child;if(h!==null)h.return=u,M=h;else for(;M!==null;){u=M;var p=u.sibling,m=u.return;if(Kw(u),u===d){M=null;break}if(p!==null){p.return=m,M=p;break}M=m}}}var v=s.alternate;if(v!==null){var y=v.child;if(y!==null){v.child=null;do{var x=y.sibling;y.sibling=null,y=x}while(y!==null)}}M=s}}if(s.subtreeFlags&2064&&i!==null)i.return=s,M=i;else e:for(;M!==null;){if(s=M,s.flags&2048)switch(s.tag){case 0:case 11:case 15:Ds(9,s,s.return)}var g=s.sibling;if(g!==null){g.return=s.return,M=g;break e}M=s.return}}var f=e.current;for(M=f;M!==null;){i=M;var w=i.child;if(i.subtreeFlags&2064&&w!==null)w.return=i,M=w;else e:for(i=f;M!==null;){if(l=M,l.flags&2048)try{switch(l.tag){case 0:case 11:case 15:Dc(9,l)}}catch(j){Te(l,l.return,j)}if(l===i){M=null;break e}var k=l.sibling;if(k!==null){k.return=l.return,M=k;break e}M=l.return}}if(oe=o,Pn(),gr&&typeof gr.onPostCommitFiberRoot=="function")try{gr.onPostCommitFiberRoot(Tc,e)}catch{}n=!0}return n}finally{ce=r,Wt.transition=t}}return!1}function bg(e,t,r){t=Wo(r,t),t=Mw(e,t,1),e=xn(e,t,1),t=ot(),e!==null&&(pi(e,1,t),wt(e,t))}function Te(e,t,r){if(e.tag===3)bg(e,e,r);else for(;t!==null;){if(t.tag===3){bg(t,e,r);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(bn===null||!bn.has(n))){e=Wo(r,e),e=qw(t,e,1),t=xn(t,e,1),e=ot(),t!==null&&(pi(t,1,e),wt(t,e));break}}t=t.return}}function VS(e,t,r){var n=e.pingCache;n!==null&&n.delete(t),t=ot(),e.pingedLanes|=e.suspendedLanes&r,Me===e&&(Be&r)===r&&(Le===4||Le===3&&(Be&130023424)===Be&&500>Ee()-Fm?sa(e,0):Hm|=r),wt(e,t)}function ox(e,t){t===0&&(e.mode&1?(t=Di,Di<<=1,!(Di&130023424)&&(Di=4194304)):t=1);var r=ot();e=Lr(e,t),e!==null&&(pi(e,t,r),wt(e,r))}function YS(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),ox(e,r)}function KS(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;o!==null&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(R(314))}n!==null&&n.delete(t),ox(e,r)}var sx;sx=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||yt.current)gt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return gt=!1,LS(e,t,r);gt=!!(e.flags&131072)}else gt=!1,be&&t.flags&1048576&&dw(t,Yl,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;jl(e,t),e=t.pendingProps;var o=Po(t,Ze.current);go(t,r),o=Mm(null,t,n,e,o,r);var s=qm();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,vt(n)?(s=!0,Ul(t)):s=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Pm(t),o.updater=Oc,t.stateNode=o,o._reactInternals=t,Uu(t,n,e,r),t=Ku(null,t,n,!0,s,r)):(t.tag=0,be&&s&&Cm(t),rt(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(jl(e,t),e=t.pendingProps,o=n._init,n=o(n._payload),t.type=n,o=t.tag=QS(n),e=Ut(n,e),o){case 0:t=Yu(null,t,n,e,r);break e;case 1:t=ug(null,t,n,e,r);break e;case 11:t=cg(null,t,n,e,r);break e;case 14:t=dg(null,t,n,Ut(n.type,e),r);break e}throw Error(R(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ut(n,o),Yu(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ut(n,o),ug(e,t,n,o,r);case 3:e:{if(Bw(t),e===null)throw Error(R(387));n=t.pendingProps,s=t.memoizedState,o=s.element,gw(e,t),Ql(t,n,null,r);var i=t.memoizedState;if(n=i.element,s.isDehydrated)if(s={element:n,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=s,t.memoizedState=s,t.flags&256){o=Wo(Error(R(423)),t),t=hg(e,t,n,r,o);break e}else if(n!==o){o=Wo(Error(R(424)),t),t=hg(e,t,n,r,o);break e}else for(St=wn(t.stateNode.containerInfo.firstChild),Nt=t,be=!0,Zt=null,r=pw(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Oo(),n===o){t=Wr(e,t,r);break e}rt(e,t,n,r)}t=t.child}return t;case 5:return yw(t),e===null&&Bu(t),n=t.type,o=t.pendingProps,s=e!==null?e.memoizedProps:null,i=o.children,Mu(n,o)?i=null:s!==null&&Mu(n,s)&&(t.flags|=32),Gw(e,t),rt(e,t,i,r),t.child;case 6:return e===null&&Bu(t),null;case 13:return Hw(e,t,r);case 4:return Om(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Do(t,null,n,r):rt(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ut(n,o),cg(e,t,n,o,r);case 7:return rt(e,t,t.pendingProps,r),t.child;case 8:return rt(e,t,t.pendingProps.children,r),t.child;case 12:return rt(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,s=t.memoizedProps,i=o.value,pe(Kl,n._currentValue),n._currentValue=i,s!==null)if(nr(s.value,i)){if(s.children===o.children&&!yt.current){t=Wr(e,t,r);break e}}else for(s=t.child,s!==null&&(s.return=t);s!==null;){var l=s.dependencies;if(l!==null){i=s.child;for(var c=l.firstContext;c!==null;){if(c.context===n){if(s.tag===1){c=Pr(-1,r&-r),c.tag=2;var d=s.updateQueue;if(d!==null){d=d.shared;var u=d.pending;u===null?c.next=c:(c.next=u.next,u.next=c),d.pending=c}}s.lanes|=r,c=s.alternate,c!==null&&(c.lanes|=r),Hu(s.return,r,t),l.lanes|=r;break}c=c.next}}else if(s.tag===10)i=s.type===t.type?null:s.child;else if(s.tag===18){if(i=s.return,i===null)throw Error(R(341));i.lanes|=r,l=i.alternate,l!==null&&(l.lanes|=r),Hu(i,r,t),i=s.sibling}else i=s.child;if(i!==null)i.return=s;else for(i=s;i!==null;){if(i===t){i=null;break}if(s=i.sibling,s!==null){s.return=i.return,i=s;break}i=i.return}s=i}rt(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,go(t,r),o=Mt(o),n=n(o),t.flags|=1,rt(e,t,n,r),t.child;case 14:return n=t.type,o=Ut(n,t.pendingProps),o=Ut(n.type,o),dg(e,t,n,o,r);case 15:return zw(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ut(n,o),jl(e,t),t.tag=1,vt(n)?(e=!0,Ul(t)):e=!1,go(t,r),Ww(t,n,o),Uu(t,n,o,r),Ku(null,t,n,!0,e,r);case 19:return Fw(e,t,r);case 22:return $w(e,t,r)}throw Error(R(156,t.tag))};function ix(e,t){return Ov(e,t)}function JS(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.t
vendor: 5,289 bytes, line 40
40ype=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lt(e,t,r,n){return new JS(e,t,r,n)}function Km(e){return e=e.prototype,!(!e||!e.isReactComponent)}function QS(e){if(typeof e=="function")return Km(e)?1:0;if(e!=null){if(e=e.$$typeof,e===pm)return 11;if(e===fm)return 14}return 2}function jn(e,t){var r=e.alternate;return r===null?(r=Lt(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Cl(e,t,r,n,o,s){var i=2;if(n=e,typeof e=="function")Km(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Za:return ia(r.children,o,s,t);case mm:i=8,o|=8;break;case gu:return e=Lt(12,r,t,o|2),e.elementType=gu,e.lanes=s,e;case yu:return e=Lt(13,r,t,o),e.elementType=yu,e.lanes=s,e;case vu:return e=Lt(19,r,t,o),e.elementType=vu,e.lanes=s,e;case yv:return Wc(r,o,s,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case fv:i=10;break e;case gv:i=9;break e;case pm:i=11;break e;case fm:i=14;break e;case en:i=16,n=null;break e}throw Error(R(130,e==null?e:typeof e,""))}return t=Lt(i,r,t,o),t.elementType=e,t.type=n,t.lanes=s,t}function ia(e,t,r,n){return e=Lt(7,e,n,t),e.lanes=r,e}function Wc(e,t,r,n){return e=Lt(22,e,n,t),e.elementType=yv,e.lanes=r,e.stateNode={isHidden:!1},e}function Bd(e,t,r){return e=Lt(6,e,null,t),e.lanes=r,e}function Hd(e,t,r){return t=Lt(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function XS(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Sd(0),this.expirationTimes=Sd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Sd(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Jm(e,t,r,n,o,s,i,l,c){return e=new XS(e,t,r,l,c),t===1?(t=1,s===!0&&(t|=8)):t=0,s=Lt(3,null,null,t),e.current=s,s.stateNode=e,s.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Pm(s),e}function ZS(e,t,r){var n=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Xa,key:n==null?null:""+n,children:e,containerInfo:t,implementation:r}}function lx(e){if(!e)return Tn;e=e._reactInternals;e:{if(xa(e)!==e||e.tag!==1)throw Error(R(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(vt(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(R(171))}if(e.tag===1){var r=e.type;if(vt(r))return lw(e,r,t)}return t}function cx(e,t,r,n,o,s,i,l,c){return e=Jm(r,n,!0,e,o,s,i,l,c),e.context=lx(null),r=e.current,n=ot(),o=kn(r),s=Pr(n,o),s.callback=t??null,xn(r,s,o),e.current.lanes=o,pi(e,o,n),wt(e,n),e}function Mc(e,t,r,n){var o=t.current,s=ot(),i=kn(o);return r=lx(r),t.context===null?t.context=r:t.pendingContext=r,t=Pr(s,i),t.payload={element:e},n=n===void 0?null:n,n!==null&&(t.callback=n),e=xn(o,t,i),e!==null&&(rr(e,o,i,s),xl(e,o,i)),i}function oc(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function kg(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var r=e.retryLane;e.retryLane=r!==0&&r<t?r:t}}function Qm(e,t){kg(e,t),(e=e.alternate)&&kg(e,t)}function eN(){return null}var dx=typeof reportError=="function"?reportError:function(e){console.error(e)};function Xm(e){this._internalRoot=e}qc.prototype.render=Xm.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(R(409));Mc(e,t,null,null)};qc.prototype.unmount=Xm.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;pa(function(){Mc(null,e,null,null)}),t[Dr]=null}};function qc(e){this._internalRoot=e}qc.prototype.unstable_scheduleHydration=function(e){if(e){var t=$v();e={blockedOn:null,target:e,priority:t};for(var r=0;r<rn.length&&t!==0&&t<rn[r].priority;r++);rn.splice(r,0,e),r===0&&Bv(e)}};function Zm(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function zc(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function jg(){}function tN(e,t,r,n,o){if(o){if(typeof n=="function"){var s=n;n=function(){var d=oc(i);s.call(d)}}var i=cx(t,n,e,0,null,!1,!1,"",jg);return e._reactRootContainer=i,e[Dr]=i.current,Vs(e.nodeType===8?e.parentNode:e),pa(),i}for(;
vendor: 4,857 bytes, line 40
40o=e.lastChild;)e.removeChild(o);if(typeof n=="function"){var l=n;n=function(){var d=oc(c);l.call(d)}}var c=Jm(e,0,!1,null,null,!1,!1,"",jg);return e._reactRootContainer=c,e[Dr]=c.current,Vs(e.nodeType===8?e.parentNode:e),pa(function(){Mc(t,c,r,n)}),c}function $c(e,t,r,n,o){var s=r._reactRootContainer;if(s){var i=s;if(typeof o=="function"){var l=o;o=function(){var c=oc(i);l.call(c)}}Mc(t,i,e,o)}else i=tN(r,t,e,o,n);return oc(i)}qv=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var r=Ss(t.pendingLanes);r!==0&&(vm(t,r|1),wt(t,Ee()),!(oe&6)&&(Mo=Ee()+500,Pn()))}break;case 13:pa(function(){var n=Lr(e,1);if(n!==null){var o=ot();rr(n,e,1,o)}}),Qm(e,1)}};wm=function(e){if(e.tag===13){var t=Lr(e,134217728);if(t!==null){var r=ot();rr(t,e,134217728,r)}Qm(e,134217728)}};zv=function(e){if(e.tag===13){var t=kn(e),r=Lr(e,t);if(r!==null){var n=ot();rr(r,e,t,n)}Qm(e,t)}};$v=function(){return ce};Gv=function(e,t){var r=ce;try{return ce=e,t()}finally{ce=r}};_u=function(e,t,r){switch(t){case"input":if(bu(e,r),t=r.name,r.type==="radio"&&t!=null){for(r=e;r.parentNode;)r=r.parentNode;for(r=r.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<r.length;t++){var n=r[t];if(n!==e&&n.form===e.form){var o=Ac(n);if(!o)throw Error(R(90));wv(n),bu(n,o)}}}break;case"textarea":bv(e,r);break;case"select":t=r.value,t!=null&&ho(e,!!r.multiple,t,!1)}};_v=Um;Ev=pa;var rN={usingClientEntryPoint:!1,Events:[gi,no,Ac,Cv,Tv,Um]},fs={findFiberByHostInstance:Kn,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},nN={bundleType:fs.bundleType,version:fs.version,rendererPackageName:fs.rendererPackageName,rendererConfig:fs.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:$r.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Rv(e),e===null?null:e.stateNode},findFiberByHostInstance:fs.findFiberByHostInstance||eN,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Ui=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Ui.isDisabled&&Ui.supportsFiber)try{Tc=Ui.inject(nN),gr=Ui}catch{}}Et.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=rN;Et.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!Zm(t))throw Error(R(200));return ZS(e,t,null,r)};Et.createRoot=function(e,t){if(!Zm(e))throw Error(R(299));var r=!1,n="",o=dx;return t!=null&&(t.unstable_strictMode===!0&&(r=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onRecoverableError!==void 0&&(o=t.onRecoverableError)),t=Jm(e,1,!1,null,null,r,!1,n,o),e[Dr]=t.current,Vs(e.nodeType===8?e.parentNode:e),new Xm(t)};Et.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(R(188)):(e=Object.keys(e).join(","),Error(R(268,e)));return e=Rv(t),e=e===null?null:e.stateNode,e};Et.flushSync=function(e){return pa(e)};Et.hydrate=function(e,t,r){if(!zc(t))throw Error(R(200));return $c(null,e,t,!0,r)};Et.hydrateRoot=function(e,t,r){if(!Zm(e))throw Error(R(405));var n=r!=null&&r.hydratedSources||null,o=!1,s="",i=dx;if(r!=null&&(r.unstable_strictMode===!0&&(o=!0),r.identifierPrefix!==void 0&&(s=r.identifierPrefix),r.onRecoverableError!==void 0&&(i=r.onRecoverableError)),t=cx(t,null,e,1,r??null,o,!1,s,i),e[Dr]=t.current,Vs(e),n)for(e=0;e<n.length;e++)r=n[e],o=r._getVersion,o=o(r._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[r,o]:t.mutableSourceEagerHydrationData.push(r,o);return new qc(t)};Et.render=function(e,t,r){if(!zc(t))throw Error(R(200));return $c(null,e,t,!1,r)};Et.unmountComponentAtNode=function(e){if(!zc(e))throw Error(R(40));return e._reactRootContainer?(pa(function(){$c(null,null,e,!1,function(){e._reactRootContainer=null,e[Dr]=null})}),!0):!1};Et.unstable_batchedUpdates=Um;Et.unstable_renderSubtreeIntoContainer=function(e,t,r,n){if(!zc(r))throw Error(R(200));if(e==null||e._reactInternals===void 0)throw Error(R(38));return $c(e,t,r,!1,n)};Et.version="18.3.1-next-f1338f8080-20240426";function ux(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ux)}catch(e){console.error(e)}}ux(),uv.exports=Et;var vi=uv.exports;const hx=Fo(vi);var mx,Sg=vi;mx=Sg.createRoot,Sg.hydrateRoot;var aN=typeof Element<"u",oN=typeof Map=="function",sN=typeof Set=="function",iN=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function Tl(e,t){if(e===t)return!0;
40if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var r,n,o;if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!Tl(e[n],t[n]))return!1;return!0}var s;if(oN&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(s=e.entries();!(n=s.next()).done;)if(!t.has(n.value[0]))return!1;for(s=e.entries();!(n=s.next()).done;)if(!Tl(n.value[1],t.get(n.value[0])))return!1;return!0}if(sN&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(s=e.entries();!(n=s.next()).done;)if(!t.has(n.value[0]))return!1;return!0}if(iN&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(e[n]!==t[n])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;if(aN&&e instanceof Element)return!1;for(n=r;n--!==0;)if(!((o[n]==="_owner"||o[n]==="__v"||o[n]==="__o")&&e.$$typeof)&&!Tl(e[o[n]],t[o[n]]))return!1;return!0}return e!==e&&t!==t}var lN=function(t,r){try{return Tl(t,r)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}};const cN=Fo(lN);var dN=function(e,t,r,n,o,s,i,l){if(!e){var c;if(t===void 0)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var d=[r,n,o,s,i,l],u=0;c=new Error(t.replace(/%s/g,function(){return d[u++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}},uN=dN;const Ng=Fo(uN);var hN=function(t,r,n,o){var s=n?n.call(o,t,r):void 0;if(s!==void 0)return!!s;if(t===r)return!0;if(typeof t!="object"||!t||typeof r!="object"||!r)return!1;var i=Object.keys(t),l=Object.keys(r);if(i.length!==l.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(r),d=0;d<i.length;d++){var u=i[d];if(!c(u))return!1;var h=t[u],p=r[u];if(s=n?n.call(o,h,p,u):void 0,s===!1||s===void 0&&h!==p)return!1}return!0};const mN=Fo(hN);var px=(e=>(e.BASE="base",e.BODY="body",e.HEAD="head",e.HTML="html",e.LINK="link",e.META="meta",e.NOSCRIPT="noscript",e.SCRIPT="script",e.STYLE="style",e.TITLE="title",e.FRAGMENT="Symbol(react.fragment)",e))(px||{}),Fd={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},Cg=Object.values(px),ep={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},pN=Object.entries(ep).reduce((e,[t,r])=>(e[r]=t,e),{}),er="data-rh",vo={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},wo=(e,t)=>{for(let r=e.length-1;r>=0;r-=1){const n=e[r];if(Object.prototype.hasOwnProperty.call(n,t))return n[t]}return null},fN=e=>{let t=wo(e,"title");const r=wo(e,vo.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),r&&t)return r.replace(/%s/g,()=>t);const n=wo(e,vo.DEFAULT_TITLE);return t||n||void 0},gN=e=>wo(e,vo.ON_CHANGE_CLIENT_STATE)||(()=>{}),Ud=(e,t)=>t.filter(r=>typeof r[e]<"u").map(r=>r[e]).reduce((r,n)=>({...r,...n}),{}),yN=(e,t)=>t.filter(r=>typeof r.base<"u").map(r=>r.base).reverse().reduce((r,n)=>{if(!r.length){const o=Object.keys(n);for(let s=0;s<o.length;s+=1){const l=o[s].toLowerCase();if(e.indexOf(l)!==-1&&n[l])return r.concat(n)}}return r},[]),vN=e=>console&&typeof console.warn=="function"&&console.warn(e),gs=(e,t,r)=>{const n={};return r.filter(o=>Array.isArray(o[e])?!0:(typeof o[e]<"u"&&vN(`Helmet: ${e} should be of type "Array". Instead found type "${typeof o[e]}"`),!1)).map(o=>o[e]).reverse().reduce((o,s)=>{const i={};s.filter(c=>{let d;const u=Object.keys(c);for(let p=0;p<u.length;p+=1){const m=u[p],v=m.toLowerCase();t.indexOf(v)!==-1&&!(d==="rel"&&c[d].toLowerCase()==="canonical")&&!(v==="rel"&&c[v].toLowerCase()==="stylesheet")&&(d=v),t.indexOf(m)!==-1&&(m==="innerHTML"||m==="cssText"||m==="itemprop")&&(d=m)}if(!d||!c[d])return!1;const h=c[d].toLowerCase();return n[d]||(n[d]={}
40),i[d]||(i[d]={}),n[d][h]?!1:(i[d][h]=!0,!0)}).reverse().forEach(c=>o.push(c));const l=Object.keys(i);for(let c=0;c<l.length;c+=1){const d=l[c],u={...n[d],...i[d]};n[d]=u}return o},[]).reverse()},wN=(e,t)=>{if(Array.isArray(e)&&e.length){for(let r=0;r<e.length;r+=1)if(e[r][t])return!0}return!1},xN=e=>({baseTag:yN(["href"],e),bodyAttributes:Ud("bodyAttributes",e),defer:wo(e,vo.DEFER),encode:wo(e,vo.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Ud("htmlAttributes",e),linkTags:gs("link",["rel","href"],e),metaTags:gs("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:gs("noscript",["innerHTML"],e),onChangeClientState:gN(e),scriptTags:gs("script",["src","innerHTML"],e),styleTags:gs("style",["cssText"],e),title:fN(e),titleAttributes:Ud("titleAttributes",e),prioritizeSeoTags:wN(e,vo.PRIORITIZE_SEO_TAGS)}),fx=e=>Array.isArray(e)?e.join(""):e,bN=(e,t)=>{const r=Object.keys(e);for(let n=0;n<r.length;n+=1)if(t[r[n]]&&t[r[n]].includes(e[r[n]]))return!0;return!1},Vd=(e,t)=>Array.isArray(e)?e.reduce((r,n)=>(bN(n,t)?r.priority.push(n):r.default.push(n),r),{priority:[],default:[]}):{default:e,priority:[]},Tg=(e,t)=>({...e,[t]:void 0}),kN=["noscript","script","style"],ih=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"),gx=e=>Object.keys(e).reduce((t,r)=>{const n=typeof e[r]<"u"?`${r}="${e[r]}"`:`${r}`;return t?`${t} ${n}`:n},""),jN=(e,t,r,n)=>{const o=gx(r),s=fx(t);return o?`<${e} ${er}="true" ${o}>${ih(s,n)}</${e}>`:`<${e} ${er}="true">${ih(s,n)}</${e}>`},SN=(e,t,r=!0)=>t.reduce((n,o)=>{const s=o,i=Object.keys(s).filter(d=>!(d==="innerHTML"||d==="cssText")).reduce((d,u)=>{const h=typeof s[u]>"u"?u:`${u}="${ih(s[u],r)}"`;return d?`${d} ${h}`:h},""),l=s.innerHTML||s.cssText||"",c=kN.indexOf(e)===-1;return`${n}<${e} ${er}="true" ${i}${c?"/>":`>${l}</${e}>`}`},""),yx=(e,t={})=>Object.keys(e).reduce((r,n)=>{const o=ep[n];return r[o||n]=e[n],r},t),NN=(e,t,r)=>{const n={key:t,[er]:!0},o=yx(r,n);return[E.createElement("title",o,t)]},_l=(e,t)=>t.map((r,n)=>{const o={key:n,[er]:!0};return Object.keys(r).forEach(s=>{const l=ep[s]||s;if(l==="innerHTML"||l==="cssText"){const c=r.innerHTML||r.cssText;o.dangerouslySetInnerHTML={__html:c}}else o[l]=r[s]}),E.createElement(e,o)}),Rt=(e,t,r=!0)=>{switch(e){case"title":return{toComponent:()=>NN(e,t.title,t.titleAttributes),toString:()=>jN(e,t.title,t.titleAttributes,r)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>yx(t),toString:()=>gx(t)};default:return{toComponent:()=>_l(e,t),toString:()=>SN(e,t,r)}}},CN=({metaTags:e,linkTags:t,scriptTags:r,encode:n})=>{const o=Vd(e,Fd.meta),s=Vd(t,Fd.link),i=Vd(r,Fd.script);return{priorityMethods:{toComponent:()=>[..._l("meta",o.priority),..._l("link",s.priority),..._l("script",i.priority)],toString:()=>`${Rt("meta",o.priority,n)} ${Rt("link",s.priority,n)} ${Rt("script",i.priority,n)}`},metaTags:o.default,linkTags:s.default,scriptTags:i.default}},TN=e=>{const{baseTag:t,bodyAttributes:r,encode:n=!0,htmlAttributes:o,noscriptTags:s,styleTags:i,title:l="",titleAttributes:c,prioritizeSeoTags:d}=e;let{linkTags:u,metaTags:h,scriptTags:p}=e,m={toComponent:()=>{},toString:()=>""};return d&&({priorityMethods:m,linkTags:u,metaTags:h,scriptTags:p}=CN(e)),{priority:m,base:Rt("base",t,n),bodyAttributes:Rt("bodyAttributes",r,n),htmlAttributes:Rt("htmlAttributes",o,n),link:Rt("link",u,n),meta:Rt("meta",h,n),noscript:Rt("noscript",s,n),script:Rt("script",p,n),style:Rt("style",i,n),title:Rt("title",{title:l,titleAttributes:c},n)}},lh=TN,Vi=[],vx=!!(typeof window<"u"&&window.document&&window.document.createElement),ch=class{constructor(e,t){kr(this,"instances",[]);kr(this,"canUseDOM",vx);kr(this,"context");kr(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?Vi:this.instances,add:e=>{(this.canUseDOM?Vi:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?Vi:this.instances).indexOf(e);(this.canUseDOM?Vi:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=lh({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},_N={},wx=E.createContext(_N),Zn,xx=(Zn=class extends b.Component{constructor(r){super(r);kr(this,"helmetData");this.helmetData=new ch(this.props.context||{},Zn.canUseDOM)}render(){return E.createElement(wx.Provider,{value:this.helmetData.value},this.props.children)}},kr(Zn,"canUseDOM",vx),Zn),Ia=(e,t)=>{const r=document.head||document.querySelector("head"),n=r.querySelectorAll(`${e}[${er}]`),o=[].slice.call(n),s=[];let i;return t&&t.length&&t.forEach(l=>{const c=document.createElement(e);for(const d in l)if(Object.prototype.hasOwnProperty.call(l,d))if(d==="innerHTML")c.innerHTML=l.innerHTML;else if(d==="cssText")c.styleSheet?c.styleSheet.cssText=l.cssText:c.appendChild(document.createTextNode(l.cssText));else{const u=d,h=typeof l[u]>"u"?"":l[u];c.setAttribute(d,h)}c.setAttribute(er,"true"),o.some((d,u)=>(i=u,c.isEqualNode(d)))?o.splice(i,1):s.push(c)}),o.forEach(l=>{var c;return(c=l.parentNode)==null?void 0:c.removeChild(l)}
40),s.forEach(l=>r.appendChild(l)),{oldTags:o,newTags:s}},dh=(e,t)=>{const r=document.getElementsByTagName(e)[0];if(!r)return;const n=r.getAttribute(er),o=n?n.split(","):[],s=[...o],i=Object.keys(t);for(const l of i){const c=t[l]||"";r.getAttribute(l)!==c&&r.setAttribute(l,c),o.indexOf(l)===-1&&o.push(l);const d=s.indexOf(l);d!==-1&&s.splice(d,1)}for(let l=s.length-1;l>=0;l-=1)r.removeAttribute(s[l]);o.length===s.length?r.removeAttribute(er):r.getAttribute(er)!==i.join(",")&&r.setAttribute(er,i.join(","))},EN=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=fx(e)),dh("title",t)},_g=(e,t)=>{const{baseTag:r,bodyAttributes:n,htmlAttributes:o,linkTags:s,metaTags:i,noscriptTags:l,onChangeClientState:c,scriptTags:d,styleTags:u,title:h,titleAttributes:p}=e;dh("body",n),dh("html",o),EN(h,p);const m={baseTag:Ia("base",r),linkTags:Ia("link",s),metaTags:Ia("meta",i),noscriptTags:Ia("noscript",l),scriptTags:Ia("script",d),styleTags:Ia("style",u)},v={},y={};Object.keys(m).forEach(x=>{const{newTags:g,oldTags:f}=m[x];g.length&&(v[x]=g),f.length&&(y[x]=m[x].oldTags)}),t&&t(),c(e,v,y)},ys=null,IN=e=>{ys&&cancelAnimationFrame(ys),e.defer?ys=requestAnimationFrame(()=>{_g(e,()=>{ys=null})}):(_g(e),ys=null)},AN=IN,Eg=class extends b.Component{constructor(){super(...arguments);kr(this,"rendered",!1)}shouldComponentUpdate(t){return!mN(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:r}=this.props.context;let n=null;const o=xN(t.get().map(s=>{const i={...s.props};return delete i.context,i}));xx.canUseDOM?AN(o):lh&&(n=lh(o)),r(n)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},pu,ie=(pu=class extends b.Component{shouldComponentUpdate(e){return!cN(Tg(this.props,"helmetData"),Tg(e,"helmetData"))}mapNestedChildrenToProps(e,t){if(!t)return null;switch(e.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${e.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(e,t,r,n){return{...t,[e.type]:[...t[e.type]||[],{...r,...this.mapNestedChildrenToProps(e,n)}]}}mapObjectTypeChildren(e,t,r,n){switch(e.type){case"title":return{...t,[e.type]:n,titleAttributes:{...r}};case"body":return{...t,bodyAttributes:{...r}};case"html":return{...t,htmlAttributes:{...r}};default:return{...t,[e.type]:{...r}}}}mapArrayTypeChildrenToProps(e,t){let r={...t};return Object.keys(e).forEach(n=>{r={...r,[n]:e[n]}}),r}warnOnInvalidChildren(e,t){return Ng(Cg.some(r=>e.type===r),typeof e.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${Cg.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),Ng(!t||typeof t=="string"||Array.isArray(t)&&!t.some(r=>typeof r!="string"),`Helmet expects a string as a child of <${e.type}>. Did you forget to wrap your children in braces? ( <${e.type}>{\`\`}</${e.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(e,t){let r={};return E.Children.forEach(e,n=>{if(!n||!n.props)return;const{children:o,...s}=n.props,i=Object.keys(s).reduce((c,d)=>(c[pN[d]||d]=s[d],c),{});let{type:l}=n;
40switch(typeof l=="symbol"?l=l.toString():this.warnOnInvalidChildren(n,o),l){case"Symbol(react.fragment)":t=this.mapChildrenToProps(o,t);break;case"link":case"meta":case"noscript":case"script":case"style":r=this.flattenArrayTypeChildren(n,r,i,o);break;default:t=this.mapObjectTypeChildren(n,t,i,o);break}}),this.mapArrayTypeChildrenToProps(r,t)}render(){const{children:e,...t}=this.props;let r={...t},{helmetData:n}=t;if(e&&(r=this.mapChildrenToProps(e,r)),n&&!(n instanceof ch)){const o=n;n=new ch(o.context,!0),delete r.helmetData}return n?E.createElement(Eg,{...r,context:n.value}):E.createElement(wx.Consumer,null,o=>E.createElement(Eg,{...r,context:o}))}},kr(pu,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),pu);const RN=1,PN=1e6;let Yd=0;function ON(){return Yd=(Yd+1)%Number.MAX_SAFE_INTEGER,Yd.toString()}const Kd=new Map,Ig=e=>{if(Kd.has(e))return;const t=setTimeout(()=>{Kd.delete(e),Ms({type:"REMOVE_TOAST",toastId:e})},PN);Kd.set(e,t)},DN=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,RN)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(r=>r.id===t.toast.id?{...r,...t.toast}:r)};case"DISMISS_TOAST":{const{toastId:r}=t;return r?Ig(r):e.toasts.forEach(n=>{Ig(n.id)}),{...e,toasts:e.toasts.map(n=>
vendor: 13,576 bytes, line 40
40n.id===r||r===void 0?{...n,open:!1}:n)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(r=>r.id!==t.toastId)}}},El=[];let Il={toasts:[]};function Ms(e){Il=DN(Il,e),El.forEach(t=>{t(Il)})}function LN({...e}){const t=ON(),r=o=>Ms({type:"UPDATE_TOAST",toast:{...o,id:t}}),n=()=>Ms({type:"DISMISS_TOAST",toastId:t});return Ms({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:o=>{o||n()}}}),{id:t,dismiss:n,update:r}}function Gc(){const[e,t]=b.useState(Il);return b.useEffect(()=>(El.push(t),()=>{const r=El.indexOf(t);r>-1&&El.splice(r,1)}),[e]),{...e,toast:LN,dismiss:r=>Ms({type:"DISMISS_TOAST",toastId:r})}}function je(e,t,{checkForDefaultPrevented:r=!0}={}){return function(o){if(e==null||e(o),r===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Ag(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function bx(...e){return t=>{let r=!1;const n=e.map(o=>{const s=Ag(o,t);return!r&&typeof s=="function"&&(r=!0),s});if(r)return()=>{for(let o=0;o<n.length;o++){const s=n[o];typeof s=="function"?s():Ag(e[o],null)}}}}function st(...e){return b.useCallback(bx(...e),e)}function ba(e,t=[]){let r=[];function n(s,i){const l=b.createContext(i),c=r.length;r=[...r,i];const d=h=>{var g;const{scope:p,children:m,...v}=h,y=((g=p==null?void 0:p[e])==null?void 0:g[c])||l,x=b.useMemo(()=>v,Object.values(v));return a.jsx(y.Provider,{value:x,children:m})};d.displayName=s+"Provider";function u(h,p){var y;const m=((y=p==null?void 0:p[e])==null?void 0:y[c])||l,v=b.useContext(m);if(v)return v;if(i!==void 0)return i;throw new Error(`\`${h}\` must be used within \`${s}\``)}return[d,u]}const o=()=>{const s=r.map(i=>b.createContext(i));return function(l){const c=(l==null?void 0:l[e])||s;return b.useMemo(()=>({[`__scope${e}`]:{...l,[e]:c}}),[l,c])}};return o.scopeName=e,[n,WN(o,...t)]}function WN(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const i=n.reduce((l,{useScope:c,scopeName:d})=>{const h=c(s)[`__scope${d}`];return{...l,...h}},{});return b.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return r.scopeName=t.scopeName,r}function sc(e){const t=qN(e),r=b.forwardRef((n,o)=>{const{children:s,...i}=n,l=b.Children.toArray(s),c=l.find($N);if(c){const d=c.props.children,u=l.map(h=>h===c?b.Children.count(d)>1?b.Children.only(null):b.isValidElement(d)?d.props.children:null:h);return a.jsx(t,{...i,ref:o,children:b.isValidElement(d)?b.cloneElement(d,void 0,u):null})}return a.jsx(t,{...i,ref:o,children:s})});return r.displayName=`${e}.Slot`,r}var MN=sc("Slot");function qN(e){const t=b.forwardRef((r,n)=>{const{children:o,...s}=r;if(b.isValidElement(o)){const i=BN(o),l=GN(s,o.props);return o.type!==b.Fragment&&(l.ref=n?bx(n,i):i),b.cloneElement(o,l)}return b.Children.count(o)>1?b.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var kx=Symbol("radix.slottable");function zN(e){const t=({children:r})=>a.jsx(a.Fragment,{children:r});return t.displayName=`${e}.Slottable`,t.__radixId=kx,t}function $N(e){return b.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===kx}function GN(e,t){const r={...t};for(const n in t){const o=e[n],s=t[n];/^on[A-Z]/.test(n)?o&&s?r[n]=(...l)=>{const c=s(...l);return o(...l),c}:o&&(r[n]=o):n==="style"?r[n]={...o,...s}:n==="className"&&(r[n]=[o,s].filter(Boolean).join(" "))}return{...e,...r}}function BN(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function jx(e){const t=e+"CollectionProvider",[r,n]=ba(t),[o,s]=r(t,{collectionRef:{current:null},itemMap:new Map}),i=y=>{const{scope:x,children:g}=y,f=E.useRef(null),w=E.useRef(new Map).current;return a.jsx(o,{scope:x,itemMap:w,collectionRef:f,children:g})};i.displayName=t;const l=e+"CollectionSlot",c=sc(l),d=E.forwardRef((y,x)=>{const{scope:g,children:f}=y,w=s(l,g),k=st(x,w.collectionRef);return a.jsx(c,{ref:k,children:f})});d.displayName=l;const u=e+"CollectionItemSlot",h="data-radix-collection-item",p=sc(u),m=E.forwardRef((y,x)=>{const{scope:g,children:f,...w}=y,k=E.useRef(null),j=st(x,k),S=s(u,g);return E.useEffect(()=>(S.itemMap.set(k,{ref:k,...w}),()=>void S.itemMap.delete(k))),a.jsx(p,{[h]:"",ref:j,children:f})});m.displayName=u;function v(y){const x=s(e+"CollectionConsumer",y);return E.useCallback(()=>{const f=x.collectionRef.current;if(!f)return[];const w=Array.from(f.querySelectorAll(`[${h}]`));return Array.from(x.itemMap.values()).sort((S,N)=>w.indexOf(S.ref.current)-w.indexOf(N.ref.current))},[x.collectionRef,x.itemMap])}return[{Provider:i,Slot:d,ItemSlot:m},v,n]}var HN=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_e=HN.reduce((e,t)=>{const r=sc(`Primitive.${t}`),n=b.forwardRef((o,s)=>{const{asChild:i,...l}=o,c=i?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),a.jsx(c,{...l,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function Sx(e,t){e&&vi.flushSync(()=>e.dispatchEvent(t))}function _n(e){const t=b.useRef(e);return b.useEffect(()=>{t.current=e}),b.useMemo(()=>(...r)=>{var n;return(n=t.current)==null?void 0:n.call(t,...r)},[])}function FN(e,t=globalThis==null?void 0:globalThis.document){const r=_n(e);b.useEffect(()=>{const n=o=>{o.key==="Escape"&&r(o)};return t.addEventListener("keydown",n,{capture:!0}),()=>t.removeEventListener("keydown",n,{capture:!0})},[r,t])}var UN="DismissableLayer",uh="dismissableLayer.update",VN="dismissableLayer.pointerDownOutside",YN="dismissableLayer.focusOutside",Rg,Nx=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),tp=b.forwardRef((e,t)=>{const{disableOutsidePointerEvents:r=!1,onEscapeKeyDown:n,onPointerDownOutside:o,onFocusOutside:s,onInteractOutside:i,onDismiss:l,...c}=e,d=b.useContext(Nx),[u,h]=b.useState(null),p=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,m]=b.useState({}),v=st(t,N=>h(N)),y=Array.from(d.layers),[x]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),g=y.indexOf(x),f=u?y.indexOf(u):-1,w=d.layersWithOutsidePointerEventsDisabled.size>0,k=f>=g,j=JN(N=>{const _=N.target,P=[...d.branches].some(O=>O.contains(_));!k||P||(o==null||o(N),i==null||i(N),N.defaultPrevented||l==null||l())},p),S=QN(N=>{const _=N.target;[...d.branches].some(O=>O.contains(_))||(s==null||s(N),i==null||i(N),N.defaultPrevented||l==null||l())},p);return FN(N=>{f===d.layers.size-1&&(n==null||n(N),!N.defaultPrevented&&l&&(N.preventDefault(),l()))},p),b.useEffect(()=>{if(u)return r&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Rg=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(u)),d.layers.add(u),Pg(),()=>{r&&d.layersWithOutsidePointerEventsDisabled.size===1&&(p.body.style.pointerEvents=Rg)}},[u,p,r,d]),b.useEffect(()=>()=>{u&&(d.layers.delete(u),d.layersWithOutsidePointerEventsDisabled.delete(u),Pg())},[u,d]),b.useEffect(()=>{const N=()=>m({});return document.addEventListener(uh,N),()=>document.removeEventListener(uh,N)},[]),a.jsx(_e.div,{...c,ref:v,style:{pointerEvents:w?k?"auto":"none":void 0,...e.style},onFocusCapture:je(e.onFocusCapture,S.onFocusCapture),onBlurCapture:je(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:je(e.onPointerDownCapture,j.onPointerDownCapture)})});tp.displayName=UN;var KN="DismissableLayerBranch",Cx=b.forwardRef((e,t)=>{const r=b.useContext(Nx),n=b.useRef(null),o=st(t,n);return b.useEffect(()=>{const s=n.current;if(s)return r.branches.add(s),()=>{r.branches.delete(s)}},[r.branches]),a.jsx(_e.div,{...e,ref:o})});Cx.displayName=KN;function JN(e,t=globalThis==null?void 0:globalThis.document){const r=_n(e),n=b.useRef(!1),o=b.useRef(()=>{});return b.useEffect(()=>{const s=l=>{if(l.target&&!n.current){let c=function(){Tx(VN,r,d,{discrete:!0})};const d={originalEvent:l};l.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=c,t.addEventListener("click",o.current,{once:!0})):c()}else t.removeEventListener("click",o.current);n.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",s),t.removeEventListener("click",o.current)}},[t,r]),{onPointerDownCapture:()=>n.current=!0}}function QN(e,t=globalThis==null?void 0:globalThis.document){const r=_n(e),n=b.useRef(!1);return b.useEffect(()=>{const o=s=>{s.target&&!n.current&&Tx(YN,r,{originalEvent:s},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,r]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Pg(){const e=new CustomEvent(uh);document.dispatchEvent(e)}function Tx(e,t,r,{discrete:n}){const o=r.originalEvent.target,s=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:r});t&&o.addEventListener(e,t,{once:!0}),n?Sx(o,s):o.dispatchEvent(s)}var XN=tp,ZN=Cx,wr=globalThis!=null&&globalThis.document?b.useLayoutEffect:()=>{},eC="Portal",_x=b.forwardRef((e,t)=>{var l;const{container:r,...n}=e,[o,s]=b.useState(!1);wr(()=>s(!0),[]);const i=r||o&&((l=globalThis==null?void 0:globalThis.document)==null?void 0:l.body);return i?hx.createPortal(a.jsx(_e.div,{...n,ref:t}),i):null});_x.displayName=eC;function tC(e,t){return b.useReducer((r,n)=>t[r][n]??r,e)}var wi=e=>{const{present:t,children:r}=e,n=rC(t),o=typeof r=="function"?r({present:n.isPresent}):b.Children.only(r),s=st(n.ref,nC(o));return typeof r=="function"||n.isPresent?b.cloneElement(o,{ref:s}):null};wi.displayName="Presence";function rC(e){const[t,r]=b.useState(),n=b.useRef(null),o=b.useRef(e),s=b.useRef("none"),i=e?"mounted":"unmounted",[l,c]=tC(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const d=Yi(n.current);s.current=l==="mounted"?d:"none"},[l]),wr(()=>{const d=n.current,u=o.current;if(u!==e){const p=s.current,m=Yi(d);e?c("MOUNT"):m==="none"||(d==null?void 0:d.display)==="none"?c("UNMOUNT"):c(u&&p!==m?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,c]),wr(()=>{if(t){let d;const u=t.ownerDocument.defaultView??window,h=m=>{const y=Yi(n.current).includes(m.animationName);if(m.target===t&&y&&(c("ANIMATION_END"),!o.current)){const x=t.style.animationFillMode;t.style.animationFillMode="forwards",d=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=x)})}},p=m=>{m.target===t&&(s.current=Yi(n.current))};return t.addEventListener("animationstart",p),t.addEventListener("animationcancel",h),t.addEventListener("animationend",h),()=>{u.clearTimeout(d),t.removeEventListener("animationstart",p),t.removeEventListener("animationcancel",h),t.removeEventListener("animationend",h)}}else c("ANIMATION_END")},[t,c]),{isPresent:["mounted","unmountSuspended"].includes(l),ref:b.useCallback(d=>{n.current=d?getComputedStyle(d):null,r(d)},[])}}function Yi(e){return(e==null?void 0:e.animationName)||"none"}function nC(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var aC=cm[" useInsertionEffect ".trim().toString()]||wr;function xi({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,i]=oC({defaultProp:t,onChange:r}),l=e!==void 0,c=l?e:o;{const u=b.useRef(e!==void 0);b.useEffect(()=>{const h=u.current;h!==l&&console.warn(`${n} is changing from ${h?"controlled":"uncontrolled"} to ${l?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=l},[l,n])}const d=b.useCallback(u=>{var h;if(l){const p=sC(u)?u(e):u;p!==e&&((h=i.current)==null||h.call(i,p))}else s(u)},[l,e,s,i]);return[c,d]}function oC({defaultProp:e,onChange:t}){const[r,n]=b.useState(e),o=b.useRef(r),s=b.useRef(t);return aC(()=>{s.current=t},[t]),b.useEffect(()=>{var i;o.current!==r&&((i=s.current)==null||i.call(s,r),o.current=r)},[r,o]),[r,n,s]}function sC(e){return typeof e=="function"}var iC=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),lC="VisuallyHidden",Bc=b.forwardRef((e,t)=>a.jsx(_e.span,{...e,ref:t,style:{...iC,...e.style}}));Bc.displayName=lC;var cC=Bc,rp="ToastProvider",[np,dC,uC]=jx("Toast"),[Ex,DD]=ba("Toast",[uC]),[hC,Hc]=Ex(rp),Ix=e=>{const{__scopeToast:t,label:r="Notification",duration:n=5e3,swipeDirection:o="right",swipeThreshold:s=50,children:i}=e,[l,c]=b.useState(null),[d,u]=b.useState(0),h=b.useRef(!1),p=b.useRef(!1);return r.trim()||console.error(`Invalid prop \`label\` supplied to \`${rp}\`. Expected non-empty \`string\`.`),a.jsx(np.Provider,{scope:t,children:a.jsx(hC,{scope:t,label:r,duration:n,swipeDirection:o,swipeThreshold:s,toastCount:d,viewport:l,onViewportChange:c,onToastAdd:b.useCallback(()=>u(m=>m+1),[]),onToastRemove:b.useCallback(()=>u(m=>m-1),[]),isFocusedToastEscapeKeyDownRef:h,isClosePausedRef:p,children:i})})};Ix.displayName=rp;var Ax="ToastViewport",mC=["F8"],hh="toast.viewportPause",mh="toast.viewportResume",Rx=b.forwardRef((e,t)=>
40{const{__scopeToast:r,hotkey:n=mC,label:o="Notifications ({hotkey})",...s}=e,i=Hc(Ax,r),l=dC(r),c=b.useRef(null),d=b.useRef(null),u=b.useRef(null),h=b.useRef(null),p=st(t,h,i.onViewportChange),m=n.join("+").replace(/Key/g,"").replace(/Digit/g,""),v=i.toastCount>0;b.useEffect(()=>{const x=g=>{var w;n.length!==0&&n.every(k=>g[k]||g.code===k)&&((w=h.current)==null||w.focus())};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[n]),b.useEffect(()=>{const x=c.current,g=h.current;if(v&&x&&g){const f=()=>{if(!i.isClosePausedRef.current){const S=new CustomEvent(hh);g.dispatchEvent(S),i.isClosePausedRef.current=!0}},w=()=>{if(i.isClosePausedRef.current){const S=new CustomEvent(mh);g.dispatchEvent(S),i.isClosePausedRef.current=!1}},k=S=>{!x.contains(S.relatedTarget)&&w()},j=()=>{x.contains(document.activeElement)||w()};return x.addEventListener("focusin",f),x.addEventListener("focusout",k),x.addEventListener("pointermove",f),x.addEventListener("pointerleave",j),window.addEventListener("blur",f),window.addEventListener("focus",w),()=>{x.removeEventListener("focusin",f),x.removeEventListener("focusout",k),x.removeEventListener("pointermove",f),x.removeEventListener("pointerleave",j),window.removeEventListener("blur",f),window.removeEventListener("focus",w)}}},[v,i.isClosePausedRef]);const y=b.useCallback(({tabbingDirection:x})=>{const f=l().map(w=>{const k=w.ref.current,j=[k,...CC(k)];return x==="forwards"?j:j.reverse()});return(x==="forwards"?f.reverse():f).flat()},[l]);return b.useEffect(()=>{const x=h.current;if(x){const g=f=>{var j,S,N;const w=f.altKey||f.ctrlKey||f.metaKey;if(f.key==="Tab"&&!w){const _=document.activeElement,P=f.shiftKey;if(f.target===x&&P){(j=d.current)==null||j.focus();return}const z=y({tabbingDirection:P?"backwards":"forwards"}),Q=z.findIndex(D=>D===_);Jd(z.slice(Q+1))?f.preventDefault():P?(S=d.current)==null||S.focus():(N=u.current)==null||N.focus()}};return x.addEventListener("keydown",g),()=>x.removeEventListener("keydown",g)}},[l,y]),a.jsxs(ZN,{ref:c,role:"region","aria-label":o.replace("{hotkey}",m),tabIndex:-1,style:{pointerEvents:v?void 0:"none"},children:[v&&a.jsx(ph,{ref:d,onFocusFromOutsideViewport:()=>{const x=y({tabbingDirection:"forwards"});Jd(x)}}),a.jsx(np.Slot,{scope:r,children:a.jsx(_e.ol,{tabIndex:-1,...s,ref:p})}),v&&a.jsx(ph,{ref:u,onFocusFromOutsideViewport:()=>{const x=y({tabbingDirection:"backwards"});Jd(x)}})]})});Rx.displayName=Ax;var Px="ToastFocusProxy",ph=b.forwardRef((e,t)=>{const{__scopeToast:r,onFocusFromOutsideViewport:n,...o}=e,s=Hc(Px,r);return a.jsx(Bc,{"aria-hidden":!0,tabIndex:0,...o,ref:t,style:{position:"fixed"},onFocus:i=>{var d;const l=i.relatedTarget;!((d=s.viewport)!=null&&d.contains(l))&&n()}})});ph.displayName=Px;var bi="Toast",pC="toast.swipeStart",fC="toast.swipeMove",gC="toast.swipeCancel",yC="toast.swipeEnd",Ox=b.forwardRef((e,t)=>{const{forceMount:r,open:n,defaultOpen:o,onOpenChange:s,...i}=e,[l,c]=xi({prop:n,defaultProp:o??!0,onChange:s,caller:bi});return a.jsx(wi,{present:r||l,children:a.jsx(xC,{open:l,...i,ref:t,onClose:()=>c(!1),onPause:_n(e.onPause),onResume:_n(e.onResume),onSwipeStart:je(e.onSwipeStart,d=>{d.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:je(e.onSwipeMove,d=>{const{x:u,y:h}=d.detail.delta;d.currentTarget.setAttribute("data-swipe","move"),d.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${u}px`),d.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${h}px`)}),onSwipeCancel:je(e.onSwipeCancel,d=>{d.currentTarget.setAttribute("data-swipe","cancel"),d.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),d.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),d.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),d.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:je(e.onSwipeEnd,d=>{const{x:u,y:h}=d.detail.delta;d.currentTarget.setAttribute("data-swipe","end"),d.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),d.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),d.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${u}px`),d.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${h}px`),c(!1)})})})});Ox.displayName=bi;var[vC,wC]=Ex(bi,{onClose(){}}),xC=b.forwardRef((e,t)=>
40{const{__scopeToast:r,type:n="foreground",duration:o,open:s,onClose:i,onEscapeKeyDown:l,onPause:c,onResume:d,onSwipeStart:u,onSwipeMove:h,onSwipeCancel:p,onSwipeEnd:m,...v}=e,y=Hc(bi,r),[x,g]=b.useState(null),f=st(t,D=>g(D)),w=b.useRef(null),k=b.useRef(null),j=o||y.duration,S=b.useRef(0),N=b.useRef(j),_=b.useRef(0),{onToastAdd:P,onToastRemove:O}=y,H=_n(()=>{var ee;(x==null?void 0:x.contains(document.activeElement))&&((ee=y.viewport)==null||ee.focus()),i()}),z=b.useCallback(D=>{!D||D===1/0||(window.clearTimeout(_.current),S.current=new Date().getTime(),_.current=window.setTimeout(H,D))},[H]);b.useEffect(()=>{const D=y.viewport;if(D){const ee=()=>{z(N.current),d==null||d()},F=()=>{const Y=new Date().getTime()-S.current;N.current=N.current-Y,window.clearTimeout(_.current),c==null||c()};return D.addEventListener(hh,F),D.addEventListener(mh,ee),()=>{D.removeEventListener(hh,F),D.removeEventListener(mh,ee)}}},[y.viewport,j,c,d,z]),b.useEffect(()=>{s&&!y.isClosePausedRef.current&&z(j)},[s,j,y.isClosePausedRef,z]),b.useEffect(()=>(P(),()=>O()),[P,O]);const Q=b.useMemo(()=>x?$x(x):null,[x]);return y.viewport?a.jsxs(a.Fragment,{children:[Q&&a.jsx(bC,{__scopeToast:r,role:"status","aria-live":n==="foreground"?"assertive":"polite","aria-atomic":!0,children:Q}),a.jsx(vC,{scope:r,onClose:H,children:vi.createPortal(a.jsx(np.ItemSlot,{scope:r,children:a.jsx(XN,{asChild:!0,onEscapeKeyDown:je(l,()=>{y.isFocusedToastEscapeKeyDownRef.current||H(),y.isFocusedToastEscapeKeyDownRef.current=!1}),children:a.jsx(_e.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":s?"open":"closed","data-swipe-direction":y.swipeDirection,...v,ref:f,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:je(e.onKeyDown,D=>{D.key==="Escape"&&(l==null||l(D.nativeEvent),D.nativeEvent.defaultPrevented||(y.isFocusedToastEscapeKeyDownRef.current=!0,H()))}),onPointerDown:je(e.onPointerDown,D=>{D.button===0&&(w.current={x:D.clientX,y:D.clientY})}),onPointerMove:je(e.onPointerMove,D=>{if(!w.current)return;const ee=D.clientX-w.current.x,F=D.clientY-w.current.y,Y=!!k.current,T=["left","right"].includes(y.swipeDirection),I=["left","up"].includes(y.swipeDirection)?Math.min:Math.max,W=T?I(0,ee):0,K=T?0:I(0,F),G=D.pointerType==="touch"?10:2,X={x:W,y:K},te={originalEvent:D,delta:X};Y?(k.current=X,Ki(fC,h,te,{discrete:!1})):Og(X,y.swipeDirection,G)?(k.current=X,Ki(pC,u,te,{discrete:!1}),D.target.setPointerCapture(D.pointerId)):(Math.abs(ee)>G||Math.abs(F)>G)&&(w.current=null)}),onPointerUp:je(e.onPointerUp,D=>{const ee=k.current,F=D.target;if(F.hasPointerCapture(D.pointerId)&&F.releasePointerCapture(D.pointerId),k.current=null,w.current=null,ee){const Y=D.currentTarget,T={originalEvent:D,delta:ee};Og(ee,y.swipeDirection,y.swipeThreshold)?Ki(yC,m,T,{discrete:!0}):Ki(gC,p,T,{discrete:!0}),Y.addEventListener("click",I=>I.preventDefault(),{once:!0})}})})})}),y.viewport)})]}):null}),bC=e=>{const{__scopeToast:t,children:r,...n}=e,o=Hc(bi,t),[s,i]=b.useState(!1),[l,c]=b.useState(!1);return SC(()=>i(!0)),b.useEffect(()=>{const d=window.setTimeout(()=>c(!0),1e3);return()=>window.clearTimeout(d)},[]),l?null:a.jsx(_x,{asChild:!0,children:a.jsx(Bc,{...n,children:s&&a.jsxs(a.Fragment,{children:[o.label," ",r]})})})},kC="ToastTitle",Dx=b.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e;return a.jsx(_e.div,{...n,ref:t})});Dx.displayName=kC;var jC="ToastDescription",Lx=b.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e;return a.jsx(_e.div,{...n,ref:t})});Lx.displayName=jC;var Wx="ToastAction",Mx=b.forwardRef((e,t)=>{const{altText:r,...n}=e;return r.trim()?a.jsx(zx,{altText:r,asChild:!0,children:a.jsx(ap,{...n,ref:t})}):(console.error(`Invalid prop \`altText\` supplied to \`${Wx}\`. Expected non-empty \`string\`.`),null)});Mx.displayName=Wx;var qx="ToastClose",ap=b.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e,o=wC(qx,r);return a.jsx(zx,{asChild:!0,children:a.jsx(_e.button,{type:"button",...n,ref:t,onClick:je(e.onClick,o.onClose)})})});ap.displayName=qx;var zx=b.forwardRef((e,t)=>{const{__scopeToast:r,altText:n,...o}=e;return a.jsx(_e.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":n||void 0,...o,ref:t})});function $x(e){const t=[];
vendor: 7,287 bytes, lines 40-109
40return Array.from(e.childNodes).forEach(n=>{if(n.nodeType===n.TEXT_NODE&&n.textContent&&t.push(n.textContent),NC(n)){const o=n.ariaHidden||n.hidden||n.style.display==="none",s=n.dataset.radixToastAnnounceExclude==="";if(!o)if(s){const i=n.dataset.radixToastAnnounceAlt;i&&t.push(i)}else t.push(...$x(n))}}),t}function Ki(e,t,r,{discrete:n}){const o=r.originalEvent.currentTarget,s=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:r});t&&o.addEventListener(e,t,{once:!0}),n?Sx(o,s):o.dispatchEvent(s)}var Og=(e,t,r=0)=>{const n=Math.abs(e.x),o=Math.abs(e.y),s=n>o;return t==="left"||t==="right"?s&&n>r:!s&&o>r};function SC(e=()=>{}){const t=_n(e);wr(()=>{let r=0,n=0;return r=window.requestAnimationFrame(()=>n=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(r),window.cancelAnimationFrame(n)}},[t])}function NC(e){return e.nodeType===e.ELEMENT_NODE}function CC(e){const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const o=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||o?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t}function Jd(e){const t=document.activeElement;return e.some(r=>r===t?!0:(r.focus(),document.activeElement!==t))}var TC=Ix,Gx=Rx,Bx=Ox,Hx=Dx,Fx=Lx,Ux=Mx,Vx=ap;function Yx(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(r=Yx(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function Kx(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=Yx(e))&&(n&&(n+=" "),n+=t);return n}const Dg=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,Lg=Kx,Jx=(e,t)=>r=>{var n;if((t==null?void 0:t.variants)==null)return Lg(e,r==null?void 0:r.class,r==null?void 0:r.className);const{variants:o,defaultVariants:s}=t,i=Object.keys(o).map(d=>{const u=r==null?void 0:r[d],h=s==null?void 0:s[d];if(u===null)return null;const p=Dg(u)||Dg(h);return o[d][p]}),l=r&&Object.entries(r).reduce((d,u)=>{let[h,p]=u;return p===void 0||(d[h]=p),d},{}),c=t==null||(n=t.compoundVariants)===null||n===void 0?void 0:n.reduce((d,u)=>{let{class:h,className:p,...m}=u;return Object.entries(m).every(v=>{let[y,x]=v;return Array.isArray(x)?x.includes({...s,...l}[y]):{...s,...l}[y]===x})?[...d,h,p]:d},[]);return Lg(e,i,c,r==null?void 0:r.class,r==null?void 0:r.className)};/**
41 * @license lucide-react v0.462.0 - ISC
42 *
43 * This source code is licensed under the ISC license.
44 * See the LICENSE file in the root directory of this source tree.
45 */const _C=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Qx=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim();/**
46 * @license lucide-react v0.462.0 - ISC
47 *
48 * This source code is licensed under the ISC license.
49 * See the LICENSE file in the root directory of this source tree.
50 */var EC={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
51 * @license lucide-react v0.462.0 - ISC
52 *
53 * This source code is licensed under the ISC license.
54 * See the LICENSE file in the root directory of this source tree.
55 */const IC=b.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:o="",children:s,iconNode:i,...l},c)=>b.createElement("svg",{ref:c,...EC,width:t,height:t,stroke:e,strokeWidth:n?Number(r)*24/Number(t):r,className:Qx("lucide",o),...l},[...i.map(([d,u])=>b.createElement(d,u)),...Array.isArray(s)?s:[s]]));/**
56 * @license lucide-react v0.462.0 - ISC
57 *
58 * This source code is licensed under the ISC license.
59 * See the LICENSE file in the root directory of this source tree.
60 */const ne=(e,t)=>{const r=b.forwardRef(({className:n,...o},s)=>b.createElement(IC,{ref:s,iconNode:t,className:Qx(`lucide-${_C(e)}`,n),...o}));return r.displayName=`${e}`,r};/**
61 * @license lucide-react v0.462.0 - ISC
62 *
63 * This source code is licensed under the ISC license.
64 * See the LICENSE file in the root directory of this source tree.
65 */const Fe=ne("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/**
66 * @license lucide-react v0.462.0 - ISC
67 *
68 * This source code is licensed under the ISC license.
69 * See the LICENSE file in the root directory of this source tree.
70 */const la=ne("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
71 * @license lucide-react v0.462.0 - ISC
72 *
73 * This source code is licensed under the ISC license.
74 * See the LICENSE file in the root directory of this source tree.
75 */const op=ne("Award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);/**
76 * @license lucide-react v0.462.0 - ISC
77 *
78 * This source code is licensed under the ISC license.
79 * See the LICENSE file in the root directory of this source tree.
80 */const AC=ne("BadgePercent",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M9 9h.01",key:"1q5me6"}],["path",{d:"M15 15h.01",key:"lqbp3k"}]]);/**
81 * @license lucide-react v0.462.0 - ISC
82 *
83 * This source code is licensed under the ISC license.
84 * See the LICENSE file in the root directory of this source tree.
85 */const RC=ne("Cable",[["path",{d:"M17 21v-2a1 1 0 0 1-1-1v-1a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1",key:"10bnsj"}],["path",{d:"M19 15V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V9",key:"1eqmu1"}],["path",{d:"M21 21v-2h-4",key:"14zm7j"}],["path",{d:"M3 5h4V3",key:"z442eg"}],["path",{d:"M7 5a1 1 0 0 1 1 1v1a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1V3",key:"ebdjd7"}]]);/**
86 * @license lucide-react v0.462.0 - ISC
87 *
88 * This source code is licensed under the ISC license.
89 * See the LICENSE file in the root directory of this source tree.
90 */const qe=ne("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
91 * @license lucide-react v0.462.0 - ISC
92 *
93 * This source code is licensed under the ISC license.
94 * See the LICENSE file in the root directory of this source tree.
95 */const PC=ne("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
96 * @license lucide-react v0.462.0 - ISC
97 *
98 * This source code is licensed under the ISC license.
99 * See the LICENSE file in the root directory of this source tree.
100 */const Xx=ne("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
101 * @license lucide-react v0.462.0 - ISC
102 *
103 * This source code is licensed under the ISC license.
104 * See the LICENSE file in the root directory of this source tree.
105 */const fa=ne("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
106 * @license lucide-react v0.462.0 - ISC
107 *
108 * This source code is licensed under the ISC license.
109 * See the LICENSE file in the root directory of this source tree.
110 */const Zx=ne("ClipboardCheck",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/**
111 * @license lucide-react v0.462.0 - ISC
112 *
113 * This source code is licensed under the ISC license.
114 * See the LICENSE file in the root directory of this source tree.
115 */const fe=ne("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
116 * @license lucide-react v0.462.0 - ISC
117 *
118 * This source code is licensed under the ISC license.
119 * See the LICENSE file in the root directory of this source tree.
120 */const eb=ne("DoorOpen",[["path",{d:"M13 4h3a2 2 0 0 1 2 2v14",key:"hrm0s9"}],["path",{d:"M2 20h3",key:"1gaodv"}],["path",{d:"M13 20h9",key:"s90cdi"}],["path",{d:"M10 12v.01",key:"vx6srw"}],["path",{d:"M13 4.562v16.157a1 1 0 0 1-1.242.97L5 20V5.562a2 2 0 0 1 1.515-1.94l4-1A2 2 0 0 1 13 4.561Z",key:"199qr4"}]]);/**
121 * @license lucide-react v0.462.0 - ISC
122 *
123 * This source code is licensed under the ISC license.
124 * See the LICENSE file in the root directory of this source tree.
125 */const pn=ne("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/**
126 * @license lucide-react v0.462.0 - ISC
127 *
128 * This source code is licensed under the ISC license.
129 * See the LICENSE file in the root directory of this source tree.
130 */const ct=ne("Facebook",[["path",{d:"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z",key:"1jg4f8"}]]);/**
131 * @license lucide-react v0.462.0 - ISC
132 *
133 * This source code is licensed under the ISC license.
134 * See the LICENSE file in the root directory of this source tree.
135 */const dt=ne("Linkedin",[["path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z",key:"c2jq9f"}],["rect",{width:"4",height:"12",x:"2",y:"9",key:"mk3on5"}],["circle",{cx:"4",cy:"4",r:"2",key:"bt5ra8"}]]);/**
136 * @license lucide-react v0.462.0 - ISC
137 *
138 * This source code is licensed under the ISC license.
139 * See the LICENSE file in the root directory of this source tree.
140 */const OC=ne("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/**
141 * @license lucide-react v0.462.0 - ISC
142 *
143 * This source code is licensed under the ISC license.
144 * See the LICENSE file in the root directory of this source tree.
145 */const DC=ne("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/**
146 * @license lucide-react v0.462.0 - ISC
147 *
148 * This source code is licensed under the ISC license.
149 * See the LICENSE file in the root directory of this source tree.
150 */const sp=ne("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/**
151 * @license lucide-react v0.462.0 - ISC
152 *
153 * This source code is licensed under the ISC license.
154 * See the LICENSE file in the root directory of this source tree.
155 */const Fc=ne("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/**
156 * @license lucide-react v0.462.0 - ISC
157 *
158 * This source code is licensed under the ISC license.
159 * See the LICENSE file in the root directory of this source tree.
160 */const LC=ne("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/**
161 * @license lucide-react v0.462.0 - ISC
162 *
163 * This source code is licensed under the ISC license.
164 * See the LICENSE file in the root directory of this source tree.
165 */const et=ne("Phone",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/**
166 * @license lucide-react v0.462.0 - ISC
167 *
168 * This source code is licensed under the ISC license.
169 * See the LICENSE file in the root directory of this source tree.
170 */const tb=ne("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
171 * @license lucide-react v0.462.0 - ISC
172 *
173 * This source code is licensed under the ISC license.
174 * See the LICENSE file in the root directory of this source tree.
175 */const WC=ne("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/**
176 * @license lucide-react v0.462.0 - ISC
177 *
178 * This source code is licensed under the ISC license.
179 * See the LICENSE file in the root directory of this source tree.
180 */const MC=ne("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",ke
180y:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
181 * @license lucide-react v0.462.0 - ISC
182 *
183 * This source code is licensed under the ISC license.
184 * See the LICENSE file in the root directory of this source tree.
185 */const at=ne("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/**
186 * @license lucide-react v0.462.0 - ISC
187 *
188 * This source code is licensed under the ISC license.
189 * See the LICENSE file in the root directory of this source tree.
190 */const rb=ne("Siren",[["path",{d:"M7 18v-6a5 5 0 1 1 10 0v6",key:"pcx96s"}],["path",{d:"M5 21a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2z",key:"1b4s83"}],["path",{d:"M21 12h1",key:"jtio3y"}],["path",{d:"M18.5 4.5 18 5",key:"g5sp9y"}],["path",{d:"M2 12h1",key:"1uaihz"}],["path",{d:"M12 2v1",key:"11qlp1"}],["path",{d:"m4.929 4.929.707.707",key:"1i51kw"}],["path",{d:"M12 12v6",key:"3ahymv"}]]);/**
191 * @license lucide-react v0.462.0 - ISC
192 *
193 * This source code is licensed under the ISC license.
194 * See the LICENSE file in the root directory of this source tree.
195 */const qC=ne("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/**
196 * @license lucide-react v0.462.0 - ISC
197 *
198 * This source code is licensed under the ISC license.
199 * See the LICENSE file in the root directory of this source tree.
200 */const Mr=ne("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/**
201 * @license lucide-react v0.462.0 - ISC
202 *
203 * This source code is licensed under the ISC license.
204 * See the LICENSE file in the root directory of this source tree.
205 */const zC=ne("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/**
206 * @license lucide-react v0.462.0 - ISC
207 *
208 * This source code is licensed under the ISC license.
209 * See the LICENSE file in the root directory of this source tree.
210 */const qo=ne("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
211 * @license lucide-react v0.462.0 - ISC
212 *
213 * This source code is licensed under the ISC license.
214 * See the LICENSE file in the root directory of this source tree.
215 */const ut=ne("Twitter",[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z",key:"pff0z6"}]]);/**
216 * @license lucide-react v0.462.0 - ISC
217 *
218 * This source code is licensed under the ISC license.
219 * See the LICENSE file in the root directory of this source tree.
220 */const zo=ne("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/**
221 * @license lucide-react v0.462.0 - ISC
222 *
223 * This source code is licensed under the ISC license.
224 * See the LICENSE file in the root directory of this source tree.
225 */const nb=ne("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/**
226 * @license lucide-react v0.462.0 - ISC
227 *
228 * This source code is licensed under the ISC license.
229 * See the LICENSE file in the root directory of this source tree.
230 */const ab=ne("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}
vendor: 12,226 bytes, line 230
230],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),ip="-",$C=e=>{const t=BC(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:i=>{const l=i.split(ip);return l[0]===""&&l.length!==1&&l.shift(),ob(l,t)||GC(i)},getConflictingClassGroupIds:(i,l)=>{const c=r[i]||[];return l&&n[i]?[...c,...n[i]]:c}}},ob=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const r=e[0],n=t.nextPart.get(r),o=n?ob(e.slice(1),n):void 0;if(o)return o;if(t.validators.length===0)return;const s=e.join(ip);return(i=t.validators.find(({validator:l})=>l(s)))==null?void 0:i.classGroupId},Wg=/^\[(.+)\]$/,GC=e=>{if(Wg.test(e)){const t=Wg.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},BC=e=>{const{theme:t,prefix:r}=e,n={nextPart:new Map,validators:[]};return FC(Object.entries(e.classGroups),r).forEach(([s,i])=>{fh(i,n,s,t)}),n},fh=(e,t,r,n)=>{e.forEach(o=>{if(typeof o=="string"){const s=o===""?t:Mg(t,o);s.classGroupId=r;return}if(typeof o=="function"){if(HC(o)){fh(o(n),t,r,n);return}t.validators.push({validator:o,classGroupId:r});return}Object.entries(o).forEach(([s,i])=>{fh(i,Mg(t,s),r,n)})})},Mg=(e,t)=>{let r=e;return t.split(ip).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n)}),r},HC=e=>e.isThemeGetter,FC=(e,t)=>t?e.map(([r,n])=>{const o=n.map(s=>typeof s=="string"?t+s:typeof s=="object"?Object.fromEntries(Object.entries(s).map(([i,l])=>[t+i,l])):s);return[r,o]}):e,UC=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map;const o=(s,i)=>{r.set(s,i),t++,t>e&&(t=0,n=r,r=new Map)};return{get(s){let i=r.get(s);if(i!==void 0)return i;if((i=n.get(s))!==void 0)return o(s,i),i},set(s,i){r.has(s)?r.set(s,i):o(s,i)}}},sb="!",VC=e=>{const{separator:t,experimentalParseClassName:r}=e,n=t.length===1,o=t[0],s=t.length,i=l=>{const c=[];let d=0,u=0,h;for(let x=0;x<l.length;x++){let g=l[x];if(d===0){if(g===o&&(n||l.slice(x,x+s)===t)){c.push(l.slice(u,x)),u=x+s;continue}if(g==="/"){h=x;continue}}g==="["?d++:g==="]"&&d--}const p=c.length===0?l:l.substring(u),m=p.startsWith(sb),v=m?p.substring(1):p,y=h&&h>u?h-u:void 0;return{modifiers:c,hasImportantModifier:m,baseClassName:v,maybePostfixModifierPosition:y}};return r?l=>r({className:l,parseClassName:i}):i},YC=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(n=>{n[0]==="["?(t.push(...r.sort(),n),r=[]):r.push(n)}),t.push(...r.sort()),t},KC=e=>({cache:UC(e.cacheSize),parseClassName:VC(e),...$C(e)}),JC=/\s+/,QC=(e,t)=>{const{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:o}=t,s=[],i=e.trim().split(JC);let l="";for(let c=i.length-1;c>=0;c-=1){const d=i[c],{modifiers:u,hasImportantModifier:h,baseClassName:p,maybePostfixModifierPosition:m}=r(d);let v=!!m,y=n(v?p.substring(0,m):p);if(!y){if(!v){l=d+(l.length>0?" "+l:l);continue}if(y=n(p),!y){l=d+(l.length>0?" "+l:l);continue}v=!1}const x=YC(u).join(":"),g=h?x+sb:x,f=g+y;if(s.includes(f))continue;s.push(f);const w=o(y,v);for(let k=0;k<w.length;++k){const j=w[k];s.push(g+j)}l=d+(l.length>0?" "+l:l)}return l};function XC(){let e=0,t,r,n="";for(;e<arguments.length;)(t=arguments[e++])&&(r=ib(t))&&(n&&(n+=" "),n+=r);return n}const ib=e=>{if(typeof e=="string")return e;let t,r="";for(let n=0;n<e.length;n++)e[n]&&(t=ib(e[n]))&&(r&&(r+=" "),r+=t);return r};function ZC(e,...t){let r,n,o,s=i;function i(c){const d=t.reduce((u,h)=>h(u),e());return r=KC(d),n=r.cache.get,o=r.cache.set,s=l,l(c)}function l(c){const d=n(c);if(d)return d;const u=QC(c,r);return o(c,u),u}return function(){return s(XC.apply(null,arguments))}}const ge=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},lb=/^\[(?:([a-z-]+):)?(.+)\]$/i,e2=/^\d+\/\d+$/,t2=new Set(["px","full","screen"]),r2=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,n2=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,a2=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,o2=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,s2=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,jr=e=>xo(e)||t2.has(e)||e2.test(e),Qr=e=>Ko(e,"length",p2),xo=e=>!!e&&!Number.isNaN(Number(e)),Qd=e=>Ko(e,"number",xo),vs=e=>!!e&&Number.isInteger(Number(e)),i2=e=>e.endsWith("%")&&xo(e.slice(0,-1)),J=e=>lb.test(e),Xr=e=>r2.test(e),l2=new Set(["length","size","percentage"]),c2=e=>Ko(e,l2,cb),d2=e=>Ko(e,"position",cb),u2=new Set(["image","url"]),h2=e=>Ko(e,u2,g2),m2=e=>Ko(e,"",f2),ws=()=>!0,Ko=(e,t,r)=>{const n=lb.exec(e);return n?n[1]?typeof t=="string"?n[1]===t:t.has(n[1]):r(n[2]):!1},p2=e=>n2.test(e)&&!a2.test(e),cb=()=>!1,f2=e=>o2.test(e),g2=e=>s2.test(e),y2=()=>{const e=ge("colors"),t=ge("spacing"),r=ge("blur"),n=ge("brightness"),o=ge("borderColor"),s=ge("borderRadius"),i=ge("borderSpacing"),l=ge("borderWidth"),c=ge("contrast"),d=ge("grayscale"),u=ge("hueRotate"),h=ge("invert"),p=ge("gap"),m=ge("gradientColorStops"),v=ge("gradientColorStopPositions"),y=ge("inset"),x=ge("margin"),g=ge("opacity"),f=ge("padding"),w=ge("saturate"),k=ge("scale"),j=ge("sepia"),S=ge("skew"),N=ge("space"),_=ge("translate"),P=()=>["auto","contain","none"],O=()=>["auto","hidden","clip","visible","scroll"],H=()=>["auto",J,t],z=()=>[J,t],Q=()=>["",jr,Qr],D=()=>["auto",xo,J],ee=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],F=()=>["solid","dashed","dotted","double","none"],Y=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],T=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",J],W=()=>["auto","avoid","all","avoid-page","page","left","right","column"],K=()=>[xo,J];return{cacheSize:500,separator:":",theme:{colors:[ws],spacing:[jr,Qr],blur:["none","",Xr,J],brightness:K(),borderColor:[e],borderRadius:["none","","full",Xr,J],borderSpacing:z(),borderWidth:Q(),contrast:K(),grayscale:I(),hueRotate:K(),invert:I(),gap:z(),gradientColorStops:[e],gradientColorStopPositions:[i2,Qr],inset:H(),margin:H(),opacity:K(),padding:z(),saturate:K(),scale:K(),sepia:I(),skew:K(),space:z(),translate:z()},classGroups:{aspect:[{aspect:["auto","square","video",J]}],container:["container"],columns:[{columns:[Xr]}],"break-after":[{"break-after":W()}],"break-before":[{"break-before":W()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...ee(),J]}],overflow:[{overflow:O()}],"overflow-x":[{"overflow-x":O()}],"overflow-y":[{"overflow-y":O()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[y]}],"inset-x":[{"inset-x":[y]}],"inset-y":[{"inset-y":[y]}],start:[{start:[y]}],end:[{end:[y]}],top:[{top:[y]}],right:[{right:[y]}],bottom:[{bottom:[y]}],left:[{left:[y]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",vs,J]}],basis:[{basis:H()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",J]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",vs,J]}],"grid-cols":[{"grid-cols":[ws]}],"col-start-end":[{col:["auto",{span:["full",vs,J]},J]}],"col-start":[{"col-start":D()}],"col-end":[{"col-end":D()}],"grid-rows":[{"grid-rows":[ws]}],"row-start-end":[{row:["auto",{span:[vs,J]},J]}],"row-start":[{"row-start":D()}],"row-end":[{"row-end":D()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",J]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",J]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal",...T()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...T(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...T(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[f]}],px:[{px:[f]}],py:[{py:[f]}],ps:[{ps:[f]}],pe:[{pe:[f]}],pt:[{pt:[f]}],pr:[{pr:[f]}],pb:[{pb:[f]}],pl:[{pl:[f]}],m:[{m:[x]}],mx:[{mx:[x]}],my:[{my:[x]}],ms:[{ms:[x]}],me:[{me:[x]}],mt:[{mt:[x]}],mr:[{mr:[x]}],mb:[{mb:[x]}],ml:[{ml:[x]}],"space-x":[{"space-x":[N]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[N]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",J,t]}],"min-w":[{"min-w":[J,t,"min","max","fit"]}],"max-w":[{"max-w":[J,t,"none","full","min","max","fit","prose",{screen:[Xr]},Xr]}],h:[{h:[J,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[J,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[J,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[J,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Xr,Qr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Qd]}],"font-family":[{font:[ws]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",J]}],"line-clamp":[{"line-clamp":["none",xo,Qd]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",jr,J]}],"list-image":[{"list-image":["none",J]}],"list-style-type":[{list:["none","disc","decimal",J]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[g]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[g]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...F(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",jr,Qr]}],"underline-offset":[{"underline-offset":["auto",jr,J]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:z()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",J]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",J]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[g]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...ee(),d2]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",c2]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},h2]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}
vendor: 5,172 bytes, line 230
230],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[m]}],"gradient-via":[{via:[m]}],"gradient-to":[{to:[m]}],rounded:[{rounded:[s]}],"rounded-s":[{"rounded-s":[s]}],"rounded-e":[{"rounded-e":[s]}],"rounded-t":[{"rounded-t":[s]}],"rounded-r":[{"rounded-r":[s]}],"rounded-b":[{"rounded-b":[s]}],"rounded-l":[{"rounded-l":[s]}],"rounded-ss":[{"rounded-ss":[s]}],"rounded-se":[{"rounded-se":[s]}],"rounded-ee":[{"rounded-ee":[s]}],"rounded-es":[{"rounded-es":[s]}],"rounded-tl":[{"rounded-tl":[s]}],"rounded-tr":[{"rounded-tr":[s]}],"rounded-br":[{"rounded-br":[s]}],"rounded-bl":[{"rounded-bl":[s]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[g]}],"border-style":[{border:[...F(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[g]}],"divide-style":[{divide:F()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-s":[{"border-s":[o]}],"border-color-e":[{"border-e":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...F()]}],"outline-offset":[{"outline-offset":[jr,J]}],"outline-w":[{outline:[jr,Qr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:Q()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[g]}],"ring-offset-w":[{"ring-offset":[jr,Qr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Xr,m2]}],"shadow-color":[{shadow:[ws]}],opacity:[{opacity:[g]}],"mix-blend":[{"mix-blend":[...Y(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":Y()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[n]}],contrast:[{contrast:[c]}],"drop-shadow":[{"drop-shadow":["","none",Xr,J]}],grayscale:[{grayscale:[d]}],"hue-rotate":[{"hue-rotate":[u]}],invert:[{invert:[h]}],saturate:[{saturate:[w]}],sepia:[{sepia:[j]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[n]}],"backdrop-contrast":[{"backdrop-contrast":[c]}],"backdrop-grayscale":[{"backdrop-grayscale":[d]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u]}],"backdrop-invert":[{"backdrop-invert":[h]}],"backdrop-opacity":[{"backdrop-opacity":[g]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[j]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",J]}],duration:[{duration:K()}],ease:[{ease:["linear","in","out","in-out",J]}],delay:[{delay:K()}],animate:[{animate:["none","spin","ping","pulse","bounce",J]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[k]}],"scale-x":[{"scale-x":[k]}],"scale-y":[{"scale-y":[k]}],rotate:[{rotate:[vs,J]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[S]}],"skew-y":[{"skew-y":[S]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",J]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",J]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":z()}],"scroll-mx":[{"scroll-mx":z()}],"scroll-my":[{"scroll-my":z()}],"scroll-ms":[{"scroll-ms":z()}],"scroll-me":[{"scroll-me":z()}],"scroll-mt":[{"scroll-mt":z()}],"scroll-mr":[{"scroll-mr":z()}],"scroll-mb":[{"scroll-mb":z()}],"scroll-ml":[{"scroll-ml":z()}],"scroll-p":[{"scroll-p":z()}],"scroll-px":[{"scroll-px":z()}],"scroll-py":[{"scroll-py":z()}],"scroll-ps":[{"scroll-ps":z()}],"scroll-pe":[{"scroll-pe":z()}],"scroll-pt":[{"scroll-pt":z()}],"scroll-pr":[{"scroll-pr":z()}],"scroll-pb":[{"scroll-pb":z()}],"scroll-pl":[{"scroll-pl":z()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}
vendor: 4,646 bytes, line 230
230],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",J]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[jr,Qr,Qd]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},v2=ZC(y2);function _t(...e){return v2(Kx(e))}const w2=TC,db=b.forwardRef(({className:e,...t},r)=>a.jsx(Gx,{ref:r,className:_t("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",e),...t}));db.displayName=Gx.displayName;const x2=Jx("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),ub=b.forwardRef(({className:e,variant:t,...r},n)=>a.jsx(Bx,{ref:n,className:_t(x2({variant:t}),e),...r}));ub.displayName=Bx.displayName;const b2=b.forwardRef(({className:e,...t},r)=>a.jsx(Ux,{ref:r,className:_t("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",e),...t}));b2.displayName=Ux.displayName;const hb=b.forwardRef(({className:e,...t},r)=>a.jsx(Vx,{ref:r,className:_t("absolute right-2 top-2 rounded-md p-1 text-foreground
230/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...t,children:a.jsx(ab,{className:"h-4 w-4"})}));hb.displayName=Vx.displayName;const mb=b.forwardRef(({className:e,...t},r)=>a.jsx(Hx,{ref:r,className:_t("text-sm font-semibold",e),...t}));mb.displayName=Hx.displayName;const pb=b.forwardRef(({className:e,...t},r)=>a.jsx(Fx,{ref:r,className:_t("text-sm opacity-90",e),...t}));pb.displayName=Fx.displayName;function k2(){const{toasts:e}=Gc();return a.jsxs(w2,{children:[e.map(function({id:t,title:r,description:n,action:o,...s}){return a.jsxs(ub,{...s,children:[a.jsxs("div",{className:"grid gap-1",children:[r&&a.jsx(mb,{children:r}),n&&a.jsx(pb,{children:n})]}),o,a.jsx(hb,{})]},t)}),a.jsx(db,{})]})}var qg=["light","dark"],j2="(prefers-color-scheme: dark)",S2=b.createContext(void 0),N2={setTheme:e=>{},themes:[]},C2=()=>{var e;return(e=b.useContext(S2))!=null?e:N2};b.memo(({forcedTheme:e,storageKey:t,attribute:r,enableSystem:n,enableColorScheme:o,defaultTheme:s,value:i,attrs:l,nonce:c})=>{let d=s==="system",u=r==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${l.map(v=>`'${v}'`).join(",")})`};`:`var d=document.documentElement,n='${r}',s='setAttribute';`,h=o?qg.includes(s)&&s?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",p=(v,y=!1,x=!0)=>{let g=i?i[v]:v,f=y?v+"|| ''":`'${g}'`,w="";return o&&x&&!y&&qg.includes(v)&&(w+=`d.style.colorScheme = '${v}';`),r==="class"?y||g?w+=`c.add(${f})`:w+="null":g&&(w+=`d[s](n,${f})`),w},m=e?`!function(){${u}${p(e)}}()`:n?`!function(){try{${u}var e=localStorage.getItem('${t}');if('system'===e||(!e&&${d})){var t='${j2}',m=window.matchMedia(t);if(m.media!==t||m.matches){${p("dark")}}else{${p("light")}}}else if(e){${i?`var x=${JSON.stringify(i)};`:""}${p(i?"x[e]":"e",!0)}}${d?"":"else{"+p(s,!1,!1)+"}"}${h}}catch(e){}}()`:`!function(){try{${u}var e=localStorage.getItem('${t}');if(e){${i?`var x=${JSON.stringify(i)};`:""}${p(i?"x[e]":"e",!0)}}else{${p(s,!1,!1)};}${h}}catch(t){}}();`;return b.createElement("script",{nonce:c,dangerouslySetInnerHTML:{__html:m}})});var T2=e=>{switch(e){case"success":return I2;case"info":return R2;case"warning":return A2;case"error":return P2;default:return null}},_2=Array(12).fill(0),E2=({visible:e,className:t})=>E.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},E.createElement("div",{className:"sonner-spinner"},_2.map((r,n)=>E.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),I2=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),A2=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),R2=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),P2=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),O2=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),E.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),D2=()=>{let[e,t]=E.useState(document.hidden);return E.useEffect(()=>{let r=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",r),()=>window.removeEventListener("visibilitychange",r)},[]),e},gh=1,L2=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>
vendor: 1,050 bytes, line 230
230{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var t;let{message:r,...n}=e,o=typeof(e==null?void 0:e.id)=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:gh++,s=this.toasts.find(l=>l.id===o),i=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(o)&&this.dismissedToasts.delete(o),s?this.toasts=this.toasts.map(l=>l.id===o?(this.publish({...l,...e,id:o,title:r}),{...l,...e,id:o,dismissible:i,title:r}):l):this.addToast({title:r,...n,dismissible:i,id:o}),o},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(r=>r({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:"error"}),this.success=(e,t)=>this.create({...t,type:"success",message:e}),this.info=(e,t)=>this.create({...t,type:"info",message:e}),this.warning=(e,t)=>this.create({...t,type:"warning",message:e}),this.loading=(e,t)=>
230this.create({...t,type:"loading",message:e}),this.promise=(e,t)=>{if(!t)return;let r;t.loading!==void 0&&(r=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let n=e instanceof Promise?e:e(),o=r!==void 0,s,i=n.then(async c=>{if(s=["resolve",c],E.isValidElement(c))o=!1,this.create({id:r,type:"default",message:c});else if(M2(c)&&!c.ok){o=!1;let d=typeof t.error=="function"?await t.error(`HTTP error! status: ${c.status}`):t.error,u=typeof t.description=="function"?await t.description(`HTTP error! status: ${c.status}`):t.description;this.create({id:r,type:"error",message:d,description:u})}else if(t.success!==void 0){o=!1;let d=typeof t.success=="function"?await t.success(c):t.success,u=typeof t.description=="function"?await t.description(c):t.description;this.create({id:r,type:"success",message:d,description:u})}}).catch(async c=>{if(s=["reject",c],t.error!==void 0){o=!1;let d=typeof t.error=="function"?await t.error(c):t.error,u=typeof t.description=="function"?await t.description(c):t.description;this.create({id:r,type:"error",message:d,description:u})}}).finally(()=>{var c;o&&(this.dismiss(r),r=void 0),(c=t.finally)==null||c.call(t)}),l=()=>new Promise((c,d)=>i.then(()=>s[0]==="reject"?d(s[1]):c(s[1])).catch(d));return typeof r!="string"&&typeof r!="number"?{unwrap:l}:Object.assign(r,{unwrap:l})},this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||gh++;return this.create({jsx:e(r),id:r,...t}),r},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},mt=new L2,W2=(e,t)=>{let r=(t==null?void 0:t.id)||gh++;return mt.addToast({title:e,...t,id:r}),r},M2=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",q2=W2,z2=()=>mt.toasts,$2=()=>mt.getActiveToasts();Object.assign(q2,{success:mt.success,info:mt.info,warning:mt.warning,error:mt.error,custom:mt.custom,message:mt.message,promise:mt.promise,dismiss:mt.dismiss,loading:mt.loading},{getHistory:z2,getToasts:$2});function G2(e,{insertAt:t}={}){if(typeof document>"u")return;let r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t==="top"&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}G2(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;
230left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}
230:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);
230--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
231`);function Ji(e){return e.label!==void 0}var B2=3,H2="32px",F2="16px",zg=4e3,U2=356,V2=14,Y2=20,K2=200;function Ht(...e){return e.filter(Boolean).join(" ")}function J2(e){let[t,r]=e.split("-"),n=[];return t&&n.push(t),r&&n.push(r),n}var Q2=e=>{var t,r,n,o,s,i,l,c,d,u,h;let{invert:p,toast:m,unstyled:v,interacting:y,setHeights:x,visibleToasts:g,heights:f,index:w,toasts:k,expanded:j,removeToast:S,defaultRichColors:N,closeButton:_,style:P,cancelButtonStyle:O,actionButtonStyle:H,className:z="",descriptionClassName:Q="",duration:D,position:ee,gap:F,loadingIcon:Y,expandByDefault:T,classNames:I,icons:W,closeButtonAriaLabel:K="Close toast",pauseWhenPageIsHidden:G}=e,[X,te]=E.useState(null),[Ae,Ue]=E.useState(null),[le,ka]=E.useState(!1),[Hr,Wn]=E.useState(!1),[Fr,ja]=E.useState(!1),[Ur,Ci]=E.useState(!1),[pd,Ti]=E.useState(!1),[fd,ss]=E.useState(0),[Sa,cf]=E.useState(0),is=E.useRef(m.duration||D||zg),df=E.useRef(null),Mn=E.useRef(null),kj=w===0,jj=w+1<=g,At=m.type,Na=m.dismissible!==!1,Sj=m.className||"",Nj=m.descriptionClassName||"",_i=E.useMemo(()=>f.findIndex(U=>U.toastId===m.id)||0,[f,m.id]),Cj=E.useMemo(()=>{var U;return(U=m.closeButton)!=null?U:_},[m.closeButton,_]),uf=E.useMemo(()=>m.duration||D||zg,[m.duration,D]),gd=E.useRef(0),Ca=E.useRef(0),hf=E.useRef(0),Ta=E.useRef(null),[Tj,_j]=ee.split("-"),mf=E.useMemo(()=>f.reduce((U,he,we)=>we>=_i?U:U+he.height,0),[f,_i]),pf=D2(),Ej=m.invert||p,yd=At==="loading";Ca.current=E.useMemo(()=>_i*F+mf,[_i,mf]),E.useEffect(()=>{is.current=uf},[uf]),E.useEffect(()=>{ka(!0)},[]),E.useEffect(()=>{let U=Mn.current;if(U){let he=U.getBoundingClientRect().height;return cf(he),x(we=>[{toastId:m.id,height:he,position:m.position},...we]),()=>x(we=>we.filter(zt=>zt.toastId!==m.id))}},[x,m.id]),E.useLayoutEffect(()=>{if(!le)return;let U=Mn.current,he=U.style.height;U.style.height="auto";let we=U.getBoundingClientRect().height;U.style.height=he,cf(we),x(zt=>zt.find($t=>$t.toastId===m.id)?zt.map($t=>$t.toastId===m.id?{...$t,height:we}:$t):[{toastId:m.id,height:we,position:m.position},...zt])},[le,m.title,m.description,x,m.id]);let Vr=E.useCallback(()=>{Wn(!0),ss(Ca.current),x(U=>U.filter(he=>he.toastId!==m.id)),setTimeout(()=>{S(m)},K2)},[m,S,x,Ca]);E.useEffect(()=>{if(m.promise&&At==="loading"||m.duration===1/0||m.type==="loading")return;let U;return j||y||G&&pf?(()=>{if(hf.current<gd.current){let he=new Date().getTime()-gd.current;is.current=is.current-he}
231hf.current=new Date().getTime()})():is.current!==1/0&&(gd.current=new Date().getTime(),U=setTimeout(()=>{var he;(he=m.onAutoClose)==null||he.call(m,m),Vr()},is.current)),()=>clearTimeout(U)},[j,y,m,At,G,pf,Vr]),E.useEffect(()=>{m.delete&&Vr()},[Vr,m.delete]);function Ij(){var U,he,we;return W!=null&&W.loading?E.createElement("div",{className:Ht(I==null?void 0:I.loader,(U=m==null?void 0:m.classNames)==null?void 0:U.loader,"sonner-loader"),"data-visible":At==="loading"},W.loading):Y?E.createElement("div",{className:Ht(I==null?void 0:I.loader,(he=m==null?void 0:m.classNames)==null?void 0:he.loader,"sonner-loader"),"data-visible":At==="loading"},Y):E.createElement(E2,{className:Ht(I==null?void 0:I.loader,(we=m==null?void 0:m.classNames)==null?void 0:we.loader),visible:At==="loading"})}return E.createElement("li",{tabIndex:0,ref:Mn,className:Ht(z,Sj,I==null?void 0:I.toast,(t=m==null?void 0:m.classNames)==null?void 0:t.toast,I==null?void 0:I.default,I==null?void 0:I[At],(r=m==null?void 0:m.classNames)==null?void 0:r[At]),"data-sonner-toast":"","data-rich-colors":(n=m.richColors)!=null?n:N,"data-styled":!(m.jsx||m.unstyled||v),"data-mounted":le,"data-promise":!!m.promise,"data-swiped":pd,"data-removed":Hr,"data-visible":jj,"data-y-position":Tj,"data-x-position":_j,"data-index":w,"data-front":kj,"data-swiping":Fr,"data-dismissible":Na,"data-type":At,"data-invert":Ej,"data-swipe-out":Ur,"data-swipe-direction":Ae,"data-expanded":!!(j||T&&le),style:{"--index":w,"--toasts-before":w,"--z-index":k.length-w,"--offset":`${Hr?fd:Ca.current}px`,"--initial-height":T?"auto":`${Sa}px`,...P,...m.style},onDragEnd:()=>{ja(!1),te(null),Ta.current=null},onPointerDown:U=>{yd||!Na||(df.current=new Date,ss(Ca.current),U.target.setPointerCapture(U.pointerId),U.target.tagName!=="BUTTON"&&(ja(!0),Ta.current={x:U.clientX,y:U.clientY}))},onPointerUp:()=>{var U,he,we,zt;if(Ur||!Na)return;Ta.current=null;let $t=Number(((U=Mn.current)==null?void 0:U.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Yr=Number(((he=Mn.current)==null?void 0:he.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),qn=new Date().getTime()-((we=df.current)==null?void 0:we.getTime()),Gt=X==="x"?$t:Yr,Kr=Math.abs(Gt)/qn;if(Math.abs(Gt)>=Y2||Kr>.11){ss(Ca.current),(zt=m.onDismiss)==null||zt.call(m,m),Ue(X==="x"?$t>0?"right":"left":Yr>0?"down":"up"),Vr(),Ci(!0),Ti(!1);return}ja(!1),te(null)},onPointerMove:U=>{var he,we,zt,$t;if(!Ta.current||!Na||((he=window.getSelection())==null?void 0:he.toString().length)>0)return;let Yr=U.clientY-Ta.current.y,qn=U.clientX-Ta.current.x,Gt=(we=e.swipeDirections)!=null?we:J2(ee);!X&&(Math.abs(qn)>1||Math.abs(Yr)>1)&&te(Math.abs(qn)>Math.abs(Yr)?"x":"y");let Kr={x:0,y:0};X==="y"?(Gt.includes("top")||Gt.includes("bottom"))&&(Gt.includes("top")&&Yr<0||Gt.includes("bottom")&&Yr>0)&&(Kr.y=Yr):X==="x"&&(Gt.includes("left")||Gt.includes("right"))&&(Gt.includes("left")&&qn<0||Gt.includes("right")&&qn>0)&&(Kr.x=qn),(Math.abs(Kr.x)>0||Math.abs(Kr.y)>0)&&Ti(!0),(zt=Mn.current)==null||zt.style.setProperty("--swipe-amount-x",`${Kr.x}px`),($t=Mn.current)==null||$t.style.setProperty("--swipe-amount-y",`${Kr.y}px`)}},Cj&&!m.jsx?E.createElement("button",{"aria-label":K,"data-disabled":yd,"data-close-button":!0,onClick:yd||!Na?()=>{}:()=>{var U;Vr(),(U=m.onDismiss)==null||U.call(m,m)},className:Ht(I==null?void 0:I.closeButton,(o=m==null?void 0:m.classNames)==null?void 0:o.closeButton)},(s=W==null?void 0:W.close)!=null?s:O2):null,m.jsx||b.isValidElement(m.title)?m.jsx?m.jsx:typeof m.title=="function"?m.title():m.title:E.createElement(E.Fragment,null,At||m.icon||m.promise?E.createElement("div",{"data-icon":"",className:Ht(I==null?void 0:I.icon,(i=m==null?void 0:m.classNames)==null?void 0:i.icon)},m.promise||m.type==="loading"&&!m.icon?m.icon||Ij():null,m.type!=="loading"?m.
231icon||(W==null?void 0:W[At])||T2(At):null):null,E.createElement("div",{"data-content":"",className:Ht(I==null?void 0:I.content,(l=m==null?void 0:m.classNames)==null?void 0:l.content)},E.createElement("div",{"data-title":"",className:Ht(I==null?void 0:I.title,(c=m==null?void 0:m.classNames)==null?void 0:c.title)},typeof m.title=="function"?m.title():m.title),m.description?E.createElement("div",{"data-description":"",className:Ht(Q,Nj,I==null?void 0:I.description,(d=m==null?void 0:m.classNames)==null?void 0:d.description)},typeof m.description=="function"?m.description():m.description):null),b.isValidElement(m.cancel)?m.cancel:m.cancel&&Ji(m.cancel)?E.createElement("button",{"data-button":!0,"data-cancel":!0,style:m.cancelButtonStyle||O,onClick:U=>{var he,we;Ji(m.cancel)&&Na&&((we=(he=m.cancel).onClick)==null||we.call(he,U),Vr())},className:Ht(I==null?void 0:I.cancelButton,(u=m==null?void 0:m.classNames)==null?void 0:u.cancelButton)},m.cancel.label):null,b.isValidElement(m.action)?m.action:m.action&&Ji(m.action)?E.createElement("button",{"data-button":!0,"data-action":!0,style:m.actionButtonStyle||H,onClick:U=>{var he,we;Ji(m.action)&&((we=(he=m.action).onClick)==null||we.call(he,U),!U.defaultPrevented&&Vr())},className:Ht(I==null?void 0:I.actionButton,(h=m==null?void 0:m.classNames)==null?void 0:h.actionButton)},m.action.label):null))};function $g(){if(typeof window>"u"||typeof document>"u")return"ltr";let e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function X2(e,t){let r={};return[e,t].forEach((n,o)=>{let s=o===1,i=s?"--mobile-offset":"--offset",l=s?F2:H2;function c(d){["top","right","bottom","left"].forEach(u=>{r[`${i}-${u}`]=typeof d=="number"?`${d}px`:d})}typeof n=="number"||typeof n=="string"?c(n):typeof n=="object"?["top","right","bottom","left"].forEach(d=>{n[d]===void 0?r[`${i}-${d}`]=l:r[`${i}-${d}`]=typeof n[d]=="number"?`${n[d]}px`:n[d]}):c(l)}),r}var Z2=b.forwardRef(function(e,t){let{invert:r,position:n="bottom-right",hotkey:o=["altKey","KeyT"],expand:s,closeButton:i,className:l,offset:c,mobileOffset:d,theme:u="light",richColors:h,duration:p,style:m,visibleToasts:v=B2,toastOptions:y,dir:x=$g(),gap:g=V2,loadingIcon:f,icons:w,containerAriaLabel:k="Notifications",pauseWhenPageIsHidden:j}=e,[S,N]=E.useState([]),_=E.useMemo(()=>Array.from(new Set([n].concat(S.filter(G=>G.position).map(G=>G.position)))),[S,n]),[P,O]=E.useState([]),[H,z]=E.useState(!1),[Q,D]=E.useState(!1),[ee,F]=E.useState(u!=="system"?u:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),Y=E.useRef(null),T=o.join("+").replace(/Key/g,"").replace(/Digit/g,""),I=E.useRef(null),W=E.useRef(!1),K=E.useCallback(G=>{N(X=>{var te;return(te=X.find(Ae=>Ae.id===G.id))!=null&&te.delete||mt.dismiss(G.id),X.filter(({id:Ae})=>Ae!==G.id)})},[]);return E.useEffect(()=>mt.subscribe(G=>{if(G.dismiss){N(X=>X.map(te=>te.id===G.id?{...te,delete:!0}:te));return}setTimeout(()=>{hx.flushSync(()=>{N(X=>{let te=X.findIndex(Ae=>Ae.id===G.id);return te!==-1?[...X.slice(0,te),{...X[te],...G},...X.slice(te+1)]:[G,...X]})})})}),[]),E.useEffect(()=>{if(u!=="system"){F(u);return}if(u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?F("dark"):F("light")),typeof window>"u")return;let G=window.matchMedia("(prefers-color-scheme: dark)");try{G.addEventListener("change",({matches:X})=>{F(X?"dark":"light")})}catch{G.addListener(({matches:te})=>{try{F(te?"dark":"light")}catch(Ae){console.error(Ae)}})}},[u]),E.useEffect(()=>{S.length<=1&&z(!1)},[S]),E.useEffect(()=>{let G=X=>{var te,Ae;o.every(Ue=>X[Ue]||X.code===Ue)&&(z(!0),(te=Y.current)==null||te.focus()),X.code==="Escape"&&(document.activeElement===Y.current||(Ae=Y.current)!=null&&Ae.contains(document.activeElement))&&z(!1)};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[o]),E.useEffect(()=>{if(Y.current)return()=>{I.current&&(I.current.focus({preventScroll:!0}),I.current=null,W.current=!1)}},[Y.current]),E.createElement("section",{ref:t,"aria-label":`${k} ${T}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},_.map((G,X)=>{var te;let[Ae,Ue]=G.split("-");return S.length?E.createElement("ol",{key:G,dir:x==="auto"?$g():x,tabIndex:-1,ref:Y,className:l,"data-sonner-toaster":!0,"data-theme":ee,"data-y-position":Ae,"data-lifted":H&&S.length>1&&!s,"data-x-position":Ue,style:{"--front-toast-height":`${((te=P[0])==null?void 0:te.height)||0}px`,"--width":`${U2}px`,"--gap":`${g}px`,...m,...X2(c,d)},onBlur:le=>{W.current&&!le.currentTarget.contains(le.relatedTarget)&&(W.current=!1,I.current&&(I.current.focus({preventScroll:!0}),I.current=null))},onFocus:le=>{le.target instanceof HTMLElement&&le.target.dataset.dismissible==="false"||W.current||(W.current=!0,I.current=le.relatedTarget)},onMouseEnter:()=>z(!0),onMouseMove:()=>z(!0),onMouseLeave:()=>{Q||z(!1)},onDragEnd:()=>z(!1),onPointerDown:le=>{le.target instanceof HTMLElement&&le.target.dataset.dismissible==="false"||D(!0)},onPointerUp:()=>D(!1)},S.filter(le=>!le.position&&X===0||le.position===G).map((le,ka)=>{var Hr,Wn;return E.createElement(Q2,{key:le.id,icons:w,index:ka,toast:le,defaultRichColors:h,duration:(Hr=y==null?void 0:y.duration)!=null?Hr:p,className:y==null?void 0:y.className,descriptionClassName:y==null?void 0:y.descriptionClassName,invert:r,visibleToasts:v,closeButton:(Wn=y==null?void 0:y.closeButton)!=null?Wn:i,interacting:Q,position:G,style:y==null?void 0:y.style,unstyled:y==null?void 0:y.unstyled,classNames:y==null?void 0:y.classNames,cancelButtonStyle:y==null?void 0:y.cancelButtonStyle,actionButtonStyle:y==null?void 0:y.actionButtonStyle,removeToast:K,toasts:S.filter(Fr=>Fr.position==le.position),heights:P.filter(Fr=>Fr.position==le.position),setHeights:O,expandByDefault:s,gap:g,loadingIcon:f,expanded:H,pauseWhenPageIsHidden:j,swipeDirections:e.swipeDirections})})):null}))});const eT=({...e})=>{const{theme:t="system"}=C2();return a.jsx(Z2,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e})};var tT=cm[" useId ".trim().toString()]||(()=>{}),rT=0;function fb(e){const[t,r]=b.useState(tT());return wr(()=>{r(n=>n??String(rT++))},[e]),t?`radix-${t}`:""}const nT=["top","right","bottom","left"],En=Math.min,kt=Math.max,ic=Math.round,Qi=Math.floor,vr=e=>({x:e,y:e}
vendor: 11,929 bytes, line 231
231),aT={left:"right",right:"left",bottom:"top",top:"bottom"},oT={start:"end",end:"start"};function yh(e,t,r){return kt(e,En(t,r))}function qr(e,t){return typeof e=="function"?e(t):e}function zr(e){return e.split("-")[0]}function Jo(e){return e.split("-")[1]}function lp(e){return e==="x"?"y":"x"}function cp(e){return e==="y"?"height":"width"}const sT=new Set(["top","bottom"]);function fr(e){return sT.has(zr(e))?"y":"x"}function dp(e){return lp(fr(e))}function iT(e,t,r){r===void 0&&(r=!1);const n=Jo(e),o=dp(e),s=cp(o);let i=o==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=lc(i)),[i,lc(i)]}function lT(e){const t=lc(e);return[vh(e),t,vh(t)]}function vh(e){return e.replace(/start|end/g,t=>oT[t])}const Gg=["left","right"],Bg=["right","left"],cT=["top","bottom"],dT=["bottom","top"];function uT(e,t,r){switch(e){case"top":case"bottom":return r?t?Bg:Gg:t?Gg:Bg;case"left":case"right":return t?cT:dT;default:return[]}}function hT(e,t,r,n){const o=Jo(e);let s=uT(zr(e),r==="start",n);return o&&(s=s.map(i=>i+"-"+o),t&&(s=s.concat(s.map(vh)))),s}function lc(e){return e.replace(/left|right|bottom|top/g,t=>aT[t])}function mT(e){return{top:0,right:0,bottom:0,left:0,...e}}function gb(e){return typeof e!="number"?mT(e):{top:e,right:e,bottom:e,left:e}}function cc(e){const{x:t,y:r,width:n,height:o}=e;return{width:n,height:o,top:r,left:t,right:t+n,bottom:r+o,x:t,y:r}}function Hg(e,t,r){let{reference:n,floating:o}=e;const s=fr(t),i=dp(t),l=cp(i),c=zr(t),d=s==="y",u=n.x+n.width/2-o.width/2,h=n.y+n.height/2-o.height/2,p=n[l]/2-o[l]/2;let m;switch(c){case"top":m={x:u,y:n.y-o.height};break;case"bottom":m={x:u,y:n.y+n.height};break;case"right":m={x:n.x+n.width,y:h};break;case"left":m={x:n.x-o.width,y:h};break;default:m={x:n.x,y:n.y}}switch(Jo(t)){case"start":m[i]-=p*(r&&d?-1:1);break;case"end":m[i]+=p*(r&&d?-1:1);break}return m}const pT=async(e,t,r)=>{const{placement:n="bottom",strategy:o="absolute",middleware:s=[],platform:i}=r,l=s.filter(Boolean),c=await(i.isRTL==null?void 0:i.isRTL(t));let d=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:h}=Hg(d,n,c),p=n,m={},v=0;for(let y=0;y<l.length;y++){const{name:x,fn:g}=l[y],{x:f,y:w,data:k,reset:j}=await g({x:u,y:h,initialPlacement:n,placement:p,strategy:o,middlewareData:m,rects:d,platform:i,elements:{reference:e,floating:t}});u=f??u,h=w??h,m={...m,[x]:{...m[x],...k}},j&&v<=50&&(v++,typeof j=="object"&&(j.placement&&(p=j.placement),j.rects&&(d=j.rects===!0?await i.getElementRects({reference:e,floating:t,strategy:o}):j.rects),{x:u,y:h}=Hg(d,p,c)),y=-1)}return{x:u,y:h,placement:p,strategy:o,middlewareData:m}};async function ri(e,t){var r;t===void 0&&(t={});const{x:n,y:o,platform:s,rects:i,elements:l,strategy:c}=e,{boundary:d="clippingAncestors",rootBoundary:u="viewport",elementContext:h="floating",altBoundary:p=!1,padding:m=0}=qr(t,e),v=gb(m),x=l[p?h==="floating"?"reference":"floating":h],g=cc(await s.getClippingRect({element:(r=await(s.isElement==null?void 0:s.isElement(x)))==null||r?x:x.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(l.floating)),boundary:d,rootBoundary:u,strategy:c})),f=h==="floating"?{x:n,y:o,width:i.floating.width,height:i.floating.height}:i.reference,w=await(s.getOffsetParent==null?void 0:s.getOffsetParent(l.floating)),k=await(s.isElement==null?void 0:s.isElement(w))?await(s.getScale==null?void 0:s.getScale(w))||{x:1,y:1}:{x:1,y:1},j=cc(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:f,offsetParent:w,strategy:c}):f);return{top:(g.top-j.top+v.top)/k.y,bottom:(j.bottom-g.bottom+v.bottom)/k.y,left:(g.left-j.left+v.left)/k.x,right:(j.right-g.right+v.right)/k.x}}const fT=e=>({name:"arrow",options:e,async fn(t){const{x:r,y:n,placement:o,rects:s,platform:i,elements:l,middlewareData:c}=t,{element:d,padding:u=0}=qr(e,t)||{};if(d==null)return{};const h=gb(u),p={x:r,y:n},m=dp(o),v=cp(m),y=await i.getDimensions(d),x=m==="y",g=x?"top":"left",f=x?"bottom":"right",w=x?"clientHeight":"clientWidth",k=s.reference[v]+s.reference[m]-p[m]-s.floating[v],j=p[m]-s.reference[m],S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(d));let N=S?S[w]:0;(!N||!await(i.isElement==null?void 0:i.isElement(S)))&&(N=l.floating[w]||s.floating[v]);const _=k/2-j/2,P=N/2-y[v]/2-1,O=En(h[g],P),H=En(h[f],P),z=O,Q=N-y[v]-H,D=N/2-y[v]/2+_,ee=yh(z,D,Q),F=!c.arrow&&Jo(o)!=null&&D!==ee&&s.reference[v]/2-(D<z?O:H)-y[v]/2<0,Y=F?D<z?D-z:D-Q:0;return{[m]:p[m]+Y,data:{[m]:ee,centerOffset:D-ee-Y,...F&&{alignmentOffset:Y}},reset:F}}}),gT=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var r,n;const{placement:o,middlewareData:s,rects:i,initialPlacement:l,platform:c,elements:d}=t,{mainAxis:u=!0,crossAxis:h=!0,fallbackPlacements:p,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:y=!0,...x}=qr(e,t);if((r=s.arrow)!=null&&r.alignmentOffset)return{};const g=zr(o),f=fr(l),w=zr(l)===l,k=await(c.isRTL==null?void 0:c.isRTL(d.floating)),j=p||(w||!y?[lc(l)]:lT(l)),S=v!=="none";!p&&S&&j.push(...hT(l,y,v,k));const N=[l,...j],_=await ri(t,x),P=[];let O=((n=s.flip)==null?void 0:n.overflows)||[];if(u&&P.push(_[g]),h){const D=iT(o,i,k);P.push(_[D[0]],_[D[1]])}if(O=[...O,{placement:o,overflows:P}],!P.every(D=>D<=0)){var H,z;const D=(((H=s.flip)==null?void 0:H.index)||0)+1,ee=N[D];if(ee&&(!(h==="alignment"?f!==fr(ee):!1)||O.every(T=>T.overflows[0]>0&&fr(T.placement)===f)))return{data:{index:D,overflows:O},reset:{placement:ee}};let F=(z=O.filter(Y=>Y.overflows[0]<=0).sort((Y,T)=>Y.overflows[1]-T.overflows[1])[0])==null?void 0:z.placement;if(!F)switch(m){case"bestFit":{var Q;const Y=(Q=O.filter(T=>{if(S){const I=fr(T.placement);return I===f||I==="y"}return!0}).map(T=>[T.placement,T.overflows.filter(I=>I>0).reduce((I,W)=>I+W,0)]).sort((T,I)=>T[1]-I[1])[0])==null?void 0:Q[0];Y&&(F=Y);break}case"initialPlacement":F=l;break}if(o!==F)return{reset:{placement:F}}}return{}}}};function Fg(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Ug(e){return nT.some(t=>e[t]>=0)}const yT=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:r}=t,{strategy:n="referenceHidden",...o}=qr(e,t);switch(n){case"referenceHidden":{const s=await ri(t,{...o,elementContext:"reference"}),i=Fg(s,r.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:Ug(i)}}}case"escaped":{const s=await ri(t,{...o,altBoundary:!0}),i=Fg(s,r.floating);return{data:{escapedOffsets:i,escaped:Ug(i)}}}default:return{}}}}},yb=new Set(["left","top"]);async function vT(e,t){const{placement:r,platform:n,elements:o}=e,s=await(n.isRTL==null?void 0:n.isRTL(o.floating)),i=zr(r),l=Jo(r),c=fr(r)==="y",d=yb.has(i)?-1:1,u=s&&c?-1:1,h=qr(t,e);let{mainAxis:p,crossAxis:m,alignmentAxis:v}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return l&&typeof v=="number"&&(m=l==="end"?v*-1:v),c?{x:m*u,y:p*d}:{x:p*d,y:m*u}}const wT=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var r,n;const{x:o,y:s,placement:i,middlewareData:l}=t,c=await vT(t,e);return i===((r=l.offset)==null?void 0:r.placement)&&(n=l.arrow)!=null&&n.alignmentOffset?{}:{x:o+c.x,y:s+c.y,data:{...c,placement:i}}}}},xT=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:n,placement:o}=t,{mainAxis:s=!0,crossAxis:i=!1,limiter:l={fn:x=>{let{x:g,y:f}=x;return{x:g,y:f}}},...c}=qr(e,t),d={x:r,y:n},u=await ri(t,c),h=fr(zr(o)),p=lp(h);let m=d[p],v=d[h];if(s){const x=p==="y"?"top":"left",g=p==="y"?"bottom":"right",f=m+u[x],w=m-u[g];m=yh(f,m,w)}if(i){const x=h==="y"?"top":"left",g=h==="y"?"bottom":"right",f=v+u[x],w=v-u[g];v=yh(f,v,w)}const y=l.fn({...t,[p]:m,[h]:v});return{...y,data:{x:y.x-r,y:y.y-n,enabled:{[p]:s,[h]:i}}}}}},bT=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:n,placement:o,rects:s,middlewareData:i}=t,{offset:l=0,mainAxis:c=!0,crossAxis:d=!0}=qr(e,t),u={x:r,y:n},h=fr(o),p=lp(h);let m=u[p],v=u[h];const y=qr(l,t),x=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(c){const w=p==="y"?"height":"width",k=s.reference[p]-s.floating[w]+x.mainAxis,j=s.reference[p]+s.reference[w]-x.mainAxis;m<k?m=k:m>j&&(m=j)}if(d){var g,f;const w=p==="y"?"width":"height",k=yb.has(zr(o)),j=s.reference[h]-s.floating[w]+(k&&((g=i.offset)==null?void 0:g[h])||0)+(k?0:x.crossAxis),S=s.reference[h]+s.reference[w]+(k?0:((f=i.offset)==null?void 0:f[h])||0)-(k?x.crossAxis:0);v<j?v=j:v>S&&(v=S)}return{[p]:m,[h]:v}}}},kT=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var r,n;const{placement:o,rects:s,platform:i,elements:l}=t,{apply:c=()=>{},...d}=qr(e,t),u=await ri(t,d),h=zr(o),p=Jo(o),m=fr(o)==="y",{width:v,height:y}=s.floating;let x,g;h==="top"||h==="bottom"?(x=h,g=p===(await(i.isRTL==null?void 0:i.isRTL(l.floating))?"start":"end")?"left":"right"):(g=h,x=p==="end"?"top":"bottom");const f=y-u.top-u.bottom,w=v-u.left-u.right,k=En(y-u[x],f),j=En(v-u[g],w),S=!t.middlewareData.shift;let N=k,_=j;if((r=t.middlewareData.shift)!=null&&r.enabled.x&&(_=w),(n=t.middlewareData.shift)!=null&&n.enabled.y&&(N=f),S&&!p){const O=kt(u.left,0),H=kt(u.right,0),z=kt(u.top,0),Q=kt(u.bottom,0);m?_=v-2*(O!==0||H!==0?O+H:kt(u.left,u.right)):N=y-2*(z!==0||Q!==0?z+Q:kt(u.top,u.bottom))}await c({...t,availableWidth:_,availableHeight:N});const P=await i.getDimensions(l.floating);return v!==P.width||y!==P.height?{reset:{rects:!0}}:{}}}};function Uc(){return typeof window<"u"}function Qo(e){return vb(e)?(e.nodeName||"").toLowerCase():"#document"}function Ct(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function br(e){var t;return(t=(vb(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function vb(e){return Uc()?e instanceof Node||e instanceof Ct(e).Node:!1}function ar(e){return Uc()?e instanceof Element||e instanceof Ct(e).Element:!1}function xr(e){return Uc()?e instanceof HTMLElement||e instanceof Ct(e).HTMLElement:!1}function Vg(e){return!Uc()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Ct(e).ShadowRoot}const jT=new Set(["inline","contents"]);function ki(e){const{overflow:t,overflowX:r,overflowY:n,display:o}=or(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!jT.has(o)}const ST=new Set(["table","td","th"]);function NT(e){return ST.has(Qo(e))}const CT=[":popover-open",":modal"];function Vc(e){return CT.some(t=>{try{return e.matches(t)}catch{return!1}})}const TT=["transform","translate","scale","rotate","perspective"],_T=["transform","translate","scale","rotate","perspective","filter"],ET=["paint","layout","strict","content"];function up(e){const t=hp(),r=ar(e)?or(e):e;return TT.some(n=>r[n]?r[n]!=="none":!1)||(r.containerType?r.containerType!=="normal":!1)||!t&&(r.backdropFilter?r.backdropFilter!=="none":!1)||!t&&(r.filter?r.filter!=="none":!1)||_T.some(n=>(r.willChange||"").includes(n))||ET.some(n=>(r.contain||"").includes(n))}function IT(e){let t=In(e);for(;xr(t)&&!$o(t);){if(up(t))return t;if(Vc(t))return null;t=In(t)}return null}function hp(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const AT=new Set(["html","body","#document"]);function $o(e){return AT.has(Qo(e))}function or(e){return Ct(e).getComputedStyle(e)}function Yc(e){return ar(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function In(e){if(Qo(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Vg(e)&&e.host||br(e);return Vg(t)?t.host:t}function wb(e){const t=In(e);return $o(t)?e.ownerDocument?e.ownerDocument.body:e.body:xr(t)&&ki(t)?t:wb(t)}function ni(e,t,r){var n;t===void 0&&(t=[]),r===void 0&&(r=!0);const o=wb(e),s=o===((n=e.ownerDocument)==null?void 0:n.body),i=Ct(o);if(s){const l=wh(i);
vendor: 2,649 bytes, line 231
231return t.concat(i,i.visualViewport||[],ki(o)?o:[],l&&r?ni(l):[])}return t.concat(o,ni(o,[],r))}function wh(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function xb(e){const t=or(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const o=xr(e),s=o?e.offsetWidth:r,i=o?e.offsetHeight:n,l=ic(r)!==s||ic(n)!==i;return l&&(r=s,n=i),{width:r,height:n,$:l}}function mp(e){return ar(e)?e:e.contextElement}function bo(e){const t=mp(e);if(!xr(t))return vr(1);const r=t.getBoundingClientRect(),{width:n,height:o,$:s}=xb(t);let i=(s?ic(r.width):r.width)/n,l=(s?ic(r.height):r.height)/o;return(!i||!Number.isFinite(i))&&(i=1),(!l||!Number.isFinite(l))&&(l=1),{x:i,y:l}}const RT=vr(0);function bb(e){const t=Ct(e);return!hp()||!t.visualViewport?RT:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function PT(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==Ct(e)?!1:t}function ga(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);const o=e.getBoundingClientRect(),s=mp(e);let i=vr(1);t&&(n?ar(n)&&(i=bo(n)):i=bo(e));const l=PT(s,r,n)?bb(s):vr(0);let c=(o.left+l.x)/i.x,d=(o.top+l.y)/i.y,u=o.width/i.x,h=o.height/i.y;if(s){const p=Ct(s),m=n&&ar(n)?Ct(n):n;let v=p,y=wh(v);for(;y&&n&&m!==v;){const x=bo(y),g=y.getBoundingClientRect(),f=or(y),w=g.left+(y.clientLeft+parseFloat(f.paddingLeft))*x.x,k=g.top+(y.clientTop+parseFloat(f.paddingTop))*x.y;c*=x.x,d*=x.y,u*=x.x,h*=x.y,c+=w,d+=k,v=Ct(y),y=wh(v)}}return cc({width:u,height:h,x:c,y:d})}function pp(e,t){const r=Yc(e).scrollLeft;return t?t.left+r:ga(br(e)).left+r}function kb(e,t,r){r===void 0&&(r=!1);const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-(r?0:pp(e,n)),s=n.top+t.scrollTop;return{x:o,y:s}}function OT(e){let{elements:t,rect:r,offsetParent:n,strategy:o}=e;const s=o==="fixed",i=br(n),l=t?Vc(t.floating):!1;if(n===i||l&&s)return r;let c={scrollLeft:0,scrollTop:0},d=vr(1);const u=vr(0),h=xr(n);if((h||!h&&!s)&&((Qo(n)!=="body"||ki(i))&&(c=Yc(n)),xr(n))){const m=ga(n);d=bo(n),u.x=m.x+n.clientLeft,u.y=m.y+n.clientTop}const p=i&&!h&&!s?kb(i,c,!0):vr(0);return{width:r.width*d.x,height:r.height*d.y,x:r.x*d.x-c.scrollLeft*d.x+u.x+p.x,y:r.y*d.y-c.scrollTop*d.y+u.y+p.y}}function DT(e){return Array.from(e.getClientRects())}function LT(e){const t=br(e),r=Yc(e),n=e.ownerDocument.body,o=kt(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),s=kt(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let i=-r.scrollLeft+pp(e);const l=-r.scrollTop;return or(n).direction==="rtl"&&(i+=kt(t.clientWidth,n.clientWidth)-o),{width:o,height:s,x:i,y:l}}function WT(e,t){const r=Ct(e),n=br(e),o=r.visualViewport;let s=n.clientWidth,i=n.clientHeight,l=0,c=0;
vendor: 9,296 bytes, line 231
231if(o){s=o.width,i=o.height;const d=hp();(!d||d&&t==="fixed")&&(l=o.offsetLeft,c=o.offsetTop)}return{width:s,height:i,x:l,y:c}}const MT=new Set(["absolute","fixed"]);function qT(e,t){const r=ga(e,!0,t==="fixed"),n=r.top+e.clientTop,o=r.left+e.clientLeft,s=xr(e)?bo(e):vr(1),i=e.clientWidth*s.x,l=e.clientHeight*s.y,c=o*s.x,d=n*s.y;return{width:i,height:l,x:c,y:d}}function Yg(e,t,r){let n;if(t==="viewport")n=WT(e,r);else if(t==="document")n=LT(br(e));else if(ar(t))n=qT(t,r);else{const o=bb(e);n={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return cc(n)}function jb(e,t){const r=In(e);return r===t||!ar(r)||$o(r)?!1:or(r).position==="fixed"||jb(r,t)}function zT(e,t){const r=t.get(e);if(r)return r;let n=ni(e,[],!1).filter(l=>ar(l)&&Qo(l)!=="body"),o=null;const s=or(e).position==="fixed";let i=s?In(e):e;for(;ar(i)&&!$o(i);){const l=or(i),c=up(i);!c&&l.position==="fixed"&&(o=null),(s?!c&&!o:!c&&l.position==="static"&&!!o&&MT.has(o.position)||ki(i)&&!c&&jb(e,i))?n=n.filter(u=>u!==i):o=l,i=In(i)}return t.set(e,n),n}function $T(e){let{element:t,boundary:r,rootBoundary:n,strategy:o}=e;const i=[...r==="clippingAncestors"?Vc(t)?[]:zT(t,this._c):[].concat(r),n],l=i[0],c=i.reduce((d,u)=>{const h=Yg(t,u,o);return d.top=kt(h.top,d.top),d.right=En(h.right,d.right),d.bottom=En(h.bottom,d.bottom),d.left=kt(h.left,d.left),d},Yg(t,l,o));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function GT(e){const{width:t,height:r}=xb(e);return{width:t,height:r}}function BT(e,t,r){const n=xr(t),o=br(t),s=r==="fixed",i=ga(e,!0,s,t);let l={scrollLeft:0,scrollTop:0};const c=vr(0);function d(){c.x=pp(o)}if(n||!n&&!s)if((Qo(t)!=="body"||ki(o))&&(l=Yc(t)),n){const m=ga(t,!0,s,t);c.x=m.x+t.clientLeft,c.y=m.y+t.clientTop}else o&&d();s&&!n&&o&&d();const u=o&&!n&&!s?kb(o,l):vr(0),h=i.left+l.scrollLeft-c.x-u.x,p=i.top+l.scrollTop-c.y-u.y;return{x:h,y:p,width:i.width,height:i.height}}function Xd(e){return or(e).position==="static"}function Kg(e,t){if(!xr(e)||or(e).position==="fixed")return null;if(t)return t(e);let r=e.offsetParent;return br(e)===r&&(r=r.ownerDocument.body),r}function Sb(e,t){const r=Ct(e);if(Vc(e))return r;if(!xr(e)){let o=In(e);for(;o&&!$o(o);){if(ar(o)&&!Xd(o))return o;o=In(o)}return r}let n=Kg(e,t);for(;n&&NT(n)&&Xd(n);)n=Kg(n,t);return n&&$o(n)&&Xd(n)&&!up(n)?r:n||IT(e)||r}const HT=async function(e){const t=this.getOffsetParent||Sb,r=this.getDimensions,n=await r(e.floating);return{reference:BT(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function FT(e){return or(e).direction==="rtl"}const UT={convertOffsetParentRelativeRectToViewportRelativeRect:OT,getDocumentElement:br,getClippingRect:$T,getOffsetParent:Sb,getElementRects:HT,getClientRects:DT,getDimensions:GT,getScale:bo,isElement:ar,isRTL:FT};function Nb(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function VT(e,t){let r=null,n;const o=br(e);function s(){var l;clearTimeout(n),(l=r)==null||l.disconnect(),r=null}function i(l,c){l===void 0&&(l=!1),c===void 0&&(c=1),s();const d=e.getBoundingClientRect(),{left:u,top:h,width:p,height:m}=d;if(l||t(),!p||!m)return;const v=Qi(h),y=Qi(o.clientWidth-(u+p)),x=Qi(o.clientHeight-(h+m)),g=Qi(u),w={rootMargin:-v+"px "+-y+"px "+-x+"px "+-g+"px",threshold:kt(0,En(1,c))||1};let k=!0;function j(S){const N=S[0].intersectionRatio;if(N!==c){if(!k)return i();N?i(!1,N):n=setTimeout(()=>{i(!1,1e-7)},1e3)}N===1&&!Nb(d,e.getBoundingClientRect())&&i(),k=!1}try{r=new IntersectionObserver(j,{...w,root:o.ownerDocument})}catch{r=new IntersectionObserver(j,w)}r.observe(e)}return i(!0),s}function YT(e,t,r,n){n===void 0&&(n={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:c=!1}=n,d=mp(e),u=o||s?[...d?ni(d):[],...ni(t)]:[];u.forEach(g=>{o&&g.addEventListener("scroll",r,{passive:!0}),s&&g.addEventListener("resize",r)});const h=d&&l?VT(d,r):null;let p=-1,m=null;i&&(m=new ResizeObserver(g=>{let[f]=g;f&&f.target===d&&m&&(m.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var w;(w=m)==null||w.observe(t)})),r()}),d&&!c&&m.observe(d),m.observe(t));let v,y=c?ga(e):null;c&&x();function x(){const g=ga(e);y&&!Nb(y,g)&&r(),y=g,v=requestAnimationFrame(x)}return r(),()=>{var g;u.forEach(f=>{o&&f.removeEventListener("scroll",r),s&&f.removeEventListener("resize",r)}),h==null||h(),(g=m)==null||g.disconnect(),m=null,c&&cancelAnimationFrame(v)}}const KT=wT,JT=xT,QT=gT,XT=kT,ZT=yT,Jg=fT,e_=bT,t_=(e,t,r)=>{const n=new Map,o={platform:UT,...r},s={...o.platform,_c:n};return pT(e,t,{...o,platform:s})};var r_=typeof document<"u",n_=function(){},Al=r_?b.useLayoutEffect:n_;function dc(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,n,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!==t.length)return!1;for(n=r;n--!==0;)if(!dc(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),r=o.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!{}.hasOwnProperty.call(t,o[n]))return!1;for(n=r;n--!==0;){const s=o[n];if(!(s==="_owner"&&e.$$typeof)&&!dc(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function Cb(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Qg(e,t){const r=Cb(e);return Math.round(t*r)/r}function Zd(e){const t=b.useRef(e);return Al(()=>{t.current=e}),t}function a_(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:n=[],platform:o,elements:{reference:s,floating:i}={},transform:l=!0,whileElementsMounted:c,open:d}=e,[u,h]=b.useState({x:0,y:0,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[p,m]=b.useState(n);dc(p,n)||m(n);const[v,y]=b.useState(null),[x,g]=b.useState(null),f=b.useCallback(T=>{T!==S.current&&(S.current=T,y(T))},[]),w=b.useCallback(T=>{T!==N.current&&(N.current=T,g(T))},[]),k=s||v,j=i||x,S=b.useRef(null),N=b.useRef(null),_=b.useRef(u),P=c!=null,O=Zd(c),H=Zd(o),z=Zd(d),Q=b.useCallback(()=>{if(!S.current||!N.current)return;const T={placement:t,strategy:r,middleware:p};H.current&&(T.platform=H.current),t_(S.current,N.current,T).then(I=>{const W={...I,isPositioned:z.current!==!1};D.current&&!dc(_.current,W)&&(_.current=W,vi.flushSync(()=>{h(W)}))})},[p,t,r,H,z]);Al(()=>{d===!1&&_.current.isPositioned&&(_.current.isPositioned=!1,h(T=>({...T,isPositioned:!1})))},[d]);const D=b.useRef(!1);Al(()=>(D.current=!0,()=>{D.current=!1}),[]),Al(()=>{if(k&&(S.current=k),j&&(N.current=j),k&&j){if(O.current)return O.current(k,j,Q);Q()}},[k,j,Q,O,P]);const ee=b.useMemo(()=>({reference:S,floating:N,setReference:f,setFloating:w}),[f,w]),F=b.useMemo(()=>({reference:k,floating:j}),[k,j]),Y=b.useMemo(()=>{const T={position:r,left:0,top:0};if(!F.floating)return T;const I=Qg(F.floating,u.x),W=Qg(F.floating,u.y);return l?{...T,transform:"translate("+I+"px, "+W+"px)",...Cb(F.floating)>=1.5&&{willChange:"transform"}}:{position:r,left:I,top:W}},[r,l,F.floating,u.x,u.y]);return b.useMemo(()=>({...u,update:Q,refs:ee,elements:F,floatingStyles:Y}),[u,Q,ee,F,Y])}const o_=e=>{function t(r){return{}.hasOwnProperty.call(r,"current")}return{name:"arrow",options:e,fn(r){const{element:n,padding:o}=typeof e=="function"?e(r):e;return n&&t(n)?n.current!=null?Jg({element:n.current,padding:o}).fn(r):{}:n?Jg({element:n,padding:o}).fn(r):{}}}},s_=(e,t)=>({...KT(e),options:[e,t]}),i_=(e,t)=>({...JT(e),options:[e,t]}),l_=(e,t)=>({...e_(e),options:[e,t]}),c_=(e,t)=>({...QT(e),options:[e,t]}),d_=(e,t)=>({...XT(e),options:[e,t]}),u_=(e,t)=>({...ZT(e),options:[e,t]}),h_=(e,t)=>({...o_(e),options:[e,t]});var m_="Arrow",Tb=b.forwardRef((e,t)=>{const{children:r,width:n=10,height:o=5,...s}=e;return a.jsx(_e.svg,{...s,ref:t,width:n,height:o,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?r:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});Tb.displayName=m_;var p_=Tb;function _b(e){const[t,r]=b.useState(void 0);return wr(()=>{if(e){r({width:e.offsetWidth,height:e.offsetHeight});const n=new ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const s=o[0];let i,l;if("borderBoxSize"in s){const c=s.borderBoxSize,d=Array.isArray(c)?c[0]:c;i=d.inlineSize,l=d.blockSize}else i=e.offsetWidth,l=e.offsetHeight;r({width:i,height:l})});return n.observe(e,{box:"border-box"}),()=>n.unobserve(e)}else r(void 0)},[e]),t}var Eb="Popper",[Ib,Ab]=ba(Eb),[LD,Rb]=Ib(Eb),Pb="PopperAnchor",Ob=b.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:n,...o}=e,s=Rb(Pb,r),i=b.useRef(null),l=st(t,i);return b.useEffect(()=>{s.onAnchorChange((n==null?void 0:n.current)||i.current)}),n?null:a.jsx(_e.div,{...o,ref:l})});Ob.displayName=Pb;var fp="PopperContent",[f_,g_]=Ib(fp),Db=b.forwardRef((e,t)=>{var le,ka,Hr,Wn,Fr,ja;const{__scopePopper:r,side:n="bottom",sideOffset:o=0,align:s="center",alignOffset:i=0,arrowPadding:l=0,avoidCollisions:c=!0,collisionBoundary:d=[],collisionPadding:u=0,sticky:h="partial",hideWhenDetached:p=!1,updatePositionStrategy:m="optimized",onPlaced:v,...y}=e,x=Rb(fp,r),[g,f]=b.useState(null),w=st(t,Ur=>f(Ur)),[k,j]=b.useState(null),S=_b(k),N=(S==null?void 0:S.width)??0,_=(S==null?void 0:S.height)??0,P=n+(s!=="center"?"-"+s:""),O=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},H=Array.isArray(d)?d:[d],z=H.length>
vendor: 9,120 bytes, line 231
2310,Q={padding:O,boundary:H.filter(v_),altBoundary:z},{refs:D,floatingStyles:ee,placement:F,isPositioned:Y,middlewareData:T}=a_({strategy:"fixed",placement:P,whileElementsMounted:(...Ur)=>YT(...Ur,{animationFrame:m==="always"}),elements:{reference:x.anchor},middleware:[s_({mainAxis:o+_,alignmentAxis:i}),c&&i_({mainAxis:!0,crossAxis:!1,limiter:h==="partial"?l_():void 0,...Q}),c&&c_({...Q}),d_({...Q,apply:({elements:Ur,rects:Ci,availableWidth:pd,availableHeight:Ti})=>{const{width:fd,height:ss}=Ci.reference,Sa=Ur.floating.style;Sa.setProperty("--radix-popper-available-width",`${pd}px`),Sa.setProperty("--radix-popper-available-height",`${Ti}px`),Sa.setProperty("--radix-popper-anchor-width",`${fd}px`),Sa.setProperty("--radix-popper-anchor-height",`${ss}px`)}}),k&&h_({element:k,padding:l}),w_({arrowWidth:N,arrowHeight:_}),p&&u_({strategy:"referenceHidden",...Q})]}),[I,W]=Mb(F),K=_n(v);wr(()=>{Y&&(K==null||K())},[Y,K]);const G=(le=T.arrow)==null?void 0:le.x,X=(ka=T.arrow)==null?void 0:ka.y,te=((Hr=T.arrow)==null?void 0:Hr.centerOffset)!==0,[Ae,Ue]=b.useState();return wr(()=>{g&&Ue(window.getComputedStyle(g).zIndex)},[g]),a.jsx("div",{ref:D.setFloating,"data-radix-popper-content-wrapper":"",style:{...ee,transform:Y?ee.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:Ae,"--radix-popper-transform-origin":[(Wn=T.transformOrigin)==null?void 0:Wn.x,(Fr=T.transformOrigin)==null?void 0:Fr.y].join(" "),...((ja=T.hide)==null?void 0:ja.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:a.jsx(f_,{scope:r,placedSide:I,onArrowChange:j,arrowX:G,arrowY:X,shouldHideArrow:te,children:a.jsx(_e.div,{"data-side":I,"data-align":W,...y,ref:w,style:{...y.style,animation:Y?void 0:"none"}})})})});Db.displayName=fp;var Lb="PopperArrow",y_={top:"bottom",right:"left",bottom:"top",left:"right"},Wb=b.forwardRef(function(t,r){const{__scopePopper:n,...o}=t,s=g_(Lb,n),i=y_[s.placedSide];return a.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:a.jsx(p_,{...o,ref:r,style:{...o.style,display:"block"}})})});Wb.displayName=Lb;function v_(e){return e!==null}var w_=e=>({name:"transformOrigin",options:e,fn(t){var x,g,f;const{placement:r,rects:n,middlewareData:o}=t,i=((x=o.arrow)==null?void 0:x.centerOffset)!==0,l=i?0:e.arrowWidth,c=i?0:e.arrowHeight,[d,u]=Mb(r),h={start:"0%",center:"50%",end:"100%"}[u],p=(((g=o.arrow)==null?void 0:g.x)??0)+l/2,m=(((f=o.arrow)==null?void 0:f.y)??0)+c/2;let v="",y="";return d==="bottom"?(v=i?h:`${p}px`,y=`${-c}px`):d==="top"?(v=i?h:`${p}px`,y=`${n.floating.height+c}px`):d==="right"?(v=`${-c}px`,y=i?h:`${m}px`):d==="left"&&(v=`${n.floating.width+c}px`,y=i?h:`${m}px`),{data:{x:v,y}}}});function Mb(e){const[t,r="center"]=e.split("-");return[t,r]}var x_=Ob,b_=Db,k_=Wb,[Kc,WD]=ba("Tooltip",[Ab]),gp=Ab(),qb="TooltipProvider",j_=700,Xg="tooltip.open",[S_,zb]=Kc(qb),$b=e=>{const{__scopeTooltip:t,delayDuration:r=j_,skipDelayDuration:n=300,disableHoverableContent:o=!1,children:s}=e,i=b.useRef(!0),l=b.useRef(!1),c=b.useRef(0);return b.useEffect(()=>{const d=c.current;return()=>window.clearTimeout(d)},[]),a.jsx(S_,{scope:t,isOpenDelayedRef:i,delayDuration:r,onOpen:b.useCallback(()=>{window.clearTimeout(c.current),i.current=!1},[]),onClose:b.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>i.current=!0,n)},[n]),isPointerInTransitRef:l,onPointerInTransitChange:b.useCallback(d=>{l.current=d},[]),disableHoverableContent:o,children:s})};$b.displayName=qb;var Gb="Tooltip",[MD,Jc]=Kc(Gb),xh="TooltipTrigger",N_=b.forwardRef((e,t)=>{const{__scopeTooltip:r,...n}=e,o=Jc(xh,r),s=zb(xh,r),i=gp(r),l=b.useRef(null),c=st(t,l,o.onTriggerChange),d=b.useRef(!1),u=b.useRef(!1),h=b.useCallback(()=>d.current=!1,[]);return b.useEffect(()=>()=>document.removeEventListener("pointerup",h),[h]),a.jsx(x_,{asChild:!0,...i,children:a.jsx(_e.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...n,ref:c,onPointerMove:je(e.onPointerMove,p=>{p.pointerType!=="touch"&&!u.current&&!s.isPointerInTransitRef.current&&(o.onTriggerEnter(),u.current=!0)}),onPointerLeave:je(e.onPointerLeave,()=>{o.onTriggerLeave(),u.current=!1}),onPointerDown:je(e.onPointerDown,()=>{o.open&&o.onClose(),d.current=!0,document.addEventListener("pointerup",h,{once:!0})}),onFocus:je(e.onFocus,()=>{d.current||o.onOpen()}),onBlur:je(e.onBlur,o.onClose),onClick:je(e.onClick,o.onClose)})})});N_.displayName=xh;var C_="TooltipPortal",[qD,T_]=Kc(C_,{forceMount:void 0}),Go="TooltipContent",Bb=b.forwardRef((e,t)=>{const r=T_(Go,e.__scopeTooltip),{forceMount:n=r.forceMount,side:o="top",...s}=e,i=Jc(Go,e.__scopeTooltip);return a.jsx(wi,{present:n||i.open,children:i.disableHoverableContent?a.jsx(Hb,{side:o,...s,ref:t}):a.jsx(__,{side:o,...s,ref:t})})}),__=b.forwardRef((e,t)=>{const r=Jc(Go,e.__scopeTooltip),n=zb(Go,e.__scopeTooltip),o=b.useRef(null),s=st(t,o),[i,l]=b.useState(null),{trigger:c,onClose:d}=r,u=o.current,{onPointerInTransitChange:h}=n,p=b.useCallback(()=>{l(null),h(!1)},[h]),m=b.useCallback((v,y)=>{const x=v.currentTarget,g={x:v.clientX,y:v.clientY},f=P_(g,x.getBoundingClientRect()),w=O_(g,f),k=D_(y.getBoundingClientRect()),j=W_([...w,...k]);l(j),h(!0)},[h]);return b.useEffect(()=>()=>p(),[p]),b.useEffect(()=>{if(c&&u){const v=x=>m(x,u),y=x=>m(x,c);return c.addEventListener("pointerleave",v),u.addEventListener("pointerleave",y),()=>{c.removeEventListener("pointerleave",v),u.removeEventListener("pointerleave",y)}}},[c,u,m,p]),b.useEffect(()=>{if(i){const v=y=>{const x=y.target,g={x:y.clientX,y:y.clientY},f=(c==null?void 0:c.contains(x))||(u==null?void 0:u.contains(x)),w=!L_(g,i);f?p():w&&(p(),d())};return document.addEventListener("pointermove",v),()=>document.removeEventListener("pointermove",v)}},[c,u,i,d,p]),a.jsx(Hb,{...e,ref:s})}),[E_,I_]=Kc(Gb,{isInside:!1}),A_=zN("TooltipContent"),Hb=b.forwardRef((e,t)=>{const{__scopeTooltip:r,children:n,"aria-label":o,onEscapeKeyDown:s,onPointerDownOutside:i,...l}=e,c=Jc(Go,r),d=gp(r),{onClose:u}=c;return b.useEffect(()=>(document.addEventListener(Xg,u),()=>document.removeEventListener(Xg,u)),[u]),b.useEffect(()=>{if(c.trigger){const h=p=>{const m=p.target;m!=null&&m.contains(c.trigger)&&u()};return window.addEventListener("scroll",h,{capture:!0}),()=>window.removeEventListener("scroll",h,{capture:!0})}},[c.trigger,u]),a.jsx(tp,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:s,onPointerDownOutside:i,onFocusOutside:h=>h.preventDefault(),onDismiss:u,children:a.jsxs(b_,{"data-state":c.stateAttribute,...d,...l,ref:t,style:{...l.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[a.jsx(A_,{children:n}),a.jsx(E_,{scope:r,isInside:!0,children:a.jsx(cC,{id:c.contentId,role:"tooltip",children:o||n})})]})})});Bb.displayName=Go;var Fb="TooltipArrow",R_=b.forwardRef((e,t)=>{const{__scopeTooltip:r,...n}=e,o=gp(r);return I_(Fb,r).isInside?null:a.jsx(k_,{...o,...n,ref:t})});R_.displayName=Fb;function P_(e,t){const r=Math.abs(t.top-e.y),n=Math.abs(t.bottom-e.y),o=Math.abs(t.right-e.x),s=Math.abs(t.left-e.x);switch(Math.min(r,n,o,s)){case s:return"left";case o:return"right";case r:return"top";case n:return"bottom";default:throw new Error("unreachable")}}function O_(e,t,r=5){const n=[];switch(t){case"top":n.push({x:e.x-r,y:e.y+r},{x:e.x+r,y:e.y+r});break;case"bottom":n.push({x:e.x-r,y:e.y-r},{x:e.x+r,y:e.y-r});break;case"left":n.push({x:e.x+r,y:e.y-r},{x:e.x+r,y:e.y+r});break;case"right":n.push({x:e.x-r,y:e.y-r},{x:e.x-r,y:e.y+r});break}return n}function D_(e){const{top:t,right:r,bottom:n,left:o}=e;return[{x:o,y:t},{x:r,y:t},{x:r,y:n},{x:o,y:n}]}function L_(e,t){const{x:r,y:n}=e;let o=!1;for(let s=0,i=t.length-1;s<t.length;i=s++){const l=t[s],c=t[i],d=l.x,u=l.y,h=c.x,p=c.y;u>n!=p>n&&r<(h-d)*(n-u)/(p-u)+d&&(o=!o)}return o}function W_(e){const t=e.slice();return t.sort((r,n)=>r.x<n.x?-1:r.x>n.x?1:r.y<n.y?-1:r.y>n.y?1:0),M_(t)}function M_(e){if(e.length<=1)return e.slice();const t=[];for(let n=0;n<e.length;n++){const o=e[n];for(;t.length>=2;){const s=t[t.length-1],i=t[t.length-2];if((s.x-i.x)*(o.y-i.y)>=(s.y-i.y)*(o.x-i.x))t.pop();else break}t.push(o)}t.pop();const r=[];for(let n=e.length-1;n>=0;n--){const o=e[n];for(;r.length>=2;){const s=r[r.length-1],i=r[r.length-2];if((s.x-i.x)*(o.y-i.y)>=(s.y-i.y)*(o.x-i.x))r.pop();else break}r.push(o)}return r.pop(),t.length===1&&r.length===1&&t[0].x===r[0].x&&t[0].y===r[0].y?t:t.concat(r)}var q_=$b,Ub=Bb;const z_=q_,$_=b.forwardRef(({className:e,sideOffset:t=4,...r},n)=>
vendor: 8,824 bytes, line 231
231a.jsx(Ub,{ref:n,sideOffset:t,className:_t("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...r}));$_.displayName=Ub.displayName;var Qc=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Xc=typeof window>"u"||"Deno"in globalThis;function Vt(){}function G_(e,t){return typeof e=="function"?e(t):e}function B_(e){return typeof e=="number"&&e>=0&&e!==1/0}function H_(e,t){return Math.max(e+(t||0)-Date.now(),0)}function bh(e,t){return typeof e=="function"?e(t):e}function F_(e,t){return typeof e=="function"?e(t):e}function Zg(e,t){const{type:r="all",exact:n,fetchStatus:o,predicate:s,queryKey:i,stale:l}=e;if(i){if(n){if(t.queryHash!==yp(i,t.options))return!1}else if(!oi(t.queryKey,i))return!1}if(r!=="all"){const c=t.isActive();if(r==="active"&&!c||r==="inactive"&&c)return!1}return!(typeof l=="boolean"&&t.isStale()!==l||o&&o!==t.state.fetchStatus||s&&!s(t))}function ey(e,t){const{exact:r,status:n,predicate:o,mutationKey:s}=e;if(s){if(!t.options.mutationKey)return!1;if(r){if(ai(t.options.mutationKey)!==ai(s))return!1}else if(!oi(t.options.mutationKey,s))return!1}return!(n&&t.state.status!==n||o&&!o(t))}function yp(e,t){return((t==null?void 0:t.queryKeyHashFn)||ai)(e)}function ai(e){return JSON.stringify(e,(t,r)=>kh(r)?Object.keys(r).sort().reduce((n,o)=>(n[o]=r[o],n),{}):r)}function oi(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(r=>oi(e[r],t[r])):!1}function Vb(e,t){if(e===t)return e;const r=ty(e)&&ty(t);if(r||kh(e)&&kh(t)){const n=r?e:Object.keys(e),o=n.length,s=r?t:Object.keys(t),i=s.length,l=r?[]:{},c=new Set(n);let d=0;for(let u=0;u<i;u++){const h=r?u:s[u];(!r&&c.has(h)||r)&&e[h]===void 0&&t[h]===void 0?(l[h]=void 0,d++):(l[h]=Vb(e[h],t[h]),l[h]===e[h]&&e[h]!==void 0&&d++)}return o===i&&d===o?e:l}return t}function ty(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function kh(e){if(!ry(e))return!1;const t=e.constructor;if(t===void 0)return!0;const r=t.prototype;return!(!ry(r)||!r.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function ry(e){return Object.prototype.toString.call(e)==="[object Object]"}function U_(e){return new Promise(t=>{setTimeout(t,e)})}function V_(e,t,r){return typeof r.structuralSharing=="function"?r.structuralSharing(e,t):r.structuralSharing!==!1?Vb(e,t):t}function Y_(e,t,r=0){const n=[...e,t];return r&&n.length>r?n.slice(1):n}function K_(e,t,r=0){const n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var vp=Symbol();function Yb(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===vp?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var ea,sn,So,Fy,J_=(Fy=class extends Qc{constructor(){super();se(this,ea);se(this,sn);se(this,So);V(this,So,t=>{if(!Xc&&window.addEventListener){const r=()=>t();return window.addEventListener("visibilitychange",r,!1),()=>{window.removeEventListener("visibilitychange",r)}}})}onSubscribe(){C(this,sn)||this.setEventListener(C(this,So))}onUnsubscribe(){var t;this.hasListeners()||((t=C(this,sn))==null||t.call(this),V(this,sn,void 0))}setEventListener(t){var r;V(this,So,t),(r=C(this,sn))==null||r.call(this),V(this,sn,t(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(t){C(this,ea)!==t&&(V(this,ea,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(r=>{r(t)})}isFocused(){var t;return typeof C(this,ea)=="boolean"?C(this,ea):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},ea=new WeakMap,sn=new WeakMap,So=new WeakMap,Fy),Kb=new J_,No,ln,Co,Uy,Q_=(Uy=class extends Qc{constructor(){super();se(this,No,!0);se(this,ln);se(this,Co);V(this,Co,t=>{if(!Xc&&window.addEventListener){const r=()=>t(!0),n=()=>t(!1);return window.addEventListener("online",r,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",r),window.removeEventListener("offline",n)}}})}onSubscribe(){C(this,ln)||this.setEventListener(C(this,Co))}onUnsubscribe(){var t;this.hasListeners()||((t=C(this,ln))==null||t.call(this),V(this,ln,void 0))}setEventListener(t){var r;V(this,Co,t),(r=C(this,ln))==null||r.call(this),V(this,ln,t(this.setOnline.bind(this)))}setOnline(t){C(this,No)!==t&&(V(this,No,t),this.listeners.forEach(n=>{n(t)}))}isOnline(){return C(this,No)}},No=new WeakMap,ln=new WeakMap,Co=new WeakMap,Uy),uc=new Q_;function X_(){let e,t;const r=new Promise((o,s)=>{e=o,t=s});r.status="pending",r.catch(()=>{});function n(o){Object.assign(r,o),delete r.resolve,delete r.reject}return r.resolve=o=>{n({status:"fulfilled",value:o}),e(o)},r.reject=o=>{n({status:"rejected",reason:o}),t(o)},r}function Z_(e){return Math.min(1e3*2**e,3e4)}function Jb(e){return(e??"online")==="online"?uc.isOnline():!0}var Qb=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function eu(e){return e instanceof Qb}function Xb(e){let t=!1,r=0,n=!1,o;const s=X_(),i=y=>{var x;n||(p(new Qb(y)),(x=e.abort)==null||x.call(e))},l=()=>{t=!0},c=()=>{t=!1},d=()=>Kb.isFocused()&&(e.networkMode==="always"||uc.isOnline())&&e.canRun(),u=()=>Jb(e.networkMode)&&e.canRun(),h=y=>{var x;n||(n=!0,(x=e.onSuccess)==null||x.call(e,y),o==null||o(),s.resolve(y))},p=y=>{var x;n||(n=!0,(x=e.onError)==null||x.call(e,y),o==null||o(),s.reject(y))},m=()=>new Promise(y=>{var x;o=g=>{(n||d())&&y(g)},(x=e.onPause)==null||x.call(e)}).then(()=>{var y;o=void 0,n||(y=e.onContinue)==null||y.call(e)}),v=()=>{if(n)return;let y;const x=r===0?e.initialPromise:void 0;try{y=x??e.fn()}catch(g){y=Promise.reject(g)}Promise.resolve(y).then(h).catch(g=>{var S;if(n)return;const f=e.retry??(Xc?0:3),w=e.retryDelay??Z_,k=typeof w=="function"?w(r,g):w,j=f===!0||typeof f=="number"&&r<f||typeof f=="function"&&f(r,g);if(t||!j){p(g);return}r++,(S=e.onFail)==null||S.call(e,r,g),U_(k).then(()=>d()?void 0:m()).then(()=>{t?p(g):v()})})};return{promise:s,cancel:i,continue:()=>(o==null||o(),s),cancelRetry:l,continueRetry:c,canStart:u,start:()=>(u()?v():m().then(v),s)}}var eE=e=>setTimeout(e,0);function tE(){let e=[],t=0,r=l=>{l()},n=l=>{l()},o=eE;const s=l=>{t?e.push(l):o(()=>{r(l)})},i=()=>{const l=e;e=[],l.length&&o(()=>{n(()=>{l.forEach(c=>{r(c)})})})};return{batch:l=>{let c;t++;try{c=l()}finally{t--,t||i()}return c},batchCalls:l=>(...c)=>{s(()=>{l(...c)})},schedule:s,setNotifyFunction:l=>{r=l},setBatchNotifyFunction:l=>{n=l},setScheduler:l=>{o=l}}}var nt=tE(),ta,Vy,Zb=(Vy=class{constructor(){se(this,ta)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),B_(this.gcTime)&&V(this,ta,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Xc?1/0:5*60*1e3))}clearGcTimeout(){C(this,ta)&&(clearTimeout(C(this,ta)),V(this,ta,void 0))}},ta=new WeakMap,Vy),To,ra,Pt,na,Je,di,aa,Kt,Tr,Yy,rE=(Yy=class extends Zb{constructor(t){super();se(this,Kt);se(this,To);se(this,ra);se(this,Pt);se(this,na);se(this,Je);se(this,di);se(this,aa);V(this,aa,!1),V(this,di,t.defaultOptions),this.setOptions(t.options),this.observers=[],V(this,na,t.client),V(this,Pt,C(this,na).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,V(this,To,aE(this.options)),this.state=t.state??C(this,To),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=C(this,Je))==null?void 0:t.promise}setOptions(t){this.options={...C(this,di),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&C(this,Pt).remove(this)}setData(t,r){const n=V_(this.state.data,t,this.options);return Ve(this,Kt,Tr).call(this,{data:n,type:"success",dataUpdatedAt:r==null?void 0:r.updatedAt,manual:r==null?void 0:r.manual}),n}setState(t,r){Ve(this,Kt,Tr).call(this,{type:"setState",state:t,setStateOptions:r})}cancel(t){var n,o;const r=(n=C(this,Je))==null?void 0:n.promise;return(o=C(this,Je))==null||o.cancel(t),r?r.then(Vt).catch(Vt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(C(this,To))}isActive(){return this.observers.some(t=>F_(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===vp||this.state.dataUpdateCount+this.state.errorUpdate
231Count===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>bh(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!H_(this.state.dataUpdatedAt,t)}onFocus(){var r;const t=this.observers.find(n=>n.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(r=C(this,Je))==null||r.continue()}onOnline(){var r;const t=this.observers.find(n=>n.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(r=C(this,Je))==null||r.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),C(this,Pt).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(r=>r!==t),this.observers.length||(C(this,Je)&&(C(this,aa)?C(this,Je).cancel({revert:!0}):C(this,Je).cancelRetry()),this.scheduleGc()),C(this,Pt).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Ve(this,Kt,Tr).call(this,{type:"invalidate"})}fetch(t,r){var d,u,h;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(r!=null&&r.cancelRefetch))this.cancel({silent:!0});else if(C(this,Je))return C(this,Je).continueRetry(),C(this,Je).promise}if(t&&this.setOptions(t),!this.options.queryFn){const p=this.observers.find(m=>m.options.queryFn);p&&this.setOptions(p.options)}const n=new AbortController,o=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>(V(this,aa,!0),n.signal)})},s=()=>{const p=Yb(this.options,r),v=(()=>{const y={client:C(this,na),queryKey:this.queryKey,meta:this.meta};return o(y),y})();return V(this,aa,!1),this.options.persister?this.options.persister(p,v,this):p(v)},l=(()=>{const p={fetchOptions:r,options:this.options,queryKey:this.queryKey,client:C(this,na),state:this.state,fetchFn:s};return o(p),p})();(d=this.options.behavior)==null||d.onFetch(l,this),V(this,ra,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((u=l.fetchOptions)==null?void 0:u.meta))&&Ve(this,Kt,Tr).call(this,{type:"fetch",meta:(h=l.fetchOptions)==null?void 0:h.meta});const c=p=>{var m,v,y,x;eu(p)&&p.silent||Ve(this,Kt,Tr).call(this,{type:"error",error:p}),eu(p)||((v=(m=C(this,Pt).config).onError)==null||v.call(m,p,this),(x=(y=C(this,Pt).config).onSettled)==null||x.call(y,this.state.data,p,this)),this.scheduleGc()};return V(this,Je,Xb({initialPromise:r==null?void 0:r.initialPromise,fn:l.fetchFn,abort:n.abort.bind(n),onSuccess:p=>{var m,v,y,x;if(p===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(p)}catch(g){c(g);return}(v=(m=C(this,Pt).config).onSuccess)==null||v.call(m,p,this),(x=(y=C(this,Pt).config).onSettled)==null||x.call(y,p,this.state.error,this),this.scheduleGc()},onError:c,onFail:(p,m)=>{Ve(this,Kt,Tr).call(this,{type:"failed",failureCount:p,error:m})},onPause:()=>{Ve(this,Kt,Tr).call(this,{type:"pause"})},onContinue:()=>{Ve(this,Kt,Tr).call(this,{type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode,canRun:()=>!0})),C(this,Je).start()}},To=new WeakMap,ra=new WeakMap,Pt=new WeakMap,na=new WeakMap,Je=new WeakMap,di=new WeakMap,aa=new WeakMap,Kt=new WeakSet,Tr=function(t){const r=n=>{switch(t.type){case"failed":return{...n,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...nE(n.data,this.options),fetchMeta:t.meta??null};case"success":return V(this,ra,void 0),{...n,data:t.data,dataUpdateCount:n.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const o=t.error;return eu(o)&&o.revert&&C(this,ra)?{...C(this,ra),fetchStatus:"idle"}
vendor: 4,844 bytes, line 231
231:{...n,error:o,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error"};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...t.state}}};this.state=r(this.state),nt.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),C(this,Pt).notify({query:this,type:"updated",action:t})})},Yy);function nE(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Jb(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function aE(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=t!==void 0,n=r?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?n??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var ur,Ky,oE=(Ky=class extends Qc{constructor(t={}){super();se(this,ur);this.config=t,V(this,ur,new Map)}build(t,r,n){const o=r.queryKey,s=r.queryHash??yp(o,r);let i=this.get(s);return i||(i=new rE({client:t,queryKey:o,queryHash:s,options:t.defaultQueryOptions(r),state:n,defaultOptions:t.getQueryDefaults(o)}),this.add(i)),i}add(t){C(this,ur).has(t.queryHash)||(C(this,ur).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const r=C(this,ur).get(t.queryHash);r&&(t.destroy(),r===t&&C(this,ur).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){nt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return C(this,ur).get(t)}getAll(){return[...C(this,ur).values()]}find(t){const r={exact:!0,...t};return this.getAll().find(n=>Zg(r,n))}findAll(t={}){const r=this.getAll();return Object.keys(t).length>0?r.filter(n=>Zg(t,n)):r}notify(t){nt.batch(()=>{this.listeners.forEach(r=>{r(t)})})}onFocus(){nt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){nt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},ur=new WeakMap,Ky),hr,tt,oa,mr,Zr,Jy,sE=(Jy=class extends Zb{constructor(t){super();se(this,mr);se(this,hr);se(this,tt);se(this,oa);this.mutationId=t.mutationId,V(this,tt,t.mutationCache),V(this,hr,[]),this.state=t.state||iE(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){C(this,hr).includes(t)||(C(this,hr).push(t),this.clearGcTimeout(),C(this,tt).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){V(this,hr,C(this,hr).filter(r=>r!==t)),this.scheduleGc(),C(this,tt).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){C(this,hr).length||(this.state.status==="pending"?this.scheduleGc():C(this,tt).remove(this))}continue(){var t;return((t=C(this,oa))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var s,i,l,c,d,u,h,p,m,v,y,x,g,f,w,k,j,S,N,_;const r=()=>{Ve(this,mr,Zr).call(this,{type:"continue"})};V(this,oa,Xb({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(P,O)=>{Ve(this,mr,Zr).call(this,{type:"failed",failureCount:P,error:O})},onPause:()=>{Ve(this,mr,Zr).call(this,{type:"pause"})},onContinue:r,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>C(this,tt).canRun(this)}));const n=this.state.status==="pending",o=!C(this,oa).canStart();try{if(n)r();else{Ve(this,mr,Zr).call(this,{type:"pending",variables:t,isPaused:o}),await((i=(s=C(this,tt).config).onMutate)==null?void 0:i.call(s,t,this));const O=await((c=(l=this.options).onMutate)==null?void 0:c.call(l,t));O!==this.state.context&&Ve(this,mr,Zr).call(this,{type:"pending",context:O,variables:t,isPaused:o})}const P=await C(this,oa).start();return await((u=(d=C(this,tt).config).onSuccess)==null?void 0:u.call(d,P,t,this.state.context,this)),await((p=(h=this.options).onSuccess)==null?void 0:p.call(h,P,t,this.state.context)),await((v=(m=C(this,tt).config).onSettled)==null?void 0:v.call(m,P,null,this.state.variables,this.state.context,this)),await((x=(y=this.options).onSettled)==null?void 0:x.call(y,P,null,t,this.state.context)),Ve(this,mr,Zr).call(this,{type:"success",data:P}),P}catch(P){try{throw await((f=(g=C(this,tt).config).onError)==null?void 0:f.call(g,P,t,this.state.context,this)),await((k=(w=this.options).onError)==null?void 0:k.call(w,P,t,this.state.context)),await((S=(j=C(this,tt).config).onSettled)==null?void 0:S.call(j,void 0,P,this.state.variables,this.state.context,this)),await((_=(N=this.options).onSettled)==null?void 0:_.call(N,void 0,P,t,this.state.context)),P}finally{Ve(this,mr,Zr).call(this,{type:"error",error:P})}}finally{C(this,tt).runNext(this)}}}
231,hr=new WeakMap,tt=new WeakMap,oa=new WeakMap,mr=new WeakSet,Zr=function(t){const r=n=>{switch(t.type){case"failed":return{...n,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...n,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:t.error,failureCount:n.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=r(this.state),nt.batch(()=>{C(this,hr).forEach(n=>{n.onMutationUpdate(t)}),C(this,tt).notify({mutation:this,type:"updated",action:t})})},Jy);function iE(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Ir,Jt,ui,Qy,lE=(Qy=class extends Qc{constructor(t={}){super();se(this,Ir);se(this,Jt);se(this,ui);this.config=t,V(this,Ir,new Set),V(this,Jt,new Map),V(this,ui,0)}build(t,r,n){const o=new sE({mutationCache:this,mutationId:++Ei(this,ui)._,options:t.defaultMutationOptions(r),state:n});return this.add(o),o}add(t){C(this,Ir).add(t);const r=Xi(t);if(typeof r=="string"){const n=C(this,Jt).get(r);n?n.push(t):C(this,Jt).set(r,[t])}this.notify({type:"added",mutation:t})}remove(t){if(C(this,Ir).delete(t)){const r=Xi(t);if(typeof r=="string"){const n=C(this,Jt).get(r);if(n)if(n.length>1){const o=n.indexOf(t);o!==-1&&n.splice(o,1)}else n[0]===t&&C(this,Jt).delete(r)}}this.notify({type:"removed",mutation:t})}canRun(t){const r=Xi(t);if(typeof r=="string"){const n=C(this,Jt).get(r),o=n==null?void 0:n.find(s=>s.state.status==="pending");return!o||o===t}else return!0}runNext(t){var n;const r=Xi(t);if(typeof r=="string"){const o=(n=C(this,Jt).get(r))==null?void 0:n.find(s=>s!==t&&s.state.isPaused);return(o==null?void 0:o.continue())??Promise.resolve()}else return Promise.resolve()}clear(){nt.batch(()=>{C(this,Ir).forEach(t=>{this.notify({type:"removed",mutation:t})}),C(this,Ir).clear(),C(this,Jt).clear()})}getAll(){return Array.from(C(this,Ir))}find(t){const r={exact:!0,...t};return this.getAll().find(n=>ey(r,n))}findAll(t={}){return this.getAll().filter(r=>ey(t,r))}notify(t){nt.batch(()=>{this.listeners.forEach(r=>{r(t)})})}resumePausedMutations(){const t=this.getAll().filter(r=>
vendor: 6,213 bytes, line 231
231r.state.isPaused);return nt.batch(()=>Promise.all(t.map(r=>r.continue().catch(Vt))))}},Ir=new WeakMap,Jt=new WeakMap,ui=new WeakMap,Qy);function Xi(e){var t;return(t=e.options.scope)==null?void 0:t.id}function ny(e){return{onFetch:(t,r)=>{var u,h,p,m,v;const n=t.options,o=(p=(h=(u=t.fetchOptions)==null?void 0:u.meta)==null?void 0:h.fetchMore)==null?void 0:p.direction,s=((m=t.state.data)==null?void 0:m.pages)||[],i=((v=t.state.data)==null?void 0:v.pageParams)||[];let l={pages:[],pageParams:[]},c=0;const d=async()=>{let y=!1;const x=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(t.signal.aborted?y=!0:t.signal.addEventListener("abort",()=>{y=!0}),t.signal)})},g=Yb(t.options,t.fetchOptions),f=async(w,k,j)=>{if(y)return Promise.reject();if(k==null&&w.pages.length)return Promise.resolve(w);const N=(()=>{const H={client:t.client,queryKey:t.queryKey,pageParam:k,direction:j?"backward":"forward",meta:t.options.meta};return x(H),H})(),_=await g(N),{maxPages:P}=t.options,O=j?K_:Y_;return{pages:O(w.pages,_,P),pageParams:O(w.pageParams,k,P)}};if(o&&s.length){const w=o==="backward",k=w?cE:ay,j={pages:s,pageParams:i},S=k(n,j);l=await f(j,S,w)}else{const w=e??s.length;do{const k=c===0?i[0]??n.initialPageParam:ay(n,l);if(c>0&&k==null)break;l=await f(l,k),c++}while(c<w)}return l};t.options.persister?t.fetchFn=()=>{var y,x;return(x=(y=t.options).persister)==null?void 0:x.call(y,d,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r)}:t.fetchFn=d}}}function ay(e,{pages:t,pageParams:r}){const n=t.length-1;return t.length>0?e.getNextPageParam(t[n],t,r[n],r):void 0}function cE(e,{pages:t,pageParams:r}){var n;return t.length>0?(n=e.getPreviousPageParam)==null?void 0:n.call(e,t[0],t,r[0],r):void 0}var Ce,cn,dn,_o,Eo,un,Io,Ao,Xy,dE=(Xy=class{constructor(e={}){se(this,Ce);se(this,cn);se(this,dn);se(this,_o);se(this,Eo);se(this,un);se(this,Io);se(this,Ao);V(this,Ce,e.queryCache||new oE),V(this,cn,e.mutationCache||new lE),V(this,dn,e.defaultOptions||{}),V(this,_o,new Map),V(this,Eo,new Map),V(this,un,0)}mount(){Ei(this,un)._++,C(this,un)===1&&(V(this,Io,Kb.subscribe(async e=>{e&&(await this.resumePausedMutations(),C(this,Ce).onFocus())})),V(this,Ao,uc.subscribe(async e=>{e&&(await this.resumePausedMutations(),C(this,Ce).onOnline())})))}unmount(){var e,t;Ei(this,un)._--,C(this,un)===0&&((e=C(this,Io))==null||e.call(this),V(this,Io,void 0),(t=C(this,Ao))==null||t.call(this),V(this,Ao,void 0))}isFetching(e){return C(this,Ce).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return C(this,cn).findAll({...e,status:"pending"}).length}getQueryData(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=C(this,Ce).get(t.queryHash))==null?void 0:r.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),r=C(this,Ce).build(this,t),n=r.state.data;return n===void 0?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(bh(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return C(this,Ce).findAll(e).map(({queryKey:t,state:r})=>{const n=r.data;return[t,n]})}setQueryData(e,t,r){const n=this.defaultQueryOptions({queryKey:e}),o=C(this,Ce).get(n.queryHash),s=o==null?void 0:o.state.data,i=G_(t,s);if(i!==void 0)return C(this,Ce).build(this,n).setData(i,{...r,manual:!0})}setQueriesData(e,t,r){return nt.batch(()=>C(this,Ce).findAll(e).map(({queryKey:n})=>[n,this.setQueryData(n,t,r)]))}getQueryState(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=C(this,Ce).get(t.queryHash))==null?void 0:r.state}removeQueries(e){const t=C(this,Ce);nt.batch(()=>{t.findAll(e).forEach(r=>{t.remove(r)})})}resetQueries(e,t){const r=C(this,Ce);return nt.batch(()=>(r.findAll(e).forEach(n=>{n.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const r={revert:!0,...t},n=nt.batch(()=>C(this,Ce).findAll(e).map(o=>o.cancel(r)));return Promise.all(n).then(Vt).catch(Vt)}invalidateQueries(e,t={}){return nt.batch(()=>(C(this,Ce).findAll(e).forEach(r=>{r.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const r={...t,cancelRefetch:t.cancelRefetch??!0},n=nt.batch(()=>C(this,Ce).findAll(e).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let s=o.fetch(void 0,r);return r.throwOnError||(s=s.catch(Vt)),o.state.fetchStatus==="paused"?Promise.resolve():s}));return Promise.all(n).then(Vt)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const r=C(this,Ce).build(this,t);return r.isStaleByTime(bh(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Vt).catch(Vt)}fetchInfiniteQuery(e){return e.behavior=ny(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Vt).catch(Vt)}ensureInfiniteQueryData(e){return e.behavior=ny(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return uc.isOnline()?C(this,cn).resumePausedMutations():Promise.resolve()}getQueryCache(){return C(this,Ce)}getMutationCache(){return C(this,cn)}getDefaultOptions(){return C(this,dn)}setDefaultOptions(e){V(this,dn,e)}setQueryDefaults(e,t){C(this,_o).set(ai(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...C(this,_o).values()],r={};return t.forEach(n=>{oi(e,n.queryKey)&&Object.assign(r,n.defaultOptions)}),r}setMutationDefaults(e,t){C(this,Eo).set(ai(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...C(this,Eo).values()],r={};return t.forEach(n=>{oi(e,n.mutationKey)&&Object.assign(r,n.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;const t={...C(this,dn).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=yp(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===vp&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...C(this,dn).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}
vendor: 5,701 bytes, lines 231-240
231clear(){C(this,Ce).clear(),C(this,cn).clear()}},Ce=new WeakMap,cn=new WeakMap,dn=new WeakMap,_o=new WeakMap,Eo=new WeakMap,un=new WeakMap,Io=new WeakMap,Ao=new WeakMap,Xy),uE=b.createContext(void 0),hE=({client:e,children:t})=>(b.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),a.jsx(uE.Provider,{value:e,children:t}));/**
232 * @remix-run/router v1.23.0
233 *
234 * Copyright (c) Remix Software Inc.
235 *
236 * This source code is licensed under the MIT license found in the
237 * LICENSE.md file in the root directory of this source tree.
238 *
239 * @license MIT
240 */function si(){return si=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},si.apply(this,arguments)}var fn;(function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"})(fn||(fn={}));const oy="popstate";function mE(e){e===void 0&&(e={});function t(n,o){let{pathname:s,search:i,hash:l}=n.location;return jh("",{pathname:s,search:i,hash:l},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function r(n,o){return typeof o=="string"?o:hc(o)}return fE(t,r,null,e)}function Ie(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function e0(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function pE(){return Math.random().toString(36).substr(2,8)}function sy(e,t){return{usr:e.state,key:e.key,idx:t}}function jh(e,t,r,n){return r===void 0&&(r=null),si({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Xo(t):t,{state:r,key:t&&t.key||n||pE()})}function hc(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Xo(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function fE(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:s=!1}=n,i=o.history,l=fn.Pop,c=null,d=u();d==null&&(d=0,i.replaceState(si({},i.state,{idx:d}),""));function u(){return(i.state||{idx:null}).idx}function h(){l=fn.Pop;let x=u(),g=x==null?null:x-d;d=x,c&&c({action:l,location:y.location,delta:g})}function p(x,g){l=fn.Push;let f=jh(y.location,x,g);d=u()+1;let w=sy(f,d),k=y.createHref(f);try{i.pushState(w,"",k)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;o.location.assign(k)}s&&c&&c({action:l,location:y.location,delta:1})}function m(x,g){l=fn.Replace;let f=jh(y.location,x,g);d=u();let w=sy(f,d),k=y.createHref(f);i.replaceState(w,"",k),s&&c&&c({action:l,location:y.location,delta:0})}function v(x){let g=o.location.origin!=="null"?o.location.origin:o.location.href,f=typeof x=="string"?x:hc(x);return f=f.replace(/ $/,"%20"),Ie(g,"No window.location.(origin|href) available to create URL for href: "+f),new URL(f,g)}let y={get action(){return l},get location(){return e(o,i)},listen(x){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(oy,h),c=x,()=>{o.removeEventListener(oy,h),c=null}},createHref(x){return t(o,x)},createURL:v,encodeLocation(x){let g=v(x);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:m,go(x){return i.go(x)}};return y}var iy;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(iy||(iy={}));function gE(e,t,r){return r===void 0&&(r="/"),yE(e,t,r,!1)}function yE(e,t,r,n){let o=typeof t=="string"?Xo(t):t,s=wp(o.pathname||"/",r);if(s==null)return null;let i=t0(e);vE(i);let l=null;for(let c=0;l==null&&c<i.length;++c){let d=EE(s);l=TE(i[c],d,n)}return l}function t0(e,t,r,n){t===void 0&&(t=[]),r===void 0&&(r=[]),n===void 0&&(n="");let o=(s,i,l)=>{let c={relativePath:l===void 0?s.path||"":l,caseSensitive:s.caseSensitive===!0,childrenIndex:i,route:s};c.relativePath.startsWith("/")&&(Ie(c.relativePath.startsWith(n),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(n.length));let d=Sn([n,c.relativePath]),u=r.concat(c);s.children&&s.children.length>0&&(Ie(s.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+d+'".')),t0(s.children,t,u,d)),!(s.path==null&&!s.index)&&t.push({path:d,score:NE(d,s.index),routesMeta:u})};return e.forEach((s,i)=>{var l;if(s.path===""||!((l=s.path)!=null&&l.includes("?")))o(s,i);else for(let c of r0(s.path))o(s,i,c)}),t}function r0(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),s=r.replace(/\?$/,"");if(n.length===0)return o?[s,""]:[s];let i=r0(n.join("/")),l=[];return l.push(...i.map(c=>c===""?s:[s,c].join("/"))),o&&l.push(...i),l.map(c=>e.startsWith("/")&&c===""?"/":c)}function vE(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:CE(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const wE=/^:[\w-]+$/,xE=3,bE=2,kE=1,jE=10,SE=-2,ly=e=>e==="*";function NE(e,t){let r=e.split("/"),n=r.length;return r.some(ly)&&(n+=SE),t&&(n+=bE),r.filter(o=>!ly(o)).reduce((o,s)=>o+(wE.test(s)?xE:s===""?kE:jE),n)}function CE(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function TE(e,t,r){let{routesMeta:n}=e,o={},s="/",i=[];for(let l=0;l<n.length;++l){let c=n[l],d=l===n.length-1,u=s==="/"?t:t.slice(s.length)||"/",h=cy({path:c.relativePath,caseSensitive:c.caseSensitive,end:d},u),p=c.route;if(!h&&d&&r&&!n[n.length-1].route.index&&(h=cy({path:c.relativePath,caseSensitive:c.caseSensitive,end:!1},u)),!h)return null;
vendor: 9,263 bytes, lines 240-249
240Object.assign(o,h.params),i.push({params:o,pathname:Sn([s,h.pathname]),pathnameBase:PE(Sn([s,h.pathnameBase])),route:p}),h.pathnameBase!=="/"&&(s=Sn([s,h.pathnameBase]))}return i}function cy(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[r,n]=_E(e.path,e.caseSensitive,e.end),o=t.match(r);if(!o)return null;let s=o[0],i=s.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:n.reduce((d,u,h)=>{let{paramName:p,isOptional:m}=u;if(p==="*"){let y=l[h]||"";i=s.slice(0,s.length-y.length).replace(/(.)\/+$/,"$1")}const v=l[h];return m&&!v?d[p]=void 0:d[p]=(v||"").replace(/%2F/g,"/"),d},{}),pathname:s,pathnameBase:i,pattern:e}}function _E(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),e0(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,l,c)=>(n.push({paramName:l,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function EE(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return e0(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function wp(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function IE(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?Xo(e):e;return{pathname:r?r.startsWith("/")?r:AE(r,t):t,search:OE(n),hash:DE(o)}}function AE(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function tu(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"].  Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function RE(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function xp(e,t){let r=RE(e);return t?r.map((n,o)=>o===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function bp(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=Xo(e):(o=si({},e),Ie(!o.pathname||!o.pathname.includes("?"),tu("?","pathname","search",o)),Ie(!o.pathname||!o.pathname.includes("#"),tu("#","pathname","hash",o)),Ie(!o.search||!o.search.includes("#"),tu("#","search","hash",o)));let s=e===""||o.pathname==="",i=s?"/":o.pathname,l;if(i==null)l=r;else{let h=t.length-1;if(!n&&i.startsWith("..")){let p=i.split("/");for(;p[0]==="..";)p.shift(),h-=1;o.pathname=p.join("/")}l=h>=0?t[h]:"/"}let c=IE(o,l),d=i&&i!=="/"&&i.endsWith("/"),u=(s||i===".")&&r.endsWith("/");return!c.pathname.endsWith("/")&&(d||u)&&(c.pathname+="/"),c}const Sn=e=>e.join("/").replace(/\/\/+/g,"/"),PE=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),OE=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,DE=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function LE(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const n0=["post","put","patch","delete"];new Set(n0);const WE=["get",...n0];new Set(WE);/**
241 * React Router v6.30.1
242 *
243 * Copyright (c) Remix Software Inc.
244 *
245 * This source code is licensed under the MIT license found in the
246 * LICENSE.md file in the root directory of this source tree.
247 *
248 * @license MIT
249 */function ii(){return ii=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ii.apply(this,arguments)}const kp=b.createContext(null),ME=b.createContext(null),On=b.createContext(null),Zc=b.createContext(null),Gr=b.createContext({outlet:null,matches:[],isDataRoute:!1}),a0=b.createContext(null);function qE(e,t){let{relative:r}=t===void 0?{}:t;Zo()||Ie(!1);let{basename:n,navigator:o}=b.useContext(On),{hash:s,pathname:i,search:l}=s0(e,{relative:r}),c=i;return n!=="/"&&(c=i==="/"?n:Sn([n,i])),o.createHref({pathname:c,search:l,hash:s})}function Zo(){return b.useContext(Zc)!=null}function Dn(){return Zo()||Ie(!1),b.useContext(Zc).location}function o0(e){b.useContext(On).static||b.useLayoutEffect(e)}function jp(){let{isDataRoute:e}=b.useContext(Gr);return e?XE():zE()}function zE(){Zo()||Ie(!1);let e=b.useContext(kp),{basename:t,future:r,navigator:n}=b.useContext(On),{matches:o}=b.useContext(Gr),{pathname:s}=Dn(),i=JSON.stringify(xp(o,r.v7_relativeSplatPath)),l=b.useRef(!1);return o0(()=>{l.current=!0}),b.useCallback(function(d,u){if(u===void 0&&(u={}),!l.current)return;if(typeof d=="number"){n.go(d);return}let h=bp(d,JSON.parse(i),s,u.relative==="path");e==null&&t!=="/"&&(h.pathname=h.pathname==="/"?t:Sn([t,h.pathname])),(u.replace?n.replace:n.push)(h,u.state,u)},[t,n,i,s,e])}function Sp(){let{matches:e}=b.useContext(Gr),t=e[e.length-1];return t?t.params:{}}function s0(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=b.useContext(On),{matches:o}=b.useContext(Gr),{pathname:s}=Dn(),i=JSON.stringify(xp(o,n.v7_relativeSplatPath));return b.useMemo(()=>bp(e,JSON.parse(i),s,r==="path"),[e,i,s,r])}function $E(e,t){return GE(e,t)}function GE(e,t,r,n){Zo()||Ie(!1);let{navigator:o}=b.useContext(On),{matches:s}=b.useContext(Gr),i=s[s.length-1],l=i?i.params:{};i&&i.pathname;let c=i?i.pathnameBase:"/";i&&i.route;let d=Dn(),u;if(t){var h;let x=typeof t=="string"?Xo(t):t;c==="/"||(h=x.pathname)!=null&&h.startsWith(c)||Ie(!1),u=x}else u=d;let p=u.pathname||"/",m=p;if(c!=="/"){let x=c.replace(/^\//,"").split("/");m="/"+p.replace(/^\//,"").split("/").slice(x.length).join("/")}let v=gE(e,{pathname:m}),y=VE(v&&v.map(x=>Object.assign({},x,{params:Object.assign({},l,x.params),pathname:Sn([c,o.encodeLocation?o.encodeLocation(x.pathname).pathname:x.pathname]),pathnameBase:x.pathnameBase==="/"?c:Sn([c,o.encodeLocation?o.encodeLocation(x.pathnameBase).pathname:x.pathnameBase])})),s,r,n);return t&&y?b.createElement(Zc.Provider,{value:{location:ii({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:fn.Pop}},y):y}function BE(){let e=QE(),t=LE(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return b.createElement(b.Fragment,null,b.createElement("h2",null,"Unexpected Application Error!"),b.createElement("h3",{style:{fontStyle:"italic"}},t),r?b.createElement("pre",{style:o},r):null,null)}const HE=b.createElement(BE,null);class FE extends b.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?b.createElement(Gr.Provider,{value:this.props.routeContext},b.createElement(a0.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function UE(e){let{routeContext:t,match:r,children:n}=e,o=b.useContext(kp);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),b.createElement(Gr.Provider,{value:t},n)}function VE(e,t,r,n){var o;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var s;if(!r)return null;if(r.errors)e=r.matches;else if((s=n)!=null&&s.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,l=(o=r)==null?void 0:o.errors;if(l!=null){let u=i.findIndex(h=>h.route.id&&(l==null?void 0:l[h.route.id])!==void 0);u>=0||Ie(!1),i=i.slice(0,Math.min(i.length,u+1))}let c=!1,d=-1;if(r&&n&&n.v7_partialHydration)for(let u=0;u<i.length;u++){let h=i[u];if((h.route.HydrateFallback||h.route.hydrateFallbackElement)&&(d=u),h.route.id){let{loaderData:p,errors:m}=r,v=h.route.loader&&p[h.route.id]===void 0&&(!m||m[h.route.id]===void 0);if(h.route.lazy||v){c=!0,d>=0?i=i.slice(0,d+1):i=[i[0]];break}}}return i.reduceRight((u,h,p)=>{let m,v=!1,y=null,x=null;r&&(m=l&&h.route.id?l[h.route.id]:void 0,y=h.route.errorElement||HE,c&&(d<0&&p===0?(v=!0,x=null):d===p&&(v=!0,x=h.route.hydrateFallbackElement||null)));let g=t.concat(i.slice(0,p+1)),f=()=>{let w;return m?w=y:v?w=x:h.route.Component?w=b.createElement(h.route.Component,null):h.route.element?w=h.route.element:w=u,b.createElement(UE,{match:h,routeC
249ontext:{outlet:u,matches:g,isDataRoute:r!=null},children:w})};return r&&(h.route.ErrorBoundary||h.route.errorElement||p===0)?b.createElement(FE,{location:r.location,revalidation:r.revalidation,component:y,error:m,children:f(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):f()},null)}var i0=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(i0||{}),mc=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(mc||{});function YE(e){let t=b.useContext(kp);return t||Ie(!1),t}function KE(e){let t=b.useContext(ME);return t||Ie(!1),t}function JE(e){let t=b.useContext(Gr);return t||Ie(!1),t}function l0(e){let t=JE(),r=t.matches[t.matches.length-1];return r.route.id||Ie(!1),r.route.id}function QE(){var e;let t=b.useContext(a0),r=KE(mc.UseRouteError),n=l0(mc.UseRouteError);return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function XE(){let{router:e}=YE(i0.UseNavigateStable),t=l0(mc.UseNavigateStable),r=b.useRef(!1);return o0(()=>{r.current=!0}),b.useCallback(function(o,s){s===void 0&&(s={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,ii({fromRouteId:t},s)))},[e,t])}function ZE(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Np(e){let{to:t,replace:r,state:n,relative:o}=e;Zo()||Ie(!1);let{future:s,static:i}=b.useContext(On),{matches:l}=b.useContext(Gr),{pathname:c}=Dn(),d=jp(),u=bp(t,xp(l,s.v7_relativeSplatPath),c,o==="path"),h=JSON.stringify(u);return b.useEffect(()=>d(JSON.parse(h),{replace:r,state:n,relative:o}),[d,h,o,r,n]),null}function L(e){Ie(!1)}function eI(e){let{basename:t="/",children:r=null,location:n,navigationType:o=fn.Pop,navigator:s,static:i=!1,future:l}=e;Zo()&&Ie(!1);let c=t.replace(/^\/*/,"/"),d=b.useMemo(()=>({basename:c,navigator:s,static:i,future:ii({v7_relativeSplatPath:!1},l)}),[c,l,s,i]);typeof n=="string"&&(n=Xo(n));let{pathname:u="/",search:h="",hash:p="",state:m=null,key:v="default"}=n,y=b.useMemo(()=>{let x=wp(u,c);return x==null?null:{location:{pathname:x,search:h,hash:p,state:m,key:v},navigationType:o}},[c,u,h,p,m,v,o]);return y==null?null:b.createElement(On.Provider,{value:d},b.createElement(Zc.Provider,{children:r,value:y}))}function tI(e){let{children:t,location:r}=e;return $E(Sh(t),r)}new Promise(()=>{});function Sh(e,t){t===void 0&&(t=[]);let r=[];return b.Children.forEach(e,(n,o)=>{if(!b.isValidElement(n))return;let s=[...t,o];if(n.type===b.Fragment){r.push.apply(r,Sh(n.props.children,s));return}n.type!==L&&Ie(!1),!n.props.index||!n.props.children||Ie(!1);let i={id:n.props.id||s.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=Sh(n.props.children,s)),r.push(i)}),r}/**
250 * React Router DOM v6.30.1
251 *
252 * Copyright (c) Remix Software Inc.
253 *
254 * This source code is licensed under the MIT license found in the
255 * LICENSE.md file in the root directory of this source tree.
256 *
257 * @license MIT
258 */function Nh(){return Nh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Nh.apply(this,arguments)}function rI(e,t){if(e==null)return{};var r={},n=Object.keys(e),o,s;for(s=0;s<n.length;s++)o=n[s],!(t.indexOf(o)>=0)&&(r[o]=e[o]);return r}function nI(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function aI(e,t){return e.button===0&&(!t||t==="_self")&&!nI(e)}const oI=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],sI="6";try{window.__reactRouterVersion=sI}catch{}const iI="startTransition",dy=cm[iI];function lI(e){let{basename:t,children:r,future:n,window:o}=e,s=b.useRef();s.current==null&&(s.current=mE({window:o,v5Compat:!0}));let i=s.current,[l,c]=b.useState({action:i.action,location:i.location}),{v7_startTransition:d}=n||{},u=b.useCallback(h=>{d&&dy?dy(()=>c(h)):c(h)},[c,d]);return b.useLayoutEffect(()=>i.listen(u),[i,u]),b.useEffect(()=>ZE(n),[n]),b.createElement(eI,{basename:t,children:r,location:l.location,navigationType:l.action,navigator:i,future:n})}const cI=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",dI=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,A=b.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:s,replace:i,state:l,target:c,to:d,preventScrollReset:u,viewTransition:h}=t,p=rI(t,oI),{basename:m}=b.useContext(On),v,y=!1;
vendor: 2,418 bytes, line 258
258if(typeof d=="string"&&dI.test(d)&&(v=d,cI))try{let w=new URL(window.location.href),k=d.startsWith("//")?new URL(w.protocol+d):new URL(d),j=wp(k.pathname,m);k.origin===w.origin&&j!=null?d=j+k.search+k.hash:y=!0}catch{}let x=qE(d,{relative:o}),g=uI(d,{replace:i,state:l,target:c,preventScrollReset:u,relative:o,viewTransition:h});function f(w){n&&n(w),w.defaultPrevented||g(w)}return b.createElement("a",Nh({},p,{href:v||x,onClick:y||s?n:f,ref:r,target:c}))});var uy;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(uy||(uy={}));var hy;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(hy||(hy={}));function uI(e,t){let{target:r,replace:n,state:o,preventScrollReset:s,relative:i,viewTransition:l}=t===void 0?{}:t,c=jp(),d=Dn(),u=s0(e,{relative:i});return b.useCallback(h=>{if(aI(h,r)){h.preventDefault();let p=n!==void 0?n:hc(d)===hc(u);c(e,{replace:p,state:o,preventScrollReset:s,relative:i,viewTransition:l})}},[d,c,u,n,o,r,e,s,i,l])}const hI=Jx("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold ring-offset-background transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-gold-dark shadow-gold hover:shadow-lg",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border-2 border-primary bg-transparent text-primary hover:bg-primary hover:text-primary-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-slate-dark",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline",hero:"bg-primary text-primary-foreground hover:bg-gold-dark shadow-gold hover:shadow-lg text-base font-bold uppercase tracking-wide",heroOutline:"border-2 border-secondary-foreground bg-transparent text-secondary-foreground hover:bg-secondary-foreground hover:text-secondary text-base font-bold uppercase tracking-wide"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-12 rounded-md px-8",xl:"h-14 roun
258ded-lg px-10 text-lg",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),re=b.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const i=n?MN:"button";return a.jsx(i,{className:_t(hI({variant:t,size:r,className:e})),ref:s,...o})});re.displayName="Button";const c0="/assets/logo-DvESy251.png",de=()=>{const[e,t]=b.useState(!1),r=jp(),n=Dn(),o=l=>{if(t(!1),n.pathname!=="/")r("/"),setTimeout(()=>{const c=document.getElementById(l);c&&c.scrollIntoView({behavior:"smooth"})},100);else{const c=document.getElementById(l);c&&c.scrollIntoView({behavior:"smooth"})}},s=l=>{if(t(!1),l.startsWith("/#")){const c=l.replace("/#","");o(c)}else r(l)},i=[{name:"Home",href:"/"},{name:"About Us",href:"/about"},{name:"Services",href:"/#services"},{name:"Gallery",href:"/gallery"},{name:"FAQ",href:"/faq"},{name:"Blog",href:"/blog"},{name:"Contact",href:"/contact"}];return a.jsxs("header",{className:"fixed top-0 left-0 right-0 z-50 bg-card/95 backdrop-blur-md shadow-card",children:[a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"flex items-center justify-between h-20",children:[a.jsxs(A,{to:"/",className:"flex items-center gap-3",children:[a.jsx("img",{src:c0,alt:"Professional Garage Door Services",className:"w-12 h-12 object-contain"}),a.jsx("span",{className:"hidden sm:block font-heading text-lg font-bold text-foreground",children:"Professional Garage Door Services"})]}),a.jsx("nav",{className:"hidden lg:flex items-center gap-8",children:i.map(l=>a.jsx("button",{onClick:()=>s(l.href),className:"font-semibold text-foreground hover:text-primary transition-colors duration-300 bg-transparent border-none cursor-pointer",children:l.name},l.name))}),a.jsxs("div",{className:"hidden lg:flex items-center gap-4",children:[a.jsxs("a",{href:"tel:+18882854021",className:"flex items-center gap-2 text-secondary font-bold",children:[a.jsx(et,{className:"w-5 h-5"}
vendor: 5,004 bytes, line 258
258),"(888) 285-4021"]}),a.jsx(re,{variant:"default",size:"lg",onClick:()=>o("contact"),children:"Free Quote"})]}),a.jsx("button",{className:"lg:hidden p-2",onClick:()=>t(!e),"aria-label":"Toggle menu",children:e?a.jsx(ab,{className:"w-6 h-6 text-foreground"}):a.jsx(LC,{className:"w-6 h-6 text-foreground"})})]})}),e&&a.jsx("div",{className:"lg:hidden bg-card border-t border-border animate-fade-in",children:a.jsxs("nav",{className:"container mx-auto px-4 py-6 flex flex-col gap-4",children:[i.map(l=>a.jsx("button",{onClick:()=>s(l.href),className:"font-semibold text-foreground hover:text-primary py-2 transition-colors text-left bg-transparent border-none cursor-pointer",children:l.name},l.name)),a.jsxs("div",{className:"pt-4 border-t border-border",children:[a.jsxs("a",{href:"tel:+18882854021",className:"flex items-center gap-2 text-secondary font-bold mb-4",children:[a.jsx(et,{className:"w-5 h-5"}),"(888) 285-4021"]}),a.jsx(re,{variant:"default",size:"lg",className:"w-full",onClick:()=>o("contact"),children:"Free Quote"})]})]})})]})};function mI(e){const t=b.useRef({value:e,previous:e});return b.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var ed="Checkbox",[pI,zD]=ba(ed),[fI,Cp]=pI(ed);function gI(e){const{__scopeCheckbox:t,checked:r,children:n,defaultChecked:o,disabled:s,form:i,name:l,onCheckedChange:c,required:d,value:u="on",internal_do_not_use_render:h}=e,[p,m]=xi({prop:r,defaultProp:o??!1,onChange:c,caller:ed}),[v,y]=b.useState(null),[x,g]=b.useState(null),f=b.useRef(!1),w=v?!!i||!!v.closest("form"):!0,k={checked:p,disabled:s,setChecked:m,control:v,setControl:y,name:l,form:i,value:u,hasConsumerStoppedPropagationRef:f,required:d,defaultChecked:Nn(o)?!1:o,isFormControl:w,bubbleInput:x,setBubbleInput:g};return a.jsx(fI,{scope:t,...k,children:yI(h)?h(k):n})}var d0="CheckboxTrigger",u0=b.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:r,...n},o)=>{const{control:s,value:i,disabled:l,checked:c,required:d,setControl:u,setChecked:h,hasConsumerStoppedPropagationRef:p,isFormControl:m,bubbleInput:v}=Cp(d0,e),y=st(o,u),x=b.useRef(c);return b.useEffect(()=>{const g=s==null?void 0:s.form;if(g){const f=()=>h(x.current);return g.addEventListener("reset",f),()=>g.removeEventListener("reset",f)}},[s,h]),a.jsx(_e.button,{type:"button",role:"checkbox","aria-checked":Nn(c)?"mixed":c,"aria-required":d,"data-state":g0(c),"data-disabled":l?"":void 0,disabled:l,value:i,...n,ref:y,onKeyDown:je(t,g=>{g.key==="Enter"&&g.preventDefault()}),onClick:je(r,g=>{h(f=>Nn(f)?!0:!f),v&&m&&(p.current=g.isPropagationStopped(),p.current||g.stopPropagation())})})});u0.displayName=d0;var Tp=b.forwardRef((e,t)=>{const{__scopeCheckbox:r,name:n,checked:o,defaultChecked:s,required:i,disabled:l,value:c,onCheckedChange:d,form:u,...h}=e;return a.jsx(gI,{__scopeCheckbox:r,checked:o,defaultChecked:s,disabled:l,required:i,onCheckedChange:d,name:n,form:u,value:c,internal_do_not_use_render:({isFormControl:p})=>a.jsxs(a.Fragment,{children:[a.jsx(u0,{...h,ref:t,__scopeCheckbox:r}),p&&a.jsx(f0,{__scopeCheckbox:r})]})})});Tp.displayName=ed;var h0="CheckboxIndicator",m0=b.forwardRef((e,t)=>{const{__scopeCheckbox:r,forceMount:n,...o}=e,s=Cp(h0,r);return a.jsx(wi,{present:n||Nn(s.checked)||s.checked===!0,children:a.jsx(_e.span,{"data-state":g0(s.checked),"data-disabled":s.disabled?"":void 0,...o,ref:t,style:{pointerEvents:"none",...e.style}})})});m0.displayName=h0;var p0="CheckboxBubbleInput",f0=b.forwardRef(({__scopeCheckbox:e,...t},r)=>{const{control:n,hasConsumerStoppedPropagationRef:o,checked:s,defaultChecked:i,required:l,disabled:c,name:d,value:u,form:h,bubbleInput:p,setBubbleInput:m}=Cp(p0,e),v=st(r,m),y=mI(s),x=_b(n);b.useEffect(()=>{const f=p;if(!f)return;const w=window.HTMLInputElement.prototype,j=Object.getOwnPropertyDescriptor(w,"checked").set,S=!o.current;if(y!==s&&j){const N=new Event("click",{bubbles:S});f.indeterminate=Nn(s),j.call(f,Nn(s)?!1:s),f.dispatchEvent(N)}},[p,y,s,o]);const g=b.useRef(Nn(s)?!1:s);return a.jsx(_e.input,{type:"checkbox","aria-hidden":!0,defaultChecked:i??g.current,required:l,disabled:c,name:d,value:u,form:h,...t,tabIndex:-1,ref:v,style:{...t.style,...x,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});f0.displayName=p0;function yI(e){return typeof e=="function"}function Nn(e){return e==="indeterminate"}function g0(e){return Nn(e)?"indeterminate":e?"checked":"unchecked"}const td=b.forwardRef(({className:e,...t},r)=>a.jsx(Tp,{ref:r,className:_t("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:a.jsx(m0,{className:_t("flex items-center justify-center text-current"),children:a.jsx(PC,{className:"h-4 w-4"})})}));td.displayName=Tp.displayName;var _p={},pc={}
vendor: 4,277 bytes, line 258
258,Ch=function(e,t){return Ch=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},Ch(e,t)};function y0(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Ch(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var fc=function(){return fc=Object.assign||function(t){for(var r,n=1,o=arguments.length;n<o;n++){r=arguments[n];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(t[s]=r[s])}return t},fc.apply(this,arguments)};function es(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]]);return r}function v0(e,t,r,n){var o=arguments.length,s=o<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,r):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(e,t,r,n);else for(var l=e.length-1;l>=0;l--)(i=e[l])&&(s=(o<3?i(s):o>3?i(t,r,s):i(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s}function w0(e,t){return function(r,n){t(r,n,e)}}function x0(e,t,r,n,o,s){function i(g){if(g!==void 0&&typeof g!="function")throw new TypeError("Function expected");return g}for(var l=n.kind,c=l==="getter"?"get":l==="setter"?"set":"value",d=!t&&e?n.static?e:e.prototype:null,u=t||(d?Object.getOwnPropertyDescriptor(d,n.name):{}),h,p=!1,m=r.length-1;m>=0;m--){var v={};for(var y in n)v[y]=y==="access"?{}:n[y];for(var y in n.access)v.access[y]=n.access[y];v.addInitializer=function(g){if(p)throw new TypeError("Cannot add initializers after decoration has completed");s.push(i(g||null))};var x=(0,r[m])(l==="accessor"?{get:u.get,set:u.set}:u[c],v);if(l==="accessor"){if(x===void 0)continue;if(x===null||typeof x!="object")throw new TypeError("Object expected");(h=i(x.get))&&(u.get=h),(h=i(x.set))&&(u.set=h),(h=i(x.init))&&o.unshift(h)}else(h=i(x))&&(l==="field"?o.unshift(h):u[c]=h)}d&&Object.defineProperty(d,n.name,u),p=!0}function b0(e,t,r){for(var n=arguments.length>2,o=0;o<t.length;o++)r=n?t[o].call(e,r):t[o].call(e);return n?r:void 0}function k0(e){return typeof e=="symbol"?e:"".concat(e)}function j0(e,t,r){return typeof t=="symbol"&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:r?"".concat(r," ",t):t})}function S0(e,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}function q(e,t,r,n){function o(s){return s instanceof r?s:new r(function(i){i(s)})}return new(r||(r=Promise))(function(s,i){function l(u){try{d(n.next(u))}catch(h){i(h)}}function c(u){try{d(n.throw(u))}catch(h){i(h)}}function d(u){u.done?s(u.value):o(u.value).then(l,c)}d((n=n.apply(e,t||[])).next())})}function N0(e,t){var r={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,o,s,i=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function l(d){return function(u){return c([d,u])}}function c(d){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,d[0]&&(r=0)),r;)try{if(n=1,o&&(s=d[0]&2?o.return:d[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,d[1])).done)return s;switch(o=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return r.label++,{value:d[1],done:!1};case 5:r.label++,o=d[1],d=[0];continue;case 7:d=r.ops.pop(),r.trys.pop();continue;default:if(s=r.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){r=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){r.label=d[1];break}if(d[0]===6&&r.label<s[1]){r.label=s[1],s=d;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(d);break}s[2]&&r.ops.pop(),r.trys.pop();continue}d=t.call(e,r)}catch(u){d=[6,u],o=0}finally{n=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}}var rd=Object.create?function(e,t,r,n){n===void 0&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);
vendor: 5,414 bytes, line 258
258(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]};function C0(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&rd(t,e,r)}function gc(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Ep(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,s=[],i;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)s.push(o.value)}catch(l){i={error:l}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return s}function T0(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(Ep(arguments[t]));return e}function _0(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;for(var n=Array(e),o=0,t=0;t<r;t++)for(var s=arguments[t],i=0,l=s.length;i<l;i++,o++)n[o]=s[i];return n}function E0(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,s;n<o;n++)(s||!(n in t))&&(s||(s=Array.prototype.slice.call(t,0,n)),s[n]=t[n]);return e.concat(s||Array.prototype.slice.call(t))}function Bo(e){return this instanceof Bo?(this.v=e,this):new Bo(e)}function I0(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),o,s=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),l("next"),l("throw"),l("return",i),o[Symbol.asyncIterator]=function(){return this},o;function i(m){return function(v){return Promise.resolve(v).then(m,h)}}function l(m,v){n[m]&&(o[m]=function(y){return new Promise(function(x,g){s.push([m,y,x,g])>1||c(m,y)})},v&&(o[m]=v(o[m])))}function c(m,v){try{d(n[m](v))}catch(y){p(s[0][3],y)}}function d(m){m.value instanceof Bo?Promise.resolve(m.value.v).then(u,h):p(s[0][2],m)}function u(m){c("next",m)}function h(m){c("throw",m)}function p(m,v){m(v),s.shift(),s.length&&c(s[0][0],s[0][1])}}function A0(e){var t,r;return t={},n("next"),n("throw",function(o){throw o}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(o,s){t[o]=e[o]?function(i){return(r=!r)?{value:Bo(e[o](i)),done:!1}:s?s(i):i}:s}}function R0(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof gc=="function"?gc(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(s){r[s]=e[s]&&function(i){return new Promise(function(l,c){i=e[s](i),o(l,c,i.done,i.value)})}}function o(s,i,l,c){Promise.resolve(c).then(function(d){s({value:d,done:l})},i)}}function P0(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var vI=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},Th=function(e){return Th=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},Th(e)};function O0(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=Th(e),n=0;n<r.length;n++)r[n]!=="default"&&rd(t,e,r[n]);return vI(t,e),t}function D0(e){return e&&e.__esModule?e:{default:e}}function L0(e,t,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(e):n?n.value:t.get(e)}function W0(e,t,r,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,r):o?o.value=r:t.set(e,r),r}function M0(e,t){if(t===null||typeof t!="object"&&typeof t!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof e=="function"?t===e:e.has(t)}function q0(e,t,r){if(t!=null){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object expected.");var n,o;if(r){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");n=t[Symbol.asyncDispose]}if(n===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");n=t[Symbol.dispose],r&&(o=n)}if(typeof n!="function")throw new TypeError("Object not disposable.");o&&(n=function(){try{o.call(this)}catch(s){return Promise.reject(s)}}),e.stack.push({value:t,dispose:n,async:r})}else r&&e.stack.push({async:!0});return t}var wI=typeof SuppressedError=="function"?SuppressedError:function(e,t,r){var n=new Error(r);return n.name="SuppressedError",n.error=e,n.suppressed=t,n};function z0(e){function t(s){e.error=e.hasError?new wI(s,e.error,"An error was suppressed during disposal."):s,e.hasError=!0}var r,n=0;function o(){for(;r=e.stack.pop();)try{if(!r.async&&n===1)return n=0,e.stack.push(r),Promise.resolve().then(o);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(o,function(i){return t(i),o()})}else n|=1}catch(i){t(i)}
258if(n===1)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}return o()}function $0(e,t){return typeof e=="string"&&/^\.\.?\//.test(e)?e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(r,n,o,s,i){return n?t?".jsx":".js":o&&(!s||!i)?r:o+s+"."+i.toLowerCase()+"js"}):e}const xI={__extends:y0,__assign:fc,__rest:es,__decorate:v0,__param:w0,__esDecorate:x0,__runInitializers:b0,__propKey:k0,__setFunctionName:j0,__metadata:S0,__awaiter:q,__generator:N0,__createBinding:rd,__exportStar:C0,__values:gc,__read:Ep,__spread:T0,__spreadArrays:_0,__spreadArray:E0,__await:Bo,__asyncGenerator:I0,__asyncDelegator:A0,__asyncValues:R0,__makeTemplateObject:P0,__importStar:O0,__importDefault:D0,__classPrivateFieldGet:L0,__classPrivateFieldSet:W0,__classPrivateFieldIn:M0,__addDisposableResource:q0,__disposeResources:z0,__rewriteRelativeImportExtension:$0},bI=Object.freeze(Object.defineProperty({__proto__:null,__addDisposableResource:q0,get __assign(){return fc},__asyncDelegator:A0,__asyncGenerator:I0,__asyncValues:R0,__await:Bo,__awaiter:q,__classPrivateFieldGet:L0,__classPrivateFieldIn:M0,__classPrivateFieldSet:W0,__createBinding:rd,__decorate:v0,__disposeResources:z0,__esDecorate:x0,__exportStar:C0,__extends:y0,__generator:N0,__importDefault:D0,__importStar:O0,__makeTemplateOb
258ject:P0,__metadata:S0,__param:w0,__propKey:k0,__read:Ep,__rest:es,__rewriteRelativeImportExtension:$0,__runInitializers:b0,__setFunctionName:j0,__spread:T0,__spreadArray:E0,__spreadArrays:_0,__values:gc,default:xI},Symbol.toStringTag,{value:"Module"})),kI=e=>e?(...t)=>e(...t):(...t)=>fetch(...t);let nd=class extends Error{constructor(t,r="FunctionsError",n){super(t),this.name=r,this.context=n}},G0=class extends nd{constructor(t){super("Failed to send a request to the Edge Function","FunctionsFetchError",t)}},_h=class extends nd{constructor(t){super("Relay Error invoking the Edge Function","FunctionsRelayError",t)}},Eh=class extends nd{constructor(t){super("Edge Function returned a non-2xx status code","FunctionsHttpError",t)}};var yc;(function(e){e.Any="any",e.ApNortheast1="ap-northeast-1",e.ApNortheast2="ap-northeast-2",e.ApSouth1="ap-south-1",e.ApSoutheast1="ap-southeast-1",e.ApSoutheast2="ap-southeast-2",e.CaCentral1="ca-central-1",e.EuCentral1="eu-central-1",e.EuWest1="eu-west-1",e.EuWest2="eu-west-2",e.EuWest3="eu-west-3",e.SaEast1="sa-east-1",e.UsEast1="us-east-1",e.UsWest1="us-west-1",e.UsWest2="us-west-2"})(yc||(yc={}));class jI{constructor(t,{headers:r={},customFetch:n,region:o=yc.Any}={}){this.url=t,this.headers=r,this.region=o,this.fetch=kI(n)}setAuth(t){this.headers.Authorization=`Bearer ${t}`}invoke(t){return q(this,arguments,void 0,function*(r,n={}){var o;let s,i;try{const{headers:l,method:c,body:d,signal:u,timeout:h}=n;let p={},{region:m}=n;m||(m=this.region);const v=new URL(`${this.url}/${r}`);m&&m!=="any"&&(p["x-region"]=m,v.searchParams.set("forceFunctionRegion",m));let y;d&&(l&&!Object.prototype.hasOwnProperty.call(l,"Content-Type")||!l)?typeof Blob<"u"&&d instanceof Blob||d instanceof ArrayBuffer?(p["Content-Type"]="application/octet-stream",y=d):typeof d=="string"?(p["Content-Type"]="text/plain",y=d):typeof FormData<"u"&&d instanceof FormData?y=d:(p["Content-Type"]="application/json",y=JSON.stringify(d)):y=d;let x=u;h&&(i=new AbortController,s=setTimeout(()=>i.abort(),h),u?(x=i.signal,u.addEventListener("abort",()=>i.abort())):x=i.signal);const g=yield this.fetch(v.toString(),{method:c||"POST",headers:Object.assign(Object.assign(Object.assign({},p),this.headers),l),body:y,signal:x}).catch(j=>{throw new G0(j)}),f=g.headers.get("x-relay-error");if(f&&f==="true")throw new _h(g);if(!g.ok)throw new Eh(g);let w=((o=g.headers.get("Content-Type"))!==null&&o!==void 0?o:"text/plain").split(";")[0].trim(),k;return w==="application/json"?k=yield g.json():w==="application/octet-stream"||w==="application/pdf"?k=yield g.blob():w==="text/event-stream"?k=g:w==="multipart/form-data"?k=yield g.formData():k=yield g.text(),{data:k,error:null,response:g}}catch(l){return{data:null,error:l,response:l instanceof Eh||l instanceof _h?l.context:void 0}}finally{s&&clearTimeout(s)}})}}const SI=Object.freeze(Object.defineProperty({__proto__:null,get FunctionRegion(){return yc},FunctionsClient:jI,FunctionsError:nd,FunctionsFetchError:G0,FunctionsHttpError:Eh,FunctionsRelayError:_h},Symbol.toStringTag,{value:"Module"})),B0=hi(SI);var Xe={};const ts=hi(bI);var Zi={},el={},tl={},rl={},nl={},al={},my;function H0(){if(my)return al;my=1,Object.defineProperty(al,"__esModule",{value:!0});class e extends Error{constructor(r){super(r.message),this.name="PostgrestError",this.details=r.details,this.hint=r.hint,this.co
258de=r.code}}return al.default=e,al}var py;function F0(){if(py)return nl;py=1,Object.defineProperty(nl,"__esModule",{value:!0});const t=ts.__importDefault(H0());let r=class{constructor(o){var s,i;this.shouldThrowOnError=!1,this.method=o.method,this.url=o.url,this.headers=new Headers(o.headers),this.schema=o.schema,this.body=o.body,this.shouldThrowOnError=(s=o.shouldThrowOnError)!==null&&s!==void 0?s:!1,this.signal=o.signal,this.isMaybeSingle=(i=o.isMaybeSingle)!==null&&i!==void 0?i:!1,o.fetch?this.fetch=o.fetch:this.fetch=fetch}throwOnError(){return this.shouldThrowOnError=!0,this}setHeader(o,s){return this.headers=new Headers(this.headers),this.headers.set(o,s),this}then(o,s){this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json");const i=this.fetch;let l=i(this.url.toString(),{method:this.method,headers:this.headers,body:JSON.stringify(this.body),signal:this.signal}).then(async c=>{var d,u,h,p;let m=null,v=null,y=null,x=c.status,g=c.statusText;if(c.ok){if(this.method!=="HEAD"){const j=await c.text();j===""||(this.headers.get("Accept")==="text/csv"||this.headers.get("Accept")&&(!((d=this.headers.get("Accept"))===null||d===void 0)&&d.includes("application/vnd.pgrst.plan+text"))?v=j:v=JSON.parse(j))}const w=(u=this.headers.get("Prefer"))===null||u===void 0?void 0:u.match(/count=(exact|planned|estimated)/),k=(h=c.headers.get("content-range"))===null||h===void 0?void 0:h.split("/");w&&k&&k.length>1&&(y=parseInt(k[1])),this.isMaybeSingle&&this.method==="GET"&&Array.isArray(v)&&(v.length>1?(m={code:"PGRST116",details:`Results contain ${v.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},v=null,y=null,x=406,g="Not Acceptable"):v.length===1?v=v[0]:v=null)}else{const w=await c.text();try{m=JSON.parse(w),Array.isArray(m)&&c.status===404&&(v=[],m=null,x=200,g="OK")}catch{c.status===404&&w===""?(x=204,g="No Content"):m={message:w}}if(m&&this.isMaybeSingle&&(!((p=m==null?void 0:m.details)===null||p===void 0)&&p.includes("0 rows"))&&(m=null,x=200,g="OK"),m&&this.shouldThrowOnError)throw new t.default(m)}return{error:m,data:v,count:y,status:x,statusText:g}});return this.shouldThrowOnError||(l=l.catch(c=>{var d,u,h,p,m,v;let y="";const x=c==null?void 0:c.cause;if(x){const g=(d=x==null?void 0:x.message)!==null&&d!==void 0?d:"",f=(u=x==null?void 0:x.code)!==null&&u!==void 0?u:"";y=`${(h=c==null?void 0:c.name)!==null&&h!==void 0?h:"FetchError"}: ${c==null?void 0:c.message}`,y+=`
259
260Caused by: ${(p=x==null?void 0:x.name)!==null&&p!==void 0?p:"Error"}: ${g}`,f&&(y+=` (${f})`),x!=null&&x.stack&&(y+=`
261${x.stack}`)}else y=(m=c==null?void 0:c.stack)!==null&&m!==void 0?m:"";return{error:{message:`${(v=c==null?void 0:c.name)!==null&&v!==void 0?v:"FetchError"}: ${c==null?void 0:c.message}`,details:y,hint:"",code:""},data:null,count:null,status:0,statusText:""}})),l.then(o,s)}returns(){return this}overrideTypes(){return this}};return nl.default=r,nl}var fy;function U0(){if(fy)return rl;fy=1,Object.defineProperty(rl,"__esModule",{value:!0});const t=ts.__importDefault(F0());let r=class extends t.default{select(o){let s=!1;const i=(o??"*").split("").map(l=>/\s/.test(l)&&!s?"":(l==='"'&&(s=!s),l)).join("");return this.url.searchParams.set("select",i),this.headers.append("Prefer","return=representation"),this}order(o,{ascending:s=!0,nullsFirst:i,foreignTable:l,referencedTable:c=l}={}){const d=c?`${c}.order`:"order",u=this.url.searchParams.get(d);return this.url.searchParams.set(d,`${u?`${u},`:""}${o}.${s?"asc":"desc"}${i===void 0?"":i?".nullsfirst":".nullslast"}`),this}limit(o,{foreignTable:s,referencedTable:i=s}={}){const l=typeof i>"u"?"limit":`${i}.limit`;return this.url.searchParams.set(l,`${o}`),this}range(o,s,{foreignTable:i,referencedTable:l=i}={}){const c=typeof l>"u"?"offset":`${l}.offset`,d=typeof l>"u"?"limit":`${l}.limit`;return this.url.searchParams.set(c,`${o}`),this.url.searchParams.set(d,`${s-o+1}`),this}abortSignal(o){return this.signal=o,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.method==="GET"?this.headers.set("Accept","application/json"):this.headers.set("Accept","application/vnd.pgrst.object+json"),this.isMaybeSingle=!0,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}
261explain({analyze:o=!1,verbose:s=!1,settings:i=!1,buffers:l=!1,wal:c=!1,format:d="text"}={}){var u;const h=[o?"analyze":null,s?"verbose":null,i?"settings":null,l?"buffers":null,c?"wal":null].filter(Boolean).join("|"),p=(u=this.headers.get("Accept"))!==null&&u!==void 0?u:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${d}; for="${p}"; options=${h};`),d==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(o){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${o}`),this}};return rl.default=r,rl}var gy;function Ip(){if(gy)return tl;gy=1,Object.defineProperty(tl,"__esModule",{value:!0});const t=ts.__importDefault(U0()),r=new RegExp("[,()]");let n=class extends t.default{eq(s,i){return this.url.searchParams.append(s,`eq.${i}`),this}neq(s,i){return this.url.searchParams.append(s,`neq.${i}`),this}gt(s,i){return this.url.searchParams.append(s,`gt.${i}`),this}gte(s,i){return this.url.searchParams.append(s,`gte.${i}`),this}lt(s,i){return this.url.searchParams.append(s,`lt.${i}`),this}lte(s,i){return this.url.searchParams.append(s,`lte.${i}`),this}like(s,i){return this.url.searchParams.append(s,`like.${i}`),this}likeAllOf(s,i){return this.url.searchParams.append(s,`like(all).{${i.join(",")}}`),this}likeAnyOf(s,i){return this.url.searchParams.append(s,`like(any).{${i.join(",")}}`),this}ilike(s,i){return this.url.searchParams.append(s,`ilike.${i}`),this}ilikeAllOf(s,i){return this.url.searchParams.append(s,`ilike(all).{${i.join(",")}}`),this}ilikeAnyOf(s,i){return this.url.searchParams.append(s,`ilike(any).{${i.join(",")}}`),this}regexMatch(s,i){return this.url.searchParams.append(s,`match.${i}`),this}regexIMatch(s,i){return this.url.searchParams.append(s,`imatch.${i}`),this}is(s,i){return this.url.searchParams.append(s,`is.${i}`),this}isDistinct(s,i){return this.url.searchParams.append(s,`isdistinct.${i}`),this}in(s,i){const l=Array.from(new Set(i)).map(c=>typeof c=="string"&&r.test(c)?`"${c}"`:`${c}`).join(",");return this.url.searchParams.append(s,`in.(${l})`),this}contains(s,i){return typeof i=="string"?this.url.searchParams.append(s,`cs.${i}`):Array.isArray(i)?this.url.searchParams.append(s,`cs.{${i.join(",")}}`):this.url.searchParams.append(s,`cs.${JSON.stringify(i)}`),this}containedBy(s,i){return typeof i=="string"?this.url.searchParams.append(s,`cd.${i}`):Array.isArray(i)?this.url.searchParams.append(s,`cd.{${i.join(",")}}`):this.url.searchParams.append(s,`cd.${JSON.stringify(i)}`),this}rangeGt(s,i){return this.url.searchParams.append(s,`sr.${i}`),this}rangeGte(s,i){return this.url.searchParams.append(s,`nxl.${i}`),this}rangeLt(s,i){return this.url.searchParams.append(s,`sl.${i}`),this}rangeLte(s,i){return this.url.searchParams.append(s,`nxr.${i}`),this}rangeAdjacent(s,i){return this.url.searchParams.append(s,`adj.${i}`),this}overlaps(s,i){return typeof i=="string"?this.url.searchParams.append(s,`ov.${i}`):this.url.searchParams.append(s,`ov.{${i.join(",")}}`),this}textSearch(s,i,{config:l,type:c}={}){let d="";c==="plain"?d="pl":c==="phrase"?d="ph":c==="websearch"&&(d="w");const u=l===void 0?"":`(${l})`;return this.url.searchParams.append(s,`${d}fts${u}.${i}`),this}match(s){return Object.entries(s).forEach(([i,l])=>{this.url.searchParams.append(i,`eq.${l}`)}),this}not(s,i,l){return this.url.searchParams.append(s,`not.${i}.${l}`),this}or(s,{foreignTable:i,referencedTable:l=i}={}){const c=l?`${l}.or`:"or";return this.url.searchParams.append(c,`(${s})`),this}filter(s,i,l){return this.url.searchParams.append(s,`${i}.${l}`),this}};return tl.default=n,tl}var yy;function V0(){if(yy)return el;
261yy=1,Object.defineProperty(el,"__esModule",{value:!0});const t=ts.__importDefault(Ip());let r=class{constructor(o,{headers:s={},schema:i,fetch:l}){this.url=o,this.headers=new Headers(s),this.schema=i,this.fetch=l}select(o,s){const{head:i=!1,count:l}=s??{},c=i?"HEAD":"GET";let d=!1;const u=(o??"*").split("").map(h=>/\s/.test(h)&&!d?"":(h==='"'&&(d=!d),h)).join("");return this.url.searchParams.set("select",u),l&&this.headers.append("Prefer",`count=${l}`),new t.default({method:c,url:this.url,headers:this.headers,schema:this.schema,fetch:this.fetch})}insert(o,{count:s,defaultToNull:i=!0}={}){var l;const c="POST";if(s&&this.headers.append("Prefer",`count=${s}`),i||this.headers.append("Prefer","missing=default"),Array.isArray(o)){const d=o.reduce((u,h)=>u.concat(Object.keys(h)),[]);if(d.length>0){const u=[...new Set(d)].map(h=>`"${h}"`);this.url.searchParams.set("columns",u.join(","))}}return new t.default({method:c,url:this.url,headers:this.headers,schema:this.schema,body:o,fetch:(l=this.fetch)!==null&&l!==void 0?l:fetch})}upsert(o,{onConflict:s,ignoreDuplicates:i=!1,count:l,defaultToNull:c=!0}={}){var d;const u="POST";if(this.headers.append("Prefer",`resolution=${i?"ignore":"merge"}-duplicates`),s!==void 0&&this.url.searchParams.set("on_conflict",s),l&&this.headers.append("Prefer",`count=${l}`),c||this.headers.append("Prefer","missing=default"),Array.isArray(o)){const h=o.reduce((p,m)=>p.concat(Object.keys(m)),[]);if(h.length>0){const p=[...new Set(h)].map(m=>`"${m}"`);this.url.searchParams.set("columns",p.join(","))}}return new t.default({method:u,url:this.url,headers:this.headers,schema:this.schema,body:o,fetch:(d=this.fetch)!==null&&d!==void 0?d:fetch})}update(o,{count:s}={}){var i;const l="PATCH";return s&&this.headers.append("Prefer",`count=${s}`),new t.default({method:l,url:this.url,headers:this.headers,schema:this.schema,body:o,fetch:(i=this.fetch)!==null&&i!==void 0?i:fetch})}delete({count:o}={}){var s;const i="DELETE";return o&&this.headers.append("Prefer",`count=${o}`),new t.default({method:i,url:this.url,headers:this.headers,schema:this.schema,fetch:(s=this.fetch)!==null&&s!==void 0?s:fetch})}};return el.default=r,el}var vy;function NI(){if(vy)return Zi;vy=1,Object.defineProperty(Zi,"__esModule",{value:!0});const e=ts,t=e.__importDefault(V0()),r=e.__importDefault(Ip());let n=class Y0{constructor(s,{headers:i={},schema:l,fetch:c}={}){this.url=s,this.headers=new Headers(i),this.schemaName=l,this.fetch=c}from(s){if(!s||typeof s!="string"||s.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");const i=new URL(`${this.url}/${s}`);return new t.default(i,{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch})}schema(s){return new Y0(this.url,{headers:this.headers,schema:s,fetch:this.fetch})}rpc(s,i={},{head:l=!1,get:c=!1,count:d}={}){var u;let h;const p=new URL(`${this.url}/rpc/${s}`);let m;l||c?(h=l?"HEAD":"GET",Object.entries(i).filter(([y,x])=>x!==void 0).map(([y,x])=>[y,Array.isArray(x)?`{${x.join(",")}}`:`${x}`]).forEach(([y,x])=>{p.searchParams.append(y,x)})):(h="POST",m=i);const v=new Headers(this.headers);return d&&v.set("Prefer",`count=${d}`),new r.default({method:h,url:p,headers:v,schema:this.schemaName,body:m,fetch:(u=this.fetch)!==null&&u!==void 0?u:fetch})}};return Zi.default=n,Zi}Object.defineProperty(Xe,"__esModule",{value:!0});Xe.PostgrestError=Xe.PostgrestBuilder=Xe.PostgrestTransformBuilder=Xe.PostgrestFilterBuilder=Xe.PostgrestQueryBuilder=Xe.PostgrestClient=void 0;const rs=ts,K0=rs.__importDefault(NI());Xe.PostgrestClient=K0.default;const J0=rs.__importDefault(V0());Xe.PostgrestQueryBuilder=J0.default;const Q0=rs.__importDefault(Ip());Xe.PostgrestFilterBuilder=Q0.default;const X0=rs.__importDefault(U0());Xe.PostgrestTransformBuilder=X0.default;const Z0=rs.__importDefault(F0());Xe.PostgrestBuilder=Z0.default;const ek=rs.__importDefault(H0());Xe.PostgrestError=ek.default;Xe.default={PostgrestClient:K0.default,PostgrestQueryBuilder:J0.default,PostgrestFilterBuilder:Q0.default,PostgrestTransformBuilder:X0.default,PostgrestBuilder:Z0.default,PostgrestError:ek.default};class tk{constructor(){}static detectEnvironment(){var t;if(typeof WebSocket<"u")return{type:"native",constructor:WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocket<"u")return{type:"native",constructor:globalThis.WebSocket};if(typeof global<"u"&&typeof global.WebSocket<"u")return{type:"native",constructor:global.WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return{type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&globalThis.EdgeRuntime||typeof navigator<"u"&&(!((t=navigator.userAgent)===null||t===void 0)&&t.includes("Vercel-Edge")))return{type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};if(typeof process<"u"){const r=process.versions;if(r&&r.node){const n=r.node,o=parseInt(n.replace(/^v/,"").split(".")[0]);return o>=22?typeof globalThis.WebSocket<"u"?{type:"native",constructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${o} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${o} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
262import ws from "ws"
263new RealtimeClient(url, { transport: ws })`}}}return{type:"unsupported",error:"Unknown JavaScript runtime without WebSocket support.",workaround:"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation."}}static getWebSocketConstructor(){const t=this.detectEnvironment();if(t.constructor)return t.constructor;let r=t.error||"WebSocket not supported in this environment.";throw t.workaround&&(r+=`
264
265Suggested solution: ${t.workaround}`),new Error(r)}static createWebSocket(t,r){const n=this.getWebSocketConstructor();return new n(t,r)}static isWebSocketSupported(){try{const t=this.detectEnvironment();return t.type==="native"||t.type==="ws"}catch{return!1}}}const CI="2.87.1",TI=`realtime-js/${CI}`,rk="1.0.0",_I="2.0.0",wy=rk,Ih=1e4,EI=1e3,II=100;var Vn;(function(e){e[e.connecting=0]="connecting",e[e.open=1]="open",e[e.closing=2]="closing",e[e.closed=3]="closed"})(Vn||(Vn={}));var Re;(function(e){e.closed="closed",e.errored="errored",e.joined="joined",e.joining="joining",e.leaving="leaving"})(Re||(Re={}));var Xt;(function(e){e.close="phx_close",e.error="phx_error",e.join="phx_join",e.reply="phx_reply",e.leave="phx_leave",e.access_token="access_token"})(Xt||(Xt={}));var Ah;(function(e){e.websocket="websocket"})(Ah||(Ah={}));var Yn;(function(e){e.Connecting="connecting",e.Open="open",e.Closing="closing",e.Closed="closed"})(Yn||(Yn={}));class AI{constructor(t){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=t??[]}encode(t,r){if(t.event===this.BROADCAST_EVENT&&!(t.payload instanceof ArrayBuffer)&&typeof t.payload.event=="string")return r(this._binaryEncodeUserBroadcastPush(t));let n=[t.join_ref,t.ref,t.topic,t.event,t.payload];return r(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(t){var r;return this._isArrayBuffer((r=t.payload)===null||r===void 0?void 0:r.payload)?this._encodeBinaryUserBroadcastPush(t):this._encodeJsonUserBroadcastPush(t)}_encodeBinaryUserBroadcastPush(t){var r,n;const o=(n=(r=t.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:new ArrayBuffer(0);return this._encodeUserBroadcastPush(t,this.BINARY_ENCODING,o)}_encodeJsonUserBroadcastPush(t){var r,n;const o=(n=(r=t.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:{},i=new TextEncoder().encode(JSON.stringify(o)).buffer;return this._encodeUserBroadcastPush(t,this.JSON_ENCODING,i)}_encodeUserBroadcastPush(t,r,n){var o,s;const i=t.topic,l=(o=t.ref)!==null&&o!==void 0?o:"",c=(s=t.join_ref)!==null&&s!==void 0?s:"",d=t.payload.event,u=this.allowedMetadataKeys?this._pick(t.payload,this.allowedMetadataKeys):{},h=Object.keys(u).length===0?"":JSON.stringify(u);if(c.length>255)throw new Error(`joinRef length ${c.length} exceeds maximum of 255`);if(l.length>255)throw new Error(`ref length ${l.length} exceeds maximum of 255`);if(i.length>255)throw new Error(`topic length ${i.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`userEvent length ${d.length} exceeds maximum of 255`);if(h.length>255)throw new Error(`metadata length ${h.length} exceeds maximum of 255`);const p=this.USER_BROADCAST_PUSH_META_LENGTH+c.length+l.length+i.length+d.length+h.length,m=new ArrayBuffer(this.HEADER_LENGTH+p);let v=new DataView(m),y=0;v.setUint8(y++,this.KINDS.userBroadcastPush),v.setUint8(y++,c.length),v.setUint8(y++,l.length),v.setUint8(y++,i.length),v.setUint8(y++,d.length),v.setUint8(y++,h.length),v.setUint8(y++,r),Array.from(c,g=>v.setUint8(y++,g.charCodeAt(0))),Array.from(l,g=>v.setUint8(y++,g.charCodeAt(0))),Array.from(i,g=>v.setUint8(y++,g.charCodeAt(0))),Array.from(d,g=>v.setUint8(y++,g.charCodeAt(0))),Array.from(h,g=>v.setUint8(y++,g.charCodeAt(0)));var x=new Uint8Array(m.byteLength+n.byteLength);return x.set(new Uint8Array(m),0),x.set(new Uint8Array(n),m.byteLength),x.buffer}decode(t,r){if(this._isArrayBuffer(t)){let n=this._binaryDecode(t);return r(n)}if(typeof t=="string"){const n=JSON.parse(t),[o,s,i,l,c]=n;return r({join_ref:o,ref:s,topic:i,event:l,payload:c})}return r({})}_binaryDecode(t){const r=new DataView(t),n=r.getUint8(0),o=new TextDecoder;switch(n){case this.KINDS.userBroadcast:return this._decodeUserBroadcast(t,r,o)}}_decodeUserBroadcast(t,r,n){const o=r.getUint8(1),s=r.getUint8(2),i=r.getUint8(3),l=r.getUint8(4);let c=this.HEADER_LENGTH+4;
265const d=n.decode(t.slice(c,c+o));c=c+o;const u=n.decode(t.slice(c,c+s));c=c+s;const h=n.decode(t.slice(c,c+i));c=c+i;const p=t.slice(c,t.byteLength),m=l===this.JSON_ENCODING?JSON.parse(n.decode(p)):p,v={type:this.BROADCAST_EVENT,event:u,payload:m};return i>0&&(v.meta=JSON.parse(h)),{join_ref:null,ref:null,topic:d,event:this.BROADCAST_EVENT,payload:v}}_isArrayBuffer(t){var r;return t instanceof ArrayBuffer||((r=t==null?void 0:t.constructor)===null||r===void 0?void 0:r.name)==="ArrayBuffer"}_pick(t,r){return!t||typeof t!="object"?{}:Object.fromEntries(Object.entries(t).filter(([n])=>r.includes(n)))}}class nk{constructor(t,r){this.callback=t,this.timerCalc=r,this.timer=void 0,this.tries=0,this.callback=t,this.timerCalc=r}reset(){this.tries=0,clearTimeout(this.timer),this.timer=void 0}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}}var me;(function(e){e.abstime="abstime",e.bool="bool",e.date="date",e.daterange="daterange",e.float4="float4",e.float8="float8",e.int2="int2",e.int4="int4",e.int4range="int4range",e.int8="int8",e.int8range="int8range",e.json="json",e.jsonb="jsonb",e.money="money",e.numeric="numeric",e.oid="oid",e.reltime="reltime",e.text="text",e.time="time",e.timestamp="timestamp",e.timestamptz="timestamptz",e.timetz="timetz",e.tsrange="tsrange",e.tstzrange="tstzrange"})(me||(me={}));const xy=(e,t,r={})=>{var n;const o=(n=r.skipTypes)!==null&&n!==void 0?n:[];return t?Object.keys(t).reduce((s,i)=>(s[i]=RI(i,e,t,o),s),{}):{}},RI=(e,t,r,n)=>{const o=t.find(l=>
vendor: 6,609 bytes, line 265
265l.name===e),s=o==null?void 0:o.type,i=r[e];return s&&!n.includes(s)?ak(s,i):Rh(i)},ak=(e,t)=>{if(e.charAt(0)==="_"){const r=e.slice(1,e.length);return LI(t,r)}switch(e){case me.bool:return PI(t);case me.float4:case me.float8:case me.int2:case me.int4:case me.int8:case me.numeric:case me.oid:return OI(t);case me.json:case me.jsonb:return DI(t);case me.timestamp:return WI(t);case me.abstime:case me.date:case me.daterange:case me.int4range:case me.int8range:case me.money:case me.reltime:case me.text:case me.time:case me.timestamptz:case me.timetz:case me.tsrange:case me.tstzrange:return Rh(t);default:return Rh(t)}},Rh=e=>e,PI=e=>{switch(e){case"t":return!0;case"f":return!1;default:return e}},OI=e=>{if(typeof e=="string"){const t=parseFloat(e);if(!Number.isNaN(t))return t}return e},DI=e=>{if(typeof e=="string")try{return JSON.parse(e)}catch(t){return console.log(`JSON parse error: ${t}`),e}return e},LI=(e,t)=>{if(typeof e!="string")return e;const r=e.length-1,n=e[r];if(e[0]==="{"&&n==="}"){let s;const i=e.slice(1,r);try{s=JSON.parse("["+i+"]")}catch{s=i?i.split(","):[]}return s.map(l=>ak(t,l))}return e},WI=e=>typeof e=="string"?e.replace(" ","T"):e,ok=e=>{const t=new URL(e);return t.protocol=t.protocol.replace(/^ws/i,"http"),t.pathname=t.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),t.pathname===""||t.pathname==="/"?t.pathname="/api/broadcast":t.pathname=t.pathname+"/api/broadcast",t.href};class ru{constructor(t,r,n={},o=Ih){this.channel=t,this.event=r,this.payload=n,this.timeout=o,this.sent=!1,this.timeoutTimer=void 0,this.ref="",this.receivedResp=null,this.recHooks=[],this.refEvent=null}resend(t){this.timeout=t,this._cancelRefEvent(),this.ref="",this.refEvent=null,this.receivedResp=null,this.sent=!1,this.send()}send(){this._hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload,ref:this.ref,join_ref:this.channel._joinRef()}))}updatePayload(t){this.payload=Object.assign(Object.assign({},this.payload),t)}receive(t,r){var n;return this._hasReceived(t)&&r((n=this.receivedResp)===null||n===void 0?void 0:n.response),this.recHooks.push({status:t,callback:r}),this}startTimeout(){if(this.timeoutTimer)return;this.ref=this.channel.socket._makeRef(),this.refEvent=this.channel._replyEventName(this.ref);const t=r=>{this._cancelRefEvent(),this._cancelTimeout(),this.receivedResp=r,this._matchReceive(r)};this.channel._on(this.refEvent,{},t),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}trigger(t,r){this.refEvent&&this.channel._trigger(this.refEvent,{status:t,response:r})}destroy(){this._cancelRefEvent(),this._cancelTimeout()}_cancelRefEvent(){this.refEvent&&this.channel._off(this.refEvent,{})}_cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=void 0}_matchReceive({status:t,response:r}){this.recHooks.filter(n=>n.status===t).forEach(n=>n.callback(r))}_hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}}var Ph;(function(e){e.SYNC="sync",e.JOIN="join",e.LEAVE="leave"})(Ph||(Ph={}));let sk=class Rl{constructor(t,r){this.channel=t,this.state={},this.pendingDiffs=[],this.joinRef=null,this.enabled=!1,this.caller={onJoin:()=>{},onLeave:()=>{},onSync:()=>{}};const n=(r==null?void 0:r.events)||{state:"presence_state",diff:"presence_diff"};this.channel._on(n.state,{},o=>{const{onJoin:s,onLeave:i,onSync:l}=this.caller;this.joinRef=this.channel._joinRef(),this.state=Rl.syncState(this.state,o,s,i),this.pendingDiffs.forEach(c=>{this.state=Rl.syncDiff(this.state,c,s,i)}),this.pendingDiffs=[],l()}),this.channel._on(n.diff,{},o=>{const{onJoin:s,onLeave:i,onSync:l}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(o):(this.state=Rl.syncDiff(this.state,o,s,i),l())}),this.onJoin((o,s,i)=>{this.channel._trigger("presence",{event:"join",key:o,currentPresences:s,newPresences:i})}),this.onLeave((o,s,i)=>{this.channel._trigger("presence",{event:"leave",key:o,currentPresences:s,leftPresences:i})}),this.onSync(()=>{this.channel._trigger("presence",{event:"sync"})})}static syncState(t,r,n,o){const s=this.cloneDeep(t),i=this.transformState(r),l={},c={};return this.map(s,(d,u)=>{i[d]||(c[d]=u)}),this.map(i,(d,u)=>{const h=s[d];if(h){const p=u.map(x=>x.presence_ref),m=h.map(x=>x.presence_ref),v=u.filter(x=>m.indexOf(x.presence_ref)<0),y=h.filter(x=>p.indexOf(x.presence_ref)<0);v.length>0&&(l[d]=v),y.length>0&&(c[d]=y)}else l[d]=u}),this.syncDiff(s,{joins:l,leaves:c},n,o)}static syncDiff(t,r,n,o){const{joins:s,leaves:i}={joins:this.transformState(r.joins),leaves:this.transformState(r.leaves)};return n||(n=()=>{}),o||(o=()=>{}),this.map(s,(l,c)=>{var d;const u=(d=t[l])!==null&&d!==void 0?d:[];if(t[l]=this.cloneDeep(c),u.length>0){const h=t[l].map(m=>m.presence_ref),p=u.filter(m=>h.indexOf(m.presence_ref)<0);t[l].unshift(...p)}n(l,u,c)}),this.map(i,(l,c)=>{let d=t[l];if(!d)return;const u=c.map(h=>h.presence_ref);d=d.filter(h=>u.indexOf(h.presence_ref)<0),t[l]=d,o(l,d,c),d.length===0&&delete t[l]}),t}static map(t,r){return Object.getOwnPropertyNames(t).map(n=>r(n,t[n]))}static transformState(t){return t=this.cloneDeep(t),Object.getOwnPropertyNames(t).reduce((r,n)=>{const o=t[n];return"metas"in o?r[n]=o.metas.map(s=>(s.presence_ref=s.phx_ref,delete s.phx_ref,delete s.phx_ref_prev,s)):r[n]=o,r},{})}static cloneDeep(t){return JSON.parse(JSON.stringify(t))}onJoin(t){this.caller.onJoin=t}onLeave(t){this.caller.onLeave=t}onSync(t){this.caller.onSync=t}inPendingSyncState(){return!this.joinRef||this.joinRef!==this.channel._joinRef()}};var Oh;(function(e){e.ALL="*",e.INSERT="INSERT",e.UPDATE="UPDATE",e.DELETE="DELETE"})(Oh||(Oh={}));var ko;(function(e){e.BROADCAST="broadcast",e.PRESENCE="presence",e.POSTGRES_CHANGES="postgres_changes",e.SYSTEM="system"})(ko||(ko={}));var dr;(function(e){e.SUBSCRIBED="SUBSCRIBED",e.TIMED_OUT="TIMED_OUT",e.CLOSED="CLOSED",e.CHANNEL_ERROR="CHANNEL_ERROR"})(dr||(dr={}));const MI=Re;let ik=class Cs{constructor(t,r={config:{}},n){var o,s;if(this.topic=t,this.params=r,this.socket=n,this.bindings={},this.state=Re.closed,this.joinedOnce=!1,this.pushBuffer=[],this.subTopic=t.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:!1,self:!1},presence:{key:"",enabled:!1},private:!1},r.config),this.timeout=this.socket.timeout,this.joinPush=new ru(this,Xt.join,this.params,this.timeout),this.rejoinTimer=new nk(()=>this._rejoinUntilConnected(),this.socket.reconnectAfterMs),this.joinPush.receive("ok",()=>{this.state=Re.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(i=>
265i.send()),this.pushBuffer=[]}),this._onClose(()=>{this.rejoinTimer.reset(),this.socket.log("channel",`close ${this.topic} ${this._joinRef()}`),this.state=Re.closed,this.socket._remove(this)}),this._onError(i=>{this._isLeaving()||this._isClosed()||(this.socket.log("channel",`error ${this.topic}`,i),this.state=Re.errored,this.rejoinTimer.scheduleTimeout())}),this.joinPush.receive("timeout",()=>{this._isJoining()&&(this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),this.state=Re.errored,this.rejoinTimer.scheduleTimeout())}),this.joinPush.receive("error",i=>{this._isLeaving()||this._isClosed()||(this.socket.log("channel",`error ${this.topic}`,i),this.state=Re.errored,this.rejoinTimer.scheduleTimeout())}),this._on(Xt.reply,{},(i,l)=>{this._trigger(this._replyEventName(l),i)}),this.presence=new sk(this),this.broadcastEndpointURL=ok(this.socket.endPoint),this.private=this.params.config.private||!1,!this.private&&(!((s=(o=this.params.config)===null||o===void 0?void 0:o.broadcast)===null||s===void 0)&&s.replay))throw`tried to use replay on public channel '${this.topic}'. It must be a private channel.`}subscribe(t,r=this.timeout){var n,o,s;if(this.socket.isConnected()||this.socket.connect(),this.state==Re.closed){const{config:{broadcast:i,presence:l,private:c}}=this.params,d=(o=(n=this.bindings.postgres_changes)===null||n===void 0?void 0:n.map(m=>m.filter))!==null&&o!==void 0?o:[],u=!!this.bindings[ko.PRESENCE]&&this.bindings[ko.PRESENCE].length>0||((s=this.params.config.presence)===null||s===void 0?void 0:s.enabled)===!0,h={},p={broadcast:i,presence:Object.assign(Object.assign({},l),{enabled:u}),postgres_changes:d,private:c};this.socket.accessTokenValue&&(h.access_token=this.socket.accessTokenValue),this._onError(m=>t==null?void 0:t(dr.CHANNEL_ERROR,m)),this._onClose(()=>t==null?void 0:t(dr.CLOSED)),this.updateJoinPayload(Object.assign({config:p},h)),this.joinedOnce=!0,this._rejoin(r),this.joinPush.receive("ok",async({postgres_changes:m})=>{var v;if(this.socket._isManualToken()||this.socket.setAuth(),m===void 0){t==null||t(dr.SUBSCRIBED);return}else{const y=this.bindings.postgres_changes,x=(v=y==null?void 0:y.length)!==null&&v!==void 0?v:0,g=[];for(let f=0;f<x;f++){const w=y[f],{filter:{event:k,schema:j,table:S,filter:N}}=w,_=m&&m[f];if(_&&_.event===k&&Cs.isFilterValueEqual(_.schema,j)&&Cs.isFilterValueEqual(_.table,S)&&Cs.isFilterValueEqual(_.filter,N))g.push(Object.assign(Object.assign({},w),{id:_.id}));else{this.unsubscribe(),this.state=Re.errored,t==null||t(dr.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=g,t&&t(dr.SUBSCRIBED);return}}).receive("error",m=>{this.state=Re.errored,t==null||t(dr.CHANNEL_ERROR,new Error(JSON.stringify(Object.values(m).join(", ")||"error")))}).receive("timeout",()=>{t==null||t(dr.TIMED_OUT)})}return this}presenceState(){return this.presence.state}async track(t,r={}){return await this.send({type:"presence",event:"track",payload:t},r.timeout||this.timeout)}async untrack(t={}){return await this.send({type:"presence",event:"untrack"},t)}on(t,r,n){return this.state===Re.joined&&t===ko.PRESENCE&&(this.socket.log("channel",`resubscribe to ${this.topic} due to change in presence callbacks on joined channel`),this.unsubscribe().then(async()=>await this.subscribe())),this._on(t,r,n)}async httpSend(t,r,n={}){var o;const s=this.socket.accessTokenValue?`Bearer ${this.socket.accessTokenValue}`:"";if(r==null)return Promise.reject("Payload is required for httpSend()");const i={method:"POST",headers:{Authorization:s,apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"},body:JSON.stringify({messages:[{topic:this.subTopic,event:t,payload:r,private:this.private}]})},l=await this._fetchWithTimeout(this.broadcastEndpointURL,i,(o=n.timeout)!==null&&o!==void 0?o:this.timeout);if(l.status===202)return{success:!0};let c=l.statusText;try{const d=await l.json();c=d.error||d.message||c}catch{}return Promise.reject(new Error(c))}async send(t,r={}){var n,o;if(!this._canPush()&&t.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated 
265in the future. Please use httpSend() explicitly for REST delivery.");const{event:s,payload:i}=t,c={method:"POST",headers:{Authorization:this.socket.accessTokenValue?`Bearer ${this.socket.accessTokenValue}`:"",apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"},body:JSON.stringify({messages:[{topic:this.subTopic,event:s,payload:i,private:this.private}]})};try{const d=await this._fetchWithTimeout(this.broadcastEndpointURL,c,(n=r.timeout)!==null&&n!==void 0?n:this.timeout);return await((o=d.body)===null||o===void 0?void 0:o.cancel()),d.ok?"ok":"error"}catch(d){return d.name==="AbortError"?"timed out":"error"}}else return new Promise(s=>{var i,l,c;const d=this._push(t.type,t,r.timeout||this.timeout);t.type==="broadcast"&&!(!((c=(l=(i=this.params)===null||i===void 0?void 0:i.config)===null||l===void 0?void 0:l.broadcast)===null||c===void 0)&&c.ack)&&s("ok"),d.receive("ok",()=>s("ok")),d.receive("error",()=>s("error")),d.receive("timeout",()=>s("timed out"))})}updateJoinPayload(t){this.joinPush.updatePayload(t)}unsubscribe(t=this.timeout){this.state=Re.leaving;const r=()=>{this.socket.log("channel",`leave ${this.topic}`),this._trigger(Xt.close,"leave",this._joinRef())};this.joinPush.destroy();let n=null;return new Promise(o=>{n=new ru(this,Xt.leave,{},t),n.receive("ok",()=>{r(),o("ok")}).receive("timeout",()=>{r(),o("timed out")}).receive("error",()=>{o("error")}),n.send(),this._canPush()||n.trigger("ok",{})}).finally(()=>{n==null||n.destroy()})}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Re.closed,this.bindings={}}async _fetchWithTimeout(t,r,n){const o=new AbortController,s=setTimeout(()=>o.abort(),n),i=await this.socket.fetch(t,Object.assign(Object.assign({},r),{signal:o.signal}));return clearTimeout(s),i}_push(t,r,n=this.timeout){if(!this.joinedOnce)throw`tried to push '${t}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;let o=new ru(this,t,r,n);return this._canPush()?o.send():this._addToPushBuffer(o),o}_addToPushBuffer(t){if(t.startTimeout(),this.pushBuffer.push(t),this.pushBuffer.length>II){const r=this.pushBuffer.shift();r&&(r.destroy(),this.socket.log("channel",`discarded push due to buffer overflow: ${r.event}`,r.payload))}}_onMessage(t,r,n){return r}_isMember(t){return this.topic===t}_joinRef(){return this.joinPush.ref}_trigger(t,r,n){var o,s;const i=t.toLocaleLowerCase(),{close:l,error:c,leave:d,join:u}=Xt;if(n&&[l,c,d,u].indexOf(i)>=0&&n!==this._joinRef())return;let p=this._onMessage(i,r,n);if(r&&!p)throw"channel onMessage callbacks must return the payload, modified or unmodified";["insert","update","delete"].includes(i)?(o=this.bindings.postgres_changes)===null||o===void 0||o.filter(m=>{var v,y,x;return((v=m.filter)===null||v===void 0?void 0:v.event)==="*"||((x=(y=m.filter)===null||y===void 0?void 0:y.event)===null||x===void 0?void 0:x.toLocaleLowerCase())===i}).map(m=>m.callback(p,n)):(s=this.bindings[i])===null||s===void 0||s.filter(m=>{var v,y,x,g,f,w;if(["broadcast","presence","postgres_changes"].includes(i))if("id"in m){const k=m.id,j=(v=m.filter)===null||v===void 0?void 0:v.event;return k&&((y=r.ids)===null||y===void 0?void 0:y.includes(k))&&(j==="*"||(j==null?void 0:j.toLocaleLowerCase())===((x=r.data)===null||x===void 0?void 0:x.type.toLocaleLowerCase()))}else{const k=(f=(g=m==null?void 0:m.filter)===null||g===void 0?void 0:g.event)===null||f===void 0?void 0:f.toLocaleLowerCase();return k==="*"||k===((w=r==null?void 0:r.event)===null||w===void 0?void 0:w.toLocaleLowerCase())}else return m.type.toLocaleLowerCase()===i}).map(m=>{if(typeof p=="object"&&"ids"in p){const v=p.data,{schema:y,table:x,commit_timestamp:g,type:f,errors:w}=v;p=Object.assign(Object.assign({},{schema:y,table:x,commit_timestamp:g,eventType:f,new:{},old:{},errors:w}),this._getPayloadRecords(v))}m.callback(p,n)})}_isClosed(){return this.state===Re.closed}_isJoined(){return this.state===Re.joined}_isJoining(){return this.state===Re.joining}_isLeaving(){return this.state===Re.leaving}_replyEventName(t){return`chan_reply_${t}`}_on(t,r,n){const o=t.toLocaleLowerCase(),s={type:o,filter:r,callback:n};return this.bindings[o]?this.bindings[o].push(s):this.bindings[o]=[s],this}_off(t,r){const n=t.toLocaleLowerCase();return this.bindings[n]&&(this.bindings[n]=this.bindings[n].filter(o=>{var s;return!(((s=o.type)===null||s===void 0?void 0:s.toLocaleLowerCase())===n&&Cs.isEqual(o.filter,r))})),this}static isEqual(t,r){if(Object.keys(t).length!==Object.keys(r).length)return!1;for(const n in t)if(t[n]!==r[n])return!1;return!0}static isFilterValueEqual(t,r){return(t??void 0)===(r??void 0)}_rejoinUntilConnected(){this.rejoinTimer.scheduleTimeout(),this.socket.isConnected()&&this._rejoin()}_onClose(t){this._on(Xt.close,{},t)}_onError(t){this._on(Xt.error,{},r=>t(r))}_canPush(){return this.socket.isConnected()&&this._isJoined()}_rejoin(t=this.timeout){this._isLeaving()||(this.socket._leaveOpenTopic(this.topic),this.state=Re.joining,this.joinPush.resend(t))}_getPayloadRecords(t){const r={new:{},old:{}};return(t.type==="INSERT"||t.type==="UPDATE")&&(r.new=xy(t.columns,t.record)),(t.type==="UPDATE"||t.type==="DELETE")&&(r.old=xy(t.columns,t.old_record)),r}};const nu=()=>{},ol={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},qI=[1e3,2e3,5e3,1e4],zI=1e4,$I=`
266  addEventListener("message", (e) => {
267    if (e.data.event === "start") {
268      setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
269    }
270  });`;let GI=class{constructor(t,r){var n;if(this.accessTokenValue=null,this.apiKey=null,this._manuallySetToken=!1,this.channels=new Array,this.endPoint="",this.httpEndpoint="",this.headers={},this.params={},this.timeout=Ih,this.transport=null,this.heartbeatIntervalMs=ol.HEARTBEAT_INTERVAL,this.heartbeatTimer=void 0,this.pendingHeartbeatRef=null,this.heartbeatCallback=nu,this.ref=0,this.reconnectTimer=null,this.vsn=wy,this.logger=nu,this.conn=null,this.sendBuffer=[],this.serializer
270=new AI,this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.accessToken=null,this._connectionState="disconnected",this._wasManualDisconnect=!1,this._authPromise=null,this._resolveFetch=o=>o?(...s)=>o(...s):(...s)=>fetch(...s),!(!((n=r==null?void 0:r.params)===null||n===void 0)&&n.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=r.params.apikey,this.endPoint=`${t}/${Ah.websocket}`,this.httpEndpoint=ok(t),this._initializeOptions(r),this._setupReconnectionTimer(),this.fetch=this._resolveFetch(r==null?void 0:r.fetch)}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.conn!==null&&this.isConnected())){if(this._setConnectionState("connecting"),this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this.transport)this.conn=new this.transport(this.endpointURL());else try{this.conn=tk.createWebSocket(this.endpointURL())}catch(t){this._setConnectionState("disconnected");const r=t.message;throw r.includes("Node.js")?new Error(`${r}
271
272To use Realtime in Node.js, you need to provide a WebSocket implementation:
273
274Option 1: Use Node.js 22+ which has native WebSocket support
275Option 2: Install and provide the "ws" package:
276
277  npm install ws
278
279  import ws from "ws"
280  const client = new RealtimeClient(url, {
281    ...options,
282    transport: ws
283  })`):new Error(`WebSocket not available: ${r}`)}this._setupConnectionHandlers()}}endpointURL(){return this._appendParams(this.endPoint,Object.assign({},this.params,{vsn:this.vsn}))}disconnect(t,r){if(!this.isDisconnecting())if(this._setConnectionState("disconnecting",!0),this.conn){const n=setTimeout(()=>{this._setConnectionState("disconnected")},100);this.conn.onclose=()=>{clearTimeout(n),this._setConnectionState("disconnected")},typeof this.conn.close=="function"&&(t?this.conn.close(t,r??""):this.conn.close()),this._teardownConnection()}else this._setConnectionState("disconnected")}getChannels(){return this.channels}async removeChannel(t){const r=await t.unsubscribe();return this.channels.length===0&&this.disconnect(),r}async removeAllChannels(){const t=await Promise.all(this.channels.map(r=>r.unsubscribe()));return this.channels=[],this.disconnect(),t}log(t,r,n){this.logger(t,r,n)}connectionState(){switch(this.conn&&this.conn.readyState){case Vn.connecting:return Yn.Connecting;case Vn.open:return Yn.Open;case Vn.closing:return Yn.Closing;default:return Yn.Closed}}isConnected(){return this.connectionState()===Yn.Open}isConnecting(){return this._connectionState==="connecting"}isDisconnecting(){return this._connectionState==="disconnecting"}channel(t,r={config:{}}){const n=`realtime:${t}`,o=this.getChannels().find(s=>s.topic===n);if(o)return o;{const s=new ik(`realtime:${t}`,r,this);return this.channels.push(s),s}}push(t){const{topic:r,event:n,payload:o,ref:s}=t,i=()=>{this.encode(t,l=>{var c;(c=this.conn)===null||c===void 0||c.send(l)})};this.log("push",`${r} ${n} (${s})`,o),this.isConnected()?i():this.sendBuffer.push(i)}async setAuth(t=null){this._authPromise=this._performAuth(t);try{await this._authPromise}finally{this._authPromise=null}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){var t;if(!this.isConnected()){try{this.heartbeatCallback("disconnected")}catch(r){this.log("error","error in heartbeat callback",r)}return}if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout")}catch(r){this.log("error","error in heartbeat callback",r)}this._wasManualDisconnect=!1,(t=this.conn)===null||t===void 0||t.close(EI,"heartbeat timeout"),setTimeout(()=>{var r;this.isConnected()||(r=this.reconnectTimer)===null||r===void 0||r.sc
283heduleTimeout()},ol.HEARTBEAT_TIMEOUT_FALLBACK);return}this.pendingHeartbeatRef=this._makeRef(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent")}catch(r){this.log("error","error in heartbeat callback",r)}this._setAuthSafely("heartbeat")}onHeartbeat(t){this.heartbeatCallback=t}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}_makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}_leaveOpenTopic(t){let r=this.channels.find(n=>n.topic===t&&(n._isJoined()||n._isJoining()));r&&(this.log("transport",`leaving duplicate topic "${t}"`),r.unsubscribe())}_remove(t){this.channels=this.channels.filter(r=>r.topic!==t.topic)}_onConnMessage(t){this.decode(t.data,r=>{if(r.topic==="phoenix"&&r.event==="phx_reply")try{this.heartbeatCallback(r.payload.status==="ok"?"ok":"error")}catch(d){this.log("error","error in heartbeat callback",d)}r.ref&&r.ref===this.pendingHeartbeatRef&&(this.pendingHeartbeatRef=null);const{topic:n,event:o,payload:s,ref:i}=r,l=i?`(${i})`:"",c=s.status||"";this.log("receive",`${c} ${n} ${o} ${l}`.trim(),s),this.channels.filter(d=>d._isMember(n)).forEach(d=>d._trigger(o,s,i)),this._triggerStateCallbacks("message",r)})}_clearTimer(t){var r;t==="heartbeat"&&this.heartbeatTimer?(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0):t==="reconnect"&&((r=this.reconnectTimer)===null||r===void 0||r.reset())}_clearAllTimers(){this._clearTimer("heartbeat"),this._clearTimer("reconnect")}_setupConnectionHandlers(){this.conn&&("binaryType"in this.conn&&(this.conn.binaryType="arraybuffer"),this.conn.onopen=()=>this._onConnOpen(),this.conn.onerror=t=>this._onConnError(t),this.conn.onmessage=t=>this._onConnMessage(t),this.conn.onclose=t=>this._onConnClose(t))}_teardownConnection(){if(this.conn){if(this.conn.readyState===Vn.open||this.conn.readyState===Vn.connecting)try{this.conn.close()}catch(t){this.log("error","Error closing connection",t)}this.conn.onopen=null,this.conn.onerror=null,this.conn.onmessage=null,this.conn.onclose=null,this.conn=null}this._clearAllTimers(),this.channels.forEach(t=>t.teardown())}_onConnOpen(){this._setConnectionState("connected"),this.log("transport",`connected to ${this.endpointURL()}`),(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).then(()=>{this.flushSendBuffer()}).catch(r=>{this.log("error","error waiting for auth on connect",r),this.flushSendBuffer()}),this._clearTimer("reconnect"),this.worker?this.workerRef||this._startWorkerHeartbeat():this._startHeartbeat(),this._triggerStateCallbacks("open")}_startHeartbeat(){this.heartbeatTimer&&clearInterval(this.heartbeatTimer),this.heartbeatTimer=setInterval(()=>this.sendHeartbeat(),this.heartbeatIntervalMs)}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");const t=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(t),this.workerRef.onerror=r=>{this.log("worker","worker error",r.message),this.workerRef.terminate()},this.workerRef.onmessage=r=>{r.data.event==="keepAlive"&&this.sendHeartbeat()},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs})}_onConnClose(t){var r;this._setConnectionState("disconnected"),this.log("transport","close",t),this._triggerChanError(),this._clearTimer("heartbeat"),this._wasManualDisconnect||(r=this.reconnectTimer)===null||r===void 0||r.sc
283heduleTimeout(),this._triggerStateCallbacks("close",t)}_onConnError(t){this._setConnectionState("disconnected"),this.log("transport",`${t}`),this._triggerChanError(),this._triggerStateCallbacks("error",t)}_triggerChanError(){this.channels.forEach(t=>t._trigger(Xt.error))}_appendParams(t,r){if(Object.keys(r).length===0)return t;const n=t.match(/\?/)?"&":"?",o=new URLSearchParams(r);return`${t}${n}${o}`}_workerObjectUrl(t){let r;if(t)r=t;else{const n=new Blob([$I],{type:"application/javascript"});r=URL.createObjectURL(n)}return r}_setConnectionState(t,r=!1){this._connectionState=t,t==="connecting"?this._wasManualDisconnect=!1:t==="disconnecting"&&(this._wasManualDisconnect=r)}async _performAuth(t=null){let r,n=!1;if(t)r=t,n=!0;else if(this.accessToken)try{r=await this.accessToken()}catch(o){this.log("error","Error fetching access token from callback",o),r=this.accessTokenValue}else r=this.accessTokenValue;n?this._manuallySetToken=!0:this.accessToken&&(this._manuallySetToken=!1),this.accessTokenValue!=r&&(this.accessTokenValue=r,this.channels.forEach(o=>{const s={access_token:r,version:TI};r&&o.updateJoinPayload(s),o.joinedOnce&&o._isJoined()&&o._push(Xt.access_token,{access_token:r})}))}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise}_setAuthSafely(t="general"){this._isManualToken()||this.setAuth().catch(r=>{this.log("error",`Error setting auth in ${t}`,r)})}_triggerStateCallbacks(t,r){try{this.stateChangeCallbacks[t].forEach(n=>{try{n(r)}catch(o){this.log("error",`error in ${t} callback`,o)}})}catch(n){this.log("error",`error triggering ${t} callbacks`,n)}}_setupReconnectionTimer(){this.reconnectTimer=new nk(async()=>{setTimeout(async()=>{await this._waitForAuthIfNeeded(),this.isConnected()||this.connect()},ol.RECONNECT_DELAY)},this.reconnectAfterMs)}_initializeOptions(t){var r,n,o,s,i,l,c,d,u,h,p,m;switch(this.transport=(r=t==null?void 0:t.transport)!==null&&r!==void 0?r:null,this.timeout=(n=t==null?void 0:t.timeout)!==null&&n!==void 0?n:Ih,this.heartbeatIntervalMs=(o=t==null?void 0:t.heartbeatIntervalMs)!==null&&o!==void 0?o:ol.HEARTBEAT_INTERVAL,this.worker=(s=t==null?void 0:t.worker)!==null&&s!==void 0?s:!1,this.accessToken=(i=t==null?void 0:t.accessToken)!==null&&i!==void 0?i:null,this.heartbeatCallback=(l=t==null?void 0:t.heartbeatCallback)!==null&&l!==void 0?l:nu,this.vsn=(c=t==null?void 0:t.vsn)!==null&&c!==void 0?c:wy,t!=null&&t.params&&(this.params=t.params),t!=null&&t.logger&&(this.logger=t.logger),(t!=null&&t.logLevel||t!=null&&t.log_level)&&(this.logLevel=t.logLevel||t.log_level,this.params=Object.assign(Object.assign({},this.params),{log_level:this.logLevel})),this.reconnectAfterMs=(d=t==null?void 0:t.reconnectAfterMs)!==null&&d!==void 0?d:v=>qI[v-1]||zI,this.vsn){case rk:this.encode=(u=t==null?void 0:t.encode)!==null&&u!==void 0?u:(v,y)=>y(JSON.stringify(v)),this.decode=(h=t==null?void 0:t.decode)!==null&&h!==void 0?h:(v,y)=>y(JSON.parse(v));break;case _I:this.encode=(p=t==null?void 0:t.encode)!==null&&p!==void 0?p:this.serializer.encode.bind(this.serializer),this.decode=(m=t==null?void 0:t.decode)!==null&&m!==void 0?m:this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${this.vsn}`)}if(this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=t==null?void 0:t.workerUrl}}};const BI=Object.freeze(Object.defineProperty({__proto__:null,REALTIME_CHANNEL_STATES:MI,get REALTIME_LISTEN_TYPES(){return ko},get REALTIME_POSTGRES_CHANGES_LISTEN_EVENT(){return Oh},get REALTIME_PRESENCE_LISTEN_EVENTS(){return Ph},get REALTIME_SUBSCRIBE_STATES(){return dr},RealtimeChannel:ik,RealtimeClient:GI,RealtimePresence:sk,WebSocketFactory:tk},Symbol.toStringTag,{value:"Module"})),lk=hi(BI);
283class ji extends Error{constructor(t){super(t),this.__isStorageError=!0,this.name="StorageError"}}function xe(e){return typeof e=="object"&&e!==null&&"__isStorageError"in e}class ck extends ji{constructor(t,r,n){super(t),this.name="StorageApiError",this.status=r,this.statusCode=n}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}}class vc extends ji{constructor(t,r){super(t),this.name="StorageUnknownError",this.originalError=r}}const Ap=e=>e?(...t)=>e(...t):(...t)=>fetch(...t),HI=()=>Response,Dh=e=>{if(Array.isArray(e))return e.map(r=>Dh(r));if(typeof e=="function"||e!==Object(e))return e;const t={};return Object.entries(e).forEach(([r,n])=>{const o=r.replace(/([-_][a-z])/gi,s=>s.toUpperCase().replace(/[-_]/g,""));t[o]=Dh(n)}),t},FI=e=>{if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},UI=e=>!e||typeof e!="string"||e.length===0||e.length>100||e.trim()!==e||e.includes("/")||e.includes("\\")?!1:/^[\w!.\*'() &$@=;:+,?-]+$/.test(e),au=e=>{var t;return e.msg||e.message||e.error_description||(typeof e.error=="string"?e.error:(t=e.error)===null||t===void 0?void 0:t.message)||JSON.stringify(e)},VI=(e,t,r)=>q(void 0,void 0,void 0,function*(){const n=yield HI();e instanceof n&&!(r!=null&&r.noResolveJson)?e.json().then(o=>{const s=e.status||500,i=(o==null?void 0:o.statusCode)||s+"";t(new ck(au(o),s,i))}).catch(o=>{t(new vc(au(o),o))}):t(new vc(au(e),e))}),YI=(e,t,r,n)=>{const o={method:e,headers:(t==null?void 0:t.headers)||{}};return e==="GET"||!n?o:(FI(n)?(o.headers=Object.assign({"Content-Type":"application/json"},t==null?void 0:t.headers),o.body=JSON.stringify(n)):o.body=n,t!=null&&t.duplex&&(o.duplex=t.duplex),Object.assign(Object.assign({},o),r))};function Si(e,t,r,n,o,s){return q(this,void 0,void 0,function*(){return new Promise((i,l)=>{e(r,YI(t,n,o,s)).then(c=>{if(!c.ok)throw c;return n!=null&&n.noResolveJson?c:c.json()}).then(c=>i(c)).catch(c=>VI(c,l,n))})})}function li(e,t,r,n){return q(this,void 0,void 0,function*(){return Si(e,"GET",t,r,n)})}function Yt(e,t,r,n,o){return q(this,void 0,void 0,function*(){return Si(e,"POST",t,n,o,r)})}function Lh(e,t,r,n,o){return q(this,void 0,void 0,function*(){return Si(e,"PUT",t,n,o,r)})}function KI(e,t,r,n){return q(this,void 0,void 0,function*(){return Si(e,"HEAD",t,Object.assign(Object.assign({},r),{noResolveJson:!0}),n)})}function Rp(e,t,r,n,o){return q(this,void 0,void 0,function*(){return Si(e,"DELETE",t,n,o,r)})}class JI{constructor(t,r){this.downloadFn=t,this.shouldThrowOnError=r}then(t,r){return this.execute().then(t,r)}execute(){return q(this,void 0,void 0,function*(){try{return{data:(yield this.downloadFn()).body,error:null}}catch(t){if(this.shouldThrowOnError)throw t;if(xe(t))return{data:null,error:t};throw t}})}}var dk;class QI{constructor(t,r){this.downloadFn=t,this.shouldThrowOnError=r,this[dk]="BlobDownloadBuilder",this.promise=null}asStream(){return new JI(this.downloadFn,this.shouldThrowOnError)}then(t,r){return this.getPromise().then(t,r)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}execute(){return q(this,void 0,void 0,function*(){try{return{data:yield(yield this.downloadFn()).blob(),error:null}}catch(t){if(this.shouldThrowOnError)throw t;if(xe(t))return{data:null,error:t};throw t}})}}dk=Symbol.toStringTag;const XI={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},by={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:!1};class ZI{constructor(t,r={},n,o){this.shouldThrowOnError=!1,this.url=t,this.headers=r,this.bucketId=n,this.fetch=Ap(o)}throwOnError(){return this.shouldThrowOnError=!0,this}uploadOrUpdate(t,r,n,o){return q(this,void 0,void 0,function*(){try{let s;const i=Object.assign(Object.assign({},by),o);let l=Object.assign(Object.assign({},this.headers),t==="POST"&&{"x-upsert":String(i.upsert)});const c=i.metadata;typeof Blob<"u"&&n instanceof Blob?(s=new FormData,s.append("cacheControl",i.cacheControl),c&&s.append("metadata",this.encodeMetadata(c)),s.append("",n)):typeof FormData<"u"&&n instanceof FormData?(s=n,s.has("cacheControl")||s.append("cacheControl",i.cacheControl),c&&!s.has("metadata")&&s.append("metadata",this.encodeMetadata(c))):(s=n,l["cache-control"]=`max-age=${i.cacheControl}`,l["content-type"]=i.contentType,c&&(l["x-metadata"]=this.toBase64(this.encodeMetadata(c))),(typeof ReadableStream<"u"&&s instanceof ReadableStream||s&&typeof s=="object"&&"pipe"in s&&typeof s.pipe=="function")&&!i.duplex&&(i.duplex="half")),o!=null&&o.headers&&(l=Object.assign(Object.assign({},l),o.headers));const d=this._removeEmptyFolders(r),u=this._getFinalPath(d),h=yield(t=="PUT"?Lh:Yt)(this.fetch,`${this.url}/object/${u}`,s,Object.assign({headers:l},i!=null&&i.duplex?{duplex:i.duplex}:{}));return{data:{path:d,id:h.Id,fullPath:h.Key},error:null}}catch(s){if(this.shouldThrowOnError)throw s;if(xe(s))return{data:null,error:s};throw s}})}upload(t,r,n){return q(this,void 0,void 0,function*(){return this.uploadOrUpdate("POST",t,r,n)})}uploadToSignedUrl(t,r,n,o){return q(this,void 0,void 0,function*(){const s=this._removeEmptyFolders(t),i=this._getFinalPath(s),l=new URL(this.url+`/object/upload/sign/${i}`);l.searchParams.set("token",r);try{let c;const d=Object.assign({upsert:by.upsert},o),u=Object.assign(Object.assign({},this.headers),{"x-upsert":String(d.upsert)});typeof Blob<"u"&&n instanceof Blob?(c=new FormData,c.append("cacheControl",d.cacheControl),c.append("",n)):typeof FormData<"u"&&n instanceof FormData?(c=n,c.append("cacheControl",d.cacheControl)):(c=n,u["cache-control"]=`max-age=${d.cacheControl}`,u["content-type"]=d.contentType);const h=yield Lh(this.fetch,l.toString(),c,{headers:u});return{data:{path:s,fullPath:h.Key},error:null}}catch(c){if(this.shouldThrowOnError)throw c;if(xe(c))return{data:null,error:c};throw c}})}createSignedUploadUrl(t,r){return q(this,void 0,void 0,function*(){try{let n=this._getFinalPath(t);const o=Object.assign({},this.headers);r!=null&&r.upsert&&(o["x-upsert"]="true");const s=yield Yt(this.fetch,`${this.url}/object/upload/sign/${n}`,{},{headers:o}),i=new URL(this.url+s.url),l=i.searchParams.get("token");if(!l)throw new ji("No token returned by API");return{data:{signedUrl:i.toString(),path:t,token:l},error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(xe(n))return{data:null,error:n};throw n}})}update(t,r,n){return q(this,void 0,void 0,function*(){return this.uploadOrUpdate("PUT",t,r,n)})}move(t,r,n){return q(this,void 0,void 0,function*(){try{return{data:yield Yt(this.fetch,`${this.url}/object/move`,{bucketId:this.bucketId,sourceKey:t,destinationKey:r,destinationBucket:n==null?void 0:n.destinationBucket},{headers:this.headers}),error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}copy(t,r,n){return q(this,void 0,void 0,function*(){try{return{data:{path:(yield Yt(this.fetch,`${this.url}/object/copy`,{bucketId:this.bucketId,sourceKey:t,destinationKey:r,destinationBucket:n==null?void 0:n.destinationBucket},{headers:this.headers})).Key},error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}createSignedUrl(t,r,n){return q(this,void 0,void 0,function*(){try{let o=this._getFinalPath(t),s=yield Yt(this.fetch,`${this.url}/object/sign/${o}
283`,Object.assign({expiresIn:r},n!=null&&n.transform?{transform:n.transform}:{}),{headers:this.headers});const i=n!=null&&n.download?`&download=${n.download===!0?"":n.download}`:"";return s={signedUrl:encodeURI(`${this.url}${s.signedURL}${i}`)},{data:s,error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}createSignedUrls(t,r,n){return q(this,void 0,void 0,function*(){try{const o=yield Yt(this.fetch,`${this.url}/object/sign/${this.bucketId}`,{expiresIn:r,paths:t},{headers:this.headers}),s=n!=null&&n.download?`&download=${n.download===!0?"":n.download}`:"";return{data:o.map(i=>Object.assign(Object.assign({},i),{signedUrl:i.signedURL?encodeURI(`${this.url}${i.signedURL}${s}`):null})),error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}download(t,r){const o=typeof(r==null?void 0:r.transform)<"u"?"render/image/authenticated":"object",s=this.transformOptsToQueryString((r==null?void 0:r.transform)||{}),i=s?`?${s}`:"",l=this._getFinalPath(t),c=()=>li(this.fetch,`${this.url}/${o}/${l}${i}`,{headers:this.headers,noResolveJson:!0});return new QI(c,this.shouldThrowOnError)}info(t){return q(this,void 0,void 0,function*(){const r=this._getFinalPath(t);try{const n=yield li(this.fetch,`${this.url}/object/info/${r}`,{headers:this.headers});return{data:Dh(n),error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(xe(n))return{data:null,error:n};throw n}})}exists(t){return q(this,void 0,void 0,function*(){const r=this._getFinalPath(t);try{return yield KI(this.fetch,`${this.url}/object/${r}`,{headers:this.headers}),{data:!0,error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(xe(n)&&n instanceof vc){const o=n.originalError;if([400,404].includes(o==null?void 0:o.status))return{data:!1,error:n}}throw n}})}getPublicUrl(t,r){const n=this._getFinalPath(t),o=[],s=r!=null&&r.download?`download=${r.download===!0?"":r.download}`:"";s!==""&&o.push(s);const l=typeof(r==null?void 0:r.transform)<"u"?"render/image":"object",c=this.transformOptsToQueryString((r==null?void 0:r.transform)||{});c!==""&&o.push(c);let d=o.join("&");return d!==""&&(d=`?${d}`),{data:{publicUrl:encodeURI(`${this.url}/${l}/public/${n}${d}`)}}}remove(t){return q(this,void 0,void 0,function*(){try{return{data:yield Rp(this.fetch,`${this.url}/object/${this.bucketId}`,{prefixes:t},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}list(t,r,n){return q(this,void 0,void 0,function*(){try{const o=Object.assign(Object.assign(Object.assign({},XI),r),{prefix:t||""});return{data:yield Yt(this.fetch,`${this.url}/object/list/${this.bucketId}`,o,{headers:this.headers},n),error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}listV2(t,r){return q(this,void 0,void 0,function*(){try{const n=Object.assign({},t);return{data:yield Yt(this.fetch,`${this.url}/object/list-v2/${this.bucketId}`,n,{headers:this.headers},r),error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(xe(n))return{data:null,error:n};throw n}})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return`${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}transformOptsToQueryString(t){const r=[];return t.width&&r.push(`width=${t.width}`),t.height&&r.push(`height=${t.height}`),t.resize&&r.push(`resize=${t.resize}`),t.format&&r.push(`format=${t.format}`),t.quality&&r.push(`quality=${t.quality}`),r.join("&")}}const uk="2.87.1",hk={"X-Client-Info":`storage-js/${uk}`};class e4{constructor(t,r={},n,o){this.shouldThrowOnError=!1;const s=new URL(t);o!=null&&o.useNewHostname&&/supabase\.(co|in|red)$/.test(s.hostname)&&!s.hostname.includes("storage.supabase.")&&(s.hostname=s.hostname.replace("supabase.","storage.supabase.")),this.url=s.href.replace(/\/$/,""),this.headers=Object.assign(Object.assign({},hk),r),this.fetch=Ap(n)}throwOnError(){return this.shouldThrowOnError=!0,this}listBuckets(t){return q(this,void 0,void 0,function*(){try{const r=this.listBucketOptionsToQueryString(t);return{data:yield li(this.fetch,`${this.url}/bucket${r}`,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}getBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield li(this.fetch,`${this.url}/bucket/${t}`,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}createBucket(t){return q(this,arguments,void 0,function*(r,n={public:!1}){try{return{data:yield Yt(this.fetch,`${this.url}/bucket`,{id:r,name:r,type:n.type,public:n.public,file_size_limit:n.fileSizeLimit,allowed_mime_types:n.allowedMimeTypes},{headers:this.headers}),error:null}}catch(o){if(this.shouldThrowOnError)throw o;if(xe(o))return{data:null,error:o};throw o}})}updateBucket(t,r){return q(this,void 0,void 0,function*(){try{return{data:yield Lh(this.fetch,`${this.url}/bucket/${t}`,{id:t,name:t,public:r.public,file_size_limit:r.fileSizeLimit,allowed_mime_types:r.allowedMimeTypes},{headers:this.headers}),error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(xe(n))return{data:null,error:n};throw n}})}emptyBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield Yt(this.fetch,`${this.url}/bucket/${t}/empty`,{},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}deleteBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield Rp(this.fetch,`${this.url}/bucket/${t}`,{},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}listBucketOptionsToQueryString(t){const r={};return t&&("limit"in t&&(r.limit=String(t.limit)),"offset"in t&&(r.offset=String(t.offset)),t.search&&(r.search=t.search),t.sortColumn&&(r.sortColumn=t.sortColumn),t.sortOrder&&(r.sortOrder=t.sortOrder)),Object.keys(r).length>0?"?"+new URLSearchParams(r).toString():""}}
283var ci=class extends Error{constructor(e,t){var r;super(e),this.name="IcebergError",this.status=t.status,this.icebergType=t.icebergType,this.icebergCode=t.icebergCode,this.details=t.details,this.isCommitStateUnknown=t.icebergType==="CommitStateUnknownException"||[500,502,504].includes(t.status)&&((r=t.icebergType)==null?void 0:r.includes("CommitState"))===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function t4(e,t,r){const n=new URL(t,e);if(r)for(const[o,s]of Object.entries(r))s!==void 0&&n.searchParams.set(o,s);return n.toString()}async function r4(e){return!e||e.type==="none"?{}:e.type==="bearer"?{Authorization:`Bearer ${e.token}`}:e.type==="header"?{[e.name]:e.value}:e.type==="custom"?await e.getHeaders():{}}function n4(e){const t=e.fetchImpl??globalThis.fetch;return{async request({method:r,path:n,query:o,body:s,headers:i}){const l=t4(e.baseUrl,n,o),c=await r4(e.auth),d=await t(l,{method:r,headers:{...s?{"Content-Type":"application/json"}:{},...c,...i},body:s?JSON.stringify(s):void 0}),u=await d.text(),h=(d.headers.get("content-type")||"").includes("application/json"),p=h&&u?JSON.parse(u):u;if(!d.ok){const m=h?p:void 0,v=m==null?void 0:m.error;throw new ci((v==null?void 0:v.message)??`Request failed with status ${d.status}`,{status:d.status,icebergType:v==null?void 0:v.type,icebergCode:v==null?void 0:v.code,details:m})}return{status:d.status,headers:d.headers,data:p}}}}function sl(e){return e.join("�")}var a4=class{constructor(e,t=""){this.client=e,this.prefix=t}async listNamespaces(e){const t=e?{parent:sl(e.namespace)}:void 0;return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:t})).data.namespaces.map(n=>({namespace:n}))}async createNamespace(e,t){const r={namespace:e.namespace,properties:t==null?void 0:t.properties};return(await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:r})).data}async dropNamespace(e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${sl(e.namespace)}`})}async loadNamespaceMetadata(e){return{properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${sl(e.namespace)}`})).data.properties}}async namespaceExists(e){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${sl(e.namespace)}`}),!0}catch(t){if(t instanceof ci&&t.status===404)return!1;throw t}}async createNamespaceIfNotExists(e,t){try{return await this.createNamespace(e,t)}catch(r){if(r instanceof ci&&r.status===409)return;throw r}}};function Aa(e){return e.join("�")}var o4=class{constructor(e,t="",r){this.client=e,this.prefix=t,this.accessDelegation=r}async listTables(e){return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables`})).data.identifiers}async createTable(e,t){const r={};return this.accessDelegation&&(r["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables`,body:t,headers:r})).data.metadata}async updateTable(e,t){const r=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables/${e.name}`,body:t});return{"metadata-location":r.data["metadata-location"],metadata:r.data.metadata}}async dropTable(e,t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables/${e.name}`,query:{purgeRequested:String((t==null?void 0:t.purge)??!1)}})}async loadTable(e){const t={};return this.accessDelegation&&(t["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables/${e.name}`,headers:t})).data.metadata}async tableExists(e){const t={};this.accessDelegation&&(t["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Aa(e.namespace)}/tables/${e.name}`,headers:t}),!0}catch(r){if(r instanceof ci&&r.status===404)return!1;throw r}}async createTableIfNotExists(e,t){try{return await this.createTable(e,t)}catch(r){if(r instanceof ci&&r.status===409)return await this.loadTable({namespace:e.namespace,name:t.name});throw r}}},s4=class{constructor(e){var n;let t="v1";e.catalogName&&(t+=`/${e.catalogName}`);const r=e.baseUrl.endsWith("/")?e.baseUrl:`${e.baseUrl}/`;this.client=n4({baseUrl:r,auth:e.auth,fetchImpl:e.fetch}),this.accessDelegation=(n=e.accessDelegation)==null?void 0:n.join(","),this.namespaceOps=new a4(this.client,t),this.tableOps=new o4(this.client,t,this.accessDelegation)}async listNamespaces(e){return this.namespaceOps.listNamespaces(e)}async createNamespace(e,t){return this.namespaceOps.createNamespace(e,t)}async dropNamespace(e){await this.namespaceOps.dropNamespace(e)}async loadNamespaceMetadata(e){return this.namespaceOps.loadNamespaceMetadata(e)}async listTables(e){return this.tableOps.listTables(e)}
283async createTable(e,t){return this.tableOps.createTable(e,t)}async updateTable(e,t){return this.tableOps.updateTable(e,t)}async dropTable(e,t){await this.tableOps.dropTable(e,t)}async loadTable(e){return this.tableOps.loadTable(e)}async namespaceExists(e){return this.namespaceOps.namespaceExists(e)}async tableExists(e){return this.tableOps.tableExists(e)}async createNamespaceIfNotExists(e,t){return this.namespaceOps.createNamespaceIfNotExists(e,t)}async createTableIfNotExists(e,t){return this.tableOps.createTableIfNotExists(e,t)}};class mk{constructor(t,r={},n){this.shouldThrowOnError=!1,this.url=t.replace(/\/$/,""),this.headers=Object.assign(Object.assign({},hk),r),this.fetch=Ap(n)}throwOnError(){return this.shouldThrowOnError=!0,this}createBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield Yt(this.fetch,`${this.url}/bucket`,{name:t},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}listBuckets(t){return q(this,void 0,void 0,function*(){try{const r=new URLSearchParams;(t==null?void 0:t.limit)!==void 0&&r.set("limit",t.limit.toString()),(t==null?void 0:t.offset)!==void 0&&r.set("offset",t.offset.toString()),t!=null&&t.sortColumn&&r.set("sortColumn",t.sortColumn),t!=null&&t.sortOrder&&r.set("sortOrder",t.sortOrder),t!=null&&t.search&&r.set("search",t.search);const n=r.toString(),o=n?`${this.url}/bucket?${n}`:`${this.url}/bucket`;return{data:yield li(this.fetch,o,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}deleteBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield Rp(this.fetch,`${this.url}/bucket/${t}`,{},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(xe(r))return{data:null,error:r};throw r}})}from(t){if(!UI(t))throw new ji("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");const r=new s4({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:()=>q(this,void 0,void 0,function*(){return this.headers})},fetch:this.fetch}),n=this.shouldThrowOnError;return new Proxy(r,{get(s,i){const l=s[i];return typeof l!="function"?l:(...c)=>q(this,void 0,void 0,function*(){try{return{data:yield l.apply(s,c),error:null}}catch(d){if(n)throw d;return{data:null,error:d}}})}})}}const Pp={"X-Client-Info":`storage-js/${uk}`,"Content-Type":"application/json"};class Op extends Error{constructor(t){super(t),this.__isStorageVectorsError=!0,this.name="StorageVectorsError"}}function ft(e){return typeof e=="object"&&e!==null&&"__isStorageVectorsError"in e}class Pl extends Op{constructor(t,r,n){super(t),this.name="StorageVectorsApiError",this.status=r,this.statusCode=n}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}}class pk extends Op{constructor(t,r){super(t),this.name="StorageVectorsUnknownError",this.originalError=r}}var Wh;(function(e){e.InternalError="InternalError",e.S3VectorConflictException="S3VectorConflictException",e.S3VectorNotFoundException="S3VectorNotFoundException",e.S3VectorBucketNotEmpty="S3VectorBucketNotEmpty",e.S3VectorMaxBucketsExceeded="S3VectorMaxBucketsExceeded",e.S3VectorMaxIndexesExceeded="S3VectorMaxIndexesExceeded"})(Wh||(Wh={}));const ad=e=>e?(...t)=>e(...t):(...t)=>fetch(...t),i4=()=>Response,fk=e=>{if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},l4=e=>Array.from(new Float32Array(e)),c4=(e,t)=>{if(t!==void 0&&e.float32.length!==t)throw new Error(`Vector dimension mismatch: expected ${t}, got ${e.float32.length}`)},ky=e=>e.msg||e.message||e.error_description||e.error||JSON.stringify(e),d4=(e,t,r)=>q(void 0,void 0,void 0,function*(){if(e&&typeof e=="object"&&"status"in e&&"ok"in e&&typeof e.status=="number"&&!(r!=null&&r.noResolveJson)){const o=e.status||500,s=e;if(typeof s.json=="function")s.json().then(i=>{const l=(i==null?void 0:i.statusCode)||(i==null?void 0:i.code)||o+"";t(new Pl(ky(i),o,l))}).catch(()=>{const i=o+"",l=s.statusText||`HTTP ${o} error`;t(new Pl(l,o,i))});else{const i=o+"",l=s.statusText||`HTTP ${o} error`;t(new Pl(l,o,i))}}else t(new pk(ky(e),e))}),u4=(e,t,r,n)=>{const o={method:e,headers:(t==null?void 0:t.headers)||{}};return n?(fk(n)?(o.headers=Object.assign({"Content-Type":"application/json"},t==null?void 0:t.headers),o.body=JSON.stringify(n)):o.body=n,Object.assign(Object.assign({},o),r)):o};function h4(e,t,r,n,o,s){return q(this,void 0,void 0,function*(){return new Promise((i,l)=>{e(r,u4(t,n,o,s)).then(c=>{if(!c.ok)throw c;if(n!=null&&n.noResolveJson)return c;const d=c.headers.get("content-type");
283return!d||!d.includes("application/json")?{}:c.json()}).then(c=>i(c)).catch(c=>d4(c,l,n))})})}function jt(e,t,r,n,o){return q(this,void 0,void 0,function*(){return h4(e,"POST",t,n,o,r)})}class gk{constructor(t,r={},n){this.shouldThrowOnError=!1,this.url=t.replace(/\/$/,""),this.headers=Object.assign(Object.assign({},Pp),r),this.fetch=ad(n)}throwOnError(){return this.shouldThrowOnError=!0,this}createIndex(t){return q(this,void 0,void 0,function*(){try{return{data:(yield jt(this.fetch,`${this.url}/CreateIndex`,t,{headers:this.headers}))||{},error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}getIndex(t,r){return q(this,void 0,void 0,function*(){try{return{data:yield jt(this.fetch,`${this.url}/GetIndex`,{vectorBucketName:t,indexName:r},{headers:this.headers}),error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(ft(n))return{data:null,error:n};throw n}})}listIndexes(t){return q(this,void 0,void 0,function*(){try{return{data:yield jt(this.fetch,`${this.url}/ListIndexes`,t,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}deleteIndex(t,r){return q(this,void 0,void 0,function*(){try{return{data:(yield jt(this.fetch,`${this.url}/DeleteIndex`,{vectorBucketName:t,indexName:r},{headers:this.headers}))||{},error:null}}catch(n){if(this.shouldThrowOnError)throw n;if(ft(n))return{data:null,error:n};throw n}})}}class yk{constructor(t,r={},n){this.shouldThrowOnError=!1,this.url=t.replace(/\/$/,""),this.headers=Object.assign(Object.assign({},Pp),r),this.fetch=ad(n)}throwOnError(){return this.shouldThrowOnError=!0,this}putVectors(t){return q(this,void 0,void 0,function*(){try{if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return{data:(yield jt(this.fetch,`${this.url}/PutVectors`,t,{headers:this.headers}))||{},error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}getVectors(t){return q(this,void 0,void 0,function*(){try{return{data:yield jt(this.fetch,`${this.url}/GetVectors`,t,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}listVectors(t){return q(this,void 0,void 0,function*(){try{if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return{data:yield jt(this.fetch,`${this.url}/ListVectors`,t,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}queryVectors(t){return q(this,void 0,void 0,function*(){try{return{data:yield jt(this.fetch,`${this.url}/QueryVectors`,t,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}deleteVectors(t){return q(this,void 0,void 0,function*(){try{if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return{data:(yield jt(this.fetch,`${this.url}/DeleteVectors`,t,{headers:this.headers}))||{},error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}}class vk{constructor(t,r={},n){this.shouldThrowOnError=!1,this.url=t.replace(/\/$/,""),this.headers=Object.assign(Object.assign({},Pp),r),this.fetch=ad(n)}throwOnError(){return this.shouldThrowOnError=!0,this}createBucket(t){return q(this,void 0,void 0,function*(){try{return{data:(yield jt(this.fetch,`${this.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:this.headers}))||{},error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}getBucket(t){return q(this,void 0,void 0,function*(){try{return{data:yield jt(this.fetch,`${this.url}/GetVectorBucket`,{vectorBucketName:t},{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}listBuckets(){return q(this,arguments,void 0,function*(t={}){try{return{data:yield jt(this.fetch,`${this.url}/ListVectorBuckets`,t,{headers:this.headers}),error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}deleteBucket(t){return q(this,void 0,void 0,function*(){try{return{data:(yield jt(this.fetch,`${this.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:this.headers}))||{},error:null}}catch(r){if(this.shouldThrowOnError)throw r;if(ft(r))return{data:null,error:r};throw r}})}}class wk extends vk{constructor(t,r={}){super(t,r.headers||{},r.fetch)}from(t){return new xk(this.url,this.headers,t,this.fetch)}createBucket(t){const r=Object.create(null,{createBucket:{get:()=>super.createBucket}});return q(this,void 0,void 0,function*(){return r.createBucket.call(this,t)})}getBucket(t){const r=Object.create(null,{getBucket:{get:()=>super.getBucket}});return q(this,void 0,void 0,function*(){return r.getBucket.call(this,t)})}listBuckets(){const t=Object.create(null,{listBuckets:{get:()=>super.listBuckets}});return q(this,arguments,void 0,function*(r={}
283){return t.listBuckets.call(this,r)})}deleteBucket(t){const r=Object.create(null,{deleteBucket:{get:()=>super.deleteBucket}});return q(this,void 0,void 0,function*(){return r.deleteBucket.call(this,t)})}}class xk extends gk{constructor(t,r,n,o){super(t,r,o),this.vectorBucketName=n}createIndex(t){const r=Object.create(null,{createIndex:{get:()=>super.createIndex}});return q(this,void 0,void 0,function*(){return r.createIndex.call(this,Object.assign(Object.assign({},t),{vectorBucketName:this.vectorBucketName}))})}listIndexes(){const t=Object.create(null,{listIndexes:{get:()=>super.listIndexes}});return q(this,arguments,void 0,function*(r={}){return t.listIndexes.call(this,Object.assign(Object.assign({},r),{vectorBucketName:this.vectorBucketName}))})}getIndex(t){const r=Object.create(null,{getIndex:{get:()=>super.getIndex}});return q(this,void 0,void 0,function*(){return r.getIndex.call(this,this.vectorBucketName,t)})}deleteIndex(t){const r=Object.create(null,{deleteIndex:{get:()=>super.deleteIndex}});return q(this,void 0,void 0,function*(){return r.deleteIndex.call(this,this.vectorBucketName,t)})}index(t){return new bk(this.url,this.headers,this.vectorBucketName,t,this.fetch)}}class bk extends yk{constructor(t,r,n,o,s){super(t,r,s),this.vectorBucketName=n,this.indexName=o}putVectors(t){const r=Object.create(null,{putVectors:{get:()=>super.putVectors}});return q(this,void 0,void 0,function*(){return r.putVectors.call(this,Object.assign(Object.assign({},t),{vectorBucketName:this.vectorBucketName,indexName:this.indexName}))})}getVectors(t){const r=Object.create(null,{getVectors:{get:()=>super.getVectors}});return q(this,void 0,void 0,function*(){return r.getVectors.call(this,Object.assign(Object.assign({},t),{vectorBucketName:this.vectorBucketName,indexName:this.indexName}))})}listVectors(){const t=Object.create(null,{listVectors:{get:()=>super.listVectors}});return q(this,arguments,void 0,function*(r={}){return t.listVectors.call(this,Object.assign(Object.assign({},r),{vectorBucketName:this.vectorBucketName,indexName:this.indexName}))})}queryVectors(t){const r=Object.create(null,{queryVectors:{get:()=>super.queryVectors}});return q(this,void 0,void 0,function*(){return r.queryVectors.call(this,Object.assign(Object.assign({},t),{vectorBucketName:this.vectorBucketName,indexName:this.indexName}))})}deleteVectors(t){const r=Object.create(null,{deleteVectors:{get:()=>super.deleteVectors}});return q(this,void 0,void 0,function*(){return r.deleteVectors.call(this,Object.assign(Object.assign({},t),{vectorBucketName:this.vectorBucketName,indexName:this.indexName}))})}}class m4 extends e4{constructor(t,r={},n,o){super(t,r,n,o)}from(t){return new ZI(this.url,this.headers,t,this.fetch)}get vectors(){return new wk(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new mk(this.url+"/iceberg",this.headers,this.fetch)}}const p4=Object.freeze(Object.defineProperty({__proto__:null,StorageAnalyticsClient:mk,StorageApiError:ck,StorageClient:m4,StorageError:ji,StorageUnknownError:vc,StorageVectorsApiError:Pl,StorageVectorsClient:wk,StorageVectorsError:Op,get StorageVectorsErrorCode(){return Wh},StorageVectorsUnknownError:pk,VectorBucketApi:vk,VectorBucketScope:xk,VectorDataApi:yk,VectorIndexApi:gk,VectorIndexScope:bk,isPlainObject:fk,isStorageError:xe,isStorageVectorsError:ft,normalizeToFloat32:l4,resolveFetch:ad,resolveResponse:i4,validateVectorDimension:c4},Symbol.toStringTag,{value:"Module"})),f4=hi(p4);var kk={},od={};Object.defineProperty(od,"__esModule",{value:!0});od.version=void 0;od.version="2.87.1";(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.DEFAULT_REALTIME_OPTIONS=e.DEFAULT_AUTH_OPTIONS=e.DEFAULT_DB_OPTIONS=e.DEFAULT_GLOBAL_OPTIONS=e.DEFAULT_HEADERS=void 0;const t=od;let r="";typeof Deno<"u"?r="deno":typeof document<"u"?r="web":typeof navigator<"u"&&navigator.product==="ReactNative"?r="react-native":r="node",e.DEFAULT_HEADERS={"X-Client-Info":`supabase-js-${r}/${t.version}`},e.DEFAULT_GLOBAL_OPTIONS={headers:e.DEFAULT_HEADERS},e.DEFAULT_DB_OPTIONS={schema:"public"},e.DEFAULT_AUTH_OPTIONS={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:"implicit"},e.DEFAULT_REALTIME_OPTIONS={}})(kk);var jk={};
283(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.fetchWithAuth=e.resolveHeadersConstructor=e.resolveFetch=void 0;const t=o=>o?(...s)=>o(...s):(...s)=>fetch(...s);e.resolveFetch=t;const r=()=>Headers;e.resolveHeadersConstructor=r;const n=(o,s,i)=>{const l=(0,e.resolveFetch)(i),c=(0,e.resolveHeadersConstructor)();return async(d,u)=>{var h;const p=(h=await s())!==null&&h!==void 0?h:o;let m=new c(u==null?void 0:u.headers);return m.has("apikey")||m.set("apikey",o),m.has("Authorization")||m.set("Authorization",`Bearer ${p}`),l(d,Object.assign(Object.assign({},u),{headers:m}))}};e.fetchWithAuth=n})(jk);var Ln={};Object.defineProperty(Ln,"__esModule",{value:!0});Ln.isBrowser=void 0;Ln.uuid=g4;Ln.ensureTrailingSlash=Sk;Ln.applySettingDefaults=v4;Ln.validateSupabaseUrl=w4;function g4(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=Math.random()*16|0,r=e=="x"?t:t&3|8;return r.toString(16)})}function Sk(e){return e.endsWith("/")?e:e+"/"}const y4=()=>typeof window<"u";Ln.isBrowser=y4;function v4(e,t){var r,n;const{db:o,auth:s,realtime:i,global:l}=e,{db:c,auth:d,realtime:u,global:h}=t,p={db:Object.assign(Object.assign({},c),o),auth:Object.assign(Object.assign({},d),s),realtime:Object.assign(Object.assign({},u),i),storage:{},global:Object.assign(Object.assign(Object.assign({},h),l),{headers:Object.assign(Object.assign({},(r=h==null?void 0:h.headers)!==null&&r!==void 0?r:{}),(n=l==null?void 0:l.headers)!==null&&n!==void 0?n:{})}),accessToken:async()=>""};return e.accessToken?p.accessToken=e.accessToken:delete p.accessToken,p}function w4(e){const t=e==null?void 0:e.trim();if(!t)throw new Error("supabaseUrl is required.");if(!t.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(Sk(t))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}var sd={};const Nk="2.87.1",Ja=30*1e3,Mh=3,ou=Mh*Ja,x4="http://localhost:9999",b4="supabase.auth.token",k4={"X-Client-Info":`gotrue-js/${Nk}`},qh="X-Supabase-Api-Version",Ck={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},j4=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,S4=10*60*1e3;let Ho=class extends Error{constructor(t,r,n){super(t),this.__isAuthError=!0,this.name="AuthError",this.status=r,this.code=n}};function $(e){return typeof e=="object"&&e!==null&&"__isAuthError"in e}let Tk=class extends Ho{constructor(t,r,n){super(t,r,n),this.name="AuthApiError",this.status=r,this.code=n}};function _k(e){return $(e)&&e.name==="AuthApiError"}let an=class extends Ho{constructor(t,r){super(t),this.name="AuthUnknownError",this.originalError=r}},Br=class extends Ho{constructor(t,r,n,o){super(t,n,o),this.name=r,this.status=n}},ht=class extends Br{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0)}};function Ek(e){return $(e)&&e.name==="AuthSessionMissingError"}let Hn=class extends Br{constructor(){super("Auth session or user missing","AuthInvalidToken
283ResponseError",500,void 0)}},Ts=class extends Br{constructor(t){super(t,"AuthInvalidCredentialsError",400,void 0)}},_s=class extends Br{constructor(t,r=null){super(t,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=r}toJSON(){return{name:this.name,message:this.message,status:this.status,details:this.details}}};function Ik(e){return $(e)&&e.name==="AuthImplicitGrantRedirectError"}let zh=class extends Br{constructor(t,r=null){super(t,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=r}toJSON(){return{name:this.name,message:this.message,status:this.status,details:this.details}}},wc=class extends Br{constructor(t,r){super(t,"AuthRetryableFetchError",r,void 0)}};function Ol(e){return $(e)&&e.name==="AuthRetryableFetchError"}let $h=class extends Br{constructor(t,r,n){super(t,"AuthWeakPasswordError",r,"weak_password"),this.reasons=n}};function N4(e){return $(e)&&e.name==="AuthWeakPasswordError"}let xc=class extends Br{constructor(t){super(t,"AuthInvalidJwtError",400,"invalid_jwt")}};const bc="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),jy=` 	
284\r=`.split(""),C4=(()=>{const e=new Array(128);for(let t=0;t<e.length;t+=1)e[t]=-1;for(let t=0;t<jy.length;t+=1)e[jy[t].charCodeAt(0)]=-2;for(let t=0;t<bc.length;t+=1)e[bc[t].charCodeAt(0)]=t;return e})();function Sy(e,t,r){if(e!==null)for(t.queue=t.queue<<8|e,t.queuedBits+=8;t.queuedBits>=6;){const n=t.queue>>t.queuedBits-6&63;r(bc[n]),t.queuedBits-=6}else if(t.queuedBits>0)for(t.queue=t.queue<<6-t.queuedBits,t.queuedBits=6;t.queuedBits>=6;){const n=t.queue>>t.queuedBits-6&63;r(bc[n]),t.queuedBits-=6}}function Ak(e,t,r){const n=C4[e];if(n>-1)for(t.queue=t.queue<<6|n,t.queuedBits+=6;t.queuedBits>=8;)r(t.queue>>t.queuedBits-8&255),t.queuedBits-=8;else{if(n===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(e)}"`)}}function Ny(e){const t=[],r=i=>{t.push(String.fromCodePoint(i))},n={utf8seq:0,codepoint:0},o={queue:0,queuedBits:0},s=i=>{E4(i,n,r)};for(let i=0;i<e.length;i+=1)Ak(e.charCodeAt(i),o,s);return t.join("")}function T4(e,t){if(e<=127){t(e);return}else if(e<=2047){t(192|e>>6),t(128|e&63);return}else if(e<=65535){t(224|e>>12),t(128|e>>6&63),t(128|e&63);return}else if(e<=1114111){t(240|e>>18),t(128|e>>12&63),t(128|e>>6&63),t(128|e&63);return}throw new Error(`Unrecognized Unicode codepoint: ${e.toString(16)}`)}function _4(e,t){for(let r=0;r<e.length;r+=1){let n=e.charCodeAt(r);if(n>55295&&n<=56319){const o=(n-55296)*1024&65535;n=(e.charCodeAt(r+1)-56320&65535|o)+65536,r+=1}T4(n,t)}}function E4(e,t,r){if(t.utf8seq===0){if(e<=127){r(e);return}for(let n=1;n<6;n+=1)if(!(e>>7-n&1)){t.utf8seq=n;break}if(t.utf8seq===2)t.codepoint=e&31;else if(t.utf8seq===3)t.codepoint=e&15;else if(t.utf8seq===4)t.codepoint=e&7;else throw new Error("Invalid UTF-8 sequence");t.utf8seq-=1}else if(t.utf8seq>0){if(e<=127)throw new Error("Invalid UTF-8 sequence");t.codepoint=t.codepoint<<6|e&63,t.utf8seq-=1,t.utf8seq===0&&r(t.codepoint)}}function jo(e){const t=[],r={queue:0,queuedBits:0},n=o=>{t.push(o)};for(let o=0;o<e.length;o+=1)Ak(e.charCodeAt(o),r,n);return new Uint8Array(t)}function I4(e){const t=[];return _4(e,r=>t.push(r)),new Uint8Array(t)}function Xn(e){const t=[],r={queue:0,queuedBits:0},n=o=>{t.push(o)};return e.forEach(o=>Sy(o,r,n)),Sy(null,r,n),t.join("")}function A4(e){return Math.round(Date.now()/1e3)+e}function R4(){return Symbol("auth-callback")}const $e=()=>typeof window<"u"&&typeof document<"u",zn={tested:!1,writable:!1},Rk=()=>{if(!$e())return!1;try{if(typeof globalThis.localStorage!="object")return!1}catch{return!1}if(zn.tested)return zn.writable;const e=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(e,e),globalThis.localStorage.removeItem(e),zn.tested=!0,zn.writable=!0}catch{zn.tested=!0,zn.writable=!1}return zn.writable};function P4(e){const t={},r=new URL(e);if(r.hash&&r.hash[0]==="#")try{new URLSearchParams(r.hash.substring(1)).forEach((o,s)=>{t[s]=o})}catch{}return r.searchParams.forEach((n,o)=>{t[o]=n}),t}const Pk=e=>e?(...t)=>e(...t):(...t)=>fetch(...t),O4=e=>typeof e=="object"&&e!==null&&"status"in e&&"ok"in e&&"json"in e&&typeof e.json=="function",Qa=async(e,t,r)=>{await e.setItem(t,JSON.stringify(r))},$n=async(e,t)=>{const r=await e.getItem(t);if(!r)return null;try{return JSON.parse(r)}catch{return r}},ze=async(e,t)=>{await e.removeItem(t)};class id{constructor(){this.promise=new id.promiseConstructor((t,r)=>{this.resolve=t,this.reject=r})}}id.promiseConstructor=Promise;function su(e){const t=e.split(".");if(t.length!==3)throw new xc("Invalid JWT structure");for(let n=0;n<t.length;n++)if(!j4.test(t[n]))throw new xc("JWT not in base64url format");return{header:JSON.parse(Ny(t[0])),payload:JSON.parse(Ny(t[1])),signature:jo(t[2]),raw:{header:t[0],payload:t[1]}}}async function D4(e){return await new Promise(t=>{setTimeout(()=>t(null),e)})}function L4(e,t){return new Promise((n,o)=>{(async()=>{for(let s=0;s<1/0;s++)try{const i=await e(s);if(!t(s,null,i)){n(i);return}}catch(i){if(!t(s,i)){o(i);return}}})()})}function W4(e){return("0"+e.toString(16)).substr(-2)}function M4(){const t=new Uint32Array(56);if(typeof crypto>"u"){const r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",n=r.length;let o="";for(let s=0;s<56;s++)o+=r.charAt(Math.floor(Math.random()*n));return o}return crypto.getRandomValues(t),Array.from(t,W4).join("")}async function q4(e){const r=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",r),o=new Uint8Array(n);return Array.from(o).map(s=>String.fromCharCode(s)).join("")}async function z4(e){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code 
284challenge method will default to use plain instead of sha256."),e;const r=await q4(e);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function Ra(e,t,r=!1){const n=M4();let o=n;r&&(o+="/PASSWORD_RECOVERY"),await Qa(e,`${t}-code-verifier`,o);const s=await z4(n);return[s,n===s?"plain":"s256"]}const $4=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;function G4(e){const t=e.headers.get(qh);if(!t||!t.match($4))return null;try{return new Date(`${t}T00:00:00.0Z`)}catch{return null}}function B4(e){if(!e)throw new Error("Missing exp claim");const t=Math.floor(Date.now()/1e3);if(e<=t)throw new Error("JWT has expired")}function H4(e){switch(e){case"RS256":return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case"ES256":return{name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}const F4=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function Pa(e){if(!F4.test(e))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function iu(){const e={};return new Proxy(e,{get:(t,r)=>{if(r==="__isUserNotAvailableProxy")return!0;if(typeof r=="symbol"){const n=r.toString();if(n==="Symbol(Symbol.toPrimitive)"||n==="Symbol(Symbol.toStringTag)"||n==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${r}" property of the session object is not supported. Please use getUser() instead.`)},set:(t,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(t,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function U4(e,t){return new Proxy(e,{get:(r,n,o)=>{if(n==="__isInsecureUserWarningProxy")return!0;if(typeof n=="symbol"){const s=n.toString();if(s==="Symbol(Symbol.toPrimitive)"||s==="Symbol(Symbol.toStringTag)"||s==="Symbol(util.inspect.custom)"||s==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(r,n,o)}return!t.value&&typeof n=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),t.value=!0),Reflect.get(r,n,o)}})}function Cy(e){return JSON.parse(JSON.stringify(e))}const Fn=e=>e.msg||e.message||e.error_description||e.error||JSON.stringify(e),V4=[502,503,504];async function Ty(e){var t;if(!O4(e))throw new wc(Fn(e),0);if(V4.includes(e.status))throw new wc(Fn(e),e.status);let r;try{r=await e.json()}catch(s){throw new an(Fn(s),s)}let n;const o=G4(e);if(o&&o.getTime()>=Ck["2024-01-01"].timestamp&&typeof r=="object"&&r&&typeof r.code=="string"?n=r.code:typeof r=="object"&&r&&typeof r.error_code=="string"&&(n=r.error_code),n){if(n==="weak_password")throw new $h(Fn(r),e.status,((t=r.weak_password)===null||t===void 0?void 0:t.reasons)||[]);if(n==="session_not_found")throw new ht}else if(typeof r=="object"&&r&&typeof r.weak_password=="object"&&r.weak_password&&Array.isArray(r.weak_password.reasons)&&r.weak_password.reasons.length&&r.weak_password.reasons.reduce((s,i)=>s&&typeof i=="string",!0))throw new $h(Fn(r),e.status,r.weak_password.reasons);throw new Tk(Fn(r),e.status||500,n)}const Y4=(e,t,r,n)=>{const o={method:e,headers:(t==null?void 0:t.headers)||{}};return e==="GET"?o:(o.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},t==null?void 0:t.headers),o.body=JSON.stringify(n),Object.assign(Object.assign({},o),r))};async function B(e,t,r,n){var o;const s=Object.assign({},n==null?void 0:n.headers);s[qh]||(s[qh]=Ck["2024-01-01"].name),n!=null&&n.jwt&&(s.Authorization=`Bearer ${n.jwt}`);const i=(o=n==null?void 0:n.query)!==null&&o!==void 0?o:{};n!=null&&n.redirectTo&&(i.redirect_to=n.redirectTo);const l=Object.keys(i).length?"?"+new URLSearchParams(i).toString():"",c=await K4(e,t,r+l,{headers:s,noResolveJson:n==null?void 0:n.noResolveJson},{},n==null?void 0:n.body);return n!=null&&n.xform?n==null?void 0:n.xform(c):{data:Object.assign({},c),error:null}}async function K4(e,t,r,n,o,s){const i=Y4(t,n,o,s);let l;try{l=await e(r,Object.assign({},i))}catch(c){throw console.error(c),new wc(Fn(c),0)}if(l.ok||await Ty(l),n!=null&&n.noResolveJson)return l;try{return await l.json()}catch(c){await Ty(c)}}function Ft(e){var t;let r=null;X4(e)&&(r=Object.assign({},e),e.expires_at||(r.expires_at=A4(e.expires_in)));const n=(t=e.user)!==null&&t!==void 0?t:e;return{data:{session:r,user:n},error:null}}function _y(e){const t=Ft(e);return!t.error&&e.weak_password&&typeof e.weak_password=="object"&&Array.isArray(e.weak_password.reasons)&&e.weak_password.reasons.length&&e.weak_password.message&&typeof e.weak_password.message=="string"&&e.weak_password.reasons.reduce((r,n)=>r&&typeof n=="string",!0)&&(t.data.weak_password=e.weak_password),t}function on(e){var t;return{data:{user:(t=e.user)!==null&&t!==void 0?t:e},error:null}}function J4(e){return{data:e,error:null}}function Q4(e){const{action_link:t,email_otp:r,hashed_token:n,redirect_to:o,verification_type:s}=e,i=es(e,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),l={action_link:t,email_otp:r,hashed_token:n,redirect_to:o,verification_type:s},c=Object.assign({},i);return{data:{properties:l,user:c},error:null}}function Ey(e){return e}function X4(e){return e.access_token&&e.refresh_token&&e.expires_in}const Dl=["global","local","others"];let Dp=class{constructor({url:t="",headers:r={},fetch:n}){this.url=t,this.headers=r,this.fetch=Pk(n),this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)}}async signOut(t,r=Dl[0]){if(Dl.indexOf(r)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${Dl.join(", ")}`);try{return await B(this.fetch,"POST",`${this.url}/logout?scope=${r}`,{headers:this.headers,jwt:t,noResolveJson:!0}),{data:null,error:null}}catch(n){if($(n))return{data:null,error:n};throw n}}async inviteUserByEmail(t,r={}){try{return await B(this.fetch,"POST",`${this.url}/invite`,{body:{email:t,data:r.data},headers:this.headers,redirectTo:r.redirectTo,xform:on})}catch(n){if($(n))return{data:{user:null},error:n};throw n}}async generateLink(t){try{const{options:r}=t,n=es(t,["options"]),o=Object.assign(Object.assign({},n),r);return"newEmail"in n&&(o.new_email=n==null?void 0:n.newEmail,delete o.newEmail),await B(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:o,headers:this.headers,xform:Q4,redirectTo:r==null?void 0:r.redirectTo})}catch(r){if($(r))return{data:{properties:null,user:null},error:r};throw r}}async createUser(t){try{return await B(this.fetch,"POST",`${this.url}/admin/users`,{body:t,headers:this.headers,xform:on})}catch(r){if($(r))return{data:{user:null},error:r};throw r}}async listUsers(t){var r,n,o,s,i,l,c;try{const d={nextPage:null,lastPage:0,total:0},u=await B(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=t==null?void 0:t.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(s=(o=t==null?void 0:t.perPage)===null||o===void 0?void 0:o.toString())!==null&&s!==void 0?s:""},xform:Ey});if(u.error)throw u.error;const h=await u.json(),p=(i=u.headers.get("x-total-count"))!==null&&i!==void 0?i:0,m=(c=(l=u.headers.get("link"))===null||l===void 0?void 0:l.split(","))!==null&&c!==void 0?c:[];return m.length>0&&(m.forEach(v=>{const y=parseInt(v.split(";")[0].split("=")[1].substring(0,1)),x=JSON.parse(v.split(";")[1].split("=")[1]);d[`${x}Page`]=y}),d.total=parseInt(p)),{data:Object.assign(Object.assign({},h),d),error:null}}catch(d){if($(d))return{data:{users:[]},error:d};throw d}}async getUserById(t){Pa(t);try{return await B(this.fetch,"GET",`${this.url}/admin/users/${t}`,{headers:this.headers,xform:on})}catch(r){if($(r))return{data:{user:null},error:r};throw r}}async updateUserById(t,r){Pa(t);try{return await B(this.fetch,"PUT",`${this.url}/admin/users/${t}`,{body:r,headers:this.headers,xform:on})}catch(n){if($(n))return{data:{user:null},error:n};throw n}}async deleteUser(t,r=!1){Pa(t);
284try{return await B(this.fetch,"DELETE",`${this.url}/admin/users/${t}`,{headers:this.headers,body:{should_soft_delete:r},xform:on})}catch(n){if($(n))return{data:{user:null},error:n};throw n}}async _listFactors(t){Pa(t.userId);try{const{data:r,error:n}=await B(this.fetch,"GET",`${this.url}/admin/users/${t.userId}/factors`,{headers:this.headers,xform:o=>({data:{factors:o},error:null})});return{data:r,error:n}}catch(r){if($(r))return{data:null,error:r};throw r}}async _deleteFactor(t){Pa(t.userId),Pa(t.id);try{return{data:await B(this.fetch,"DELETE",`${this.url}/admin/users/${t.userId}/factors/${t.id}`,{headers:this.headers}),error:null}}catch(r){if($(r))return{data:null,error:r};throw r}}async _listOAuthClients(t){var r,n,o,s,i,l,c;try{const d={nextPage:null,lastPage:0,total:0},u=await B(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=t==null?void 0:t.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(s=(o=t==null?void 0:t.perPage)===null||o===void 0?void 0:o.toString())!==null&&s!==void 0?s:""},xform:Ey});if(u.error)throw u.error;const h=await u.json(),p=(i=u.headers.get("x-total-count"))!==null&&i!==void 0?i:0,m=(c=(l=u.headers.get("link"))===null||l===void 0?void 0:l.split(","))!==null&&c!==void 0?c:[];return m.length>0&&(m.forEach(v=>{const y=parseInt(v.split(";")[0].split("=")[1].substring(0,1)),x=JSON.parse(v.split(";")[1].split("=")[1]);d[`${x}Page`]=y}),d.total=parseInt(p)),{data:Object.assign(Object.assign({},h),d),error:null}}catch(d){if($(d))return{data:{clients:[]},error:d};throw d}}async _createOAuthClient(t){try{return await B(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:t,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if($(r))return{data:null,error:r};throw r}}async _getOAuthClient(t){try{return await B(this.fetch,"GET",`${this.url}/admin/oauth/clients/${t}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if($(r))return{data:null,error:r};throw r}}async _updateOAuthClient(t,r){try{return await B(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${t}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if($(n))return{data:null,error:n};throw n}}async _deleteOAuthClient(t){try{return await B(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${t}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if($(r))return{data:null,error:r};throw r}}async _regenerateOAuthClientSecret(t){try{return await B(this.fetch,"POST",`${this.url}/admin/oauth/clients/${t}/regenerate_secret`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if($(r))return{data:null,error:r};throw r}}};function Iy(e={}){return{getItem:t=>e[t]||null,setItem:(t,r)=>{e[t]=r},removeItem:t=>{delete e[t]}}}const Un={debug:!!(globalThis&&Rk()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")};class Lp extends Error{constructor(t){super(t),this.isAcquireTimeout=!0}}let Ok=class extends Lp{};class Z4 extends Lp{}async function Dk(e,t,r){Un.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",e,t);const n=new globalThis.AbortController;return t>0&&setTimeout(()=>{n.abort(),Un.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",e)},t),await Promise.resolve().then(()=>globalThis.navigator.locks.request(e,t===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:n.signal},async o=>{if(o){Un.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",e,o.name);try{return await r()}finally{Un.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",e,o.name)}}else{if(t===0)throw Un.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",e),new Ok(`Acquiring an exclusive Navigator LockManager lock "${e}" immediately failed`);if(Un.debug)try{const s=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(s,null,"  "))}catch(s){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",s)}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),await r()}}))}const Ay={};async function eA(e,t,r){var n;const o=(n=Ay[e])!==null&&n!==void 0?n:Promise.resolve(),s=Promise.race([o.catch(()=>null),t>=0?new Promise((i,l)=>{setTimeout(()=>{l(new Z4(`Acquring process lock with name "${e}" timed out`))},t)}):null].filter(i=>i)).catch(i=>{if(i&&i.isAcquireTimeout)throw i;return null}).then(async()=>await r());return Ay[e]=s.catch(async i=>{if(i&&i.isAcquireTimeout)return await o,null;throw i}),await s}function tA(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch{typeof self<"u"&&(self.globalThis=self)}}function Lk(e){if(!/^0x[a-fA-F0-9]{40}$/.test(e))throw new Error(`@supabase/auth-js: Address "${e}
284" is invalid.`);return e.toLowerCase()}function rA(e){return parseInt(e,16)}function nA(e){const t=new TextEncoder().encode(e);return"0x"+Array.from(t,n=>n.toString(16).padStart(2,"0")).join("")}function aA(e){var t;const{chainId:r,domain:n,expirationTime:o,issuedAt:s=new Date,nonce:i,notBefore:l,requestId:c,resources:d,scheme:u,uri:h,version:p}=e;{if(!Number.isInteger(r))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${r}`);if(!n)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(i&&i.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${i}`);if(!h)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(p!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${p}`);if(!((t=e.statement)===null||t===void 0)&&t.includes(`
285`))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${e.statement}`)}const m=Lk(e.address),v=u?`${u}://${n}`:n,y=e.statement?`${e.statement}
286`:"",x=`${v} wants you to sign in with your Ethereum account:
287${m}
288
289${y}`;let g=`URI: ${h}
290Version: ${p}
291Chain ID: ${r}${i?`
292Nonce: ${i}`:""}
293Issued At: ${s.toISOString()}`;if(o&&(g+=`
294Expiration Time: ${o.toISOString()}`),l&&(g+=`
295Not Before: ${l.toISOString()}`),c&&(g+=`
296Request ID: ${c}`),d){let f=`
297Resources:`;for(const w of d){if(!w||typeof w!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${w}`);f+=`
298- ${w}`}g+=f}return`${x}
299${g}`}class Pe extends Error{constructor({message:t,code:r,cause:n,name:o}){var s;super(t,{cause:n}),this.__isWebAuthnError=!0,this.name=(s=o??(n instanceof Error?n.name:void 0))!==null&&s!==void 0?s:"Unknown Error",this.code=r}}class kc extends Pe{constructor(t,r){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:r,message:t}),this.name="WebAuthnUnknownError",this.originalError=r}}function oA({error:e,options:t}){var r,n,o;const{publicKey:s}=t;if(!s)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new Pe({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else if(e.name==="ConstraintError"){if(((r=s.authenticatorSelection)===null||r===void 0?void 0:r.requireResidentKey)===!0)return new Pe({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:e});if(t.mediation==="conditional"&&((n=s.authenticatorSelection)===null||n===void 0?void 0:n.userVerification)==="required")return new Pe({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:e});if(((o=s.authenticatorSelection)===null||o===void 0?void 0:o.userVerification)==="required")return new Pe({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:e})}else{if(e.name==="InvalidStateError")return new Pe({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:e});if(e.name==="NotAllowedError")return new Pe({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="NotSupportedError")return s.pubKeyCredParams.filter(l=>l.type==="public-key").length===0?new Pe({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:e}):new Pe({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:e});if(e.name==="SecurityError"){const i=window.location.hostname;if(Wk(i)){if(s.rp.id!==i)return new Pe({message:`The RP ID "${s.rp.id}
299" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new Pe({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="TypeError"){if(s.user.id.byteLength<1||s.user.id.byteLength>64)return new Pe({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:e})}else if(e.name==="UnknownError")return new Pe({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return new Pe({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e})}function sA({error:e,options:t}){const{publicKey:r}=t;if(!r)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new Pe({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else{if(e.name==="NotAllowedError")return new Pe({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="SecurityError"){const n=window.location.hostname;if(Wk(n)){if(r.rpId!==n)return new Pe({message:`The RP ID "${r.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new Pe({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="UnknownError")return new Pe({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return new Pe({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e})}class iA{createNewAbortSignal(){if(this.controller){const r=new Error("Cancelling existing WebAuthn API call for new one");r.name="AbortError",this.controller.abort(r)}const t=new AbortController;return this.controller=t,t.signal}cancelCeremony(){if(this.controller){const t=new Error("Manually cancelling existing WebAuthn API call");t.name="AbortError",this.controller.abort(t),this.controller=void 0}}}const lA=new iA;function cA(e){if(!e)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(e);const{challenge:t,user:r,excludeCredentials:n}=e,o=es(e,["challenge","user","excludeCredentials"]),s=jo(t).buffer,i=Object.assign(Object.assign({},r),{id:jo(r.id).buffer}),l=Object.assign(Object.assign({},o),{challenge:s,user:i});if(n&&n.length>0){l.excludeCredentials=new Array(n.length);for(let c=0;c<n.length;c++){const d=n[c];l.excludeCredentials[c]=Object.assign(Object.assign({},d),{id:jo(d.id).buffer,type:d.type||"public-key",transports:d.transports})}}return l}function dA(e){if(!e)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(e);const{challenge:t,allowCredentials:r}=e,n=es(e,["challenge","allowCredentials"]),o=jo(t).buffer,s=Object.assign(Object.assign({},n),{challenge:o});if(r&&r.length>0){s.allowCredentials=new Array(r.length);for(let i=0;i<r.length;i++){const l=r[i];s.allowCredentials[i]=Object.assign(Object.assign({},l),{id:jo(l.id).buffer,type:l.type||"public-key",transports:l.transports})}}return s}function uA(e){var t;if("toJSON"in e&&typeof e.toJSON=="function")return e.toJSON();const r=e;return{id:e.id,rawId:e.id,response:{attestationObject:Xn(new Uint8Array(e.response.attestationObject)),clientDataJSON:Xn(new Uint8Array(e.response.clientDataJSON))},type:"public-key",clientExtensionResults:e.getClientExtensionResults(),authenticatorAttachment:(t=r.authenticatorAttachment)!==null&&t!==void 0?t:void 0}}function hA(e){var t;if("toJSON"in e&&typeof e.toJSON=="function")return e.toJSON();const r=e,n=e.getClientExtensionResults(),o=e.response;return{id:e.id,rawId:e.id,response:{authenticatorData:Xn(new Uint8Array(o.authenticatorData)),clientDataJSON:Xn(new Uint8Array(o.clientDataJSON)),signature:Xn(new Uint8Array(o.signature)),userHandle:o.userHandle?Xn(new Uint8Array(o.userHandle)):void 0},type:"public-key",clientExtensionResults:n,authenticatorAttachment:(t=r.authenticatorAttachment)!==null&&t!==void 0?t:void 0}}function Wk(e){return e==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}function Ry(){var e,t;return!!($e()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((e=navigator==null?void 0:navigator.credentials)===null||e===void 0?void 0:e.create)=="function"&&typeof((t=navigator==null?void 0:navigator.credentials)===null||t===void 0?void 0:t.get)=="function")}async function mA(e){try{const t=await navigator.credentials.create(e);return t?t instanceof PublicKeyCredential?{data:t,error:null}:{data:null,error:new kc("Browser returned unexpected credential type",t)}:{data:null,error:new kc("Empty credential response",t)}}
299catch(t){return{data:null,error:oA({error:t,options:e})}}}async function pA(e){try{const t=await navigator.credentials.get(e);return t?t instanceof PublicKeyCredential?{data:t,error:null}:{data:null,error:new kc("Browser returned unexpected credential type",t)}:{data:null,error:new kc("Empty credential response",t)}}catch(t){return{data:null,error:sA({error:t,options:e})}}}const fA={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:!1,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},gA={userVerification:"preferred",hints:["security-key"],attestation:"direct"};function jc(...e){const t=o=>o!==null&&typeof o=="object"&&!Array.isArray(o),r=o=>o instanceof ArrayBuffer||ArrayBuffer.isView(o),n={};for(const o of e)if(o)for(const s in o){const i=o[s];if(i!==void 0)if(Array.isArray(i))n[s]=i;else if(r(i))n[s]=i;else if(t(i)){const l=n[s];t(l)?n[s]=jc(l,i):n[s]=jc(i)}else n[s]=i}return n}function yA(e,t){return jc(fA,e,t||{})}function vA(e,t){return jc(gA,e,t||{})}class wA{constructor(t){this.client=t,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this)}async _enroll(t){return this.client.mfa.enroll(Object.assign(Object.assign({},t),{factorType:"webauthn"}))}async _challenge({factorId:t,webauthn:r,friendlyName:n,signal:o},s){try{const{data:i,error:l}=await this.client.mfa.challenge({factorId:t,webauthn:r});if(!i)return{data:null,error:l};const c=o??lA.createNewAbortSignal();if(i.webauthn.type==="create"){const{user:d}=i.webauthn.credential_options.publicKey;d.name||(d.name=`${d.id}:${n}`),d.displayName||(d.displayName=d.name)}switch(i.webauthn.type){case"create":{const d=yA(i.webauthn.credential_options.publicKey,s==null?void 0:s.create),{data:u,error:h}=await mA({publicKey:d,signal:c});return u?{data:{factorId:t,challengeId:i.id,webauthn:{type:i.webauthn.type,credential_response:u}},error:null}:{data:null,error:h}}case"request":{const d=vA(i.webauthn.credential_options.publicKey,s==null?void 0:s.request),{data:u,error:h}=await pA(Object.assign(Object.assign({},i.webauthn.credential_options),{publicKey:d,signal:c}));return u?{data:{factorId:t,challengeId:i.id,webauthn:{type:i.webauthn.type,credential_response:u}},error:null}:{data:null,error:h}}}}catch(i){return $(i)?{data:null,error:i}:{data:null,error:new an("Unexpected error in challenge",i)}}}async _verify({challengeId:t,factorId:r,webauthn:n}){return this.client.mfa.verify({factorId:r,challengeId:t,webauthn:n})}async _authenticate({factorId:t,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:o}={}},s){if(!r)return{data:null,error:new Ho("rpId is required for WebAuthn authentication")};try{if(!Ry())return{data:null,error:new an("Browser does not support WebAuthn",null)};const{data:i,error:l}=await this.challenge({factorId:t,webauthn:{rpId:r,rpOrigins:n},signal:o},{request:s});if(!i)return{data:null,error:l};const{webauthn:c}=i;return this._verify({factorId:t,challengeId:i.challengeId,webauthn:{type:c.type,rpId:r,rpOrigins:n,credential_response:c.credential_response}})}catch(i){return $(i)?{data:null,error:i}:{data:null,error:new an("Unexpected error in authenticate",i)}}}async _register({friendlyName:t,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:o}={}},s){if(!r)return{data:null,error:new Ho("rpId is required for WebAuthn registration")};try{if(!Ry())return{data:null,error:new an("Browser does not support WebAuthn",null)};const{data:i,error:l}=await this._enroll({friendlyName:t});if(!i)return await this.client.mfa.listFactors().then(u=>{var h;return(h=u.data)===null||h===void 0?void 0:h.all.find(p=>p.factor_type==="webauthn"&&p.friendly_name===t&&p.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u==null?void 0:u.id}):void 0),{data:null,error:l};const{data:c,error:d}=await this._challenge({factorId:i.id,friendlyName:i.friendly_name,webauthn:{rpId:r,rpOrigins:n},signal:o},{create:s});return c?this._verify({factorId:i.id,challengeId:c.challengeId,webauthn:{rpId:r,rpOrigins:n,type:c.webauthn.type,credential_response:c.webauthn.credential_response}}):{data:null,error:d}}catch(i){return $(i)?{data:null,error:i}:{data:null,error:new an("Unexpected error in register",i)}}}}tA();const xA={url:x4,storageKey:b4,autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,headers:k4,flowType:"implicit",debug:!1,hasCustomAuthorizationHeader:!1,throwOnError:!1};async function Py(e,t,r){return await r()}const Oa={};let Wp=class Gh{get jwks(){var t,r;return(r=(t=Oa[this.storageKey])===null||t===void 0?void 0:t.jwks)!==null&&r!==void 0?r:{keys:[]}}set jwks(t){Oa[this.storageKey]=Object.assign(Object.assign({},Oa[this.storageKey]),{jwks:t})}get jwks_cached_at(){var t,r;return(r=(t=Oa[this.storageKey])===null||t===void 0?void 0:t.cachedAt)!==null&&r!==void 0?r:Number.MIN_SAFE_INTEGER}set jwks_cached_at(t){Oa[this.storageKey]=Object.assign(Object.assign({},Oa[this.storageKey]),{cachedAt:t})}constructor(t){var r,n,o;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=!0,this.hasCustomAuthorizationHeader=!1,this.suppressGetSessionWarning=!1,this.lockAcquired=!1,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;const s=Object.assign(Object.assign({},xA),t);if(this.storageKey=s.storageKey,this.instanceID=(r=Gh.nextInstanceID[this.storageKey])!==null&&r!==void 0?r:0,Gh.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!s.debug,typeof s.debug=="function"&&(this.logger=s.debug),this.instanceID>0&&$e()){const i=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(i),this.logDebugMessages&&console.trace(i)}if(this.persistSession=s.persistSession,this.autoRefreshToken=s.autoRefreshToken,this.admin=new Dp({url:s.url,headers:s.headers,fetch:s.fetch}),this.url=s.url,this.headers=s.headers,this.fetch=Pk(s.fetch),this.lock=s.lock||Py,this.detectSessionInUrl=s.detectSessionInUrl,this.flowType=s.flowType,this.hasCustomAuthorizationHeader=s.hasCustomAuthorizationHeader,this.throwOnError=s.throwOnError,s.lock?this.lock=s.lock:this.persistSession&&$e()&&(!((n=globalThis==null?void 0:globalThis.navigator)===null||n===void 0)&&n.locks)?this.lock=Dk:this.lock=Py,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new wA(this)}
299,this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.persistSession?(s.storage?this.storage=s.storage:Rk()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Iy(this.memoryStorage)),s.userStorage&&(this.userStorage=s.userStorage)):(this.memoryStorage={},this.storage=Iy(this.memoryStorage)),$e()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey)}catch(i){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",i)}(o=this.broadcastChannel)===null||o===void 0||o.addEventListener("message",async i=>{this._debug("received broadcast notification from other tab or client",i),await this._notifyAllSubscribers(i.data.event,i.data.session,!1)})}this.initialize()}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(t){if(this.throwOnError&&t&&t.error)throw t.error;return t}_logPrefix(){return`GoTrueClient@${this.storageKey}:${this.instanceID} (${Nk}) ${new Date().toISOString()}`}_debug(...t){return this.logDebugMessages&&this.logger(this._logPrefix(),...t),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(-1,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var t;try{let r={},n="none";if($e()&&(r=P4(window.location.href),this._isImplicitGrantCallback(r)?n="implicit":await this._isPKCECallback(r)&&(n="pkce")),$e()&&this.detectSessionInUrl&&n!=="none"){const{data:o,error:s}=await this._getSessionFromURL(r,n);if(s){if(this._debug("#_initialize()","error detecting session from URL",s),Ik(s)){const c=(t=s.details)===null||t===void 0?void 0:t.code;if(c==="identity_already_exists"||c==="identity_not_found"||c==="single_identity_not_deletable")return{error:s}}return await this._removeSession(),{error:s}}const{session:i,redirectType:l}=o;return this._debug("#_initialize()","detected session in URL",i,"redirect type",l),await this._saveSession(i),setTimeout(async()=>{l==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",i):await this._notifyAllSubscribers("SIGNED_IN",i)},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(r){return $(r)?this._returnResult({error:r}):this._returnResult({error:new an("Unexpected error during initialization",r)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end")}}async signInAnonymously(t){var r,n,o;try{const s=await B(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(n=(r=t==null?void 0:t.options)===null||r===void 0?void 0:r.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:(o=t==null?void 0:t.options)===null||o===void 0?void 0:o.captchaToken}},xform:Ft}),{data:i,error:l}=s;if(l||!i)return this._returnResult({data:{user:null,session:null},error:l});const c=i.session,d=i.user;return i.session&&(await this._saveSession(i.session),await this._notifyAllSubscribers("SIGNED_IN",c)),this._returnResult({data:{user:d,session:c},error:null})}catch(s){if($(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signUp(t){var r,n,o;try{let s;if("email"in t){const{email:u,password:h,options:p}=t;let m=null,v=null;this.flowType==="pkce"&&([m,v]=await Ra(this.storage,this.storageKey)),s=await B(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:p==null?void 0:p.emailRedirectTo,body:{email:u,password:h,data:(r=p==null?void 0:p.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:p==null?void 0:p.captchaToken},code_challenge:m,code_challenge_method:v},xform:Ft})}else if("phone"in t){const{phone:u,password:h,options:p}=t;s=await B(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:h,data:(n=p==null?void 0:p.data)!==null&&n!==void 0?n:{},channel:(o=p==null?void 0:p.channel)!==null&&o!==void 0?o:"sms",gotrue_meta_security:{captcha_token:p==null?void 0:p.captchaToken}},xform:Ft})}else throw new Ts("You must provide either an email or phone number and a password");const{data:i,error:l}=s;if(l||!i)return await ze(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:l});const c=i.session,d=i.user;return i.session&&(await this._saveSession(i.session),await this._notifyAllSubscribers("SIGNED_IN",c)),this._returnResult({data:{user:d,session:c},error:null})}catch(s){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signInWithPassword(t){try{let r;if("email"in t){const{email:s,password:i,options:l}=t;r=await B(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:s,password:i,gotrue_meta_security:{captcha_token:l==null?void 0:l.captchaToken}},xform:_y})}else if("phone"in t){const{phone:s,password:i,options:l}=t;r=await B(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:s,password:i,gotrue_meta_security:{captcha_token:l==null?void 0:l.captchaToken}},xform:_y})}else throw new Ts("You must provide either an email or phone number and a password");const{data:n,error:o}=r;if(o)return this._returnResult({data:{user:null,session:null},error:o});if(!n||!n.session||!n.user){const s=new Hn;return this._returnResult({data:{user:null,session:null},error:s})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:o})}catch(r){if($(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOAuth(t){var r,n,o,s;return await this._handleProviderSignIn(t.provider,{redirectTo:(r=t.options)===null||r===void 0?void 0:r.redirectTo,scopes:(n=t.options)===null||n===void 0?void 0:n.scopes,queryParams:(o=t.options)===null||o===void 0?void 0:o.queryParams,skipBrowserRedirect:(s=t.options)===null||s===void 0?void 0:s.skipBrowserRedirect})}async exchangeCodeForSession(t){return await this.initializePromise,this._acquireLock(-1,async()=>this._exchangeCodeForSession(t))}async signInWithWeb3(t){const{chain:r}=t;switch(r){case"ethereum":return await this.signInWithEthereum(t);case"solana":return await this.signInWithSolana(t);default:throw new Error(`@supabase/auth-js: Unsupported chain "${r}"`)}}async signInWithEthereum(t){var r,n,o,s,i,l,c,d,u,h,p;let m,v;if("message"in t)m=t.message,v=t.signature;else{const{chain:y,wallet:x,statement:g,options:f}=t;let w;if($e())if(typeof x=="object")w=x;else{const P=window;if("ethereum"in P&&typeof P.ethereum=="object"&&"request"in P.ethereum&&typeof P.ethereum.request=="function")w=P.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else{if(typeof x!="object"||!(f!=null&&f.url))throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");w=x}const k=new URL((r=f==null?void 0:f.url)!==null&&r!==void 0?r:window.location.href),j=await w.request({method:"eth_requestAccounts"}).then(P=>P).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!j||j.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");const S=Lk(j[0]);let N=(n=f==null?void 0:f.signInWithEthereum)===null||n===void 0?void 0:n.chainId;if(!N){const P=await w.request({method:"eth_chainId"});N=rA(P)}const _={domain:k.host,address:S,statement:g,uri:k.href,version:"1",chainId:N,nonce:(o=f==null?void 0:f.signInWithEthereum)===null||o===void 0?void 0:o.nonce,issuedAt:(i=(s=f==null?void 0:f.signInWithEthereum)===null||s===void 0?void 0:s.issuedAt)!==null&&i!==void 0?i:new Date,expirationTime:(l=f==null?void 0:f.signInWithEthereum)===null||l===void 0?void 0:l.expirationTime,notBefore:(c=f==null?void 0:f.signInWithEthereum)===null||c===void 0?void 0:c.notBefore,requestId:(d=f==null?void 0:f.signInWithEthereum)===null||d===void 0?void 0:d.requestId,resources:(u=f==null?void 0:f.signInWithEthereum)===null||u===void 0?void 0:u.resources};m=aA(_),v=await w.request({method:"personal_sign",params:[nA(m),S]})}try{const{data:y,error:x}=await B(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:m,signature:v}
299,!((h=t.options)===null||h===void 0)&&h.captchaToken?{gotrue_meta_security:{captcha_token:(p=t.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:Ft});if(x)throw x;if(!y||!y.session||!y.user){const g=new Hn;return this._returnResult({data:{user:null,session:null},error:g})}return y.session&&(await this._saveSession(y.session),await this._notifyAllSubscribers("SIGNED_IN",y.session)),this._returnResult({data:Object.assign({},y),error:x})}catch(y){if($(y))return this._returnResult({data:{user:null,session:null},error:y});throw y}}async signInWithSolana(t){var r,n,o,s,i,l,c,d,u,h,p,m;let v,y;if("message"in t)v=t.message,y=t.signature;else{const{chain:x,wallet:g,statement:f,options:w}=t;let k;if($e())if(typeof g=="object")k=g;else{const S=window;if("solana"in S&&typeof S.solana=="object"&&("signIn"in S.solana&&typeof S.solana.signIn=="function"||"signMessage"in S.solana&&typeof S.solana.signMessage=="function"))k=S.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else{if(typeof g!="object"||!(w!=null&&w.url))throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");k=g}const j=new URL((r=w==null?void 0:w.url)!==null&&r!==void 0?r:window.location.href);
299if("signIn"in k&&k.signIn){const S=await k.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},w==null?void 0:w.signInWithSolana),{version:"1",domain:j.host,uri:j.href}),f?{statement:f}:null));let N;if(Array.isArray(S)&&S[0]&&typeof S[0]=="object")N=S[0];else if(S&&typeof S=="object"&&"signedMessage"in S&&"signature"in S)N=S;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in N&&"signature"in N&&(typeof N.signedMessage=="string"||N.signedMessage instanceof Uint8Array)&&N.signature instanceof Uint8Array)v=typeof N.signedMessage=="string"?N.signedMessage:new TextDecoder().decode(N.signedMessage),y=N.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else{if(!("signMessage"in k)||typeof k.signMessage!="function"||!("publicKey"in k)||typeof k!="object"||!k.publicKey||!("toBase58"in k.publicKey)||typeof k.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");v=[`${j.host} wants you to sign in with your Solana account:`,k.publicKey.toBase58(),...f?["",f,""]:[""],"Version: 1",`URI: ${j.href}`,`Issued At: ${(o=(n=w==null?void 0:w.signInWithSolana)===null||n===void 0?void 0:n.issuedAt)!==null&&o!==void 0?o:new Date().toISOString()}`,...!((s=w==null?void 0:w.signInWithSolana)===null||s===void 0)&&s.notBefore?[`Not Before: ${w.signInWithSolana.notBefore}`]:[],...!((i=w==null?void 0:w.signInWithSolana)===null||i===void 0)&&i.expirationTime?[`Expiration Time: ${w.signInWithSolana.expirationTime}`]:[],...!((l=w==null?void 0:w.signInWithSolana)===null||l===void 0)&&l.chainId?[`Chain ID: ${w.signInWithSolana.chainId}`]:[],...!((c=w==null?void 0:w.signInWithSolana)===null||c===void 0)&&c.nonce?[`Nonce: ${w.signInWithSolana.nonce}`]:[],...!((d=w==null?void 0:w.signInWithSolana)===null||d===void 0)&&d.requestId?[`Request ID: ${w.signInWithSolana.requestId}`]:[],...!((h=(u=w==null?void 0:w.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||h===void 0)&&h.length?["Resources",...w.signInWithSolana.resources.map(N=>`- ${N}`)]:[]].join(`
300`);const S=await k.signMessage(new TextEncoder().encode(v),"utf8");if(!S||!(S instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");y=S}}try{const{data:x,error:g}=await B(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:v,signature:Xn(y)},!((p=t.options)===null||p===void 0)&&p.captchaToken?{gotrue_meta_security:{captcha_token:(m=t.options)===null||m===void 0?void 0:m.captchaToken}}:null),xform:Ft});if(g)throw g;if(!x||!x.session||!x.user){const f=new Hn;return this._returnResult({data:{user:null,session:null},error:f})}return x.session&&(await this._saveSession(x.session),await this._notifyAllSubscribers("SIGNED_IN",x.session)),this._returnResult({data:Object.assign({},x),error:g})}catch(x){if($(x))return this._returnResult({data:{user:null,session:null},error:x});throw x}}async _exchangeCodeForSession(t){const r=await $n(this.storage,`${this.storageKey}-code-verifier`),[n,o]=(r??"").split("/");try{const{data:s,error:i}=await B(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:t,code_verifier:n},xform:Ft});if(await ze(this.storage,`${this.storageKey}-code-verifier`),i)throw i;if(!s||!s.session||!s.user){const l=new Hn;return this._returnResult({data:{user:null,session:null,redirectType:null},error:l})}return s.session&&(await this._saveSession(s.session),await this._notifyAllSubscribers("SIGNED_IN",s.session)),this._returnResult({data:Object.assign(Object.assign({},s),{redirectType:o??null}),error:i})}catch(s){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(s))return this._returnResult({data:{user:null,session:null,redirectType:null},error:s});throw s}}async signInWithIdToken(t){try{const{options:r,provider:n,token:o,access_token:s,nonce:i}=t,l=await B(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:o,access_token:s,nonce:i,gotrue_meta_security:{captcha_token:r==null?void 0:r.captchaToken}},xform:Ft}),{data:c,error:d}=l;if(d)return this._returnResult({data:{user:null,session:null},error:d});if(!c||!c.session||!c.user){const u=new Hn;return this._returnResult({data:{user:null,session:null},error:u})}return c.session&&(await this._saveSession(c.session),await this._notifyAllSubscribers("SIGNED_IN",c.session)),this._returnResult({data:c,error:d})}catch(r){if($(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOtp(t){var r,n,o,s,i;try{if("email"in t){const{email:l,options:c}=t;let d=null,u=null;this.flowType==="pkce"&&([d,u]=await Ra(this.storage,this.storageKey));const{error:h}=await B(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:l,data:(r=c==null?void 0:c.data)!==null&&r!==void 0?r:{},create_user:(n=c==null?void 0:c.shouldCreateUser)!==null&&n!==void 0?n:!0,gotrue_meta_security:{captcha_token:c==null?void 0:c.captchaToken},code_challenge:d,code_challenge_method:u},redirectTo:c==null?void 0:c.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:h})}if("phone"in t){const{phone:l,options:c}=t,{data:d,error:u}=await B(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:l,data:(o=c==null?void 0:c.data)!==null&&o!==void 0?o:{},create_user:(s=c==null?void 0:c.shouldCreateUser)!==null&&s!==void 0?s:!0,gotrue_meta_security:{captcha_token:c==null?void 0:c.captchaToken},channel:(i=c==null?void 0:c.channel)!==null&&i!==void 0?i:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:d==null?void 0:d.message_id},error:u})}throw new Ts("You must provide either an email or phone number.")}catch(l){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(l))return this._returnResult({data:{user:null,session:null},error:l});throw l}}async verifyOtp(t){var r,n;try{let o,s;"options"in t&&(o=(r=t.options)===null||r===void 0?void 0:r.redirectTo,s=(n=t.options)===null||n===void 0?void 0:n.captchaToken);const{data:i,error:l}=await B(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},t),{gotrue_meta_security:{captcha_token:s}}),redirectTo:o,xform:Ft});if(l)throw l;if(!i)throw new Error("An error occurred on token verification.");const c=i.session,d=i.user;return c!=null&&c.access_token&&(await this._saveSession(c),await this._notifyAllSubscribers(t.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",c)),this._returnResult({data:{user:d,session:c},error:null})}catch(o){if($(o))return this._returnResult({data:{user:null,session:null},error:o});throw o}}async signInWithSSO(t){var r,n,o,s,i;try{let l=null,c=null;this.flowType==="pkce"&&([l,c]=await Ra(this.storage,this.storageKey));const d=await B(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in t?{provider_id:t.providerId}:null),"domain"in t?{domain:t.domain}:null),{redirect_to:(n=(r=t.options)===null||r===void 0?void 0:r.redirectTo)!==null&&n!==void 0?n:void 0}),!((o=t==null?void 0:t.options)===null||o===void 0)&&o.captchaToken?{gotrue_meta_security:{captcha_token:t.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:l,code_challenge_method:c}),headers:this.headers,xform:J4});return!((s=d.data)===null||s===void 0)&&s.url&&$e()&&!(!((i=t.options)===null||i===void 0)&&i.skipBrowserRedirect)&&window.location.assign(d.data.url),this._returnResult(d)}catch(l){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(l))return this._returnResult({data:null,error:l});throw l}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(-1,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async t=>{const{data:{session:r},error:n}=t;if(n)throw n;if(!r)throw new ht;const{error:o}=await B(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:r.access_token});return this._returnResult({data:{user:null,session:null},error:o})})}catch(t){if($(t))return this._returnResult({data:{user:null,session:null},error:t});throw t}}async resend(t){try{const r=`${this.url}/resend`;if("email"in t){const{email:n,type:o,options:s}=t,{error:i}=await B(this.fetch,"POST",r,{headers:this.headers,body:{email:n,type:o,gotrue_meta_security:{captcha_token:s==null?void 0:s.captchaToken}},redirectTo:s==null?void 0:s.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:i})}else if("phone"in t){const{phone:n,type:o,options:s}=t,{data:i,error:l}=await B(this.fetch,"POST",r,{headers:this.headers,body:{phone:n,type:o,gotrue_meta_security:{captcha_token:s==null?void 0:s.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:i==null?void 0:i.message_id},error:l})}throw new Ts("You must provide either an email or phone number and a type")}catch(r){if($(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async getSession(){return await this.initializePromise,await this._acquireLock(-1,async()=>this._useSession(async r=>r))}async _acquireLock(t,r){this._debug("#_acquireLock","begin",t);try{if(this.lockAcquired){const n=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),o=(async()=>(await n,await r()))();return this.pendingInLock.push((async()=>{try{await o}catch{}})()),o}return await this.lock(`lock:${this.storageKey}`,t,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;const n=r();for(this.pendingInLock.push((async()=>{try{await n}catch{}})()),await n;this.pendingInLock.length;){const o=[...this.pendingInLock];await Promise.all(o),this.pendingInLock.splice(0,o.length)}return await n}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1}})}finally{this._debug("#_acquireLock","end")}}async _useSession(t){this._debug("#_useSession","begin");try{const r=await this.__loadSession();return await t(r)}finally{this._debug("#_useSession","end")}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let t=null;const r=await $n(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",r),r!==null&&(this._isValidSession(r)?t=r:(this._debug("#getSession()","session from storage is not val
300id"),await this._removeSession())),!t)return{data:{session:null},error:null};const n=t.expires_at?t.expires_at*1e3-Date.now()<ou:!1;if(this._debug("#__loadSession()",`session has${n?"":" not"} expired`,"expires_at",t.expires_at),!n){if(this.userStorage){const i=await $n(this.userStorage,this.storageKey+"-user");i!=null&&i.user?t.user=i.user:t.user=iu()}if(this.storage.isServer&&t.user&&!t.user.__isUserNotAvailableProxy){const i={value:this.suppressGetSessionWarning};t.user=U4(t.user,i),i.value&&(this.suppressGetSessionWarning=!0)}return{data:{session:t},error:null}}const{data:o,error:s}=await this._callRefreshToken(t.refresh_token);return s?this._returnResult({data:{session:null},error:s}):this._returnResult({data:{session:o},error:null})}finally{this._debug("#__loadSession()","end")}}async getUser(t){if(t)return await this._getUser(t);await this.initializePromise;const r=await this._acquireLock(-1,async()=>await this._getUser());return r.data.user&&(this.suppressGetSessionWarning=!0),r}async _getUser(t){try{return t?await B(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:t,xform:on}):await this._useSession(async r=>{var n,o,s;const{data:i,error:l}=r;if(l)throw l;return!(!((n=i.session)===null||n===void 0)&&n.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new ht}:await B(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(s=(o=i.session)===null||o===void 0?void 0:o.access_token)!==null&&s!==void 0?s:void 0,xform:on})})}catch(r){if($(r))return Ek(r)&&(await this._removeSession(),await ze(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:r});throw r}}async updateUser(t,r={}){return await this.initializePromise,await this._acquireLock(-1,async()=>await this._updateUser(t,r))}async _updateUser(t,r={}){try{return await this._useSession(async n=>{const{data:o,error:s}=n;if(s)throw s;if(!o.session)throw new ht;const i=o.session;let l=null,c=null;this.flowType==="pkce"&&t.email!=null&&([l,c]=await Ra(this.storage,this.storageKey));const{data:d,error:u}=await B(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:r==null?void 0:r.emailRedirectTo,body:Object.assign(Object.assign({},t),{code_challenge:l,code_challenge_method:c}),jwt:i.access_token,xform:on});if(u)throw u;return i.user=d.user,await this._saveSession(i),await this._notifyAllSubscribers("USER_UPDATED",i),this._returnResult({data:{user:i.user},error:null})})}catch(n){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(n))return this._returnResult({data:{user:null},error:n});throw n}}async setSession(t){return await this.initializePromise,await this._acquireLock(-1,async()=>await this._setSession(t))}async _setSession(t){try{if(!t.access_token||!t.refresh_token)throw new ht;const r=Date.now()/1e3;let n=r,o=!0,s=null;const{payload:i}=su(t.access_token);if(i.exp&&(n=i.exp,o=n<=r),o){const{data:l,error:c}=await this._callRefreshToken(t.refresh_token);if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l)return{data:{user:null,session:null},error:null};s=l}else{const{data:l,error:c}=await this._getUser(t.access_token);if(c)throw c;s={access_token:t.access_token,refresh_token:t.refresh_token,user:l.user,token_type:"bearer",expires_in:n-r,expires_at:n},await this._saveSession(s),await this._notifyAllSubscribers("SIGNED_IN",s)}return this._returnResult({data:{user:s.user,session:s},error:null})}catch(r){if($(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}}async refreshSession(t){return await this.initializePromise,await this._acquireLock(-1,async()=>await this._refreshSession(t))}async _refreshSession(t){try{return await this._useSession(async r=>{var n;if(!t){const{data:i,error:l}=r;if(l)throw l;t=(n=i.session)!==null&&n!==void 0?n:void 0}if(!(t!=null&&t.refresh_token))throw new ht;const{data:o,error:s}=await this._callRefreshToken(t.refresh_token);return s?this._returnResult({data:{user:null,session:null},error:s}):o?this._returnResult({data:{user:o.user,session:o},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(r){if($(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async _getSessionFromURL(t,r){try{if(!$e())throw new _s("No browser detected.");
300if(t.error||t.error_description||t.error_code)throw new _s(t.error_description||"Error in URL with unspecified error_description",{error:t.error||"unspecified_error",code:t.error_code||"unspecified_code"});switch(r){case"implicit":if(this.flowType==="pkce")throw new zh("Not a valid PKCE flow url.");break;case"pkce":if(this.flowType==="implicit")throw new _s("Not a valid implicit grant flow url.");break;default:}if(r==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!t.code)throw new zh("No code detected.");const{data:f,error:w}=await this._exchangeCodeForSession(t.code);if(w)throw w;const k=new URL(window.location.href);return k.searchParams.delete("code"),window.history.replaceState(window.history.state,"",k.toString()),{data:{session:f.session,redirectType:null},error:null}}const{provider_token:n,provider_refresh_token:o,access_token:s,refresh_token:i,expires_in:l,expires_at:c,token_type:d}=t;if(!s||!l||!i||!d)throw new _s("No session defined in URL");const u=Math.round(Date.now()/1e3),h=parseInt(l);let p=u+h;c&&(p=parseInt(c));const m=p-u;m*1e3<=Ja&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${m}s, should have been closer to ${h}s`);const v=p-h;u-v>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",v,p,u):u-v<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",v,p,u);const{data:y,error:x}=await this._getUser(s);if(x)throw x;const g={provider_token:n,provider_refresh_token:o,access_token:s,expires_in:h,expires_at:p,refresh_token:i,token_type:d,user:y.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:g,redirectType:t.type},error:null})}catch(n){if($(n))return this._returnResult({data:{session:null,redirectType:null},error:n});throw n}}_isImplicitGrantCallback(t){return!!(t.access_token||t.error_description)}async _isPKCECallback(t){const r=await $n(this.storage,`${this.storageKey}-code-verifier`);return!!(t.code&&r)}async signOut(t={scope:"global"}){return await this.initializePromise,await this._acquireLock(-1,async()=>await this._signOut(t))}async _signOut({scope:t}={scope:"global"}){return await this._useSession(async r=>{var n;const{data:o,error:s}=r;if(s)return this._returnResult({error:s});const i=(n=o.session)===null||n===void 0?void 0:n.access_token;if(i){const{error:l}=await this.admin.signOut(i,t);if(l&&!(_k(l)&&(l.status===404||l.status===401||l.status===403)))return this._returnResult({error:l})}return t!=="others"&&(await this._removeSession(),await ze(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(t){const r=R4(),n={id:r,callback:t,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",r),this.stateChangeEmitters.delete(r)}};return this._debug("#onAuthStateChange()","registered callback with id",r),this.stateChangeEmitters.set(r,n),(async()=>(await this.initializePromise,await this._acquireLock(-1,async()=>{this._emitInitialSession(r)})))(),{data:{subscription:n}}}async _emitInitialSession(t){return await this._useSession(async r=>{var n,o;try{const{data:{session:s},error:i}=r;if(i)throw i;await((n=this.stateChangeEmitters.get(t))===null||n===void 0?void 0:n.callback("INITIAL_SESSION",s)),this._debug("INITIAL_SESSION","callback id",t,"session",s)}catch(s){await((o=this.stateChangeEmitters.get(t))===null||o===void 0?void 0:o.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",t,"error",s),console.error(s)}})}async resetPasswordForEmail(t,r={}){let n=null,o=null;this.flowType==="pkce"&&([n,o]=await Ra(this.storage,this.storageKey,!0));try{return await B(this.fetch,"POST",`${this.url}/recover`,{body:{email:t,code_challenge:n,code_challenge_method:o,gotrue_meta_security:{captcha_token:r.captchaToken}},headers:this.headers,redirectTo:r.redirectTo})}catch(s){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(s))return this._returnResult({data:null,error:s});throw s}}async getUserIdentities(){var t;try{const{data:r,error:n}=await this.getUser();if(n)throw n;return this._returnResult({data:{identities:(t=r.user.identities)!==null&&t!==void 0?t:[]},error:null})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async linkIdentity(t){return"token"in t?this.linkIdentityIdToken(t):this.linkIdentityOAuth(t)}async linkIdentityOAuth(t){var r;try{const{data:n,error:o}=await this._useSession(async s=>{var i,l,c,d,u;const{data:h,error:p}=s;if(p)throw p;const m=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,t.provider,{redirectTo:(i=t.options)===null||i===void 0?void 0:i.redirectTo,scopes:(l=t.options)===null||l===void 0?void 0:l.scopes,queryParams:(c=t.options)===null||c===void 0?void 0:c.queryParams,skipBrowserRedirect:!0});return await B(this.fetch,"GET",m,{headers:this.headers,jwt:(u=(d=h.session)===null||d===void 0?void 0:d.access_token)!==null&&u!==void 0?u:void 0})});if(o)throw o;return $e()&&!(!((r=t.options)===null||r===void 0)&&r.skipBrowserRedirect)&&window.location.assign(n==null?void 0:n.url),this._returnResult({data:{provider:t.provider,url:n==null?void 0:n.url},error:null})}catch(n){if($(n))return this._returnResult({data:{provider:t.provider,url:null},error:n});throw n}}async linkIdentityIdToken(t){return await this._useSession(async r=>{var n;try{const{error:o,data:{session:s}}=r;if(o)throw o;const{options:i,provider:l,token:c,access_token:d,nonce:u}=t,h=await B(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(n=s==null?void 0:s.access_token)!==null&&n!==void 0?n:void 0,body:{provider:l,id_token:c,access_token:d,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:i==null?void 0:i.captchaToken}},xform:Ft}),{data:p,error:m}=h;return m?this._returnResult({data:{user:null,session:null},error:m}):!p||!p.session||!p.user?this._returnResult({data:{user:null,session:null},error:new Hn}):(p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("USER_UPDATED",p.session)),this._returnResult({data:p,error:m}))}catch(o){if(await ze(this.storage,`${this.storageKey}-code-verifier`),$(o))return this._returnResult({data:{user:null,session:null},error:o});throw o}})}async unlinkIdentity(t){try{return await this._useSession(async r=>{var n,o;const{data:s,error:i}=r;if(i)throw i;
300return await B(this.fetch,"DELETE",`${this.url}/user/identities/${t.identity_id}`,{headers:this.headers,jwt:(o=(n=s.session)===null||n===void 0?void 0:n.access_token)!==null&&o!==void 0?o:void 0})})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async _refreshAccessToken(t){const r=`#_refreshAccessToken(${t.substring(0,5)}...)`;this._debug(r,"begin");try{const n=Date.now();return await L4(async o=>(o>0&&await D4(200*Math.pow(2,o-1)),this._debug(r,"refreshing attempt",o),await B(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:t},headers:this.headers,xform:Ft})),(o,s)=>{const i=200*Math.pow(2,o);return s&&Ol(s)&&Date.now()+i-n<Ja})}catch(n){if(this._debug(r,"error",n),$(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}finally{this._debug(r,"end")}}_isValidSession(t){return typeof t=="object"&&t!==null&&"access_token"in t&&"refresh_token"in t&&"expires_at"in t}async _handleProviderSignIn(t,r){const n=await this._getUrlForProvider(`${this.url}/authorize`,t,{redirectTo:r.redirectTo,scopes:r.scopes,queryParams:r.queryParams});return this._debug("#_handleProviderSignIn()","provider",t,"options",r,"url",n),$e()&&!r.skipBrowserRedirect&&window.location.assign(n),{data:{provider:t,url:n},error:null}}async _recoverAndRefresh(){var t,r;const n="#_recoverAndRefresh()";this._debug(n,"begin");try{const o=await $n(this.storage,this.storageKey);if(o&&this.userStorage){let i=await $n(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!i&&(i={user:o.user},await Qa(this.userStorage,this.storageKey+"-user",i)),o.user=(t=i==null?void 0:i.user)!==null&&t!==void 0?t:iu()}else if(o&&!o.user&&!o.user){const i=await $n(this.storage,this.storageKey+"-user");i&&(i!=null&&i.user)?(o.user=i.user,await ze(this.storage,this.storageKey+"-user"),await Qa(this.storage,this.storageKey,o)):o.user=iu()}if(this._debug(n,"session from storage",o),!this._isValidSession(o)){this._debug(n,"session is not valid"),o!==null&&await this._removeSession();return}const s=((r=o.expires_at)!==null&&r!==void 0?r:1/0)*1e3-Date.now()<ou;if(this._debug(n,`session has${s?"":" not"} expired with margin of ${ou}s`),s){if(this.autoRefreshToken&&o.refresh_token){const{error:i}=await this._callRefreshToken(o.refresh_token);i&&(console.error(i),Ol(i)||(this._debug(n,"refresh failed with a non-retryable error, removing the session",i),await this._removeSession()))}}else if(o.user&&o.user.__isUserNotAvailableProxy===!0)try{const{data:i,error:l}=await this._getUser(o.access_token);!l&&(i!=null&&i.user)?(o.user=i.user,await this._saveSession(o),await this._notifyAllSubscribers("SIGNED_IN",o)):this._debug(n,"could not get user data, skipping SIGNED_IN notification")}catch(i){console.error("Error getting user data:",i),this._debug(n,"error getting user data, skipping SIGNED_IN notification",i)}else await this._notifyAllSubscribers("SIGNED_IN",o)}catch(o){this._debug(n,"error",o),console.error(o);return}finally{this._debug(n,"end")}}async _callRefreshToken(t){var r,n;if(!t)throw new ht;if(this.refreshingDeferred)return this.refreshingDeferred.promise;const o=`#_callRefreshToken(${t.substring(0,5)}...)`;this._debug(o,"begin");try{this.refreshingDeferred=new id;const{data:s,error:i}=await this._refreshAccessToken(t);if(i)throw i;if(!s.session)throw new ht;await this._saveSession(s.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",s.session);const l={data:s.session,error:null};return this.refreshingDeferred.resolve(l),l}catch(s){if(this._debug(o,"error",s),$(s)){const i={data:null,error:s};return Ol(s)||await this._removeSession(),(r=this.refreshingDeferred)===null||r===void 0||r.resolve(i),i}throw(n=this.refreshingDeferred)===null||n===void 0||n.reject(s),s}finally{this.refreshingDeferred=null,this._debug(o,"end")}}async _notifyAllSubscribers(t,r,n=!0){const o=`#_notifyAllSubscribers(${t})`;this._debug(o,"begin",r,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:t,session:r});const s=[],i=Array.from(this.stateChangeEmitters.values()).map(async l=>{try{await l.callback(t,r)}catch(c){s.push(c)}});if(await Promise.all(i),s.length>0){for(let l=0;l<s.length;l+=1)console.error(s[l]);throw s[0]}}finally{this._debug(o,"end")}}async _saveSession(t){this._debug("#_saveSession()",t),this.suppressGetSessionWarning=!0,await ze(this.storage,`${this.storageKey}-code-verifier`);const r=Object.assign({},t),n=r.user&&r.user.__isUserNotAvailableProxy===!0;if(this.userStorage){!n&&r.user&&await Qa(this.userStorage,this.storageKey+"-user",{user:r.user});const o=Object.assign({},r);delete o.user;const s=Cy(o);await Qa(this.storage,this.storageKey,s)}else{const o=Cy(r);await Qa(this.storage,this.storageKey,o)}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=!1,await ze(this.storage,this.storageKey),await ze(this.storage,this.storageKey+"-code-verifier"),await ze(this.storage,this.storageKey+"-user"),this.userStorage&&await ze(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null)}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");const t=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{t&&$e()&&(window!=null&&window.removeEventListener)&&window.removeEventListener("visibilitychange",t)}
300catch(r){console.error("removing visibilitychange callback failed",r)}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");const t=setInterval(()=>this._autoRefreshTokenTick(),Ja);this.autoRefreshTicker=t,t&&typeof t=="object"&&typeof t.unref=="function"?t.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(t),setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick()},0)}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");const t=this.autoRefreshTicker;this.autoRefreshTicker=null,t&&clearInterval(t)}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh()}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh()}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{const t=Date.now();try{return await this._useSession(async r=>{const{data:{session:n}}=r;if(!n||!n.refresh_token||!n.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}const o=Math.floor((n.expires_at*1e3-t)/Ja);this._debug("#_autoRefreshTokenTick()",`access token expires in ${o} ticks, a tick lasts ${Ja}ms, refresh threshold is ${Mh} ticks`),o<=Mh&&await this._callRefreshToken(n.refresh_token)})}catch(r){console.error("Auto refresh tick failed with error. This is likely a transient error.",r)}}finally{this._debug("#_autoRefreshTokenTick()","end")}})}catch(t){if(t.isAcquireTimeout||t instanceof Lp)this._debug("auto refresh token tick lock not available");else throw t}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!$e()||!(window!=null&&window.addEventListener))return this.autoRefreshToken&&this.startAutoRefresh(),!1;try{this.visibilityChangedCallback=async()=>await this._onVisibilityChanged(!1),window==null||window.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0)}catch(t){console.error("_handleVisibilityChange",t)}}async _onVisibilityChanged(t){const r=`#_onVisibilityChanged(${t})`;this._debug(r,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),t||(await this.initializePromise,await this._acquireLock(-1,async()=>{if(document.visibilityState!=="visible"){this._debug(r,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh()}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh()}async _getUrlForProvider(t,r,n){const o=[`provider=${encodeURIComponent(r)}`];if(n!=null&&n.redirectTo&&o.push(`redirect_to=${encodeURIComponent(n.redirectTo)}`),n!=null&&n.scopes&&o.push(`scopes=${encodeURIComponent(n.scopes)}`),this.flowType==="pkce"){const[s,i]=await Ra(this.storage,this.storageKey),l=new URLSearchParams({code_challenge:`${encodeURIComponent(s)}`,code_challenge_method:`${encodeURIComponent(i)}`});o.push(l.toString())}if(n!=null&&n.queryParams){const s=new URLSearchParams(n.queryParams);o.push(s.toString())}return n!=null&&n.skipBrowserRedirect&&o.push(`skip_http_redirect=${n.skipBrowserRedirect}`),`${t}?${o.join("&")}`}async _unenroll(t){try{return await this._useSession(async r=>{var n;const{data:o,error:s}=r;return s?this._returnResult({data:null,error:s}):await B(this.fetch,"DELETE",`${this.url}/factors/${t.factorId}`,{headers:this.headers,jwt:(n=o==null?void 0:o.session)===null||n===void 0?void 0:n.access_token})})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async _enroll(t){try{return await this._useSession(async r=>{var n,o;const{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});const l=Object.assign({friendly_name:t.friendlyName,factor_type:t.factorType},t.factorType==="phone"?{phone:t.phone}:t.factorType==="totp"?{issuer:t.issuer}:{}),{data:c,error:d}=await B(this.fetch,"POST",`${this.url}/factors`,{body:l,headers:this.headers,jwt:(n=s==null?void 0:s.session)===null||n===void 0?void 0:n.access_token});return d?this._returnResult({data:null,error:d}):(t.factorType==="totp"&&c.type==="totp"&&(!((o=c==null?void 0:c.totp)===null||o===void 0)&&o.qr_code)&&(c.totp.qr_code=`data:image/svg+xml;utf-8,${c.totp.qr_code}`),this._returnResult({data:c,error:null}))})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async _verify(t){return this._acquireLock(-1,async()=>{try{return await this._useSession(async r=>{var n;const{data:o,error:s}=r;if(s)return this._returnResult({data:null,error:s});const i=Object.assign({challenge_id:t.challengeId},"webauthn"in t?{webauthn:Object.assign(Object.assign({},t.webauthn),{credential_response:t.webauthn.type==="create"?uA(t.webauthn.credential_response):hA(t.webauthn.credential_response)})}:{code:t.code}),{data:l,error:c}=await B(this.fetch,"POST",`${this.url}/factors/${t.factorId}/verify`,{body:i,headers:this.headers,jwt:(n=o==null?void 0:o.session)===null||n===void 0?void 0:n.access_token});return c?this._returnResult({data:null,error:c}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+l.expires_in},l)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",l),this._returnResult({data:l,error:c}))})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}})}async _challenge(t){return this._acquireLock(-1,async()=>{try{return await this._useSession(async r=>{var n;const{data:o,error:s}=r;if(s)return this._returnResult({data:null,error:s});const i=await B(this.fetch,"POST",`${this.url}/factors/${t.factorId}/challenge`,{body:t,headers:this.headers,jwt:(n=o==null?void 0:o.session)===null||n===void 0?void 0:n.access_token});if(i.error)return i;const{data:l}=i;if(l.type!=="webauthn")return{data:l,error:null};switch(l.webauthn.type){case"create":return{data:Object.assign(Object.assign({},l),{webauthn:Object.assign(Object.assign({},l.webauthn),{credential_options:Object.assign(Object.assign({},l.webauthn.credential_options),{publicKey:cA(l.webauthn.credential_options.publicKey)})})}),error:null};case"request":return{data:Object.assign(Object.assign({},l),{webauthn:Object.assign(Object.assign({},l.webauthn),{credential_options:Object.assign(Object.assign({},l.webauthn.credential_options),{publicKey:dA(l.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}})}async _challengeAndVerify(t){const{data:r,error:n}=await this._challenge({factorId:t.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:t.factorId,challengeId:r.id,code:t.code})}async _listFactors(){var t;const{data:{user:r},error:n}=await this.getUser();if(n)return{data:null,error:n};const o={all:[],phone:[],totp:[],webauthn:[]};for(const s of(t=r==null?void 0:r.factors)!==null&&t!==void 0?t:[])o.all.push(s),s.status==="verified"&&o[s.factor_type].push(s);return{data:o,error:null}}async _getAuthenticatorAssuranceLevel(){var t,r;const{data:{session:n},error:o}
300=await this.getSession();if(o)return this._returnResult({data:null,error:o});if(!n)return{data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};const{payload:s}=su(n.access_token);let i=null;s.aal&&(i=s.aal);let l=i;((r=(t=n.user.factors)===null||t===void 0?void 0:t.filter(u=>u.status==="verified"))!==null&&r!==void 0?r:[]).length>0&&(l="aal2");const d=s.amr||[];return{data:{currentLevel:i,nextLevel:l,currentAuthenticationMethods:d},error:null}}async _getAuthorizationDetails(t){try{return await this._useSession(async r=>{const{data:{session:n},error:o}=r;return o?this._returnResult({data:null,error:o}):n?await B(this.fetch,"GET",`${this.url}/oauth/authorizations/${t}`,{headers:this.headers,jwt:n.access_token,xform:s=>({data:s,error:null})}):this._returnResult({data:null,error:new ht})})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async _approveAuthorization(t,r){try{return await this._useSession(async n=>{const{data:{session:o},error:s}=n;if(s)return this._returnResult({data:null,error:s});if(!o)return this._returnResult({data:null,error:new ht});const i=await B(this.fetch,"POST",`${this.url}/oauth/authorizations/${t}/consent`,{headers:this.headers,jwt:o.access_token,body:{action:"approve"},xform:l=>({data:l,error:null})});return i.data&&i.data.redirect_url&&$e()&&!(r!=null&&r.skipBrowserRedirect)&&window.location.assign(i.data.redirect_url),i})}catch(n){if($(n))return this._returnResult({data:null,error:n});throw n}}async _denyAuthorization(t,r){try{return await this._useSession(async n=>{const{data:{session:o},error:s}=n;if(s)return this._returnResult({data:null,error:s});if(!o)return this._returnResult({data:null,error:new ht});const i=await B(this.fetch,"POST",`${this.url}/oauth/authorizations/${t}/consent`,{headers:this.headers,jwt:o.access_token,body:{action:"deny"},xform:l=>({data:l,error:null})});return i.data&&i.data.redirect_url&&$e()&&!(r!=null&&r.skipBrowserRedirect)&&window.location.assign(i.data.redirect_url),i})}catch(n){if($(n))return this._returnResult({data:null,error:n});throw n}}async _listOAuthGrants(){try{return await this._useSession(async t=>{const{data:{session:r},error:n}=t;return n?this._returnResult({data:null,error:n}):r?await B(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,xform:o=>({data:o,error:null})}):this._returnResult({data:null,error:new ht})})}catch(t){if($(t))return this._returnResult({data:null,error:t});throw t}}async _revokeOAuthGrant(t){try{return await this._useSession(async r=>{const{data:{session:n},error:o}=r;return o?this._returnResult({data:null,error:o}):n?(await B(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:t.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new ht})})}catch(r){if($(r))return this._returnResult({data:null,error:r});throw r}}async fetchJwk(t,r={keys:[]}){let n=r.keys.find(l=>l.kid===t);if(n)return n;const o=Date.now();if(n=this.jwks.keys.find(l=>l.kid===t),n&&this.jwks_cached_at+S4>o)return n;const{data:s,error:i}=await B(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(i)throw i;return!s.keys||s.keys.length===0||(this.jwks=s,this.jwks_cached_at=o,n=s.keys.find(l=>l.kid===t),!n)?null:n}async getClaims(t,r={}){try{let n=t;if(!n){const{data:m,error:v}
300=await this.getSession();if(v||!m.session)return this._returnResult({data:null,error:v});n=m.session.access_token}const{header:o,payload:s,signature:i,raw:{header:l,payload:c}}=su(n);r!=null&&r.allowExpired||B4(s.exp);const d=!o.alg||o.alg.startsWith("HS")||!o.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(o.kid,r!=null&&r.keys?{keys:r.keys}:r==null?void 0:r.jwks);if(!d){const{error:m}=await this.getUser(n);if(m)throw m;return{data:{claims:s,header:o,signature:i},error:null}}const u=H4(o.alg),h=await crypto.subtle.importKey("jwk",d,u,!0,["verify"]);if(!await crypto.subtle.verify(u,h,i,I4(`${l}.${c}`)))throw new xc("Invalid JWT signature");return{data:{claims:s,header:o,signature:i},error:null}}catch(n){if($(n))return this._returnResult({data:null,error:n});throw n}}};Wp.nextInstanceID={};const bA=Dp,kA=Wp,jA=Object.freeze(Object.defineProperty({__proto__:null,AuthAdminApi:bA,AuthApiError:Tk,AuthClient:kA,AuthError:Ho,AuthImplicitGrantRedirectError:_s,AuthInvalidCredentialsError:Ts,AuthInvalidJwtError:xc,AuthInvalidToken
300ResponseError:Hn,AuthPKCEGrantCodeExchangeError:zh,AuthRetryableFetchError:wc,AuthSessionMissingError:ht,AuthUnknownError:an,AuthWeakPasswordError:$h,CustomAuthError:Br,GoTrueAdminApi:Dp,GoTrueClient:Wp,NavigatorLockAcquireTimeoutError:Ok,SIGN_OUT_SCOPES:Dl,isAuthApiError:_k,isAuthError:$,isAuthImplicitGrantRedirectError:Ik,isAuthRetryableFetchError:Ol,isAuthSessionMissingError:Ek,isAuthWeakPasswordError:N4,lockInternals:Un,navigatorLock:Dk,processLock:eA},Symbol.toStringTag,{value:"Module"})),Mk=hi(jA);Object.defineProperty(sd,"__esModule",{value:!0});sd.SupabaseAuthClient=void 0;const SA=Mk;class NA extends SA.AuthClient{constructor(t){super(t)}}sd.SupabaseAuthClient=NA;Object.defineProperty(pc,"__esModule",{value:!0});const CA=B0,TA=Xe,_A=lk,EA=f4,il=kk,IA=jk,Oy=Ln,AA=sd;let RA=class{constructor(t,r,n){var o,s,i;this.supabaseUrl=t,this.supabaseKey=r;const l=(0,Oy.validateSupabaseUrl)(t);if(!r)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",l),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",l),this.storageUrl=new URL("storage/v1",l),this.functionsUrl=new URL("functions/v1",l);const c=`sb-${l.hostname.split(".")[0]}-auth-token`,d={db:il.DEFAULT_DB_OPTIONS,realtime:il.DEFAULT_REALTIME_OPTIONS,auth:Object.assign(Object.assign({},il.DEFAULT_AUTH_OPTIONS),{storageKey:c}),global:il.DEFAULT_GLOBAL_OPTIONS},u=(0,Oy.applySettingDefaults)(n??{},d);this.storageKey=(o=u.auth.storageKey)!==null&&o!==void 0?o:"",this.headers=(s=u.global.headers)!==null&&s!==void 0?s:{},u.accessToken?(this.accessToken=u.accessToken,this.auth=new Proxy({},{get:(h,p)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(p)} is not possible`)}})):this.auth=this._initSupabaseAuthClient((i=u.auth)!==null&&i!==void 0?i:{},this.headers,u.global.fetch),this.fetch=(0,IA.fetchWithAuth)(r,this._getAccessToken.bind(this),u.global.fetch),this.realtime=this._initRealtimeClient(Object.assign({headers:this.headers,accessToken:this._getAccessToken.bind(this)},u.realtime)),this.accessToken&&this.accessToken().then(h=>this.realtime.setAuth(h)).catch(h=>console.warn("Failed to set initial Realtime auth token:",h)),this.rest=new TA.PostgrestClient(new URL("rest/v1",l).href,{headers:this.headers,schema:u.db.schema,fetch:this.fetch}),this.storage=new EA.StorageClient(this.storageUrl.href,this.headers,this.fetch,n==null?void 0:n.storage),u.accessToken||this._listenForAuthEvents()}get functions(){return new CA.FunctionsClient(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,r={},n={head:!1,get:!1,count:void 0}){return this.rest.rpc(t,r,n)}channel(t,r={config:{}}){return this.realtime.channel(t,r)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t,r;if(this.accessToken)return await this.accessToken();const{data:n}=await this.auth.getSession();return(r=(t=n.session)===null||t===void 0?void 0:t.access_token)!==null&&r!==void 0?r:this.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:r,detectSessionInUrl:n,storage:o,userStorage:s,storageKey:i,flowType:l,lock:c,debug:d,throwOnError:u},h,p){const m={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new AA.SupabaseAuthClient({url:this.authUrl.href,headers:Object.assign(Object.assign({},m),h),storageKey:i,autoRefreshToken:t,persistSession:r,detectSessionInUrl:n,storage:o,userStorage:s,flowType:l,lock:c,debug:d,throwOnError:u,fetch:p,hasCustomAuthorizationHeader:Object.keys(this.headers).some(v=>v.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new _A.RealtimeClient(this.realtimeUrl.href,Object.assign(Object.assign({},t),{params:Object.assign({apikey:this.supabaseKey},t==null?void 0:t.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((r,n)=>{this._handleTokenChanged(r,"CLIENT",n==null?void 0:n.access_token)})}_handleTokenChanged(t,r,n){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==n?(this.changedAccessToken=n,this.realtime.setAuth(n)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),r=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0)}};pc.default=RA;(function(e){var t=_a&&_a.__createBinding||(Object.create?function(u,h,p,m){m===void 0&&(m=p);var v=Object.getOwnPropertyDescriptor(h,p);(!v||("get"in v?!h.__esModule:v.writable||v.configurable))&&(v={enumerable:!0,get:function(){return h[p]}}),Object.defineProperty(u,m,v)}:function(u,h,p,m){m===void 0&&(m=p),u[m]=h[p]}),r=_a&&_a.__exportStar||function(u,h){for(var p in u)p!=="default"&&!Object.prototype.hasOwnProperty.call(h,p)&&t(h,u,p)}
300,n=_a&&_a.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(e,"__esModule",{value:!0}),e.createClient=e.SupabaseClient=e.FunctionRegion=e.FunctionsError=e.FunctionsRelayError=e.FunctionsFetchError=e.FunctionsHttpError=e.PostgrestError=void 0;const o=n(pc);r(Mk,e);var s=Xe;Object.defineProperty(e,"PostgrestError",{enumerable:!0,get:function(){return s.PostgrestError}});var i=B0;Object.defineProperty(e,"FunctionsHttpError",{enumerable:!0,get:function(){return i.FunctionsHttpError}}),Object.defineProperty(e,"FunctionsFetchError",{enumerable:!0,get:function(){return i.FunctionsFetchError}}),Object.defineProperty(e,"FunctionsRelayError",{enumerable:!0,get:function(){return i.FunctionsRelayError}}),Object.defineProperty(e,"FunctionsError",{enumerable:!0,get:function(){return i.FunctionsError}}),Object.defineProperty(e,"FunctionRegion",{enumerable:!0,get:function(){return i.FunctionRegion}}),r(lk,e);var l=pc;Object.defineProperty(e,"SupabaseClient",{enumerable:!0,get:function(){return n(l).default}});const c=(u,h,p)=>new o.default(u,h,p);e.createClient=c;function d(){if(typeof window<"u"||typeof process>"u")return!1;const u=process.version;if(u==null)return!1;const h=u.match(/^v(\d+)\./);return h?parseInt(h[1],10)<=18:!1}d()&&console.warn("⚠️  Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217")})(_p);const qk=Fo(_p),PA=Zy({__proto__:null,default:qk},[_p]),{PostgrestError:u8,FunctionsHttpError:h8,FunctionsFetchError:m8,FunctionsRelayError:p8,FunctionsError:f8,FunctionRegion:g8,SupabaseClient:y8,createClient:OA,GoTrueAdminApi:v8,GoTrueClient:w8,AuthAdminApi:x8,AuthClient:b8,navigatorLock:k8,NavigatorLockAcquireTimeoutError:j8,lockInternals:S8,processLock:N8,SIGN_OUT_SCOPES:C8,AuthError:T8,AuthApiError:_8,AuthUnknownError:E8,CustomAuthError:I8,AuthSessionMissingError:A8,AuthInvalidToken
300ResponseError:R8,AuthInvalidCredentialsError:P8,AuthImplicitGrantRedirectError:O8,AuthPKCEGrantCodeExchangeError:D8,AuthRetryableFetchError:L8,AuthWeakPasswordError:W8,AuthInvalidJwtError:M8,isAuthError:q8,isAuthApiError:z8,isAuthSessionMissingError:$8,isAuthImplicitGrantRedirectError:G8,isAuthRetryableFetchError:B8,isAuthWeakPasswordError:H8,RealtimePresence:F8,RealtimeChannel:U8,RealtimeClient:V8,REALTIME_LISTEN_TYPES:Y8,REALTIME_POSTGRES_CHANGES_LISTEN_EVENT:K8,REALTIME_PRESENCE_LISTEN_EVENTS:J8,REALTIME_SUBSCRIBE_STATES:Q8,REALTIME_CHANNEL_STATES:X8}=qk||PA,DA="https://oktnzzuwborouvmtjlon.supabase.co",LA="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im9rdG56enV3Ym9yb3V2bXRqbG9uIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjU0ODgzMDQsImV4cCI6MjA4MTA2NDMwNH0.2rwoA9VmMDWsJChqxtpmIoXl6t6pY7xio8HrD628dDI",Mp=OA(DA,LA,{auth:{storage:localStorage,persistSession:!0,autoRefreshToken:!0}}),Dy="https://www.professionalgaragedoorservices.com/api/leads/website",WA=()=>{try{const e=new URLSearchParams(window.location.search),t=e.get("im_ref")||e.get("irclickid");t&&localStorage.setItem("pgds_im_ref",JSON.stringify({ref:t,at:Date.now()}));const r=JSON.parse(localStorage.getItem("pgds_im_ref")||"null");if(r&&Date.now()-r.at<30*864e5)return r.ref}catch{}return null},zk=e=>{try{const t=JSON.stringify({...e,im_ref:WA(),landing:window.location.href,source_page:document.title});navigator.sendBeacon?navigator.sendBeacon(Dy,new Blob([t],{type:"application/json"})):fetch(Dy,{method:"POST",headers:{"Content-Type":"application/json"},body:t,keepalive:!0}).catch(()=>{})}catch{}},qp=()=>{var e;try{(e=window.oaiq)==null||e.call(window,"measure","lead_created",{type:"customer_action"})}catch(t){console.error("oaiq lead tracking failed:",t)}},MA="/assets/hero-garage-door-CBIHN2sD.jpg",ya=100,va="4.9",zp="https://www.homeadvisor.com/rated.ProfessionalGarageDoor.162901898.html?spId=162901898&preview=true",$k=({ratingBadge:e="4.9-Star Rated on Google",badgeIcon:t=Mr,heading:r=a.jsxs(a.Fragment,{children:["Experienced ",a.jsx("span",{className:"text-primary",children:"Garage Door"})," Specialists You Can Trust"]}),subheadline:n="Expert installation, repair & maintenance. Trusted by thousands of homeowners.",phoneDisplay:o="(888) 285-4021",phoneHref:s="+18882854021",thirdBadgeIcon:i=Mr,thirdBadgeTitle:l="4.9 Stars",thirdBadgeSubtitle:c=`${ya}+ Reviews`})=>{const{toast:d}=Gc(),[u,h]=b.useState(!1),[p,m]=b.useState(!1),[v,y]=b.useState({firstName:"",lastName:"",phone:"",zipCode:"",service:"",message:""}),x=async f=>{if(f.preventDefault(),!p){d({title:"Consent Required",description:"Please agree to the Privacy Policy to continue.",variant:"destructive"});return}h(!0),zk({firstName:v.firstName,lastName:v.lastName,phone:v.phone,zip:v.zipCode,service:v.service,message:v.message});try{const{error:w}=await Mp.functions.invoke("send-contact-email",{body:{firstName:v.firstName,lastName:v.lastName,phone:v.phone,zipCode:v.zipCode,service:v.service,message:v.message}});if(w)throw w;qp(),d({title:"Quote Request Submitted!",description:"We'll get back to you within 24 hours."}),y({firstName:"",lastName:"",phone:"",zipCode:"",service:"",message:""}),m(!1)}catch(w){console.error("Error sending email:",w),d({title:"Error",description:"Failed to send your request. Please try again or call us directly.",variant:"destructive"})}finally{h(!1)}},g=f=>{y(w=>({...w,[f.target.name]:f.target.value}))};return a.jsxs("section",{className:"relative bg-gradient-hero pt-24 pb-16 overflow-hidden",children:[a.jsxs("div",{className:"absolute inset-0",children:[a.jsx("img",{src:MA,alt:"Modern luxury residential garage door installed by Professional Garage Door Services",width:1920,height:1080,className:"w-full h-full object-cover"}),a.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-secondary/85 via-secondary/55 to-secondary/20"}),a.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-secondary/70 via-transparent to-transparent"})]}),a.jsx("div",{className:"absolute inset-0 opacity-10",children:a.jsx("div",{className:"absolute inset-0",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewB
300ox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.4'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}})}),a.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-2 bg-gradient-gold z-10"}),a.jsx("div",{className:"container mx-auto px-4 relative z-10",children:a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"inline-flex items-center gap-2 bg-primary/20 border border-primary/30 rounded-full px-4 py-2 mb-6",children:[a.jsx(t,{className:"w-5 h-5 text-primary fill-primary"}),a.jsx("span",{className:"text-primary font-semibold text-sm uppercase tracking-wide",children:e})]}),a.jsx("h1",{className:"font-heading text-4xl md:text-5xl lg:text-6xl text-secondary-foreground mb-6",children:r}),a.jsx("p",{className:"text-xl text-secondary-foreground/80 mb-8 max-w-lg",children:n}),a.jsxs("a",{href:`tel:${s}`,className:"inline-flex items-center gap-3 bg-primary/20 hover:bg-primary/30 border border-primary/30 rounded-xl px-6 py-4 transition-colors mb-10",children:[a.jsx(et,{className:"w-6 h-6 text-primary"}),a.jsxs("div",{children:[a.jsx("p",{className:"text-secondary-foreground/60 text-sm",children:"Call Now - 24/7"}),a.jsx("p",{className:"text-secondary-foreground font-bold text-xl",children:o})]})]}),a.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(zC,{className:"w-6 h-6 text-primary"}),a.jsxs("div",{children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Free Estimate"}),a.jsx("p",{className:"text-secondary-foreground/60 text-xs",children:"No Obligation"})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(fe,{className:"w-6 h-6 text-primary"}),a.jsxs("div",{children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"24/7"}),a.jsx("p",{className:"text-secondary-foreground/60 text-xs",children:"Emergency"})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(i,{className:"w-6 h-6 text-primary fill-primary"}),a.jsxs("div",{children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:l}),a.jsx("p",{className:"text-secondary-foreground/60 text-xs",children:c})]})]})]})]}),a.jsxs("div",{className:"bg-card rounded-2xl p-6 md:p-8 shadow-xl border border-border",children:[a.jsxs("div",{className:"text-center mb-6",children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-2",children:"Get Your Free Quote"}),a.jsx("p",{className:"text-muted-foreground",children:"Fast response • No obligation"})]}),a.jsxs("form",{onSubmit:x,className:"space-y-4",children:[a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsx("div",{children:a.jsx("input",{type:"text",id:"heroFirstName",name:"firstName",value:v.firstName,onChange:g,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"First Name *"})}),a.jsx("div",{children:a.jsx("input",{type:"text",id:"heroLastName",name:"lastName",value:v.lastName,onChange:g,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"Last Name *"})})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsx("div",{children:a.jsx("input",{type:"tel",id:"heroPhone",name:"phone",value:v.phone,onChange:g,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"Phone Number *"})}),a.jsx("div",{children:a.jsx("input",{type:"text",id:"heroZipCode",name:"zipCode",value:v.zipCode,onChange:g,required:!0,inputMode:"numeric",maxLength:10,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"ZIP Code *"})})]}),a.jsx("div",{children:a.jsxs("select",{id:"heroService",name:"service",value:v.service,onChange:g,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",children:[a.jsx("option",{value:"",children:"Select Service Needed *"}),a.jsx("option",{value:"installation",children:"Garage Door Installation"}),a.jsx("option",{value:"repair",children:"Garage Door Repair"}),a.jsx("option",{value:"spring",children:"Spring Replacement"}),a.jsx("option",{value:"opener",children:"Opener Installation"}),a.jsx("option",{value:"maintenance",children:"Maintenance"}),a.jsx("option",{value:"emergency",children:"Emergency Service"})]})}),a.jsx("div",{children:a.jsx("textarea",{id:"heroMessage",name:"message",value:v.message,onChange:g,rows:3,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none resize-none",placeholder:"Describe your issue (optional)"})}),a.jsxs("div",{className:"flex items-start gap-3",children:[a.jsx(td,{id:"heroConsent",checked:p,onCheckedChange:f=>m(f),className:"mt-1"}),a.jsxs("label",{htmlFor:"heroConsent",className:"text-sm text-muted-foreground cursor-pointer",children:["I agree to the"," ",a.jsx(A,{to:"/privacy-policy",className:"text-primary hover:underline",target:"_blank",children:"Privacy Policy"})," ","and"," ",a.jsx(A,{to:"/terms-and-conditions",className:"text-primary hover:underline",target:"_blank",children:"Terms & Conditions"})," ","and consent to receive calls/texts about my quote. Message and data rates may apply."]})]}),a.jsx(re,{type:"submit",variant:"hero",size:"xl",className:"w-full",disabled:u||!p,children:u?"Sending...":"Get Free Quote Now"})]})]})]})})]})}
300,qA="/assets/Group-Photo-Outside-Warehouse-Large-38b613-Cc6NSntw.webp",Gk=()=>a.jsx("section",{className:"bg-secondary",children:a.jsxs("div",{className:"relative",children:[a.jsx("img",{src:qA,alt:"Professional Garage Door Services technicians standing by our service trucks",className:"w-full h-auto max-h-[520px] object-cover",style:{objectPosition:"center 55%"},loading:"eager"}),a.jsx("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-secondary/90 to-transparent pt-16 pb-4",children:a.jsx("p",{className:"text-center text-secondary-foreground font-semibold text-lg",children:"Meet the real technicians who show up to your door."})})]})}),lu="https://www.google.com/maps/place/?q=place_id:ChIJS-DCwB5csAoRhurX8YO3OHM",zA="https://www.bbb.org/us/ca/tarzana/profile/garage-doors/professional-garage-door-services-1216-1000024888",$A="https://www.cslb.ca.gov/onlineservices/CheckLicenseII/LicenseDetail.aspx?LicNum=1117899",GA=()=>a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 mb-12",children:[a.jsxs("a",{href:lu,target:"_blank",rel:"noopener noreferrer","aria-label":`Verify our ${va} Google rating on our Google Business Profile`,className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center block hover:bg-secondary-foreground/15 transition-colors",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(zo,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-3xl md:text-4xl font-bold text-secondary-foreground",children:va}),a.jsx("p",{className:"text-secondary-foreground/70 text-sm",children:"Google Rating"})]}),a.jsxs("a",{href:lu,target:"_blank",rel:"noopener noreferrer","aria-label":`Read our ${ya}+ verified Google reviews`,className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center block hover:bg-secondary-foreground/15 transition-colors",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(Mr,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsxs("p",{className:"text-3xl md:text-4xl font-bold text-secondary-foreground",children:[ya,"+"]}),a.jsx("p",{className:"text-secondary-foreground/70 text-sm",children:"Verified Reviews"})]}),a.jsxs("a",{href:$A,target:"_blank",rel:"noopener noreferrer","aria-label":"Verify CSLB license #1117899 on the California Contractors State License Board",className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center block hover:bg-secondary-foreground/15 transition-colors",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(at,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-3xl md:text-4xl font-bold text-secondary-foreground",children:"Licensed"}),a.jsx("p",{className:"text-secondary-foreground/70 text-sm",children:"CSLB #1117899"})]})]}),a.jsxs("div",{className:"text-center mb-8",children:[a.jsx("p",{className:"text-secondary-foreground/60 uppercase tracking-wider text-sm font-semibold mb-6",children:"Trusted & Verified By"}),a.jsxs("div",{className:"flex flex-wrap justify-center items-center gap-6 md:gap-10",children:[a.jsxs("a",{href:zp,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 bg-secondary-foreground/5 px-4 py-3 rounded-lg hover:bg-secondary-foreground/10 transition-colors",children:[a.jsx("div",{className:"w-8 h-8 bg-green-600 rounded flex items-center justify-center",children:a.jsx(op,{className:"w-5 h-5 text-white"})}),a.jsxs("div",{className:"text-left",children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Angi"}),a.jsx("p",{className:"text-secondary-foreground/60 text-xs",children:"Top Rated"})]})]}),a.jsxs("a",{href:lu,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 bg-secondary-foreground
300/5 px-4 py-3 rounded-lg hover:bg-secondary-foreground/10 transition-colors",children:[a.jsx("div",{className:"w-8 h-8 bg-white rounded flex items-center justify-center",children:a.jsx("span",{className:"font-bold text-sm",style:{color:"#4285F4"},children:"G"})}),a.jsxs("div",{className:"text-left",children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Google"}),a.jsx("div",{className:"flex items-center gap-1",children:[...Array(5)].map((e,t)=>a.jsx(Mr,{className:"w-3 h-3 fill-yellow-400 text-yellow-400"},t))})]})]}),a.jsxs("a",{href:zA,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 bg-secondary-foreground/5 px-4 py-3 rounded-lg hover:bg-secondary-foreground/10 transition-colors",children:[a.jsx("div",{className:"w-8 h-8 rounded flex items-center justify-center",style:{backgroundColor:"#005a87"},children:a.jsx(MC,{className:"w-5 h-5 text-white"})}),a.jsxs("div",{className:"text-left",children:[a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"BBB"}),a.jsx("p",{className:"text-secondary-foreground/60 text-xs",children:"Verified Business"})]})]})]})]}),a.jsxs("div",{className:"bg-gradient-to-r from-blue-900 to-blue-800 rounded-2xl p-6 md:p-8 flex flex-col md:flex-row items-center justify-between gap-4",children:[a.jsxs("div",{className:"flex items-center gap-4",children:[a.jsx("div",{className:"w-16 h-16 bg-white/10 rounded-full flex items-center justify-center",children:a.jsx(AC,{className:"w-8 h-8 text-primary"})}),a.jsxs("div",{className:"text-center md:text-left",children:[a.jsx("p",{className:"text-white font-bold text-xl md:text-2xl",children:"Military & First Responder Discount"}),a.jsx("p",{className:"text-white/70",children:"Thank you for your service! Ask about our special rates."})]})]}),a.jsx("a",{href:"tel:+18882854021",className:"bg-primary hover:bg-primary/90 text-primary-foreground font-bold py-3 px-6 rounded-lg transition-colors whitespace-nowrap",children:"Call For Discount"})]})]})}),BA=[{icon:eb,title:"Garage Door Installation",description:"Complete installation of residential and commercial garage doors with premium materials and expert craftsmanship.",link:"/garage-door-installation"},{icon:nb,title:"Garage Door Repair",description:"Fast, reliable repair services for all types of garage doors. We fix panels, tracks, cables, and more.",link:"/garage-door-repair"},{icon:tb,title:"Spring Replacement",description:"Safe and professional replacement of torsion and extension springs by trained technicians.",link:"/garage-door-spring-replacement"},{icon:qC,title:"Opener Installation",description:"Installation and programming of smart garage door openers with the latest technology.",link:"/garage-door-opener-installation"},{icon:Zx,title:"Preventive Maintenance",description:"Regular maintenance programs to extend the life of your garage door and prevent costly repairs.",link:"/garage-door-maintenance"},{icon:rb,title:"Emergency Services",description:"24/7 emergency repair services when you need us most. Fast response times when scheduling allows.",link:"/emergency-garage-door-repair"}],HA=()=>a.jsx("section",{id:"services",className:"py-24 bg-background",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center max-w-2xl mx-auto mb-16",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"What We Offer"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-6",children:"Our Professional Services"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"From installation to emergency repairs, we provide comprehensive garage door solutions for every need."})]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:BA.map(e=>a.jsxs(A,{to:e.link,className:"group bg-card rounded-2xl p-8 shadow-card hover:shadow-xl transition-all duration-500 hover:-translate-y-2 border border-border",children:[a.jsx("div",{className:"w-16 h-16 rounded-xl bg-gradient-gold flex items-center justify-center mb-6 group-hover:scale-110 transition-transform duration-300 shadow-gold",children:a.jsx(e.icon,{className:"w-8 h-8 text-primary-foreground"})}),a.jsx("h3",{className:"font-heading text-2xl text-foreground mb-4",children:e.title}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e.description}),a.jsxs("div",{className:"mt-6 flex items-center text-primary font-semibold opacity-0 group-hover:opacity-100 transition-opacity duration-300",children:[a.jsx("span",{children:"Learn More"}),a.jsx("svg",{className:"w-5 h-5 ml-2 group-hover:translate-x-2 transition-transform",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 8l4 4m0 0l-4 4m4-4H3"})})]})]},e.title))})]})}),FA="/assets/www.axenia-haritonova.com-68-Large-54841e-C3z4PX5o.webp",UA="/assets/www.axenia-haritonova.com-8-Large-7e2d20-xKXQtBDC.webp",VA="/assets/IMG_5313-Large-6ded1d-SeTn1Bhx.webp",YA="/assets/IMG_4062-Large-9b53e8-B8Z01_Eq.webp",KA="/assets/IMG_1092-Large-7df10b-BKkCtZ5m.webp",JA="/assets/www.axenia-haritonova.com-134.jpg-GOOD-Large-c48841-BG-x0X4k.webp",QA="/assets/www.axenia-haritonova.com-45-Medium-12c028-Dvjcvgcj.webp",Bk="/assets/IMG_0469-2-960e82-CgThhdIZ.webp",XA=[{src:FA,title:"Our Work"},{src:UA,title:"Our Work"},{src:VA,title:"Our Work"},{src:YA,title:"Our Work"},{src:KA,title:"Our Work"},{src:JA,title:"Our Work"},{src:QA,title:"Our Work"},{src:Bk,title:"Our Work"}],Hk=({showRatingBadge:e=!0})=>a.jsx("section",{id:"gallery",className:"py-24 bg-background",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center mb-12",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Our Work"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-4",children:"Project Gallery"}),a.jsx("p",{className:"text-muted-foreground text-lg max-w-2xl mx-auto mb-4",children:"See the quality of our work. Professional installations and repairs."}),e&&a.jsxs("div",{className:"inline-flex items-center gap-2 bg-card border border-border rounded-full px-4 py-2 shadow-card",children:[a.jsx("div",{className:"flex",children:[...Array(5)].map((t,r)=>a.jsx(Mr,{className:"w-4 h-4 fill-primary text-primary"},r))}),a.jsx("span",{className:"text-foreground font-bold",children:va}),a.jsxs("span",{className:"text-muted-foreground",children:["(",ya,"+ reviews)"]})]})]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:XA.map((t,r)=>a.jsxs("div",{className:"group relative overflow-hidden rounded-xl shadow-card",children:[a.jsx("img",{src:t.src,alt:t.title,loading:"lazy",className:"w-full h-64 object-cover transition-transform duration-500 group-hover:scale-110"}),a.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-secondary/90 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-6",children:a.jsx("h3",{className:"font-heading text-lg text-secondary-foreground",children:t.title})})]},r))}),a.jsx("div",{className:"text-center mt-12",children:a.jsx(A,{to:"/gallery",children:a.jsx(re,{variant:"outline",size:"lg",children:"View Full Gallery"})})})]})}),ZA="/assets/employee-1-M7WmFg5d.jpg",eR="/assets/employee-2-BMVObV_7.jpg",tR="/assets/employee-3-DoSsPLb-.jpg",rR="/assets/employee-4-DoEzWT63.jpg",nR="/assets/employee-5-Cv_7d3lD.jpg",aR="/assets/employee-6-CEkPweJB.jpg",oR="/assets/employee-7-CneuWK86.jpg",sR="/assets/employee-8-Y1LenGyZ.jpg",iR=[{name:"Michael Thompson",role:"Lead Technician",image:ZA},{name:"David Chen",role:"Installation Specialist",image:eR},{name:"Carlos Rodriguez",role:"Senior Technician",image:tR},{name:"James Williams",role:"Service Manager",image:rR},{name:"Anthony Martinez",role:"Repair Technician",image:nR},{name:"Robert Garcia",role:"Master Technician",image:aR},{name:"Daniel Wilson",role:"Installation Expert",image:oR},{name:"Steven Anderson",role:"Operations Director",image:sR}],Fk=()=>a.jsx("section",{id:"team",className:"py-24 bg-muted",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center max-w-2xl mx-auto mb-16",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Meet Our Experts"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-6",children:"Our Professional Team"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"Certified technicians with years of experience dedicated to providing exceptional service."})]}),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8",children:iR.map((e,t)=>a.jsxs("div",{className:"group relative bg-card rounded-2xl overflow-hidden shadow-card hover:shadow-xl transition-all duration-500",children:[a.jsxs("div",{className:"relative h-80 overflow-hidden",children:[a.jsx("img",{src:e.image,alt:e.name,loading:"lazy",className:"w-full h-full object-cover object-top group-hover:scale-105 transition-transform duration-700"}),a.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-secondary/90 via-secondary/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500"})]}),a.jsx("div",{className:"absolute bottom-0 left-0 right-0 p-6 transform translate-y-0 group-hover:translate-y-0 transition-transform duration-500",children:a.jsxs("div",{className:"bg-card/95 backdrop-blur-sm rounded-xl p-4 shadow-lg border-l-4 border-primary",children:[a.jsx("h3",{className:"font-heading text-lg text-foreground mb-1",children:e.name}),a.jsx("p",{className:"text-primary font-semibold text-sm",children:e.role})]})}),a.jsx("div",{className:"absolute top-4 right-4 w-12 h-12 rounded-full bg-primary/90 flex items-center justify-center opacity-0 group-hover:opacity-100 transform scale-0 group-hover:scale-100 transition-all duration-500 shadow-gold",children:a.jsx("svg",{className:"w-6 h-6 text-primary-foreground",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})})})]},e.name))})]})}),lR="/assets/tech-in-warehouse-in-front-of-ladder-81bd14-ebT_4fJY.webp",ld=({cityName:e,phoneHref:t="+18882854021",phoneDis
300play:r="(888) 285-4021",body:n})=>{const o=e?`Licensed, Insured, and Ready When ${e} Needs Us`:"Licensed, Insured, and Ready When You Need Us",s=n??(e?`Our technicians bring years of hands-on experience to every job in ${e}, backed by a fully equipped team based right here in Tarzana.`:"Our technicians bring years of hands-on experience to every job, backed by a fully equipped team you can count on.");return a.jsxs("section",{className:"relative bg-secondary overflow-hidden",children:[a.jsxs("div",{className:"absolute inset-0",children:[a.jsx("img",{src:lR,alt:"Professional Garage Door Services technicians in our warehouse",className:"w-full h-full object-cover",style:{objectPosition:"center 15.5%"}}),a.jsx("div",{className:"absolute inset-0 bg-secondary/75"})]}),a.jsxs("div",{className:"container mx-auto px-4 relative z-10 text-center py-24 md:py-32",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Real Team. Real Experience. Real Results."}),a.jsx("h2",{className:"font-heading text-3xl md:text-5xl text-secondary-foreground mb-6 max-w-3xl mx-auto",children:o}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-8",children:s}),a.jsxs("a",{href:`tel:${t}`,className:"inline-flex items-center gap-2 bg-primary hover:bg-primary/90 text-primary-foreground font-bold py-4 px-8 rounded-lg transition-colors text-lg",children:["Call ",r]})]})]})},cR="https://search.google.com/local/writereview?placeid=ChIJS-DCwB5csAoRhurX8YO3OHM",dR="https://www.google.com/maps/place/?q=place_id:ChIJS-DCwB5csAoRhurX8YO3OHM",uR=[{author:"John M.",rating:5,text:"Excellent service! They fixed my broken spring the same day I called. Very professional and fair pricing.",date:"2 weeks ago"},{author:"Sarah K.",rating:5,text:"Best garage door company in the area. Installed a beautiful new door and opener. Highly recommend!",date:"1 month ago"},{author:"Michael R.",rating:5,text:"Fast, reliable, and honest. They diagnosed the problem quickly and had my door working in no time.",date:"1 month ago"}],hR=()=>a.jsx("section",{className:"py-20 bg-background",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center mb-12",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Customer Reviews"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-4",children:"What Our Customers Say"}),a.jsxs("div",{className:"inline-flex items-center gap-3 bg-card border border-border rounded-full px-6 py-3 shadow-card",children:[a.jsx("img",{src:"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png",alt:"Google",className:"h-6 object-contain"}),a.jsx("div",{className:"flex",children:[...Array(5)].map((e,t)=>a.jsx(Mr,{className:"w-5 h-5 fill-primary text-primary"},t))}),a.jsx("span",{className:"text-foreground font-bold text-lg",children:va}),a.jsxs("span",{className:"text-muted-foreground",children:["(",a.jsxs("a",{href:dR,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:[ya,"+ reviews"]}),")"]})]})]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 max-w-5xl mx-auto mb-10",children:uR.map((e,t)=>a.jsxs("div",{className:"bg-card rounded-2xl p-6 shadow-card border border-border hover:shadow-xl transition-shadow duration-300",children:[a.jsx("div",{className:"flex mb-3",children:[...Array(e.rating)].map((r,n)=>a.jsx(Mr,{className:"w-4 h-4 fill-primary text-primary"},n))}),a.jsxs("p",{className:"text-muted-foreground mb-4 line-clamp-4",children:['"',e.text,'"']}),a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("span",{className:"font-semibold text-foreground",children:e.author}),a.jsx("span",{className:"text-sm text-muted-foreground",children:e.date})]})]},t))}),a.jsx("div",{className:"text-center",children:a.jsx("a",{href:cR,target:"_blank",rel:"noopener noreferrer",children:a.jsxs(re,{variant:"outline",size:"lg",className:"gap-2",children:[a.jsx("img",{src:"https://www.google.com/favicon.ico",alt:"Google",className:"w-4 h-4"}),"See All Reviews on Google",a.jsx(pn,{className:"w-4 h-4"})]})})})]})}),$p="/assets/IMG_0370-d4b410-DCz54Ly4.webp",Gp="/assets/Long-raised-panel-brown-windows-b540f9-DZ3gBKLu.webp",Bp="/assets/www.axenia-haritonova.com-70-Medium-111718-CtoiR1Eh.webp",Uk=[{id:"1",title:"5 Signs Your Garage Door Needs Professional Repair",excerpt:"Learn the warning signs that indicate your garage door needs immediate attention from a professional technician.",category:"Maintenance",date:"December 10, 2024",readTime:"5 min read",slug:"signs-garage-door-needs-repair",image:$p}
300,{id:"2",title:"Choosing the Right Garage Door for Your Home",excerpt:"A comprehensive guide to selecting the perfect garage door style, material, and features for your property.",category:"Installation",date:"December 8, 2024",readTime:"7 min read",slug:"choosing-right-garage-door",image:Gp},{id:"3",title:"Smart Garage Door Openers: Features & Benefits",excerpt:"Discover how smart garage door technology can enhance your home security and convenience.",category:"Technology",date:"December 5, 2024",readTime:"6 min read",slug:"smart-garage-door-openers",image:Bp}],Vk=()=>a.jsx("section",{className:"py-24 bg-background","aria-labelledby":"blog-heading",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-end mb-16",children:[a.jsxs("div",{className:"max-w-xl mb-6 md:mb-0",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Latest Insights"}),a.jsx("h2",{id:"blog-heading",className:"font-heading text-4xl md:text-5xl text-foreground mb-4",children:"From Our Blog"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"Expert tips, industry news, and guides to help you maintain your garage door."})]}),a.jsx(A,{to:"/blog",children:a.jsxs(re,{variant:"outline",size:"lg",children:["View All Posts",a.jsx(la,{className:"w-5 h-5 ml-2"})]})})]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:Uk.map(e=>a.jsxs("article",{className:"group bg-card rounded-2xl overflow-hidden shadow-card hover:shadow-xl transition-all duration-500 hover:-translate-y-2 border border-border",children:[a.jsxs("div",{className:"h-48 relative overflow-hidden",children:[a.jsx("img",{src:e.image,alt:e.title,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-110",loading:"lazy"}),a.jsx("div",{className:"absolute top-4 left-4",children:a.jsx("span",{className:"inline-block bg-primary text-primary-foreground text-xs font-bold uppercase tracking-wider px-3 py-1 rounded-full",children:e.category})})]}),a.jsxs("div",{className:"p-6",children:[a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-4",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-10",children:e.date})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),e.readTime]})]}),a.jsx("h3",{className:"font-heading text-xl text-foreground mb-3 group-hover:text-primary transition-colors duration-300",children:e.title}),a.jsx("p",{className:"text-muted-foreground mb-6 line-clamp-2",children:e.excerpt}),a.jsxs(A,{to:`/blog/${e.slug}`,className:"inline-flex items-center text-primary font-semibold group-hover:gap-3 gap-2 transition-all duration-300","aria-label":`Read full article: ${e.title}`,children:["Read Article",a.jsx(la,{className:"w-4 h-4"})]})]})]},e.id))})]})}),mR="https://www.google.com/maps/place/?q=place_id:ChIJS-DCwB5csAoRhurX8YO3OHM",Ly="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",ue=({showReviewLinks:e=!0,showTarzanaLink:t=!0})=>a.jsxs("footer",{className:"bg-secondary text-secondary-foreground",children:[a.jsx("div",{className:"container mx-auto px-4 py-12",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("img",{src:c0,alt:"Professional Garage Door Services",className:"w-10 h-10 object-contain"}),a.jsx("span",{className:"font-heading font-bold text-secondary-foreground",children:"Professional Garage Door Services"})]}),a.jsx("p",{className:"text-secondary-foreground/70 text-sm",children:"Professional Garage Door Services, LLC"}),a.jsxs("div",{className:"space-y-2 text-sm",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Fc,{className:"w-4 h-4 text-primary flex-shrink-0"}
300),a.jsx("span",{className:"text-secondary-foreground/80",children:"5665 Wilbur Ave, Tarzana, CA 91356"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(et,{className:"w-4 h-4 text-primary flex-shrink-0"}),a.jsx("a",{href:"tel:+18882854021",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"(888) 285-4021"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(sp,{className:"w-4 h-4 text-primary flex-shrink-0"}),a.jsx("a",{href:"mailto:[email protected]",className:"text-secondary-foreground/80 hover:text-primary transition-colors text-xs sm:text-sm",children:"[email protected]"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(at,{className:"w-4 h-4 text-primary flex-shrink-0"}),a.jsxs("span",{className:"text-secondary-foreground/80",children:["CSLB License:"," ",a.jsx("a",{href:Ly,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#1117899"})]})]})]}),a.jsxs("div",{className:"flex flex-col gap-1 pt-2",children:[e&&a.jsxs(a.Fragment,{children:[a.jsxs("a",{href:mR,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1 text-secondary-foreground/80 hover:text-primary transition-colors text-sm",children:["Google Business Profile",a.jsx(pn,{className:"w-3 h-3"})]}),a.jsxs("a",{href:zp,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1 text-secondary-foreground/80 hover:text-primary transition-colors text-sm",children:["Angi",a.jsx(pn,{className:"w-3 h-3"})]})]}),a.jsxs("a",{href:"https://www.facebook.com/profile.php?id=61555141026339",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1 text-secondary-foreground/80 hover:text-primary transition-colors text-sm",children:["Facebook",a.jsx(pn,{className:"w-3 h-3"})]}),a.jsxs("a",{href:"https://www.instagram.com/professionalgaragedoorsusa",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1 text-secondary-foreground/80 hover:text-primary transition-colors text-sm",children:["Instagram",a.jsx(pn,{className:"w-3 h-3"})]})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-heading font-bold text-secondary-foreground mb-4",children:"Services"}),a.jsxs("div",{className:"flex flex-col gap-2 text-sm",children:[a.jsx(A,{to:"/garage-door-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Garage Door Repair"}),a.jsx(A,{to:"/garage-door-spring-replacement",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Spring Replacement"}),a.jsx(A,{to:"/garage-door-opener-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Opener Repair"}),a.jsx(A,{to:"/garage-door-opener-installation",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Opener Installation"}),a.jsx(A,{to:"/garage-door-installation",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Garage Door Installation"}),a.jsx(A,{to:"/garage-door-cable-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Cable Repair"}),a.jsx(A,{to:"/off-track-garage-door-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Off-Track Repair"}),a.jsx(A,{to:"/garage-door-maintenance",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Maintenance & Tune-Up"}),a.jsx(A,{to:"/emergency-garage-door-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Emergency Repair"})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-heading font-bold text-secondary-foreground mb-4",children:"Service Areas"}),a.jsxs("div",{className:"flex flex-col gap-2 text-sm",children:[t&&a.jsx(A,{to:"/garage-door-repair-tarzana",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Tarzana"}),a.jsx(A,{to:"/garage-door-repair-encino",className:"text-secondary-foreground
300/80 hover:text-primary transition-colors",children:"Encino"}),a.jsx(A,{to:"/garage-door-repair-woodland-hills",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Woodland Hills"}),a.jsx(A,{to:"/garage-door-repair-reseda",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Reseda"}),a.jsx(A,{to:"/garage-door-repair-sherman-oaks",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Sherman Oaks"}),a.jsx(A,{to:"/garage-door-repair-winnetka",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Winnetka"}),a.jsx(A,{to:"/garage-door-repair-van-nuys",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Van Nuys"}),a.jsx(A,{to:"/garage-door-repair-calabasas",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Calabasas"}),a.jsx(A,{to:"/garage-door-repair-canoga-park",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Canoga Park"}),a.jsx(A,{to:"/garage-door-repair-west-hills",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"West Hills"}),a.jsx(A,{to:"/garage-door-repair-studio-city",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Studio City"}),a.jsx(A,{to:"/garage-door-repair-north-hollywood",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"North Hollywood"}),a.jsx(A,{to:"/garage-door-repair-northridge",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Northridge"}),a.jsx(A,{to:"/garage-door-repair-chatsworth",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Chatsworth"}),a.jsx(A,{to:"/garage-door-repair-granada-hills",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Granada Hills"}),a.jsx(A,{to:"/garage-door-repair-valley-village",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Valley Village"}),a.jsx(A,{to:"/garage-door-repair-toluca-lake",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Toluca Lake"}),a.jsx(A,{to:"/garage-door-repair-mission-hills",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Mission Hills"}),a.jsx(A,{to:"/garage-door-repair-sylmar",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Sylmar"}),a.jsx(A,{to:"/garage-door-repair-sun-valley",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Sun Valley"}),a.jsx(A,{to:"/garage-door-repair-pacoima",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Pacoima"}),a.jsx(A,{to:"/garage-door-repair-arleta",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Arleta"}),a.jsx(A,{to:"/garage-door-repair-lake-balboa",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Lake Balboa"}),a.jsx(A,{to:"/garage-door-repair-porter-ranch",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Porter Ranch"}),a.jsx(A,{to:"/garage-door-repair-universal-city",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Universal City"}),a.jsx(A,{to:"/garage-door-repair-burbank",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Burbank"}),a.jsx(A,{to:"/garage-door-repair-beverly-glen",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Beverly Glen"}),a.jsx(A,{to:"/garage-door-repair-agoura-hills",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Agoura Hills"}),a.jsx(A,{to:"/garage-door-repair-westlake-village",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Westlake Village"}),a.jsx(A,{to:"/garage-door-repair-thousand-oaks",className:"text-secondary-foreground
300/80 hover:text-primary transition-colors",children:"Thousand Oaks"}),a.jsx(A,{to:"/garage-door-repair-bel-air",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Bel Air"}),a.jsx(A,{to:"/garage-door-repair-brentwood",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Brentwood"}),a.jsx(A,{to:"/garage-door-repair-san-dimas",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"San Dimas"}),a.jsx(A,{to:"/garage-door-repair-santa-barbara",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Santa Barbara"}),a.jsx(A,{to:"/service-areas/san-diego-garage-door-repair",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"San Diego, CA"})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-heading font-bold text-secondary-foreground mb-4",children:"Quick Links"}),a.jsxs("div",{className:"flex flex-col gap-2 text-sm",children:[a.jsx(A,{to:"/",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Home"}),a.jsx(A,{to:"/about",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"About Us"}),a.jsx(A,{to:"/gallery",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Gallery"}),a.jsx(A,{to:"/blog",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Blog"}),a.jsx(A,{to:"/faq",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"FAQ"}),a.jsx(A,{to:"/contact",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Contact"})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-heading font-bold text-secondary-foreground mb-4",children:"Legal"}),a.jsxs("div",{className:"flex flex-col gap-2 text-sm",children:[a.jsx(A,{to:"/privacy-policy",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Privacy Policy"}),a.jsx(A,{to:"/terms-and-conditions",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Terms & Conditions"}),a.jsx(A,{to:"/disclaimer",className:"text-secondary-foreground/80 hover:text-primary transition-colors",children:"Disclaimer"})]})]})]})}),a.jsx("div",{className:"border-t border-secondary-foreground/10",children:a.jsx("div",{className:"container mx-auto px-4 py-4",children:a.jsxs("p",{className:"text-secondary-foreground/60 text-sm text-center",children:["© ",new Date().getFullYear()," Professional Garage Door Services, LLC. All rights reserved. CSLB License"," ",a.jsx("a",{href:Ly,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#1117899"})]})})})]}),sr=({phoneHref:e="+18882854021"})=>a.jsx("a",{href:`tel:${e}`,className:"fixed bottom-6 right-6 z-50 lg:hidden flex items-center justify-center w-14 h-14 bg-primary hover:bg-primary/90 rounded-full shadow-lg hover:shadow-xl transition-all duration-300 animate-pulse hover:animate-none","aria-label":"Call Professional Garage Door Services",children:a.jsx(et,{className:"w-6 h-6 text-primary-foreground"})}),Da="https://www.professionalgaragedoorservices.com",pR=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Professional Garage Door Services | Installation & Repair"}),a.jsx("meta",{name:"description",content:"Expert garage door installation, repair & maintenance. 24/7 emergency service. Licensed & insured. CSLB #1117899. Call (213) 286-1747 (local) or (888) 285-4021 (toll-free)."}),a.jsx("link",{rel:"canonical",href:Da}),a.jsx("meta",{property:"og:title",content:"Professional Garage Door Services | Expert Installation & Repair"}),a.jsx("meta",{property:"og:description",content:"Expert garage door installation, repair & maintenance. 24/7 emergency service available. Call for free quote."}),a.jsx("meta",{property:"og:url",content:Da}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"LocalBusiness",name:"Professional Garage Door Services",legalName:"Professional Garage Door Services, LLC",description:"Expert garage door installation, repair & maintenance services. Licensed (CSLB #1117899) and insured.",url:Da,telephone:["(213) 286-1747","(888) 285-4
300021"],email:"[email protected]",address:{"@type":"PostalAddress",streetAddress:"5665 Wilbur Ave",addressLocality:"Tarzana",addressRegion:"CA",postalCode:"91356",addressCountry:"US"},geo:{"@type":"GeoCoordinates",latitude:"34.1689",longitude:"-118.5467"},aggregateRating:{"@type":"AggregateRating",ratingValue:va,reviewCount:String(ya)},openingHoursSpecification:{"@type":"OpeningHoursSpecification",dayOfWeek:["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],opens:"00:00",closes:"23:59"},priceRange:"$$",image:`${Da}/og-image.jpg`,sameAs:["https://www.facebook.com/profile.php?id=61555141026339","https://www.instagram.com/professionalgaragedoorsusa","https://www.bbb.org/us/ca/tarzana/profile/garage-doors/professional-garage-door-services-1216-1000024888",zp,"https://www.google.com/maps/place/?q=place_id:ChIJS-DCwB5csAoRhurX8YO3OHM"]})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"Organization",name:"Professional Garage Door Services",legalName:"Professional Garage Door Services, LLC",url:Da,telephone:["(213) 286-1747","(888) 285-4
300021"],email:"[email protected]",address:{"@type":"PostalAddress",streetAddress:"5665 Wilbur Ave",addressLocality:"Tarzana",addressRegion:"CA",postalCode:"91356",addressCountry:"US"},contactPoint:[{"@type":"ContactPoint",telephone:"(213) 286-1747",contactType:"customer service",areaServed:"US-CA",availableLanguage:"English"},{"@type":"ContactPoint",telephone:"(888) 285-4021",contactType:"customer service",availableLanguage:"English",hoursAvailable:{"@type":"OpeningHoursSpecification",dayOfWeek:["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],opens:"00:00",closes:"23:59"}}]})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"Service",serviceType:"Garage Door Services",provider:{"@type":"LocalBusiness",name:"Professional Garage Door Services"},hasOfferCatalog:{"@type":"OfferCatalog",name:"Garage Door Services",itemListElement:[{"@type":"Offer",itemOffered:{"@type":"Service",name:"Garage Door Installation"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Garage Door Repair"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Spring Replacement"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Opener Installation"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Preventive Maintenance"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Emergency Garage Door Repair"}}]}})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Da}]})})]}),a.jsx(de,{}),a.jsxs("main",{children:[a.jsx($k,{}),a.jsx(Gk,{}),a.jsx(GA,{}),a.jsx("section",{className:"bg-primary text-primary-foreground py-10",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-4",children:"Call Professional Garage Door Services Today"}),a.jsx("p",{className:"mb-6 text-lg opacity-95",children:"Licensed & insured. CSLB #1117899. 24/7 emergency service available."}),a.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-center gap-4 md:gap-10",children:[a.jsxs("div",{className:"flex flex-col items-center",children:[a.jsx("span",{className:"text-sm opacity-90 uppercase tracking-wide",children:"Local"}),a.jsx("a",{href:"tel:+12132861747",className:"text-2xl md:text-3xl font-bold underline-offset-4 hover:underline",children:"(213) 286-1747"})]}),a.jsx("div",{className:"hidden md:block h-10 w-px bg-primary-foreground/30"}),a.jsxs("div",{className:"flex flex-col items-center",children:[a.jsx("span",{className:"text-sm opacity-90 uppercase tracking-wide",children:"Toll-Free"}),a.jsx("a",{href:"tel:+18882854021",className:"text-2xl md:text-3xl font-bold underline-offset-4 hover:underline",children:"(888) 285-4021"})]})]})]})}),a.jsx(HA,{}),a.jsx(Hk,{}),a.jsx(Fk,{}),a.jsx(ld,{}),a.jsx(hR,{}),a.jsx(Vk,{})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),Hp="/assets/long-Raised-panel-garage-door-in-black-windows-462a5f-D-8-OjkQ.webp",Fp="/assets/IMG_0580-52c5f2-ChfLT5Rb.webp",Up="/assets/IMG_0610-2fc5fd-EMuV2G92.webp",Vp="/assets/IMG_0145-370676-kl7Siah1.webp",Yp="/assets/IMG_0851-2-442b77-7S3Cj9qr.webp",Kp="/assets/Long-raised-Panel-White.-Windows-No-inserts--066b3f-CCH-BadM.webp",Jp="/assets/IMG_0140-7d9af1-DVR-4NKb.webp",Qp="/assets/IMG_0622-dc80ce-Bux9Yjrh.webp",Xp="/assets/Full-View-Black-Frame-Black-Laminate-Glass-f10298-BYzmk2WT.webp",Zp="/assets/IMG_0865-12f18b-Kd6M81uW.webp",ef="/assets/www.axenia-haritonova.com-72-Medium-172a01-CtJw-Hcu.webp",Wy=[{id:"104",title:"Why Tarzana's July Heat Waves Are Warping Garage Door Panels (And Jamming Tracks)",excerpt:"When temperatures hit 100+ in the Valley, metal panels and tracks expand unevenly, causing doors to bind, scrape, or stop closing right when you need them most.",category:"Repair",date:"July 7, 2025",readTime:"7 min read",slug:"garage-door-heat-warping-tarzana",image:Hp},{id:"106",title:"Belt Drive vs. Chain Drive vs. Screw Drive: Which Garage Door Opener Is Right for You?",excerpt:"A straightforward breakdown of the three main opener drive types — noise, price, and maintenance compared — so you can pick the right fit.",category:"Installation",date:"March 10, 2025",readTime:"6 min read",slug:"belt-chain-screw-drive-openers",image:ef},{id:"105",title:"Garage Door Opener Sensor Problems: Why Your Door Won't Close",excerpt:"Why your garage door reverses or won't 
300close — common safety sensor problems, quick fixes, and when to call a professional.",category:"Repair",date:"March 3, 2025",readTime:"5 min read",slug:"garage-door-sensor-problems",image:Zp},{id:"104",title:"Noisy Garage Door? Here's What Every Sound Is Telling You",excerpt:"Grinding, squeaking, rattling, banging — what each garage door noise means, quick fixes, and when it's time to call a professional.",category:"Maintenance",date:"February 5, 2025",readTime:"6 min read",slug:"noisy-garage-door-sounds-explained-tarzana",image:Fp},{id:"103",title:"Torsion vs. Extension Springs: Which One Does Your Tarzana Garage Door Have?",excerpt:"How to tell which spring type your garage door uses, why it matters when one breaks, and which holds up better to Tarzana's climate.",category:"Repair",date:"January 22, 2025",readTime:"6 min read",slug:"torsion-vs-extension-springs-tarzana",image:Up},{id:"102",title:"How Much Does Garage Door Repair Cost in Tarzana? (2025 Price Guide)",excerpt:"Real price ranges for springs, openers, cables, panels, and more, plus what actually drives the cost up or down.",category:"Repair",date:"January 8, 2025",readTime:"7 min read",slug:"garage-door-repair-cost-tarzana",image:Vp},{id:"101",title:"Garage Door Spring Replacement in Tarzana: What Homeowners Need to Know",excerpt:"Warning signs of a failing spring, why DIY replacement is dangerous, and what to expect from a professional repair.",category:"Repair",date:"December 18, 2024",readTime:"6 min read",slug:"garage-door-spring-replacement-tarzana",image:Yp},{id:"100",title:"Garage Door Insulation 101: How to Save Energy and Money Year-Round",excerpt:"Discover why garage door insulation matters, the different types available, and simple upgrades that can lower your energy bills.",category:"Energy Efficiency",date:"December 15, 2024",readTime:"7 min read",slug:"garage-door-insulation-guide",image:Kp},{id:"4",title:"Garage Door Safety Tips Every Homeowner Should Know",excerpt:"Essential safety practices to protect your family and ensure your garage door operates safely.",category:"Safety",date:"December 2, 2024",readTime:"4 min read",slug:"garage-door-safety-tips",image:Jp},{id:"5",title:"How to Extend the Life of Your Garage Door",excerpt:"Simple maintenance tips and best practices to maximize the lifespan of your garage door system.",category:"Maintenance",date:"November 28, 2024",readTime:"6 min read",slug:"extend-garage-door-life",image:Qp},{id:"6",title:"Commercial vs Residential Garage Doors: Key Differences",excerpt:"Understanding the unique requirements and specifications for commercial garage door installations.",category:"Installation",date:"November 25, 2024",readTime:"8 min read",slug:"commercial-vs-residential",image:Xp}],Sr=[Wy[0],...Uk,...Wy.slice(1)],fR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Blog | Expert Tips & Guides | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Read expert garage door tips, maintenance guides, and industry insights. Learn how to maintain, repair, and choose the right garage door for your home."}),a.jsx("link",{rel:"canonical",href:"https://www.professionalgaragedoorservices.com/blog"})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-32 pb-24",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("header",{className:"max-w-3xl mx-auto text-center mb-16",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Our Blog"}),a.jsx("h1",{className:"font-heading text-4xl md:text-5xl lg:text-6xl text-foreground mb-6",children:"Expert Tips & Industry Insights"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"Stay informed with the latest garage door tips, maintenance guides, and industry news from our expert team."})]}),a.jsx("div",{className:"mb-16",children:a.jsx("article",{className:"group bg-card rounded-2xl overflow-hidden shadow-card hover:shadow-xl transition-all duration-500 border border-border",children:a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2",children:[a.jsxs("div",{className:"h-64 lg:h-full relative overflow-hidden",children:[a.jsx("img",{src:Sr[0].image,alt:Sr[0].title,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105",loading:"eager"}),a.jsx("div",{className:"absolute top-4 left-4",children:a.jsx("span",{className:"inline-block bg-primary text-primary-foreground text-xs font-bold uppercase tracking-wider px-3 py-1 rounded-full",children:"Featured"})})]}),a.jsxs("div",{className:"p-8 lg:p-12 flex flex-col justify-center",children:[a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-4",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-10",children:Sr[0].date})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),Sr[0].readTime]})]}),a.jsx("span",{className:"text-primary font-semibold text-sm uppercase tracking-wide mb-3",children:Sr[0].category}),a.jsx("h2",{className:"font-heading text-2xl lg:text-3xl text-foreground mb-4 group-hover:text-primary transition-colors duration-300",children:Sr[0].title}),a.jsx("p",{className:"text-muted-foreground mb-6",children:Sr[0].excerpt}),a.jsxs(A,{to:`/blog/${Sr[0].slug}`,className:"inline-flex items-center text-primary font-semibold group-hover:gap-3 gap-2 transition-all duration-300",children:["Read Full Article",a.jsx(la,{className:"w-4 h-4"})]})]})]})})}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:Sr.
300slice(1).map(e=>a.jsxs("article",{className:"group bg-card rounded-2xl overflow-hidden shadow-card hover:shadow-xl transition-all duration-500 hover:-translate-y-2 border border-border",children:[a.jsxs("div",{className:"h-48 relative overflow-hidden",children:[a.jsx("img",{src:e.image,alt:e.title,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-110",loading:"lazy"}),a.jsx("div",{className:"absolute top-4 left-4",children:a.jsx("span",{className:"inline-block bg-primary text-primary-foreground text-xs font-bold uppercase tracking-wider px-3 py-1 rounded-full",children:e.category})})]}),a.jsxs("div",{className:"p-6",children:[a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-4",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{children:e.date})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),e.readTime]})]}),a.jsx("h3",{className:"font-heading text-xl text-foreground mb-3 group-hover:text-primary transition-colors duration-300",children:e.title}),a.jsx("p",{className:"text-muted-foreground mb-6 line-clamp-2",children:e.excerpt}),a.jsxs(A,{to:`/blog/${e.slug}`,className:"inline-flex items-center text-primary font-semibold group-hover:gap-3 gap-2 transition-all duration-300",children:["Read Article",a.jsx(la,{className:"w-4 h-4"})]})]})]},e.id))}),a.jsxs("nav",{className:"flex justify-center items-center gap-4 mt-16","aria-label":"Blog pagination",children:[a.jsx("button",{className:"w-12 h-12 rounded-full border-2 border-border flex items-center justify-center hover:border-primary hover:text-primary transition-colors disabled:opacity-50",disabled:!0,"aria-label":"Previous page",children:a.jsx(Fe,{className:"w-5 h-5"})}),a.jsx("span",{className:"font-semibold text-foreground",children:"Page 1 of 1"}),a.jsx("button",{className:"w-12 h-12 rounded-full border-2 border-border flex items-center justify-center hover:border-primary hover:text-primary transition-colors disabled:opacity-50",disabled:!0,"aria-label":"Next page",children:a.jsx(la,{className:"w-5 h-5"})})]})]})}),a.jsx(ue,{})]}),gR="/assets/tech-maintenance-CKZu2jhC.jpg",yR="/assets/work-1-CrdNIYeG.jpg",cd="/assets/work-2-JIpgVxxT.jpg",Yk="/assets/work-3-fWnyYlDH.jpg",ca="/assets/torsion-springs-0N6yJEac.jpg",vR="/assets/after-5-DduWIcVZ.jpg",wR="/assets/after-6-CuzpnqkA.jpg",Sc="/assets/damaged-door-BFUVR5Ql.jpg",xR={"signs-garage-door-needs-repair":{title:"5 Signs Your Garage Door Needs Professional Repair",category:"Maintenance",date:"December 10, 2024",readTime:"5 min read",image:gR,metaDescription:"Learn the 5 critical warning signs that indicate your garage door needs professional repair. Protect your home and family with timely maintenance.",content:["Your garage door is one of the most frequently used entry points in your home, opening and closing thousands of times each year. Like any mechanical system, it requires regular maintenance and occasional repairs to function safely and efficiently.","Here are five critical warning signs that indicate your garage door needs professional attention:","**1. Unusual Noises**: If your garage door starts making grinding, squeaking, or rattling sounds, it could indicate worn springs, loose hardware, or problems with the opener. These sounds should never be ignored as they often precede more serious failures.","**2. Slow or Uneven Movement**: A garage door should move smoothly along its tracks. If you notice hesitation, jerky movements, or one side moving faster than the other, there may be issues with the springs, cables, or track alignment.","**3. Visible Damage**: Dents, cracks, or warping in the door panels not only affect curb appeal but can compromise the structural integrity of the door. Damaged panels may not seal properly, reducing energy efficiency and security.","**4. Door Won't Open or Close Completely**: This could be caused by sensor misalignment, track obstructions, spring issues, or opener malfunctions. A door that won't fully close poses a serious security risk.","**5. High Energy Bills**: If you've noticed an increase in heating or cooling costs, your garage door's weatherstripping may be worn or the door may not be sealing properly. Professional inspection can identify and resolve insulation issues.","Don't wait for a complete failure before seeking help. Regular inspections by certified technicians can identify potential problems early, saving you money and preventing inconvenient breakdowns. Contact Professional Garage Door Services for a thorough evaluation of your garage door system."]}
300,"choosing-right-garage-door":{title:"Choosing the Right Garage Door for Your Home",category:"Installation",date:"December 8, 2024",readTime:"7 min read",image:yR,metaDescription:"Complete guide to choosing the perfect garage door. Compare materials, styles, insulation options, and smart features for your home.",content:["Selecting the perfect garage door is a significant decision that affects your home's curb appeal, energy efficiency, and security. With numerous styles, materials, and features available, understanding your options is crucial.","**Material Options**","**Steel**: The most popular choice due to its durability, low maintenance, and affordability. Modern steel doors come in various finishes and can mimic the look of wood.","**Wood**: Offers natural beauty and can be customized to match any architectural style. Requires more maintenance but provides excellent insulation when properly constructed.","**Aluminum**: Lightweight and resistant to rust, making it ideal for coastal areas. Often used in contemporary designs with glass panels.","**Fiberglass**: Resistant to dents and won't rust or warp. Great for humid climates but may become brittle in extreme cold.","**Style Considerations**","Your garage door should complement your home's architecture. Traditional homes often look best with raised panel or carriage house styles, while modern homes may suit contemporary flush panel designs.","**Insulation Matters**","If your garage is attached to your home or used as a workspace, consider insulated doors. R-value ratings indicate insulation effectiveness – higher numbers mean better insulation.","**Smart Features**","Today's garage doors can integrate with home automation systems, offering smartphone control, camera integration, and battery backup systems.","Contact our team for a free consultation to find the perfect garage door for your home."]},"smart-garage-door-openers":{title:"Smart Garage Door Openers: Features & Benefits",category:"Technology",date:"December 5, 2024",readTime:"6 min read",image:cd,metaDescription:"Discover smart garage door opener features including smartphone control, voice activation, and security benefits. Expert installation available.",content:["Smart garage door technology has revolutionized how homeowners interact with and monitor their garages. These advanced systems offer convenience, security, and peace of mind that traditional openers simply can't match.","**Key Features of Smart Openers**","**Smartphone Control**: Open, close, and monitor your garage door from anywhere using your smartphone. Never wonder if you left the door open again.","**Real-Time Alerts**: Receive notifications when your door opens or closes, helping you track family members' arrivals or detect unauthorized access.","**Voice Control**: Integration with Amazon Alexa, Google Assistant, and Apple HomeKit allows hands-free operation.","**Scheduling**: Set your door to automatically close at certain times, ensuring it's never accidentally left open overnight.","**Guest Access**: Grant temporary access to visitors, delivery drivers, or service providers without sharing physical keys.","**Security Benefits**","Modern smart openers use rolling code technology, which generates a new code each time the door operates, preventing code theft. Many also include built-in cameras for visual verification.","**Installation Considerations**","Most smart openers require Wi-Fi connectivity and a compatible smartphone. Some models can be retrofitted to existing openers, while others replace the entire unit.","Our technicians can help you choose and install the perfect smart opener for your needs."]},"garage-door-safety-tips":{title:"Garage Door Safety Tips Every Homeowner Should Know",category:"Safety",date:"December 2, 2024",readTime:"4 min read",image:ca,metaDescription:"Essential garage door safety tips for homeowners. Learn how to protect your family with proper maintenance and safety feature testing.",content:["Garage doors are among the largest and heaviest moving objects in your home. Understanding and practicing safety measures is essential for protecting your family.","**Essential Safety Tips**","**Never Walk Under a Moving Door**: Wait until the door is fully open or closed before passing underneath.","**Keep Children Away**: Educate children that garage doors are not toys. Keep remotes out of reach and never let children play under or near the door.","**Test Safety Features Monthly**: Modern garage doors have auto-reverse mechanisms and photo-eye sensors. Test these regularly by placing an object in the door's path.","**Visual Inspection**: Regularly check springs, cables, rollers, and other hardware for signs of wear. Never attempt to repair springs yourself – they're under extreme tension.","**Professional Maintenance**: Schedule annual inspections with certified technicians to ensure all c
300omponents are functioning properly.","**Emergency Release**: Know how to use your door's emergency release in case of power outage or malfunction.","Contact us for a comprehensive safety inspection of your garage door system."]},"extend-garage-door-life":{title:"How to Extend the Life of Your Garage Door",category:"Maintenance",date:"November 28, 2024",readTime:"6 min read",image:vR,metaDescription:"Expert tips to extend your garage door lifespan to 30+ years. Monthly, quarterly, and annual maintenance checklist included.",content:["A well-maintained garage door can last 15-30 years. Simple regular maintenance can significantly extend your door's lifespan and prevent costly repairs.","**Monthly Maintenance Tasks**","**Visual Inspection**: Look for signs of wear, damage, or misalignment in springs, cables, rollers, pulleys, and other hardware.","**Listen for Sounds**: Operate the door and listen for grinding, scraping, or squeaking sounds that could indicate problems.","**Test Balance**: Disconnect the opener and manually lift the door halfway. A properly balanced door should stay in place. If it falls, the springs need adjustment.","**Quarterly Maintenance**","**Lubrication**: Apply garage door lubricant to all moving parts including hinges, rollers, springs, and tracks.","**Clean Tracks**: Remove debris from tracks with a damp cloth. Avoid using lubricant on tracks as it can cause the door to slip.","**Tighten Hardware**: Vibration can loosen nuts and bolts over time. Check and tighten all hardware.","**Annual Tasks**","**Professional Inspection**: Have a certified technician perform a comprehensive inspection and tune-up.","**Weatherstripping**: Replace worn weatherstripping to maintain energy efficiency and keep out pests.","Schedule your annual maintenance appointment with Professional Garage Door Services today."]},"commercial-vs-residential":{title:"Commercial vs Residential Garage Doors: Key Differences",category:"Installation",date:"November 25, 2024",readTime:"8 min read",image:wR,metaDescription:"Compare commercial and residential garage doors. Understand size, durability, safety, and maintenance differences for your project.",content:["While both commercial and residential garage doors serve the same basic function, they differ significantly in design, construction, and operational requirements.","**Size and Scale**","Commercial doors are typically larger to accommodate vehicles like delivery trucks, forklifts, or fire engines. They may span 30 feet or more, while residential doors rarely exceed 18 feet.","**Construction and Durability**","Commercial doors are built with heavier gauge steel and reinforced components to withstand frequent daily use. They're designed for potentially thousands of cycles per week versus a few cycles per day for residential doors.","**Safety Features**","Commercial installations require additional safety measures including advanced sensor systems, warning lights, and sometimes emergency stop buttons. Compliance with OSHA regulations is mandatory.","**Security Requirements**","Commercial doors often feature advanced locking mechanisms, reinforced panels, and may include fire-rated options for specific applications.","**Operation Speed**","High-speed commercial doors can open and close much faster than residential units, minimizing heat loss in climate-controlled environments and improving operational efficiency.","**Maintenance Needs**","Given their heavier usage, commercial doors require more frequent professional maintenance to ensure reliable operation and extended lifespan.","Whether you need residential or commercial garage door services, our team has the expertise to meet your requirements."]},"garage-door-spring-replacement-tarzana":{title:"Garage Door Spring Replacement in Tarzana: What Homeowners Need to Know",category:"Repair",date:"December 18, 2024",readTime:"6 min read",image:ca,metaDescription:"Everything Tarzana homeowners need to know about garage door spring replacement: warning signs, why DIY is dangerous, and what to expect from a professional job.",content:["If your garage door suddenly feels heavy, won't stay open, or makes a loud bang followed by it refusing to move — you're likely dealing with a broken spring. Garage door springs are the unsung workhorses of your system, bearing the full weight of the door, often 150-400 lbs, thousands of times a year. Here in Tarzana, the heat and dust from our valley summers can accelerate wear on these components faster than homeowners expect.","Springs typically last 7-12 years or 10,000-15,000 cycles, but that lifespan shrinks with heavy daily use, lack of lubrication, or age. There are two main types — torsion springs, mounted on a bar above the door, and extension springs, running along the upper tracks — and each fails differently, but always with warning signs first.","**Warning Signs of a Failing Spring**","**A Loud Bang**: A sudden, sharp bang from the garage is almost always a spring snapping. If this happens, don't try to open the door — call for service r
300ight away.","**The Door Feels Heavy**: If your automatic opener is straining, slowing down, or your door feels unusually heavy when lifted manually, the spring is likely losing tension.","**Visible Gaps or Stretching**: A torsion spring with a visible gap in its coils, or an extension spring that looks stretched out, has failed or is about to.","**Door Won't Stay Open**: A balanced door should stay in place when opened halfway. If it slams shut or drifts down on its own, the spring can no longer support the door's weight.","**Crooked Door**: If one side of the door looks higher than the other, one of a pair of torsion springs may have failed while the other is still holding.","**Why DIY Spring Replacement Is Dangerous**","Garage door springs store an enormous amount of tension — enough to cause serious injury or worse if handled incorrectly. Every year, emergency rooms treat homeowners for lacerations, broken bones, and eye injuries from spring-related accidents. Winding and unwinding torsion springs requires special tools and know-how; a slip can send a spring or winding bar flying with real force.","On top of the physical risk, getting the tension wrong leads to an unbalanced door that strains your opener, wears out cables and rollers faster, and can even come off its track. This is one repair we always recommend leaving to a trained technician.","**What to Expect From a Professional Replacement**","A professional visit typically starts with an inspection to confirm which spring type you have and whether one or both need replacing — we generally recommend replacing springs in pairs, even if only one has failed, since the other is usually close behind.","Most standard spring replacements are completed in under an hour once the technician is on-site. Pricing depends on spring type, door size and weight, and whether one or tw
300o springs need replacing, but we'll always give you a clear, upfront quote before any work begins.","We also use high-cycle springs rated for longer life, which is especially worthwhile in Tarzana's heat, so you get more years of reliable service before needing another replacement.","**Don't Wait for a Full Breakdown**","A garage door with a struggling spring doesn't fix itself, and continuing to use it can damage your opener or cause the door to fall unexpectedly. If you're noticing any of the warning signs above, give us a call for a fast, safe inspection and repair."]},"garage-door-repair-cost-tarzana":{title:"How Much Does Garage Door Repair Cost in Tarzana? (2025 Price Guide)",category:"Repair",date:"January 8, 2025",readTime:"7 min read",image:Sc,metaDescription:"See real 2025 price ranges for garage door repair in Tarzana, CA — springs, openers, cables, panels, and more — plus what actually drives the cost.",content:["Wondering what garage door repair actually costs before you call someone? You're not alone — it's one of the most common questions we get from Tarzana homeowners. The honest answer: it depends on what's broken. A simple sensor realignment might run under $100, while a full opener replacement can run several hundred dollars. Below, we break down real price ranges for the most common repairs so you know roughly what to expect before a technician even arrives.","Every job is a little different based on your specific door, but these ranges reflect what we typically see across Tarzana and the surrounding San Fernando Valley.","**Common Garage Door Repair Costs**","**Spring Replacement**: This is the most common major repair, typically running $150-$350 depending on whether you need one or two springs and the size/weight of your door. Heavier doors and custom sizes cost more.","**Cable Replacement**: Frayed or snapped cables usually cost $100-$200 to replace, often paired with a spring service since they wear at a similar rate.","**Opener Repair or Replacement**: Repairing an existing opener (like a circuit board or motor issue) often runs $100-$250. A full opener replacement, including a new belt or chain-drive unit, typically falls between $300-$600 installed.","**Roller Replacement**: Worn or broken rollers are a relatively affordable fix, usually $80-$200 depending on how many need replacing and whether you choose standard or upgraded nylon rollers.","**Sensor Realignment or Replacement**: If your door won't close because the safety sensors are misaligned or faulty, this is often one of the cheaper fixes — usually $75-$150.","**Panel Replacement**: A single damaged panel (from a dent, crack, or collision) generally costs $250-$600 to replace, depending on the door's material and whether the panel needs to be color-matched.","**Track Realignment**: A door that's come off track is a common emergency call. Straightening or replacing bent track sections typically runs $100-$250.","**What Affects the Price**","**Door Size and Weight**: Larger, heavier doors (like double-car garages) need stronger springs and hardware, which costs more than a standard single-car door.","**Part Quality**: We always offer high-cycle, longer-lasting parts as an option. They cost a bit more upfront but usually save money over the life of the door by lasting years longer than basic hardware.","**Opener Brand and Age**: Older or discontinued opener models sometimes require a full replacement rather than a repair, since matching parts can be hard to find.","**Same-Day or Emergency Service**: Most routine repairs are scheduled within a day or two at standard rates. True after-hours emergencies, like a door stuck open overnight, may carry a modest additional fee for immediate dispatch.",'**Why "Cheap" Quotes Can Cost You More**',"It's tempting to go with whoever quotes the lowest number over the phone, but garage door pricing without an actual inspection is often a guess — or a lowball number designed to get a technician in the door, with the real price revealed once they're on-site. Watch out for quotes that seem far below the ranges above; they often mean lower-grade parts, an incomplete repair, or surprise add-on charges once work begins.","A trustworthy quote should be based on a look at your actual door, not a generic number pulled from a phone script. It should also be clear about what's included, whether that's the parts, labor, and any warranty on the work.","**Getting an Accurate Quote**","The best way to know y
300our real cost is a quick, free inspection. Our technicians diagnose the issue on-site and give you an upfront, itemized quote before any work begins — no surprises, no pressure. We also stand behind our repairs with a warranty, so you're covered if anything needs a follow-up visit.","If your garage door is acting up, give us a call. We'll give you a straight answer on what it'll cost to fix it right."]},"torsion-vs-extension-springs-tarzana":{title:"Torsion vs. Extension Springs: Which One Does Your Tarzana Garage Door Have?",category:"Repair",date:"January 22, 2025",readTime:"6 min read",image:ca,metaDescription:"Learn the difference between torsion and extension garage door springs, how to tell which one you have, and why it matters when one breaks — especially in Tarzana's heat.",content:["Not all garage door springs are built the same, and knowing which type yours has can save you time and money when something goes wrong. Most homes use either torsion springs, mounted on a bar directly above the closed door, or extension springs, running along the upper tracks on either side. Telling them apart takes less than a minute, and it matters because the two types fail differently, cost differently to replace, and hold up differently to Tarzana's hot, dry summers.","**What Is a Torsion Spring?**","A torsion spring sits on a metal shaft centered above the garage door opening, usually with a cable drum on each end. Instead of stretching, it works by twisting — winding up tightly to store energy, then slowly unwinding to lift the door with controlled force. Most newer homes and heavier, insulated doors use torsion springs because they offer smoother operation, quieter movement, and generally better durability over time.","**What Is an Extension Spring?**","Extension springs run horizontally along the upper track on both the left and right sides of the door. They stretch and contract as the door moves, pulling the door open with the help of pulleys. This style is more common in older homes and lighter, single-layer doors. It's a simpler, less expensive setup, but it comes with a bit more visible wear and a slightly higher chance of the spring or a pulley cable snapping over time.","**How to Tell Which One You Have**","Open your garage and look straight up above the closed door. If you see one or two tightly wound springs on a bar directly overhead, that's torsion. If instead you see long springs stretched out along the tracks on the upper left and right walls, running parallel to the ceiling, that's extension. Most Tarzana homes built or remodeled in the last 20 years have torsion springs, but plenty of older properties still run on the extension setup.","**Why It Matters When One Breaks**","Torsion springs typically fail with a loud bang and the door becomes too heavy to lift, often sagging unevenly if it's a two-spring system with only one broken. Replacement requires special winding bars and precise tension settings, which is why this is never a DIY job. Extension springs, on the other hand, tend to fail with a visible snap or stretch, and a broken one can cause the door to fall unevenly or, in rare cases without safety cables installed, allow a spring to release with force. Either way, the fix isn't just swapping the broken part — it's making sure the whole system is balanced and safe again.","The type you have also affects repair time and cost. Torsion spring jobs are typically quicker for an experienced technician since the springs are centrally mounted, while extension spring systems sometimes need extra attention to the pulleys, cables, and safety cables running alongside them.","**Which Type Lasts Longer in Tarzana's Climate?**","Both spring types are rated for a similar number of open-close cycles, generally 10,000-15,000, but torsion springs tend to hold their tension more consistently through our valley's hot summers. Extension springs, with more exposed surface area and moving parts, can see slightly faster wear from heat, dust, and dryness common in Tarzana. If you're replacing extension springs, upgrading to a torsion system is worth asking about, especially if your door sees daily use.","**The Bottom Line**","Knowing which spring type you have won't fix a broken one, but it helps you understand what a technician is quoting and why. Whether you've got torsion or extension springs, a snapped or failing spring should always be handled by a professional — the tension involved makes this one of the few garage door repairs where DIY simply isn't worth the risk.","If you're not sure which type you have, or you're noticing any signs of wear, give us a call. We'll take a look, tell you exactly what's going on, and get it fixed safely and quickly."]},"noisy-garage-door-sounds-explained-tarzana":{title:"Noisy Garage Door? Here's What Every Sound Is Telling You",category:"Maintenance",date:"February 5, 2025",readTime:"6 min read",image:Yk,metaDescription:"A Tarzana homeowner's guide to garage door noises — what grinding, squeaking, rattling, and banging sounds mean, quick fixes, and when to call a pro.",content:["A garage door doesn't have to be silent, but it also shouldn't sound like it's about to fall apart. The good news is that the type of noise your door makes is actually one of the best diagnostic clues you have. Grinding, squeaking, rattling, and banging all point to different problems, some harmless and some urgent. In Tarzana's dry heat and dust, squeaks and grinding tend to show up faster than they would in cooler, more humid climates, since lubricant dries out quicker and hardware collects grit more easily.","Here's a breakdown of the most common garage door sounds, what's usually causing them, and what to do about each one.","**Grinding or Scraping**","A grinding or metal-on-metal scraping sound as the door moves is often a sign of worn rollers, a track that's bent or out of alignment, or a motor gear inside the opener wearing down. If the noise is coming from along the tracks, check for visible dirt or debris first. If it persists after cleaning, the rollers or track likely need professional attention before they cause the door to jump the track entirely.","**Squeaking or Chirping**","High-pitched squeaking is usually the most benign noise on this list, typically caused by dry hinges, rollers, or springs that need lubrication. This is worth trying yourself: a silicone-based garage door lubricant applied to the hinges, rollers, and springs often quiets things down within a day. If the squeak continues after lubrication, a hinge or roller may be worn out and need replacing.","**Rattling**","Rattling, especially during opening or closing, usually points to loose hardware, such as nuts, bolts, or brackets that have vibrated loose over thousands of cycles. This is common on older doors and is usually a quick fix: a technician can tighten everything back down during a rout
300ine tune-up. Left unaddressed, loose hardware can eventually lead to bigger issues like a track pulling away from the wall.","**A Loud Bang or Pop**","This one is not a DIY situation. A sudden, sharp bang almost always means a spring has snapped. If this happens, don't attempt to open or close the door, and call for repair right away. A broken spring means the door has lost its main lifting support and can be dangerous to operate until it's fixed.","**Humming Without Movement**","If your opener hums or buzzes but the door doesn't move, this usually points to an opener motor issue, a disengaged trolley, or in some cases a failed capacitor inside the unit. This typically requires a technician to diagnose, since the fix ranges from a simple reset to a full opener repair.","**Clicking Before the Door Moves**","A clicking sound right as you press the remote, followed by the door not moving, often means the safety sensors are misaligned or blocked. Check that both sensors near the bottom of the tracks are clean, facing each other, and free of obstructions. If clicking continues after that check, the issue is likely with the opener's internal relay and worth a professional look.","**When to Call a Professional**","Squeaking and minor rattling are reasonable to troubleshoot yourself with basic lubrication and a check for loose hardware. But grinding, banging, humming without movement, or any noise paired with the door moving unevenly are signs of a bigger issue that shouldn't be pushed off. Continuing to run a door with these symptoms often turns a simple, affordable fix into a bigger repair down the line.","If your garage door has developed a new noise, give us a call and describe what you're hearing. In many cases we can get a good idea of what's going on before we even arrive, and get it fixed quickly and safely."]},"garage-door-heat-warping-tarzana":{title:"Why Tarzana's July Heat Waves Are Warping Garage Door Panels (And Jamming Tracks)",category:"Repair",date:"February 19, 2025",readTime:"6 min read",image:Sc,metaDescription:"Why 100+ degree heat waves in Tarzana and the San Fernando Valley cause garage doors to warp, bind, and stop closing — plus how to fix and prevent it.",content:["When the Valley hits triple digits in July, your garage door is taking a beating you can't see from the driveway. Metal expands when it heats up, and on a west-facing garage on a street like Wells Drive or Yolanda Ave, the outside skin of a steel door can run 30-40 degrees hotter than the framing and tracks tucked inside the cooler garage interior. That mismatch — one part of the door expanding while another stays put — is exactly what causes panels to bow, rollers to bind, and tracks to pinch, often on the single hottest afternoon of the week.","This isn't a rare fluke. It's one of the most common summer service calls we get from Tarzana, Reseda, and Encino homeowners once the mercury climbs past 100, and it tends to hit the same types of doors and homes every year.","**Why Uneven Heat Causes Binding, Not Just Discomfort**","A garage door is built from multiple sections hinged together, riding on rollers inside a metal track. Under direct sun, the exterior-facing steel skin absorbs heat fast and expands. The track, usually mounted against the garage's interior framing and shaded from direct sun, stays several degrees cooler and doesn't expand at the same rate. The result is a door that's ever so slightly larger than the track and hinge tolerances it's supposed to glide through. Multiply that across ten or more panel sections and hinge points, and you get rollers grinding against the edge of the track, sections that no longer sit perfectly flush, and a door that scrapes, sticks, or refuses to seat all the way down when it reaches the floor.","Non-insulated steel doors are the most vulnerable, since they have nothing separating the hot outer skin from the door's frame. Insulated doors with a polystyrene or polyurethane core handle heat far more evenly because the core acts as a buffer, which is one reason we see far fewer heat-binding calls from homes with insulated doors.","**Which Tarzana Homes See This the Most**","We see a clear pattern every summer. Garages facing west or south, which get slammed with direct afternoon sun through July and August, are the most common calls — especially along stretches near Ventura Blvd and the foothill-facing streets north of it, where garages get little to no shade. Homes with older, non-insulated steel doors installed before the mid-2000s are especially at risk, since manufacturing tolerances and insulation standards have improved a lot since then. Garages next to dark-colored driveways or block walls also run hotter, since radiant heat bounces back onto the door well after the sun has moved.","**Warning Signs Your Door Is Heat-Struggling**","**Scraping or Grinding on One Side**: If the door drags or scrapes against the track more on one side, especially in the afternoon versus the morning, heat expansion is a likely culprit.","**Door Won't Latch or Seal Fully**: If the bottom of the door won't sit flush on the floor by mid-afternoon but closes fine in the morning, panel expansion is pushing it slightly out of alignment.","**Opener Straining or Rever
300sing**: A smart opener that senses resistance may reverse or stop mid-cycle on hot days, mistaking the extra friction from a swollen panel for an obstruction.","**Visible Panel Bowing**: Look down the face of the door from the side. A slight outward bow in one or more panels under heat, especially on non-insulated doors, is a sign the metal is stressed.","**A Track That Looks Fine in the Morning but Binds by 3 PM**: This time-of-day pattern is one of the clearest signs you're dealing with thermal expansion rather than a mechanical fault.","**What You Can Check Yourself**","Before calling for service, it's worth a quick look: make sure the tracks are clean of dust and debris, which is common in the Valley's dry summers and can make binding worse. Check that mounting brackets haven't loosened, since a slightly loose track has less tolerance to absorb the day's expansion. If the door only sticks in the hottest part of the afternoon and runs fine again by evening or the next morning, that's a strong sign it's heat-related rather than a failing part.","**When to Call a Professional**","If the door is scraping badly enough to leave marks on the track or panel, if the opener is repeatedly reversing on hot days, or if a panel looks visibly bowed, it's time for a technician to take a look. Continuing to force a door through a heat bind can bend the track permanently, strip opener gears, or crack a stressed panel — turning a seasonal annoyance into a real repair bill. We adjust track tolerances, true up brackets, and in some cases recommend swapping to an insulated door section or full door to stop the problem from coming back every summer.","**Preventing It Next Heat Wave**","A few adjustments go a long way in Tarzana's climate. Slightly widening track tolerances during a summer tune-up gives panels room to expand without binding. Keeping tracks lubricated with a heat-stable, silicone-based lubricant (not standard grease, which can thin out and drip in high heat) helps rollers glide even when things swell. For homeowners replacing an older door, an insulated door is one of the best long-term fixes, since it dramatically reduces the temperature swing between the door's inner and outer surfaces.","If your garage door has started sticking, scraping, or refusing to close right as the temperature spikes, don't wait for it to get worse. Give us a call — we'll diagnose whether it's heat expansion, a worn part, or both, and get your door moving smoothly again before the next heat wave hits."]}},bR=()=>{const{slug:e}=Sp(),t=e?xR[e]:null;if(!t)return a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsx(ie,{children:a.jsx("title",{children:"Post Not Found | Professional Garage Door Services"})}),a.jsx(de,{}),a.jsx("main",{className:"pt-32 pb-24",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl text-foreground mb-6",children:"Post Not Found"}),a.jsx("p",{className:"text-muted-foreground mb-8",children:"The blog post you're looking for doesn't exist."}),a.jsx(A,{to:"/blog",children:a.jsxs(re,{children:[a.jsx(Fe,{className:"w-4 h-4 mr-2"}),"Back to Blog"]})})]})}),a.jsx(ue,{})]});const r=`https://www.professionalgaragedoorservices.com/blog/${e}`;return a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsxs("title",{children:[t.title," | Professional Garage Door Services"]}),a.jsx("meta",{name:"description",content:t.metaDescription}),a.jsx("link",{rel:"canonical",href:r}),a.jsx("meta",{property:"og:title",content:t.title}),a.jsx("meta",{property:"og:description",content:t.metaDescription}),a.jsx("meta",{property:"og:image",content:t.image}),a.jsx("meta",{property:"og:url",content:r}),a.jsx("meta",{property:"og:type",content:"article"})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-32 pb-24",children:a.jsx("article",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center text-primary font-semibold mb-8 hover:gap-3 gap-2 transition-all duration-300",children:[a.jsx(Fe,{className:"w-4 h-4"}),"Back to Blog"]}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-4",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{children:t.date})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),t.readTime]})]}),a.jsx("span",{className:"text-primary font-semibold text-sm uppercase tracking-wide mb-3 block",children:t.category}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-8",children:t.title}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10",children:a.jsx("img",{src:t.image,alt:t.title,className:"w-full h-auto",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none",children:t.content.map((n,o)=>{const s=n.split(/\*\*(.*?)\*\*/g);
300return a.jsx("p",{className:"text-foreground/90 leading-relaxed mb-6",children:s.map((i,l)=>l%2===1?a.jsx("strong",{children:i},l):i)},o)})}),a.jsxs("div",{className:"flex items-center gap-4 pt-8 border-t border-border mt-12",children:[a.jsxs("span",{className:"font-semibold text-foreground flex items-center gap-2",children:[a.jsx(WC,{className:"w-4 h-4"}),"Share:"]}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(r)}`,target:"_blank",rel:"noopener noreferrer",className:"w-10 h-10 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors","aria-label":"Share on Facebook",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(r)}&text=${encodeURIComponent(t.title)}`,target:"_blank",rel:"noopener noreferrer",className:"w-10 h-10 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors","aria-label":"Share on Twitter",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(r)}`,target:"_blank",rel:"noopener noreferrer",className:"w-10 h-10 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors","aria-label":"Share on LinkedIn",children:a.jsx(dt,{className:"w-4 h-4"})})]})]})})}),a.jsx(ue,{})]})},Bh="https://www.professionalgaragedoorservices.com",La=`${Bh}/blog/garage-door-insulation-guide`,kR=["If your garage sits under a bedroom, shares a wall with your living room, or just bakes in the sun all afternoon, an uninsulated garage door is probably costing you more than you realize. Insulation isn't just a comfort upgrade — it directly affects your energy bills, noise levels, and even how long your door's components last.","**Why Insulation Matters**","A garage door is one of the largest openings in your home's building envelope. Without insulation, heat pours in during summer and escapes during winter, forcing your HVAC system to work harder — especially if you have living space directly above or beside the garage. Insulated doors also run quieter and hold up better structurally, since the added rigidity helps resist dents and warping.","**Types of Garage Door Insulation**","**Polystyrene (EPS) panels**: Rigid foam boards inserted into the door's frame. This is an affordable option that offers a moderate R-value improvement and works well for garages that don't need heavy-duty performance.","**Polyurethane foam**: Injected between the door's steel layers, this foam expands to fill the entire cavity, bonding to the steel for extra strength and a significantly higher R-value than EPS. Most premium insulated doors use this method.","**Reflective/radiant barriers**: A thin foil layer that reflects radiant heat rather than absorbing it. Often paired with foam insulation for doors facing direct afternoon sun.","**Understanding R-Value**","R-value measures a material's resistance to heat flow — higher numbers mean better insulation. Standard non-insulated steel doors have essentially no meaningful R-value. Entry-level insulated doors typically start around R-6 to R-9, while premium polyurethane doors can reach R-17 or higher. For garages attached to living space, or used as a workshop, aim for at least R-12.","**Signs Your Garage Door Needs Better Insulation**","You'll usually notice a few tell-tale signs: a garage that feels noticeably hotter or colder than the rest of the house, higher energy bills without an obvious cause, a door that feels thin or flimsy when tapped, or noise from outside carrying through more than it should. Older steel doors, especially anything installed before the mid-2000s, are the most common candidates.","**Upgrading vs. Retrofitting**","Some door types can be retrofitted with insulation kits, which is a reasonable budget option for a door that's otherwise in good shape. But retrofits only go so far — they don't match the performance or durability of a door built with insulation from the start. If your door is older or already showing wear, a full insulated replacement is usually the better long-term investment.","**Simple Upgrades That Help Right Away**","Beyond the door itself, weatherstripping around the perimeter and along the bottom seal makes a real difference and is inexpensive to replace. Sealing gaps around windows or vents in the garage, and adding a threshold seal at the floor, both help keep conditioned air where it belongs.","**Getting It Right**","The right insulation choice depends on your climate, how the garage is used, and what's above or beside it. We can walk you through the tradeoffs between EPS and polyurethane options, help you pick an appropriate R-value, and make sure the new door is installed with a proper seal — insulation only works as well as the installation behind it.","If you're dealing with high energy bills, a noisy garage, or you're simply ready to upgrade to a better-built door, give us a call for a free estimate."],jR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Insulation 101: Save Energy & Money | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Discover why garage door insulation matters, the different types available, and simple upgrades that can lower your energy bills."}),a.jsx("link",{rel:"canonical",href:La}),a.jsx("meta",{property:"og:title",content:"Garage Door Insulation 101: How to Save Energy and Money Year-Round"}),a.jsx("meta",{property:"og:description",content:"Discover why garage door insulation matters, the different types available, and simple upgrades that can lower your energy bills."}),a.jsx("meta",{property:"og:url",content:La}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Bh},{"@type":"ListItem",position:2,name:"Blog",item:`${Bh}/blog`},{"@type":"ListItem",position:3,name:"Garage Door Insulation 101",item:La}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Energy Efficiency"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Garage Door Insulation 101: How to Save Energy and Money Year-Round"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-15",children:"December 15, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"7 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Kp,alt:"Insulated garage door installed by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:kR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(La)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(La)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(La)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Ready to Upgrade to an Insulated Garage Door?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Hh="https://www.professionalgaragedoorservices.com",Wa=`${Hh}/blog/signs-garage-door-needs-repair`,SR=["Your garage door is one of the most frequently used entry points in your home, opening and closing thousands of times each year. Like any mechanical system, it requires regular maintenance and occasional repairs to function safely and efficiently.","Here are five critical warning signs that indicate your garage door needs professional attention:","**1. Unusual Noises**: If your garage door starts making grinding, squeaking, or rattling sounds, it could indicate worn springs, loose hardware, or problems with the opener. These sounds should never be ignored as they often precede more serious failures.","**2. Slow or Uneven Movement**: A garage door should move smoothly along its tracks. If you notice hesitation, jerky movements, or one side moving faster than the other, there may be issues with the springs, cables, or track alignment.","**3. Visible Damage**: Dents, cracks, or warping in the door panels not only affect curb appeal but can compromise the structural integrity of the door. Damaged panels may not seal properly, reducing energy efficiency and security.","**4. Door Won't Open or Close Completely**: This could be caused by sensor misalignment, track obstructions, spring issues, or opener malfunctions. A door that won't fully close poses a serious security risk.","**5. High Energy Bills**: If you've noticed an increase in heating or cooling costs, your garage door's weatherstripping may be worn or the door may not be sealing properly. Professional inspection can identify and resolve insulation issues.","Don't wait for a complete failure before seeking help. Regular inspections by certified technicians can identify potential problems early, saving you money and preventing inconvenient breakdowns. Contact Professional Garage Door Services for a thorough evaluation of your garage door system."],NR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"5 Signs Your Garage Door Needs Professional Repair | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Learn the 5 critical warning signs that indicate your garage door needs professional repair. Protect your home and family with timely maintenance."}),a.jsx("link",{rel:"canonical",href:Wa}),a.jsx("meta",{property:"og:title",content:"5 Signs Your Garage Door Needs Professional Repair"}),a.jsx("meta",{property:"og:description",content:"Learn the 5 critical warning signs that indicate your garage door needs professional repair."}),a.jsx("meta",{property:"og:url",content:Wa}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Hh},{"@type":"ListItem",position:2,name:"Blog",item:`${Hh}/blog`},{"@type":"ListItem",position:3,name:"5 Signs Your Garage Door Needs Professional Repair",item:Wa}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Maintenance"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"5 Signs Your Garage Door Needs Professional Repair"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-10",children:"December 10, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"5 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:$p,alt:"Garage door repair by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:SR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Wa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Wa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Wa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Notice Any of These Signs?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation inspection from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Fh="https://www.professionalgaragedoorservices.com",Ma=`${Fh}/blog/choosing-right-garage-door`,CR=["Selecting the perfect garage door is a significant decision that affects your home's curb appeal, energy efficiency, and security. With numerous styles, materials, and features available, understanding your options is crucial.","**Material Options**","**Steel**: The most popular choice due to its durability, low maintenance, and affordability. Modern steel doors come in various finishes and can mimic the look of wood.","**Wood**: Offers natural beauty and can be customized to match any architectural style. Requires more maintenance but provides excellent insulation when properly constructed.","**Aluminum**: Lightweight and resistant to rust, making it ideal for coastal areas. Often used in contemporary designs with glass panels.","**Fiberglass**: Resistant to dents and won't rust or warp. Great for humid climates but may become brittle in extreme cold.","**Style Considerations**","Your garage door should complement your home's architecture. Traditional homes often look best with raised panel or carriage house styles, while modern homes may suit contemporary flush panel designs.","**Insulation Matters**","If your garage is attached to your home or used as a workspace, consider insulated doors. R-value ratings indicate insulation effectiveness – higher numbers mean better insulation.","**Smart Features**","Today's garage doors can integrate with home automation systems, offering smartphone control, camera integration, and battery backup systems.","Contact our team for a free consultation to find the perfect garage door for your home."],TR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Choosing the Right Garage Door for Your Home | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Complete guide to choosing the perfect garage door. Compare materials, styles, insulation options, and smart features for your home."}),a.jsx("link",{rel:"canonical",href:Ma}),a.jsx("meta",{property:"og:title",content:"Choosing the Right Garage Door for Your Home"}),a.jsx("meta",{property:"og:description",content:"Complete guide to choosing the perfect garage door. Compare materials, styles, insulation options, and smart features."}),a.jsx("meta",{property:"og:url",content:Ma}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Fh},{"@type":"ListItem",position:2,name:"Blog",item:`${Fh}/blog`},{"@type":"ListItem",position:3,name:"Choosing the Right Garage Door for Your Home",item:Ma}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Installation"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Choosing the Right Garage Door for Your Home"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-08",children:"December 8, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"7 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Gp,alt:"New garage door installation by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:CR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ma)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ma)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ma)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Ready to Choose Your New Garage Door?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation consultation from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Uh="https://www.professionalgaragedoorservices.com",qa=`${Uh}/blog/smart-garage-door-openers`,_R=["Smart garage door technology has revolutionized how homeowners interact with and monitor their garages. These advanced systems offer convenience, security, and peace of mind that traditional openers simply can't match.","**Key Features of Smart Openers**","**Smartphone Control**: Open, close, and monitor your garage door from anywhere using your smartphone. Never wonder if you left the door open again.","**Real-Time Alerts**: Receive notifications when your door opens or closes, helping you track family members' arrivals or detect unauthorized access.","**Voice Control**: Integration with Amazon Alexa, Google Assistant, and Apple HomeKit allows hands-free operation.","**Scheduling**: Set your door to automatically close at certain times, ensuring it's never accidentally left open overnight.","**Guest Access**: Grant temporary access to visitors, delivery drivers, or service providers without sharing physical keys.","**Security Benefits**","Modern smart openers use rolling code technology, which generates a new code each time the door operates, preventing code theft. Many also include built-in cameras for visual verification.","**Installation Considerations**","Most smart openers require Wi-Fi connectivity and a compatible smartphone. Some models can be retrofitted to existing openers, while others replace the entire unit.","Our technicians can help you choose and install the perfect smart opener for your needs."],ER=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Smart Garage Door Openers: Features & Benefits | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Discover smart garage door opener features including smartphone control, voice activation, and security benefits. Expert installation available."}),a.jsx("link",{rel:"canonical",href:qa}),a.jsx("meta",{property:"og:title",content:"Smart Garage Door Openers: Features & Benefits"}),a.jsx("meta",{property:"og:description",content:"Discover smart garage door opener features including smartphone control, voice activation, and security benefits."}),a.jsx("meta",{property:"og:url",content:qa}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Uh},{"@type":"ListItem",position:2,name:"Blog",item:`${Uh}/blog`},{"@type":"ListItem",position:3,name:"Smart Garage Door Openers: Features & Benefits",item:qa}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Technology"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Smart Garage Door Openers: Features & Benefits"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-05",children:"December 5, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Bp,alt:"Smart garage door opener installation by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:_R.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(qa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(qa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(qa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Ready to Upgrade to a Smart Opener?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Vh="https://www.professionalgaragedoorservices.com",za=`${Vh}/blog/garage-door-safety-tips`,IR=["Garage doors are among the largest and heaviest moving objects in your home. Understanding and practicing safety measures is essential for protecting your family.","**Essential Safety Tips**","**Never Walk Under a Moving Door**: Wait until the door is fully open or closed before passing underneath.","**Keep Children Away**: Educate children that garage doors are not toys. Keep remotes out of reach and never let children play under or near the door.","**Test Safety Features Monthly**: Modern garage doors have auto-reverse mechanisms and photo-eye sensors. Test these regularly by placing an object in the door's path.","**Visual Inspection**: Regularly check springs, cables, rollers, and other hardware for signs of wear. Never attempt to repair springs yourself – they're under extreme tension.","**Professional Maintenance**: Schedule annual inspections with certified technicians to ensure all components are functioning properly.","**Emergency Release**: Know how to use your door's emergency release in case of power outage or malfunction.","Contact us for a comprehensive safety inspection of your garage door system."],AR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Safety Tips Every Homeowner Should Know | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Essential garage door safety tips for homeowners. Learn how to protect your family with proper maintenance and safety feature testing."}),a.jsx("link",{rel:"canonical",href:za}),a.jsx("meta",{property:"og:title",content:"Garage Door Safety Tips Every Homeowner Should Know"}),a.jsx("meta",{property:"og:description",content:"Essential garage door safety tips for homeowners. Learn how to protect your family with proper maintenance."}),a.jsx("meta",{property:"og:url",content:za}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Vh},{"@type":"ListItem",position:2,name:"Blog",item:`${Vh}/blog`},{"@type":"ListItem",position:3,name:"Garage Door Safety Tips Every Homeowner Should Know",item:za}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Safety"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Garage Door Safety Tips Every Homeowner Should Know"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-02",children:"December 2, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"4 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Jp,alt:"Garage door safety inspection by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:IR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(za)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(za)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(za)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Want a Professional Safety Inspection?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Yh="https://www.professionalgaragedoorservices.com",$a=`${Yh}/blog/extend-garage-door-life`,RR=["A well-maintained garage door can last 15-30 years. Simple regular maintenance can significantly extend your door's lifespan and prevent costly repairs.","**Monthly Maintenance Tasks**","**Visual Inspection**: Look for signs of wear, damage, or misalignment in springs, cables, rollers, pulleys, and other hardware.","**Listen for Sounds**: Operate the door and listen for grinding, scraping, or squeaking sounds that could indicate problems.","**Test Balance**: Disconnect the opener and manually lift the door halfway. A properly balanced door should stay in place. If it falls, the springs need adjustment.","**Quarterly Maintenance**","**Lubrication**: Apply garage door lubricant to all moving parts including hinges, rollers, springs, and tracks.","**Clean Tracks**: Remove debris from tracks with a damp cloth. Avoid using lubricant on tracks as it can cause the door to slip.","**Tighten Hardware**: Vibration can loosen nuts and bolts over time. Check and tighten all hardware.","**Annual Tasks**","**Professional Inspection**: Have a certified technician perform a comprehensive inspection and tune-up.","**Weatherstripping**: Replace worn weatherstripping to maintain energy efficiency and keep out pests.","Schedule your annual maintenance appointment with Professional Garage Door Services today."],PR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"How to Extend the Life of Your Garage Door | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Expert tips to extend your garage door lifespan to 30+ years. Monthly, quarterly, and annual maintenance checklist included."}),a.jsx("link",{rel:"canonical",href:$a}),a.jsx("meta",{property:"og:title",content:"How to Extend the Life of Your Garage Door"}),a.jsx("meta",{property:"og:description",content:"Expert tips to extend your garage door lifespan to 30+ years."}),a.jsx("meta",{property:"og:url",content:$a}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Yh},{"@type":"ListItem",position:2,name:"Blog",item:`${Yh}/blog`},{"@type":"ListItem",position:3,name:"How to Extend the Life of Your Garage Door",item:$a}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Maintenance"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"How to Extend the Life of Your Garage Door"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-11-28",children:"November 28, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Qp,alt:"Garage door maintenance by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:RR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent($a)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent($a)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent($a)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Ready to Schedule Your Maintenance Visit?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Kh="https://www.professionalgaragedoorservices.com",Ga=`${Kh}/blog/commercial-vs-residential`,OR=["While both commercial and residential garage doors serve the same basic function, they differ significantly in design, construction, and operational requirements.","**Size and Scale**","Commercial doors are typically larger to accommodate vehicles like delivery trucks, forklifts, or fire engines. They may span 30 feet or more, while residential doors rarely exceed 18 feet.","**Construction and Durability**","Commercial doors are built with heavier gauge steel and reinforced components to withstand frequent daily use. They're designed for potentially thousands of cycles per week versus a few cycles per day for residential doors.","**Safety Features**","Commercial installations require additional safety measures including advanced sensor systems, warning lights, and sometimes emergency stop buttons. Compliance with OSHA regulations is mandatory.","**Security Requirements**","Commercial doors often feature advanced locking mechanisms, reinforced panels, and may include fire-rated options for specific applications.","**Operation Speed**","High-speed commercial doors can open and close much faster than residential units, minimizing heat loss in climate-controlled environments and improving operational efficiency.","**Maintenance Needs**","Given their heavier usage, commercial doors require more frequent professional maintenance to ensure reliable operation and extended lifespan.","Whether you need residential or commercial garage door services, our team has the expertise to meet your requirements."],DR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Commercial vs Residential Garage Doors: Key Differences | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Compare commercial and residential garage doors. Understand size, durability, safety, and maintenance differences for your project."}),a.jsx("link",{rel:"canonical",href:Ga}),a.jsx("meta",{property:"og:title",content:"Commercial vs Residential Garage Doors: Key Differences"}),a.jsx("meta",{property:"og:description",content:"Compare commercial and residential garage doors. Understand size, durability, safety, and maintenance differences."}),a.jsx("meta",{property:"og:url",content:Ga}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Kh},{"@type":"ListItem",position:2,name:"Blog",item:`${Kh}/blog`},{"@type":"ListItem",position:3,name:"Commercial vs Residential Garage Doors: Key Differences",item:Ga}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Installation"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Commercial vs Residential Garage Doors: Key Differences"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-11-25",children:"November 25, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"8 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Xp,alt:"Full-view commercial garage door installed by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:OR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ga)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ga)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ga)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Need Commercial or Residential Service?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Jh="https://www.professionalgaragedoorservices.com",Ba=`${Jh}/blog/garage-door-spring-replacement-tarzana`,LR=["If your garage door suddenly feels heavy, won't stay open, or makes a loud bang followed by it refusing to move — you're likely dealing with a broken spring. Garage door springs are the unsung workhorses of your system, bearing the full weight of the door, often 150-400 lbs, thousands of times a year. Here in Tarzana, the heat and dust from our valley summers can accelerate wear on these components faster than homeowners expect.","Springs typically last 7-12 years or 10,000-15,000 cycles, but that lifespan shrinks with heavy daily use, lack of lubrication, or age. There are two main types — torsion springs, mounted on a bar above the door, and extension springs, running along the upper tracks — and each fails differently, but always with warning signs first.","**Warning Signs of a Failing Spring**","**A Loud Bang**: A sudden, sharp bang from the garage is almost always a spring snapping. If this happens, don't try to open the door — call for service right away.","**The Door Feels Heavy**: If your automatic opener is straining, slowing down, or your door feels unusually heavy when lifted manually, the spring is likely losing tension.","**Visible Gaps or Stretching**: A torsion spring with a visible gap in its coils, or an extension spring that looks stretched out, has failed or is about to.","**Door Won't Stay Open**: A balanced door should stay in place when opened halfway. If it slams shut or drifts down on its own, the spring can no longer support the door's weight.","**Crooked Door**: If one side of the door looks higher than the other, one of a pair of torsion springs may have failed while the other is still holding.","**Why DIY Spring Replacement Is Dangerous**","Garage door springs store an enormous amount of tension — enough to cause serious injury or worse if handled incorrectly. Every year, emergency rooms treat homeowners for lacerations, broken bones, and eye injuries from spring-related accidents. Winding and unwinding torsion springs requires special tools and know-how; a slip can send a spring or winding bar flying with real force.","On top of the physical risk, getting the tension wrong leads to an unbalanced door that strains your opener, wears out cables and rollers faster, and can even come off its track. This is one repair we always recommend leaving to a trained technician.","**What to Expect From a Professional Replacement**","A professional visit typically starts with an inspection to confirm which spring type you have and whether one or both need replacing — we generally recommend replacing springs in pairs, even if only one has failed, since the other is usually close behind.","Most standard spring replacements are completed in under an hour once the technician is on-site. Pricing depends on spring type, door size and weight, and whether one or tw
300o springs need replacing, but we'll always give you a clear, upfront quote before any work begins.","We also use high-cycle springs rated for longer life, which is especially worthwhile in Tarzana's heat, so you get more years of reliable service before needing another replacement.","**Don't Wait for a Full Breakdown**","A garage door with a struggling spring doesn't fix itself, and continuing to use it can damage your opener or cause the door to fall unexpectedly. If you're noticing any of the warning signs above, give us a call for a fast, safe inspection and repair."],WR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Spring Replacement in Tarzana | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Everything Tarzana homeowners need to know about garage door spring replacement: warning signs, why DIY is dangerous, and what to expect from a professional job."}),a.jsx("link",{rel:"canonical",href:Ba}),a.jsx("meta",{property:"og:title",content:"Garage Door Spring Replacement in Tarzana: What Homeowners Need to Know"}),a.jsx("meta",{property:"og:description",content:"Warning signs of a failing spring, why DIY replacement is dangerous, and what to expect from a professional repair."}),a.jsx("meta",{property:"og:url",content:Ba}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Jh},{"@type":"ListItem",position:2,name:"Blog",item:`${Jh}/blog`},{"@type":"ListItem",position:3,name:"Garage Door Spring Replacement in Tarzana",item:Ba}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Repair"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Garage Door Spring Replacement in Tarzana: What Homeowners Need to Know"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2024-12-18",children:"December 18, 2024"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Yp,alt:"Garage door spring replacement by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:LR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ba)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ba)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ba)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Think Your Spring Is Failing?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Qh="https://www.professionalgaragedoorservices.com",Ha=`${Qh}/blog/garage-door-repair-cost-tarzana`,MR=["Wondering what garage door repair actually costs before you call someone? You're not alone — it's one of the most common questions we get from Tarzana homeowners. The honest answer: it depends on what's broken. A simple sensor realignment might run under $100, while a full opener replacement can run several hundred dollars. Below, we break down real price ranges for the most common repairs so you know roughly what to expect before a technician even arrives.","Every job is a little different based on your specific door, but these ranges reflect what we typically see across Tarzana and the surrounding San Fernando Valley.","**Common Garage Door Repair Costs**","**Spring Replacement**: This is the most common major repair, typically running $150-$350 depending on whether you need one or two springs and the size/weight of your door. Heavier doors and custom sizes cost more.","**Cable Replacement**: Frayed or snapped cables usually cost $100-$200 to replace, often paired with a spring service since they wear at a similar rate.","**Opener Repair or Replacement**: Repairing an existing opener (like a circuit board or motor issue) often runs $100-$250. A full opener replacement, including a new belt or chain-drive unit, typically falls between $300-$600 installed.","**Roller Replacement**: Worn or broken rollers are a relatively affordable fix, usually $80-$200 depending on how many need replacing and whether you choose standard or upgraded nylon rollers.","**Sensor Realignment or Replacement**: If your door won't close because the safety sensors are misaligned or faulty, this is often one of the cheaper fixes — usually $75-$150.","**Panel Replacement**: A single damaged panel (from a dent, crack, or collision) generally costs $250-$600 to replace, depending on the door's material and whether the panel needs to be color-matched.","**Track Realignment**: A door that's come off track is a common emergency call. Straightening or replacing bent track sections typically runs $100-$250.","**What Affects the Price**","**Door Size and Weight**: Larger, heavier doors (like double-car garages) need stronger springs and hardware, which costs more than a standard single-car door.","**Part Quality**: We always offer high-cycle, longer-lasting parts as an option. They cost a bit more upfront but usually save money over the life of the door by lasting years longer than basic hardware.","**Opener Brand and Age**: Older or discontinued opener models sometimes require a full replacement rather than a repair, since matching parts can be hard to find.","**Same-Day or Emergency Service**: Most routine repairs are scheduled within a day or two at standard rates. True after-hours emergencies, like a door stuck open overnight, may carry a modest additional fee for immediate dispatch.",'**Why "Cheap" Quotes Can Cost You More**',"It's tempting to go with whoever quotes the lowest number over the phone, but garage door pricing without an actual inspection is often a guess — or a lowball number designed to get a technician in the door, with the real price revealed once they're on-site. Watch out for quotes that seem far below the ranges above; they often mean lower-grade parts, an incomplete repair, or surprise add-on charges once work begins.","A trustworthy quote should be based on a look at your actual door, not a generic number pulled from a phone script. It should also be clear about what's included, whether that's the parts, labor, and any warranty on the work.","**Getting an Accurate Quote**","The best way to know your real cost is a quick, free inspection. Our technicians diagnose the issue on-site and give you an upfront, itemized quote before any work begins — no surprises, no pressure. We also stand behind our repairs with a warranty, so you're covered if anything needs a follow-up visit.","If your garage door is acting up, give us a call. We'll give you a straight answer on what it'll cost to fix it right."],qR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"How Much Does Garage Door Repair Cost in Tarzana? | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"See real 2025 price ranges for garage door repair in Tarzana, CA — springs, openers, cables, panels, and more — plus what actually drives the cost."}),a.jsx("link",{rel:"canonical",href:Ha}),a.jsx("meta",{property:"og:title",content:"How Much Does Garage Door Repair Cost in Tarzana? (2025 Price Guide)"}),a.jsx("meta",{property:"og:description",content:"Real price ranges for springs, openers, cables, panels, and more, plus what actually drives the cost up or down."}),a.jsx("meta",{property:"og:url",content:Ha}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Qh},{"@type":"ListItem",position:2,name:"Blog",item:`${Qh}/blog`},{"@type":"ListItem",position:3,name:"How Much Does Garage Door Repair Cost in Tarzana?",item:Ha}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Repair"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"How Much Does Garage Door Repair Cost in Tarzana? (2025 Price Guide)"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-01-08",children:"January 8, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"7 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Vp,alt:"Garage door repair by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:MR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ha)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ha)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ha)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Want an Ex
300act Quote for Your Door?"}),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Xh="https://www.professionalgaragedoorservices.com",Fa=`${Xh}/blog/torsion-vs-extension-springs-tarzana`,zR=["Not all garage door springs are built the same, and knowing which type yours has can save you time and money when something goes wrong. Most homes use either torsion springs, mounted on a bar directly above the closed door, or extension springs, running along the upper tracks on either side. Telling them apart takes less than a minute, and it matters because the two types fail differently, cost differently to replace, and hold up differently to Tarzana's hot, dry summers.","**What Is a Torsion Spring?**","A torsion spring sits on a metal shaft centered above the garage door opening, usually with a cable drum on each end. Instead of stretching, it works by twisting — winding up tightly to store energy, then slowly unwinding to lift the door with controlled force. Most newer homes and heavier, insulated doors use torsion springs because they offer smoother operation, quieter movement, and generally better durability over time.","**What Is an Extension Spring?**","Extension springs run horizontally along the upper track on both the left and right sides of the door. They stretch and contract as the door moves, pulling the door open with the help of pulleys. This style is more common in older homes and lighter, single-layer doors. It's a simpler, less expensive setup, but it comes with a bit more visible wear and a slightly higher chance of the spring or a pulley cable snapping over time.","**How to Tell Which One You Have**","Open your garage and look straight up above the closed door. If you see one or two tightly wound springs on a bar directly overhead, that's torsion. If instead you see long springs stretched out along the tracks on the upper left and right walls, running parallel to the ceiling, that's extension. Most Tarzana homes built or remodeled in the last 20 years have torsion springs, but plenty of older properties still run on the extension setup.","**Why It Matters When One Breaks**","Torsion springs typically fail with a loud bang and the door becomes too heavy to lift, often sagging unevenly if it's a two-spring system with only one broken. Replacement requires special winding bars and precise tension settings, which is why this is never a DIY job. Extension springs, on the other hand, tend to fail with a visible snap or stretch, and a broken one can cause the door to fall unevenly or, in rare cases without safety cables installed, allow a spring to release with force. Either way, the fix isn't just swapping the broken part — it's making sure the whole system is balanced and safe again.","The type you have also affects repair time and cost. Torsion spring jobs are typically quicker for an experienced technician since the springs are centrally mounted, while extension spring systems sometimes need extra attention to the pulleys, cables, and safety cables running alongside them.","**Which Type Lasts Longer in Tarzana's Climate?**","Both spring types are rated for a similar number of open-close cycles, generally 10,000-15,000, but torsion springs tend to hold their tension more consistently through our valley's hot summers. Extension springs, with more exposed surface area and moving parts, can see slightly faster wear from heat, dust, and dryness common in Tarzana. If you're replacing extension springs, upgrading to a torsion system is worth asking about, especially if your door sees daily use.","**The Bottom Line**","Knowing which spring type you have won't fix a broken one, but it helps you understand what a technician is quoting and why. Whether you've got torsion or extension springs, a snapped or failing spring should always be handled by a professional — the tension involved makes this one of the few garage door repairs where DIY simply isn't worth the risk.","If you're not sure which type you have, or you're noticing any signs of wear, give us a call. We'll take a look, tell you exactly what's going on, and get it fixed safely and quickly."],$R=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Torsion vs. Extension Springs: Which Does Your Tarzana Door Have? | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Learn the difference between torsion and extension garage door springs, how to tell which one you have, and why it matters when one breaks."}),a.jsx("link",{rel:"canonical",href:Fa}),a.jsx("meta",{property:"og:title",content:"Torsion vs. Extension Springs: Which One Does Your Tarzana Garage Door Have?"}),a.jsx("meta",{property:"og:description",content:"How to tell which spring type your garage door uses, why it matters when one breaks, and which holds up better to Tarzana's climate."}),a.jsx("meta",{property:"og:url",content:Fa}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Xh},{"@type":"ListItem",position:2,name:"Blog",item:`${Xh}/blog`},{"@type":"ListItem",position:3,name:"Torsion vs. Extension Springs",item:Fa}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Repair"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Torsion vs. Extension Springs: Which One Does Your Tarzana Garage Door Have?"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-01-22",children:"January 22, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Up,alt:"Garage door torsion spring b
300y Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:zR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Fa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Fa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Fa)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Not Sure Which Spring You Have?"}),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),Zh="https://www.professionalgaragedoorservices.com",Ua=`${Zh}/blog/noisy-garage-door-sounds-explained-tarzana`,GR=["A garage door doesn't have to be silent, but it also shouldn't sound like it's about to fall apart. The good news is that the type of noise your door makes is actually one of the best diagnostic clues you have. Grinding, squeaking, rattling, and banging all point to different problems, some harmless and some urgent. In Tarzana's dry heat and dust, squeaks and grinding tend to show up faster than they would in cooler, more humid climates, since lubricant dries out quicker and hardware collects grit more easily.","Here's a breakdown of the most common garage door sounds, what's usually causing them, and what to do about each one.","**Grinding or Scraping**","A grinding or metal-on-metal scraping sound as the door moves is often a sign of worn rollers, a track that's bent or out of alignment, or a motor gear inside the opener wearing down. If the noise is coming from along the tracks, check for visible dirt or debris first. If it persists after cleaning, the rollers or track likely need professional attention before they cause the door to jump the track entirely.","**Squeaking or Chirping**","High-pitched squeaking is usually the most benign noise on this list, typically caused by dry hinges, rollers, or springs that need lubrication. This is worth trying yourself: a silicone-based garage door lubricant applied to the hinges, rollers, and springs often quiets things down within a day. If the squeak continues after lubrication, a hinge or roller may be worn out and need replacing.","**Rattling**","Rattling, especially during opening or closing, usually points to loose hardware, such as nuts, bolts, or brackets that have vibrated loose over thousands of cycles. This is common on older doors and is usually a quick fix: a technician can tighten everything back down during a rout
300ine tune-up. Left unaddressed, loose hardware can eventually lead to bigger issues like a track pulling away from the wall.","**A Loud Bang or Pop**","This one is not a DIY situation. A sudden, sharp bang almost always means a spring has snapped. If this happens, don't attempt to open or close the door, and call for repair right away. A broken spring means the door has lost its main lifting support and can be dangerous to operate until it's fixed.","**Humming Without Movement**","If your opener hums or buzzes but the door doesn't move, this usually points to an opener motor issue, a disengaged trolley, or in some cases a failed capacitor inside the unit. This typically requires a technician to diagnose, since the fix ranges from a simple reset to a full opener repair.","**Clicking Before the Door Moves**","A clicking sound right as you press the remote, followed by the door not moving, often means the safety sensors are misaligned or blocked. Check that both sensors near the bottom of the tracks are clean, facing each other, and free of obstructions. If clicking continues after that check, the issue is likely with the opener's internal relay and worth a professional look.","**When to Call a Professional**","Squeaking and minor rattling are reasonable to troubleshoot yourself with basic lubrication and a check for loose hardware. But grinding, banging, humming without movement, or any noise paired with the door moving unevenly are signs of a bigger issue that shouldn't be pushed off. Continuing to run a door with these symptoms often turns a simple, affordable fix into a bigger repair down the line.","If your garage door has developed a new noise, give us a call and describe what you're hearing. In many cases we can get a good idea of what's going on before we even arrive, and get it fixed quickly and safely."],BR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Noisy Garage Door? Here's What Every Sound Means | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"A Tarzana homeowner's guide to garage door noises — what grinding, squeaking, rattling, and banging sounds mean, and when to call a pro."}),a.jsx("link",{rel:"canonical",href:Ua}),a.jsx("meta",{property:"og:title",content:"Noisy Garage Door? Here's What Every Sound Is Telling You"}),a.jsx("meta",{property:"og:description",content:"Grinding, squeaking, rattling, banging — what each garage door noise means, quick fixes, and when it's time to call a professional."}),a.jsx("meta",{property:"og:url",content:Ua}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:Zh},{"@type":"ListItem",position:2,name:"Blog",item:`${Zh}/blog`},{"@type":"ListItem",position:3,name:"Noisy Garage Door? Here's What Every Sound Is Telling You",item:Ua}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Maintenance"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Noisy Garage Door? Here's What Every Sound Is Telling You"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-02-05",children:"February 5, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Fp,alt:"Garage door motor and opener service by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:GR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ua)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ua)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ua)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Hearing a Noise You Don't Like?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),em="https://www.professionalgaragedoorservices.com",Va=`${em}/blog/garage-door-heat-warping-tarzana`,HR=["Every July, we see the same pattern repeat across Tarzana: temperatures climb past 100 degrees, and within a day or two, calls start coming in for garage doors that suddenly bind, scrape along the track, or won't close all the way. It's not a coincidence — it's simple physics. Metal expands when it heats up, and a garage door is made of several different metal and hardware components that don't all expand at exactly the same rate.","**Why Heat Causes Binding and Jamming**","A steel garage door panel exposed to direct afternoon sun can run considerably hotter than the surrounding air temperature. As the steel expands, even slightly, it can change how the panels sit within the track. Tracks themselves are usually aluminum or galvanized steel, mounted to a wood or masonry frame that doesn't expand at the same rate as the door. That mismatch is exactly what causes a door to suddenly feel tight, scrape on one side, or stop closing smoothly, even though nothing was outwardly damaged.","**Where We See This Most in Tarzana**","We see a clear pattern every summer. Garages facing west or south, which get slammed with direct afternoon sun through July and August, are the most common calls — especially along stretches near Ventura Blvd and the foothill-facing streets north of it, where garages get little to no shade. Homes with older, non-insulated steel doors installed before the mid-2000s are especially at risk, since manufacturing tolerances and insulation standards have improved a lot since then. Garages next to dark-colored driveways or block walls also run hotter, since radiant heat bounces back onto the door well after the sun has moved.","**Signs Heat Is Affecting Your Door**","**Binding or Sticking**: The door feels tight or resistant partway through its travel, especially in the afternoon or early evening after peak heat exposure.","**Scraping Sounds**: A panel edge or roller rubbing against the track that wasn't happening in cooler months.","**Door Stops Short of Fully Closing**: The opener strains or reverses because the door is binding before it reaches the floor.","**Visible Panel Warping**: In more severe or long-term cases, a panel may show a slight bow or wave that's visible from the side.","**What You Can Do**","If your door is binding on hot afternoons, avoid forcing it — that can bend track hardware or strain the opener's motor and gears. A quick temporary fix is operating the door during cooler morning hours until it can be inspected. Long-term, the real solution usually involves one of a few things: adjusting the track alignment to add clearance, upgrading to an insulated door that resists heat transfer better, or in some cases replacing a door that's already developed permanent warping.","**Why Insulated Doors Hold Up Better**","Insulated steel doors are built with a layer of foam between two steel skins, which slows heat transfer and keeps the outer panel from reaching the same extreme surface temperatures as a single-layer door. This isn't just an energy-efficiency perk — it directly reduces the expansion and contraction cycle that leads to summer binding and jamming in the first place.","**Don't Wait Until It's Stuck**","A door that's binding in the heat is a preventable problem, not something to just live with every summer. Left alone, repeated heat stress can accelerate wear on rollers, tracks, and the opener itself. If your garage door has started acting up now that temperatures are climbing, give us a call — we'll take a look, adjust what needs adjusting, and let you know honestly if an insulated upgrade makes sense for your home."],FR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Why Tarzana's Heat Waves Warp Garage Door Panels | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"When temperatures hit 100+ in the Valley, metal panels and tracks expand unevenly, causing doors to bind, scrape, or stop closing."}),a.jsx("link",{rel:"canonical",href:Va}),a.jsx("meta",{property:"og:title",content:"Why Tarzana's July Heat Waves Are Warping Garage Door Panels (And Jamming Tracks)"}),a.jsx("meta",{property:"og:description",content:"When temperatures hit 100+ in the Valley, metal panels and tracks expand unevenly, causing doors to bind, scrape, or stop closing right when you need them most."}),a.jsx("meta",{property:"og:url",content:Va}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:em},{"@type":"ListItem",position:2,name:"Blog",item:`${em}/blog`},{"@type":"ListItem",position:3,name:"Why Tarzana's July Heat Waves Are Warping Garage Door Panels",item:Va}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Repair"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Why Tarzana's July Heat Waves Are Warping Garage Door Panels (And Jamming Tracks)"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-02-19",children:"February 19, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Hp,alt:"Garage door installation by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:HR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Va)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Va)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Va)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Door Binding in the Heat?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),tm="https://www.professionalgaragedoorservices.com",Ya=`${tm}/blog/garage-door-sensor-problems`,UR=["If your garage door starts closing and then suddenly reverses back open — or won't close at all, no matter how many times you press the remote — the safety sensors are almost always the reason. These two small units mounted near the bottom of the tracks, a few inches off the ground on either side of the door, are one of the most important safety features on your garage door. They're also one of the most common sources of frustrating, seemingly random malfunctions.","**How Safety Sensors Actually Work**","Your garage door has two photo-eye sensors facing each other across the opening. One sends a continuous infrared beam, and the other receives it. As long as that beam is unbroken, the door is allowed to close normally. If something interrupts the beam — a person, a pet, a stray box — the opener immediately reverses the door to prevent it from closing on whatever is in the way. This is federally mandated safety technology, and it's not something you'd want to disable even if you could.","**Why Sensors Cause False Triggers**","**Misalignment**: The two sensors need to be pointed at each other with real precision. Even a slight bump — from a stored bike, a broom, or just years of vibration — can knock one out of alignment enough to break the connection intermittently.","**Dirt and Dust on the Lenses**: A thin film of dust on either sensor's lens can weaken the beam enough to cause false readings, especially in dry, dusty conditions common in the Valley.","**Direct Sunlight**: Strong, direct sunlight hitting a sensor at certain times of day can actually overwhelm the receiver, causing it to misread the beam status. This is a seasonal issue for some homeowners and tends to happen at the same time each day.","**Spider Webs and Small Obstructions**: It sounds minor, but a spider web strung across the sensor path is a surprisingly common cause of intermittent reversing.","**Loose or Damaged Wiring**: Sensors are low-voltage and wired back to the opener. A loose connection, a chewed wire, or corrosion at the terminal can cause a sensor to fail intermittently or completely.","**Quick Things You Can Check Yourself**","Start by looking at the small indicator lights on each sensor — most units have an LED that should glow solid when properly aligned. If one is flickering or off, that's your first clue. Wipe both lenses gently with a soft, dry cloth to rule out dust. Check that nothing is blocking the space between them, including cobwebs low to the ground. If the sensors seem to work fine at night but fail during the day, sunlight interference is a likely culprit, and repositioning or shading the sensor slightly can sometimes resolve it.","**When It's Time to Call a Professional**","If you've checked alignment, cleaned the lenses, and ruled out obstructions but the door still won't close reliably, the issue is likely wiring, a failing sensor unit, or a problem with the opener's logic board interpreting the signal. These aren't always safe or straightforward for a homeowner to diagnose without the right tools, especially if it involves opening up the opener unit itself.","A malfunctioning safety sensor isn't just an inconvenience — it's a safety system that's supposed to work every single time. If your door won't close consistently, don't ignore it or disable the sensors as a workaround; that removes an important layer of protection for your family.","If your garage door is giving you trouble with sensors or won't close reliably, give us a call. We'll diagnose the actual cause — alignment, wiring, or a failing unit — and get it working safely again."],VR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Opener Sensor Problems: Why Your Door Won't Close | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Learn why your garage door reverses or won't 
300close — common safety sensor problems, quick fixes, and when to call a professional."}),a.jsx("link",{rel:"canonical",href:Ya}),a.jsx("meta",{property:"og:title",content:"Garage Door Opener Sensor Problems: Why Your Door Won't Close"}),a.jsx("meta",{property:"og:description",content:"Common causes of garage door sensor malfunctions, quick fixes, and when to call a professional."}),a.jsx("meta",{property:"og:url",content:Ya}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:tm},{"@type":"ListItem",position:2,name:"Blog",item:`${tm}/blog`},{"@type":"ListItem",position:3,name:"Garage Door Opener Sensor Problems",item:Ya}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Repair"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Garage Door Opener Sensor Problems: Why Your Door Won't Close"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-03-03",children:"March 3, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"5 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:Zp,alt:"Garage door opener and safety sensor service by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:UR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ya)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ya)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ya)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Door Won't Close Reliably?"}),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4
300021"})})]})]})}),a.jsx(ue,{})]}),rm="https://www.professionalgaragedoorservices.com",Ka=`${rm}/blog/belt-chain-screw-drive-openers`,YR=["Not all garage door openers work the same way. The type of opener you choose affects how much noise it makes, how often it needs maintenance, and how much you'll pay upfront — and most homeowners never learn the difference until it's time to replace one. Here's a straightforward breakdown of the three main drive types and which one actually makes sense for your garage.","**Chain Drive**","Chain drive openers use a metal chain, similar to a bicycle chain, to pull the trolley that moves the door along the track. This is the most affordable option and has been the standard for decades, which means parts and service are widely available. The tradeoff is noise — the metal-on-metal operation is the loudest of the three options, which matters if your garage is attached to a bedroom or living space above or beside it.","**Belt Drive**","Belt drive openers use a reinforced rubber belt instead of a chain, which operates far more quietly since there's no metal-on-metal contact. This makes belt drives the most popular choice for homes with living space near or above the garage. They cost more than chain drives but typically require less maintenance over time, since belts don't need the periodic lubrication a chain does.","**Screw Drive**","Screw drive openers use a threaded steel rod that the trolley moves along as it turns, rather than a chain or belt. This design has fewer moving parts than the other two options, which generally means less maintenance is needed. Screw drives run at a moderate noise level — quieter than chain, though not quite as silent as belt — and can be sensitive to temperature changes, which occasionally affects performance in extreme heat or cold.","**Comparing Noise Level**","If quiet operation is your top priority, belt drive is the clear winner. Screw drive lands in the middle, and chain drive is the loudest of the three, though even chain drives have gotten quieter with modern soft-start and soft-stop motor technology.","**Comparing Price**","Chain drive openers are generally the most budget-friendly option. Screw drive openers typically fall in the middle price range. Belt drive openers tend to cost the most upfront, though the gap has narrowed in recent years as belt technology has become more common.","**Comparing Maintenance**","Chain drives need periodic lubrication to stay smooth and quiet, and the chain can stretch slightly over time, occasionally requiring tension adjustments. Belt drives need very little maintenance beyond a general inspection. Screw drives need the rod lubricated with a specific type of grease designed for that mechanism, but otherwise hold up well with minimal attention.","**Which One Should You Choose?**","If your garage is attached to the house and near a bedroom or living space, belt drive is usually worth the extra cost for the noise reduction alone. If you're working with a tighter budget and your garage is detached or further from living space, chain drive remains a reliable, affordable option. Screw drive is a solid middle-ground choice, particularly for garages that don't see extreme temperature swings.","Whichever direction makes sense for your home, the opener also needs to be properly matched to your door's size and weight — an underpowered opener will strain regardless of drive type. We can walk you through the tradeoffs for your specific garage and help you land on the right choice.","If you're ready to upgrade your opener or aren't sure which type you currently have, give us a call for a free consultation and estimate."],KR=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Belt vs. Chain vs. Screw Drive Garage Door Openers | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Compare belt, chain, and screw drive garage door openers on noise, price, and maintenance to find the right fit for your home."}),a.jsx("link",{rel:"canonical",href:Ka}),a.jsx("meta",{property:"og:title",content:"Belt Drive vs. Chain Drive vs. Screw Drive: Which Garage Door Opener Is Right for You?"}),a.jsx("meta",{property:"og:description",content:"A straightforward breakdown of the three main garage door opener drive types and which one makes sense for your garage."}),a.jsx("meta",{property:"og:url",content:Ka}),a.jsx("meta",{property:"og:type",content:"article"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:rm},{"@type":"ListItem",position:2,name:"Blog",item:`${rm}/blog`},{"@type":"ListItem",position:3,name:"Belt vs. Chain vs. Screw Drive Openers",item:Ka}]})})]}),a.jsx(de,{}),a.jsx("main",{className:"pt-24 pb-24",children:a.jsxs("article",{className:"container mx-auto px-4 max-w-3xl",children:[a.jsxs(A,{to:"/blog",className:"inline-flex items-center gap-2 text-primary font-semibold mb-8 hover:underline",children:[a.jsx(Fe,{className:"w-4 h-4"})," Back to Blog"]}),a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Installation"}),a.jsx("h1",{className:"font-heading text-3xl md:text-4xl lg:text-5xl text-foreground mb-6",children:"Belt Drive vs. Chain Drive vs. Screw Drive: Which Garage Door Opener Is Right for You?"}),a.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground mb-8",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(qe,{className:"w-4 h-4"}),a.jsx("time",{dateTime:"2025-03-10",children:"March 10, 2025"})]}),a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(fe,{className:"w-4 h-4"}),"6 min read"]})]}),a.jsx("div",{className:"rounded-2xl overflow-hidden mb-10 shadow-card",children:a.jsx("img",{src:ef,alt:"Garage door opener installation by Professional Garage Door Services",className:"w-full h-auto object-cover",loading:"eager"})}),a.jsx("div",{className:"prose prose-lg max-w-none space-y-5",children:YR.map((e,t)=>{if(e.startsWith("**")&&e.endsWith("**")&&!e.includes(":"))return a.jsx("h2",{className:"font-heading text-2xl text-foreground mt-8 mb-2",children:e.replace(/\*\*/g,"")},t);const n=e.match(/^\*\*(.+?)\*\*:(.*)$/);return n?a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:[a.jsxs("strong",{className:"text-foreground",children:[n[1],":"]}),n[2]]},t):a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e},t)})}),a.jsxs("div",{className:"flex items-center gap-4 mt-12 pt-8 border-t border-border",children:[a.jsx("span",{className:"text-sm font-semibold text-foreground",children:"Share:"}),a.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(Ka)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ct,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://twitter.com/intent/tweet?url=${encodeURIComponent(Ka)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Twitter",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(ut,{className:"w-4 h-4"})}),a.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(Ka)}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",className:"w-9 h-9 rounded-full bg-muted flex items-center justify-center hover:bg-primary hover:text-primary-foreground transition-colors",children:a.jsx(dt,{className:"w-4 h-4"})})]}),a.jsxs("div",{className:"mt-12 bg-secondary rounded-2xl p-8 text-center",children:[a.jsx("h2",{className:"font-heading text-2xl md:text-3xl text-secondary-foreground mb-3",children:"Ready to Choose Your New Opener?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 mb-6",children:"Get a free, no-obligation estimate from our licensed team."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsx(re,{variant:"hero",size:"xl",children:"Call (888) 285-4021"})})]})]})}),a.jsx(ue,{})]}),JR="/assets/after-1-BYCM6sHW.jpg",QR="/assets/after-2-DcezwZh1.jpg",XR="/assets/after-3-D05MxQBN.jpg",ZR="/assets/work-4-k8P_OgGs.jpg",eP="/assets/work-5-DLtPeIGo.jpg",Kk="/assets/work-6-C_S9R259.jpg",tP="/assets/team-hero-S80zmDxt.jpg",Jk="/assets/service-truck-ooSJystV.jpg",rP="/assets/after-10-539cc9-VlpajRt6.webp",nP="/assets/LONG-RAISED-PANEL-WHITE-WINDOWS-L-397-3d63a3-DCyBDEqB.webp",aP="/assets/Brown-texture-frosted-glass-in-each-section--d73778-lnUz4YYO.webp",oP="/assets/long-panel-wood-like-windows-beee94-DKhYiNV4.webp",sP="/assets/IMG_2513-32cc8b-rBZBJ2OY.webp",iP="/assets/IMG_0404-bbfc78-ZerBDdU8.webp",lP="/assets/IMG_0403-7615cf-COYXLgIn.webp",cP="/assets/IMG_0175-b629d1-DVEoeuOo.webp",dP="/assets/Gate-repair-1-0561f7-DqkMbGWD.webp",uP="/assets/Gate-repair-7-1e13d9-By5F6Y1p.webp",hP="/assets/gate-repair-6-826390-DfMijkr0.webp",mP="/assets/gate-repair-5-f90063-DMLs3_CT.webp",pP="/assets/gate-repair-4-9a5b0e-BM1DeOcR.webp",fP="/assets/gate-repair-3-eaccfd-36jq6ePp.webp",gP="/assets/gate-repair-2--5df88b-CiZImEPC.webp",yP="/assets/www.axenia-haritonova.com-77-Medium-a87003-Cc6mNpxu.webp",vP="/assets/www.axenia-haritonova.com-78-Medium-38d56d-OiR2BNjl.webp",wP="/assets/www.axenia-haritonova.com-81-Medium-a1f0c6-Dx4eOoyN.webp",xP="/assets/www.axenia-haritonova.com-93-Medium-412f45-BF7bLIiI.webp",bP="/assets/www.axenia-haritonova.com1-3-Medium-5c7e24-Cc1TuhTU.webp",kP="/assets/IMG_8816-Medium-b090bc-DvK5bd1v.webp",jP="/assets/DSC00158-Medium-7f0ea1-BGlO0IA4.webp",SP="/assets/DSC00081-Medium-151be4-Dr0kqEHi.webp",NP="/assets/IMG_0864-afa828-CsBJysyt.webp",CP="/assets/IMG_0035-6025bf-zu-P1ENS.webp",TP="/assets/IMG_0863-8e0927-BOzPYfgX.webp",_P="/assets/IMG_0621-8743ab-C3mSNC9o.webp",EP="/assets/IMG_0620-86c6cb-Cdst3DGF.webp",IP="/assets/IMG_6280-Large-9b0924-CwIQJyJX.webp",AP="/assets/IMG_0609-bc9b39-mmby_HFy.webp",RP="/assets/IMG_0582-740b9f-BDDGfAaA.webp",PP="/assets/IMG_0581-6a7b0c-CZfwgC68.webp",OP="/assets/IMG_0538-f342c2-DT8DWsF-.webp",DP="/assets/IMG_0532-e9b82b-DslETeHv.webp",LP="/assets/www.axenia-haritonova.com-61.jpg-GOOD-Large-5ca589-Dd1k3dQv.webp",WP="/assets/www.axenia-haritonova.com-39.jpg-GOOD-Large-b46086-BrNoS1F4.webp",MP="/assets/www.axenia-haritonova.com-38.jpg-GOOD-Large-d9ffa3-DXqt99bC.webp",qP="/assets/www.axenia-haritonova.com-36.jpg-GOOD-Large-d26e82-3AZZKS_h.webp",zP="/assets/www.axenia-haritonova.com-34.jpg-GOOD-Large-437af3-CbxJNtJT.webp",$P="/assets/www.axenia-haritonova.com-26.jpg-GOOD-Large-cd5cce-CAsJV_qW.webp",GP="/assets/www.axenia-haritonova.com-25.jpg-GOOD-Large-4fc654-YQUyK3GM.webp",BP="/assets/www.axenia-haritonova.com-24.jpg-GOOD-Large-6ed116-BNdPdmR5.webp",HP="/assets/www.axenia-haritonova.com-17.jpg-GOOD-Large-e9b767-B3fsDBYi.webp",FP="/assets/www.axenia-haritonova.com-6.jpg-GOOD-Large-774539-CACMgt6n.webp",UP="/assets/before-2-Medium-489877-ByYCKBy5.webp",VP="/assets/before-4--111680-BUZH3024.webp",YP="/assets/before-5--9e169d-DpLa0TbL.webp",KP="/assets/before-10--f8c7d6-hUHXtewk.webp",JP="/assets/after-1-Medium-6cbf6b-I0Xiaws7.webp",QP="/assets/after-3-Medium-78745d-Rxm9h6W3.webp",XP="/assets/after-4--68c0e4-8xlpxGYw.webp",ZP="/assets/after-5-9c1bce-DEbPif9K.webp",eO="/assets/after-6-Medium-a24c82-BHDn8oSS.webp",tO="/assets/after-7-Medium-d143a1-BXy-i27Z.webp",rO="/assets/after-8-Medium-ed8f06-BDXTIc6J.webp",nO="/assets/after-9-Medium-04617b-vUr3xFHs.webp",aO="/assets/after-10-539cc9-VlpajRt6.webp",oO=[{before:VP,after:XP,title:"Garage Door Replacement"},{before:YP,after:ZP,title:"Garage Door Replacement"},{before:KP,after:aO,title:"Garage Door Replacement"}],sO=[{src:UP,title:"Before",alt:"Garage door before replacement"},{src:JP,title:"After",alt:"Garage door after installation"},{src:QP,title:"After",alt:"Garage door after installation"},{src:eO,title:"After",alt:"Garage door after installation"},{src:tO,title:"After",alt:"Garage door after installation"},{src:rO,title:"After",alt:"Garage door after installation"},{src:nO,title:"After",alt:"Garage door after installation"}],iO=[{src:rP,title:"New Garage Door Installation",alt:"Newly installed garage door"},{src:nP,title:"Long Raised Panel, White, Windows",alt:"White long raised panel garage door with windows"},{src:Hp,title:"Long Raised Panel, Black, Windows",alt:"Black long raised panel garage door with windows"},{src:Gp,title:"Long Raised Panel, Brown, Windows",alt:"Brown long raised panel garage door with windows"},{src:aP,title:"Frosted Glass Insert Door",alt:"Brown textured garage door with frosted glass in each section"},{src:oP,title:"Wood-Look Panel with Windows",alt:"Wood-look long panel garage door with windows"},{src:Kp,title:"Long Raised Panel, White, No Inserts",alt:"White long raised panel garage door with no window inserts"},{src:Xp,title:"Full-View Black Frame Door",alt:"Full-view black frame garage door with black laminate glass"},{src:Bk,title:"New Installation",alt:"Newly installed garage door"},{src:sP,title:"New Installation",alt:"Newly installed garage door"}],lO=[{src:Bp,title:"Opener Installation",alt:"Garage door opener installation"},{src:ef,title:"Opener Installation",alt:"Garage door opener installation"},{src:yP,title:"Opener Installation",alt:"Garage door opener installation"},{src:vP,title:"Opener Installation",alt:"Garage door opener installation"},{src:wP,title:"Opener Installation",alt:"Garage door opener installation"},{src:xP,title:"Opener Installation",alt:"Garage door opener installation"},{src:bP,title:"Opener Installation",alt:"Garage door opener installation"},{src:kP,title:"Device Installation",alt:"Garage door device installation"},{src:jP,title:"Device Installation",alt:"Garage door device installation"},{src:SP,title:"Device Installation",alt:"Garage door device installation"}],cO=[{src:iP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:lP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:cP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:dP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:uP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:hP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:mP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:pP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:fP,title:"Gate Repair",alt:"Automatic gate repair project"},{src:gP,title:"Gate Repair",alt:"Automatic gate repair project"}],dO=[{src:Yp,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:Up,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:AP,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:RP,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:PP,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:OP,title:"Spring Replacement",alt:"Garage door torsion spring replacement"},{src:DP,title:"Spring Replacement",alt:"Garage door torsion spring replacement"}],uO=[{src:NP,title:"Motor Installation",alt:"Garage door motor installation"},{src:Qp,title:"Motor Installation",alt:"Garage door motor installation"},{src:Fp,title:"Motor Installation",alt:"Garage door motor installation"}],hO=[{src:$p,title:"Off-Track Repair",alt:"Off-track garage door repair"},{src:Vp,title:"Off-Track Repair",alt:"Off-track garage door repair"},{src:Jp,title:"Off-Track Repair",alt:"Off-track garage door repair"},{src:CP,title:"Off-Track Repair",alt:"Off-track garage door repair"}],mO=[{src:Zp,title:"Keypad & Remote Setup",alt:"Garage door keypad and remote setup"},{src:TP,title:"Keypad & Remote Setup",alt:"Garage door keypad and remote setup"},{src:_P,title:"Keypad & Remote Setup",alt:"Garage door keypad and remote setup"},{src:EP,title:"Keypad & Remote Setup",alt:"Garage door keypad and remote setup"}
300,{src:IP,title:"Keypad & Remote Setup",alt:"Garage door keypad and remote setup"}],pO=[{src:LP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:WP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:MP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:qP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:zP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:$P,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:GP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:BP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:HP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"},{src:FP,title:"Our Warehouse",alt:"Professional Garage Door Services warehouse and facility"}],fO=[{src:JR,title:"Residential Garage Door",alt:"Beautiful residential garage door after installation"},{src:QR,title:"Modern Panel Door",alt:"Modern panel style garage door"},{src:XR,title:"Custom Wood Door",alt:"Custom wood garage door installation"},{src:Yk,title:"Classic Panel Door",alt:"Classic raised panel garage door installation"},{src:ZR,title:"Modern Double Door",alt:"Modern double car garage door"},{src:eP,title:"LiftMaster Installation",alt:"Professional LiftMaster opener installation"},{src:Kk,title:"Torsion Spring Repair",alt:"Garage door torsion spring replacement service"},{src:Sc,title:"Emergency Repair",alt:"Emergency garage door repair service"},{src:ca,title:"Torsion Spring Parts",alt:"Professional torsion springs for garage doors"},{src:tP,title:"Professional Service",alt:"Professional garage door service team"},{src:Jk,title:"Mobile Service Team",alt:"Professional Garage Door Services branded service truck"}],Qk=({images:e})=>a.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6",children:e.map((t,r)=>a.jsxs("figure",{className:"group relative overflow-hidden rounded-xl shadow-card aspect-square",children:[a.jsx("img",{src:t.src,alt:t.alt,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-110",loading:"lazy"}),a.jsx("figcaption",{className:"absolute inset-0 bg-gradient-to-t from-secondary/90 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-6",children:a.jsx("span",{className:"font-heading text-lg text-secondary-foreground",children:t.title})})]},r))}),Nr=({id:e,title:t,description:r,images:n})=>a.jsx("section",{id:e,className:"py-14","aria-labelledby":`${e}-heading`,children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsx("h2",{id:`${e}-heading`,className:"font-heading text-3xl text-foreground mb-2",children:t}),r&&a.jsx("p",{className:"text-muted-foreground mb-8 max-w-2xl",children:r}),!r&&a.jsx("div",{className:"mb-6"}),a.jsx(Qk,{images:n})]})}),gO=()=>a.jsxs("div",{className:"min-h-screen bg-background",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Gallery | Our Work Portfolio | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Browse real photos of our garage door installations, gate repairs, spring replacements, opener installs, and more. See our actual completed work."}),a.jsx("link",{rel:"canonical",href:"https://www.professionalgaragedoorservices.com/gallery"})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl lg:text-6xl text-secondary-foreground mb-4",children:"Our Work Gallery"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:"Real photos from real jobs — installations, repairs, and everything in between."}),a.jsxs("div",{className:"inline-flex items-center gap-2 bg-card border border-border rounded-full px-4 py-2 shadow-card",children:[a.jsx("div",{className:"flex","aria-label":`${va} out of 5 stars rating`,children:[...Array(5)].map((e,t)=>a.jsx(Mr,{className:"w-4 h-4 fill-primary text-primary"},t))}),a.jsx("span",{className:"text-foreground font-bold",children:va}),a.jsxs("span",{className:"text-muted-foreground",children:["(",ya,"+ reviews)"]})]})]})}),a.jsx("section",{id:"before-after",className:"py-14 bg-background","aria-labelledby":"before-after-heading",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsx("h2",{id:"before-after-heading",className:"font-heading text-3xl text-foreground mb-2",children:"Before & After"}),a.jsx("p",{className:"text-muted-foreground mb-8 max-w-2xl",children:"See the difference a new garage door makes."}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8 mb-10",children:oO.map((e,t)=>a.jsxs("div",{className:"bg-card rounded-xl border border-border shadow-card overflow-hidden",children:[a.jsxs("div",{className:"grid grid-cols-2",children:[a.jsxs("figure",{className:"relative aspect-square overflow-hidden",children:[a.jsx("img",{src:e.before,alt:`${e.title} - before`,className:"w-full h-full object-cover",loading:"lazy"}),a.jsx("figcaption",{className:"absolute top-2 left-2 bg-secondary/90 text-secondary-foreground text-xs font-bold px-2 py-1 rounded",children:"Before"})]}),a.jsxs("figure",{className:"relative aspect-square overflow-hidden",children:[a.jsx("img",{src:e.after,alt:`${e.title} - after`,className:"w-full h-full object-cover",loading:"lazy"}),a.jsx("figcaption",{className:"absolute top-2 left-2 bg-primary/90 text-primary-foreground text-xs font-bold px-2 py-1 rounded",children:"After"})]})]}),a.jsx("p",{className:"text-center text-foreground font-semibold py-3",children:e.title})]},t))}),a.jsx(Qk,{images:sO})]})}),a.jsx("div",{className:"bg-muted/30",children:a.jsx(Nr,{id:"door-installs",title:"New Garage Door Installations",description:"A range of styles and finishes we've installed for homeowners across the Valley.",images:iO})}),a.jsx(Nr,{id:"opener-installs",title:"Opener & Device Installations",images:lO}),a.jsx("div",{className:"bg-muted/30",children:a.jsx(Nr,{id:"gate-repairs",title:"Gate Repairs",images:cO})}),a.jsx(Nr,{id:"spring-replacements",title:"Spring Replacements",images:dO}),a.jsx("div",{className:"bg-muted/30",children:a.jsx(Nr,{id:"motor-installs",title:"Motor Installations",images:uO})}),a.jsx(Nr,{id:"off-track-repairs",title:"Off-Track Repairs",images:hO}),a.jsx("div",{className:"bg-muted/30",children:a.jsx(Nr,{id:"remote-keypad",title:"Remote & Keypad Setup",images:mO})}),a.jsx(Nr,{id:"warehouse",title:"Our Warehouse",description:"A look at our facility here in Tarzana.",images:pO}),a.jsx("div",{className:"bg-muted/30",children:a.jsx(Nr,{id:"more-projects",title:"More Completed Projects",images:fO})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"text-center",children:a.jsxs("p",{className:"text-muted-foreground",children:["Need garage door services? C
300all ",a.jsx("a",{href:"tel:+12132861747",className:"text-primary font-semibold hover:underline",children:"(213) 286-1747"})," (local) or ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary font-semibold hover:underline",children:"(888) 285-4021"})," (toll-free) for a free quote."]})})})})]}),a.jsx(ue,{})]}),yO=()=>a.jsx("div",{className:"w-full h-64 md:h-80 rounded-2xl overflow-hidden shadow-card border border-border",children:a.jsx("iframe",{src:"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3301.8!2d-118.55!3d34.17!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x80c21c1ec0c2e04b%3A0x7338b783f1d7ea86!2sProfessional%20Garage%20Door%20Services!5e0!3m2!1sen!2sus!4v1702000000000!5m2!1sen!2sus",width:"100%",height:"100%",style:{border:0},allowFullScreen:!0,loading:"lazy",referrerPolicy:"no-referrer-when-downgrade",title:"Professional Garage Door Services Location - Tarzana, CA"})}),ll="https://www.professionalgaragedoorservices.com",vO="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",wO=()=>{const{toast:e}=Gc(),[t,r]=b.useState(!1),[n,o]=b.useState(!1),[s,i]=b.useState({firstName:"",lastName:"",email:"",phone:"",zipCode:"",service:"",message:""}),l=async d=>{if(d.preventDefault(),!n){e({title:"Consent Required",description:"Please agree to the Privacy Policy to continue.",variant:"destructive"});return}r(!0);try{const{error:u}=await Mp.functions.invoke("send-contact-email",{body:{firstName:s.firstName,lastName:s.lastName,phone:s.phone,zipCode:s.zipCode,service:s.service,message:s.message}});if(u)throw u;qp(),e({title:"Quote Request Submitted!",description:"We'll get back to you within 24–48 hours on business days."}),i({firstName:"",lastName:"",email:"",phone:"",zipCode:"",service:"",message:""}),o(!1)}catch(u){console.error("Error sending email:",u),e({title:"Error",description:"Failed to send your request. Please try again or call us directly.",variant:"destructive"})}finally{r(!1)}},c=d=>{i(u=>({...u,[d.target.name]:d.target.value}))};return a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Contact Us | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Need garage door help in Tarzana? We're here for you — call (213) 286-1747 or (888) 285-4021, or visit us at 5665 Wilbur Ave. Free quotes!"}),a.jsx("link",{rel:"canonical",href:`${ll}/contact`}),a.jsx("meta",{property:"og:url",content:`${ll}/contact`}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:ll},{"@type":"ListItem",position:2,name:"Contact Us",item:`${ll}/contact`}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Contact Us"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto",children:"Visit our location or get in touch for a free quote"})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-12 max-w-6xl mx-auto",children:[a.jsxs("div",{className:"space-y-8",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6",children:"Our Location"}),a.jsxs("div",{className:"bg-card rounded-2xl p-6 shadow-card border border-border space-y-4",children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Professional Garage Door Services, LLC"}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(Fc,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Address"}),a.jsx("p",{className:"text-muted-foreground",children:"5665 Wilbur Ave"}),a.jsx("p",{className:"text-muted-foreground",children:"Tarzana, CA 91356"})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(et,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Local Phone"}),a.jsx("a",{href:"tel:+12132861747",className:"text-primary hover:underline text-lg",children:"(213) 286-1747"})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(et,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Toll-Free Phone"}),a.jsx("a",{href:"tel:+18882854021",className:"text-primary hover:underline text-lg",children:"(888) 285-4
300021"})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(sp,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Email"}),a.jsx("a",{href:"mailto:[email protected]",className:"text-primary hover:underline",children:"[email protected]"})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(fe,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Hours"}),a.jsx("p",{className:"text-muted-foreground",children:"24/7 Emergency Service"}),a.jsx("p",{className:"text-muted-foreground",children:"Mon-Sun: Always Available"}),a.jsx("p",{className:"text-muted-foreground text-sm mt-1",children:"Customer service is available Monday through Sunday. We respond to customer inquiries within 24–48 hours on business days."})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(at,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"Contractor License"}),a.jsxs("p",{className:"text-muted-foreground",children:["CSLB C-61/D-28 License:"," ",a.jsxs("a",{href:vO,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["#1117899 ",a.jsx(pn,{className:"w-3 h-3"})]})]})]})]}),a.jsxs("div",{className:"flex items-start gap-4",children:[a.jsx("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0",children:a.jsx(at,{className:"w-6 h-6 text-primary"})}),a.jsxs("div",{children:[a.jsx("p",{className:"font-semibold text-foreground text-lg",children:"BBB"}),a.jsx("p",{className:"text-muted-foreground",children:a.jsxs("a",{href:"https://www.bbb.org/us/ca/tarzana/profile/garage-doors/professional-garage-door-services-1216-1000024888",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["View BBB Profile ",a.jsx(pn,{className:"w-3 h-3"})]})})]})]})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-heading text-xl text-foreground mb-4",children:"Find Us"}),a.jsx(yO,{})]})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6",children:"Get a Free Quote"}),a.jsxs("form",{onSubmit:l,className:"bg-card rounded-2xl p-6 shadow-card border border-border space-y-5",children:[a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[a.jsxs("div",{children:[a.jsx("label",{htmlFor:"firstName",className:"block text-foreground font-semibold mb-2",children:"First Name *"}),a.jsx("input",{type:"text",id:"firstName",name:"firstName",value:s.firstName,onChange:c,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"John"})]}),a.jsxs("div",{children:[a.jsx("label",{htmlFor:"lastName",className:"block text-foreground font-semibold mb-2",children:"Last Name *"}),a.jsx("input",{type:"text",id:"lastName",name:"lastName",value:s.lastName,onChange:c,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"Doe"})]})]}),a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-5",children:[a.jsxs("div",{children:[a.jsx("label",{htmlFor:"phone",className:"block text-foreground font-semibold mb-2",children:"Phone *"}),a.jsx("input",{type:"tel",id:"phone",name:"phone",value:s.phone,onChange:c,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"(123) 456-7890"})]}),a.jsxs("div",{children:[a.jsx("label",{htmlFor:"zipCode",className:"block text-foreground font-semibold mb-2",children:"ZIP Co
300de *"}),a.jsx("input",{type:"text",id:"zipCode",name:"zipCode",value:s.zipCode,onChange:c,required:!0,inputMode:"numeric",maxLength:10,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",placeholder:"91356"})]})]}),a.jsxs("div",{children:[a.jsx("label",{htmlFor:"service",className:"block text-foreground font-semibold mb-2",children:"Service Needed *"}),a.jsxs("select",{id:"service",name:"service",value:s.service,onChange:c,required:!0,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",children:[a.jsx("option",{value:"",children:"Select a service"}),a.jsx("option",{value:"installation",children:"Garage Door Installation"}),a.jsx("option",{value:"repair",children:"Garage Door Repair"}),a.jsx("option",{value:"spring",children:"Spring Replacement"}),a.jsx("option",{value:"opener",children:"Opener Installation"}),a.jsx("option",{value:"maintenance",children:"Maintenance"}),a.jsx("option",{value:"emergency",children:"Emergency Service"})]})]}),a.jsxs("div",{children:[a.jsx("label",{htmlFor:"message",className:"block text-foreground font-semibold mb-2",children:"Message"}),a.jsx("textarea",{id:"message",name:"message",value:s.message,onChange:c,rows:4,className:"w-full px-4 py-3 rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none resize-none",placeholder:"Tell us about your project..."})]}),a.jsxs("div",{className:"flex items-start gap-3",children:[a.jsx(td,{id:"contactConsent",checked:n,onCheckedChange:d=>o(d),className:"mt-1"}),a.jsxs("label",{htmlFor:"contactConsent",className:"text-sm text-muted-foreground cursor-pointer",children:["I agree to the"," ",a.jsx(A,{to:"/privacy-policy",className:"text-primary hover:underline",target:"_blank",children:"Privacy Policy"})," ","and"," ",a.jsx(A,{to:"/terms-and-conditions",className:"text-primary hover:underline",target:"_blank",children:"Terms & Conditions"})," ","and consent to receive calls/texts about my quote. Message and data rates may apply."]})]}),a.jsx(re,{type:"submit",variant:"hero",size:"xl",className:"w-full",disabled:t||!n,children:t?"Sending...":"Request Free Quote"})]})]})]})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]})},cl="https://www.professionalgaragedoorservices.com",xO="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",bO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Privacy Policy | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Privacy Policy for Professional Garage Door Services, LLC. Learn how we collect, use, and protect your personal information."}),a.jsx("link",{rel:"canonical",href:`${cl}/privacy-policy`}),a.jsx("meta",{property:"og:url",content:`${cl}/privacy-policy`}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:cl},{"@type":"ListItem",position:2,name:"Privacy Policy",item:`${cl}/privacy-policy`}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-12",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Privacy Policy"}),a.jsx("p",{className:"text-secondary-foreground/80",children:"Effective Date: December 28, 2025"})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto prose prose-lg",children:a.jsxs("div",{className:"bg-card rounded-2xl p-8 md:p-12 shadow-card border border-border space-y-8",children:[a.jsx("p",{className:"text-muted-foreground",children:'Professional Garage Door Services, LLC ("we," "us," or "our") respects your privacy and is committed to protecting your personal information. This Privacy Policy explains how we 
300collect, use, disclose, and safeguard personal information when you visit our website, contact us, or request services.'}),a.jsx("p",{className:"text-muted-foreground",children:"By using our website or services, you agree to the practices described in this Privacy Policy."}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"1. Information We Collect"}),a.jsx("p",{className:"text-muted-foreground mb-4",children:"We may collect the following categories of personal information:"}),a.jsx("h3",{className:"font-semibold text-foreground text-lg mb-2",children:"Information You Provide"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Name"}),a.jsx("li",{children:"Phone number"}),a.jsx("li",{children:"Email address"}),a.jsx("li",{children:"Service address"}),a.jsx("li",{children:"Information submitted through contact forms, booking forms, or live chat"}),a.jsx("li",{children:"Communications via phone, SMS, or email"})]}),a.jsx("h3",{className:"font-semibold text-foreground text-lg mb-2",children:"Automatically Collected Information"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"IP address"}),a.jsx("li",{children:"Browser type and device information"}),a.jsx("li",{children:"Pages visited and interactions with our website"}),a.jsx("li",{children:"Cookies and similar tracking technologies"})]}),a.jsx("h3",{className:"font-semibold text-foreground text-lg mb-2",children:"Call & Messaging Information"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1",children:[a.jsx("li",{children:"Call recordings (where permitted by law)"}),a.jsx("li",{children:"SMS message content and timestamps"}),a.jsx("li",{children:"Records of communication preferences and consent"})]})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"2. How We Use Personal Information"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"We use personal information to:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1",children:[a.jsx("li",{children:"Respond to service inquiries and requests"}),a.jsx("li",{children:"Schedule and coordinate service appointments"}),a.jsx("li",{children:"Communicate with customers regarding appointments, service updates, and support"}),a.jsx("li",{children:"Facilitate dispatching and service fulfillment"}),a.jsx("li",{children:"Improve our website, operations, and customer experience"}),a.jsx("li",{children:"Comply with legal, regulatory, and carrier requirements"}),a.jsx("li",{children:"Protect against fraud, abuse, or misuse of our services"})]})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"3. Service Providers, Subcontractors & Partner Fulfillment"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"To fulfill customer service requests, we may share personal information with:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Independent technicians and subcontractors"}),a.jsx("li",{children:"Service providers that assist with scheduling, dispatching, communications, payment processing, or operations"}),a.jsx("li",{children:"Partner service providers or companies engaged to complete requested services"})]}),a.jsx("p",{className:"text-muted-foreground mb-4",children:"In some cases, requested services may be performed by independent third-party service providers or partner companies who are not our employees but are engaged to fulfill customer requests."}),a.jsx("p",{className:"text-muted-foreground",children:"Personal information is shared solely as necessary to schedule, dispatch, and complete requested services. Such parties are authorized to use personal information only for service fulfillment purposes and not for unrelated marketing or independent use."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"4. Sale of Personal Information"}),a.jsx("p",{className:"text-muted-foreground",children:"We do not sell personal information as defined under the California Consumer Privacy Act (CCPA/CPRA)."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"5. SMS & Text Messaging Communications"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"If you opt in to receive SMS messages from Professional Garage Door Services, we may send:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Appointment confirmations and reminders"}),a.jsx("li",{children:"Scheduling updates"}),a.jsx("li",{children:"Service notifications"}),a.jsx("li",{children:"Customer support communications"}),a.jsx("li",{children:"Promotional or informational messages (when applicable)"})]}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"Message frequency may vary. Message and data rates may apply."}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"You may opt out at any time by replying STOP to any message. For assistance, reply HELP or visit our website."}),a.jsx("p",{className:"text-muted-foreground font-semibold",children:"SMS consent is not shared with third parties or affiliates."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"6. Cookies, Tracking Technologies & Analytics"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"We use cookies, session recording tools, and similar technologies to:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Analyze website traffic and performance"}),a.jsx("li",{children:"Improve functionality and user experience"}),a.jsx("li",{children:"Support marketing and advertising efforts"}),a.jsx("li",{children:"Record user sessions for quality improvement (e.g., Flock, a session recording and heatmap anal
300ytics tool)"})]}),a.jsxs("p",{className:"text-muted-foreground mb-2",children:[a.jsx("strong",{className:"text-foreground",children:"Session Recording:"})," We use Flock, a session recording and heatmap analytics service, to understand how visitors interact with our website. Flock may record mouse movements, clicks, scrolling behavior, and page views. This data is used solely to improve our website's usability and user experience."]}),a.jsx("p",{className:"text-muted-foreground",children:"You may disable cookies through your browser settings; however, some website features may not function properly."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"7. Data Retention & Security"}),a.jsx("p",{className:"text-muted-foreground mb-4",children:"We retain personal information only for as long as reasonably necessary to fulfill business, legal, and operational purposes. We implement reasonable administrative, technical, and physical safeguards designed to protect personal information."}),a.jsx("p",{className:"text-muted-foreground",children:"No data transmission or storage system can be guaranteed to be 100% secure."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"8. California Privacy Rights (CCPA / CPRA)"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"California residents have the right to:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Know what personal information we collect and how it is used"}),a.jsx("li",{children:"Request access to personal information"}),a.jsx("li",{children:"Request deletion of personal information"}),a.jsx("li",{children:"Opt out of the sale or sharing of personal information (we do not sell personal information)"}),a.jsx("li",{children:"Not be discriminated against for exercising privacy rights"})]}),a.jsx("p",{className:"text-muted-foreground",children:"Requests may be submitted using the contact information below."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"9. Children's Privacy"}),a.jsx("p",{className:"text-muted-foreground",children:"Our services are not intended for individuals under the age of 13. We do not knowingly collect personal information from children."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"10. Governing Law"}),a.jsx("p",{className:"text-muted-foreground",children:"This Privacy Policy shall be governed by and construed in accordance with the laws of the State of California, United States."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"11. Changes to This Privacy Policy"}),a.jsx("p",{className:"text-muted-foreground",children:"We may update this Privacy Policy at any time. Updates will be posted on this page with a revised effective date."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"12. Contact Information"}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"If you have questions about this Privacy Policy or our privacy practices, contact us:"}),a.jsxs("div",{className:"text-muted-foreground space-y-1",children:[a.jsx("p",{className:"font-semibold text-foreground",children:"Professional Garage Door Services, LLC"}),a.jsx("p",{children:"5665 Wilbur Ave, Tarzana, CA 91356"}),a.jsxs("p",{children:["Local Phone: ",a.jsx("a",{href:"tel:+12132861747",className:"text-primary hover:underline",children:"(213) 286-1747"})]}),a.jsxs("p",{children:["Toll-Free Phone: ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary hover:underline",children:"(888) 285-4021"})]}),a.jsxs("p",{children:["Email: ",a.jsx("a",{href:"mailto:[email protected]",className:"text-primary hover:underline",children:"[email protected]"})]}),a.jsxs("p",{children:["CSLB License: ",a.jsx("a",{href:xO,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#1117899"})]})]})]}),a.jsxs("div",{className:"border-t border-border pt-8",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6",children:"SMS Terms of Service"}),a.jsx("p",{className:"text-muted-foreground mb-4",children:"By opting into SMS messages from Professional Garage Door Services through a website form, phone call, or other method, you agree to re
300ceive SMS messages related to our services."}),a.jsx("h3",{className:"font-semibold text-foreground text-lg mb-2",children:"Message Types"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-1 mb-4",children:[a.jsx("li",{children:"Appointment reminders"}),a.jsx("li",{children:"Scheduling updates"}),a.jsx("li",{children:"Service notifications"}),a.jsx("li",{children:"Customer support communications"}),a.jsx("li",{children:"Promotional or informational messages (when applicable)"})]}),a.jsx("p",{className:"text-muted-foreground mb-2",children:"Message frequency may vary. Message and data rates may apply."}),a.jsxs("p",{className:"text-muted-foreground mb-2",children:["Reply ",a.jsx("strong",{children:"STOP"})," to opt out at any time."]}),a.jsxs("p",{className:"text-muted-foreground",children:["Reply ",a.jsx("strong",{children:"HELP"})," for assistance or visit our website."]})]})]})})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),xs="https://www.professionalgaragedoorservices.com",My="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",kO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Terms & Conditions | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Terms and Conditions for Professional Garage Door Services, LLC. Review our service terms, cancellation policy, liability, and dispute resolution."}),a.jsx("link",{rel:"canonical",href:`${xs}/terms-and-conditions`}),a.jsx("meta",{property:"og:url",content:`${xs}/terms-and-conditions`}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:xs},{"@type":"ListItem",position:2,name:"Terms & Conditions",item:`${xs}/terms-and-conditions`}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-12",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Terms & Conditions"}),a.jsx("p",{className:"text-secondary-foreground/80",children:"Effective Date: December 28, 2025"})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto",children:a.jsxs("div",{className:"bg-card rounded-2xl p-8 md:p-12 shadow-card border border-border space-y-8",children:[a.jsxs("p",{className:"text-muted-foreground",children:['Welcome to Professional Garage Door Services, LLC ("Company," "we," "us," or "our"). These Terms and Conditions ("Terms") govern your use of our website at'," ",a.jsx("a",{href:xs,className:"text-primary hover:underline",children:"www.professionalgaragedoorservices.com"})," ","and the services we provide. By accessing our website or requesting our services, you agree to be bound by these Terms."]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"1. Services"}),a.jsxs("p",{className:"text-muted-foreground mb-2",children:["Professional Garage Door Services, LLC provides garage door installation, repair, maintenance, and related services. We are licensed by the California Contractors State License Board (CSLB) under"," ",a.jsx("a",{href:My,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"License #1117899"})," (C-61/D-28 — Doors, Gates, and Activating Devices)."]})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"2. Quotes & Estimates"}),a.jsx("p",{className:"text-muted-foreground",children:"All quotes and estimates are provided free of charge and without obligation. Quotes are valid for 30 days from the date of issuance unless otherwise stated. Final pricing may vary based on on-site inspection, additional work required, or material changes requested by the customer. A written agreement or work order will be provided before any work commences."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"3. Scheduling & Appointments"}),a.jsx("p",{className:"text-muted-foreground",children:"After submitting a quote request, our team will c
300ontact you to schedule an appointment. We strive to respond to all inquiries within 24–48 hours on business days. Appointment times are approximate and may be subject to change based on service demand and emergency calls."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"4. Cancellation Policy"}),a.jsx("p",{className:"text-muted-foreground",children:"You may cancel or reschedule a scheduled appointment at no charge by notifying us at least 24 hours before the scheduled time. Cancellations made less than 24 hours in advance may be subject to a service call fee. Emergency services are non-cancellable once a technician has been dispatched."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"5. Payment Terms"}),a.jsx("p",{className:"text-muted-foreground",children:"Payment is due upon completion of services unless otherwise agreed in writing. We accept major credit cards, debit cards, checks, and cash. For larger projects, a deposit may be required before work begins. Any outstanding balances not paid within 30 days may be subject to a late fee of 1.5% per month."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"6. Warranty"}),a.jsx("p",{className:"text-muted-foreground",children:"All workmanship is backed by our service guarantee. Manufacturer warranties apply to all parts and materials as specified by the manufacturer. Warranty claims must be reported to us promptly. Warranty does not cover damage caused by misuse, neglect, unauthorized modifications, or acts of nature."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"7. Limitation of Liability"}),a.jsx("p",{className:"text-muted-foreground",children:"To the fullest extent permitted by law, Professional Garage Door Services, LLC shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising from or related to the use of our services or website. Our total liability shall not exceed the amount paid by the customer for the specific service giving rise to the claim."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"8. Intellectual Property"}),a.jsx("p",{className:"text-muted-foreground",children:"All content on this website, including text, images, logos, and design elements, is the property of Professional Garage Door Services, LLC and is protected by applicable intellectual property laws. You may not reproduce, distribute, or use any content without our prior written consent."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"9. User Responsibilities"}),a.jsx("p",{className:"text-muted-foreground",children:"By using our website and services, you agree to provide accurate information in all forms and communications, ensure safe access for our technicians to perform services, and comply with all applicable laws and regulations."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"10. Dispute Resolution"}),a.jsx("p",{className:"text-muted-foreground",children:"Any disputes arising from these Terms or our services shall first be attempted to be resolved through good-faith negotiation. If a resolution cannot be reached, disputes shall be submitted to binding arbitration in the State of California, in accordance with the rules of the American Arbitration Association. Each party shall bear its own costs of arbitration."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"11. Governing Law"}),a.jsx("p",{className:"text-muted-foreground",children:"These Terms shall be governed by and construed in accordance with the laws of the State of California, United States, without regard to its conflict of law provisions."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"12. Changes to These Terms"}),a.jsx("p",{className:"text-muted-foreground",children:"We reserve the right to update or modify these Terms at any time. Changes will be posted on this page with a revised effective date. Your continued use of our website or services after changes are posted constitutes your acceptance of the updated Terms."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"13. Contact Information"}),a.jsxs("div",{className:"text-muted-foreground space-y-1",children:[a.jsx("p",{className:"font-semibold text-foreground",children:"Professional Garage Door Services, LLC"}),a.jsx("p",{children:"5665 Wilbur Ave, Tarzana, CA 91356"}),a.jsxs("p",{children:["Local Phone: ",a.jsx("a",{href:"tel:+12132861747",className:"text-primary hover:underline",children:"(213) 286-1747"})]}),a.jsxs("p",{children:["Toll-Free Phone: ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary hover:underline",children:"(888) 285-4
300021"})]}),a.jsxs("p",{children:["Email: ",a.jsx("a",{href:"mailto:[email protected]",className:"text-primary hover:underline",children:"[email protected]"})]}),a.jsxs("p",{children:["CSLB License: ",a.jsx("a",{href:My,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#1117899"})]})]})]})]})})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),jO="/assets/Group-Photo-Outside-Warehouse-Large-38b613-Cc6NSntw.webp",dl="https://www.professionalgaragedoorservices.com",qy="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",SO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"About Us | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Learn about Professional Garage Door Services, LLC — a licensed (CSLB #1117899) and insured garage door company. Meet our team and discover our commitment to quality."}),a.jsx("link",{rel:"canonical",href:`${dl}/about`}),a.jsx("meta",{property:"og:title",content:"About Us | Professional Garage Door Services"}),a.jsx("meta",{property:"og:description",content:"Licensed & insured garage door professionals. CSLB #1117899."}),a.jsx("meta",{property:"og:url",content:`${dl}/about`}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:dl},{"@type":"ListItem",position:2,name:"About Us",item:`${dl}/about`}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"About Us"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto",children:"Your trusted partner for professional garage door services since 2023."})]})}),a.jsx("section",{className:"py-12 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("img",{src:jO,alt:"The Professional Garage Door Services team outside our Tarzana warehouse",className:"w-full h-auto rounded-2xl shadow-card border border-border",loading:"lazy"}),a.jsx("p",{className:"text-center text-muted-foreground text-sm mt-3",children:"Our team outside our Tarzana warehouse."})]})})}),a.jsx("section",{className:"py-16 bg-background pt-0",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto",children:a.jsxs("div",{className:"bg-card rounded-2xl p-8 md:p-12 shadow-card border border-border space-y-8",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Who We Are"}),a.jsxs("p",{className:"text-muted-foreground leading-relaxed mb-4",children:[a.jsx("strong",{className:"text-foreground",children:"Professional Garage Door Services, LLC"})," is a fully licensed and insured garage door company serving residential and commercial customers. We hold a California Contractors State License Board (CSLB)"," ",a.jsxs("a",{href:qy,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["C-61/D-28 License #1117899 ",a.jsx(pn,{className:"w-3 h-3"})]}),"."]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed mb-4",children:"Our team of certified technicians brings combined decades of hands-on experience in garage door installation, repair, and maintenance. We are committed to delivering honest, reliable, and high-quality service on every job."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"Whether you need a new garage door installed, an emergency spring replacement at 2 AM, or routine preventive maintenance, we're here to help — 24 hours a day, 7 days a week."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"What We Do"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed mb-4",children:"We provide comprehensive garage door services including:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-2",children:[a.jsx("li",{children:"Garage door installation (residential & commercial)"}),a.jsx("li",{children:"Garage door repair (panels, tracks, cables, rollers)"}),a.jsx("li",{children:"Torsion and extension spring replacement"}),a.jsx("li",{children:"Smart garage door opener installation & programming"}),a.jsx("li",{children:"Preventive maintenance programs"}),a.jsx("li",{children:"24/7 emergency repair services"}),a.jsx("li",{children:"Gate installation and repair"})]})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"How We Serve You"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed mb-4",children:"From your first call to project completion, we prioritize transparency, quality, and your satisfaction:"}),a.jsxs("ul",{className:"list-disc pl-6 text-muted-foreground space-y-2",children:[a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Free estimates"})," — No obligation quotes on all services"]}),a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Upfront pricing"})," — No hidden fees or surprise charges"]}),a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Licensed technicians"})," — CSLB licensed and fully insured"]}),a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Fast response"})," — Same-day service available, 24/7 emergency calls"]}),a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Quality materials"})," — We use premium parts and products from trusted manufacturers"]}),a.jsxs("li",{children:[a.jsx("strong",{className:"text-foreground",children:"Warranty"})," — All work backed by our service guarantee"]})]})]}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 ga
300p-4",children:[a.jsxs("div",{className:"bg-muted rounded-xl p-4 text-center",children:[a.jsx(at,{className:"w-8 h-8 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Licensed & Insured"}),a.jsx("p",{className:"text-muted-foreground text-xs",children:"CSLB #1117899"})]}),a.jsxs("div",{className:"bg-muted rounded-xl p-4 text-center",children:[a.jsx(fe,{className:"w-8 h-8 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"24/7 Service"}),a.jsx("p",{className:"text-muted-foreground text-xs",children:"Always Available"})]}),a.jsxs("div",{className:"bg-muted rounded-xl p-4 text-center",children:[a.jsx(Mr,{className:"w-8 h-8 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"4.9 Stars"}),a.jsx("p",{className:"text-muted-foreground text-xs",children:"on Google"})]}),a.jsxs("div",{className:"bg-muted rounded-xl p-4 text-center",children:[a.jsx(op,{className:"w-8 h-8 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Top Rated"}),a.jsx("p",{className:"text-muted-foreground text-xs",children:"on Angi"})]}),a.jsxs("a",{href:"https://www.bbb.org/us/ca/tarzana/profile/garage-doors/professional-garage-door-services-1216-1000024888",target:"_blank",rel:"noopener noreferrer",className:"bg-muted rounded-xl p-4 text-center hover:bg-muted/70 transition-colors block",children:[a.jsx(at,{className:"w-8 h-8 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"BBB"}),a.jsx("p",{className:"text-muted-foreground text-xs",children:"View Profile"})]})]}),a.jsxs("div",{className:"border-t border-border pt-8",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Contact Information"}),a.jsxs("div",{className:"space-y-3",children:[a.jsx("p",{className:"text-foreground font-semibold text-lg",children:"Professional Garage Door Services, LLC"}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(et,{className:"w-5 h-5 text-primary"}),a.jsx("a",{href:"tel:+12132861747",className:"text-primary hover:underline",children:"Local: (213) 286-1747"})]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(et,{className:"w-5 h-5 text-primary"}),a.jsx("a",{href:"tel:+18882854021",className:"text-primary hover:underline",children:"Toll-Free: (888) 285-4
300021"})]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(sp,{className:"w-5 h-5 text-primary"}),a.jsx("a",{href:"mailto:[email protected]",className:"text-primary hover:underline",children:"[email protected]"})]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(Fc,{className:"w-5 h-5 text-primary"}),a.jsx("span",{className:"text-muted-foreground",children:"5665 Wilbur Ave, Tarzana, CA 91356"})]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(at,{className:"w-5 h-5 text-primary"}),a.jsxs("span",{className:"text-muted-foreground",children:["CSLB License:"," ",a.jsx("a",{href:qy,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#1117899"})]})]})]})]})]})})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]});var dd="Collapsible",[NO,Xk]=ba(dd),[CO,tf]=NO(dd),Zk=b.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:i,...l}=e,[c,d]=xi({prop:n,defaultProp:o??!1,onChange:i,caller:dd});return a.jsx(CO,{scope:r,disabled:s,contentId:fb(),open:c,onOpenToggle:b.useCallback(()=>d(u=>!u),[d]),children:a.jsx(_e.div,{"data-state":nf(c),"data-disabled":s?"":void 0,...l,ref:t})})});Zk.displayName=dd;var ej="CollapsibleTrigger",tj=b.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=tf(ej,r);return a.jsx(_e.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":nf(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:je(e.onClick,o.onOpenToggle)})});tj.displayName=ej;var rf="CollapsibleContent",rj=b.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=tf(rf,e.__scopeCollapsible);return a.jsx(wi,{present:r||o.open,children:({present:s})=>a.jsx(TO,{...n,ref:t,present:s})})});rj.displayName=rf;var TO=b.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,i=tf(rf,r),[l,c]=b.useState(n),d=b.useRef(null),u=st(t,d),h=b.useRef(0),p=h.current,m=b.useRef(0),v=m.current,y=i.open||l,x=b.useRef(y),g=b.useRef(void 0);return b.useEffect(()=>{const f=requestAnimationFrame(()=>x.current=!1);return()=>cancelAnimationFrame(f)},[]),wr(()=>{const f=d.current;if(f){g.current=g.current||{transitionDuration:f.style.transitionDuration,animationName:f.style.animationName},f.style.transitionDuration="0s",f.style.animationName="none";const w=f.getBoundingClientRect();h.current=w.height,m.current=w.width,x.current||(f.style.transitionDuration=g.current.transitionDuration,f.style.animationName=g.current.animationName),c(n)}},[i.open,n]),a.jsx(_e.div,{"data-state":nf(i.open),"data-disabled":i.disabled?"":void 0,id:i.contentId,hidden:!y,...s,ref:u,style:{"--radix-collapsible-content-height":p?`${p}px`:void 0,"--radix-collapsible-content-width":v?`${v}px`:void 0,...e.style},children:y&&o})});function nf(e){return e?"open":"closed"}var _O=Zk,EO=tj,IO=rj,AO=b.createContext(void 0);function RO(e){const t=b.useContext(AO);return e||t||"ltr"}var ir="Accordion",PO=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[af,OO,DO]=jx(ir),[ud,Z8]=ba(ir,[DO,Xk]),of=Xk(),nj=E.forwardRef((e,t)=>{const{type:r,...n}=e,o=n,s=n;return a.jsx(af.Provider,{scope:e.__scopeAccordion,children:r==="multiple"?a.jsx(qO,{...s,ref:t}):a.jsx(MO,{...o,ref:t})})});nj.displayName=ir;var[aj,LO]=ud(ir),[oj,WO]=ud(ir,{collapsible:!1}),MO=E.forwardRef((e,t)=>{const{value:r,defaultValue:n,onValueChange:o=()=>{},collapsible:s=!1,...i}=e,[l,c]=xi({prop:r,defaultProp:n??"",onChange:o,caller:ir});return a.jsx(aj,{scope:e.__scopeAccordion,value:E.useMemo(()=>l?[l]:[],[l]),onItemOpen:c,onItemClose:E.useCallback(()=>s&&c(""),[s,c]),children:a.jsx(oj,{scope:e.__scopeAccordion,collapsible:s,children:a.jsx(sj,{...i,ref:t})})})}),qO=E.forwardRef((e,t)=>{const{value:r,defaultValue:n,onValueChange:o=()=>{},...s}=e,[i,l]=xi({prop:r,defaultProp:n??[],onChange:o,caller:ir}),c=E.useCallback(u=>l((h=[])=>[...h,u]),[l]),d=E.useCallback(u=>l((h=[])=>h.filter(p=>p!==u)),[l]);return a.jsx(aj,{scope:e.__scopeAccordion,value:i,onItemOpen:c,onItemClose:d,children:a.jsx(oj,{scope:e.__scopeAccordion,collapsible:!0,children:a.jsx(sj,{...s,ref:t})})})}),[zO,hd]=ud(ir),sj=E.forwardRef((e,t)=>
300{const{__scopeAccordion:r,disabled:n,dir:o,orientation:s="vertical",...i}=e,l=E.useRef(null),c=st(l,t),d=OO(r),h=RO(o)==="ltr",p=je(e.onKeyDown,m=>{var _;if(!PO.includes(m.key))return;const v=m.target,y=d().filter(P=>{var O;return!((O=P.ref.current)!=null&&O.disabled)}),x=y.findIndex(P=>P.ref.current===v),g=y.length;if(x===-1)return;m.preventDefault();let f=x;const w=0,k=g-1,j=()=>{f=x+1,f>k&&(f=w)},S=()=>{f=x-1,f<w&&(f=k)};switch(m.key){case"Home":f=w;break;case"End":f=k;break;case"ArrowRight":s==="horizontal"&&(h?j():S());break;case"ArrowDown":s==="vertical"&&j();break;case"ArrowLeft":s==="horizontal"&&(h?S():j());break;case"ArrowUp":s==="vertical"&&S();break}const N=f%g;(_=y[N].ref.current)==null||_.focus()});return a.jsx(zO,{scope:r,disabled:n,direction:o,orientation:s,children:a.jsx(af.Slot,{scope:r,children:a.jsx(_e.div,{...i,"data-orientation":s,ref:c,onKeyDown:n?void 0:p})})})}),Nc="AccordionItem",[$O,sf]=ud(Nc),ij=E.forwardRef((e,t)=>{const{__scopeAccordion:r,value:n,...o}=e,s=hd(Nc,r),i=LO(Nc,r),l=of(r),c=fb(),d=n&&i.value.includes(n)||!1,u=s.disabled||e.disabled;return a.jsx($O,{scope:r,open:d,disabled:u,triggerId:c,children:a.jsx(_O,{"data-orientation":s.orientation,"data-state":mj(d),...l,...o,ref:t,disabled:u,open:d,onOpenChange:h=>{h?i.onItemOpen(n):i.onItemClose(n)}})})});ij.displayName=Nc;var lj="AccordionHeader",cj=E.forwardRef((e,t)=>{const{__scopeAccordion:r,...n}=e,o=hd(ir,r),s=sf(lj,r);return a.jsx(_e.h3,{"data-orientation":o.orientation,"data-state":mj(s.open),"data-disabled":s.disabled?"":void 0,...n,ref:t})});cj.displayName=lj;var nm="AccordionTrigger",dj=E.forwardRef((e,t)=>{const{__scopeAccordion:r,...n}=e,o=hd(ir,r),s=sf(nm,r),i=WO(nm,r),l=of(r);return a.jsx(af.ItemSlot,{scope:r,children:a.jsx(EO,{"aria-disabled":s.open&&!i.collapsible||void 0,"data-orientation":o.orientation,id:s.triggerId,...l,...n,ref:t})})});dj.displayName=nm;var uj="AccordionContent",hj=E.forwardRef((e,t)=>{const{__scopeAccordion:r,...n}=e,o=hd(ir,r),s=sf(uj,r),i=of(r);return a.jsx(IO,{role:"region","aria-labelledby":s.triggerId,"data-orientation":o.orientation,...i,...n,ref:t,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});hj.displayName=uj;function mj(e){return e?"open":"closed"}var GO=nj,BO=ij,HO=cj,pj=dj,fj=hj;const Ni=GO,ns=b.forwardRef(({className:e,...t},r)=>a.jsx(BO,{ref:r,className:_t("border-b",e),...t}));ns.displayName="AccordionItem";const as=b.forwardRef(({className:e,children:t,...r},n)=>a.jsx(HO,{className:"flex",children:a.jsxs(pj,{ref:n,className:_t("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...r,children:[t,a.jsx(Xx,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));as.displayName=pj.displayName;const os=b.forwardRef(({className:e,children:t,...r},n)=>a.jsx(fj,{ref:n,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...r,children:a.jsx("div",{className:_t("pb-4 pt-0",e),children:t})}));os.displayName=fj.displayName;const ul="https://www.professionalgaragedoorservices.com",FO="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",zy=[{question:"Are you licensed and insured?",answer:"Yes. Professional Garage Door Services, LLC holds a California Contractors State License Board (CSLB) C-61/D-28 License #1117899 (Doors, Gates, and Activating Devices). We are fully insured with general liability and workers' compensation coverage. You can verify our license at the CSLB website.",cslbLink:!0},{question:"What areas do you serve?",answer:"We serve the greater Los Angeles area including Tarzana, Canoga Park, Encino, Woodland Hills, Sherman Oaks, Reseda, Northridge, Calabasas, West Hills, Chatsworth, Granada Hills, Van Nuys, Studio City, North Hollywood, Burbank, Glendale, Pasadena, Santa Monica, Beverly Hills, and surrounding communities throughout Los Angeles County."},{question:"What happens after I submit a quote request?",answer:"After you submit a quote request through our website or by phone, a member of our team will c
300ontact you within 24–48 hours on business days to discuss your needs, provide an estimate, and schedule an appointment at your convenience. There is no obligation and no cost for the estimate."},{question:"Do you offer emergency service?",answer:"Yes, we provide 24/7 emergency garage door repair services. If your garage door is stuck open, won't close, has a broken spring, or poses a safety hazard, call us anytime at (213) 286-1747 (local) or (888) 285-4021 (toll-free) and we'll dispatch a technician as quickly as possible."},{question:"How is pricing determined?",answer:"Pricing depends on the type of service, the parts and materials required, and the complexity of the job. We provide upfront, transparent pricing before any work begins — no hidden fees or surprise charges. For most standard repairs, we can provide a firm quote over the phone. For installations or complex projects, an on-site inspection may be needed."},{question:"What types of garage doors do you install?",answer:"We install all types of residential and commercial garage doors including steel, wood, aluminum, fiberglass, and composite doors. We carry doors in various styles including raised panel, carriage house, contemporary/modern, and custom designs. We work with all major manufacturers."},{question:"Do you offer warranties on your work?",answer:"Yes. All workmanship is backed by our service guarantee. Additionally, all parts and materials carry the manufacturer's warranty. We stand behind our work and will address any issues promptly."},{question:"How long does a typical garage door installation take?",answer:"A standard single garage door installation typically takes 4–6 hours. Double door installations may take 6–8 hours. Complex custom installations or commercial projects may require additional time. We'll provide a time estimate when we schedule your appointment."},{question:"Can I get a military or first responder discount?",answer:"Yes! We proudly offer special discounts for active military, veterans, and first responders. Please mention your status when scheduling your appointment or ask about our military discount when you call."},{question:"What payment methods do you accept?",answer:"We accept major credit cards (Visa, Mastercard, American Express), debit cards, checks, and cash. For larger projects, financing options or payment plans may be available — ask your technician for details."},{question:"How much does it cost to replace a garage door spring?",answer:"Most garage door spring replacements in the Tarzana and LA area range from about $150 to $350 for a single torsion or extension spring, depending on the size, cycle rating, and whether one or both springs need replacing. We always inspect the door and give you an exact, upfront price before starting any work — never a surprise bill."},{question:"Why is my garage door making a loud grinding or squeaking noise?",answer:"Noisy garage doors are usually caused by worn rollers, loose hardware, a lack of lubrication, or a failing opener component. Grinding often points to metal-on-metal wear, while squeaking is typically a lubrication issue. Our technicians can diagnose the exact cause and quiet your door down in a single visit."},{question:"How often should I service my garage door?",answer:"We recommend a professional tune-up once a year to keep your garage door safe, quiet, and running smoothly. Regular maintenance — lubricating moving parts, checking springs and cables, and testing the auto-reverse safety feature — helps you avoid costly emergency repairs and extends the life of your door and opener."},{question:"Is it safe to replace a garage door spring myself?",answer:"We strongly advise against DIY spring replacement. Garage door springs are under extreme tension and can cause serious injury or property damage if handled without the proper tools and training. It's one of the few garage door repairs we recommend always leaving to a licensed, insured professional."},{question:"What should I do if my garage door opener stops working?",answer:"First, check that the opener is plugged in and the breaker hasn't tripped, and replace the remote batteries. If the door still won't respond, the issue could be a burnt-out motor, misaligned safety sensors, or a broken drive gear. Give us a call and we'll troubleshoot it over the phone or send a technician out to get it working again."}],UO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"FAQ | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Got garage door questions? We've got friendly answers on pricing, repairs, installs & more — serving Tarzana and the LA area."}),a.jsx("link",{rel:"canonical",href:`${ul}/faq`}),a.jsx("meta",{property:"og:url",content:`${ul}/faq`}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:zy.map(e=>
300({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answer}}))})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:ul},{"@type":"ListItem",position:2,name:"FAQ",item:`${ul}/faq`}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Frequently Asked Questions"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto",children:"Find answers to common questions about our services, pricing, and more."})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-3xl mx-auto",children:a.jsx(Ni,{type:"single",collapsible:!0,className:"space-y-4",children:zy.map((e,t)=>a.jsxs(ns,{value:`item-${t}`,className:"bg-card rounded-xl border border-border px-6 shadow-card",children:[a.jsx(as,{className:"text-foreground font-semibold text-left text-lg hover:text-primary",children:e.question}),a.jsxs(os,{className:"text-muted-foreground leading-relaxed pb-4",children:[e.answer,e.cslbLink&&a.jsx("span",{className:"block mt-2",children:a.jsx("a",{href:FO,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Verify our license on the CSLB website →"})})]})]},t))})})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),cu="https://www.professionalgaragedoorservices.com",VO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Disclaimer | Professional Garage Door Services"}),a.jsx("meta",{name:"description",content:"Disclaimer for Professional Garage Door Services, LLC website. Read our limitations of liability and content accuracy disclosures."}),a.jsx("link",{rel:"canonical",href:`${cu}/disclaimer`}),a.jsx("meta",{property:"og:url",content:`${cu}/disclaimer`})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-12",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Disclaimer"}),a.jsx("p",{className:"text-secondary-foreground/80",children:"Last Updated: December 28, 2025"})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto",children:a.jsxs("div",{className:"bg-card rounded-2xl p-8 md:p-12 shadow-card border border-border space-y-8",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"General Disclaimer"}),a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:["The information provided on this website (",a.jsx("a",{href:cu,className:"text-primary hover:underline",children:"www.professionalgaragedoorservices.com"}),') by Professional Garage Door Services, LLC ("Company," "we," "us," or "our") is for general informational purposes only. All information on the site is provided in good faith; however, we make no representation or warranty of any kind, express or implied, regarding the accuracy, adequacy, validity, reliability, availability, or completeness of any information on the site.']})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Professional Disclaimer"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"The site cannot and does not contain professional repair advice. The information is provided for general informational and educational purposes only and is not a substitute for professional advice. Garage door systems involve heavy components under extreme tension — improper handling can cause serious injury or death. Always consult with a licensed professional before attempting any garage door repairs or modifications."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Limitation of Liability"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"Under no circumstance shall we have any liability to you for any loss or damage of any kind incurred as a result of the use of the site or reliance on any information provided on the site. Your use of the site and your reliance on any information on the site is solely at your own risk."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Exter
300nal Links Disclaimer"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"The site may contain links to other websites or content belonging to or originating from third parties. Such external links are not investigated, monitored, or checked for accuracy, adequacy, validity, reliability, availability, or completeness by us. We do not warrant, endorse, guarantee, or assume responsibility for the accuracy or reliability of any information offered by third-party websites linked through the site."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Testimonials & Reviews Disclaimer"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"The site may contain testimonials and reviews from customers. These testimonials reflect the real-life experiences and opinions of the individuals who provided them. Results may vary and testimonials are not intended to represent or guarantee that anyone will achieve the same or similar results."})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Fair Use Disclaimer"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:'This site may contain copyrighted material, the use of which has not always been specifically authorized by the copyright owner. We believe this constitutes a "fair use" of any such copyrighted material as provided in section 107 of the United States Copyright law.'})]}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-4",children:"Contact Us"}),a.jsxs("div",{className:"text-muted-foreground space-y-1",children:[a.jsx("p",{className:"font-semibold text-foreground",children:"Professional Garage Door Services, LLC"}),a.jsx("p",{children:"5665 Wilbur Ave, Tarzana, CA 91356"}),a.jsxs("p",{children:["Local Phone: ",a.jsx("a",{href:"tel:+12132861747",className:"text-primary hover:underline",children:"(213) 286-1747"})]}),a.jsxs("p",{children:["Toll-Free Phone: ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary hover:underline",children:"(888) 285-4021"})]}),a.jsxs("p",{children:["Email: ",a.jsx("a",{href:"mailto:[email protected]",className:"text-primary hover:underline",children:"[email protected]"})]})]})]})]})})})})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),lf="/assets/CHI-Woodlike-Panel-Windows-on-the-side-Large-b06505-CsgYhWFo.webp",am="https://www.professionalgaragedoorservices.com",du=`${am}/garage-door-repair-tarzana`,$y=[{q:"How much does garage door repair cost in Tarzana?",a:"Cost depends on what's wrong — a simple roller or hinge fix costs far less than a spring replacement or panel repair. We inspect the door first and give you an exact, upfront price before any work begins, so there are no surprises."},{q:"Do you offer free estimates for garage door repair in Tarzana?",a:"Yes. We provide free, no-obligation estimates for repairs, spring replacements, opener work, and new door installations throughout Tarzana."},{q:"Can a broken garage door spring be replaced the same day?",a:"In many cases, yes — same-day service is available when scheduling allows. Call (888) 285-4021 and we'll check availability for your specific situation."},{q:"Do you offer 24-hour garage door service in Tarzana?",a:"Yes, we offer 24-hour service for urgent situations like a door stuck open, a snapped spring, or a door that won't close and secure your home."},{q:"Is it safe to open a garage door with a broken spring?",a:"No. A broken spring means the door's counterbalance system has failed, making the door extremely heavy and unpredictable. Forcing it open can cause injury or further damage. Leave it alone and call a professional."},{q:"Why is my garage door so loud?",a:"Noise usually comes from worn rollers, loose hardware, dry hinges, or a failing opener component. Grinding often points to metal-on-metal wear, while banging can mean loose parts. A tune-up can often quiet things down."},{q:"Why does my garage door opener run but the door does not move?",a:"This is commonly a broken drive gear, a disconnected or worn trolley, or a snapped cable or spring. The motor can run f
300ine while the mechanical connection to the door has failed — a technician can pinpoint the exact cause."},{q:"Should I repair or replace my garage door?",a:"It depends on the door's age, how many times it's been repaired, the condition of the springs and hardware, and whether the panels are structurally sound. We'll walk you through the honest pros and cons for your specific door."},{q:"Do you repair garage door openers in Tarzana?",a:"Yes, we repair and install openers of all major brands, including issues with motors, sensors, remotes, keypads, chains, and belts."},{q:"What should I do if my garage door is off track?",a:"Stop using the door, keep the area clear, and avoid trying to force it back into place. Off-track doors can fall or shift unexpectedly. Call us and we'll assess and correct it safely."},{q:"Can you install a new garage door in Tarzana?",a:"Yes, we install steel, insulated, and custom-design garage doors for homes throughout Tarzana, matched to your home's style and your opener's compatibility."},{q:"Are you licensed and insured?",a:"Yes. Professional Garage Door Services, LLC is licensed and insured, and family owned."},{q:"Do you service areas near Tarzana?",a:"Yes, in addition to Tarzana we serve Encino, Woodland Hills, Reseda, Sherman Oaks, Studio City, Winnetka, Northridge, Van Nuys, Calabasas, and Canoga Park."}],YO=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Repair Tarzana, CA | Licensed & Insured"}),a.jsx("meta",{name:"description",content:"Licensed, insured, family-owned garage door repair in Tarzana, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021 today."}),a.jsx("link",{rel:"canonical",href:du}),a.jsx("meta",{property:"og:title",content:"Garage Door Repair Tarzana, CA | Professional Garage Door Services"}),a.jsx("meta",{property:"og:description",content:"Licensed & insured garage door repair based in Tarzana, CA. Free estimates, 24-hour and same-day service available."}),a.jsx("meta",{property:"og:url",content:du}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"HomeAndConstructionBusiness",name:"Professional Garage Door Services",url:am,telephone:"888-285-4021",address:{"@type":"PostalAddress",streetAddress:"5665 Wilbur Avenue",addressLocality:"Tarzana",addressRegion:"CA",postalCode:"91356",addressCountry:"US"},areaServed:["Tarzana","Encino","Woodland Hills","Reseda","Sherman Oaks","Studio City","Winnetka","Northridge","Van Nuys","Calabasas","Canoga Park"],openingHours:"Mo-Su 00:00-24:00",priceRange:"$$"})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:$y.map(e=>({"@type":"Question",name:e.q,acceptedAnswer:{"@type":"Answer",text:e.a}}))})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:am},{"@type":"ListItem",position:2,name:"Garage Door Repair Tarzana",item:du}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:"Garage Door Repair in Tarzana, CA"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:"Licensed, insured, and family owned — based right here in Tarzana at 5665 Wilbur Ave."}),a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto space-y-4 text-muted-foreground leading-relaxed",children:[a.jsxs("p",{children:["If your garage door won't open, has slammed shut, is stuck off its track, or is making noises that just don't sound right, you're in the right place. ",a.jsx("strong",{className:"text-foreground",children:"Professional Garage Door Services"})," is based right here in Tarzana, and we help homeowners across the neighborhood with broken springs, damaged panels, faulty openers, and doors that just don't feel safe to use anymore."]}),a.jsx("p",{children:"We're a licensed and insured, family-owned company, and we provide free estimates on every job. Whether it's the middle of the night or the middle of a weekday, 24-hour service is available, and same-day appointments can often be scheduled — just call ahead and we'll confirm what's possible for your situation."}),a.jsxs("p",{children:["No pressure, no guesswork pricing — just a straightforward look at what's actually happening with your door and a clear plan to fix it. Call ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary font-semibold hover:underline",children:"(888) 285-4
300021"})," to get started."]})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Garage Door Services in Tarzana"}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[{title:"Garage Door Repair",body:"From damaged panels to sticking doors, we diagnose the real problem and fix it right the first time."},{title:"Garage Door Spring Replacement",body:"Torsion and extension spring replacement, sized and balanced correctly for your specific door."},{title:"Garage Door Opener Repair",body:"Motor, sensor, remote, and keypad issues diagnosed and resolved — no more guessing why it won't respond."},{title:"Garage Door Opener Installation",body:"New opener installation and setup, including smart Wi-Fi-enabled models where compatible."},{title:"Garage Door Installation",body:"Full door replacement with steel, insulated, or custom-design options matched to your home."},{title:"Broken Cable Repair",body:"Snapped or frayed cables replaced safely — these are under high tension and shouldn't be handled without training."},{title:"Off-Track Repair",body:"We realign or repair doors that have jumped their tracks, a common and potentially dangerous issue."},{title:"Roller & Hinge Replacement",body:"Worn rollers and hinges are a leading cause of noisy, jerky door movement — we replace them with quality parts."},{title:"Panel Replacement",body:"Cracked, dented, or bent panels repaired or replaced without needing a full door replacement in many cases."},{title:"Tune-Ups & Safety Inspections",body:"A full check of springs, cables, rollers, and the auto-reverse safety feature to catch small issues early."},{title:"Emergency & Same-Day Service",body:"24-hour service is available for urgent issues, and same-day appointments can often be arranged."},{title:"Free Estimates",body:"Every job starts with a clear, no-obligation estimate before any work begins."}].map(e=>a.jsxs("div",{className:"bg-card rounded-xl p-6 shadow-card border border-border",children:[a.jsx("h3",{className:"font-heading text-lg text-foreground mb-2",children:e.title}),a.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed",children:e.body})]},e.title))})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:"Common Garage Door Problems We Help With"}),a.jsx("p",{className:"text-muted-foreground text-center mb-8",children:"Not sure what's wrong? Here's a quick guide — but if in doubt, stop using the door and call us before it gets worse."}),a.jsx("div",{className:"space-y-4",children:[{title:"Door won't open or close",body:"Could be a broken spring, cable, or opener issue. Stop using the door if it feels stuck or unusually heavy."},{title:"Door slams shut",body:"Usually a sign of a broken spring, which removes the counterbalance that controls the door's descent. Don't stand underneath it."},{title:"Door feels extremely heavy",body:"A healthy door should lift with one hand. A heavy door almost always means a failed spring — stop forcing it."},{title:"Broken torsion or extension spring",body:"You may see a visible gap in the spring or hear a loud bang. These are under high tension — never attempt DIY replacement."},{title:"Snapped or loose cable",body:"A frayed or detached cable can let the door fall unevenly. Keep the area clear and call for repair."},{title:"Door is off track or crooked",body:"The door may bind, stick, or hang unevenly. Continuing to operate it can cause it to fall."},{title:"Grinding, squeaking, popping, or banging",body:"Usually rollers, hinges, or hardware wearing down or loosening — often fixable with a tune-up."},{title:"Opener runs but door doesn't move",body:"Often a broken drive gear, disconnected trolley, or a spring/cable failure — the motor and the door mechanism aren't the same thing."},{title:"Door reverses after closing",body:"Usually a sensor alignment issue or a safety feature responding to an obstruction — worth checking before it traps something."},{title:"Remote or keypad not working",body:"Could be battery, programming, or a receiver issue in the opener itself."},{title:"Bent or cracked panels",body:"Affects both looks and structural integrity — sometimes a single panel can be replaced instead of the whole door."},{title:"Door shakes while moving",body:"Often loose hardware or worn rollers — left alone, it tends to get worse and louder over time."}].map(e=>a.jsxs("div",{className:"bg-card rounded-xl p-5 border border-border",children:[a.jsx("p",{className:"font-semibold text-foreground mb-1",children:e.title}),a.jsx("p",{className:"text-muted-foreground text-sm",children:e.body})]},e.title))}),a.jsxs("div",{className:"mt-8 bg-primary/5 border border-primary/20 rounded-xl p-6 flex items-start gap-4",children:[a.jsx(qo,{className:"w-6 h-6 text-primary flex-shrink-0 mt-1"}),a.jsx("p",{className:"text-muted-foreground text-sm",children:"If your door feels unusually heavy, won't stay open, or you see a broken spring or cable, stop using it and keep people and pets clear. These are safety issues, not just inconveniences — a professional inspection is the safer path."})]})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:"Garage Door Repair vs. Replacement"}),a.jsx("p",{className:"text-muted-foreground mb-4 leading-relaxed",children:"Not every problem means you need a new door. A single broken spring, a bad roller, or a dented panel can usually be repaired without replacing the whole unit. But there are times when replacement makes more sense long-term."}),a.jsx("p",{className:"text-muted-foreground mb-4 leading-relaxed",children:"Consider replacement if your door is older, has needed repeated repairs, has multiple damaged panels, or the springs and hardware are worn beyond a simple fix. Poor insulation, excessive noise, an opener that's no longer compatible, or a door that just doesn't match your home anymore are also valid reasons homeowners choose to upgrade."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"We'll always give you an honest read on your specific door — including the real cost of repeated repairs versus a one-time replacement — so you can make the call with good information."})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Garage Door Spring Replacement in Tarzana"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"Springs do the heavy lifting — literally. They counterbalance the weight of the door so it can be raised and lowered smoothly. Torsion springs mount above the door on a metal shaft, while extension springs run along the upper tracks. Both wear out over time and eventually fail."}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"Signs of a broken spring include a door that suddenly feels extremely heavy, a loud bang from the garage, or a visible gap in the coil. Once a spring breaks, the door loses its counterbalance — do not try to force it open."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"Garage door spring replacement in Tarzana requires the right tools, the correct spring size for your door's weight, and careful calibration to keep the door balanced and safe. This isn't a job for a general household toolkit — our technicians evaluate spring size, tension, and balance before signing off on the repair."})]}),a.jsx("img",{src:ca,alt:"Torsion springs used for garage door spring replacement in Tarzana",className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsx("img",{src:cd,alt:"Technician performing garage door opener repair in Tarzana",className:"rounded-xl shadow-card w-full h-64 object-cover order-2 md:order-1",loading:"lazy"}),a.jsxs("div",{className:"order-1 md:order-2",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Garage Door Opener Repair & Installation in Tarzana"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"A humming motor, a chain or belt that's slipping, a wall button that doesn't respond, or a remote that's stopped working — opener problems come in a lot of forms. Misaligned safety sensors can also cause the door to reverse unexpectedly or refuse to close."}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"Sometimes the opener runs but the door doesn't move at all, which usually points to a mechanical failure separate from the motor itself. Garage door opener repair in Tarzana often solves these issues without needing a full replacement — but if your opener is old, lacks battery backup, or isn't compatible with modern smart features, installing a new one may be the better long-term move."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"We repair and install openers from major manufacturers, including models with battery backup and Wi-Fi/smartphone connectivity where compatible with your door."})]})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"New Garage Door Installation in Tarzana"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"If your door has sagging or damaged panels, is an old heavy wood door, has poor insulation, or you find yourself calling for repairs more often than you'd like, it may be time to consider a new garage door installation in Tarzana."}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"A new door can mean quieter daily operation, better insulation for the garage and any rooms above or beside it, improved curb appeal, and stronger security. We help you choose between steel, insulated, and custom-design options, and make sure the new door is compatible with your existing or new opener."})]}),a.jsx("img",{src:lf,alt:"New insulated steel garage door installed in Tarzana",className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Why Tarzana Homeowners Call Professional Garage Door Services"}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(at,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Licensed & Insured"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(zo,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Family Owned"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fe,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"24-Hour Service"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fa,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Free Estimates"})]})]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed max-w-3xl mx-auto text-center",children:"We're based right in Tarzana at 5665 Wilbur Avenue — not a call center dispatching from somewhere else. As a licensed, insured, and family-owned company, we walk you through your repair or replacement options clearly, perform safety-focused inspections, and handle everything from springs and cables to openers, rollers, panels, and full door replacements."})]})})}),a.jsx(ld,{cityName:"Tarzana"}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6 text-center",children:"Helpful Tips Before You Call"}),a.jsx("ul",{className:"space-y-3",children:["Do not force the door open or closed if it feels stuck or heavy.","Do not loosen or adju
300st spring hardware yourself.","Look for a visible gap in the spring — a sign it's broken.","Check for loose or frayed cables near the bottom rollers.","Check that the opener has power and the lights are on.","Check the sensor lights near the bottom of the tracks for blinking or misalignment.","Keep children and pets away from the door until it's inspected.","If it's safe to do so, take a few photos of the issue.","Note whether the door is stuck open or stuck closed.","Have your opener brand or door size on hand if you know it."].map(e=>a.jsxs("li",{className:"flex items-start gap-3",children:[a.jsx(fa,{className:"w-5 h-5 text-primary flex-shrink-0 mt-0.5"}),a.jsx("span",{className:"text-muted-foreground",children:e})]},e))}),a.jsxs("p",{className:"text-center mt-8",children:[a.jsx("a",{href:"tel:+18882854021",className:"text-primary font-bold text-lg hover:underline",children:"Call (888) 285-4021"}),a.jsx("span",{className:"text-muted-foreground",children:" for a free estimate or to check same-day availability."})]})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Serving Tarzana and Nearby Areas"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"We're based in Tarzana and know the area well, from the homes near Wilbur Ave to the neighborhoods further out. We also regularly serve homeowners in Encino, Woodland Hills, Reseda, Sherman Oaks, Studio City, Winnetka, Northridge, Van Nuys, Calabasas, and Canoga Park. If you're nearby and not sure whether you're in our service area, just give us a call."})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Frequently Asked Questions"}),a.jsx(Ni,{type:"single",collapsible:!0,className:"space-y-4",children:$y.map((e,t)=>a.jsxs(ns,{value:`faq-${t}`,className:"bg-card rounded-xl border border-border px-6 shadow-card",children:[a.jsx(as,{className:"text-foreground font-semibold text-left hover:text-primary",children:e.q}),a.jsx(os,{className:"text-muted-foreground leading-relaxed",children:e.a})]},t))})]})})}),a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"font-heading text-3xl md:text-4xl text-secondary-foreground mb-4",children:"Ready to Get Your Garage Door Fixed?"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:"Licensed, insured, and family owned — serving Tarzana with free estimates, 24-hour service, and same-day availability when scheduling allows."}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2 w-full sm:w-auto",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})}),a.jsx(A,{to:"/contact",children:a.jsx(re,{variant:"outline",size:"xl",className:"w-full sm:w-auto",children:"Request a Free Estimate"})})]})]})})]}),a.jsx(ue,{}),a.jsx(sr,{})]}),KO=({cityName:e})=>{const{toast:t}=Gc(),[r,n]=b.useState(!1),[o,s]=b.useState(!1),[i,l]=b.useState({firstName:"",lastName:"",phone:"",zipCode:"",service:""}),c=u=>{l(h=>({...h,[u.target.name]:u.target.value}))},d=async u=>{if(u.preventDefault(),!o){t({title:"Consent Required",description:"Please agree to the Privacy Policy to continue.",variant:"destructive"});return}n(!0),zk({firstName:i.firstName,lastName:i.lastName,phone:i.phone,zip:i.zipCode,service:i.service,message:`Submitted from the ${e} local page.`});try{const{error:h}=await Mp.functions.invoke("send-contact-email",{body:{firstName:i.firstName,lastName:i.lastName,phone:i.phone,zipCode:i.zipCode,service:i.service,message:`Submitted from the ${e} local page.`}});if(h)throw h;qp(),t({title:"Quote Request Submitted!",description:"We'll get back to you within 24 hours."}),l({firstName:"",lastName:"",phone:"",zipCode:"",service:""}),s(!1)}catch(h){console.error("Error sending email:",h),t({title:"Error",description:"Failed to send your request. Please try again or call us directly.",variant:"destructive"})}finally{n(!1)}};return a.jsxs("div",{className:"bg-card rounded-2xl p-5 md:p-6 shadow-card border border-border max-w-md mx-auto",children:[a.jsxs("div",{className:"text-center mb-4",children:[a.jsxs("h2",{className:"font-heading text-xl text-foreground",children:["Get a Free Estimate in ",e]}),a.jsx("p",{className:"text-muted-foreground text-sm",children:"Fast response • No obligation"})]}),a.jsxs("form",{onSubmit:d,className:"space-y-3",children:[a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsx("input",{type:"text",name:"firstName",value:i.firstName,onChange:c,required:!0,placeholder:"First Name *",className:"w-full px-3 py-2 text-sm rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none"}),a.jsx("input",{type:"text",name:"lastName",value:i.lastName,onChange:c,required:!0,placeholder:"Last Name *",className:"w-full px-3 py-2 text-sm rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none"})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsx("input",{type:"tel",name:"phone",value:i.phone,onChange:c,required:!0,placeholder:"Phone Number *",className:"w-full px-3 py-2 text-sm rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none"}),a.jsx("input",{type:"text",name:"zipCode",value:i.zipCode,onChange:c,required:!0,inputMode:"numeric",maxLength:10,placeholder:"ZIP Code *",className:"w-full px-3 py-2 text-sm rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none"})]}),a.jsxs("select",{name:"service",value:i.service,onChange:c,required:!0,className:"w-full px-3 py-2 text-sm rounded-lg bg-background border border-border focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all outline-none",children:[a.jsx("option",{value:"",children:"Select Service Needed *"}),a.jsx("option",{value:"installation",children:"Garage Door Installation"}),a.jsx("option",{value:"repair",children:"Garage Door Repair"}),a.jsx("option",{value:"spring",children:"Spring Replacement"}),a.jsx("option",{value:"opener",children:"Opener Installation"}),a.jsx("option",{value:"maintenance",children:"Maintenance"}),a.jsx("option",{value:"emergency",children:"Emergency Service"})]}),a.jsxs("div",{className:"flex items-start gap-2",children:[a.jsx(td,{id:`cityQuoteConsent-${e}`,checked:o,onCheckedChange:u=>s(u),className:"mt-0.5"}),a.jsxs("label",{htmlFor:`cityQuoteConsent-${e}`,className:"text-xs text-muted-foreground cursor-pointer",children:["I agree to the"," ",a.jsx(A,{to:"/privacy-policy",className:"text-primary hover:underline",target:"_blank",children:"Privacy Policy"})," ","and"," ",a.jsx(A,{to:"/terms-and-conditions",className:"text-primary hover:underline",target:"_blank",children:"Terms & Conditions"})," ","and consent to receive calls/texts about my quote."]})]}),a.jsx(re,{type:"submit",variant:"hero",size:"lg",className:"w-full",disabled:r||!o,children:r?"Sending...":"Get Free Quote Now"})]})]})},JO={encino:{slug:"encino",cityName:"Encino",metaTitle:"Garage Door Repair Encino, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Encino, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4
300021.",heroTagline:"Licensed, insured, and family owned — serving Encino from just down the road in Tarzana.",intro:["Encino homes range from ranch-style houses on the flats south of Ventura Blvd to larger hillside properties tucked behind long driveways north of the boulevard. Both come with their own garage door quirks — and we've built our service around handling whatever you're dealing with, whether it's a heavy custom wood door or a standard steel door that's finally showing its age.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work on doors throughout Encino — from broken springs and off-track panels to opener repairs and full door replacements. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available and 24-hour service covers the situations that can't wait — a door stuck open overnight, a spring that snapped without warning, or a door that won't secure your home. Call (888) 285-4021 and we'll go over what's happening and what it'll take to fix it."],localInsightTitle:"What We See Most in Encino",localInsight:"A lot of Encino's hillside homes use heavier custom wood or wood-look carriage doors, which put extra strain on springs not originally sized for that weight. On the flats, many original steel doors from decades past are still running on their factory hardware — rollers and hinges that are well past due for a look. If your door feels heavier than it used to, or louder, that's usually the hardware telling you something.",springIntro:"Garage door spring replacement in Encino often comes down to weight. Custom and oversized doors need springs matched to their exact weight and cycle needs — not a generic, one-size-fits-all part.",springOutro:"If a spring breaks on a heavier custom door, the drop in counterbalance is even more noticeable, and the door can become genuinely dangerous to lift by hand. We size and calibrate replacement springs to the specific door, not just the opening.",openerIntro:"Garage door opener repair in Encino frequently involves openers that were sized for a standard steel door but are now working overtime on a heavier upgraded or custom door.",openerOutro:"If your opener is straining, running hot, or reversing under load, it may be undersized for the door it's operating — something we check before recommending a repair versus an upgrade.",installIntro:"Garage door installation in Encino often means matching a new door to a specific architectural style — Mediterranean, traditional, or contemporary — while making sure it's properly insulated and paired with hardware rated for its actual weight.",installOutro:"We help homeowners choose a door that fits the house, not just the opening, and make sure the opener and hardware underneath it can actually support it long-term.",whyChooseIntro:"We're not a call center routing you to a random contractor — we're based right in Tarzana, minutes from Encino, and licensed, insured, and family owned.",nearbyAreas:["Tarzana","Sherman Oaks","Studio City","Van Nuys","Woodland Hills"],nearbyBlurb:"Along with Encino, we regularly serve Tarzana, Sherman Oaks, Studio City, Van Nuys, and Woodland Hills.",faqs:[{q:"How much does garage door repair cost in Encino?",a:"It depends on the issue — a roller or hinge fix costs far less than spring replacement or panel repair, and custom or oversized doors can cost more to service than standard steel doors. We give you an exact price after inspecting the door, before any work begins."},{q:"Do you offer free estimates in Encino?",a:"Yes, every estimate is free and no-obligation, whether it's a quick repair or a full door replacement."},{q:"Can a broken spring be replaced the same day in Encino?",a:"Often, yes — same-day service is available when scheduling allows. Call (888) 285-4021 to check availability."},{q:"My garage door is a heavy custom wood door — can you still fix it?",a:"Yes. Heavier custom and carriage-style doors need springs and hardware matched to their actual weight, and that's exactly what we check for during the inspection."},{q:"Do you offer 24-hour service in Encino?",a:"Yes, for urgent situations like a door stuck open or a snapped spring, 24-hour service is available."},{q:"Is it safe to force open a garage door with a broken spring?",a:"No — this is especially true for heavier custom doors, where the loss of counterbalance makes the door extremely difficult and dangerous to lift by hand."},{q:"Should I repair or replace my garage door in Encino?",a:"It depends on the door's age, condition, and repair history. We'll walk you through the honest tradeoffs for your specific door before you decide."}
300,{q:"Do you repair garage door openers in Encino?",a:"Yes, including openers that may be undersized for a heavier upgraded or custom door."},{q:"Do you install new garage doors in Encino?",a:"Yes, including custom and architectural styles matched to the home, with hardware sized for the door's actual weight."},{q:"Do you serve areas near Encino?",a:"Yes — we also serve Tarzana, Sherman Oaks, Studio City, Van Nuys, and Woodland Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Encino with free estimates and same-day availability when scheduling allows."},"woodland-hills":{slug:"woodland-hills",cityName:"Woodland Hills",metaTitle:"Garage Door Repair Woodland Hills, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Woodland Hills, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Woodland Hills from right next door in Tarzana.",intro:["From the tract homes near Warner Center to the view properties up near Mulholland, Woodland Hills covers a lot of ground — and a lot of different garage door setups. We work on all of it: standard double-car garages in newer developments, older single doors on original hardware, and everything in between.","Professional Garage Door Services is based just next door in Tarzana, and Woodland Hills is one of the areas we serve most often. We're licensed, insured, and family owned, with free estimates on every job — no pressure, just a clear look at what's actually wrong and what it costs to fix.","Same-day appointments are frequently available, and 24-hour service covers the urgent stuff — a door that won't close at night, a broken spring, or a door that's come off its track. Call (888) 285-4021 and we'll figure out the right next step."],localInsightTitle:"What We See Most in Woodland Hills",localInsight:"Summer heat is a real factor here — long, sun-exposed driveways and non-insulated steel doors can warp or expand slightly over time, which shows up as sticking or uneven movement. We also see a fair number of newer tract-home openers that are due for their first real tune-up, and hillside homes near Mulholland with heavier, larger doors that need properly balanced springs.",springIntro:"Garage door spring replacement in Woodland Hills has to account for both standard tract-home doors and the larger, heavier doors common on hillside properties.",springOutro:"We evaluate the door's actual weight and usage before sizing a replacement spring — a mismatched spring wears out fast or fails to properly balance the door.",openerIntro:"Garage door opener repair in Woodland Hills often involves heat-related wear — motors and sensors working through hot Valley summers season after season.",openerOutro:"If your opener is struggling more in summer months, or the sensors seem to misfire on hot days, it's worth having them checked before they fail outright.",installIntro:"Garage door installation in Woodland Hills is a good opportunity to add insulation, especially for garages that share a wall with living space or sit in direct afternoon sun.",installOutro:"We help you weigh insulated steel, standard steel, and custom options based on your home's exposure and how the garage is used.",whyChooseIntro:"We're based right next door in Tarzana, so Woodland Hills is practically our backyard — and we're licensed, insured, and family owned.",nearbyAreas:["Tarzana","Calabasas","West Hills","Canoga Park","Winnetka"],nearbyBlurb:"Along with Woodland Hills, we regularly serve Tarzana, Calabasas, West Hills, Canoga Park, and Winnetka.",faqs:[{q:"How much does garage door repair cost in Woodland Hills?",a:"It depends on what needs fixing — we inspect the door first and give you an exact price before starting any work, whether it's a simple roller fix or a spring replacement."},{q:"Do you offer free estimates in Woodland Hills?",a:"Yes, every estimate is free with no obligation."},{q:"Can a broken spring be replaced same-day in Woodland Hills?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Why does my garage door stick more in the summer?",a:"Heat exposure can cause slight warping or expansion in non-insulated steel doors, especially on driveways that get a lot of direct sun. This often shows up as sticking or uneven movement."},{q:"Do you offer 24-hour service in Woodland Hills?",a:"Yes, for urgent issues like a door stuck open or a broken spring."},{q:"Is it safe to use a garage door with a broken spring?",a:"No — stop using the door and call for an inspection. A broken spring removes the door's counterbalance and makes it unsafe to operate."},{q:"Should I repair or replace my garage door?",a:"It depends on the door's age, repair history, and hardware condition — we'll give you a straightforward comparison for your specific door."},{q:"Do you repair garage door openers in Woodland Hills?",a:"Yes, including openers affected by heat-related wear common in this area."},{q:"Do you install new garage doors in Woodland Hills?",a:"Yes, including insulated options that hold up well against Valley summer heat."},{q:"Do you serve areas near Woodland Hills?",a:"Yes — we also serve Tarzana, Calabasas, West Hills, Canoga Park, and Winnetka."}],finalCtaTagline:"Licensed, insured, and family owned — serving Woodland Hills with free estimates and same-day availability when scheduling allows."},reseda:{slug:"reseda",cityName:"Reseda",metaTitle:"Garage Door Repair Reseda, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Reseda, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Reseda from nearby Tarzana.",intro:["Reseda has a lot of homes built in the 1950s through 1970s, many still running on their original garage door hardware. That means we spend a lot of time here on doors that have simply earned a repair — worn rollers, tired springs, and hinges that have been squeaking for longer than anyone wants to admit.","Professional Garage Door Services is based nearby in Tarzana, and we work with Reseda homeowners who want an honest answer on whether to repair or replace — not an upsell. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait until morning. Call (888) 285-4021 and we'll figure out what's actually going on with your door."],localInsightTitle:"What We See Most in Reseda",localInsight:"A lot of the doors we look at in Reseda are original to homes built decades ago — steel doors that have held up structurally but are running on rollers, hinges, and springs that are well past their expected lifespan. In many cases a straightforward hardware repair extends the door's life significantly without needing a full replacement.",springIntro:"Garage door spring replacement in Reseda often involves older doors where the original spring has simply reached the end of its cycle life after many years of daily use.",springOutro:"We check the door's overall condition while replacing the spring, since older doors sometimes need a roller or cable refresh at the same time to run smoothly again.",openerIntro:"Garage door opener repair in Reseda frequently involves aging chain-drive openers that are noisy, slow, or starting to skip.",openerOutro:"In many cases a repair brings an older opener back to reliable operation — replacement only becomes the better option once parts are no longer available or the unit is failing repeatedly.",installIntro:"Garage door installation in Reseda is often driven by a door that's simply reached the end of the line after years of patch repairs, or a homeowner looking to upgrade from an old wood door to steel.",installOutro:"We offer straightforward, budget-conscious steel door options as well as insulated and custom styles, depending on what makes sense for your home and budget.",whyChooseIntro:"We're based nearby in Tarzana and work with a lot of Reseda homeowners who just want an honest, no-pressure answer — we're licensed, insured, and family owned.",nearbyAreas:["Tarzana","Winnetka","N
300orthridge","Van Nuys","Canoga Park"],nearbyBlurb:"Along with Reseda, we regularly serve Tarzana, Winnetka, Northridge, Van Nuys, and Canoga Park.",faqs:[{q:"How much does garage door repair cost in Reseda?",a:"It depends on the issue — older doors sometimes need more than one part replaced at once. We inspect first and give you an exact, upfront price."},{q:"Do you offer free estimates in Reseda?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Reseda?",a:"Often yes — same-day service is available when scheduling allows. Call (888) 285-4021 to check."},{q:"My garage door is original to the house — can it still be repaired?",a:"In many cases, yes. Older doors are often structurally fine and just need worn hardware — springs, rollers, or cables — replaced."},{q:"Do you offer 24-hour service in Reseda?",a:"Yes, for urgent situations like a broken spring or a door stuck open."},{q:"Is it safe to keep using a noisy older garage door?",a:"A noisy door is usually a sign of worn hardware, not an emergency by itself — but it's worth having checked before a part fails completely."},{q:"Should I repair or replace my older garage door?",a:"Often repair makes sense if the door itself is structurally sound. We'll give you an honest comparison based on the door's actual condition."},{q:"Do you repair garage door openers in Reseda?",a:"Yes, including older chain-drive openers that are still worth repairing."},{q:"Do you install new garage doors in Reseda?",a:"Yes, including affordable steel options as well as insulated and custom styles."},{q:"Do you serve areas near Reseda?",a:"Yes — we also serve Tarzana, Winnetka, Northridge, Van Nuys, and Canoga Park."}],finalCtaTagline:"Licensed, insured, and family owned — serving Reseda with free estimates and same-day availability when scheduling allows."},"sherman-oaks":{slug:"sherman-oaks",cityName:"Sherman Oaks",metaTitle:"Garage Door Repair Sherman Oaks, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Sherman Oaks, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Sherman Oaks from nearby Tarzana.",intro:["Sherman Oaks is really two neighborhoods in one — the flats, with tighter lots and closely spaced homes on a grid of busy streets, and the hills, with larger properties and more custom architecture. Garage doors take a different kind of wear in each, and we've serviced plenty of both.","Professional Garage Door Services is based nearby in Tarzana, and we're licensed, insured, and family owned, with free estimates on every job whether you're near Ventura Blvd or up in the hills.","Same-day service is often available, and 24-hour service covers the emergencies — a spring that snaps without warning or a door that won't close and secure your home. Call (888) 285-4021 and we'll get you sorted out."],localInsightTitle:"What We See Most in Sherman Oaks",localInsight:"In the flats, tighter driveways and shorter garage setbacks mean an off-track or noisy door gets noticed fast — there's just less room to ignore it. In the hills, we see larger custom doors on properties with steeper driveways, which puts more demand on springs and openers. Either way, proximity to busy streets like Ventura and Sepulveda means noise complaints from a squeaky or banging door tend to come up more here than in quieter pockets of the Valley.",springIntro:"Garage door spring replacement in Sherman Oaks covers everything from standard doors in the flats to larger custom doors in the hills, each requiring the right spring size and tension for the specific door.",springOutro:"A mismatched or worn-out spring is often the reason behind a door that's suddenly noisy or hard to lift — we size and balance every replacement to the actual door, not a generic average.",openerIntro:"Garage door opener repair in Sherman Oaks often comes down to hillside properties putting extra strain on standard openers, or flats-area openers simply reaching the end of their service life.",openerOutro:"If your opener is straining on an incline driveway or has become noticeably louder, it's worth a look before it fails at an inconvenient time.",installIntro:"Garage door installation in Sherman Oaks often means balancing style with practicality — a custom look for hillside homes, or a straightforward, quieter replacement for flats-area homes on busier streets.",installOutro:"We help you choose a door and opener combination that fits your home's setting, whether that's noise reduction for a busy street or extra durability for a steep driveway.",whyChooseIntro:"We're based nearby in Tarzana and regularly work throughout both the Sherman Oaks flats and hills — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Encino","Studio City","Van Nuys","Beverly Glen"],nearbyBlurb:"Along with Sherman Oaks, we regularly serve Tarzana, Encino, Studio City, Van Nuys, and Beverly Glen.",faqs:[{q:"How much does garage door repair cost in Sherman Oaks?",a:"It depends on the issue and the door — custom hillside doors can cost more to service than standard flats-area doors. We give you an exact price after inspecting the door."},{q:"Do you offer free estimates in Sherman Oaks?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Sherman Oaks?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage is on a steep hillside driveway — does that affect repairs?",a:"Yes, steeper driveways and heavier custom doors put more strain on springs and openers, so we factor that into sizing any replacement parts."},{q:"Do you offer 24-hour service in Sherman Oaks?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Why is my garage door so loud near a busy street?",a:"Busy streets don't cause door noise directly, but worn rollers or hardware tend to get noticed faster in tighter, closely spaced properties common in the Sherman Oaks flats."},{q:"Should I repair or replace my garage door in Sherman Oaks?",a:"It depends on the door's age, condition, and whether it's a standard or custom door — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Sherman Oaks?",a:"Yes, including openers under extra strain from hillside driveways."},{q:"Do you install new garage doors in Sherman Oaks?",a:"Yes, including custom styles for hillside homes and standard steel or insulated options for the flats."},{q:"Do you serve areas near Sherman Oaks?",a:"Yes — we also serve Tarzana, Encino, Studio City, Van Nuys, and Beverly Glen."}],finalCtaTagline:"Licensed, insured, and family owned — serving Sherman Oaks with free estimates and same-day availability when scheduling allows."},winnetka:{slug:"winnetka",cityName:"Winnetka",metaTitle:"Garage Door Repair Winnetka, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Winnetka, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Winnetka from nearby Tarzana.",intro:["Winnetka is a quiet, close-knit residential community, mostly single-family homes on modest lots built from the 1950s onward. It's the kind of neighborhood where a garage door problem is a real inconvenience — no long driveway to work around it, just a door you need working again.","Professional Garage Door Services is based nearby in Tarzana, and we handle everything from routine repairs to full installations for Winnetka homeowners. We're licensed, insured, and family owned, and we give a free, straightforward estimate before any work begins.","Same-day service is often available, and 24-hour service is there when something breaks at the worst possible time. Call (888) 285-4021 and we'll walk you through what's going on."],localInsightTitle:"What We See Most in Winnetka",localInsight:"Winnetka's housing stock is fairly uniform — mid-century single-family homes with standard single or double garage doors. Most of what we see here is straightforward wear and tear: aging springs, rollers that have finally worn out, and openers reaching the end of their practical lifespan after many years of daily use.",springIntro:"Garage door spring replacement in Winnetka is usually a standard job — most homes have a single door in a fairly typical size, so the process is quick once we've confirmed the right spring specs.",springOutro:"Even standard doors need the spring sized correctly for the door's exact weight and the number of cycles it sees — we don't just grab the closest match and call it done.",openerIntro:"Garage door opener repair in Winnetka often involves openers that have simply been in service a long time — worn gears, weak capacitors, or remotes that no longer sync reliably.",openerOutro:"In many cases, these are simple, affordable fixes. We'll let you know honestly if a repair makes sense or if the unit has reached the point of diminishing returns.",installIntro:"Garage door installation in Winnetka tends to be straightforward — most homes use a standard single or double door opening, which keeps costs predictable.",installOutro:"We'll help you choose between standard steel, insulated, and a few style upgrades that can meaningfully improve curb appeal without a big budget jump.",whyChooseIntro:"We're based nearby in Tarzana and know Winnetka's mostly standard door setups well — licensed, insured, and family owned, with honest, no-pressure estimates.",nearbyAreas:["Tarzana","Reseda","Canoga Park","Woodland Hills","Northridge"],nearbyBlurb:"Along with Winnetka, we regularly serve Tarzana, Reseda, Canoga Park, Woodland Hills, and Northridge.",faqs:[{q:"How much does garage door repair cost in Winnetka?",a:"Most homes here have standard-size doors, which keeps repair costs predictable. We inspect first and give you an exact price before starting."},{q:"Do you offer free estimates in Winnetka?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Winnetka?",a:"Often yes, especially since most doors here use standard spring sizes. Call (888) 285-4
300021 to check same-day availability."},{q:"My opener is old — is it worth repairing?",a:"Often, yes. Many opener issues are simple fixes. We'll tell you honestly if it's more cost-effective to repair or replace."},{q:"Do you offer 24-hour service in Winnetka?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Is it safe to keep using a door with worn rollers?",a:"It's not an emergency by itself, but worn rollers tend to lead to bigger issues over time — worth having checked."},{q:"Should I repair or replace my garage door?",a:"For most standard doors here, repair is often the more cost-effective route unless the door has significant damage or repeated issues."},{q:"Do you repair garage door openers in Winnetka?",a:"Yes, including older units that are simply due for a tune-up or part replacement."},{q:"Do you install new garage doors in Winnetka?",a:"Yes, including standard steel and insulated options sized for typical Winnetka garages."},{q:"Do you serve areas near Winnetka?",a:"Yes — we also serve Tarzana, Reseda, Canoga Park, Woodland Hills, and Northridge."}],finalCtaTagline:"Licensed, insured, and family owned — serving Winnetka with free estimates and same-day availability when scheduling allows."},"van-nuys":{slug:"van-nuys",cityName:"Van Nuys",metaTitle:"Garage Door Repair Van Nuys, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Van Nuys, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Van Nuys from nearby Tarzana.",intro:["Van Nuys is one of the busier, more varied parts of the Valley — single-family homes, duplexes, and rental properties all mixed together, often with garages doing double duty as storage or workspace. Whatever the setup, we're used to working with it.","Professional Garage Door Services is based nearby in Tarzana, and we work with both homeowners and landlords throughout Van Nuys who need a repair done right and explained clearly. We're licensed, insured, and family owned, with free estimates on every job.","Same-day service is often available, and 24-hour service covers the situations that can't wait — especially important for rental properties where a broken door is also a security issue. Call (888) 285-4021 and we'll get you an answer."],localInsightTitle:"What We See Most in Van Nuys",localInsight:"Because Van Nuys has a lot of rental and multi-unit properties, we often work with property managers who need clear, itemized pricing and fast turnaround — a broken garage door on a rental is both an inconvenience and a security gap. We also see a good number of older doors that have taken on extra wear from frequent use in busier households.",springIntro:"Garage door spring replacement in Van Nuys often needs to happen quickly, especially on rental properties where a broken door affects both tenants and security.",springOutro:"We size the replacement to the door's actual weight and give property owners a clear, itemized price so there's no ambiguity about what's being done.",openerIntro:"Garage door opener repair in Van Nuys frequently involves openers that have seen heavier-than-average daily use, especially in multi-unit or rental properties.",openerOutro:"We check whether a repair will hold up under that usage level or whether a more durable replacement opener makes more sense long-term.",installIntro:"Garage door installation in Van Nuys often comes down to durability and value — a door that can handle frequent use without needing constant attention.",installOutro:"We help landlords and homeowners alike choose a door that balances upfront cost with long-term reliability.",whyChooseIntro:"We're based nearby in Tarzana and work with both homeowners and property managers throughout Van Nuys — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Encino","Sherman Oaks","Reseda","North Hollywood"],nearbyBlurb:"Along with Van Nuys, we regularly serve Tarzana, Encino, Sherman Oaks, Reseda, and North Hollywood.",faqs:[{q:"How much does garage door repair cost in Van Nuys?",a:"It depends on the issue — we give property owners and homeowners alike a clear, itemized price after inspecting the door."},{q:"Do you offer free estimates in Van Nuys?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Van Nuys?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Do you work with landlords and property managers in Van Nuys?",a:"Yes, we regularly work with rental property owners who need fast, clearly priced repairs."},{q:"Do you offer 24-hour service in Van Nuys?",a:"Yes, especially important for rental properties where a broken door is also a security concern."},{q:"My garage door is used heavily — will it need more frequent repairs?",a:"Higher usage does mean parts wear faster. A more durable opener or hardware upgrade can help reduce how often repairs are needed."},{q:"Should I repair or replace my garage door in Van Nuys?",a:"It depends on the door's age and how it's used. We'll give you a straightforward comparison so you can decide with good information."},{q:"Do you repair garage door openers in Van Nuys?",a:"Yes, including openers under heavier-than-average daily use."},{q:"Do you install new garage doors in Van Nuys?",a:"Yes, including durable options suited for frequent use in rental or multi-unit properties."},{q:"Do you serve areas near Van Nuys?",a:"Yes — we also serve Tarzana, Encino, Sherman Oaks, Reseda, and North Hollywood."}],finalCtaTagline:"Licensed, insured, and family owned — serving Van Nuys with free estimates and same-day availability when scheduling allows."},calabasas:{slug:"calabasas",cityName:"Calabasas",metaTitle:"Garage Door Repair Calabasas, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Calabasas, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Calabasas from nearby Tarzana.",intro:["Calabasas is known for larger estates, gated communities, and long private driveways — which usually means bigger, heavier garage doors with custom finishes, and sometimes gate systems that work alongside them. We're comfortable with both the standard jobs and the more involved ones.","Professional Garage Door Services is based nearby in Tarzana, and we work with Calabasas homeowners who expect a clean, professional job and a clear explanation of what's being repaired and why. We're licensed, insured, and family owned, with free estimates on every visit.","Same-day service is often available, and 24-hour service is there for anything that can't wait, including doors that won't close and secure a home behind a gated entry. Call (888) 285-4021 and we'll figure out the right approach."],localInsightTitle:"What We See Most in Calabasas",localInsight:"Larger custom doors are common here, often paired with heavier-duty openers and, in gated communities, coordinated with a separate gate system. These setups need springs and hardware sized specifically for the door's true weight — using an average-size spring on an oversized custom door is a common mistake we correct.",springIntro:"Garage door spring replacement in Calabasas usually involves larger or custom doors that need springs matched precisely to the door's actual weight and cycle count.",springOutro:"An undersized spring on a heavy custom door wears out fast and can fail suddenly — we calibrate every replacement to the specific door, not a generic average.",openerIntro:"Garage door opener repair in Calabasas often involves heavier-duty openers required for larger, custom doors, sometimes integrated with a home's broader security or gate system.",openerOutro:"We check that the opener's capacity actually matches the door it's running — a mismatch here is a common reason for premature failures.",installIntro:"Garage door installation in Calabasas is often about matching a custom look — wood, wood-look steel, or iron-accented designs — with hardware that can reliably support the door's real weight over time.",installOutro:"We help homeowners choose a door and opener combination built to last on a larger, heavier installation, not just one that looks right on day one.",whyChooseIntro:"We're based nearby in Tarzana and are comfortable with the larger, custom installations common throughout Calabasas — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Woodland Hills","West Hills","Hidden Hills","Agoura Hills"],nearbyBlurb:"Along with Calabasas, we regularly serve Tarzana, Woodland Hills, West Hills, Hidden Hills, and Agoura Hills.",faqs:[{q:"How much does garage door repair cost in Calabasas?",a:"Larger custom doors can cost more to service than standard doors due to their size and hardware. We give you an exact price after inspecting the door."},{q:"Do you offer free estimates in Calabasas?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Calabasas?",a:"Often yes, though larger custom doors sometimes require sourcing a specific spring size. Call (888) 285-4
300021 to check availability."},{q:"My garage door is a large custom design — can you still service it?",a:"Yes. We size springs and hardware to the door's actual weight, which is especially important for larger custom doors."},{q:"Do you offer 24-hour service in Calabasas?",a:"Yes, for urgent situations including doors that won't close and secure the home."},{q:"Is it safe to force open a heavy custom garage door with a broken spring?",a:"No — this is even more important with larger custom doors, where the lack of counterbalance makes the door especially dangerous to lift."},{q:"Should I repair or replace my garage door in Calabasas?",a:"It depends on the door's age, design, and hardware condition — we'll walk you through the honest tradeoffs for your specific setup."},{q:"Do you repair garage door openers in Calabasas?",a:"Yes, including heavier-duty openers required for larger or custom doors."},{q:"Do you install new garage doors in Calabasas?",a:"Yes, including custom wood, wood-look, and iron-accented designs matched to the home."},{q:"Do you serve areas near Calabasas?",a:"Yes — we also serve Tarzana, Woodland Hills, West Hills, Hidden Hills, and Agoura Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Calabasas with free estimates and same-day availability when scheduling allows."},"canoga-park":{slug:"canoga-park",cityName:"Canoga Park",metaTitle:"Garage Door Repair Canoga Park, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Canoga Park, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Canoga Park from nearby Tarzana.",intro:["Canoga Park has a lot of history and a lot of older homes to match, many built well before modern garage door hardware became standard. We spend a fair amount of time here helping homeowners get more life out of a door that's still structurally solid but mechanically tired.","Professional Garage Door Services is based nearby in Tarzana, and we give Canoga Park homeowners a straightforward, no-pressure look at what's wrong and what it'll cost. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for anything urgent — a spring that's given out or a door that won't close and secure the garage. Call (888) 285-4021 and we'll take it from there."],localInsightTitle:"What We See Most in Canoga Park",localInsight:"Many Canoga Park homes are older, and it shows in the garage door hardware — original springs, rollers, and openers that have simply been running a long time. The doors themselves are often still in decent shape, which makes a hardware-focused repair the more practical option in a lot of cases.",springIntro:"Garage door spring replacement in Canoga Park frequently involves older doors where the original spring is well past its expected cycle life.",springOutro:"Replacing the spring on an older door is often enough to restore smooth, safe operation — we check the rest of the hardware at the same time to catch anything else that's close behind.",openerIntro:"Garage door opener repair in Canoga Park often means working on older chain-drive units that are simply aging out, or that have never had a proper tune-up.",openerOutro:"Many of these openers can be brought back to reliable service with the right repair — we'll tell you honestly when that's no longer the better option.",installIntro:"Garage door installation in Canoga Park is often driven by a door that's finally beyond a reasonable repair after years of service, or a homeowner ready to move on from an old wood door.",installOutro:"We offer practical, well-priced steel door options alongside insulated and upgraded styles for homeowners who want more.",whyChooseIntro:"We're based nearby in Tarzana and work with a lot of Canoga Park homeowners who want honest guidance on an older door — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Woodland Hills","Winnetka","Reseda","West Hills"],nearbyBlurb:"Along with Canoga Park, we regularly serve Tarzana, Woodland Hills, Winnetka, Reseda, and West Hills.",faqs:[{q:"How much does garage door repair cost in Canoga Park?",a:"It depends on the issue — older doors sometimes need multiple hardware parts addressed together. We inspect first and give you an exact price."},{q:"Do you offer free estimates in Canoga Park?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Canoga Park?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage door is quite old — is it worth repairing?",a:"Often, yes, if the door itself is structurally sound. Many older doors just need worn hardware replaced to run well again."},{q:"Do you offer 24-hour service in Canoga Park?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Is it safe to keep using an old, noisy garage door?",a:"Noise alone isn't usually an emergency, but it's a sign of wear worth having checked before something fails outright."},{q:"Should I repair or replace my older garage door in Canoga Park?",a:"We'll give you an honest comparison based on the door's structural condition, not just its age."},{q:"Do you repair garage door openers in Canoga Park?",a:"Yes, including older chain-drive units that are often still worth repairing."},{q:"Do you install new garage doors in Canoga Park?",a:"Yes, including affordable steel options as well as insulated and upgraded styles."},{q:"Do you serve areas near Canoga Park?",a:"Yes — we also serve Tarzana, Woodland Hills, Winnetka, Reseda, and West Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Canoga Park with free estimates and same-day availability when scheduling allows."},"west-hills":{slug:"west-hills",cityName:"West Hills",metaTitle:"Garage Door Repair West Hills, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving West Hills, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving West Hills from nearby Tarzana.",intro:["West Hills is largely made up of planned communities built from the 1980s onward, with fairly consistent two- and three-car garage setups and homeowner association standards that often call for a clean, uniform look. We help homeowners keep their doors both functional and within those guidelines.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work with West Hills homeowners on repairs, tune-ups, and replacements. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers anything urgent — a broken spring, a door that won't close, or an opener that's stopped responding entirely. Call (888) 285-4021 and we'll go from there."],localInsightTitle:"What We See Most in West Hills",localInsight:"Because a lot of West Hills was built out around the same era, we see similar issues across many homes at once — openers reaching the end of their service life, original rollers finally wearing down, and homeowners wanting a specific door style to match HOA aesthetic guidelines.",springIntro:"Garage door spring replacement in West Hills is usually a well-understood job — most homes use similar door sizes, so getting the right spring specs is quick and consistent.",springOutro:"We still confirm the exact weight and cycle needs for your specific door before installing a replacement spring, rather than assuming every door in the neighborhood is identical.",openerIntro:"Garage door opener repair in West Hills often involves openers from the original construction era finally reaching end of life, or units that need a simple sensor or gear repair.",openerOutro:"We'll let you know if a repair is the practical choice or if it's time for a newer, more efficient opener — including smart, Wi-Fi-enabled options if you're interested.",installIntro:"Garage door installation in West Hills often needs to fit within HOA style guidelines while still giving homeowners some room to upgrade materials, insulation, or design details.",installOutro:"We help you find a door that satisfies neighborhood standards without feeling like a compromise on quality or style.",whyChooseIntro:"We're based nearby in Tarzana and understand the more uniform, planned-community style of West Hills — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Woodland Hills","Calabasas","Canoga Park","Chatsworth"],nearbyBlurb:"Along with West Hills, we regularly serve Tarzana, Woodland Hills, Calabasas, Canoga Park, and Chatsworth.",faqs:[{q:"How much does garage door repair cost in West Hills?",a:"Most homes here have fairly standard door sizes, which keeps pricing predictable. We inspect first and give you an exact quote."},{q:"Do you offer free estimates in West Hills?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in West Hills?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Does my new garage door need to match HOA guidelines?",a:"Many West Hills communities have HOA style requirements. We can help you choose a door that fits those guidelines while still meeting your needs."},{q:"Do you offer 24-hour service in West Hills?",a:"Yes, for urgent issues like a broken spring or an opener that's stopped working entirely."},{q:"Why do a lot of homes in my neighborhood have opener issues around the same time?",a:"Homes built in the same era often have openers reaching end-of-life around the same time — it's a common pattern in planned communities like West Hills."},{q:"Should I repair or replace my garage door in West Hills?",a:"It depends on the door's age and condition — we'll walk you through the honest tradeoffs, including HOA-compliant replacement options."},{q:"Do you repair garage door openers in West Hills?",a:"Yes, including original-era openers and newer smart models."},{q:"Do you install new garage doors in West Hills?",a:"Yes, including options designed to meet common HOA aesthetic standards."},{q:"Do you serve areas near West Hills?",a:"Yes — we also serve Tarzana, Woodland Hills, Calabasas, Canoga Park, and Chatsworth."}],finalCtaTagline:"Licensed, insured, and family owned — serving West Hills with free estimates and same-day availability when scheduling allows."},"studio-city":{slug:"studio-city",cityName:"Studio City",metaTitle:"Garage Door Repair Studio City, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Studio City, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Studio City from nearby Tarzana.",intro:["Studio City mixes flat, walkable streets near Ventura Blvd with hillside homes climbing toward Mulholland — and a lot of renovated or updated houses where curb appeal genuinely matters. A dated or malfunctioning garage door tends to stand out more here than in some other neighborhoods.","Professional Garage Door Services is based nearby in Tarzana, and we help Studio City homeowners with everything from quick repairs to full door replacements that match a recently updated home. We're licensed, insured, and family owned, with free estimates on every job.","Same-day service is often available, and 24-hour service covers anything that can't wait. Call (888) 285-4021 and we'll walk you through what's happening with your door."],localInsightTitle:"What We See Most in Studio City",localInsight:"A lot of Studio City homes have been renovated or updated in recent years, and homeowners often want a garage door repair or replacement that keeps pace with the rest of the house — not just a functional fix, but one that looks intentional. We also see hillside homes with steeper driveways that put extra demand on springs and openers.",springIntro:"Garage door spring replacement in Studio City covers everything from standard flats-area doors to larger doors on steeper hillside driveways near Mulholland.",springOutro:"We size every replacement spring to the specific door's weight and how it's used, rather than assuming a one-size-fits-all fit.",openerIntro:"Garage door opener repair in Studio City often involves updating older openers to quieter, more reliable models, especially in homes that have been otherwise renovated.",openerOutro:"If your opener is loud, slow, or simply doesn't match the rest of an updated home, we can advise on whether a repair or a quieter replacement makes more sense.",installIntro:"Garage door installation in Studio City is often part of a broader home update — homeowners want a door that complements a renovated exterior, not one that looks left behind.",installOutro:"We help you choose styles and finishes that match contemporary or updated traditional homes, without ignoring practical factors like insulation and hardware durability.",whyChooseIntro:"We're based nearby in Tarzana and work with a lot of Studio City homeowners focused on both function and curb appeal — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Sherman Oaks","Encino","North Hollywood","Toluca Lake"],nearbyBlurb:"Along with Studio City, we regularly serve Tarzana, Sherman Oaks, Encino, North Hollywood, and Toluca Lake.",faqs:[{q:"How much does garage door repair cost in Studio City?",a:"It depends on the issue and door style — updated or custom doors can cost more to service than standard ones. We give you an exact price after inspecting the door."},{q:"Do you offer free estimates in Studio City?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Studio City?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Can you match a new garage door to my home's renovated style?",a:"Yes, we help homeowners choose styles and finishes that complement an updated or renovated exterior."},{q:"Do you offer 24-hour service in Studio City?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"My garage is on a steep hillside driveway — does that matter?",a:"Yes, steeper driveways and heavier doors put more strain on springs and openers, which we factor into any repair or replacement."},{q:"Should I repair or replace my garage door in Studio City?",a:"It depends on the door's age, condition, and whether it still fits the home's current look — we'll give you an honest comparison."},{q:"Do you repair garage door openers in Studio City?",a:"Yes, including upgrading older, louder openers to quieter modern models."},{q:"Do you install new garage doors in Studio City?",a:"Yes, including styles suited to renovated or updated homes."},{q:"Do you serve areas near Studio City?",a:"Yes — we also serve Tarzana, Sherman Oaks, Encino, North Hollywood, and Toluca Lake."}],finalCtaTagline:"Licensed, insured, and family owned — serving Studio City with free estimates and same-day availability when scheduling allows."},"north-hollywood":{slug:"north-hollywood",cityName:"North Hollywood",metaTitle:"Garage Door Repair North Hollywood, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving North Hollywood, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving North Hollywood from nearby Tarzana.",intro:["North Hollywood has grown a lot in recent years, especially around the NoHo Arts District, and the housing mix shows it — classic single-family homes, converted garages used as workspaces or studios, and a fair number of older duplexes and apartment buildings with shared garage access.","Professional Garage Door Services is based nearby in Tarzana, and we work throughout North Hollywood on standard home repairs as well as multi-unit and converted-space garage doors. We're licensed, insured, and family owned, with free estimates on every job.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll help you figure out the right next step."],localInsightTitle:"What We See Most in North Hollywood",localInsight:"With so many converted garages and mixed-use properties in North Hollywood, we often deal with doors that have been repurposed for storage, workspace, or studio use — meaning wear patterns can look different than a typical daily-use garage. We also see a fair number of older multi-unit buildings with shared garage doors serving several tenants at once.",springIntro:"Garage door spring replacement in North Hollywood covers both standard single-family homes and shared-access doors serving multiple units, which see different usage patterns and wear.",springOutro:"We size the replacement spring to the door's actual weight and how often it's used, whether that's a single household or a shared multi-unit entrance.",openerIntro:"Garage door opener repair in North Hollywood often involves openers on older multi-unit buildings, or units in converted garage spaces that get used differently than a typical residential garage.",openerOutro:"We check both the opener's condition and whether it's actually suited for how the space is being used before recommending a repair or replacement.",installIntro:"Garage door installation in North Hollywood ranges from standard single-family replacements to durable doors built for shared, multi-unit access points.",installOutro:"We help property owners and homeowners choose a door suited to actual usage, whether that's a quiet residential door or a heavier-duty option for shared access.",whyChooseIntro:"We're based nearby in Tarzana and are comfortable with North Hollywood's mix of single-family, converted, and multi-unit garage setups — licensed, insured, and family owned.",nearbyAreas:["Tarzana","Studio City","Van Nuys","Burbank","Sherman Oaks"],nearbyBlurb:"Along with North Hollywood, we regularly serve Tarzana, Studio City, Van Nuys, Burbank, and Sherman Oaks.",faqs:[{q:"How much does garage door repair cost in North Hollywood?",a:"It depends on the setup — shared or multi-unit doors can differ in cost from standard single-family doors. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in North Hollywood?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in North Hollywood?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"I have a converted garage used as a studio or workspace — can you still service the door?",a:"Yes, we service doors on converted spaces just like standard garages, accounting for how the space is actually used."},{q:"Do you offer 24-hour service in North Hollywood?",a:"Yes, for urgent situations like a broken spring or a door that won't close and secure the space."},{q:"Do you work on shared garage doors for multi-unit buildings?",a:"Yes, we service shared-access doors serving multiple units, which often see different wear patterns than single-family garages."},{q:"Should I repair or replace my garage door in North Hollywood?",a:"It depends on the door's age, condition, and how it's used — we'll walk you through the honest tradeoffs for your specific situation."},{q:"Do you repair garage door openers in North Hollywood?",a:"Yes, including openers on multi-unit buildings and converted garage spaces."},{q:"Do you install new garage doors in North Hollywood?",a:"Yes, including standard residential doors and heavier-duty options for shared access points."},{q:"Do you serve areas near North Hollywood?",a:"Yes — we also serve Tarzana, Studio City, Van Nuys, Burbank, and Sherman Oaks."}],finalCtaTagline:"Licensed, insured, and family owned — serving North Hollywood with free estimates and same-day availability when scheduling allows."}},QO={northridge:{slug:"northridge",cityName:"Northridge",metaTitle:"Garage Door Repair Northridge, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Northridge, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Northridge from nearby Tarzana.",intro:["Northridge is a mix of long-time family homes, newer construction near CSUN, and a steady stream of student and faculty rentals close to campus. That variety means we see everything from decades-old original doors to newer builds with modern openers that just need a tune-up.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work throughout Northridge — from the neighborhoods around Cal State Northridge to the quieter residential streets further out. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait — a spring that snaps overnight or a door that won't secure your home. Call (888) 285-4021 and we'll go over what's going on."],localInsightTitle:"What We See Most in Northridge",localInsight:"Northridge has a well-known history with the 1994 earthquake, and while most homes have been fully repaired and retrofitted since, we do still occasionally find garage door tracks or framing that were never properly realigned after settling. We also see a lot of rental properties near CSUN where openers and remotes have simply seen heavy turnover between tenants and need a refresh.",springIntro:"Garage door spring replacement in Northridge covers a wide range of door ages, from original hardware on long-time family homes to newer doors on more recently built properties.",springOutro:"Whatever the door's age, we size the replacement spring to its actual weight and cycle count rather than guessing based on the opening size alone.",openerIntro:"Garage door opener repair in Northridge often involves rental properties near CSUN where remotes and keypads have been reprogrammed repeatedly for different tenants over the years.",openerOutro:"We can reset and reprogram existing openers cleanly, or recommend a replacement if the unit itself is simply worn out from years of frequent use.",installIntro:"Garage door installation in Northridge ranges from straightforward steel replacements on family homes to more design-conscious choices for updated properties near the university area.",installOutro:"We'll walk you through options that fit your budget and the style of your home, with hardware properly matched to the door's weight and your opener's capacity.",whyChooseIntro:"We're based nearby in Tarzana and know Northridge's mix of long-time family homes and rental turnover well — licensed, insured, and family owned.",nearbyAreas:["Reseda","Winnetka","Granada Hills","Chatsworth","Van Nuys"],nearbyBlurb:"Along with Northridge, we regularly serve Reseda, Winnetka, Granada Hills, Chatsworth, and Van Nuys.",faqs:[{q:"How much does garage door repair cost in Northridge?",a:"It depends on the issue — we inspect the door first and give you an exact, upfront price whether it's a simple hardware fix or a full spring replacement."},{q:"Do you offer free estimates in Northridge?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Northridge?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"I manage a rental property near CSUN — can you handle opener resets between tenants?",a:"Yes, we regularly reprogram remotes and keypads for rental turnover, and can advise if the opener itself needs replacing after years of heavy use."},{q:"Do you offer 24-hour service in Northridge?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"My home is older and I'm not sure if the garage door track ever settled — can you check?",a:"Yes, we inspect tracks and framing alignment as part of any repair visit, especially on older Northridge homes."},{q:"Should I repair or replace my garage door in Northridge?",a:"It depends on the door's age and condition — we'll give you an honest comparison based on what we find during the inspection."},{q:"Do you repair garage door openers in Northridge?",a:"Yes, including reprogramming and full opener replacement when needed."},{q:"Do you install new garage doors in Northridge?",a:"Yes, including standard steel and upgraded style options for both family homes and updated properties."},{q:"Do you serve areas near Northridge?",a:"Yes — we also serve Reseda, Winnetka, Granada Hills, Chatsworth, and Van Nuys."}],finalCtaTagline:"Licensed, insured, and family owned — serving Northridge with free estimates and same-day availability when scheduling allows."},chatsworth:{slug:"chatsworth",cityName:"Chatsworth",metaTitle:"Garage Door Repair Chatsworth, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Chatsworth, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Chatsworth from nearby Tarzana.",intro:["Chatsworth sits right up against the Santa Susana foothills, and a lot of the properties out here have more land, larger detached garages, and occasionally equestrian setups that come with their own storage needs. It's a different kind of service call than a tight suburban lot, and we're set up for it.","Professional Garage Door Services is based nearby in Tarzana, and we handle everything from standard residential doors to larger, heavier doors on bigger detached garages throughout Chatsworth. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait — a broken spring on a heavy door, or a door that won't secure a garage full of tools and equipment. Call (888) 285-4021 and we'll figure out the right plan."],localInsightTitle:"What We See Most in Chatsworth",localInsight:"Because a number of Chatsworth properties sit on larger lots near the foothills, we see more detached and oversized garage doors here than in tighter suburban neighborhoods — sometimes housing workshops, equipment, or horse trailers rather than just cars. These larger doors need springs and openers rated for the extra weight and width, and dust from the surrounding hillside areas can also accelerate wear on tracks and rollers.",springIntro:"Garage door spring replacement in Chatsworth often involves larger or wider doors on detached garages, which need springs sized differently than a standard single-car door.",springOutro:"We calculate spring specs based on the door's actual size and weight, which matters even more on oversized or heavy-duty doors common in this area.",openerIntro:"Garage door opener repair in Chatsworth frequently involves openers working harder than average due to larger, heavier doors or dustier operating conditions near the foothills.",openerOutro:"If your opener seems to strain, run hot, or need more force than it used to, it may be underpowered for the door it's lifting — worth checking before it fails.",installIntro:"Garage door installation in Chatsworth often means larger openings or detached structures, sometimes with different width and height requirements than a typical suburban garage.",installOutro:"We help you choose a door and hardware combination sized correctly for larger openings, so it operates smoothly instead of straining from day one.",whyChooseIntro:"We're based nearby in Tarzana and are used to Chatsworth's larger properties and detached garages — licensed, insured, and family owned.",nearbyAreas:["Northridge","West Hills","Canoga Park","Granada Hills","Winnetka"],nearbyBlurb:"Along with Chatsworth, we regularly serve Northridge, West Hills, Canoga Park, Granada Hills, and Winnetka.",faqs:[{q:"How much does garage door repair cost in Chatsworth?",a:"It depends on the door — larger or detached-garage doors can cost more to service than a standard single-car door. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Chatsworth?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Chatsworth?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"I have a large detached garage — can you handle an oversized door?",a:"Yes, we regularly work on larger and wider doors common on Chatsworth's bigger properties, sized correctly for their actual weight."},{q:"Do you offer 24-hour service in Chatsworth?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Does dust from the foothills affect garage doors?",a:"It can accelerate wear on tracks and rollers over time — regular tune-ups help catch that before it becomes a bigger issue."},{q:"Should I repair or replace my garage door in Chatsworth?",a:"It depends on the door's size, age, and condition — we'll walk you through the honest tradeoffs for your specific setup."},{q:"Do you repair garage door openers in Chatsworth?",a:"Yes, including openers that may be underpowered for larger or heavier doors."},{q:"Do you install new garage doors in Chatsworth?",a:"Yes, including larger and custom-sized doors for bigger properties and detached garages."},{q:"Do you serve areas near Chatsworth?",a:"Yes — we also serve Northridge, West Hills, Canoga Park, Granada Hills, and Winnetka."}],finalCtaTagline:"Licensed, insured, and family owned — serving Chatsworth with free estimates and same-day availability when scheduling allows."},"granada-hills":{slug:"granada-hills",cityName:"Granada Hills",metaTitle:"Garage Door Repair Granada Hills, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Granada Hills, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Granada Hills from nearby Tarzana.",intro:["Granada Hills is a mostly quiet, single-story suburban community, with a lot of homes built in the 1960s and wide driveways that often double as RV or boat parking. That extra-wide setup means garage doors here are sometimes bigger than a standard single-car opening, and we're used to sizing repairs accordingly.","Professional Garage Door Services is based nearby in Tarzana, and we work with Granada Hills homeowners on everything from routine spring and roller repairs to full door replacements. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll walk you through what's going on with your door."],localInsightTitle:"What We See Most in Granada Hills",localInsight:"A lot of Granada Hills homes were built with wider driveways meant for RV or boat storage, and some garages were widened or modified over the years to match. That means we occasionally find doors that were resized or retrofitted without matching hardware upgrades — a mismatch that shows up as uneven movement or premature spring wear. We also see plenty of straightforward 1960s-era doors simply due for their first major hardware refresh.",springIntro:"Garage door spring replacement in Granada Hills sometimes involves doors that were widened or modified from their original size, which means the spring needs to match the door as it exists now — not as it was originally built.",springOutro:"We measure and size every replacement spring to the door's current dimensions and weight, which matters especially on any door that's been modified over the years.",openerIntro:"Garage door opener repair in Granada Hills often involves openers reaching the end of a long service life on original 1960s-era doors, or units straining on a wider-than-standard door.",openerOutro:"We'll check whether your opener is properly matched to your door's actual size before recommending a repair or replacement.",installIntro:"Garage door installation in Granada Hills frequently involves matching a new door to a wide driveway or a previously modified opening.",installOutro:"We help you choose a door sized correctly for your actual opening, whether that's a standard single door or a wider custom fit.",whyChooseIntro:"We're based nearby in Tarzana and know Granada Hills' mix of original and modified garages well — licensed, insured, and family owned.",nearbyAreas:["Northridge","Chatsworth","Porter Ranch","Mission Hills","Sylmar"],nearbyBlurb:"Along with Granada Hills, we regularly serve Northridge, Chatsworth, Porter Ranch, Mission Hills, and Sylmar.",faqs:[{q:"How much does garage door repair cost in Granada Hills?",a:"It depends on the issue and whether the door is a standard or widened size — we inspect first and give you an exact price."},{q:"Do you offer free estimates in Granada Hills?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Granada Hills?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage door was widened years ago for RV parking — can you still service it?",a:"Yes, we measure and size any repair or replacement to the door's current dimensions, whatever the original size was."},{q:"Do you offer 24-hour service in Granada Hills?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"My door is original to a 1960s house — is it worth repairing?",a:"Often yes, if the door itself is structurally sound. We'll give you an honest comparison of repair versus replacement."},{q:"Should I repair or replace my garage door in Granada Hills?",a:"It depends on the door's age, size, and condition — we'll walk you through the tradeoffs for your specific situation."},{q:"Do you repair garage door openers in Granada Hills?",a:"Yes, including openers that may be undersized for a wider-than-standard door."},{q:"Do you install new garage doors in Granada Hills?",a:"Yes, including standard and custom-width doors sized to your actual opening."},{q:"Do you serve areas near Granada Hills?",a:"Yes — we also serve Northridge, Chatsworth, Porter Ranch, Mission Hills, and Sylmar."}],finalCtaTagline:"Licensed, insured, and family owned — serving Granada Hills with free estimates and same-day availability when scheduling allows."},"valley-village":{slug:"valley-village",cityName:"Valley Village",metaTitle:"Garage Door Repair Valley Village, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Valley Village, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Valley Village from nearby Tarzana.",intro:["Valley Village is a small, walkable community squeezed between Studio City and North Hollywood, with tighter lots and, in some pockets, alley-access garages instead of a standard driveway setup. That layout changes how we approach some repairs, and we're familiar with it.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work throughout Valley Village on both standard driveway garages and the alley-access setups found in some parts of the neighborhood. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll walk you through the next step."],localInsightTitle:"What We See Most in Valley Village",localInsight:"Because some Valley Village homes have alley-access garages, we occasionally deal with tighter working space and doors that take more day-to-day wear from frequent, close-quarters use. In the more traditional driveway-facing homes, a lot of the doors are mid-size and standard, with wear patterns typical of an established, closely built neighborhood.",springIntro:"Garage door spring replacement in Valley Village covers both standard driveway-facing doors and the alley-access setups found in parts of the neighborhood, each sized to the door's specific weight and use pattern.",springOutro:"Alley-access doors in particular tend to see more frequent daily cycles, which we factor in when recommending spring specs built to last.",openerIntro:"Garage door opener repair in Valley Village often comes down to openers that have simply seen a lot of cycles in a tightly packed, frequently used neighborhood.",openerOutro:"We'll check wear patterns honestly and let you know if a repair will hold up or if it's time to consider a more durable replacement.",installIntro:"Garage door installation in Valley Village sometimes needs to account for tighter alley access or a smaller working footprint than a typical suburban driveway.",installOutro:"We'll help you pick a door and opener combination that fits your specific access setup, not just a generic standard recommendation.",whyChooseIntro:"We're based nearby in Tarzana and are familiar with Valley Village's mix of driveway and alley-access garages — licensed, insured, and family owned.",nearbyAreas:["Studio City","North Hollywood","Sherman Oaks","Toluca Lake","Burbank"],nearbyBlurb:"Along with Valley Village, we regularly serve Studio City, North Hollywood, Sherman Oaks, Toluca Lake, and Burbank.",faqs:[{q:"How much does garage door repair cost in Valley Village?",a:"It depends on the issue and access setup — we inspect the door first and give you an exact price before any work begins."},{q:"Do you offer free estimates in Valley Village?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Valley Village?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage is alley-access, not driveway-facing — can you still service it?",a:"Yes, we regularly work on alley-access garages throughout Valley Village and account for the tighter working space."},{q:"Do you offer 24-hour service in Valley Village?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Does an alley-access garage door wear out faster?",a:"It can, especially with frequent daily use in a tighter space — regular tune-ups help catch wear before it becomes a bigger repair."},{q:"Should I repair or replace my garage door in Valley Village?",a:"It depends on the door's age, condition, and how it's used — we'll give you an honest comparison for your specific setup."},{q:"Do you repair garage door openers in Valley Village?",a:"Yes, including openers with heavy cycle counts from frequent daily use."},{q:"Do you install new garage doors in Valley Village?",a:"Yes, including options suited to both standard driveways and tighter alley-access setups."},{q:"Do you serve areas near Valley Village?",a:"Yes — we also serve Studio City, North Hollywood, Sherman Oaks, Toluca Lake, and Burbank."}],finalCtaTagline:"Licensed, insured, and family owned — serving Valley Village with free estimates and same-day availability when scheduling allows."},"toluca-lake":{slug:"toluca-lake",cityName:"Toluca Lake",metaTitle:"Garage Door Repair Toluca Lake, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Toluca Lake, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Toluca Lake from nearby Tarzana.",intro:["Toluca Lake is known for its tree-lined streets, older character homes, and proximity to the studios — and a lot of the garage doors we see reflect that older, established charm, including some genuine vintage wood doors that need careful, specialized handling.","Professional Garage Door Services is based nearby in Tarzana, and we work with Toluca Lake homeowners who want their door's character preserved, not just replaced with the cheapest standard option. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait, handled with the discretion this neighborhood is known for. Call (888) 285-4021 and we'll go over what's happening."],localInsightTitle:"What We See Most in Toluca Lake",localInsight:"A number of Toluca Lake's older homes still have their original wood garage doors, which require different care than a standard steel door — different spring calibration, careful panel repair rather than replacement, and finishes that need to be matched rather than just painted over. We also work with a fair number of homeowners who value a quiet, low-key service visit given the neighborhood's proximity to the entertainment industry.",springIntro:"Garage door spring replacement on Toluca Lake's older wood doors requires careful calibration, since these doors are often heavier and more variable in weight than a standard steel door.",springOutro:"We size and balance replacement springs specifically to the door in front of us, which matters even more on vintage or custom wood doors with unique weight profiles.",openerIntro:"Garage door opener repair in Toluca Lake often involves pairing a reliable, quiet-running opener with an older or heavier door that wasn't originally designed with a motorized opener in mind.",openerOutro:"If your opener strains on an older wood door, it may need a stronger unit properly matched to the door's actual weight and clearance.",installIntro:"Garage door installation in Toluca Lake often comes down to preserving a home's character — matching a new door's style to an older property, or restoring rather than replacing where possible.",installOutro:"We'll walk you through options that respect the home's look, whether that's a wood-style steel door or a genuine wood replacement built to match.",whyChooseIntro:"We're based nearby in Tarzana and take a careful, low-key approach with Toluca Lake's older and more custom homes — licensed, insured, and family owned.",nearbyAreas:["Valley Village","Studio City","North Hollywood","Burbank","Universal City"],nearbyBlurb:"Along with Toluca Lake, we regularly serve Valley Village, Studio City, North Hollywood, Burbank, and Universal City.",faqs:[{q:"How much does garage door repair cost in Toluca Lake?",a:"It depends on the door — vintage wood doors can cost more to service carefully than standard steel doors. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Toluca Lake?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Toluca Lake?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"I have an original wood garage door — can you repair it instead of replacing it?",a:"In many cases, yes. We assess the wood's condition first and repair panels or hardware where possible rather than defaulting to full replacement."},{q:"Do you offer 24-hour service in Toluca Lake?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Can you match a new door to an older home's style?",a:"Yes, including wood-style steel options or genuine wood doors built to match the home's existing character."},{q:"Should I repair or replace my garage door in Toluca Lake?",a:"It depends on the door's condition and material — we'll give you an honest comparison, especially for vintage or custom doors."},{q:"Do you repair garage door openers in Toluca Lake?",a:"Yes, including pairing a properly sized opener with older or heavier wood doors."},{q:"Do you install new garage doors in Toluca Lake?",a:"Yes, including style-matched and custom wood options for older homes."},{q:"Do you serve areas near Toluca Lake?",a:"Yes — we also serve Valley Village, Studio City, North Hollywood, Burbank, and Universal City."}],finalCtaTagline:"Licensed, insured, and family owned — serving Toluca Lake with free estimates and same-day availability when scheduling allows."}},XO={"mission-hills":{slug:"mission-hills",cityName:"Mission Hills",metaTitle:"Garage Door Repair Mission Hills, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Mission Hills, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Mission Hills from nearby Tarzana.",intro:["Mission Hills mixes older residential streets near the San Fernando Mission with small commercial and light-industrial stretches along its main corridors, which means we see a real variety of garage doors here — from standard single-family doors to small business roll-up and sectional doors used for storage and light commercial work.","Professional Garage Door Services is based nearby in Tarzana, and we handle both residential and small commercial garage door work throughout Mission Hills. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait — a home garage door that won't secure overnight, or a small business roll-up door stuck at the worst possible time. Call (888) 285-4021 and we'll go over what's going on."],localInsightTitle:"What We See Most in Mission Hills",localInsight:"Because Mission Hills has a mix of older residential homes and small commercial properties, we get a wider range of service calls here than in a purely residential neighborhood — everything from a decades-old home door that's finally due for new hardware, to a commercial roll-up door used daily by a small business that needs a fast, reliable fix to avoid downtime.",springIntro:"Garage door spring replacement in Mission Hills covers both standard residential torsion springs and the heavier-duty springs used on small commercial roll-up doors.",springOutro:"We size every replacement to the door's actual weight and daily use pattern, which matters especially for commercial doors cycling far more often than a home garage door.",openerIntro:"Garage door opener repair in Mission Hills often involves older residential openers reaching the end of their service life, or commercial-grade operators that see heavier daily use.",openerOutro:"We'll let you know honestly whether a repair will hold up under your specific usage, residential or commercial, before recommending a replacement.",installIntro:"Garage door installation in Mission Hills ranges from straightforward residential replacements to commercial-grade doors built for frequent daily cycling.",installOutro:"We help homeowners and small business owners alike choose a door rated correctly for how it's actually going to be used.",whyChooseIntro:"We're based nearby in Tarzana and comfortable working across Mission Hills' mix of homes and small businesses — licensed, insured, and family owned.",nearbyAreas:["Sylmar","Granada Hills","North Hills","Panorama City","Sun Valley"],nearbyBlurb:"Along with Mission Hills, we regularly serve Sylmar, Granada Hills, North Hills, Panorama City, and Sun Valley.",faqs:[{q:"How much does garage door repair cost in Mission Hills?",a:"It depends on whether it's a standard residential repair or a commercial roll-up door — we inspect first and give you an exact price."},{q:"Do you offer free estimates in Mission Hills?",a:"Yes, every estimate is free and no-obligation, residential or commercial."},{q:"Can a broken spring be replaced same-day in Mission Hills?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Do you work on small commercial roll-up doors in Mission Hills?",a:"Yes, we service both residential garage doors and small commercial roll-up and sectional doors."},{q:"Do you offer 24-hour service in Mission Hills?",a:"Yes, for urgent situations like a broken spring or a door that won't secure your home or business."},{q:"My business door gets used many times a day — what does that mean for repairs?",a:"Higher-cycle doors wear out faster and need parts sized for that usage — we account for this when quoting commercial repairs."},{q:"Should I repair or replace my garage door in Mission Hills?",a:"It depends on the door's age, condition, and how it's used — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Mission Hills?",a:"Yes, including both residential openers and commercial-grade operators."},{q:"Do you install new garage doors in Mission Hills?",a:"Yes, including residential and small commercial options sized for your actual usage."},{q:"Do you serve areas near Mission Hills?",a:"Yes — we also serve Sylmar, Granada Hills, North Hills, Panorama City, and Sun Valley."}],finalCtaTagline:"Licensed, insured, and family owned — serving Mission Hills with free estimates and same-day availability when scheduling allows."},sylmar:{slug:"sylmar",cityName:"Sylmar",metaTitle:"Garage Door Repair Sylmar, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Sylmar, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Sylmar from nearby Tarzana.",intro:["Sylmar sits up against the foothills, with a mix of long-established neighborhoods, newer developments near the 210, and equestrian properties with larger detached garages. It's a community that's seen its share of seismic history, and that shows up in some of the garage door issues we find here.","Professional Garage Door Services is based nearby in Tarzana, and we work throughout Sylmar on everything from routine repairs to full installations. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for situations that can't wait. Call (888) 285-4021 and we'll figure out what's going on with your door."],localInsightTitle:"What We See Most in Sylmar",localInsight:"Sylmar's history with significant seismic activity means some older homes still have garages with framing or track mounting that shifted slightly over the decades, even if it was never formally addressed. We also see a fair number of larger properties near the foothills with equestrian setups, where detached garages and barns use heavier doors than a typical suburban home. Brush-adjacent properties also mean some homeowners specifically ask about weatherproofing and durability against dust and heat.",springIntro:"Garage door spring replacement in Sylmar covers everything from standard homes to larger doors on foothill properties, each needing springs sized to the door's actual weight.",springOutro:"On older homes, we also check that the surrounding frame and track are properly aligned before finishing a spring replacement, since older structures can shift slightly over time.",openerIntro:"Garage door opener repair in Sylmar often involves openers straining on heavier doors common in the foothill areas, or simply reaching the end of their service life on older homes.",openerOutro:"We'll check whether your opener is properly matched to your door before recommending a repair or replacement.",installIntro:"Garage door installation in Sylmar often means matching a new door to an older home's slightly settled frame, or sizing a larger door for an equestrian property's detached garage.",installOutro:"We measure carefully and account for any frame settling before installation, so the new door operates smoothly from day one.",whyChooseIntro:"We're based nearby in Tarzana and familiar with Sylmar's foothill properties and older neighborhoods alike — licensed, insured, and family owned.",nearbyAreas:["Mission Hills","Granada Hills","San Fernando","Pacoima","Sun Valley"],nearbyBlurb:"Along with Sylmar, we regularly serve Mission Hills, Granada Hills, San Fernando, Pacoima, and Sun Valley.",faqs:[{q:"How much does garage door repair cost in Sylmar?",a:"It depends on the door and its condition — we inspect first and give you an exact, upfront price."},{q:"Do you offer free estimates in Sylmar?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Sylmar?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My home is older and near the foothills — can you still service my door?",a:"Yes, we regularly work on older Sylmar homes and check for any frame or track settling as part of the repair."},{q:"Do you offer 24-hour service in Sylmar?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"I have a detached garage or barn with a large door — can you handle that?",a:"Yes, we service larger doors common on Sylmar's equestrian and foothill properties."},{q:"Should I repair or replace my garage door in Sylmar?",a:"It depends on the door's age and condition — we'll give you an honest comparison for your specific situation."},{q:"Do you repair garage door openers in Sylmar?",a:"Yes, including openers straining on heavier foothill-property doors."},{q:"Do you install new garage doors in Sylmar?",a:"Yes, including doors sized for both standard homes and larger detached structures."},{q:"Do you serve areas near Sylmar?",a:"Yes — we also serve Mission Hills, Granada Hills, San Fernando, Pacoima, and Sun Valley."}],finalCtaTagline:"Licensed, insured, and family owned — serving Sylmar with free estimates and same-day availability when scheduling allows."},"sun-valley":{slug:"sun-valley",cityName:"Sun Valley",metaTitle:"Garage Door Repair Sun Valley, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Sun Valley, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Sun Valley from nearby Tarzana.",intro:["Sun Valley is one of the Valley's more industrial-adjacent communities, with modest single-family homes mixed alongside light-industrial and commercial properties. We work on both sides of that mix — home garage doors and the roll-up doors used by nearby small businesses and workshops.","Professional Garage Door Services is based nearby in Tarzana, and Sun Valley is one of the areas we regularly serve. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll get you sorted out."],localInsightTitle:"What We See Most in Sun Valley",localInsight:"Sun Valley sits low in the Valley floor and runs hot in summer, which accelerates wear on older, non-insulated steel doors and dries out lubrication on hardware faster than in cooler pockets of the Valley. We also see a good number of older homes with original hardware that's simply due for an update, alongside occasional small workshop or light-industrial roll-up doors that see heavier daily use.",springIntro:"Garage door spring replacement in Sun Valley often involves older homes where the original spring has finally reached the end of its service life after years in Valley heat.",springOutro:"We size every replacement to the door's actual weight and check the rest of the hardware while we're there, since heat-accelerated wear often affects more than just the spring.",openerIntro:"Garage door opener repair in Sun Valley frequently involves openers that have simply worked hard for a long time in a hot environment.",openerOutro:"If your opener is straining or running hot, it's worth a look before it fails on you unexpectedly.",installIntro:"Garage door installation in Sun Valley is a good opportunity to upgrade to an insulated door, which holds up better against the Valley floor's summer heat.",installOutro:"We'll walk you through insulated and standard steel options based on your home's exposure and budget.",whyChooseIntro:"We're based nearby in Tarzana and know Sun Valley's mix of homes and small industrial properties well — licensed, insured, and family owned.",nearbyAreas:["North Hollywood","Burbank","Toluca Lake","Valley Village","Mission Hills"],nearbyBlurb:"Along with Sun Valley, we regularly serve North Hollywood, Burbank, Toluca Lake, Valley Village, and Mission Hills.",faqs:[{q:"How much does garage door repair cost in Sun Valley?",a:"It depends on the issue — we inspect first and give you an exact price before starting work."},{q:"Do you offer free estimates in Sun Valley?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Sun Valley?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Does the heat in Sun Valley affect garage doors?",a:"Yes, sitting low in the Valley floor means more heat exposure, which can dry out lubrication and accelerate wear on non-insulated doors."},{q:"Do you offer 24-hour service in Sun Valley?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Do you work on small workshop or light-industrial roll-up doors?",a:"Yes, we service both residential garage doors and small commercial roll-up doors in Sun Valley."},{q:"Should I repair or replace my garage door in Sun Valley?",a:"It depends on the door's age and condition — we'll walk you through an honest comparison."},{q:"Do you repair garage door openers in Sun Valley?",a:"Yes, including openers worn from heavy heat exposure."},{q:"Do you install new garage doors in Sun Valley?",a:"Yes, including insulated options that hold up better against Valley floor heat."},{q:"Do you serve areas near Sun Valley?",a:"Yes — we also serve North Hollywood, Burbank, Toluca Lake, Valley Village, and Mission Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Sun Valley with free estimates and same-day availability when scheduling allows."},pacoima:{slug:"pacoima",cityName:"Pacoima",metaTitle:"Garage Door Repair Pacoima, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Pacoima, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Pacoima from nearby Tarzana.",intro:["Pacoima is a dense, close-knit residential community with a lot of homes built mid-century, plus active small businesses near Whiteman Airport and the surrounding commercial corridors. We work on both the residential and small commercial side of that mix.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work with Pacoima homeowners who want honest, straightforward repair advice — not an upsell. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there when something breaks at the worst time. Call (888) 285-4021 and we'll walk you through what's going on."],localInsightTitle:"What We See Most in Pacoima",localInsight:"A lot of Pacoima's housing stock dates back several decades, and we regularly find original garage door hardware that's simply outlived its expected lifespan — worn rollers, tired springs, and openers that have been running for far longer than they were built for. Because Pacoima is a close, tightly built community, a garage door issue tends to get noticed and addressed quickly, which is exactly the kind of fast, honest service we aim to provide.",springIntro:"Garage door spring replacement in Pacoima often involves older doors where the original spring has simply reached the end of its cycle life after decades of use.",springOutro:"We check the rest of the door's hardware while replacing the spring, since older doors sometimes need a roller or cable refresh at the same time.",openerIntro:"Garage door opener repair in Pacoima frequently involves aging openers that are noisy, slow, or beginning to skip.",openerOutro:"In many cases a repair brings an older opener back to reliable service — replacement becomes the better option once parts are no longer available.",installIntro:"Garage door installation in Pacoima is often driven by a door that's reached the end of the line after years of patch repairs.",installOutro:"We offer straightforward, budget-conscious steel options as well as insulated and custom styles, depending on what makes sense for your home.",whyChooseIntro:"We're based nearby in Tarzana and work with a lot of Pacoima homeowners who just want an honest, no-pressure answer — licensed, insured, and family owned.",nearbyAreas:["Arleta","Sun Valley","Mission Hills","Sylmar","Panorama City"],nearbyBlurb:"Along with Pacoima, we regularly serve Arleta, Sun Valley, Mission Hills, Sylmar, and Panorama City.",faqs:[{q:"How much does garage door repair cost in Pacoima?",a:"It depends on the issue — older doors sometimes need more than one part replaced. We inspect first and give you an exact, upfront price."},{q:"Do you offer free estimates in Pacoima?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Pacoima?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage door is original to an older home — can it still be repaired?",a:"In many cases, yes. Older doors are often structurally fine and just need worn hardware replaced."},{q:"Do you offer 24-hour service in Pacoima?",a:"Yes, for urgent situations like a broken spring or a door stuck open."},{q:"Is it safe to keep using a noisy older garage door?",a:"It's not an emergency by itself, but it's worth having checked before a part fails completely."},{q:"Should I repair or replace my older garage door?",a:"Often repair makes sense if the door itself is structurally sound — we'll give you an honest comparison."},{q:"Do you repair garage door openers in Pacoima?",a:"Yes, including older units that are still worth repairing."},{q:"Do you install new garage doors in Pacoima?",a:"Yes, including affordable steel options as well as insulated and custom styles."},{q:"Do you serve areas near Pacoima?",a:"Yes — we also serve Arleta, Sun Valley, Mission Hills, Sylmar, and Panorama City."}],finalCtaTagline:"Licensed, insured, and family owned — serving Pacoima with free estimates and same-day availability when scheduling allows."},arleta:{slug:"arleta",cityName:"Arleta",metaTitle:"Garage Door Repair Arleta, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Arleta, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Arleta from nearby Tarzana.",intro:["Arleta is a quiet, mostly single-family residential pocket tucked between Pacoima and Panorama City, with modest lots and standard single or double garage doors on most homes. It's the kind of neighborhood where a broken garage door is a real daily inconvenience, not just a curb-appeal issue.","Professional Garage Door Services is based nearby in Tarzana, and we handle everything from routine repairs to full installations for Arleta homeowners. We're licensed, insured, and family owned, and we give a free, straightforward estimate before any work begins.","Same-day service is often available, and 24-hour service is there when something breaks unexpectedly. Call (888) 285-4021 and we'll walk you through what's going on."],localInsightTitle:"What We See Most in Arleta",localInsight:"Arleta's housing stock is fairly uniform — mid-century single-family homes with standard single or double garage doors, similar to neighboring Pacoima and Panorama City. Most of what we see here is straightforward wear and tear: aging springs, worn rollers, and openers that are simply due for a tune-up or replacement after many years of daily use.",springIntro:"Garage door spring replacement in Arleta is usually a standard job, since most homes here have a typical single door size, which keeps the process quick once we've confirmed the right spring specs.",springOutro:"Even standard doors need the spring correctly sized to the door's weight and cycle count — we don't just grab the closest match.",openerIntro:"Garage door opener repair in Arleta often involves openers that have simply been in service a long time — worn gears, weak capacitors, or remotes that no longer sync reliably.",openerOutro:"In many cases these are simple, affordable fixes, and we'll tell you honestly if a repair makes sense or if it's time to consider a replacement.",installIntro:"Garage door installation in Arleta tends to be straightforward, with most homes using a standard single or double door opening.",installOutro:"We'll help you choose between standard steel, insulated, and a few style upgrades that improve curb appeal without a big budget jump.",whyChooseIntro:"We're based nearby in Tarzana and know Arleta's mostly standard door setups well — licensed, insured, and family owned, with honest, no-pressure estimates.",nearbyAreas:["Pacoima","Panorama City","Sun Valley","Mission Hills","North Hills"],nearbyBlurb:"Along with Arleta, we regularly serve Pacoima, Panorama City, Sun Valley, Mission Hills, and North Hills.",faqs:[{q:"How much does garage door repair cost in Arleta?",a:"Most homes here have standard-size doors, which keeps repair costs predictable. We inspect first and give you an exact price."},{q:"Do you offer free estimates in Arleta?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Arleta?",a:"Often yes, especially since most doors here use standard spring sizes. Call (888) 285-4
300021 to check."},{q:"My opener is old — is it worth repairing?",a:"Often, yes. Many opener issues are simple fixes. We'll tell you honestly if repair or replacement makes more sense."},{q:"Do you offer 24-hour service in Arleta?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Is it safe to keep using a door with worn rollers?",a:"It's not an emergency by itself, but worn rollers tend to lead to bigger issues over time — worth having checked."},{q:"Should I repair or replace my garage door?",a:"For most standard doors here, repair is often the more cost-effective route unless there's significant damage."},{q:"Do you repair garage door openers in Arleta?",a:"Yes, including older units simply due for a tune-up or part replacement."},{q:"Do you install new garage doors in Arleta?",a:"Yes, including standard steel and insulated options sized for typical Arleta garages."},{q:"Do you serve areas near Arleta?",a:"Yes — we also serve Pacoima, Panorama City, Sun Valley, Mission Hills, and North Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Arleta with free estimates and same-day availability when scheduling allows."}},ZO={"lake-balboa":{slug:"lake-balboa",cityName:"Lake Balboa",metaTitle:"Garage Door Repair Lake Balboa, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Lake Balboa, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Lake Balboa from nearby Tarzana.",intro:["Lake Balboa is a quiet, well-kept residential community built around Anthony C. Beilenson Park, with tidy tract homes and standard single or double garage doors on most streets. It's a straightforward neighborhood to service, and we know it well.","Professional Garage Door Services is based nearby in Tarzana, and Lake Balboa is one of the areas we serve regularly. We're licensed, insured, and family owned, with a free, no-pressure estimate on every job.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll walk you through what's going on."],localInsightTitle:"What We See Most in Lake Balboa",localInsight:"Lake Balboa's housing stock is fairly consistent — mid-century and later tract homes with standard garage door sizes, which keeps most repairs quick and predictable. Being close to Van Nuys Airport's flight paths, some homeowners ask us about noise-dampening upgrades along with standard hardware repairs, since a quieter door is a welcome bonus in this area.",springIntro:"Garage door spring replacement in Lake Balboa is usually a standard job, since most homes here use typical door sizes and configurations.",springOutro:"We still size every spring to the door's exact weight and cycle count, even on standard doors, so it lasts as long as it should.",openerIntro:"Garage door opener repair in Lake Balboa often involves openers that have simply been in service for many years and are due for a tune-up or replacement.",openerOutro:"We'll tell you honestly whether a repair makes sense or if the unit has reached the point of diminishing returns.",installIntro:"Garage door installation in Lake Balboa is often a chance to add a bit of noise dampening along with a style refresh, given the area's proximity to the airport flight path.",installOutro:"We can walk you through options that balance quieter operation with your budget and the look of your home.",whyChooseIntro:"We're based nearby in Tarzana and know Lake Balboa's mostly standard door setups well — licensed, insured, and family owned.",nearbyAreas:["Van Nuys","Encino","Woodland Hills","Reseda","Sherman Oaks"],nearbyBlurb:"Along with Lake Balboa, we regularly serve Van Nuys, Encino, Woodland Hills, Reseda, and Sherman Oaks.",faqs:[{q:"How much does garage door repair cost in Lake Balboa?",a:"Most homes here have standard-size doors, which keeps repair costs predictable. We inspect first and give you an exact price."},{q:"Do you offer free estimates in Lake Balboa?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Lake Balboa?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Can you help reduce garage door noise near the airport flight path?",a:"Yes, we can recommend quieter hardware and opener options for homes affected by nearby flight noise."},{q:"Do you offer 24-hour service in Lake Balboa?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"My opener is old — is it worth repairing?",a:"Often, yes. We'll tell you honestly if a repair or replacement makes more sense for your specific unit."},{q:"Should I repair or replace my garage door?",a:"For most standard doors here, repair is often the more cost-effective route unless there's significant damage."},{q:"Do you repair garage door openers in Lake Balboa?",a:"Yes, including older units due for a tune-up or replacement."},{q:"Do you install new garage doors in Lake Balboa?",a:"Yes, including standard and noise-dampening options."},{q:"Do you serve areas near Lake Balboa?",a:"Yes — we also serve Van Nuys, Encino, Woodland Hills, Reseda, and Sherman Oaks."}],finalCtaTagline:"Licensed, insured, and family owned — serving Lake Balboa with free estimates and same-day availability when scheduling allows."},"porter-ranch":{slug:"porter-ranch",cityName:"Porter Ranch",metaTitle:"Garage Door Repair Porter Ranch, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Porter Ranch, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Porter Ranch from nearby Tarzana.",intro:["Porter Ranch is one of the newer planned communities in the Valley, with larger modern homes, HOA-managed streets, and garage doors that are generally newer and better maintained than in older neighborhoods. Even newer doors need occasional service, and we're set up to match the quality homeowners here expect.","Professional Garage Door Services is based nearby in Tarzana, and we work with Porter Ranch homeowners who want a clean, professional job that matches their home's finish level. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll go over what's going on."],localInsightTitle:"What We See Most in Porter Ranch",localInsight:"Because Porter Ranch homes are generally newer, we see fewer of the age-related hardware failures common in older neighborhoods, and more service calls related to smart opener setup, HOA-compliant door styles, and the occasional workmanship issue from original builder-grade hardware that wasn't top quality to begin with. Larger modern homes here also often have wider or taller doors than a standard suburban garage.",springIntro:"Garage door spring replacement in Porter Ranch often involves larger, heavier doors common on newer, bigger homes, which need springs sized accordingly.",springOutro:"We also see occasional builder-grade springs that were undersized from the start — we correct that sizing when we replace them.",openerIntro:"Garage door opener repair in Porter Ranch frequently involves smart, Wi-Fi-connected openers that need proper setup or troubleshooting alongside the mechanical repair.",openerOutro:"We're comfortable working with smart opener systems and can help get connectivity features working correctly, not just the motor.",installIntro:"Garage door installation in Porter Ranch often means matching HOA architectural guidelines while still getting a door that performs well long-term.",installOutro:"We help you navigate style requirements while making sure the hardware underneath matches your home's actual size and weight needs.",whyChooseIntro:"We're based nearby in Tarzana and bring a level of finish and professionalism that matches Porter Ranch's newer homes — licensed, insured, and family owned.",nearbyAreas:["Granada Hills","Northridge","Chatsworth","Mission Hills","Sylmar"],nearbyBlurb:"Along with Porter Ranch, we regularly serve Granada Hills, Northridge, Chatsworth, Mission Hills, and Sylmar.",faqs:[{q:"How much does garage door repair cost in Porter Ranch?",a:"It depends on the door — larger, newer-home doors can cost more to service than standard doors. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Porter Ranch?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Porter Ranch?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Do you work with smart, Wi-Fi-connected garage door openers?",a:"Yes, we install and troubleshoot smart openers, including connectivity features, not just the mechanical parts."},{q:"Do you offer 24-hour service in Porter Ranch?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Can you match HOA architectural requirements for garage doors?",a:"Yes, we help you choose styles that meet HOA guidelines while performing well long-term."},{q:"Should I repair or replace my garage door in Porter Ranch?",a:"It depends on the door's age and condition — even newer homes can have builder-grade hardware worth upgrading."},{q:"Do you repair garage door openers in Porter Ranch?",a:"Yes, including smart and standard openers."},{q:"Do you install new garage doors in Porter Ranch?",a:"Yes, including larger doors sized correctly for bigger modern homes."},{q:"Do you serve areas near Porter Ranch?",a:"Yes — we also serve Granada Hills, Northridge, Chatsworth, Mission Hills, and Sylmar."}],finalCtaTagline:"Licensed, insured, and family owned — serving Porter Ranch with free estimates and same-day availability when scheduling allows."},"universal-city":{slug:"universal-city",cityName:"Universal City",metaTitle:"Garage Door Repair Universal City, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Universal City, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Universal City from nearby Tarzana.",intro:["Universal City is a small, unique area built largely around the entertainment industry, with a mix of residential pockets and commercial and production-related facilities. Garage door needs here range from standard home doors to commercial roll-up doors used by nearby businesses.","Professional Garage Door Services is based nearby in Tarzana, and we handle both residential and light commercial garage door work in and around Universal City. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers situations that can't wait — especially important for commercial properties where a stuck door affects business operations. Call (888) 285-4021 and we'll get you an answer."],localInsightTitle:"What We See Most in Universal City",localInsight:"Because Universal City has a strong mix of commercial and production-adjacent properties, we often work with facilities that need fast turnaround to avoid any disruption to business operations, alongside the residential homes tucked into the surrounding area. Discretion and a professional, efficient service visit matter here as much as the repair itself.",springIntro:"Garage door spring replacement in Universal City covers both standard residential doors and heavier-duty commercial roll-up doors, each sized to their specific use.",springOutro:"For commercial doors especially, we factor in daily cycle counts, since a door used dozens of times a day needs different spring specs than a home garage door.",openerIntro:"Garage door opener repair in Universal City often involves commercial-grade operators seeing heavy daily use, or standard residential openers in the area's home pockets.",openerOutro:"We diagnose based on actual usage patterns, not just door type, to make sure the repair or replacement holds up.",installIntro:"Garage door installation in Universal City ranges from standard residential doors to commercial-grade installations built for frequent daily cycling.",installOutro:"We help business and home owners alike choose hardware that matches how the door is actually going to be used.",whyChooseIntro:"We're based nearby in Tarzana and comfortable working with both Universal City's commercial properties and its residential pockets — licensed, insured, and family owned.",nearbyAreas:["Studio City","Toluca Lake","North Hollywood","Valley Village","Burbank"],nearbyBlurb:"Along with Universal City, we regularly serve Studio City, Toluca Lake, North Hollywood, Valley Village, and Burbank.",faqs:[{q:"How much does garage door repair cost in Universal City?",a:"It depends on whether it's residential or commercial — we inspect first and give you an exact price."},{q:"Do you offer free estimates in Universal City?",a:"Yes, every estimate is free and no-obligation, residential or commercial."},{q:"Can a broken spring be replaced same-day in Universal City?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Do you work on commercial roll-up doors in Universal City?",a:"Yes, we service commercial and light-industrial roll-up doors as well as residential garage doors."},{q:"Do you offer 24-hour service in Universal City?",a:"Yes, especially important for commercial properties where a stuck door affects business operations."},{q:"Can you work quickly to avoid business disruption?",a:"Yes, we understand commercial properties need fast, efficient service to avoid downtime."},{q:"Should I repair or replace my garage door?",a:"It depends on the door's age, use, and condition — we'll give you an honest comparison."},{q:"Do you repair garage door openers in Universal City?",a:"Yes, including commercial-grade operators and standard residential openers."},{q:"Do you install new garage doors in Universal City?",a:"Yes, including both residential and commercial-grade options."},{q:"Do you serve areas near Universal City?",a:"Yes — we also serve Studio City, Toluca Lake, North Hollywood, Valley Village, and Burbank."}],finalCtaTagline:"Licensed, insured, and family owned — serving Universal City with free estimates and same-day availability when scheduling allows."},burbank:{slug:"burbank",cityName:"Burbank",metaTitle:"Garage Door Repair Burbank, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Burbank, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Burbank from nearby Tarzana.",intro:["Burbank blends classic single-family neighborhoods with a strong media and entertainment industry presence, which means we see a genuine mix of garage doors here — from charming older bungalow-style homes to properties near the studios with more specific scheduling needs.","Professional Garage Door Services is based nearby in Tarzana, and we regularly work throughout Burbank on repairs, replacements, and new installations. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll figure out the right next step."],localInsightTitle:"What We See Most in Burbank",localInsight:"Burbank's older bungalow-style neighborhoods often have original single-layer wood or early steel doors that have earned an upgrade, while newer construction and remodeled homes tend to have more modern insulated doors that just need routine maintenance. Because so many residents work industry schedules, we get a lot of requests for early morning, evening, or flexible-scheduling appointments.",springIntro:"Garage door spring replacement in Burbank covers everything from original hardware on older bungalow homes to newer torsion systems on remodeled properties.",springOutro:"We size every replacement to the specific door in front of us, whether it's a decades-old original or a newer installation.",openerIntro:"Garage door opener repair in Burbank often involves aging openers on older homes, or smart opener setup and troubleshooting on newer or remodeled properties.",openerOutro:"We're comfortable working with both older mechanical openers and newer smart systems.",installIntro:"Garage door installation in Burbank is often a chance to modernize an older home's look while keeping its original character intact.",installOutro:"We help you choose a door style that respects the home's architecture, whether that's a classic look or a more contemporary upgrade.",whyChooseIntro:"We're based nearby in Tarzana and work with Burbank's flexible, industry-driven schedules — licensed, insured, and family owned.",nearbyAreas:["Toluca Lake","Universal City","North Hollywood","Sun Valley","Studio City"],nearbyBlurb:"Along with Burbank, we regularly serve Toluca Lake, Universal City, North Hollywood, Sun Valley, and Studio City.",faqs:[{q:"How much does garage door repair cost in Burbank?",a:"It depends on the issue and the door's age — we inspect first and give you an exact price."},{q:"Do you offer free estimates in Burbank?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Burbank?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Can you accommodate early morning or evening appointments?",a:"Yes, we work with flexible scheduling given how many Burbank residents work industry hours."},{q:"Do you offer 24-hour service in Burbank?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"My home is an older bungalow — can you match the original style?",a:"Yes, we help you choose replacement doors that respect your home's original architecture."},{q:"Should I repair or replace my garage door in Burbank?",a:"It depends on the door's age and condition — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Burbank?",a:"Yes, including both older mechanical openers and newer smart systems."},{q:"Do you install new garage doors in Burbank?",a:"Yes, including style-matched options for older homes and modern doors for remodeled properties."},{q:"Do you serve areas near Burbank?",a:"Yes — we also serve Toluca Lake, Universal City, North Hollywood, Sun Valley, and Studio City."}],finalCtaTagline:"Licensed, insured, and family owned — serving Burbank with free estimates and same-day availability when scheduling allows."},"beverly-glen":{slug:"beverly-glen",cityName:"Beverly Glen",metaTitle:"Garage Door Repair Beverly Glen, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Beverly Glen, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Beverly Glen from nearby Tarzana.",intro:["Beverly Glen is a small, upscale canyon community tucked between Sherman Oaks and Bel Air, known for custom homes on winding canyon roads. Garage doors here tend to be custom or higher-end, and access can be tighter than a typical suburban street — something we're well prepared for.","Professional Garage Door Services is based nearby in Tarzana, and we bring the same careful, professional approach to Beverly Glen's custom homes that we do everywhere else. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait, handled with the discretion this neighborhood expects. Call (888) 285-4021 and we'll go over what's happening."],localInsightTitle:"What We See Most in Beverly Glen",localInsight:"Beverly Glen's custom homes often have architecturally unique or higher-end garage doors — sometimes wood, sometimes custom steel with specific finishes — that need careful handling rather than off-the-shelf replacement parts. Canyon roads also mean tighter access in some cases, which we plan for ahead of a visit.",springIntro:"Garage door spring replacement in Beverly Glen often involves custom or higher-end doors that need springs matched precisely to their actual weight, which can vary more than a standard production door.",springOutro:"We take the time to properly assess custom doors before sizing a replacement spring, rather than assuming a standard fit.",openerIntro:"Garage door opener repair in Beverly Glen often involves pairing a reliable opener with a heavier or custom-weighted door.",openerOutro:"If your opener strains on a custom door, it may need a stronger unit properly matched to the door's actual weight.",installIntro:"Garage door installation in Beverly Glen is often about matching a home's custom architectural character, not just picking a standard door off a list.",installOutro:"We help homeowners find the right custom or premium door option and make sure the supporting hardware is sized correctly.",whyChooseIntro:"We're based nearby in Tarzana and bring a careful, detail-oriented approach to Beverly Glen's custom homes — licensed, insured, and family owned.",nearbyAreas:["Sherman Oaks","Bel Air","Encino","Studio City","Tarzana"],nearbyBlurb:"Along with Beverly Glen, we regularly serve Sherman Oaks, Bel Air, Encino, Studio City, and Tarzana.",faqs:[{q:"How much does garage door repair cost in Beverly Glen?",a:"Custom doors can cost more to service than standard doors. We give you an exact price after inspecting your specific door."},{q:"Do you offer free estimates in Beverly Glen?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Beverly Glen?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My garage door is a custom design — can you still service it?",a:"Yes, we carefully assess custom doors and size replacement parts to their actual weight and construction."},{q:"Do you offer 24-hour service in Beverly Glen?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Can you handle tighter canyon-road access?",a:"Yes, we plan ahead for tighter access common on Beverly Glen's canyon roads."},{q:"Should I repair or replace my garage door in Beverly Glen?",a:"It depends on the door's design and condition — we'll walk you through the honest tradeoffs for your specific door."},{q:"Do you repair garage door openers in Beverly Glen?",a:"Yes, including openers paired with heavier custom doors."},{q:"Do you install new garage doors in Beverly Glen?",a:"Yes, including custom and premium options matched to your home's architecture."},{q:"Do you serve areas near Beverly Glen?",a:"Yes — we also serve Sherman Oaks, Bel Air, Encino, Studio City, and Tarzana."}],finalCtaTagline:"Licensed, insured, and family owned — serving Beverly Glen with free estimates and same-day availability when scheduling allows."}},eD={"agoura-hills":{slug:"agoura-hills",cityName:"Agoura Hills",metaTitle:"Garage Door Repair Agoura Hills, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Agoura Hills, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Agoura Hills from nearby Tarzana.",intro:["Agoura Hills sits at the western edge of the Valley along the 101 corridor, with larger lots, master-planned communities, and a more rural, equestrian feel than areas closer to the city center. Garage doors here tend to be a bit larger and more varied in style than a standard suburban tract.","Professional Garage Door Services is based in Tarzana, and we regularly extend our service out to Agoura Hills for repairs, replacements, and new installations. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll go over what's going on."],localInsightTitle:"What We See Most in Agoura Hills",localInsight:"A lot of Agoura Hills properties sit on larger lots, sometimes with detached garages or barns for equestrian use, alongside more traditional master-planned community homes with standard doors. Dust and dry brush conditions common in this part of the Valley can accelerate wear on tracks and hardware, similar to what we see in other foothill-adjacent areas.",springIntro:"Garage door spring replacement in Agoura Hills covers everything from standard community-home doors to larger doors on bigger rural-style properties.",springOutro:"We size every spring to the door's actual weight, which varies more here than in a uniform suburban tract.",openerIntro:"Garage door opener repair in Agoura Hills often involves openers working harder on larger or heavier doors common on bigger properties.",openerOutro:"We'll check whether your opener is properly matched to your door before recommending a repair or replacement.",installIntro:"Garage door installation in Agoura Hills often means sizing a door correctly for a larger opening or matching a master-planned community's architectural guidelines.",installOutro:"We help you navigate style requirements while making sure the hardware underneath is sized for the door's actual weight.",whyChooseIntro:"We're based in Tarzana and comfortable extending service to Agoura Hills' larger properties and planned communities alike — licensed, insured, and family owned.",nearbyAreas:["Calabasas","Westlake Village","Thousand Oaks","Woodland Hills","West Hills"],nearbyBlurb:"Along with Agoura Hills, we regularly serve Calabasas, Westlake Village, Thousand Oaks, Woodland Hills, and West Hills.",faqs:[{q:"How much does garage door repair cost in Agoura Hills?",a:"It depends on the door — larger properties sometimes have bigger doors that cost more to service. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Agoura Hills?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Agoura Hills?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"I have a detached garage or barn — can you service larger doors?",a:"Yes, we regularly work on larger doors common on Agoura Hills' bigger properties."},{q:"Do you offer 24-hour service in Agoura Hills?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Does dust and dry brush affect garage doors here?",a:"It can accelerate wear on tracks and rollers — regular tune-ups help catch that early."},{q:"Should I repair or replace my garage door in Agoura Hills?",a:"It depends on the door's size, age, and condition — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Agoura Hills?",a:"Yes, including openers that may be underpowered for larger or heavier doors."},{q:"Do you install new garage doors in Agoura Hills?",a:"Yes, including larger and custom-sized doors for bigger properties."},{q:"Do you serve areas near Agoura Hills?",a:"Yes — we also serve Calabasas, Westlake Village, Thousand Oaks, Woodland Hills, and West Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Agoura Hills with free estimates and same-day availability when scheduling allows."},"westlake-village":{slug:"westlake-village",cityName:"Westlake Village",metaTitle:"Garage Door Repair Westlake Village, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Westlake Village, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Westlake Village from nearby Tarzana.",intro:["Westlake Village is an upscale, well-planned community built around Westlake Lake, with custom homes, strict HOA architectural standards, and a mix of residential streets alongside corporate office parks. Garage doors here tend to be higher-end, and homeowners expect a clean, professional job.","Professional Garage Door Services is based in Tarzana, and we extend our service to Westlake Village for repairs, replacements, and new installations that match the quality homeowners here expect. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll go over what's happening."],localInsightTitle:"What We See Most in Westlake Village",localInsight:"Westlake Village's custom homes often have higher-end garage doors — sometimes with specific architectural finishes required by HOA guidelines — that need careful, precise service rather than generic parts. We also occasionally service garage doors at the area's office parks and mixed-use commercial buildings, which have different usage patterns than a home garage.",springIntro:"Garage door spring replacement in Westlake Village often involves higher-end doors that need springs matched precisely to their actual weight and construction.",springOutro:"We take the time to properly assess custom doors before sizing a replacement spring, rather than assuming a standard fit.",openerIntro:"Garage door opener repair in Westlake Village often involves pairing a reliable, quiet-running opener with a heavier custom door.",openerOutro:"If your opener strains on a custom door, it may need a stronger unit properly matched to the door's actual weight.",installIntro:"Garage door installation in Westlake Village is often about matching HOA architectural guidelines while still getting reliable long-term performance.",installOutro:"We help homeowners find the right premium door option and make sure the supporting hardware is sized correctly.",whyChooseIntro:"We're based in Tarzana and bring a careful, detail-oriented approach to Westlake Village's custom homes and HOA standards — licensed, insured, and family owned.",nearbyAreas:["Agoura Hills","Thousand Oaks","Calabasas","Woodland Hills","West Hills"],nearbyBlurb:"Along with Westlake Village, we regularly serve Agoura Hills, Thousand Oaks, Calabasas, Woodland Hills, and West Hills.",faqs:[{q:"How much does garage door repair cost in Westlake Village?",a:"Custom doors can cost more to service than standard doors. We give you an exact price after inspecting your specific door."},{q:"Do you offer free estimates in Westlake Village?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Westlake Village?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Can you match HOA architectural requirements for garage doors?",a:"Yes, we help you choose styles that meet HOA guidelines while performing well long-term."},{q:"Do you offer 24-hour service in Westlake Village?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Do you service office parks and commercial buildings in Westlake Village?",a:"Yes, we service commercial garage and roll-up doors in addition to residential doors."},{q:"Should I repair or replace my garage door in Westlake Village?",a:"It depends on the door's design and condition — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Westlake Village?",a:"Yes, including openers paired with heavier custom doors."},{q:"Do you install new garage doors in Westlake Village?",a:"Yes, including custom and premium options matched to HOA guidelines."},{q:"Do you serve areas near Westlake Village?",a:"Yes — we also serve Agoura Hills, Thousand Oaks, Calabasas, Woodland Hills, and West Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Westlake Village with free estimates and same-day availability when scheduling allows."},"thousand-oaks":{slug:"thousand-oaks",cityName:"Thousand Oaks",metaTitle:"Garage Door Repair Thousand Oaks, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Thousand Oaks, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Thousand Oaks from nearby Tarzana.",intro:["Thousand Oaks is a large, family-oriented suburban city with a mix of established neighborhoods and newer developments spread across a wide area. Garage doors here range from standard tract-home doors to larger custom doors in the city's hillside pockets.","Professional Garage Door Services is based in Tarzana, and we extend our service out to Thousand Oaks for repairs, replacements, and new installations. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll figure out the right next step."],localInsightTitle:"What We See Most in Thousand Oaks",localInsight:"Thousand Oaks' size means a real mix of door ages and styles — established neighborhoods from the 1970s and 80s with original hardware needing updates, alongside newer developments with more modern doors that just need routine maintenance. Hillside pockets also have larger, heavier doors similar to what we see in other foothill communities.",springIntro:"Garage door spring replacement in Thousand Oaks covers a wide range of door ages and sizes, from older tract-home doors to larger hillside-property doors.",springOutro:"We size every spring to the door's actual weight and cycle history, whatever the age or style of the door.",openerIntro:"Garage door opener repair in Thousand Oaks often involves openers reaching the end of their service life on older homes, or straining on heavier hillside-property doors.",openerOutro:"We'll check whether a repair makes sense or if it's time to consider a replacement, based on your door's actual needs.",installIntro:"Garage door installation in Thousand Oaks ranges from straightforward tract-home replacements to larger custom doors for hillside properties.",installOutro:"We help you choose a door and hardware combination that fits your specific home and budget.",whyChooseIntro:"We're based in Tarzana and comfortable extending service across Thousand Oaks' wide mix of neighborhoods — licensed, insured, and family owned.",nearbyAreas:["Westlake Village","Agoura Hills","Calabasas","Woodland Hills","West Hills"],nearbyBlurb:"Along with Thousand Oaks, we regularly serve Westlake Village, Agoura Hills, Calabasas, Woodland Hills, and West Hills.",faqs:[{q:"How much does garage door repair cost in Thousand Oaks?",a:"It depends on the door's age and size — we inspect first and give you an exact price."},{q:"Do you offer free estimates in Thousand Oaks?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Thousand Oaks?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My home is older — can original hardware still be repaired?",a:"In many cases, yes. Older doors are often structurally fine and just need worn hardware replaced."},{q:"Do you offer 24-hour service in Thousand Oaks?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"I live in a hillside area with a larger door — can you handle that?",a:"Yes, we service larger and heavier doors common on Thousand Oaks' hillside properties."},{q:"Should I repair or replace my garage door in Thousand Oaks?",a:"It depends on the door's age and condition — we'll give you an honest comparison."},{q:"Do you repair garage door openers in Thousand Oaks?",a:"Yes, including both older units and openers straining on larger doors."},{q:"Do you install new garage doors in Thousand Oaks?",a:"Yes, including standard and custom-sized options for any part of the city."},{q:"Do you serve areas near Thousand Oaks?",a:"Yes — we also serve Westlake Village, Agoura Hills, Calabasas, Woodland Hills, and West Hills."}],finalCtaTagline:"Licensed, insured, and family owned — serving Thousand Oaks with free estimates and same-day availability when scheduling allows."},"bel-air":{slug:"bel-air",cityName:"Bel Air",metaTitle:"Garage Door Repair Bel Air, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Bel Air, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Bel Air from nearby Tarzana.",intro:["Bel Air is home to some of the area's largest and most private estates, with custom gated properties and garage doors built to match. Service here requires a level of discretion and precision that standard suburban jobs don't always call for, and we're set up for exactly that.","Professional Garage Door Services is based in Tarzana, and we extend our service to Bel Air for homeowners who want a careful, professional job on a custom or high-end door. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait, handled with the privacy this neighborhood expects. Call (888) 285-4021 and we'll go over what's happening."],localInsightTitle:"What We See Most in Bel Air",localInsight:"Bel Air's estate properties often have custom, architecturally significant garage doors — sometimes multiple large doors per property — built with materials and finishes that require careful handling rather than off-the-shelf parts. Gated access and longer private driveways are also standard here, something we plan for ahead of every visit.",springIntro:"Garage door spring replacement in Bel Air often involves large, custom, or multiple doors per property, each needing springs matched precisely to their actual weight.",springOutro:"We assess every custom door individually rather than assuming a standard fit, which matters even more on estate-scale properties.",openerIntro:"Garage door opener repair in Bel Air often involves pairing a robust, quiet-running opener with a heavier custom or oversized door.",openerOutro:"If your opener strains on a large custom door, it likely needs a stronger unit properly matched to the door's true weight and size.",installIntro:"Garage door installation in Bel Air is about matching estate-level architecture, not selecting from a standard catalog.",installOutro:"We help homeowners find premium and fully custom door options, with hardware sized correctly for large or multiple-door properties.",whyChooseIntro:"We're based in Tarzana and bring the discretion and precision that Bel Air's estate properties call for — licensed, insured, and family owned.",nearbyAreas:["Beverly Glen","Sherman Oaks","Encino","Brentwood","Studio City"],nearbyBlurb:"Along with Bel Air, we regularly serve Beverly Glen, Sherman Oaks, Encino, Brentwood, and Studio City.",faqs:[{q:"How much does garage door repair cost in Bel Air?",a:"Custom estate-level doors can cost more to service than standard doors. We give you an exact price after inspecting your specific door."},{q:"Do you offer free estimates in Bel Air?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Bel Air?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My property has multiple garage doors — can you service all of them?",a:"Yes, we regularly work on estate properties with multiple doors of varying sizes."},{q:"Do you offer 24-hour service in Bel Air?",a:"Yes, for urgent situations, handled with the discretion this neighborhood expects."},{q:"Can you work with gated access and private driveways?",a:"Yes, we coordinate access ahead of time for gated Bel Air properties."},{q:"Should I repair or replace my garage door in Bel Air?",a:"It depends on the door's design and condition — we'll walk you through the honest tradeoffs for your specific property."},{q:"Do you repair garage door openers in Bel Air?",a:"Yes, including openers paired with large custom or oversized doors."},{q:"Do you install new garage doors in Bel Air?",a:"Yes, including fully custom and premium options for estate-level properties."},{q:"Do you serve areas near Bel Air?",a:"Yes — we also serve Beverly Glen, Sherman Oaks, Encino, Brentwood, and Studio City."}],finalCtaTagline:"Licensed, insured, and family owned — serving Bel Air with free estimates and same-day availability when scheduling allows."},brentwood:{slug:"brentwood",cityName:"Brentwood",metaTitle:"Garage Door Repair Brentwood, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Brentwood, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Brentwood from nearby Tarzana.",intro:["Brentwood is an upscale residential community with a mix of classic older homes and extensive modern rebuilds, which means we see a real range of garage doors here — from original vintage doors worth preserving to brand-new custom installations on rebuilt properties.","Professional Garage Door Services is based in Tarzana, and we extend our service to Brentwood for homeowners who want careful, professional work matched to their home's finish level. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service is there for the situations that can't wait. Call (888) 285-4021 and we'll go over what's happening."],localInsightTitle:"What We See Most in Brentwood",localInsight:"Brentwood's mix of classic older homes and full modern rebuilds means we regularly go from repairing a decades-old original wood door on one job to installing a fully custom insulated steel door with smart features on the next. Tighter lots in some parts of the neighborhood also mean careful, efficient work matters.",springIntro:"Garage door spring replacement in Brentwood covers everything from original vintage door hardware to newer custom torsion systems on rebuilt homes.",springOutro:"We size every replacement to the specific door in front of us, whether it's a decades-old original or a brand-new custom installation.",openerIntro:"Garage door opener repair in Brentwood often involves either aging openers on older homes or smart, connected systems on newer rebuilds.",openerOutro:"We're comfortable working with both older mechanical openers and newer smart systems, whichever your home has.",installIntro:"Garage door installation in Brentwood is often a chance to modernize a home while respecting its architectural character, especially on partial remodels.",installOutro:"We help you choose a door style that fits your home's look, whether that's a classic match or a fully custom contemporary upgrade.",whyChooseIntro:"We're based in Tarzana and comfortable working across Brentwood's mix of classic and fully modernized homes — licensed, insured, and family owned.",nearbyAreas:["Bel Air","Beverly Glen","Encino","Sherman Oaks","Studio City"],nearbyBlurb:"Along with Brentwood, we regularly serve Bel Air, Beverly Glen, Encino, Sherman Oaks, and Studio City.",faqs:[{q:"How much does garage door repair cost in Brentwood?",a:"It depends on the door — custom or vintage doors can cost more to service than standard doors. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Brentwood?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Brentwood?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My home has an original vintage garage door — can you repair it instead of replacing it?",a:"In many cases, yes. We assess the door's condition and repair where possible rather than defaulting to full replacement."},{q:"Do you offer 24-hour service in Brentwood?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Can you install a custom door to match a modern rebuild?",a:"Yes, we help homeowners choose fully custom and premium doors for modernized properties."},{q:"Should I repair or replace my garage door in Brentwood?",a:"It depends on the door's age, condition, and material — we'll give you an honest comparison."},{q:"Do you repair garage door openers in Brentwood?",a:"Yes, including both older mechanical openers and newer smart systems."},{q:"Do you install new garage doors in Brentwood?",a:"Yes, including style-matched and fully custom options."},{q:"Do you serve areas near Brentwood?",a:"Yes — we also serve Bel Air, Beverly Glen, Encino, Sherman Oaks, and Studio City."}],finalCtaTagline:"Licensed, insured, and family owned — serving Brentwood with free estimates and same-day availability when scheduling allows."}},tD={"san-dimas":{slug:"san-dimas",cityName:"San Dimas",metaTitle:"Garage Door Repair San Dimas, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving San Dimas, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving San Dimas homeowners with reliable garage door repair.",intro:["San Dimas has a distinct small-town, western feel with a historic downtown, foothill neighborhoods, and a mix of older single-family homes alongside newer developments near the 210 and 57 freeways. Garage doors here range from original hardware on established homes to newer doors on more recently built properties.","Professional Garage Door Services provides garage door repair, spring replacement, opener service, and new installations for San Dimas homeowners. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll go over what's going on with your door."],localInsightTitle:"What We See Most in San Dimas",localInsight:"Many San Dimas homes sit in foothill-adjacent neighborhoods where dust, dry heat, and seasonal temperature swings put extra strain on garage door springs, rollers, and opener hardware. Older established streets near downtown often still have original springs and openers well past their expected lifespan, while newer development areas tend to need more routine maintenance than emergency repair.",springIntro:"Garage door spring replacement in San Dimas often involves older torsion springs that have simply worn out after years of daily cycles, especially on homes near the historic downtown area.",springOutro:"We size every replacement spring to your door's actual weight and balance, not a generic estimate.",openerIntro:"Garage door opener repair in San Dimas often involves aging units on established homes, along with occasional issues from heat affecting sensors and electronics.",openerOutro:"We'll diagnose whether a repair is enough or if a replacement makes more sense for your specific opener.",installIntro:"Garage door installation in San Dimas ranges from replacing an original door on an older home to outfitting a newer property with a fresh, well-matched door.",installOutro:"We help you pick a door and hardware combination that fits your home's style and your budget.",whyChooseIntro:"We bring careful, honest service to San Dimas homeowners, whether it's a quick tune-up or a full door replacement — licensed, insured, and family owned.",nearbyAreas:["La Verne","Glendora","Claremont","Covina","Pomona"],nearbyBlurb:"Along with San Dimas, we regularly serve La Verne, Glendora, Claremont, Covina, and Pomona.",faqs:[{q:"How much does garage door repair cost in San Dimas?",a:"It depends on the door and the issue — we inspect first and give you an exact price before any work begins."},{q:"Do you offer free estimates in San Dimas?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in San Dimas?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"My home is older — can original hardware still be repaired?",a:"In many cases, yes. Older doors are often structurally sound and just need worn springs, cables, or rollers replaced."},{q:"Do you offer 24-hour service in San Dimas?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"Does heat and dust affect garage doors in San Dimas?",a:"It can accelerate wear on springs, rollers, and sensors — routine tune-ups help catch that early."},{q:"Should I repair or replace my garage door in San Dimas?",a:"It depends on the door's age and condition — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in San Dimas?",a:"Yes, including older units and openers affected by heat or worn components."},{q:"Do you install new garage doors in San Dimas?",a:"Yes, including standard and custom-sized doors for any home in San Dimas."},{q:"Do you serve areas near San Dimas?",a:"Yes — we also serve La Verne, Glendora, Claremont, Covina, and Pomona."}],finalCtaTagline:"Licensed, insured, and family owned — serving San Dimas with free estimates and same-day availability when scheduling allows."},"santa-barbara":{slug:"santa-barbara",cityName:"Santa Barbara",metaTitle:"Garage Door Repair Santa Barbara, CA | Licensed & Insured",metaDescription:"Licensed, insured, family-owned garage door repair serving Santa Barbara, CA. Free estimates, 24-hour service, same-day availability. Call (888) 285-4021.",heroTagline:"Licensed, insured, and family owned — serving Santa Barbara and the surrounding coastal communities.",intro:["Santa Barbara is known for its Spanish Colonial and Mediterranean-style architecture, red tile roofs, and a coastline that shapes everything from home design to how long hardware lasts. Garage doors here range from custom wood and carriage-style doors on older, architecturally protected homes to newer steel and insulated doors on properties further from the coast.","Professional Garage Door Services provides garage door repair, spring replacement, opener service, and new installations for homeowners throughout Santa Barbara and the surrounding area. We're licensed, insured, and family owned, and every estimate is free.","Same-day service is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll go over what's happening with your door."],localInsightTitle:"What We See Most in Santa Barbara",localInsight:"Homes closer to the coast deal with salt air and ocean humidity that speed up corrosion on springs, tracks, and hardware faster than homes just a few miles inland. Santa Barbara's older, architecturally distinctive homes — including custom wood and carriage-style doors — often need more careful, individualized service than an off-the-shelf repair. Hillside and foothill properties also introduce sloped driveways and larger doors that need proper sizing.",springIntro:"Garage door spring replacement in Santa Barbara often has to account for coastal corrosion on older hardware, in addition to the door's actual weight and balance.",springOutro:"We inspect the full spring and hardware system before recommending a replacement, especially on homes with coastal exposure.",openerIntro:"Garage door opener repair in Santa Barbara often involves older openers reaching the end of their service life, or sensors and electronics affected by humidity near the coast.",openerOutro:"We'll check whether a repair is enough or if your opener needs replacing, based on its actual condition.",installIntro:"Garage door installation in Santa Barbara often means matching a custom or architecturally significant home, or replacing coastal hardware that's corroded faster than expected.",installOutro:"We help homeowners choose door and hardware combinations built to hold up against salt air and coastal weather.",whyChooseIntro:"We bring careful, detail-oriented service to Santa Barbara's mix of custom coastal homes and inland properties — licensed, insured, and family owned.",nearbyAreas:["Montecito","Goleta","Carpinteria","Isla Vista","Summerland"],nearbyBlurb:"Along with Santa Barbara, we regularly serve Montecito, Goleta, Carpinteria, Isla Vista, and Summerland.",faqs:[{q:"How much does garage door repair cost in Santa Barbara?",a:"It depends on the door — custom or coastal-exposed doors can cost more to service than standard doors. We give you an exact price after inspecting it."},{q:"Do you offer free estimates in Santa Barbara?",a:"Yes, every estimate is free and no-obligation."},{q:"Can a broken spring be replaced same-day in Santa Barbara?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Does salt air affect garage door hardware in Santa Barbara?",a:"Yes, coastal homes often see faster corrosion on springs, tracks, and hardware — routine inspections help catch that early."},{q:"Do you offer 24-hour service in Santa Barbara?",a:"Yes, for urgent situations like a broken spring or a door that won't close."},{q:"I have a custom or wood carriage-style door — can you service it?",a:"Yes, we work with custom and architecturally significant doors common in Santa Barbara."},{q:"Should I repair or replace my garage door in Santa Barbara?",a:"It depends on the door's age, material, and condition — we'll walk you through the honest tradeoffs."},{q:"Do you repair garage door openers in Santa Barbara?",a:"Yes, including openers affected by coastal humidity or simply at the end of their service life."},{q:"Do you install new garage doors in Santa Barbara?",a:"Yes, including custom, wood, and standard steel or insulated options."},{q:"Do you serve areas near Santa Barbara?",a:"Yes — we also serve Montecito, Goleta, Carpinteria, Isla Vista, and Summerland."}],finalCtaTagline:"Licensed, insured, and family owned — serving Santa Barbara with free estimates and same-day availability when scheduling allows."}},rD={...JO,...QO,...XO,...ZO,...eD,...tD},uu="https://www.professionalgaragedoorservices.com",nD=[{title:"Door won't open or close",body:"Could be a broken spring, cable, or opener issue. Stop using the door if it feels stuck or unusually heavy."},{title:"Door slams shut",body:"Usually a sign of a broken spring, which removes the counterbalance that controls the door's descent. Don't stand underneath it."},{title:"Door feels extremely heavy",body:"A healthy door should lift with one hand. A heavy door almost always means a failed spring — stop forcing it."},{title:"Broken torsion or extension spring",body:"You may see a visible gap in the spring or hear a loud bang. These are under high tension — never attempt DIY replacement."},{title:"Snapped or loose cable",body:"A frayed or detached cable can let the door fall unevenly. Keep the area clear and call for repair."},{title:"Door is off track or crooked",body:"The door may bind, stick, or hang unevenly. Continuing to operate it can cause it to fall."},{title:"Grinding, squeaking, popping, or banging",body:"Usually rollers, hinges, or hardware wearing down or loosening — often fixable with a tune-up."},{title:"Opener runs but door doesn't move",body:"Often a broken drive gear, disconnected trolley, or a spring/cable failure — the motor and the door mechanism aren't the same thing."},{title:"Door reverses after closing",body:"Usually a sensor alignment issue or a safety feature responding to an obstruction — worth checking before it traps something."},{title:"Remote or keypad not working",body:"Could be battery, programming, or a receiver issue in the opener itself."},{title:"Bent or cracked panels",body:"Affects both looks and structural integrity — sometimes a single panel can be replaced instead of the whole door."},{title:"Door shakes while moving",body:"Often loose hardware or worn rollers — left alone, it tends to get worse and louder over time."}],aD=[{title:"Garage Door Repair",body:"From damaged panels to sticking doors, we diagnose the real problem and fix it right the first time."},{title:"Garage Door Spring Replacement",body:"Torsion and extension spring replacement, sized and balanced correctly for your specific door."},{title:"Garage Door Opener Repair",body:"Motor, sensor, remote, and keypad issues diagnosed and resolved — no more guessing why it won't respond."},{title:"Garage Door Opener Installation",body:"New opener installation and setup, including smart Wi-Fi-enabled models where compatible."},{title:"Garage Door Installation",body:"Full door replacement with steel, insulated, or custom-design options matched to your home."},{title:"Broken Cable Repair",body:"Snapped or frayed cables replaced safely — these are under high tension and shouldn't be handled without training."},{title:"Off-Track Repair",body:"We realign or repair doors that have jumped their tracks, a common and potentially dangerous issue."},{title:"Roller & Hinge Replacement",body:"Worn rollers and hinges are a leading cause of noisy, jerky door movement — we replace them with quality parts."},{title:"Panel Replacement",body:"Cracked, dented, or bent panels repaired or replaced without needing a full door replacement in many cases."},{title:"Tune-Ups & Safety Inspections",body:"A full check of springs, cables, rollers, and the auto-reverse safety feature to catch small issues early."},{title:"Emergency & Same-Day Service",body:"24-hour service is available for urgent issues, and same-day appointments can often be arranged."},{title:"Free Estimates",body:"Every job starts with a clear, no-obligation estimate before any work begins."}],oD=["Do not force the door open or closed if it feels stuck or heavy.","Do not loosen or adju
300st spring hardware yourself.","Look for a visible gap in the spring — a sign it's broken.","Check for loose or frayed cables near the bottom rollers.","Check that the opener has power and the lights are on.","Check the sensor lights near the bottom of the tracks for blinking or misalignment.","Keep children and pets away from the door until it's inspected.","If it's safe to do so, take a few photos of the issue.","Note whether the door is stuck open or stuck closed.","Have your opener brand or door size on hand if you know it."],ae=({citySlug:e})=>{const t=Sp(),r=e??t.citySlug,n=r?rD[r]:void 0;if(!n)return a.jsx(Np,{to:"/404",replace:!0});const o=`${uu}/garage-door-repair-${n.slug}`;return a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:n.metaTitle}),a.jsx("meta",{name:"description",content:n.metaDescription}),a.jsx("link",{rel:"canonical",href:o}),a.jsx("meta",{property:"og:title",content:n.metaTitle}),a.jsx("meta",{property:"og:description",content:n.metaDescription}),a.jsx("meta",{property:"og:url",content:o}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"HomeAndConstructionBusiness",name:"Professional Garage Door Services",url:uu,telephone:"888-285-4021",address:{"@type":"PostalAddress",streetAddress:"5665 Wilbur Avenue",addressLocality:"Tarzana",addressRegion:"CA",postalCode:"91356",addressCountry:"US"},areaServed:[n.cityName,...n.nearbyAreas],openingHours:"Mo-Su 00:00-24:00",priceRange:"$$"})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:n.faqs.map(s=>
300({"@type":"Question",name:s.q,acceptedAnswer:{"@type":"Answer",text:s.a}}))})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:uu},{"@type":"ListItem",position:2,name:`Garage Door Repair ${n.cityName}`,item:o}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsxs("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:["Garage Door Repair in ",n.cityName,", CA"]}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:n.heroTagline}),a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})})]})}),a.jsx("section",{id:"quote-form",className:"py-10 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx(KO,{cityName:n.cityName})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto space-y-4 text-muted-foreground leading-relaxed",children:[n.intro.map((s,i)=>a.jsx("p",{children:s},i)),a.jsxs("p",{children:["Call ",a.jsx("a",{href:"tel:+18882854021",className:"text-primary font-semibold hover:underline",children:"(888) 285-4021"})," to get started."]})]})})}),a.jsx("section",{className:"py-12 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto bg-card rounded-xl p-6 md:p-8 border border-border shadow-card",children:[a.jsx("h2",{className:"font-heading text-2xl text-foreground mb-3",children:n.localInsightTitle}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:n.localInsight})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:["Garage Door Services in ",n.cityName]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:aD.map(s=>a.jsxs("div",{className:"bg-card rounded-xl p-6 shadow-card border border-border",children:[a.jsx("h3",{className:"font-heading text-lg text-foreground mb-2",children:s.title}),a.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed",children:s.body})]},s.title))})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:"Common Garage Door Problems We Help With"}),a.jsx("p",{className:"text-muted-foreground text-center mb-8",children:"Not sure what's wrong? Here's a quick guide — but if in doubt, stop using the door and call us before it gets worse."}),a.jsx("div",{className:"space-y-4",children:nD.map(s=>a.jsxs("div",{className:"bg-card rounded-xl p-5 border border-border",children:[a.jsx("p",{className:"font-semibold text-foreground mb-1",children:s.title}),a.jsx("p",{className:"text-muted-foreground text-sm",children:s.body})]},s.title))}),a.jsxs("div",{className:"mt-8 bg-primary/5 border border-primary/20 rounded-xl p-6 flex items-start gap-4",children:[a.jsx(qo,{className:"w-6 h-6 text-primary flex-shrink-0 mt-1"}),a.jsx("p",{className:"text-muted-foreground text-sm",children:"If your door feels unusually heavy, won't stay open, or you see a broken spring or cable, stop using it and keep people and pets clear. These are safety issues, not just inconveniences — a professional inspection is the safer path."})]})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsxs("div",{children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-4",children:["Garage Door Spring Replacement in ",n.cityName]}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:n.springIntro}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:n.springOutro})]}),a.jsx("img",{src:ca,alt:`Torsion springs used for garage door spring replacement in ${n.cityName}`,className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsx("img",{src:cd,alt:`Technician performing garage door opener repair in ${n.cityName}`,className:"rounded-xl shadow-card w-full h-64 object-cover order-2 md:order-1",loading:"lazy"}),a.jsxs("div",{className:"order-1 md:order-2",children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-4",children:["Garage Door Opener Repair & Installation in ",n.cityName]}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:n.openerIntro}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:n.openerOutro})]})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsxs("div",{children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-4",children:["New Garage Door Installation in ",n.cityName]}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:n.installIntro}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:n.installOutro})]}),a.jsx("img",{src:lf,alt:`New garage door installed in ${n.cityName}`,className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:["Why ",n.cityName," Homeowners Call Professional Garage Door Services"]}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(at,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Licensed & Insured"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(zo,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Family Owned"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fe,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"24-Hour Service"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fa,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Free Estimates"})]})]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed max-w-3xl mx-auto text-center",children:n.whyChooseIntro})]})})}),a.jsx(ld,{cityName:n.cityName}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6 text-center",children:"Helpful Tips Before You Call"}),a.jsx("ul",{className:"space-y-3",children:oD.map(s=>a.jsxs("li",{className:"flex items-start gap-3",children:[a.jsx(fa,{className:"w-5 h-5 text-primary flex-shrink-0 mt-0.5"}),a.jsx("span",{className:"text-muted-foreground",children:s})]},s))}),a.jsxs("p",{className:"text-center mt-8",children:[a.jsx("a",{href:"tel:+18882854021",className:"text-primary font-bold text-lg hover:underline",children:"Call (888) 285-4
300021"}),a.jsx("span",{className:"text-muted-foreground",children:" for a free estimate or to check same-day availability."})]})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[a.jsxs("h2",{className:"font-heading text-3xl text-foreground mb-4",children:["Serving ",n.cityName," and Nearby Areas"]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:n.nearbyBlurb})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Frequently Asked Questions"}),a.jsx(Ni,{type:"single",collapsible:!0,className:"space-y-4",children:n.faqs.map((s,i)=>a.jsxs(ns,{value:`faq-${i}`,className:"bg-card rounded-xl border border-border px-6 shadow-card",children:[a.jsx(as,{className:"text-foreground font-semibold text-left hover:text-primary",children:s.q}),a.jsx(os,{className:"text-muted-foreground leading-relaxed",children:s.a})]},i))})]})})}),a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"font-heading text-3xl md:text-4xl text-secondary-foreground mb-4",children:"Ready to Get Your Garage Door Fixed?"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:n.finalCtaTagline}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2 w-full sm:w-auto",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})}),a.jsx("a",{href:"#quote-form",children:a.jsx(re,{variant:"outline",size:"xl",className:"w-full sm:w-auto",children:"Request a Free Estimate"})})]})]})})]}),a.jsx(ue,{}),a.jsx(sr,{})]})},gj="https://www.professionalgaragedoorservices.com",hl=`${gj}/service-areas/san-diego-garage-door-repair`,uo="(858) 327-3151",bs="+18583273151",sD="https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1117899",iD=["North Park","Hillcrest","Normal Heights","University Heights","Mission Valley","Clairemont","Pacific Beach","La Jolla","Mira Mesa","Scripps Ranch","Chula Vista","La Mesa","El Cajon","National City","Poway","Del Mar","Escondido","Carlsbad","Oceanside"],lD=[{icon:nb,title:"Garage Door Repair",description:"Sticking doors, damaged panels, worn rollers — we diagnose the actual cause and repair it correctly the first time.",link:"/garage-door-repair"},{icon:tb,title:"Spring Replacement",description:"Torsion and extension spring replacement sized to your door's actual weight, with same-day service often available.",link:"/garage-door-spring-replacement"},{icon:eb,title:"Garage Door Opener Repair",description:"Motors that hum without moving the door, failing sensors, and unresponsive remotes — diagnosed and fixed.",link:"/garage-door-opener-repair"},{icon:Zx,title:"New Garage Door Installation",description:"Steel and insulated doors in modern styles, sized and installed for San Diego homes old and new.",link:"/garage-door-installation"},{icon:rb,title:"Emergency Garage Door Repair",description:"24-hour service for a door that won't close and secure your home, or a spring that's failed overnight.",link:"/emergency-garage-door-repair"},{icon:qo,title:"Off-Track Garage Door Repair",description:"Realignment for doors that have jumped their tracks or hang crooked — stop using it and call before it gets worse.",link:"/off-track-garage-door-repair"},{icon:RC,title:"Cable Repair",description:"Snapped or frayed cables replaced safely. These carry serious tension and shouldn't wait.",link:"/garage-door-cable-repair"},{icon:at,title:"Maintenance & Tune-Ups",description:"A full check of springs, cables, rollers, and the auto-reverse safety feature to catch problems early.",link:"/garage-door-maintenance"}],cD=[{title:"Door won't open",body:"Often a broken spring, disconnected opener, or a track obstruction. If the door feels unusually heavy, stop and call rather than forcing it."}
300,{title:"Door won't close",body:"Usually a misaligned safety sensor, an obstruction in the track, or a limit-setting issue on the opener. Leaving a door that won't close overnight is a security risk worth addressing quickly."},{title:"Broken spring",body:"A loud bang, a visible gap in the coil, or a door that suddenly feels like dead weight are all signs. Never try to open a door with a broken spring — the counterbalance is gone."},{title:"Snapped cable",body:"A frayed or detached cable can let one side of the door drop suddenly. Keep the area clear and don't attempt to operate the door."},{title:"Door is off track",body:"The door may bind, lean, or hang unevenly in the track. Continuing to run the opener can make the door fall — turn it off and call for an inspection."},{title:"Opener runs but door doesn't move",body:"The motor and the door's physical connection to it are two different things. A broken drive gear, a disconnected trolley, or a failed spring can all cause this."},{title:"Loud grinding or squeaking",body:"Typically worn rollers, dry hinges, or loosening hardware. Salt air near the coast and everyday sun exposure inland can both speed up this kind of wear over time."},{title:"Bent or damaged panels",body:"Beyond the appearance issue, a bent panel can affect how the door tracks and seals. Sometimes a single panel can be swapped instead of replacing the whole door."}],Gy=[{q:"Do you offer garage door repair in San Diego?",a:"Yes. We provide garage door repair, spring replacement, opener repair, and new door installation throughout San Diego and nearby communities."},{q:"Do you offer free estimates in San Diego?",a:"Yes, every estimate for repairs, spring replacement, opener work, and new door installation is free and no-obligation."},{q:"Can you replace a broken garage door spring the same day?",a:`Often yes — same-day service is available when scheduling allows. Call ${uo} and we'll check availability for your address.`},{q:"Do you offer 24-hour garage door repair in San Diego?",a:"Yes, 24-hour service is available for urgent situations, like a door that won't close and secure your home or a spring that's failed and left the door stuck."},{q:"Do you repair garage door openers in San Diego?",a:"Yes, including issues with motors, sensors, remotes, keypads, chains, and belts, plus installation of new openers when a repair no longer makes sense."},{q:"Can you install a new garage door in San Diego?",a:"Yes, including steel and insulated doors in a range of modern styles, matched to your home and your opener."},{q:"What should I do if my garage door is off track?",a:"Stop using the door, keep the area clear, and don't try to force it back into the track yourself. Call us and we'll assess and correct it safely."},{q:"Is it safe to use a garage door with a broken spring?",a:"No. Once a spring breaks, the door loses its counterbalance and becomes extremely heavy and unpredictable. Leave it alone and call a technician rather than forcing it."}
300,{q:"What areas near San Diego do you serve?",a:"In addition to San Diego proper, we serve North Park, Hillcrest, Normal Heights, University Heights, Mission Valley, Clairemont, Pacific Beach, La Jolla, Mira Mesa, Scripps Ranch, Chula Vista, La Mesa, El Cajon, National City, Poway, Del Mar, Escondido, Carlsbad, and Oceanside."},{q:"Can customers visit your San Diego office?",a:`Professional Garage Door Services serves San Diego as a service-area garage door company. Our technicians travel to customers for estimates, repairs, and installations. Customers should call ${uo} to schedule service rather than visiting a physical office.`}],dD=()=>a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Garage Door Repair San Diego, CA | Same-Day Service"}),a.jsx("meta",{name:"description",content:"Need garage door repair in San Diego? Call 858-327-3151 for spring replacement, opener repair, new doors, free estimates, and 24-hour service."}),a.jsx("link",{rel:"canonical",href:hl}),a.jsx("meta",{property:"og:title",content:"Garage Door Repair San Diego, CA | Professional Garage Door Services"}),a.jsx("meta",{property:"og:description",content:"Licensed & insured garage door repair serving San Diego, CA. Free estimates, 24-hour and same-day service available."}),a.jsx("meta",{property:"og:url",content:hl}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"HomeAndConstructionBusiness",name:"Professional Garage Door Services",url:hl,telephone:"858-327-3151",areaServed:["San Diego, CA",...iD],openingHours:"Mo-Su 00:00-24:00",priceRange:"$$"})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:Gy.map(e=>({"@type":"Question",name:e.q,acceptedAnswer:{"@type":"Answer",text:e.a}}))})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:gj},{"@type":"ListItem",position:2,name:"Garage Door Repair San Diego",item:hl}]})})]}),a.jsx(de,{}),a.jsxs("main",{children:[a.jsx($k,{ratingBadge:"Now Serving San Diego, CA",badgeIcon:at,heading:a.jsxs(a.Fragment,{children:["Garage Door Repair in ",a.jsx("span",{className:"text-primary",children:"San Diego"}),", CA"]}),subheadline:"Repair, spring replacement, opener service, and new door installation for San Diego homeowners.",phoneDisplay:uo,phoneHref:bs,thirdBadgeIcon:at,thirdBadgeTitle:"Licensed & Insured",thirdBadgeSubtitle:"CSLB #1117899"}),a.jsx(Gk,{}),a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsx("div",{className:"text-center mb-10",children:a.jsx("p",{className:"text-secondary-foreground/60 uppercase tracking-wider text-sm font-semibold",children:"Serving San Diego Neighborhoods"})}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-6",children:[a.jsxs("a",{href:sD,target:"_blank",rel:"noopener noreferrer","aria-label":"Verify CSLB license #1117899 on the California Contractors State License Board",className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center block hover:bg-secondary-foreground/15 transition-colors",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(at,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Licensed & Insured"}),a.jsx("p",{className:"text-secondary-foreground/70 text-xs",children:"CSLB #1117899"})]}),a.jsxs("div",{className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(zo,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Family Owned"}
vendor: 6,024 bytes, line 300
300),a.jsx("p",{className:"text-secondary-foreground/70 text-xs",children:"& Operated"})]}),a.jsxs("div",{className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(fe,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"24-Hour Service"}),a.jsx("p",{className:"text-secondary-foreground/70 text-xs",children:"Available Daily"})]}),a.jsxs("div",{className:"bg-secondary-foreground/10 rounded-2xl p-6 text-center",children:[a.jsx("div",{className:"flex justify-center mb-3",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-primary flex items-center justify-center",children:a.jsx(Fc,{className:"w-7 h-7 text-primary-foreground"})})}),a.jsx("p",{className:"text-secondary-foreground font-bold text-sm",children:"Free Estimates"}),a.jsx("p",{className:"text-secondary-foreground/70 text-xs",children:"No Obligation"})]})]})]})}),a.jsx("section",{className:"bg-primary text-primary-foreground py-10",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"text-2xl md:text-3xl font-bold mb-4",children:"Call Professional Garage Door Services Today"}),a.jsx("p",{className:"mb-6 text-lg opacity-95",children:"Licensed & insured. Family owned. 24-hour service available for San Diego homeowners."}),a.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-center gap-4 md:gap-10",children:[a.jsxs("div",{className:"flex flex-col items-center",children:[a.jsx("span",{className:"text-sm opacity-90 uppercase tracking-wide",children:"San Diego"}),a.jsx("a",{href:`tel:${bs}`,className:"text-2xl md:text-3xl font-bold underline-offset-4 hover:underline",children:uo})]}),a.jsx("div",{className:"hidden md:block h-10 w-px bg-primary-foreground/30"}),a.jsxs("div",{className:"flex flex-col items-center",children:[a.jsx("span",{className:"text-sm opacity-90 uppercase tracking-wide",children:"Toll-Free"}),a.jsx("a",{href:"tel:+18882854021",className:"text-2xl md:text-3xl font-bold underline-offset-4 hover:underline",children:"(888) 285-4021"})]})]})]})}),a.jsx("section",{className:"py-24 bg-background",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center max-w-2xl mx-auto mb-16",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"What We Offer"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-6",children:"Garage Door Services in San Diego"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"From routine repairs to full door replacements, we provide comprehensive garage door solutions for San Diego homeowners."})]}),a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:lD.map(e=>a.jsxs(A,{to:e.link,className:"group bg-card rounded-2xl p-8 shadow-card hover:shadow-xl transition-all duration-500 hover:-translate-y-2 border border-border",children:[a.jsx("div",{className:"w-16 h-16 rounded-xl bg-gradient-gold flex items-center justify-center mb-6 group-hover:scale-110 transition-transform duration-300 shadow-gold",children:a.jsx(e.icon,{className:"w-8 h-8 text-primary-foreground"})}),a.jsx("h3",{className:"font-heading text-2xl text-foreground mb-4",children:e.title}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:e.description}),a.jsxs("div",{className:"mt-6 flex items-center text-primary font-semibold opacity-0 group-hover:opacity-100 transition-opacity duration-300",children:[a.jsx("span",{children:"Learn More"}),a.jsx("svg",{className:"w-5 h-5 ml-2 group-hover:translate-x-2 transition-transform",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 8l4 4m0 0l-4 4m4-4H3"})})]})]},e.title))})]})}),a.jsx("section",{className:"py-24 bg-muted/30",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"text-center max-w-2xl mx-auto mb-12",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Homeowner Guide"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-6",children:"Common Garage Door Problems in San Diego Homes"}),a.jsx("p",{className:"text-muted-foreground text-lg",children:"San Diego's mix of older Craftsman and bungalow-style homes near the coast and newer construction further inland means we see a wide range of issues, in both attached and detached garages."})]}),a.jsx("div",{className:"grid md:grid-cols-2 gap-6 max-w-4xl mx-auto",children:cD.map(e=>a.jsxs("div",{className:"bg-card rounded-xl p-6 border border-border shadow-card",children:[a.jsx("p",{className:"font-heading text-lg text-foreground mb-2",children:e.title}),a.jsx("p",{className:"text-muted-foreground text-sm",children:e.body})]},e.title))}),a.jsxs("div",{className:"mt-8 max-w-4xl mx-auto bg-primary/5 border border-primary/20 rounded-xl p-6 flex items-start gap-4",children:[a.jsx(qo,{className:"w-6 h-6 text-primary flex-shrink-0 mt-1"}),a.jsx("p",{className:"text-muted-foreground text-sm",children:"If your door feels unusually heavy, won't stay open, or you see a broken spring or cable, stop using it and keep people and pets clear. These are safety issues, not just inconveniences."})]})]})}),a.jsx("section",{className:"py-24 bg-background",children:a.jsxs("div",{className:"container mx-auto px-4",children:[a.jsxs("div",{className:"max-w-3xl mx-auto text-center mb-8",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Making the Right Call"}),a.jsx("h2",{className:"font-heading text-4xl md:text-5xl text-foreground mb-6",children:"Garage Door Repair vs. Replacement"})]}
300),a.jsxs("div",{className:"max-w-3xl mx-auto space-y-4 text-muted-foreground leading-relaxed",children:[a.jsx("p",{children:"Most garage door problems don't require a new door. A broken spring, a bad roller, or a dented panel can usually be repaired on its own without replacing the whole unit."}),a.jsx("p",{children:"Replacement tends to make more sense when the door is older, has needed several repairs already, has multiple damaged panels, or the hardware is worn well beyond a simple fix. Attached garages that share a wall with living space benefit from better insulation, and homes closer to the coast see faster hardware wear from salt air, which is worth factoring into a repair-versus-replace decision."}),a.jsx("p",{children:"We'll give you a straightforward comparison for your specific door — including the real cost of repeated repairs versus a one-time replacement — so the decision is yours to make with good information, not pressure."})]})]})}),a.jsx("section",{className:"py-24 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto grid md:grid-cols-2 gap-10 items-center",children:[a.jsxs("div",{children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Spring Replacement"}),a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Garage Door Spring Replacement in San Diego"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"Torsion springs mount on a metal shaft above the door, while extension springs run along the upper tracks. Both counterbalance the door's weight, and both wear out with enough open-and-close cycles."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"A door that suddenly feels much heavier than usual, a loud bang, or a visible gap in the coil are all signs a spring has failed. Same-day spring replacement is often available when scheduling allows."})]}),a.jsx("img",{src:ca,alt:"Torsion spring replacement performed by Professional Garage Door Services",className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-24 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto grid md:grid-cols-2 gap-10 items-center",children:[a.jsx("img",{src:cd,alt:"Garage door opener repair performed by Professional Garage Door Services",className:"rounded-xl shadow-card w-full h-64 object-cover order-2 md:order-1",loading:"lazy"}),a.jsxs("div",{className:"order-1 md:order-2",children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"Opener Repair & Installation"}),a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Garage Door Opener Repair & Installation"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"A motor that hums without moving the door, a chain or belt that's slipping, or a remote and keypad that's stopped responding are the most common opener complaints we see."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"California requires battery backup on new residential openers. Many current models also offer smart, Wi-Fi-enabled control where compatible with your door — app and account setup on your phone is something you'll handle yourself after installation."})]})]})})}),a.jsx("section",{className:"py-24 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto grid md:grid-cols-2 gap-10 items-center",children:[a.jsxs("div",{children:[a.jsx("span",{className:"inline-block text-primary font-bold uppercase tracking-wider text-sm mb-4",children:"New Installation"}),a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"New Garage Door Installation in San Diego"}),a.jsx("p",{className:"text-muted-foreground mb-3 leading-relaxed",children:"If your door is outdated, has damaged panels, or you're calling for repairs more often than makes sense, a new garage door installation is worth considering."}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"Steel and insulated doors in modern styles offer quieter operation, better security, and stronger curb appeal. For homes closer to the coast, we can also discuss hardware built to hold up better against salt-air exposure."})]}),a.jsx("img",{src:lf,alt:"New insulated steel garage door installed by Professional Garage Door Services",className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})]})})}),a.jsx(Hk,{showRatingBadge:!1}),a.jsx(Fk,{}
300),a.jsx(ld,{cityName:"San Diego",phoneHref:bs,phoneDisplay:uo,body:"Our technicians bring years of hands-on experience to every job in San Diego, backed by a fully equipped, licensed and insured team."}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Why San Diego Homeowners Call Professional Garage Door Services"}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(at,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Licensed & Insured"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(zo,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Family Owned"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fe,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"24-Hour Service"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fa,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Free Estimates"})]})]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed max-w-3xl mx-auto text-center",children:"We serve San Diego as a service-area garage door company — our technicians come to your home for the estimate, the repair, and the installation. As a licensed, insured, and family-owned business, we explain what's actually wrong with your door and give you a clear price before starting."})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"San Diego Areas We Serve"}),a.jsx("p",{className:"text-muted-foreground leading-relaxed",children:"We provide garage door repair, spring replacement, and opener service throughout San Diego, including North Park, Hillcrest, Normal Heights, and University Heights, out to Mission Valley, Clairemont, Pacific Beach, and La Jolla, and across Mira Mesa, Scripps Ranch, Chula Vista, La Mesa, El Cajon, National City, and Poway. We also serve Del Mar, Escondido, Carlsbad, and Oceanside. If you're nearby and not sure whether you're in our service area, just give us a call."})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Frequently Asked Questions"}),a.jsx(Ni,{type:"single",collapsible:!0,className:"space-y-4",children:Gy.map((e,t)=>a.jsxs(ns,{value:`faq-${t}`,className:"bg-card rounded-xl border border-border px-6 shadow-card",children:[a.jsx(as,{className:"text-foreground font-semibold text-left hover:text-primary",children:e.q}),a.jsx(os,{className:"text-muted-foreground leading-relaxed",children:e.a})]},t))})]})})}),a.jsx(Vk,{}),a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"font-heading text-3xl md:text-4xl text-secondary-foreground mb-4",children:"Ready to Get Your Garage Door Fixed?"}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:"Licensed, insured, and family owned — serving San Diego with free estimates, 24-hour service, and same-day availability when scheduling allows."}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[a.jsx("a",{href:`tel:${bs}`,children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2 w-full sm:w-auto",children:[a.jsx(et,{className:"w-5 h-5"})," Call ",uo]})}),a.jsx(A,{to:"/contact",children:a.jsx(re,{variant:"outline",size:"xl",className:"w-full sm:w-auto",children:"Request Service"})})]})]})})]}),a.jsx(ue,{showReviewLinks:!1,showTarzanaLink:!1}),a.jsx(sr,{phoneHref:bs})]}),uD={"garage-door-repair":{slug:"garage-door-repair",serviceName:"Garage Door Repair",metaTitle:"Garage Door Repair | Licensed & Insured | Same-Day Service",metaDescription:"Professional garage door repair based in Tarzana, serving the San Fernando Valley. Licensed, insured, free estimates, 24-hour and same-day service. Call (888) 285-4
300021.",h1:"Garage Door Repair",heroTagline:"Licensed, insured, and family owned — fast, honest garage door repair based in Tarzana.",intro:["If your garage door won't open, won't close, or is making a noise that just doesn't sound right, you need a straight answer about what's wrong and what it'll take to fix it — not a runaround.","Professional Garage Door Services is based in Tarzana and provides garage door repair throughout the surrounding San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","24-hour service is available for problems that can't wait, and same-day appointments can often be scheduled when timing allows. Call (888) 285-4021 and we'll walk through what's happening with your door."],overview:["Garage door repair covers the diagnosis and correction of any mechanical or safety issue affecting how your door opens, closes, or holds its position — springs, cables, rollers, hinges, tracks, panels, and the connection between the door and its opener.","Most homeowners need a repair because something has changed: the door got louder, heavier, slower, crooked, or simply stopped responding. These aren't just annoyances. A garage door is one of the largest, heaviest moving objects in a home, and it's built with a counterbalance system — springs and cables under serious tension — specifically so it can be lifted safely. When any part of that system fails, the door stops being predictable.","That's also why garage door repair matters for daily safety, not just convenience. A door that reverses unexpectedly, drops suddenly, or comes off its track isn't just inconvenient — it's a real hazard to people, pets, and vehicles nearby.","As a general guide: if the door feels heavier than usual, makes a loud bang, hangs unevenly, or won't respond to the opener at all, stop using it and call for an inspection rather than continuing to test it yourself."],problems:[{title:"Garage door won't open",notice:"The opener runs, or you try to lift manually, but the door doesn't move — or moves only partway.",cause:"Often a broken spring, a snapped cable, or a disconnected opener trolley. Sometimes it's simply a locked manual release.",matters:"Forcing a door that won't open can damage the opener, the track, or the door itself, and can be unsafe if a spring or cable has failed."},{title:"Garage door won't close",notice:"The door starts to close and then stops or reverses, or won't respond to the close command at all.",cause:"Frequently a sensor alignment issue, an obstruction the safety system is detecting, or a problem with the opener's limit settings.",matters:"A door that won't close is a security gap as well as a functional one — worth addressing the same day if possible."},{title:"Garage door stuck open or stuck closed",notice:"The door is fully open or fully closed and won't move in either direction.",cause:"Can range from a broken spring or cable to a track obstruction or a failed opener component.",matters:"A door stuck open is a security and safety risk; a door stuck closed can trap a vehicle inside. This is exactly the kind of situation emergency service is meant for.",link:{label:"See emergency garage door repair",path:"/emergency-garage-door-repair"}},{title:"Door feels unusually heavy",notice:"Manually lifting the door takes noticeably more effort than before, or the opener strains to move it.",cause:"Almost always a spring that's weakening or has already partially failed.",matters:"This is a strong warning sign. Continuing to operate a heavy door increases strain on the opener and raises the risk of a sudden, more dangerous failure.",link:{label:"See garage door spring replacement",path:"/garage-door-spring-replacement"}},{title:"Broken or visibly damaged spring",notice:"A visible gap in the coil, a loud bang from the garage, or a door that suddenly won't lift.",cause:"Torsion and extension springs have a rated cycle life and eventually wear out from normal use.",matters:"Never unsafe to leave alone temporarily, but unsafe to operate the door or attempt a DIY fix — these springs are under high tension.",link:{label:"See garage door spring replacement",path:"/garage-door-spring-replacement"}},{title:"Frayed, loose, or snapped cable",notice:"A cable hanging loose near the bottom rollers, or a door that hangs crooked on one side.",cause:"Cable wear over time, or a cable that's slipped off its drum due to another hardware issue.",matters:"A failing cable can let the door drop unevenly. Keep the area clear and avoid operating the door until it's inspected.",link:{label:"See garage door cable repair",path:"/garage-door-cable-repair"}}
300,{title:"Door is off track",notice:"The door binds, sticks, or visibly leans to one side as it moves.",cause:"Often caused by a broken cable, a roller that's jumped the track, or an impact to the door.",matters:"Continuing to run an off-track door can cause it to fall or jam completely. Stop use until it's realigned.",link:{label:"See off-track garage door repair",path:"/off-track-garage-door-repair"}},{title:"Loud grinding, popping, or banging",notice:"New or worsening noise during operation that wasn't there before.",cause:"Usually worn rollers, loose hardware, or a hinge that needs lubrication or replacement.",matters:"Not usually an immediate safety issue, but it's a sign of wear that tends to get worse — and cheaper to fix early."},{title:"Opener runs but door doesn't move",notice:"You can hear the motor running, but the door itself stays put.",cause:"Common culprits include a broken drive gear, a disconnected trolley, or a spring/cable failure that's separate from the opener itself.",matters:"This tells us the problem is mechanical, not electrical — an important distinction for diagnosing it correctly the first time.",link:{label:"See garage door opener repair",path:"/garage-door-opener-repair"}},{title:"Door reverses immediately after closing",notice:"The door touches the ground or gets close, then reverses back open on its own.",cause:"Usually misaligned safety sensors, a close-limit setting that needs adjustment, or an obstruction being detected.",matters:"This is a safety feature working as intended, but persistent reversing usually means something needs adjustment or repair.",link:{label:"See garage door opener repair",path:"/garage-door-opener-repair"}},{title:"Bent, dented, or cracked panels",notice:"Visible damage to one or more sections of the door, often from an impact.",cause:"Vehicle contact, storm damage, or age-related wear on older doors.",matters:"Beyond appearance, damaged panels can affect the door's balance and structural integrity — sometimes a single panel replacement solves it without a full door replacement.",link:{label:"See garage door installation",path:"/garage-door-installation"}}],processSteps:["A full inspection of the door, tracks, springs, cables, rollers, hinges, and opener to identify the actual cause — not just the symptom you're noticing.","A clear explanation of what's wrong, in plain language, before any repair work begins.","A discussion of repair options, including straightforward fixes versus more involved repairs, so you understand the tradeoffs.","The repair itself, using parts matched to your door's size, weight, and usage.","Balance testing to confirm the door lifts and holds properly once the repair is complete — an unbalanced door will wear out new parts faster.","Opener testing, including the auto-reverse safety feature, to confirm everything is working correctly together, not just in isolation.","A final walkthrough so you know what was fixed, what to expect going forward, and whether anything else is worth keeping an eye on."],repairVsReplacement:["Most garage door problems are fixable without replacing the entire door. A broken spring, a bad cable, worn rollers, or even a damaged panel can often be repaired for a fraction of the cost of a new door.","Replacement becomes the more sensible option when a door has needed repeated repairs, has multiple damaged panels, is significantly out of balance due to age, or simply doesn't insulate or operate the way you need it to anymore.","We'll always give you a straightforward read on your specific door — including whether continuing to repair it makes financial sense compared to replacing it — so the decision is yours to make with good information, not a sales pitch."],safetyTips:["Do not force a door that's stuck, heavy, or not responding — stop and call for an inspection.","Do not attempt to loosen, adjust, or replace spring hardware yourself — these are under high tension.","Do not remove or bypass safety cables or sensors, even temporarily.","Keep children and pets away from a door that isn't operating normally.","If a spring or cable looks broken, avoid using the door at all until it's inspected.","If the door reverses or won't 
300close, check for an obstruction first, but don't keep forcing repeated attempts."],costSection:["Garage door repair costs vary based on what's actually wrong — a roller or hinge replacement costs far less than a spring replacement, cable repair, or panel replacement, and larger or custom doors typically cost more to service than standard sizes.","Other factors that affect price include the age and condition of your existing hardware, whether your opener is also affected, how many components need to be addressed at once, and labor time for the specific repair.","We provide a free, no-obligation estimate after inspecting your door, so you know the exact cost before any work begins — not a vague range or a surprise invoice."],whyChooseIntro:"We're based in Tarzana, not routing your call to a subcontractor across town. Professional Garage Door Services is licensed, insured, and family owned, with free estimates, 24-hour service, and same-day availability when scheduling allows. We explain repair and replacement options clearly and focus on getting your door working safely — not just quickly.",relatedServices:[{label:"Garage Door Spring Replacement",path:"/garage-door-spring-replacement"},{label:"Garage Door Opener Repair",path:"/garage-door-opener-repair"},{label:"Garage Door Cable Repair",path:"/garage-door-cable-repair"},{label:"Off-Track Garage Door Repair",path:"/off-track-garage-door-repair"},{label:"Emergency Garage Door Repair",path:"/emergency-garage-door-repair"},{label:"Garage Door Installation",path:"/garage-door-installation"}],faqs:[{q:"How much does garage door repair cost?",a:"It depends on the specific issue — a roller or hinge fix costs far less than a spring or cable replacement. We inspect the door first and give you an exact, upfront price before any work begins."},{q:"Do you offer free estimates for garage door repair?",a:"Yes, every estimate is free and no-obligation, whether it's a small repair or a larger job."},{q:"Do you offer 24-hour garage door repair?",a:"Yes, 24-hour service is available for urgent situations like a door that's stuck open, won't close, or has a broken spring."},{q:"Can I get same-day garage door repair?",a:"Often yes — same-day service is available when scheduling allows. Call (888) 285-4021 to check availability for your situation."},{q:"Why won't my garage door open?",a:"Common causes include a broken spring, a snapped cable, a disconnected opener trolley, or the manual release being engaged. An inspection will confirm the exact cause."},{q:"Why won't my garage door close?",a:"This is often a sensor alignment issue, an obstruction being detected, or an opener limit setting that needs adjustment."},{q:"Is it safe to use a garage door with a broken spring?",a:"No. A broken spring removes the door's counterbalance, making it extremely heavy and unpredictable to operate. Stop using the door and call for an inspection."},{q:"Why is my garage door suddenly so loud?",a:"Usually worn rollers, loose hardware, or hinges in need of lubrication or replacement. It's a sign of wear worth addressing before it gets worse."},{q:"Should I repair or replace my garage door?",a:"It depends on the door's age, condition, and repair history. We'll give you an honest comparison so you can decide with good information."},{q:"Do you repair garage door openers as well?",a:"Yes, opener issues are often connected to door problems — we check both during a repair visit."},{q:"How long does a typical garage door repair take?",a:"Many common repairs — rollers, hinges, cables, single springs — can be completed in one visit, usually within a couple of hours. More involved repairs may take longer."},{q:"Do you serve areas outside of Tarzana?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and surrounding San Fernando Valley areas."}],finalCtaTagline:"Licensed, insured, and family owned — serving Tarzana and the San Fernando Valley with free estimates, 24-hour service, and same-day availability when scheduling allows."},"garage-door-spring-replacement":{slug:"garage-door-spring-replacement",serviceName:"Garage Door Spring Replacement",metaTitle:"Garage Door Spring Replacement | Same-Day Service Available",metaDescription:"Broken garage door spring? Licensed, insured spring replacement based in Tarzana. Free estimates, 24-hour and same-day service. Call (888) 285-4
300021.",h1:"Garage Door Spring Replacement",heroTagline:"Licensed, insured, and family owned — safe, same-day garage door spring replacement based in Tarzana.",intro:["A garage door that suddenly feels too heavy to lift, or a loud bang followed by a door that won't budge, almost always points to one thing: a broken spring. It's one of the most common — and most misunderstood — garage door repairs.","Professional Garage Door Services is based in Tarzana and provides garage door spring replacement throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","Same-day spring replacement is often available, and 24-hour service covers the situations that can't wait. Call (888) 285-4021 and we'll get you the right answer."],overview:["Garage door springs do the heavy lifting — literally. They counterbalance almost the entire weight of the door so that it can be raised and lowered smoothly, whether by an opener or by hand.","There are two main types: torsion springs, which mount on a metal shaft above the door and twist to store energy, and extension springs, which stretch along the horizontal tracks on either side. Both wear out over time from normal use — they're rated for a certain number of open-close cycles, and once that's used up, they're prone to breaking.","When a spring breaks, the door loses its counterbalance. What used to lift with one hand can suddenly become too heavy to move safely, and an opener not designed to lift that weight unassisted can be damaged trying.","If your door suddenly feels heavy, you hear a loud bang from the garage, or you can see a visible gap in the coil of the spring, stop using the door and call for a replacement rather than trying to force it."],problemsHeading:"Signs Your Garage Door Spring Is Failing",problems:[{title:"Garage door feels heavy",notice:"Manual lifting takes much more effort than before, or the opener strains and slows down.",cause:"A spring that's losing tension or has partially failed.",matters:"This is the most common early warning sign of spring failure — worth addressing before it breaks completely."},{title:"Loud bang from the garage",notice:"A sudden, sharp bang, often followed by the door not responding.",cause:"This is frequently the sound of a torsion spring breaking under tension.",matters:"The door has lost its counterbalance. Don't attempt to open or close it until it's inspected."},{title:"Visible gap in the spring coil",notice:"A noticeable separation in the coiled spring above the door.",cause:"The spring has broken and is no longer under proper tension.",matters:"This confirms spring failure. The door is unsafe to operate until the spring is replaced."},{title:"Door slams shut instead of closing smoothly",notice:"The door drops quickly instead of lowering at a controlled pace.",cause:"Loss of spring tension removes the controlled counterbalance that normally slows the door's descent.",matters:"A door that slams can cause damage or injury. Keep people and pets clear and avoid using it further."},{title:"Door opens unevenly or crooked",notice:"One side of the door lifts faster or higher than the other.",cause:"On doors with two springs, one may have failed while the other is still intact, creating an imbalance.",matters:"An uneven lift puts extra strain on the remaining spring, cables, and tracks."},{title:"Opener struggles or burns out",notice:"The opener motor works harder than normal, gets warm, or eventually fails.",cause:"Openers aren't designed to lift a door's full weight without spring assistance — a bad spring puts that burden on the motor.",matters:"Continuing to run the door this way can shorten the opener's lifespan significantly."}],processHeading:"What to Expect During a Spring Replacement Visit",processSteps:["Inspection of the door to confirm the spring type (torsion or extension), size, and whether one or both springs need replacing.","An assessment of the door's overall weight and balance, since the correct spring depends on both.","A clear explanation of what's needed and why, including whether related hardware like cables or rollers should be addressed at the same time.","Replacement using springs matched to your door's exact specifications — not a generic, one-size-fits-all part.","Balance testing after installation to confirm the door holds position and moves smoothly through its full range.","A final check of the opener's performance now that it's no longer compensating for a failed spring."],repairVsReplacementHeading:"Repair the Spring or Replace the Door?",repairVsReplacement:["In the vast majority of cases, a broken spring is a straightforward, contained repair — it doesn't mean anything is wrong with the door itself, and replacing the spring restores n
300ormal operation.","The exception is when a spring failure has caused secondary damage — for example, if the door dropped suddenly and damaged a panel or track, or if the door is old enough that other hardware is also failing at the same time.","We'll let you know honestly if we see signs of broader wear beyond the spring itself, rather than replacing just one part and leaving you to deal with the next failure a few months later."],safetyTips:["Never attempt to loosen, adjust, or replace garage door spring hardware yourself — these springs are under extreme tension.","Do not try to force a door open or closed if you suspect the spring has broken.","Keep children and pets away from the garage until the spring is repaired.","If you see a visible gap in the spring, treat the door as inoperable until it's fixed.","Avoid using the emergency release or manually operating the door if a spring has failed — the door can drop unexpectedly."],costHeading:"What Does Spring Replacement Cost?",costSection:["Spring replacement cost depends on the spring type, size, and whether one or both springs need to be replaced, along with your door's overall weight and any related hardware that needs attention.","Custom or oversized doors typically require heavier-duty springs, which can cost more than a standard single-car door's springs.","We provide a free estimate after inspecting your specific door and spring setup, so you have an exact price before any work begins."],whyChooseIntro:"We're based in Tarzana and handle garage door spring replacement safely, correctly, and without upselling parts you don't need. Professional Garage Door Services is licensed, insured, and family owned, with free estimates, 24-hour service, and same-day availability when scheduling allows.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Emergency Garage Door Repair",path:"/emergency-garage-door-repair"},{label:"Garage Door Cable Repair",path:"/garage-door-cable-repair"}],faqs:[{q:"How much does garage door spring replacement cost?",a:"It depends on the spring type, size, and whether one or both need replacing. We give you an exact price after a free inspection."},{q:"Can a broken garage door spring be replaced same-day?",a:"Often yes — same-day spring replacement is available when scheduling allows. Call (888) 285-4021 to check."},{q:"What's the difference between torsion and extension springs?",a:"Torsion springs mount on a shaft above the door and twist to store energy. Extension springs stretch along the tracks on either side. Both counterbalance the door's weight, just using different mechanisms."},{q:"Why does my garage door feel so heavy all of a sudden?",a:"This is the most common sign of a failing or broken spring, which normally counterbalances most of the door's weight."},{q:"Is it safe to open my garage door if the spring is broken?",a:"No. Without the spring's counterbalance, the door is extremely heavy and can drop unexpectedly. Avoid operating it until it's repaired."},{q:"Can I replace a garage door spring myself?",a:"We strongly advise against it. Garage door springs are under extreme tension and can cause serious injury without the right tools and training."},{q:"Do you offer emergency garage door spring repair?",a:"Yes, 24-hour service is available for a broken spring, especially if the door is stuck open or closed."},{q:"How long do garage door springs typically last?",a:"Springs are rated for a certain number of open-close cycles rather than a fixed number of years, so lifespan depends on how often the door is used."},{q:"Will replacing one spring be enough, or do I need both replaced?",a:"It depends on the age and condition of the other spring. We'll assess both and give you an honest recommendation rather than replacing more than necessary."},{q:"Do you serve areas outside of Tarzana for spring replacement?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — same-day garage door spring replacement available, based in Tarzana and serving the San Fernando Valley."},"garage-door-opener-repair":{slug:"garage-door-opener-repair",serviceName:"Garage Door Opener Repair",metaTitle:"Garage Door Opener Repair | LiftMaster & Chamberlain Service",metaDescription:"Garage door opener not working? Licensed, insured opener repair based in Tarzana. Free estimates, 24-hour and same-day service. Call (888) 285-4
300021.",h1:"Garage Door Opener Repair",heroTagline:"Licensed, insured, and family owned — reliable garage door opener repair based in Tarzana.",intro:["A garage door opener that hums but doesn't move the door, a remote that's stopped responding, or a door that reverses right after closing — opener problems come in a lot of forms, and not all of them mean you need a new unit.","Professional Garage Door Services is based in Tarzana and repairs garage door openers throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","24-hour service is available for urgent opener failures, and same-day repairs can often be scheduled. Call (888) 285-4021 and we'll help you figure out what's wrong."],overview:["The garage door opener is the motorized unit that drives the door open and closed, along with the remotes, wall button, keypad, and safety sensors that control it. It's a separate system from the door's springs and cables, though problems in one often get blamed on the other.","Opener repair covers issues with the motor, drive gear, trolley, circuit board, safety sensors, remotes, and keypad. Because openers combine mechanical and electrical parts, diagnosing the actual cause of a problem matters — a humming motor and a door that won't move can have several different explanations.","Opener issues matter for both convenience and safety. Misaligned sensors or a malfunctioning reverse feature aren't just annoying — they're part of the safety system that prevents the door from closing on a person, pet, or vehicle.","If your opener is making unusual noises, running but not moving the door, or the safety reverse feature seems unreliable, it's worth having it inspected rather than continuing to use it as-is."],problemsHeading:"Common Garage Door Opener Problems",problems:[{title:"Opener hums but door doesn't move",notice:"You hear the motor engage, but the door stays in place.",cause:"Often a stripped drive gear, a disconnected trolley, or in some cases a spring or cable issue unrelated to the opener itself.",matters:"This distinguishes a mechanical problem from an electrical one, which changes how it should be repaired.",link:{label:"See garage door repair",path:"/garage-door-repair"}},{title:"Garage door opener stopped working entirely",notice:"No response from the remote, wall button, or keypad.",cause:"Could be a power issue, a tripped breaker, a burnt-out motor, or a circuit board failure.",matters:"Worth checking power first, but a persistent failure usually needs a technician to diagnose the exact component."},{title:"Remote or keypad not working",notice:"One or all remotes fail to trigger the door, or the keypad code isn't recognized.",cause:"Battery issues, lost programming, or a failing receiver inside the opener unit.",matters:"Usually a simple fix, but a totally unresponsive receiver can point to a bigger electrical issue."},{title:"Door reverses immediately after closing",notice:"The door touches down, then reverses back open on its own.",cause:"Misaligned safety sensors, a close-force setting that's too sensitive, or an obstruction in the sensor path.",matters:"This is a safety feature doing its job, but persistent reversing usually means the sensors or settings need attention."},{title:"Sensor lights blinking or not lit",notice:"The small lights on the sensors near the bottom of the tracks are off, dim, or blinking.",cause:"Misalignment, a dirty lens, or a wiring issue between the sensors and the opener.",matters:"Sensors are a core safety feature — a misaligned or malfunctioning pair can prevent the door from closing at all."},{title:"Opener runs slower or louder than it used to",notice:"Noticeable change in speed or noise level during operation.",cause:"Worn gears, aging belt or chain, or a motor nearing the end of its service life.",matters:"Not usually an emergency, but a sign the opener may need a repair or replacement soon."},{title:"Opener works intermittently",notice:"Sometimes responds normally, other times doesn't respond at all.",cause:"Loose wiring, a failing circuit board, or interference affecting the remote signal.",matters:"Intermittent problems tend to get worse and are easier to diagnose before they become a full failure."}],processHeading:"What to Expect During an Opener Repair Visit",processSteps:["Inspection of the opener motor, drive system, sensors, wiring, remotes, and keypad to isolate the actual cause.","Testing of the door separately from the opener to rule out spring, cable, or track issues masquerading as opener problems.","A clear explanation of what's failing and the repair options available, including brand-specific parts for LiftMaster, Chamberlain, and other major manufacturers.","The repair itself, followed by full operational testing.","Safety testing of the auto-reverse feature and sensor alignment to confirm the door responds correctly to an obstruction.","A final explanation of what was repaired and what to expect from the opener going forward."],repairVsReplacementHeading:"Repair Your Opener or Replace It?",repairVsReplacement:["Many opener problems — sensor misalignment, remote issues, worn gears, minor electrical faults — are straightforward repairs that restore full function without replacing the unit.","Replacement becomes the more practical choice when the opener is old enough that parts are hard to source, it's failed multiple times, or it lacks features you actually want, like battery backup or smartphone control.","We'll give you an honest comparison of repair cost versus replacement value for your specific opener, rather than defaulting to a sale."],safetyTips:["Do n
300ot bypass or disconnect safety sensors, even if the door seems to work fine without them.","Do not continue operating a door that reverses unpredictably — have the sensors checked.","Keep the sensor area clear of tools, storage boxes, or clutter that could cause false readings.","If the opener makes a burning smell or unusual noise, stop using it and call for an inspection.","Keep children away from the opener's wall control and remotes."],costHeading:"What Does Opener Repair Cost?",costSection:["Opener repair cost depends on what's actually failing — a sensor realignment or remote reprogram is far less involved than a circuit board or motor replacement.","Brand and age of the opener also matter, since parts availability varies between manufacturers and older models.","We provide a free estimate after diagnosing the specific issue, so you know the cost before committing to the repair."],whyChooseIntro:"We're based in Tarzana and repair openers from all major manufacturers, including LiftMaster and Chamberlain. Professional Garage Door Services is licensed, insured, and family owned, with free estimates, 24-hour service, and same-day availability when scheduling allows.",relatedServices:[{label:"Garage Door Opener Installation",path:"/garage-door-opener-installation"},{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Emergency Garage Door Repair",path:"/emergency-garage-door-repair"}],faqs:[{q:"How much does garage door opener repair cost?",a:"It depends on the specific issue — sensor and remote fixes cost less than motor or circuit board repairs. We give you an exact price after diagnosing the problem."},{q:"Do you repair LiftMaster and Chamberlain openers?",a:"Yes, we repair openers from LiftMaster, Chamberlain, and other major manufacturers."},{q:"Why does my garage door opener hum but not move the door?",a:"This usually points to a mechanical issue like a stripped drive gear or disconnected trolley, or in some cases a separate spring or cable problem."},{q:"Why does my garage door reverse after closing?",a:"Most often this is misaligned safety sensors or an overly sensitive close-force setting. It can also be an obstruction in the sensor path."},{q:"My garage door opener stopped working completely — what should I check first?",a:"Check that it's plugged in and the breaker hasn't tripped. If it still doesn't respond, the issue likely needs a technician to diagnose."},{q:"Do you offer 24-hour garage door opener repair?",a:"Yes, 24-hour service is available for urgent opener failures."},{q:"Can a garage door opener be repaired same-day?",a:"Often yes — same-day service is available when scheduling allows. Call (888) 285-4021 to check."},{q:"Should I repair my opener or buy a new one?",a:"It depends on the opener's age, the cost of the needed repair, and whether you want newer features like battery backup or smartphone control. We'll give you an honest comparison."},{q:"Is it safe to use my garage door if the sensors aren't working?",a:"No. The sensors are a core safety feature that prevents the door from closing on a person, pet, or object. Have them repaired before regular use."},{q:"Do you serve areas outside of Tarzana for opener repair?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — garage door opener repair based in Tarzana, with free estimates and same-day availability when scheduling allows."},"garage-door-installation":{slug:"garage-door-installation",serviceName:"Garage Door Installation",metaTitle:"Garage Door Installation | New & Replacement Doors | Free Estimate",metaDescription:"New garage door installation based in Tarzana, serving the San Fernando Valley. Licensed, insured, free estimates. Call (888) 285-4021 for a quote.",h1:"Garage Door Installation",heroTagline:"Licensed, insured, and family owned — professional garage door installation based in Tarzana.",intro:["Whether your current door is beyond a reasonable repair, you're upgrading for better insulation and curb appeal, or you just want a door that isn't a constant source of noise and maintenance, a new installation is a bigger decision than a simple repair — and it's worth doing right.","Professional Garage Door Services is based in Tarzana and installs residential and commercial garage doors throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","Call (888) 285-4
300021 for a free, no-obligation quote on a new garage door, including steel, insulated, and custom design options."],overview:["Garage door installation means removing an old or damaged door and replacing it with a new one, sized and configured correctly for your garage opening, along with the tracks, springs, cables, and hardware needed to support it.","Homeowners typically consider installation when a door has aged past reasonable repair, has significant panel damage, doesn't insulate well, or when they're simply ready for a different look or better daily performance.","A properly installed door matters for more than appearance — it affects your home's security, energy efficiency, noise level, and how safely the door operates day to day. An improperly sized or poorly installed door can develop balance and safety issues quickly, even if it looked fine on delivery.","If your current door needs frequent repairs, has multiple damaged panels, or simply isn't serving your home well anymore, it's worth getting a straightforward installation estimate rather than continuing to patch it."],problemsHeading:"Signs It's Time for a New Garage Door",problems:[{title:"Frequent, repeated repairs",notice:"You've called for repairs more than once or twice in the past year or two.",cause:"Aging hardware across the whole door, not just one component.",matters:"At some point, ongoing repair costs can outweigh the value of the door — worth comparing the numbers honestly."},{title:"Multiple damaged or warped panels",notice:"More than one section shows denting, cracking, or warping.",cause:"Impact damage, age, or prolonged sun and heat exposure.",matters:"Multiple damaged panels affect both appearance and the door's structural balance."},{title:"Poor insulation",notice:"The garage feels noticeably hot or cold compared to the rest of the house, or energy bills reflect it.",cause:"Older doors, especially single-layer steel or wood doors, often lack proper insulation.",matters:"An insulated replacement can meaningfully improve comfort in an attached garage."},{title:"Excessive noise during operation",notice:"The door is loud even after tune-ups and hardware repairs.",cause:"Older door designs and worn-out components can create noise that a tune-up alone won't fully resolve.",matters:"A new, well-installed door with modern rollers and hardware runs noticeably quieter."},{title:"Door doesn't match the home anymore",notice:"The style, color, or condition of the door stands out compared to a renovated or updated exterior.",cause:"Homes get updated over time; garage doors sometimes get left behind.",matters:"A new door is one of the more noticeable curb appeal upgrades available."},{title:"Heavy, difficult-to-lift wood door",notice:"An older wood door that's become increasingly hard to operate, manually or with the opener.",cause:"Wood doors are heavier than modern steel or aluminum options and can warp or swell over time.",matters:"Replacing with a lighter, better-balanced door reduces strain on the opener and improves daily reliability."}],processHeading:"What to Expect During an Installation",processSteps:["A conversation about your goals — repair-driven replacement, style upgrade, insulation, or security — and a review of your current opening.","Guidance on door materials and styles, including steel, insulated, and custom designs, based on your home and budget.","Confirmation of measurements and hardware needs, including springs sized for the new door's actual weight.","Removal of the old door and careful installation of the new one, including tracks, hardware, and weatherseal.","Opener compatibility check, since a new door's weight or thickness can affect how well your existing opener performs.","Balance and safety testing of the completed installation, including a full operational check.","A final walkthrough covering care, maintenance expectations, and anything else worth knowing about your new door."],repairVsReplacementHeading:"Repair Your Current Door or Install a New One?",repairVsReplacement:["Not every aging or damaged door needs full replacement. If the door is structurally sound and the issue is isolated — a spring, a panel, an opener — repair is usually the more cost-effective path.","Installation makes more sense when the door has multiple issues at once, has reached the end of its practical lifespan, or when you want meaningfully better insulation, security, or style than your current door can offer.","We'll walk through your specific door honestly, including the real cost comparison between continuing to repair it and replacing it outright."],safetyTips:["Do n
300ot attempt to install or remove a garage door yourself — doors and their hardware are heavy and involve high-tension components.","Make sure the installer sizes new springs specifically for the new door's weight, not the old door's specs.","Confirm your existing opener is rated for the new door's weight and thickness before assuming it will work as-is.","Keep the work area clear of children and pets during installation."],costHeading:"What Does a New Garage Door Cost?",costSection:["Installation cost depends on the door material, size, insulation level, style or custom features, and whether new opener hardware or springs are needed to support it.","Steel doors are generally the most budget-friendly option, while insulated, custom, and wood or wood-look doors cost more due to materials and construction.","We provide a free, no-obligation estimate based on your specific opening and preferences, so you have a clear number before deciding."],whyChooseIntro:"We're based in Tarzana and help homeowners choose a door that actually fits their home and budget — not just the first option on the showroom floor. Professional Garage Door Services is licensed, insured, and family owned, with free estimates on every installation.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Garage Door Opener Installation",path:"/garage-door-opener-installation"},{label:"Garage Door Maintenance",path:"/garage-door-maintenance"}],faqs:[{q:"How much does garage door installation cost?",a:"It depends on the material, size, insulation, and style you choose. We provide a free estimate based on your specific opening and preferences."},{q:"Do you install insulated garage doors?",a:"Yes, we offer insulated steel and other options for improved energy efficiency and noise reduction."},{q:"How long does garage door installation take?",a:"Most single-door installations take several hours; double doors or custom designs may take longer. We'll give you a time estimate when scheduling."},{q:"Will my existing opener work with a new garage door?",a:"It depends on the new door's weight and thickness. We check opener compatibility as part of the installation process."},{q:"Do I need a new garage door, or can mine be repaired?",a:"It depends on the door's condition and repair history. We'll give you an honest comparison so you can decide what makes sense."},{q:"Do you offer free estimates for garage door installation?",a:"Yes, every estimate is free and no-obligation."},{q:"What garage door materials do you install?",a:"We install steel, insulated steel, and custom-design doors, including wood-look and carriage-style options."},{q:"Can you replace just a damaged panel instead of the whole door?",a:"In many cases yes, if the rest of the door is in good condition. We'll let you know honestly if a full replacement makes more sense."},{q:"Do you install garage doors outside of Tarzana?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — garage door installation based in Tarzana, with free estimates on every job."},"emergency-garage-door-repair":{slug:"emergency-garage-door-repair",serviceName:"Emergency Garage Door Repair",metaTitle:"Emergency Garage Door Repair | 24-Hour Service | Tarzana",metaDescription:"Garage door stuck open or won't close? 24-hour emergency garage door repair based in Tarzana. Licensed, insured. Call (888) 285-4021 now.",h1:"Emergency Garage Door Repair",heroTagline:"Licensed, insured, and family owned — 24-hour emergency garage door repair based in Tarzana.",intro:["A garage door that's stuck wide open in the middle of the night, a spring that snapped without warning, or a door that suddenly won't close and secure your home — these situations don't wait for business hours, and neither do we.","Professional Garage Door Services is based in Tarzana and provides 24-hour emergency garage door repair throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned.","Call (888) 285-4
300021 any time, day or night, and we'll help you understand what's happening and what to do next."],overview:["Emergency garage door repair covers the situations where waiting isn't a reasonable option — a door that's stuck open and leaving your home exposed, a door stuck closed with a vehicle trapped inside, a spring or cable that's failed suddenly, or a door that's come off its track.","Not every garage door problem is an emergency. A squeaky hinge or a slow opener can usually wait for a scheduled appointment. But a security gap, a safety hazard, or a completely inoperable door in an urgent moment is exactly what 24-hour service is meant for.","The goal in an emergency isn't to force a fix — it's to stabilize the situation safely and get a technician out to properly diagnose and repair the actual problem, whether that happens within the hour or first thing the next morning depending on the situation."],problemsHeading:"Common Garage Door Emergencies",problems:[{title:"Garage door stuck open",notice:"The door won't close at all, leaving the garage and home exposed.",cause:"Broken spring or cable, an obstructed track, or an opener failure.",matters:"This is a security risk that's worth addressing as soon as possible, especially overnight."},{title:"Garage door stuck closed",notice:"The door won't open, potentially trapping a vehicle inside.",cause:"Similar causes to a stuck-open door — broken hardware or an opener malfunction.",matters:"Beyond inconvenience, this can affect your ability to leave for work, school, or an emergency."},{title:"Spring broke suddenly",notice:"A loud bang, followed by a door that won't lift or feels extremely heavy.",cause:"Normal wear reaching the end of the spring's rated cycle life.",matters:"The door is unsafe to operate until the spring is replaced — avoid forcing it.",link:{label:"See garage door spring replacement",path:"/garage-door-spring-replacement"}},{title:"Cable snapped",notice:"A cable hanging loose, or the door hanging crooked on one side.",cause:"Cable wear, or a cable that's slipped due to another hardware failure.",matters:"A snapped cable can let the door drop unevenly — keep the area clear.",link:{label:"See garage door cable repair",path:"/garage-door-cable-repair"}},{title:"Door off track after an impact or hardware failure",notice:"The door binds, leans, or has visibly jumped its track.",cause:"A vehicle impact, broken cable, or roller failure.",matters:"An off-track door can fall or jam completely if operation continues — stop use immediately.",link:{label:"See off-track garage door repair",path:"/off-track-garage-door-repair"}},{title:"Door won't close and secure the home",notice:"The door reverses, stops partway, or won't respond to the close command.",cause:"Sensor misalignment, an obstruction, or an opener malfunction.",matters:"This leaves your home unsecured — worth prompt attention, especially overnight."}],processHeading:"What Happens When You Call for Emergency Service",processSteps:["A phone conversation to understand the situation — whether the door is stuck open or closed, any noises you heard, and any visible damage.","Guidance on immediate safety steps, like keeping people, pets, and vehicles clear of the door.","Scheduling based on the urgency of the situation and technician availability, including 24-hour dispatch when warranted.","An on-site inspection to confirm the actual cause, not just the visible symptom.","A clear explanation of repair options and pricing before any work begins.","The repair itself, followed by safety and balance testing to confirm the door is operating properly again."],repairVsReplacementHeading:"Temporary Fix or Full Repair?",repairVsReplacement:["In a true emergency, the priority is safely securing the door and stopping any further damage — not necessarily completing every possible repair in that first visit.","In many cases, the emergency repair (a new spring, a reconnected cable, a realigned track) is also the complete, permanent fix. In others, especially after an impact or a long-neglected door, a full inspection may reveal additional issues worth addressing.","We'll always tell you clearly whether what we've done is the full repair or a safe, functional fix with follow-up work recommended."],safetyTips:["Do n
300ot force a stuck door in either direction.","Keep people, pets, and vehicles away from a door that isn't operating normally.","Do not attempt to manually override a door with a broken spring or cable — it can drop unexpectedly.","If the door is stuck open overnight, avoid leaving valuables in the garage exposed until it's resolved.","Note whether the door is stuck open or closed and any unusual noises before calling — it helps us diagnose faster."],costHeading:"What Does Emergency Repair Cost?",costSection:["Emergency repair pricing depends on the same factors as standard repair — the specific issue, parts needed, and door size — though after-hours timing can be a factor for true overnight emergencies.","We'll always give you a clear price before starting work, even in an urgent situation, so there are no surprises.","Free estimates apply to emergency calls as well — you'll know the cost before committing to the repair."],whyChooseIntro:"We're based in Tarzana and available 24 hours for the situations that genuinely can't wait. Professional Garage Door Services is licensed, insured, and family owned, with clear pricing even for after-hours emergency calls.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Garage Door Spring Replacement",path:"/garage-door-spring-replacement"},{label:"Off-Track Garage Door Repair",path:"/off-track-garage-door-repair"}],faqs:[{q:"Do you offer 24-hour emergency garage door repair?",a:"Yes, we provide 24-hour service for urgent situations like a door stuck open, stuck closed, or a broken spring."},{q:"What counts as a garage door emergency?",a:"Situations like a door stuck open or closed, a suddenly broken spring or cable, or a door off its track are all things we treat as urgent."},{q:"How fast can you respond to an emergency garage door repair?",a:"Response depends on the situation and current scheduling — call (888) 285-4021 and we'll give you an honest timeframe rather than an overpromise."},{q:"My garage door is stuck open — is that dangerous?",a:"Yes, it's a security risk and worth addressing promptly, especially overnight."},{q:"My garage door won't close — what should I do?",a:"Check for an obvious obstruction near the sensors first. If it still won't close, avoid repeated attempts and call for an inspection."},{q:"Is emergency garage door repair more expensive?",a:"Pricing is based on the actual repair needed. We always give you a clear price before starting work, even for after-hours calls."},{q:"Can a broken spring be fixed as an emergency repair?",a:"Yes, broken springs are one of the most common emergency calls we handle."},{q:"Do you offer free estimates for emergency repairs?",a:"Yes, even emergency calls get a clear price before any work begins."},{q:"What should I do while waiting for emergency garage door repair?",a:"Keep people, pets, and vehicles clear of the door, and avoid trying to force it open or closed in the meantime."},{q:"Do you provide emergency service outside of Tarzana?",a:"Yes — we provide 24-hour service throughout Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — 24-hour emergency garage door repair based in Tarzana, serving the San Fernando Valley."},"off-track-garage-door-repair":{slug:"off-track-garage-door-repair",serviceName:"Off-Track Garage Door Repair",metaTitle:"Off-Track Garage Door Repair | Licensed & Insured | Tarzana",metaDescription:"Garage door off its track? Licensed, insured off-track repair based in Tarzana. Free estimates, 24-hour and same-day service. Call (888) 285-4021.",h1:"Off-Track Garage Door Repair",heroTagline:"Licensed, insured, and family owned — off-track garage door repair based in Tarzana.",intro:["A garage door that binds, leans, or visibly hangs crooked as it moves is usually a sign it's come off its track — one of the more visually obvious garage door problems, and one that shouldn't be ignored or forced.","Professional Garage Door Services is based in Tarzana and repairs off-track garage doors throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","24-hour service is available since an off-track door can quickly become unsafe to operate. Call (888) 285-4
300021 and we'll help you figure out the next step."],overview:["An off-track garage door is one where the rollers have come out of alignment with the metal tracks that guide the door's movement, causing it to bind, lean, or stop moving altogether.","This usually happens due to a broken cable, a worn or failed roller, an impact to the door, or a track that's become bent or obstructed. Sometimes it's gradual — a roller wearing down over time — and sometimes it's sudden, like a vehicle backing into the door.","An off-track door is more than a cosmetic problem. Continuing to operate a door in this condition can cause it to jump the track further, jam completely, or in more serious cases fall. It's one of the more common reasons a garage door repair call becomes urgent.","If your door is visibly crooked, binding as it moves, or has come out of the track on one or both sides, stop using it and call for an inspection rather than continuing to test it."],problemsHeading:"Signs Your Garage Door Is Off Track",problems:[{title:"Door leans or hangs crooked",notice:"One side of the door is visibly higher or lower than the other.",cause:"A roller or cable failure on one side, throwing off the door's alignment.",matters:"Continuing to operate an unevenly hanging door increases strain on the remaining hardware."},{title:"Door binds or sticks partway through movement",notice:"The door catches or stalls at a certain point rather than moving smoothly.",cause:"A roller has left the track, or the track itself is bent or obstructed.",matters:"Forcing it past the sticking point can cause further damage to the track or door panels."},{title:"Visible gap between roller and track",notice:"You can see the roller sitting outside the track's channel instead of inside it.",cause:"Impact damage, a broken cable, or long-term wear.",matters:"This confirms the door is off track and needs realignment before further use."},{title:"Loud scraping or grinding during movement",notice:"An unusual noise that wasn't present before, especially during opening or closing.",cause:"Metal-on-metal contact from a roller or track that's out of alignment.",matters:"This noise often signals the issue is actively getting worse with continued use."},{title:"Door came off track after a vehicle impact",notice:"Visible damage to a panel or track following contact with a vehicle.",cause:"Direct impact bending the track or dislodging rollers.",matters:"Impact damage often affects more than what's visible — a full inspection is worth it even if the door still moves."},{title:"Track appears bent or warped",notice:"Visible curvature or damage along the metal track itself.",cause:"Impact, age, or a door that's been forced while off track.",matters:"A bent track usually needs to be repaired or replaced before the door can operate safely again."}],processHeading:"What to Expect During an Off-Track Repair Visit",processSteps:["Inspection of the tracks, rollers, cables, and hinges to determine why the door came off track in the first place.","An assessment of whether the track itself is bent or simply misaligned, since this affects the repair approach.","Realignment or repair of the affected rollers and track sections.","Replacement of any worn or broken components — rollers, cables, or hinges — contributing to the issue.","Testing the door through its full range of motion to confirm it moves smoothly without binding.","A final explanation of what caused the issue and how to help prevent it from happening again."],repairVsReplacementHeading:"Can an Off-Track Door Be Repaired, or Does It Need Replacing?",repairVsReplacement:["Most off-track door issues are repairable — realigning the door, replacing a roller or cable, or straightening a track section usually resolves the problem without needing a new door.","Replacement becomes a consideration if the impact that caused the issue also damaged multiple panels significantly, or if the door was already old and due for an upgrade before this happened.","We'll assess the full extent of the damage and let you know honestly whether repair or replacement makes more sense for your specific situation."],safetyTips:["Do n
300ot attempt to force an off-track door back into position yourself.","Stop using the door entirely once you notice it binding, leaning, or visibly off track.","Keep people and vehicles clear of a door that's off track, since it can fall or jam unexpectedly.","If the door came off track after a vehicle impact, have it inspected even if it still appears to move."],costHeading:"What Does Off-Track Repair Cost?",costSection:["Cost depends on whether the fix is a simple realignment or involves replacing rollers, cables, or a damaged section of track.","Impact-related damage sometimes involves additional panel repair, which affects the overall price.","We provide a free estimate after inspecting the door, so you know the full cost before any work begins."],whyChooseIntro:"We're based in Tarzana and treat off-track doors as the safety issue they are — not just a quick push back into place. Professional Garage Door Services is licensed, insured, and family owned, with free estimates and 24-hour service available.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Garage Door Cable Repair",path:"/garage-door-cable-repair"},{label:"Emergency Garage Door Repair",path:"/emergency-garage-door-repair"}],faqs:[{q:"How much does off-track garage door repair cost?",a:"It depends on whether the fix is a simple realignment or requires new rollers, cables, or track sections. We give you an exact price after inspecting the door."},{q:"Is it safe to use a garage door that's off track?",a:"No. Continuing to operate an off-track door can cause it to jump the track further or fall. Stop using it until it's repaired."},{q:"Can I push my garage door back onto its track myself?",a:"We don't recommend it. Off-track doors are often under tension from cables or springs, and attempting this yourself can be dangerous."},{q:"What causes a garage door to come off track?",a:"Common causes include a broken cable, a worn or failed roller, a vehicle impact, or a bent track."},{q:"Can an off-track door be fixed, or do I need a new door?",a:"Most off-track issues are repairable. Replacement is only necessary if there's significant additional damage."},{q:"Do you offer same-day off-track garage door repair?",a:"Often yes — same-day service is available when scheduling allows. Call (888) 285-4021 to check."},{q:"Do you offer 24-hour service for an off-track door?",a:"Yes, since an off-track door can be a safety hazard, 24-hour service is available."},{q:"Will my garage door track need to be replaced?",a:"Only if it's bent or damaged beyond simple realignment. We'll assess it honestly during the inspection."},{q:"Do you serve areas outside of Tarzana for off-track repair?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — off-track garage door repair based in Tarzana, with free estimates and 24-hour service available."},"garage-door-cable-repair":{slug:"garage-door-cable-repair",serviceName:"Garage Door Cable Repair",metaTitle:"Garage Door Cable Repair | Licensed & Insured | Tarzana",metaDescription:"Snapped or frayed garage door cable? Licensed, insured cable repair based in Tarzana. Free estimates, 24-hour service. Call (888) 285-4021.",h1:"Garage Door Cable Repair",heroTagline:"Licensed, insured, and family owned — garage door cable repair based in Tarzana.",intro:["A garage door hanging crooked on one side, or a cable you can see hanging loose near the bottom rollers, usually means a cable has slipped, frayed, or snapped — a repair that needs the right tools and shouldn't be attempted casually.","Professional Garage Door Services is based in Tarzana and repairs garage door cables throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","24-hour service is available since a broken cable c
300an leave a door hanging unevenly or unsafe to operate. Call (888) 285-4021 for help."],overview:["Garage door cables work alongside the springs to safely control the door's movement and support its weight, particularly on the way down. They run from the bottom corners of the door up to the spring system near the top of the tracks.","Cable repair covers replacing cables that have frayed, stretched, slipped off their drum, or snapped outright — usually due to wear over time, though sometimes a sudden failure follows a spring issue or impact damage.","Cable problems matter because a compromised cable changes how evenly and safely the door moves. A door that hangs crooked or drops unevenly on one side is often a cable issue, and it puts additional strain on the remaining hardware.","If you notice a loose or hanging cable, a door that closes unevenly, or visible fraying near the bottom rollers, stop using the door and have it inspected rather than continuing to operate it."],problemsHeading:"Signs of Cable Trouble",problems:[{title:"Visibly loose or hanging cable",notice:"A cable that's no longer taut, hanging near the bottom rollers instead of running tight to the drum.",cause:"The cable has slipped off its drum or snapped.",matters:"The door may not be properly supported on that side — avoid operating it until it's inspected."},{title:"Door hangs crooked or closes unevenly",notice:"One side of the door sits lower than the other, especially when closed.",cause:"A cable failure on one side, changing how the door's weight is distributed.",matters:"This uneven strain can accelerate wear on the opposite side's hardware."},{title:"Frayed cable strands visible",notice:"Small, wire-like strands visibly separating from the main cable.",cause:"Wear over time from repeated use, or rust and corrosion.",matters:"A fraying cable is a sign of imminent failure — better to replace before it snaps."},{title:"Door dropped suddenly on one side",notice:"A sudden, uneven drop rather than a smooth, level close.",cause:"A cable has failed completely.",matters:"This is unsafe to continue operating — keep the area clear and call for repair."},{title:"Cable came off the drum but hasn't snapped",notice:"Visible slack in the cable, though it appears otherwise intact.",cause:"Often related to a spring issue, impact, or the drum itself being damaged.",matters:"Even without a full break, a cable off its drum means the door isn't properly supported."}],processHeading:"What to Expect During a Cable Repair Visit",processSteps:["Inspection of both cables, drums, and the related spring system, since cable issues are often connected to spring condition.","Assessment of whether one or both cables need replacement, and whether the drums themselves are in good condition.","Cable replacement using parts rated for your door's specific weight.","Balance testing to confirm the door moves evenly and holds position correctly after the repair.","A check of related hardware — rollers, hinges, tracks — since a cable failure sometimes causes secondary wear.","A final explanation of what was repaired and what to watch for going forward."],repairVsReplacementHeading:"Cable Repair or Full Hardware Replacement?",repairVsReplacement:["In most cases, cable repair is a contained fix — replacing the affected cable (and often both, for even wear) restores normal, safe operation.","Broader hardware replacement becomes worth considering if the cable failure caused damage to the drums, track, or panels, or if the door's overall hardware is old enough that other failures are likely soon.","We'll let you know clearly if we see signs of broader wear beyond the cable itself."],safetyTips:["Do not attempt to replace garage door cables yourself — they work under tension alongside the springs.","Keep the area clear of people and vehicles if you notice a loose or broken cable.","Avoid operating the door if it's hanging unevenly or you can see a hanging cable.","Don't attempt to manually force the door level if a cable has failed."],costHeading:"What Does Cable Repair Cost?",costSection:["Cable repair cost depends on whether one or both cables need replacing, the condition of the drums, and whether related hardware needs attention at the same time.","Larger or custom doors may require heavier-duty cables, which can affect the price.","We provide a free estimate after inspecting the door, so you know the cost upfront."],whyChooseIntro:"We're based in Tarzana and repair garage door cables safely and correctly, checking related hardware so you're not back with the same problem months later. Professional Garage Door Services is licensed, insured, and family owned, with free estimates and 24-hour service available.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Garage Door Spring Replacement",path:"/garage-door-spring-replacement"},{label:"Off-Track Garage Door Repair",path:"/off-track-garage-door-repair"}],faqs:[{q:"How much does garage door cable repair cost?",a:"It depends on whether one or both cables need replacing and the condition of the related hardware. We give you an exact price after inspecting the door."},{q:"Is it safe to use my garage door with a broken cable?",a:"No. A broken cable means the door isn't evenly supported and can drop unexpectedly. Avoid using it until it's repaired."},{q:"What causes a garage door cable to snap?",a:"Most commonly wear over time, corrosion, or strain from a related spring issue."},{q:"Can I replace a garage door cable myself?",a:"We don't recommend it. Cables work under tension alongside the springs and require the right tools and experience to replace safely."},{q:"Do you offer same-day cable repair?",a:"Often yes — same-day service is available when scheduling allows. 
300Call (888) 285-4021 to check."},{q:"Do you offer 24-hour service for a broken cable?",a:"Yes, since a broken cable can leave a door unevenly supported or unsafe, 24-hour service is available."},{q:"Why is my garage door hanging crooked?",a:"This is a common sign of a cable failure on one side of the door, changing how its weight is supported."},{q:"Will I need both cables replaced, or just the broken one?",a:"It depends on the condition of the other cable. We often recommend replacing both for even wear, but we'll assess and advise honestly."},{q:"Do you serve areas outside of Tarzana for cable repair?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — garage door cable repair based in Tarzana, with free estimates and 24-hour service available."},"garage-door-opener-installation":{slug:"garage-door-opener-installation",serviceName:"Garage Door Opener Installation",metaTitle:"Garage Door Opener Installation | Smart Openers | Tarzana",metaDescription:"New garage door opener installation based in Tarzana. Licensed, insured, free estimates. Smart Wi-Fi openers available. Call (888) 285-4021.",h1:"Garage Door Opener Installation",heroTagline:"Licensed, insured, and family owned — garage door opener installation based in Tarzana.",intro:["Whether your current opener has finally reached the end of its life or you're ready for features like battery backup and smartphone control, installing a new garage door opener is a straightforward upgrade that makes a noticeable difference in daily use.","Professional Garage Door Services is based in Tarzana and installs garage door openers throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","Call (888) 285-4021 for a free quote on a new opener, including standard and smart Wi-Fi-enabled models."],overview:["Garage door opener installation involves removing an old or failing opener and installing a new motor unit, along with the rail, trolley, safety sensors, wall control, and remotes — all configured and tested to work correctly with your specific door.","Homeowners typically consider a new opener when the current one has failed repeatedly, has become unreliable, lacks a battery backup for power outages, or simply doesn't offer the convenience features available on newer models, like smartphone app control or quieter belt-drive operation.","A properly installed opener matters for daily reliability and safety — it needs to be correctly matched to your door's weight, with sensors and auto-reverse properly calibrated.","If your opener is old, unreliable, or you simply want more modern features, it's worth getting a straightforward installation estimate."],problemsHeading:"Signs It's Time for a New Opener",problems:[{title:"Opener has failed multiple times",notice:"Repeated repairs or breakdowns over a short period.",cause:"An aging motor or circuit board reaching the end of its practical service life.",matters:"At some point, continued repairs cost more than simply installing a new, reliable unit."},{title:"No battery backup during power outages",notice:"The garage door becomes inoperable by opener during an outage.",cause:"Many older openers don't include a battery backup feature that newer models offer standard.",matters:"A battery backup keeps the door usable during outages — a meaningful convenience and safety factor."},{title:"Opener lacks smartphone or Wi-Fi connectivity",notice:"No way to check or control the door remotely.",cause:"Older opener models predate smart home connectivity features.",matters:"Newer openers let you confirm the door is closed from anywhere, reducing worry and unnecessary trips home."},{title:"Opener is excessively loud",notice:"Chain-drive noise that disrupts nearby living spaces.",cause:"Older chain-drive designs are inherently louder than modern belt-drive units.",matters:"A belt-drive replacement can significantly reduce noise, especially important for garages near bedrooms."},{title:"Opener isn't rated for a new, heavier door",notice:"Straining, slow operation, or premature failure after a door replacement.",cause:"An opener sized for the old door may not be adequate for a new, heavier one.",matters:"Installing an opener matched to the new door's actual weight prevents ongoing strain and failure."}],processHeading:"What to Expect During an Opener Installation",processSteps:["A conversation about your priorities — reliability, noise level, smart features, or battery backup — to recommend the right opener.","Confirmation that the chosen opener is rated for your door's weight and size.","Removal of the old unit and installation of the new motor, rail, and trolley system.","Setup and alignment of safety sensors, wall control, and remotes.","Programming of smart features if applicable, including smartphone app connectivity.","Full safety testing, including the auto-reverse feature, before considering the job c
300omplete.","A final walkthrough covering how to use any new features and what to expect going forward."],repairVsReplacementHeading:"Repair Your Old Opener or Install a New One?",repairVsReplacement:["If your current opener has an isolated issue — a sensor, a remote, a minor part — repair is usually the more cost-effective choice.","Installation makes more sense when the opener has failed repeatedly, is old enough that parts are hard to find, or when you want features it simply doesn't offer, like battery backup or quieter belt-drive operation.","We'll give you an honest comparison of repair versus replacement cost for your specific opener before you decide."],safetyTips:["Do not attempt to install a garage door opener yourself — improper installation can affect the safety reverse system.","Make sure any new opener is rated for your door's actual weight, not just a generic estimate.","Test the auto-reverse safety feature after any opener installation before regular use.","Keep the opener's wall control and remotes out of reach of young children."],costHeading:"What Does Opener Installation Cost?",costSection:["Cost depends on the opener model — standard chain-drive units are generally more affordable, while belt-drive and smart Wi-Fi-enabled models cost more.","Additional factors include whether new wiring, sensors, or a wall control are needed, and your door's weight and size.","We provide a free estimate based on your door and preferences, so you know the cost before deciding."],whyChooseIntro:"We're based in Tarzana and help homeowners choose an opener that actually fits how they use their garage — not just the most expensive option. Professional Garage Door Services is licensed, insured, and family owned, with free estimates on every installation.",relatedServices:[{label:"Garage Door Opener Repair",path:"/garage-door-opener-repair"},{label:"Garage Door Installation",path:"/garage-door-installation"},{label:"Garage Door Repair",path:"/garage-door-repair"}],faqs:[{q:"How much does garage door opener installation cost?",a:"It depends on the opener model and any additional wiring or hardware needed. We provide a free estimate based on your specific setup."},{q:"Do you install smart Wi-Fi garage door openers?",a:"Yes, we install smart, smartphone-connected openers where compatible with your door."},{q:"What's the difference between chain-drive and belt-drive openers?",a:"Chain-drive openers are generally more affordable but louder. Belt-drive openers cost more but run much quieter, which matters for garages near living spaces."},{q:"Will a new opener work with my current garage door?",a:"In most cases yes, as long as the opener is rated for your door's weight. We confirm this during installation."},{q:"Do new openers include battery backup?",a:"Many modern openers include battery backup as a standard or available feature, keeping your door usable during power outages."},{q:"How long does opener installation take?",a:"Most opener installations can be completed in a single visit, typically within a few hours."},{q:"Should I repair my current opener or install a new one?",a:"It depends on the opener's age, reliability, and what features you want. We'll give you an honest comparison."},{q:"Do you offer free estimates for opener installation?",a:"Yes, every estimate is free and no-obligation."},{q:"Do you install openers outside of Tarzana?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — garage door opener installation based in Tarzana, with free estimates on every job."},"garage-door-maintenance":{slug:"garage-door-maintenance",serviceName:"Garage Door Maintenance",metaTitle:"Garage Door Maintenance & Tune-Up | Licensed & Insured",metaDescription:"Garage door maintenance and tune-up service based in Tarzana. Licensed, insured, free estimates. Prevent costly repairs. Call (888) 285-4021.",h1:"Garage Door Maintenance & Tune-Up",heroTagline:"Licensed, insured, and family owned — garage door maintenance based in Tarzana.",intro:["A little attention once a year can catch small issues — a loosening bolt, a drying-out hinge, a spring nearing the end of its life — before they turn into a stuck door or an emergency call.","Professional Garage Door Services is based in Tarzana and provides garage door maintenance and tune-ups throughout the San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, and Calabasas. We're licensed, insured, and family owned, and every estimate is free.","Call (888) 285-4
300021 to schedule a tune-up or ask about what a maintenance visit includes for your specific door."],overview:["Garage door maintenance is a preventive inspection and tune-up covering the springs, cables, rollers, hinges, tracks, and opener, including lubrication of moving parts and a check of the safety reverse feature.","Unlike a repair, which addresses something that's already gone wrong, maintenance is about catching wear early — before a worn roller becomes a stuck door, or a weakening spring fails without warning.","Regular maintenance matters because a garage door has more moving, wearing parts than most homeowners realize, and many of them affect both daily function and safety. A door that's properly maintained also tends to run quieter and put less strain on the opener.","Even a well-functioning door benefits from a yearly check — small adjustments now are almost always cheaper and easier than a breakdown later."],problemsHeading:"Signs Your Garage Door Needs a Tune-Up",problems:[{title:"It's been over a year since the last inspection",notice:"No specific complaint, just time passing.",cause:"Normal wear accumulates gradually and isn't always obvious day to day.",matters:"An annual check catches developing issues before they become failures."},{title:"Door is louder than it used to be",notice:"Gradual increase in squeaking, popping, or rattling during operation.",cause:"Dry hinges, loosening hardware, or rollers starting to wear.",matters:"Often resolved with lubrication and minor adjustments if caught early."},{title:"Door feels slightly heavier or slower",notice:"A subtle change in how easily the door moves, not yet a major issue.",cause:"Early spring wear or accumulating friction in the tracks and rollers.",matters:"Catching this early can prevent a sudden spring failure down the road."},{title:"Visible wear on rollers or hinges",notice:"Rust, cracking, or flattened spots on rollers, or hinges that look worn.",cause:"Normal wear and tear from repeated use over time.",matters:"Proactive replacement is cheaper and simpler than an emergency repair after failure."},{title:"Auto-reverse safety feature hasn't been tested recently",notice:"No specific symptom, but no recent confirmation the safety feature works correctly.",cause:"Sensor alignment can drift slightly over time, or settings can shift.",matters:"This is a core safety feature — worth confirming it's working as intended periodically."}],processHeading:"What's Included in a Maintenance Visit",processSteps:["Full inspection of springs, cables, rollers, hinges, tracks, and weatherstripping.","Lubrication of moving parts to reduce friction and noise.","Tightening of loose hardware, including brackets and bolts.","Balance testing of the door to catch early spring wear.","Testing of the opener's auto-reverse safety feature and sensor alignment.","A clear rundown of anything worth watching or addressing soon, even if it doesn't need attention today."],repairVsReplacementHeading:"Tune-Up or Repair — What's the Difference?",repairVsReplacement:["A maintenance visit is preventive — it's meant to catch and address minor wear before it becomes a bigger problem, not to fix something that's already broken.","If we find something during a tune-up that needs more than routine maintenance — a spring nearing failure, a worn cable, a damaged panel — we'll explain it clearly and give you a separate repair estimate rather than assuming you want it done on the spot.","Regular maintenance can meaningfully reduce how often you need an actual repair call, which is the main value of staying on top of it."],safetyTips:["Don't skip testing the auto-reverse safety feature periodically — place a roll of paper towels in the door's path and confirm it reverses on contact.","Keep the tracks clear of dirt and debris that can accelerate wear.","Avoid lubricating springs or cables yourself with the wrong products — some lubricants can actually accelerate wear on certain components.","If you notice new noise or resistance between sc
300heduled visits, don't wait for the next appointment if it seems to be getting worse quickly."],costHeading:"What Does Maintenance Cost?",costSection:["Maintenance visits are generally more affordable than repairs, since they're preventive rather than corrective.","Cost can vary slightly based on door size and whether any minor parts (like a single roller or hinge) are replaced during the visit.","We provide a free estimate before scheduling, so you know what a tune-up will cost for your specific door."],whyChooseIntro:"We're based in Tarzana and treat maintenance as a genuine opportunity to prevent future repair calls, not just a quick once-over. Professional Garage Door Services is licensed, insured, and family owned, with free estimates on every visit.",relatedServices:[{label:"Garage Door Repair",path:"/garage-door-repair"},{label:"Garage Door Spring Replacement",path:"/garage-door-spring-replacement"},{label:"Garage Door Opener Repair",path:"/garage-door-opener-repair"}],faqs:[{q:"How much does a garage door tune-up cost?",a:"Maintenance visits are generally more affordable than repairs. We give you a free estimate before scheduling based on your door."},{q:"How often should I get my garage door serviced?",a:"We recommend a professional tune-up about once a year to catch wear before it becomes a bigger issue."},{q:"What's included in a garage door maintenance visit?",a:"A full inspection of springs, cables, rollers, hinges, and tracks, lubrication of moving parts, hardware tightening, and safety testing of the opener."},{q:"Can maintenance prevent a broken spring?",a:"Regular maintenance can catch a weakening spring before it fails completely, though springs do eventually reach the end of their rated lifespan regardless."},{q:"Does maintenance include opener testing?",a:"Yes, we test the opener's auto-reverse safety feature and sensor alignment as part of a maintenance visit."},{q:"Will you tell me if something needs an actual repair during maintenance?",a:"Yes, if we find something that needs more than routine maintenance, we'll explain it clearly and provide a separate estimate."},{q:"Is garage door maintenance worth it if my door seems fine?",a:"Yes — many issues develop gradually and aren't obvious until something fails. A yearly check catches wear early, when it's cheaper and easier to address."},{q:"Do you offer free estimates for maintenance visits?",a:"Yes, every estimate is free and no-obligation."},{q:"Do you offer maintenance service outside of Tarzana?",a:"Yes — we regularly serve Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby areas."}],finalCtaTagline:"Licensed, insured, and family owned — garage door maintenance based in Tarzana, with free estimates on every visit."}},hu="https://www.professionalgaragedoorservices.com",hD=["Tarzana","Encino","Woodland Hills","Reseda","Sherman Oaks","Van Nuys","Winnetka","Studio City","Northridge","Canoga Park","Calabasas"],Cr=({serviceSlug:e})=>{const t=Sp(),r=e??t.serviceSlug,n=r?uD[r]:void 0;if(!n)return a.jsx(Np,{to:"/404",replace:!0});const o=`${hu}/${n.slug}`;return a.jsxs("div",{className:"min-h-screen",children:[a.jsxs(ie,{children:[a.jsx("title",{children:n.metaTitle}),a.jsx("meta",{name:"description",content:n.metaDescription}),a.jsx("link",{rel:"canonical",href:o}),a.jsx("meta",{property:"og:title",content:n.metaTitle}),a.jsx("meta",{property:"og:description",content:n.metaDescription}),a.jsx("meta",{property:"og:url",content:o}),a.jsx("meta",{property:"og:type",content:"website"}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"Service",serviceType:n.serviceName,provider:{"@type":"HomeAndConstructionBusiness",name:"Professional Garage Door Services",url:hu,telephone:"888-285-4021",address:{"@type":"PostalAddress",streetAddress:"5665 Wilbur Avenue",addressLocality:"Tarzana",addressRegion:"CA",postalCode:"91356",addressCountry:"US"}},areaServed:hD})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:n.faqs.map(s=>
300({"@type":"Question",name:s.q,acceptedAnswer:{"@type":"Answer",text:s.a}}))})}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:hu},{"@type":"ListItem",position:2,name:n.serviceName,item:o}]})})]}),a.jsx(de,{}),a.jsxs("main",{className:"pt-20",children:[a.jsx("section",{className:"bg-secondary py-16",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h1",{className:"font-heading text-4xl md:text-5xl text-secondary-foreground mb-4",children:n.h1}),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:n.heroTagline}),a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})})]})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-3xl mx-auto space-y-4 text-muted-foreground leading-relaxed",children:n.intro.map((s,i)=>a.jsx("p",{children:s},i))})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6 text-center",children:n.overviewHeading||`What Is ${n.serviceName}?`}),a.jsx("div",{className:"space-y-4 text-muted-foreground leading-relaxed",children:n.overview.map((s,i)=>a.jsx("p",{children:s},i))})]})})}),a.jsx("section",{className:"py-8 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto",children:a.jsx("img",{src:Sc,alt:`Technician inspecting a garage door for ${n.serviceName.toLowerCase()}`,className:"rounded-xl shadow-card w-full h-72 object-cover",loading:"lazy"})})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:n.problemsHeading||"Common Problems We Fix"}),a.jsx("p",{className:"text-muted-foreground text-center mb-8 max-w-2xl mx-auto",children:n.problemsIntro||"Not sure what's wrong? Here's a guide to what you might be noticing — but if in doubt, stop using the door and call us before it gets worse."}),a.jsx("div",{className:"grid md:grid-cols-2 gap-6",children:n.problems.map(s=>a.jsxs("div",{className:"bg-card rounded-xl p-6 border border-border shadow-card",children:[a.jsx("p",{className:"font-heading text-lg text-foreground mb-2",children:s.title}),a.jsxs("p",{className:"text-muted-foreground text-sm mb-2",children:[a.jsx("span",{className:"font-semibold text-foreground",children:"You may notice:"})," ",s.notice]}),a.jsxs("p",{className:"text-muted-foreground text-sm mb-2",children:[a.jsx("span",{className:"font-semibold text-foreground",children:"Likely cause:"})," ",s.cause]}),a.jsxs("p",{className:"text-muted-foreground text-sm mb-2",children:[a.jsx("span",{className:"font-semibold text-foreground",children:"Why it matters:"})," ",s.matters]}),s.link&&a.jsxs(A,{to:s.link.path,className:"inline-flex items-center gap-1 text-primary text-sm font-semibold hover:underline mt-1",children:[s.link.label," ",a.jsx(la,{className:"w-3.5 h-3.5"})]})]},s.title))}),a.jsxs("div",{className:"mt-8 bg-primary/5 border border-primary/20 rounded-xl p-6 flex items-start gap-4",children:[a.jsx(qo,{className:"w-6 h-6 text-primary flex-shrink-0 mt-1"}),a.jsx("p",{className:"text-muted-foreground text-sm",children:"If your door feels unusually heavy, won't stay open, or you see a broken spring or cable, stop using it and keep people and pets clear. A professional inspection is the safer path."})]})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 items-center",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:n.processHeading||"What to Expect During a Repair Visit"}),a.jsx("p",{className:"text-muted-foreground mb-4 leading-relaxed",children:"Every door and issue is different, but a typical visit includes:"}),a.jsx("ul",{className:"space-y-3",children:n.processSteps.map((s,i)=>a.jsxs("li",{className:"flex items-start gap-3",children:[a.jsx(fa,{className:"w-5 h-5 text-primary flex-shrink-0 mt-0.5"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:s})]},i))})]}),a.jsx("img",{src:Kk,alt:"Technician performing a garage door hardware repair",className:"rounded-xl shadow-card w-full h-72 object-cover",loading:"lazy"})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:n.repairVsReplacementHeading||"Repair vs. Replacement"}),a.jsx("div",{className:"space-y-4 text-muted-foreground leading-relaxed",children:n.repairVsReplacement.map((s,i)=>a.jsx("p",{children:s},i))})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-6 text-center",children:"Safety Comes First"}),a.jsx("ul",{className:"space-y-3",children:n.safetyTips.map((s,i)=>a.jsxs("li",{className:"flex items-start gap-3",children:[a.jsx(qo,{className:"w-5 h-5 text-primary flex-shrink-0 mt-0.5"}),a.jsx("span",{className:"text-muted-foreground",children:s})]},i))})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4 text-center",children:n.costHeading||"What Does It Cost?"}),a.jsx("div",{className:"space-y-4 text-muted-foreground leading-relaxed",children:n.costSection.map((s,i)=>a.jsx("p",{children:s},i))})]})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Why Homeowners Choose Professional Garage Door Services"}),a.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-8",children:[a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(at,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Licensed & Insured"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(zo,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Family Owned"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fe,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"24-Hour Service"})]}),a.jsxs("div",{className:"bg-card rounded-xl p-4 text-center border border-border",children:[a.jsx(fa,{className:"w-7 h-7 text-primary mx-auto mb-2"}),a.jsx("p",{className:"text-foreground font-bold text-sm",children:"Free Estimates"})]})]}),a.jsx("p",{className:"text-muted-foreground leading-relaxed max-w-3xl mx-auto text-center",children:n.whyChooseIntro})]})})}),a.jsx("section",{className:"py-16 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto text-center",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-4",children:"Areas We Serve"}),a.jsxs("p",{className:"text-muted-foreground leading-relaxed mb-4",children:["Professional Garage Door Services is based in Tarzana and provides ",n.serviceName.toLowerCase()," throughout the surrounding San Fernando Valley, including Encino, Woodland Hills, Reseda, Sherman Oaks, Van Nuys, Winnetka, Studio City, Northridge, Canoga Park, Calabasas, and nearby communities."]}),a.jsxs("p",{className:"text-muted-foreground leading-relaxed",children:["Want details specific to your area? Visit our"," ",a.jsx(A,{to:"/garage-door-repair-tarzana",className:"text-primary hover:underline font-semibold",children:"Tarzana"}),","," ",a.jsx(A,{to:"/garage-door-repair-encino",className:"text-primary hover:underline font-semibold",children:"Encino"}),", or"," ",a.jsx(A,{to:"/garage-door-repair-woodland-hills",className:"text-primary hover:underline font-semibold",children:"Woodland Hills"})," ","pages, or"," ",a.jsx(A,{to:"/contact",className:"text-primary hover:underline font-semibold",children:"contact us"})," for your specific location."]}),a.jsxs("p",{className:"text-muted-foreground leading-relaxed mt-4",children:["We also serve homeowners in"," ",a.jsx(A,{to:"/service-areas/san-diego-garage-door-repair",className:"text-primary hover:underline font-semibold",children:"San Diego, CA"})," ","as a service-area location."]})]})})}),n.relatedServices&&n.relatedServices.length>0&&a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-4xl mx-auto text-center",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8",children:"Related Services"}),a.jsx("div",{className:"grid sm:grid-cols-2 md:grid-cols-3 gap-4",children:n.relatedServices.map(s=>a.jsxs(A,{to:s.path,className:"bg-card rounded-xl p-5 border border-border shadow-card hover:border-primary transition-colors flex items-center justify-between gap-2 text-left",children:[a.jsx("span",{className:"text-foreground font-semibold",children:s.label}),a.jsx(la,{className:"w-4 h-4 text-primary flex-shrink-0"})]},s.path))})]})})}),a.jsx("section",{className:"py-8 bg-background",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsx("div",{className:"max-w-4xl mx-auto",children:a.jsx("img",{src:Jk,alt:"Professional Garage Door Services branded service vehicle",className:"rounded-xl shadow-card w-full h-64 object-cover",loading:"lazy"})})})}),a.jsx("section",{className:"py-16 bg-muted/30",children:a.jsx("div",{className:"container mx-auto px-4",children:a.jsxs("div",{className:"max-w-3xl mx-auto",children:[a.jsx("h2",{className:"font-heading text-3xl text-foreground mb-8 text-center",children:"Frequently Asked Questions"}),a.jsx(Ni,{type:"single",collapsible:!0,className:"space-y-4",children:n.faqs.map((s,i)=>a.jsxs(ns,{value:`faq-${i}`,className:"bg-card rounded-xl border border-border px-6 shadow-card",children:[a.jsx(as,{className:"text-foreground font-semibold text-left hover:text-primary",children:s.q}),a.jsx(os,{className:"text-muted-foreground leading-relaxed",children:s.a})]},i))})]})})}),a.jsx("section",{className:"py-16 bg-secondary",children:a.jsxs("div",{className:"container mx-auto px-4 text-center",children:[a.jsx("h2",{className:"font-heading text-3xl md:text-4xl text-secondary-foreground mb-4",children:"Ready to Get Your Garage Door Fixed?"}
300),a.jsx("p",{className:"text-secondary-foreground/80 text-lg max-w-2xl mx-auto mb-6",children:n.finalCtaTagline}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[a.jsx("a",{href:"tel:+18882854021",children:a.jsxs(re,{variant:"hero",size:"xl",className:"gap-2 w-full sm:w-auto",children:[a.jsx(et,{className:"w-5 h-5"})," Call (888) 285-4021"]})}),a.jsx(A,{to:"/contact",children:a.jsx(re,{variant:"outline",size:"xl",className:"w-full sm:w-auto",children:"Request a Free Estimate"})})]})]})})]}),a.jsx(ue,{}),a.jsx(sr,{})]})},mD=()=>{const e=Dn();return b.useEffect(()=>{console.error("404 Error: User attempted to access non-existent route:",e.pathname)},[e.pathname]),a.jsx("div",{className:"flex min-h-screen items-center justify-center bg-muted",children:a.jsxs("div",{className:"text-center",children:[a.jsx("h1",{className:"mb-4 text-4xl font-bold",children:"404"}),a.jsx("p",{className:"mb-4 text-xl text-muted-foreground",children:"Oops! Page not found"}),a.jsx("a",{href:"/",className:"text-primary underline hover:text-primary/90",children:"Return to Home"})]})})},pD=()=>{const{pathname:e}=Dn();return b.useEffect(()=>{window.scrollTo(0,0)},[e]),null},fD="/assets/2420L_1BEN_LM_1-285c35-20LpH6GX.webp",gD="/assets/6690L_LM1-30e575-HldEC16O.webp",yD="/assets/98022-RJO-w-accessories-1200x1200-4347a6-BrJT50RI.webp",vD="/assets/98032MC_b2c_hero_1-7682e5-DSOfQshP.webp",wD="/assets/Chamberlain-Belt-Drive--ad1f16-CXUFm-qH.webp",xD="/assets/Chamberlain-Chain-Drive--fc77e6-9RF1rly-.webp",yj=[".207",".218",".225",".234",".243",".250",".262",".273",".283",".295",".306"],vj=['1.75"','2.00"','2.25"','2.625"'],wj=['20"','22"','24"','26"','28"','30"','32"','34"','36"','38"','40"'],xj=["Single spring","Pair of springs"],bj=1256.74,bD=1654.25,md=bD-bj,kD=md*.45,jD=md*.2,SD=md*.2,ND=md*.15;function CD(e,t,r,n){const o=e/(yj.length-1),s=t/(vj.length-1),i=r/(wj.length-1),l=n/(xj.length-1),c=bj+o*kD+s*jD+i*SD+l*ND;return Math.round(c*100)/100}const By=[{name:"LiftMaster Smart Chain Drive",model:"2420L or current equivalent",positioningLabel:"Premium Entry",bestFor:"Standard residential doors where smart features and dependable operation matter",features:["3/4 HPs class where applicable","Battery backup","myQ smart control","Built-in camera where applicable","Strong chain-drive operation"],price:1675,image:fD},{name:"LiftMaster Heavy-Duty Belt Drive",model:"6690L or current equivalent",positioningLabel:"Best Premium Value",bestFor:"Homeowners who want quieter operation, stronger performance, and a more refined opener",features:["1-1/4 HPs class where applicable","Battery backup","myQ smart control","Quiet belt-drive operation","Strong upgrade for frequent-use doors"],price:2175,highlight:!0,image:gD},{name:"LiftMaster Wall Mount",model:"98022 or current equivalent",positioningLabel:"Wall-Mount Premium",bestFor:"Garages where ceiling space, clean layout, and premium wall-mounted design matter",features:["Wall-mount design","Battery backup","Wi-Fi / myQ smart control","Frees overhead ceiling space","Premium clean-garage appearance"],price:3275,image:yD},{name:"LiftMaster Heavy-Duty Wall Mount",model:"98032 or current equivalent",positioningLabel:"Ultimate Wall-Mount",bestFor:"Larger, taller, or heavier residential doors where compatible",features:["Heavy-duty wall-mount operation","Battery backup","Wi-Fi / myQ smart control","Remote LED lighting where applicable","Premium heavy-duty performance"],price:3975,image:vD}],TD=[{name:"Chamberlain Belt Drive Value Option",model:"Current stocked belt-drive 1/2 HP class equivalent",positioningLabel:"Alternative Value Option",bestFor:"Standard residential doors where quieter operation matters",features:["Belt-drive operation","1/2 HP class where applicable","Smart control where applicable","Safety sensor system","Practical daily-use option"],price:1355,image:wD},{name:"Chamberlain Chain Drive Value Option",model:"Current stocked chain-drive 1/2 HP class equivalent",positioningLabel:"Alternative Value Option",bestFor:"Standard residential doors where basic dependable operation matters",features:["Chain-drive operation","1/2 HP class where applicable","Safety sensor system","Simple dependable operation","Practical value option"],price:1155,image:xD}],Hy="/assets/Liberty-forged-Spring-Logo--fe7368-jCFvH3If.webp",_D="Pgds2020!",mu="pgds_premium_access_unlocked",xt=-1,ml=e=>
300`$${e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`,pl=({label:e,placeholder:t,value:r,onChange:n,options:o})=>a.jsxs("div",{children:[a.jsx("label",{className:"block text-xs uppercase tracking-[0.2em] text-amber-500/80 mb-2 font-semibold",children:e}),a.jsxs("div",{className:"relative",children:[a.jsxs("select",{value:r,onChange:s=>n(Number(s.target.value)),className:"w-full appearance-none px-4 py-4 rounded-lg bg-zinc-900 border border-amber-500/30 text-zinc-100 text-base focus:border-amber-400 focus:ring-2 focus:ring-amber-400/20 transition-all outline-none",children:[a.jsx("option",{value:xt,disabled:!0,className:"bg-zinc-900 text-zinc-500",children:t}),o.map((s,i)=>a.jsx("option",{value:i,className:"bg-zinc-900",children:s},s))]}),a.jsx(Xx,{className:"w-4 h-4 text-amber-500 absolute right-4 top-1/2 -translate-y-1/2 pointer-events-none"})]})]}),ED=()=>{const[e,t]=b.useState(!1),[r,n]=b.useState(!0),[o,s]=b.useState(""),[i,l]=b.useState(""),[c,d]=b.useState(xt),[u,h]=b.useState(xt),[p,m]=b.useState(xt),[v,y]=b.useState(xt),x=()=>{d(xt),h(xt),m(xt),y(xt)};b.useEffect(()=>{window.localStorage.getItem(mu)==="true"&&t(!0),n(!1)},[]);const g=j=>{j.preventDefault(),l(""),o===_D?(window.localStorage.setItem(mu,"true"),x(),t(!0)):l("Incorrect access code.")},f=()=>{window.localStorage.removeItem(mu),t(!1),s("")},w=c!==xt&&u!==xt&&p!==xt&&v!==xt,k=w?CD(c,u,p,v):null;return r?a.jsx("div",{className:"min-h-screen bg-black"}):e?a.jsxs("div",{className:"min-h-screen bg-black scroll-smooth",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Premium Spring & Opener Selection"}),a.jsx("meta",{name:"robots",content:"noindex, nofollow"})]}),a.jsx("div",{className:"fixed top-4 right-4 z-50",children:a.jsxs("button",{onClick:f,className:"flex items-center gap-2 bg-black/50 backdrop-blur border border-white/20 rounded-full px-4 py-2 text-xs text-zinc-200 hover:text-amber-400 transition-colors",children:[a.jsx(DC,{className:"w-3.5 h-3.5"})," Lock"]})}),a.jsxs("section",{className:"min-h-[100svh] flex flex-col items-center justify-center px-6 py-16 bg-gradient-to-b from-black via-zinc-950 to-zinc-900 text-center",children:[a.jsx("p",{className:"text-amber-500 text-xs uppercase tracking-[0.35em] mb-4",children:"Private Selection"}),a.jsx("h1",{className:"font-heading text-3xl sm:text-4xl text-white mb-4 leading-tight",children:"Premium Spring & Opener Selection"}),a.jsx("p",{className:"text-zinc-400 text-base max-w-sm mx-auto mb-12",children:"A curated menu of premium spring and opener options."}),a.jsxs("div",{className:"w-full max-w-sm space-y-4",children:[a.jsx("a",{href:"#liberty-forge-section",className:"block",children:a.jsxs("div",{className:"rounded-xl border border-amber-500/30 bg-zinc-900/60 px-6 py-6 hover:border-amber-400/60 transition-colors",children:[a.jsx("p",{className:"text-amber-400 text-xs uppercase tracking-[0.25em] mb-1",children:"Liberty Forge"}),a.jsx("p",{className:"text-white font-heading text-lg mb-4",children:"Premium Garage Door Springs"}),a.jsx("span",{className:"inline-block text-sm text-amber-300 border border-amber-400/40 rounded-full px-5 py-2",children:"View Liberty Forge Springs"})]})}),a.jsx("a",{href:"#liftmaster-section",className:"block",children:a.jsxs("div",{className:"rounded-xl border border-white/15 bg-zinc-900/60 px-6 py-6 hover:border-red-500/50 transition-colors",children:[a.jsx("p",{className:"text-red-500 text-xs uppercase tracking-[0.25em] mb-1",children:"LiftMaster"}),a.jsx("p",{className:"text-white font-heading text-lg mb-4",children:"Premium Garage Door Openers"}),a.jsx("span",{className:"inline-block text-sm text-zinc-200 border border-white/30 rounded-full px-5 py-2",children:"View LiftMaster Openers"})]})})]})]}),a.jsxs("section",{id:"liberty-forge-section",className:"relative py-20 px-5 bg-gradient-to-b from-zinc-900 via-zinc-950 to-black overflow-hidden",children:[a.jsx("img",{src:Hy,alt:"","aria-hidden":"true",className:"pointer-events-none select-none absolute -right-16 top-10 w-72 opacity-[0.06] blur-[1px]"}),a.jsxs("div",{className:"relative max-w-md mx-auto text-center mb-12",children:[a.jsx("img",{src:Hy,alt:"Liberty Forge",className:"w-32 h-32 mx-auto mb-6 rounded-full object-cover shadow-[0_0_40px_rgba(217,119,6,0.25)] border border-amber-500/30"}),a.jsx("h2",{className:"font-heading text-2xl sm:text-3xl text-white mb-2 tracking-wide",children:"Liberty Forge Premium Garage Door Springs"}),a.jsx("p",{className:"text-amber-400 text-sm uppercase tracking-[0.2em] mb-6",children:"American-Made. Built for Strength. Lifetime Warranty."}),a.jsx("p",{className:"text-zinc-400 text-sm leading-relaxed max-w-sm mx-auto",children:"Liberty Forge Springs are a premium American-made spring option designed for homeowners who want a stronger, longer-lasting spring solution with lifetime warranty coverage."})]}),a.jsx("div",{className:"relative max-w-md mx-auto",children:a.jsxs("div",{className:"rounded-2xl border border-amber-500/20 bg-black/60 backdrop-blur p-6 sm:p-7 space-y-5 shadow-[0_0_60px_rgba(0,0,0,0.5)]",children:[a.jsx(pl,{label:"Wire Size",placeholder:"Select Wire Size",value:c,onChange:d,options:yj}),a.jsx(pl,{label:"Inside Diameter",placeholder:"Select Inside Diameter",value:u,onChange:h,options:vj}),a.jsx(pl,{label:"Spring Length",placeholder:"Select Spring Length",value:p,onChange:m,options:wj}),a.jsx(pl,{label:"Quantity",placeholder:"Select Quantity",value:v,onCh
300ange:y,options:xj}),a.jsx("div",{className:"text-center pt-5 border-t border-amber-500/20",children:w?a.jsxs("p",{className:"text-4xl sm:text-5xl font-bold text-amber-400 tracking-tight",children:["Price: ",ml(k)]}):a.jsx("p",{className:"text-lg text-zinc-500 tracking-wide",children:"Select all options above"})})]})})]}),a.jsxs("section",{id:"liftmaster-section",className:"py-20 px-5 bg-white",children:[a.jsxs("div",{className:"max-w-md mx-auto text-center mb-12",children:[a.jsx("p",{className:"text-red-600 text-xs uppercase tracking-[0.3em] mb-2 font-semibold",children:"LiftMaster"}),a.jsx("h2",{className:"font-heading text-2xl sm:text-3xl text-black mb-3",children:"LiftMaster Premium Opener Collection"}),a.jsx("p",{className:"text-gray-500 text-sm leading-relaxed",children:"A curated selection of premium smart, quiet, powerful, and wall-mounted opener options."})]}),a.jsx("div",{className:"max-w-md mx-auto space-y-6",children:By.map(j=>a.jsxs("div",{className:`rounded-2xl p-5 sm:p-6 bg-white ${j.highlight?"border-2 border-red-600 shadow-xl scale-[1.02]":"border border-gray-200 shadow-md"}`,children:[j.highlight&&a.jsxs("span",{className:"inline-flex items-center gap-1 bg-red-600 text-white text-[11px] font-bold uppercase tracking-wide px-3 py-1 rounded-full mb-3",children:[a.jsx(op,{className:"w-3 h-3"})," Best Premium Value"]}),!j.highlight&&a.jsx("span",{className:"inline-block bg-gray-100 text-gray-600 text-[11px] font-bold uppercase tracking-wide px-3 py-1 rounded-full mb-3",children:j.positioningLabel}),a.jsx("div",{className:"rounded-xl bg-gray-50 flex items-center justify-center overflow-hidden h-48",children:a.jsx("img",{src:j.image,alt:j.name,className:"w-full h-full object-contain p-4",loading:"lazy"})}),a.jsx("h3",{className:"font-heading text-lg text-black mt-4 mb-1",children:j.name}),a.jsxs("p",{className:"text-xs text-gray-400 mb-4",children:["Model: ",j.model]}),a.jsx("ul",{className:"space-y-1.5 mb-5",children:j.features.map(S=>a.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-600",children:[a.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-red-600 mt-1.5 flex-shrink-0"}),S]},S))}),a.jsxs("p",{className:"text-3xl font-bold text-black",children:["Price
300: ",ml(j.price)]})]},j.name))}),a.jsxs("div",{className:"max-w-md mx-auto mt-14",children:[a.jsx("p",{className:"text-center text-xs uppercase tracking-[0.25em] text-gray-400 mb-5",children:"At a Glance"}),a.jsx("div",{className:"space-y-3",children:By.map(j=>a.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-gray-200 bg-gray-50 px-4 py-3",children:[a.jsxs("div",{children:[a.jsx("p",{className:"text-sm font-semibold text-black",children:j.positioningLabel}),a.jsx("p",{className:"text-xs text-gray-500",children:j.features.slice(0,2).join(" · ")})]}),a.jsx("p",{className:"text-base font-bold text-black whitespace-nowrap ml-4",children:ml(j.price)})]},j.name))})]})]}),a.jsx("div",{className:"bg-white min-h-[70vh] sm:min-h-[85vh] flex items-center justify-center",children:a.jsx("div",{className:"w-16 h-px bg-gray-200"})}),a.jsxs("section",{className:"py-16 px-5 bg-gray-50",children:[a.jsxs("div",{className:"max-w-md mx-auto text-center mb-10",children:[a.jsx("p",{className:"text-gray-400 text-xs uppercase tracking-[0.25em] mb-2",children:"Alternative Value Options"}),a.jsx("p",{className:"text-gray-500 text-sm",children:"Practical options for standard residential doors."})]}),a.jsx("div",{className:"max-w-md mx-auto space-y-5",children:TD.map(j=>a.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-5",children:[a.jsx("div",{className:"rounded-lg bg-gray-100 flex items-center justify-center overflow-hidden h-32",children:a.jsx("img",{src:j.image,alt:j.name,className:"w-full h-full object-contain p-3",loading:"lazy"})}),a.jsx("h3",{className:"text-base font-semibold text-gray-800 mt-4 mb-1",children:j.name}),a.jsx("p",{className:"text-xs text-gray-400 mb-3",children:j.model}),a.jsx("ul",{className:"space-y-1 mb-4",children:j.features.map(S=>a.jsxs("li",{className:"text-xs text-gray-500",children:["• ",S]},S))}),a.jsxs("p",{className:"text-xl font-semibold text-gray-800",children:["Price
300: ",ml(j.price)]})]},j.name))})]}),a.jsx("p",{className:"text-center text-[11px] text-gray-400 bg-gray-50 pb-8 px-5",children:"Prices shown are for private on-site presentation purposes only."})]}):a.jsxs("div",{className:"min-h-screen bg-black flex items-center justify-center px-4",children:[a.jsxs(ie,{children:[a.jsx("title",{children:"Private Access"}),a.jsx("meta",{name:"robots",content:"noindex, nofollow"})]}),a.jsxs("div",{className:"bg-zinc-900 rounded-2xl shadow-2xl border border-amber-500/20 p-8 w-full max-w-sm",children:[a.jsx("div",{className:"flex items-center justify-center mb-6",children:a.jsx("div",{className:"w-14 h-14 rounded-full bg-amber-500/10 flex items-center justify-center",children:a.jsx(OC,{className:"w-6 h-6 text-amber-400"})})}),a.jsx("h1",{className:"font-heading text-xl text-zinc-100 text-center mb-6 tracking-wide",children:"Private Access"}),a.jsxs("form",{onSubmit:g,className:"space-y-4",children:[a.jsx("input",{type:"password",required:!0,value:o,onChange:j=>s(j.target.value),placeholder:"Access Code",className:"w-full px-4 py-3 rounded-lg bg-black border border-amber-500/30 text-zinc-100 placeholder:text-zinc-500 focus:border-amber-400 focus:ring-2 focus:ring-amber-400/20 transition-all outline-none text-center tracking-widest",autoFocus:!0}),i&&a.jsx("p",{className:"text-sm text-red-400 text-center",children:i}),a.jsx(re,{type:"submit",size:"lg",className:"w-full bg-amber-500 hover:bg-amber-400 text-black font-semibold",children:"Unlock"})]})]})]})},ID="/premium-options-private",AD="/sandiego",RD=new dE,PD=()=>a.jsx(hE,{client:RD,children:a.jsxs(z_,{children:[a.jsx(k2,{}),a.jsx(eT,{}),a.jsxs(lI,{children:[a.jsx(pD,{}),a.jsxs(tI,{children:[a.jsx(L,{path:"/",element:a.jsx(pR,{})}),a.jsx(L,{path:"/gallery",element:a.jsx(gO,{})}),a.jsx(L,{path:"/blog",element:a.jsx(fR,{})}),a.jsx(L,{path:"/blog/garage-door-insulation-guide",element:a.jsx(jR,{})}),a.jsx(L,{path:"/blog/signs-garage-door-needs-repair",element:a.jsx(NR,{})}),a.jsx(L,{path:"/blog/choosing-right-garage-door",element:a.jsx(TR,{})}),a.jsx(L,{path:"/blog/smart-garage-door-openers",element:a.jsx(ER,{})}),a.jsx(L,{path:"/blog/garage-door-safety-tips",element:a.jsx(AR,{})}),a.jsx(L,{path:"/blog/extend-garage-door-life",element:a.jsx(PR,{})}),a.jsx(L,{path:"/blog/commercial-vs-residential",element:a.jsx(DR,{})}),a.jsx(L,{path:"/blog/garage-door-spring-replacement-tarzana",element:a.jsx(WR,{})}),a.jsx(L,{path:"/blog/garage-door-repair-cost-tarzana",element:a.jsx(qR,{})}),a.jsx(L,{path:"/blog/torsion-vs-extension-springs-tarzana",element:a.jsx($R,{})}),a.jsx(L,{path:"/blog/noisy-garage-door-sounds-explained-tarzana",element:a.jsx(BR,{})}),a.jsx(L,{path:"/blog/garage-door-heat-warping-tarzana",element:a.jsx(FR,{})}),a.jsx(L,{path:"/blog/garage-door-sensor-problems",element:a.jsx(VR,{})}),a.jsx(L,{path:"/blog/belt-chain-screw-drive-openers",element:a.jsx(KR,{})}),a.jsx(L,{path:"/blog/:slug",element:a.jsx(bR,{})}),a.jsx(L,{path:"/contact",element:a.jsx(wO,{})}),a.jsx(L,{path:"/about",element:a.jsx(SO,{})}),a.jsx(L,{path:"/faq",element:a.jsx(UO,{})}),a.jsx(L,{path:"/privacy-policy",element:a.jsx(bO,{})}),a.jsx(L,{path:"/terms-and-conditions",element:a.jsx(kO,{})}),a.jsx(L,{path:"/disclaimer",element:a.jsx(VO,{})}),a.jsx(L,{path:"/garage-door-repair",element:a.jsx(Cr,{serviceSlug:"garage-door-repair"})}),a.jsx(L,{path:"/garage-door-spring-replacement",element:a.jsx(Cr,{serviceSlug:"garage-door-spring-replacement"})}),a.jsx(L,{path:"/garage-door-opener-repair",element:a.jsx(Cr,{serviceSlug:"garage-door-opener-repair"})}),a.jsx(L,{path:"/garage-door-installation",element:a.jsx(Cr,{serviceSlug:"garage-door-installation"})}),a.jsx(L,{path:"/emergency-garage-door-repair",element:a.jsx(Cr,{serviceSlug:"emergency-garage-door-repair"})}),a.jsx(L,{path:"/off-track-garage-door-repair",element:a.jsx(Cr,{serviceSlug:"off-track-garage-door-repair"})}),a.jsx(L,{path:"/garage-door-cable-repair",element:a.jsx(Cr,{serviceSlug:"garage-door-cable-repair"})}),a.jsx(L,{path:"/garage-door-opener-installation",element:a.jsx(Cr,{serviceSlug:"garage-door-opener-installation"})}),a.jsx(L,{path:"/garage-door-maintenance",element:a.jsx(Cr,{serviceSlug:"garage-door-maintenance"})}),a.jsx(L,{path:"/garage-door-repair-tarzana",element:a.jsx(YO,{})}),a.jsx(L,{path:"/garage-door-repair-encino",element:a.jsx(ae,{citySlug:"encino"})}),a.jsx(L,{path:"/garage-door-repair-woodland-hills",element:a.jsx(ae,{citySlug:"woodland-hills"})}),a.jsx(L,{path:"/garage-door-repair-reseda",element:a.jsx(ae,{citySlug:"reseda"})}),a.jsx(L,{path:"/garage-door-repair-sherman-oaks",element:a.jsx(ae,{citySlug:"sherman-oaks"})}),a.jsx(L,{path:"/garage-door-repair-winnetka",element:a.jsx(ae,{citySlug:"winnetka"})}),a.jsx(L,{path:"/garage-door-repair-van-nuys",element:a.jsx(ae,{citySlug:"van-nuys"})}),a.jsx(L,{path:"/garage-door-repair-calabasas",element:a.jsx(ae,{citySlug:"calabasas"})}),a.jsx(L,{path:"/garage-door-repair-canoga-park",element:a.jsx(ae,{citySlug:"canoga-park"})}),a.jsx(L,{path:"/garage-door-repair-west-hills",element:a.jsx(ae,{citySlug:"west-hills"})}),a.jsx(L,{path:"/garage-door-repair-studio-city",element:a.jsx(ae,{citySlug:"studio-city"})}),a.jsx(L,{path:"/garage-door-repair-north-hollywood",element:a.jsx(ae,{citySlug:"north-hollywood"})}),a.jsx(L,{path:"/garage-door-repair-northridge",element:a.jsx(ae,{citySlug:"northridge"})}),a.jsx(L,{path:"/garage-door-repair-chatsworth",element:a.jsx(ae,{citySlug:"chatsworth"})}),a.jsx(L,{path:"/garage-door-repair-granada-hills",element:a.jsx(ae,{citySlug:"granada-hills"})}),a.jsx(L,{path:"/garage-door-repair-valley-village",element:a.jsx(ae,{citySlug:"valley-village"})}),a.jsx(L,{path:"/garage-door-repair-toluca-lake",element:a.jsx(ae,{citySlug:"toluca-lake"})}),a.jsx(L,{path:"/garage-door-repair-mission-hills",element:a.jsx(ae,{citySlug:"mission-hills"})}),a.jsx(L,{path:"/garage-door-repair-sylmar",element:a.jsx(ae,{citySlug:"sylmar"})}),a.jsx(L,{path:"/garage-door-repair-sun-valley",element:a.jsx(ae,{citySlug:"sun-valley"})}),a.jsx(L,{path:"/garage-door-repair-pacoima",element:a.jsx(ae,{citySlug:"pacoima"})}),a.jsx(L,{path:"/garage-door-repair-arleta",element:a.jsx(ae,{citySlug:"arleta"})}),a.jsx(L,{path:"/garage-door-repair-lake-balboa",element:a.jsx(ae,{citySlug:"lake-balboa"})}),a.jsx(L,{path:"/garage-door-repair-porter-ranch",element:a.jsx(ae,{citySlug:"porter-ranch"})}),a.jsx(L,{path:"/garage-door-repair-universal-city",element:a.jsx(ae,{citySlug:"universal-city"})}),a.jsx(L,{path:"/garage-door-repair-burbank",element:a.jsx(ae,{citySlug:"burbank"})}),a.jsx(L,{path:"/garage-door-repair-beverly-glen",element:a.jsx(ae,{citySlug:"beverly-glen"})}),a.jsx(L,{path:"/garage-door-repair-agoura-hills",element:a.jsx(ae,{citySlug:"agoura-hills"})}),a.jsx(L,{path:"/garage-door-repair-westlake-village",element:a.jsx(ae,{citySlug:"westlake-village"})}),a.jsx(L,{path:"/garage-door-repair-thousand-oaks",element:a.jsx(ae,{citySlug:"thousand-oaks"})}),a.jsx(L,{path:"/garage-door-repair-bel-air",element:a.jsx(ae,{citySlug:"bel-air"})}),a.jsx(L,{path:"/garage-door-repair-brentwood",element:a.jsx(ae,{citySlug:"brentwood"})}),a.jsx(L,{path:"/garage-door-repair-san-dimas",element:a.jsx(ae,{citySlug:"san-dimas"})}),a.jsx(L,{path:"/garage-door-repair-santa-barbara",element:a.jsx(ae,{citySlug:"santa-barbara"})}),a.jsx(L,{path:"/service-areas/san-diego-garage-door-repair",element:a.jsx(dD,{})}),a.jsx(L,{path:AD,element:a.jsx(Np,{to:"/service-areas/san-diego-garage-door-repair",replace:!0})}),a.jsx(L,{path:ID,element:a.jsx(ED,{})}),a.jsx(L,{path:"*",element:a.jsx(mD,{})})]})]})]})});mx(document.getElementById("root")).render(a.jsx(xx,{children:a.jsx(PD,{})}));

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